{"version":3,"file":"static/js/main.f2f8ba8c.js","mappings":"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guN,EACAC,EACAC,EACAkB,EACAjB,EACAC,EACAC,EACAgB,EACAf,EACAC,EACAC,EACAc,EACAC,EACAC,EACAC,EACAC,GAkBA,OAhBA77O,KAAK,GAAKm6O,EACVn6O,KAAK,GAAKo6O,EACVp6O,KAAK,GAAKq6O,EACVr6O,KAAK,GAAKu7O,EACVv7O,KAAK,GAAKs6O,EACVt6O,KAAK,GAAKu6O,EACVv6O,KAAK,GAAKw6O,EACVx6O,KAAK,GAAKw7O,EACVx7O,KAAK,GAAKy6O,EACVz6O,KAAK,GAAK06O,EACV16O,KAAK,IAAM26O,EACX36O,KAAK,IAAMy7O,EACXz7O,KAAK,IAAM07O,EACX17O,KAAK,IAAM27O,EACX37O,KAAK,IAAM47O,EACX57O,KAAK,IAAM67O,EACJ77O,KAAKokO,OACb,CAIDwW,YACET,EACAG,EACAG,EACAiB,EACAtB,EACAG,EACAG,EACAiB,EACAtB,EACAG,EACAG,EACAiB,EACAL,EACAC,EACAC,EACAI,GAkBA,OAhBA77O,KAAK,GAAKm6O,EACVn6O,KAAK,GAAKo6O,EACVp6O,KAAK,GAAKq6O,EACVr6O,KAAK,GAAKu7O,EACVv7O,KAAK,GAAKs6O,EACVt6O,KAAK,GAAKu6O,EACVv6O,KAAK,GAAKw6O,EACVx6O,KAAK,GAAKw7O,EACVx7O,KAAK,GAAKy6O,EACVz6O,KAAK,GAAK06O,EACV16O,KAAK,IAAM26O,EACX36O,KAAK,IAAMy7O,EACXz7O,KAAK,IAAM07O,EACX17O,KAAK,IAAM27O,EACX37O,KAAK,IAAM47O,EACX57O,KAAK,IAAM67O,EACJ77O,KAAKokO,OACb,CAED0X,WAAW11N,GAiBT,OAhBAA,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,IACjBomB,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,GACjBomB,EAAO,GAAKpmB,KAAK,IACjBomB,EAAO,GAAKpmB,KAAK,GACjB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","sources":["../node_modules/@deck.gl/core/src/controllers/controller.ts","../node_modules/@deck.gl/core/src/controllers/map-controller.ts","../node_modules/@deck.gl/core/src/controllers/orbit-controller.ts","../node_modules/@deck.gl/core/src/controllers/orthographic-controller.ts","../node_modules/@deck.gl/core/src/controllers/transition-manager.ts","../node_modules/@deck.gl/core/src/controllers/view-state.ts","../node_modules/@deck.gl/core/src/debug/index.ts","../node_modules/@deck.gl/core/src/effects/lighting/ambient-light.ts","../node_modules/@deck.gl/core/src/effects/lighting/directional-light.ts","../node_modules/@deck.gl/core/src/passes/shadow-pass.ts","../node_modules/@deck.gl/core/src/effects/lighting/lighting-effect.ts","../node_modules/@deck.gl/core/src/effects/lighting/point-light.ts","../node_modules/@deck.gl/core/src/effects/lighting/camera-light.ts","../node_modules/@math.gl/sun/src/suncalc.ts","../node_modules/@deck.gl/core/src/effects/lighting/sun-light.ts","../node_modules/@deck.gl/core/src/passes/screen-pass.ts","../node_modules/@deck.gl/core/src/effects/post-process-effect.ts","../node_modules/@deck.gl/core/src/viewports/orbit-viewport.ts","../node_modules/@deck.gl/core/src/viewports/first-person-viewport.ts","../node_modules/@deck.gl/core/src/controllers/first-person-controller.ts","../node_modules/@deck.gl/core/src/views/first-person-view.ts","../node_modules/@deck.gl/core/src/views/orbit-view.ts","../node_modules/@deck.gl/core/src/controllers/globe-controller.ts","../node_modules/@deck.gl/core/src/views/globe-view.ts","../node_modules/@deck.gl/core/src/lib/attribute/shader-attribute.ts","../node_modules/@deck.gl/core/src/lib/attribute/data-column.ts","../node_modules/@deck.gl/core/src/lib/attribute/gl-utils.ts","../node_modules/@deck.gl/core/src/utils/range.ts","../node_modules/@deck.gl/core/src/lib/attribute/attribute.ts","../node_modules/@deck.gl/core/src/transitions/gpu-interpolation-transition.ts","../node_modules/@deck.gl/core/src/lib/attribute/attribute-transition-manager.ts","../node_modules/@deck.gl/core/src/transitions/gpu-spring-transition.ts","../node_modules/@deck.gl/core/src/lib/attribute/attribute-manager.ts","../node_modules/@deck.gl/core/src/utils/array-utils.ts","../node_modules/@deck.gl/core/src/lib/attribute/attribute-transition-utils.ts","../node_modules/@deck.gl/core/src/lib/composite-layer.ts","../node_modules/@deck.gl/core/src/lib/constants.ts","../node_modules/@deck.gl/core/src/passes/draw-layers-pass.ts","../node_modules/@deck.gl/core/src/lib/deck-renderer.js","../node_modules/@deck.gl/core/src/lib/view-manager.ts","../node_modules/@deck.gl/core/src/passes/mask-pass.ts","../node_modules/@deck.gl/core/src/effects/mask/mask-effect.ts","../node_modules/@deck.gl/core/src/effects/mask/utils.ts","../node_modules/@deck.gl/core/src/lib/effect-manager.ts","../node_modules/@deck.gl/core/src/lib/picking/query-object.ts","../node_modules/@deck.gl/core/src/lib/picking/pick-info.ts","../node_modules/@deck.gl/core/src/lib/deck-picker.ts","../node_modules/@deck.gl/core/src/lib/tooltip.ts","../node_modules/@deck.gl/core/src/utils/json-loader.ts","../node_modules/@deck.gl/core/src/lib/init.ts","../node_modules/mjolnir.js/src/utils/hammer-overrides.ts","../node_modules/mjolnir.js/src/utils/hammer.browser.ts","../node_modules/mjolnir.js/src/inputs/input.ts","../node_modules/mjolnir.js/src/constants.ts","../node_modules/mjolnir.js/src/utils/globals.ts","../node_modules/mjolnir.js/src/inputs/wheel-input.ts","../node_modules/mjolnir.js/src/inputs/move-input.ts","../node_modules/mjolnir.js/src/inputs/key-input.ts","../node_modules/mjolnir.js/src/inputs/contextmenu-input.ts","../node_modules/mjolnir.js/src/utils/event-utils.ts","../node_modules/mjolnir.js/src/utils/event-registrar.ts","../node_modules/mjolnir.js/src/event-manager.ts","../node_modules/@deck.gl/core/src/lib/deck.ts","../node_modules/@deck.gl/core/src/lib/layer-extension.ts","../node_modules/@deck.gl/core/src/lib/resource/resource.ts","../node_modules/@deck.gl/core/src/lib/resource/resource-manager.ts","../node_modules/@deck.gl/core/src/shaderlib/index.ts","../node_modules/@deck.gl/core/src/lib/layer-manager.ts","../node_modules/@deck.gl/core/src/transitions/cpu-interpolation-transition.js","../node_modules/@deck.gl/core/src/transitions/cpu-spring-transition.js","../node_modules/@deck.gl/core/src/lib/uniform-transition-manager.js","../node_modules/@deck.gl/core/src/utils/texture.ts","../node_modules/@deck.gl/core/src/lifecycle/prop-types.ts","../node_modules/@deck.gl/core/src/lifecycle/create-props.ts","../node_modules/@deck.gl/core/src/lifecycle/component.ts","../node_modules/@deck.gl/core/src/lifecycle/component-state.ts","../node_modules/@deck.gl/core/src/lib/layer-state.ts","../node_modules/@deck.gl/core/src/lib/layer.ts","../node_modules/@deck.gl/core/src/lifecycle/constants.ts","../node_modules/@deck.gl/core/src/lifecycle/props.ts","../node_modules/@deck.gl/core/src/passes/layers-pass.ts","../node_modules/@deck.gl/core/src/passes/pass.ts","../node_modules/@deck.gl/core/src/passes/pick-layers-pass.ts","../node_modules/@deck.gl/core/src/shaderlib/picking/picking.ts","../node_modules/@deck.gl/core/src/shaderlib/project/project-functions.ts","../node_modules/@deck.gl/core/src/shaderlib/misc/geometry.ts","../node_modules/@deck.gl/core/src/shaderlib/project/project.glsl.ts","../node_modules/@deck.gl/core/src/shaderlib/project/project.ts","../node_modules/@deck.gl/core/src/shaderlib/project/viewport-uniforms.ts","../node_modules/@deck.gl/core/src/shaderlib/project32/project32.ts","../node_modules/@deck.gl/core/src/shaderlib/shadow/shadow.ts","../node_modules/@deck.gl/core/src/transitions/fly-to-interpolator.ts","../node_modules/@deck.gl/core/src/transitions/linear-interpolator.ts","../node_modules/@deck.gl/core/src/transitions/transition-interpolator.ts","../node_modules/@deck.gl/core/src/transitions/transition.ts","../node_modules/@deck.gl/core/src/utils/assert.ts","../node_modules/@deck.gl/core/src/utils/count.ts","../node_modules/@deck.gl/core/src/utils/deep-equal.ts","../node_modules/@deck.gl/core/src/utils/flatten.ts","../node_modules/@deck.gl/core/src/utils/iterable-utils.ts","../node_modules/@deck.gl/core/src/utils/log.ts","../node_modules/@deck.gl/core/src/utils/math-utils.ts","../node_modules/@deck.gl/core/src/utils/memoize.ts","../node_modules/@deck.gl/core/src/utils/shader.ts","../node_modules/@deck.gl/core/src/utils/tesselator.ts","../node_modules/@deck.gl/core/src/utils/typed-array-manager.ts","../node_modules/@deck.gl/core/src/viewports/globe-viewport.ts","../node_modules/@deck.gl/core/src/viewports/orthographic-viewport.ts","../node_modules/@deck.gl/core/src/viewports/viewport.ts","../node_modules/@deck.gl/core/src/viewports/web-mercator-viewport.ts","../node_modules/@deck.gl/core/src/views/map-view.ts","../node_modules/@deck.gl/core/src/views/orthographic-view.ts","../node_modules/@deck.gl/core/src/utils/positions.ts","../node_modules/@deck.gl/core/src/views/view.ts","../node_modules/@deck.gl/geo-layers/src/great-circle-layer/great-circle-layer.ts","../node_modules/@deck.gl/geo-layers/src/geo-cell-layer/GeoCellLayer.ts","../node_modules/@deck.gl/geo-layers/src/s2-layer/s2-geometry.ts","../node_modules/@deck.gl/geo-layers/src/s2-layer/s2-utils.ts","../node_modules/@deck.gl/geo-layers/src/s2-layer/s2-layer.ts","../node_modules/@deck.gl/geo-layers/src/quadkey-layer/quadkey-utils.ts","../node_modules/@deck.gl/geo-layers/src/quadkey-layer/quadkey-layer.ts","../node_modules/@deck.gl/geo-layers/src/h3-layers/h3-hexagon-layer.ts","../node_modules/@deck.gl/geo-layers/src/h3-layers/h3-cluster-layer.ts","../node_modules/@deck.gl/geo-layers/src/mesh-layer/mesh-layer.ts","../node_modules/@deck.gl/geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts","../node_modules/@deck.gl/geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts","../node_modules/@math.gl/geospatial/src/constants.ts","../node_modules/@math.gl/geospatial/src/type-utils.ts","../node_modules/@math.gl/geospatial/src/ellipsoid/helpers/scale-to-geodetic-surface.ts","../node_modules/@math.gl/geospatial/src/ellipsoid/helpers/ellipsoid-transform.ts","../node_modules/@math.gl/geospatial/src/ellipsoid/ellipsoid.ts","../node_modules/@loaders.gl/tiles/src/utils/doubly-linked-list-node.ts","../node_modules/@loaders.gl/tiles/src/utils/doubly-linked-list.ts","../node_modules/@loaders.gl/tiles/src/tileset/tileset-cache.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/frame-state.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/zoom.ts","../node_modules/@loaders.gl/tiles/src/constants.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/bounding-volume.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/tiles-3d-lod.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/i3s-lod.ts","../node_modules/@loaders.gl/tiles/src/utils/managed-array.ts","../node_modules/@loaders.gl/tiles/src/tileset/traversers/tileset-traverser.ts","../node_modules/@loaders.gl/tiles/src/tileset/tile-3d.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/3d-tiles-options.ts","../node_modules/@loaders.gl/tiles/src/tileset/traversers/tileset-3d-traverser.ts","../node_modules/@loaders.gl/tiles/src/tileset/traversers/i3s-pending-tiles-register.ts","../node_modules/@loaders.gl/tiles/src/tileset/traversers/i3s-tile-manager.ts","../node_modules/@loaders.gl/tiles/src/tileset/traversers/i3s-tileset-traverser.ts","../node_modules/@loaders.gl/tiles/src/tileset/tileset-3d.ts","../node_modules/@loaders.gl/tiles/src/tileset/helpers/transform-utils.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/utils/version.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/constants.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-utils.ts","../node_modules/@loaders.gl/math/src/geometry/constants.ts","../node_modules/@loaders.gl/math/src/geometry/gl/gl-type.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/classes/tile-3d-feature-table.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/classes/helpers/tile-3d-accessor-utils.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/classes/tile-3d-batch-table-hierarchy.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/classes/tile-3d-batch-table.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-3d-tile-header.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-3d-tile-tables.ts","../node_modules/@loaders.gl/math/src/geometry/colors/rgb565.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/normalize-3d-tile-colors.ts","../node_modules/@loaders.gl/math/src/geometry/compression/attribute-compression.ts","../node_modules/@loaders.gl/math/src/geometry/utils/assert.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/normalize-3d-tile-normals.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/normalize-3d-tile-positions.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-point-cloud.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-3d-tile-gltf-view.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-batched-model.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-instanced-model.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-composite.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-gltf.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-3d-tile-subtree.ts","../node_modules/@loaders.gl/3d-tiles/src/tile-3d-subtree-loader.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/helpers/parse-3d-implicit-tiles.ts","../node_modules/@loaders.gl/3d-tiles/src/lib/parsers/parse-3d-tile-header.ts","../node_modules/@loaders.gl/3d-tiles/src/tiles-3d-loader.ts","../node_modules/@deck.gl/geo-layers/src/tile-3d-layer/tile-3d-layer.ts","../node_modules/@loaders.gl/terrain/src/lib/utils/version.ts","../node_modules/@loaders.gl/terrain/src/terrain-loader.ts","../node_modules/@deck.gl/geo-layers/src/terrain-layer/terrain-layer.ts","../node_modules/@loaders.gl/gis/src/lib/flat-geojson-to-binary.ts","../node_modules/@loaders.gl/mvt/src/helpers/mapbox-util-functions.ts","../node_modules/@loaders.gl/mvt/src/lib/mapbox-vector-tile/vector-tile-feature.ts","../node_modules/@loaders.gl/mvt/src/lib/mapbox-vector-tile/vector-tile-layer.ts","../node_modules/@loaders.gl/mvt/src/lib/mapbox-vector-tile/vector-tile.ts","../node_modules/@loaders.gl/mvt/src/helpers/binary-util-functions.ts","../node_modules/@loaders.gl/mvt/src/lib/binary-vector-tile/vector-tile-feature.ts","../node_modules/@loaders.gl/mvt/src/lib/binary-vector-tile/vector-tile-layer.ts","../node_modules/@loaders.gl/mvt/src/lib/binary-vector-tile/vector-tile.ts","../node_modules/@loaders.gl/mvt/src/lib/parse-mvt.ts","../node_modules/@loaders.gl/mvt/src/mvt-loader.ts","../node_modules/@loaders.gl/gis/src/lib/binary-to-geojson.ts","../node_modules/@deck.gl/extensions/src/clip/clip.ts","../node_modules/@deck.gl/geo-layers/src/mvt-layer/coordinate-transform.ts","../node_modules/@deck.gl/geo-layers/src/mvt-layer/find-index-binary.ts","../node_modules/@deck.gl/geo-layers/src/mvt-layer/mvt-layer.ts","../node_modules/@deck.gl/geo-layers/src/geohash-layer/geohash-utils.ts","../node_modules/@deck.gl/geo-layers/src/geohash-layer/geohash-layer.ts","../node_modules/@deck.gl/geo-layers/src/tile-layer/tile-2d-header.ts","../node_modules/@deck.gl/geo-layers/src/tile-layer/tile-layer.ts","../node_modules/@deck.gl/geo-layers/src/tile-layer/tileset-2d.ts","../node_modules/@deck.gl/geo-layers/src/tile-layer/tile-2d-traversal.ts","../node_modules/@deck.gl/geo-layers/src/tile-layer/utils.ts","../node_modules/@deck.gl/geo-layers/src/trips-layer/trips-layer.ts","../node_modules/@deck.gl/layers/src/arc-layer/arc-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/arc-layer/arc-layer.ts","../node_modules/@deck.gl/layers/src/arc-layer/arc-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/column-layer/column-geometry.ts","../node_modules/@deck.gl/layers/src/column-layer/column-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/column-layer/column-layer.ts","../node_modules/@deck.gl/layers/src/column-layer/column-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/geojson-layer/sub-layer-map.ts","../node_modules/@deck.gl/layers/src/geojson-layer/geojson.ts","../node_modules/@deck.gl/layers/src/geojson-layer/geojson-layer-props.ts","../node_modules/@deck.gl/layers/src/geojson-layer/geojson-binary.ts","../node_modules/@deck.gl/layers/src/geojson-layer/geojson-layer.ts","../node_modules/@deck.gl/layers/src/icon-layer/icon-manager.ts","../node_modules/@deck.gl/layers/src/icon-layer/icon-layer.ts","../node_modules/@deck.gl/layers/src/icon-layer/icon-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/icon-layer/icon-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/bitmap-layer/create-mesh.ts","../node_modules/@deck.gl/layers/src/bitmap-layer/bitmap-layer-vertex.ts","../node_modules/@deck.gl/layers/src/bitmap-layer/bitmap-layer-fragment.ts","../node_modules/@deck.gl/layers/src/bitmap-layer/bitmap-layer.ts","../node_modules/@deck.gl/layers/src/line-layer/line-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/line-layer/line-layer.ts","../node_modules/@deck.gl/layers/src/line-layer/line-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/column-layer/grid-cell-layer.ts","../node_modules/@deck.gl/layers/src/path-layer/path-tesselator.ts","../node_modules/@deck.gl/layers/src/path-layer/path.ts","../node_modules/@deck.gl/layers/src/path-layer/path-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/path-layer/path-layer.ts","../node_modules/@deck.gl/layers/src/path-layer/path-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/point-cloud-layer/point-cloud-layer.ts","../node_modules/@deck.gl/layers/src/point-cloud-layer/point-cloud-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/polygon-layer/polygon-layer.ts","../node_modules/@deck.gl/layers/src/scatterplot-layer/scatterplot-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/scatterplot-layer/scatterplot-layer.ts","../node_modules/@deck.gl/layers/src/scatterplot-layer/scatterplot-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/polygon.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/polygon-tesselator.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-top.glsl.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-side.glsl.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/solid-polygon-layer.ts","../node_modules/@deck.gl/layers/src/solid-polygon-layer/solid-polygon-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/text-layer/multi-icon-layer/multi-icon-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/text-layer/multi-icon-layer/multi-icon-layer.ts","../node_modules/@deck.gl/layers/src/text-layer/text-background-layer/text-background-layer-vertex.glsl.ts","../node_modules/@deck.gl/layers/src/text-layer/text-background-layer/text-background-layer.ts","../node_modules/@deck.gl/layers/src/text-layer/text-background-layer/text-background-layer-fragment.glsl.ts","../node_modules/@deck.gl/layers/src/text-layer/utils.ts","../node_modules/@deck.gl/layers/src/text-layer/lru-cache.ts","../node_modules/@deck.gl/layers/src/text-layer/font-atlas-manager.ts","../node_modules/@deck.gl/layers/src/text-layer/text-layer.ts","../node_modules/@deck.gl/layers/src/utils.ts","../node_modules/@deck.gl/layers/node_modules/@mapbox/tiny-sdf/index.js","../node_modules/@luma.gl/experimental/src/scenegraph/scenegraph-node.js","../node_modules/@luma.gl/experimental/src/scenegraph/group-node.js","../node_modules/@luma.gl/experimental/src/gltf/gltf-animator.js","../node_modules/@luma.gl/experimental/src/scenegraph/model-node.js","../node_modules/@luma.gl/experimental/src/gltf/create-gltf-model.js","../node_modules/@luma.gl/experimental/src/gltf/gltf-instantiator.js","../node_modules/@deck.gl/mesh-layers/src/scenegraph-layer/gltf-utils.ts","../node_modules/@deck.gl/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts","../node_modules/@deck.gl/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts","../node_modules/@deck.gl/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts","../node_modules/@luma.gl/experimental/src/gltf/create-gltf-objects.js","../node_modules/@deck.gl/mesh-layers/src/simple-mesh-layer/simple-mesh-layer.ts","../node_modules/@deck.gl/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts","../node_modules/@deck.gl/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-fragment.glsl.ts","../node_modules/@deck.gl/mesh-layers/src/utils/matrix.ts","../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@loaders.gl/core/src/javascript-utils/is-type.ts","../node_modules/@loaders.gl/worker-utils/src/lib/env-utils/version.ts","../node_modules/@loaders.gl/worker-utils/src/lib/node/worker_threads-browser.js","../node_modules/@loaders.gl/worker-utils/src/lib/worker-utils/get-loadable-worker-url.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-utils/get-transfer-list.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-farm/worker-thread.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-farm/worker-job.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-farm/worker-pool.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-farm/worker-farm.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-api/get-worker-url.ts","../node_modules/@loaders.gl/loader-utils/src/lib/worker-loader-utils/parse-with-worker.ts","../node_modules/@loaders.gl/core/src/iterators/make-iterator/make-array-buffer-iterator.ts","../node_modules/@loaders.gl/core/src/iterators/make-iterator/make-stream-iterator.ts","../node_modules/@loaders.gl/core/src/iterators/make-iterator/make-iterator.ts","../node_modules/@loaders.gl/core/src/iterators/make-iterator/make-string-iterator.ts","../node_modules/@loaders.gl/core/src/iterators/make-iterator/make-blob-iterator.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/get-data.ts","../node_modules/@loaders.gl/loader-utils/src/lib/iterators/async-iteration.ts","../node_modules/@loaders.gl/core/src/lib/utils/log.ts","../node_modules/@loaders.gl/core/src/lib/api/select-loader.ts","../node_modules/@loaders.gl/core/src/lib/api/parse.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/loader-context.ts","../node_modules/@loaders.gl/worker-utils/src/lib/worker-api/validate-worker-version.ts","../node_modules/@loaders.gl/core/src/lib/api/load.ts","../node_modules/@loaders.gl/core/src/lib/api/register-loaders.ts","../node_modules/@loaders.gl/loader-utils/src/lib/path-utils/file-aliases.ts","../node_modules/@loaders.gl/core/src/lib/fetch/fetch-file.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/normalize-loader.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/loggers.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/option-defaults.ts","../node_modules/@loaders.gl/core/src/lib/loader-utils/option-utils.ts","../node_modules/@loaders.gl/core/src/lib/utils/mime-type-utils.ts","../node_modules/@loaders.gl/core/src/lib/utils/resource-utils.ts","../node_modules/@loaders.gl/core/src/lib/utils/response-utils.ts","../node_modules/@loaders.gl/draco/src/lib/utils/version.ts","../node_modules/@loaders.gl/draco/src/draco-loader.ts","../node_modules/@loaders.gl/schema/src/lib/schema/impl/field.ts","../node_modules/@loaders.gl/schema/src/lib/schema/impl/enum.ts","../node_modules/@loaders.gl/schema/src/lib/schema/impl/type.ts","../node_modules/@loaders.gl/schema/src/category/mesh/deduce-mesh-schema.ts","../node_modules/@loaders.gl/schema/src/lib/arrow/arrow-like-type-utils.ts","../node_modules/@loaders.gl/schema/src/lib/schema/impl/schema.ts","../node_modules/@loaders.gl/schema/src/lib/utils/assert.ts","../node_modules/@loaders.gl/draco/src/lib/utils/get-draco-schema.ts","../node_modules/@loaders.gl/draco/src/lib/draco-parser.ts","../node_modules/@loaders.gl/schema/src/category/mesh/mesh-utils.ts","../node_modules/@loaders.gl/draco/src/lib/draco-module-loader.ts","../node_modules/@loaders.gl/draco/src/index.ts","../node_modules/@loaders.gl/textures/src/lib/parsers/basis-module-loader.ts","../node_modules/@loaders.gl/textures/src/lib/gl-extensions.ts","../node_modules/@loaders.gl/textures/src/lib/utils/texture-formats.ts","../node_modules/ktx-parse/src/constants.ts","../node_modules/@loaders.gl/textures/src/lib/parsers/parse-ktx.ts","../node_modules/@loaders.gl/textures/src/lib/parsers/parse-basis.ts","../node_modules/@loaders.gl/textures/src/basis-loader.ts","../node_modules/@loaders.gl/textures/src/lib/utils/version.ts","../node_modules/@loaders.gl/loader-utils/src/lib/binary-utils/get-first-characters.ts","../node_modules/@loaders.gl/loader-utils/src/lib/parser-utils/parse-json.ts","../node_modules/@loaders.gl/gltf/src/lib/utils/assert.ts","../node_modules/@loaders.gl/gltf/src/lib/gltf-utils/resolve-url.ts","../node_modules/@loaders.gl/gltf/src/lib/gltf-utils/get-typed-array.ts","../node_modules/@loaders.gl/loader-utils/src/lib/binary-utils/memory-copy-utils.ts","../node_modules/@loaders.gl/gltf/src/lib/gltf-utils/gltf-utils.ts","../node_modules/@loaders.gl/gltf/src/lib/api/gltf-scenegraph.ts","../node_modules/@loaders.gl/gltf/src/meshopt/meshopt-decoder.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/EXT_meshopt_compression.ts","../node_modules/@loaders.gl/images/src/lib/category-api/image-format.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/EXT_texture_webp.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/KHR_texture_basisu.ts","../node_modules/@loaders.gl/gltf/src/lib/gltf-utils/gltf-attribute-utils.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/KHR_draco_mesh_compression.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/deprecated/KHR_lights_punctual.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/deprecated/KHR_materials_unlit.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/deprecated/KHR_techniques_webgl.ts","../node_modules/@loaders.gl/gltf/src/lib/api/gltf-extensions.ts","../node_modules/@loaders.gl/gltf/src/lib/extensions/KHR_binary_gltf.ts","../node_modules/@loaders.gl/gltf/src/lib/api/normalize-gltf-v1.ts","../node_modules/@loaders.gl/gltf/src/lib/api/post-process-gltf.ts","../node_modules/@loaders.gl/gltf/src/lib/parsers/parse-glb.ts","../node_modules/@loaders.gl/gltf/src/lib/parsers/parse-gltf.ts","../node_modules/@loaders.gl/gltf/src/gltf-loader.ts","../node_modules/@loaders.gl/gltf/src/lib/utils/version.ts","../node_modules/@loaders.gl/images/src/lib/category-api/image-type.ts","../node_modules/@loaders.gl/images/src/lib/category-api/parsed-image-api.ts","../node_modules/@loaders.gl/images/src/lib/parsers/svg-utils.ts","../node_modules/@loaders.gl/images/src/lib/parsers/parse-to-image.ts","../node_modules/@loaders.gl/images/src/lib/parsers/parse-to-image-bitmap.ts","../node_modules/@loaders.gl/images/src/image-loader.ts","../node_modules/@loaders.gl/images/src/lib/utils/version.ts","../node_modules/@loaders.gl/images/src/lib/parsers/parse-image.ts","../node_modules/@loaders.gl/images/src/lib/parsers/parse-to-node-image.ts","../node_modules/@loaders.gl/images/src/lib/category-api/binary-image-api.ts","../node_modules/@loaders.gl/loader-utils/src/lib/binary-utils/buffer-utils.ts","../node_modules/@loaders.gl/loader-utils/src/lib/binary-utils/array-buffer-utils.ts","../node_modules/@loaders.gl/loader-utils/src/lib/env-utils/assert.ts","../node_modules/@loaders.gl/loader-utils/src/lib/env-utils/globals.ts","../node_modules/@loaders.gl/loader-utils/src/lib/path-utils/path.ts","../node_modules/@loaders.gl/loader-utils/src/lib/request-utils/request-scheduler.ts","../node_modules/@loaders.gl/worker-utils/src/lib/env-utils/assert.ts","../node_modules/@loaders.gl/worker-utils/src/lib/env-utils/globals.ts","../node_modules/@loaders.gl/worker-utils/src/lib/library-utils/library-utils.ts","../node_modules/@luma.gl/constants/src/index.js","../node_modules/@luma.gl/engine/src/geometries/truncated-cone-geometry.js","../node_modules/@luma.gl/engine/src/geometries/cone-geometry.js","../node_modules/@luma.gl/engine/src/geometries/cylinder-geometry.js","../node_modules/@luma.gl/engine/src/geometries/ico-sphere-geometry.js","../node_modules/@luma.gl/engine/src/geometries/plane-geometry.js","../node_modules/@luma.gl/engine/src/geometry/geometry-utils.js","../node_modules/@luma.gl/engine/src/geometries/sphere-geometry.js","../node_modules/@luma.gl/shadertools/src/modules/fp64/fp64-utils.js","../node_modules/@luma.gl/shadertools/src/modules/fp64/fp64-arithmetic.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/fp64/fp64.js","../node_modules/@luma.gl/shadertools/src/modules/fp64/fp64-functions.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/project/project.js","../node_modules/@luma.gl/shadertools/src/modules/dirlight/dirlight.js","../node_modules/@luma.gl/engine/src/animation/timeline.js","../node_modules/@luma.gl/engine/src/geometries/cube-geometry.js","../node_modules/@luma.gl/engine/src/geometry/geometry.js","../node_modules/@luma.gl/webgl/src/classes/query.js","../node_modules/@luma.gl/engine/src/lib/animation-loop.js","../node_modules/@luma.gl/webgl/src/webgl-utils/request-animation-frame.js","../node_modules/@luma.gl/webgl/src/utils/array-utils-flat.js","../node_modules/@luma.gl/webgl/src/classes/vertex-array-object.js","../node_modules/@luma.gl/webgl/src/classes/vertex-array.js","../node_modules/@luma.gl/webgl/src/utils/format-value.js","../node_modules/@luma.gl/webgl/src/debug/debug-vertex-array.js","../node_modules/@luma.gl/webgl/src/debug/debug-uniforms.js","../node_modules/@luma.gl/webgl/src/debug/debug-program-configuration.js","../node_modules/@luma.gl/engine/src/lib/model-utils.js","../node_modules/@luma.gl/engine/src/lib/model.js","../node_modules/@luma.gl/shadertools/src/lib/resolve-modules.js","../node_modules/@luma.gl/shadertools/src/utils/is-old-ie.js","../node_modules/@luma.gl/shadertools/src/utils/webgl-info.js","../node_modules/@luma.gl/shadertools/src/lib/transpile-shader.js","../node_modules/@luma.gl/shadertools/src/lib/assemble-shaders.js","../node_modules/@luma.gl/shadertools/src/lib/platform-defines.js","../node_modules/@luma.gl/engine/src/lib/program-manager.js","../node_modules/@luma.gl/shadertools/src/utils/shader-utils.js","../node_modules/@luma.gl/engine/src/transform/buffer-transform.js","../node_modules/@luma.gl/webgl/src/glsl-utils/get-shader-version.js","../node_modules/@luma.gl/shadertools/src/modules/transform/transform.js","../node_modules/@luma.gl/engine/src/transform/transform-shader-utils.js","../node_modules/@luma.gl/engine/src/transform/texture-transform.js","../node_modules/@luma.gl/engine/src/transform/transform.js","../node_modules/@luma.gl/engine/src/utils/clip-space.js","../node_modules/@luma.gl/experimental/src/gltf/gltf-material-parser.js","../node_modules/@luma.gl/gltools/src/utils/log.js","../node_modules/@luma.gl/gltools/src/utils/assert.js","../node_modules/@luma.gl/gltools/src/utils/webgl-checks.js","../node_modules/@luma.gl/gltools/src/polyfill/polyfill-vertex-array-object.js","../node_modules/@luma.gl/gltools/src/polyfill/get-parameter-polyfill.js","../node_modules/@luma.gl/gltools/src/polyfill/polyfill-table.js","../node_modules/@luma.gl/gltools/src/polyfill/polyfill-context.js","../node_modules/@luma.gl/gltools/src/state-tracker/webgl-parameter-tables.js","../node_modules/@luma.gl/gltools/src/utils/utils.js","../node_modules/@luma.gl/gltools/src/state-tracker/track-context-state.js","../node_modules/@luma.gl/gltools/src/state-tracker/unified-parameter-api.js","../node_modules/@luma.gl/gltools/src/utils/device-pixels.js","../node_modules/@luma.gl/gltools/src/context/context.js","../node_modules/@luma.gl/shadertools/src/lib/constants.js","../node_modules/@luma.gl/shadertools/src/lib/inject-shader.js","../node_modules/@luma.gl/shadertools/src/modules/module-injectors.js","../node_modules/@luma.gl/shadertools/src/lib/filters/prop-types.js","../node_modules/@luma.gl/shadertools/src/lib/shader-module.js","../node_modules/@luma.gl/shadertools/src/modules/fp32/fp32.js","../node_modules/@luma.gl/shadertools/src/modules/lights/lights.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/lights/lights.js","../node_modules/@luma.gl/shadertools/src/modules/pbr/pbr-vertex.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/pbr/pbr.js","../node_modules/@luma.gl/shadertools/src/modules/pbr/pbr-fragment.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/phong-lighting/phong-lighting.glsl.js","../node_modules/@luma.gl/shadertools/src/modules/phong-lighting/phong-lighting.js","../node_modules/@luma.gl/shadertools/src/modules/picking/picking.js","../node_modules/@luma.gl/shadertools/src/utils/assert.js","../node_modules/@luma.gl/webgl/src/classes/accessor.js","../node_modules/@luma.gl/webgl/src/classes/buffer.js","../node_modules/@luma.gl/webgl/src/classes/clear.js","../node_modules/@luma.gl/webgl/src/webgl-utils/format-utils.js","../node_modules/@luma.gl/webgl/src/classes/copy-and-blit.js","../node_modules/@luma.gl/webgl/src/classes/framebuffer.js","../node_modules/@luma.gl/webgl/src/classes/uniforms.js","../node_modules/@luma.gl/webgl/src/classes/program-configuration.js","../node_modules/@luma.gl/webgl/src/classes/program.js","../node_modules/@luma.gl/webgl/src/classes/renderbuffer-formats.js","../node_modules/@luma.gl/webgl/src/classes/renderbuffer.js","../node_modules/@luma.gl/webgl/src/classes/resource.js","../node_modules/@luma.gl/webgl/src/glsl-utils/get-shader-name.js","../node_modules/@luma.gl/webgl/src/glsl-utils/format-glsl-error.js","../node_modules/@luma.gl/webgl/src/glsl-utils/get-shader-type-name.js","../node_modules/@luma.gl/webgl/src/classes/shader.js","../node_modules/@luma.gl/webgl/src/utils/load-file.js","../node_modules/@luma.gl/webgl/src/classes/texture-2d.js","../node_modules/@luma.gl/webgl/src/classes/texture-3d.js","../node_modules/@luma.gl/webgl/src/classes/texture-cube.js","../node_modules/@luma.gl/webgl/src/classes/texture-formats.js","../node_modules/@luma.gl/webgl/src/classes/texture.js","../node_modules/@luma.gl/webgl/src/classes/transform-feedback.js","../node_modules/@luma.gl/webgl/src/features/features.js","../node_modules/@luma.gl/webgl/src/features/webgl-features-table.js","../node_modules/@luma.gl/webgl/src/init.js","../node_modules/@luma.gl/webgl/src/utils/assert.js","../node_modules/@luma.gl/webgl/src/utils/check-props.js","../node_modules/@luma.gl/webgl/src/utils/stub-methods.js","../node_modules/@luma.gl/webgl/src/utils/utils.js","../node_modules/@luma.gl/webgl/src/webgl-utils/attribute-utils.js","../node_modules/@luma.gl/webgl/src/webgl-utils/constants-to-keys.js","../node_modules/@luma.gl/webgl/src/webgl-utils/texture-utils.js","../node_modules/@luma.gl/webgl/src/webgl-utils/typed-array-utils.js","../node_modules/@math.gl/core/src/classes/base/math-array.ts","../node_modules/@math.gl/core/src/classes/base/matrix.ts","../node_modules/@math.gl/core/src/classes/base/vector.ts","../node_modules/@math.gl/core/src/classes/matrix3.ts","../node_modules/@math.gl/core/src/classes/matrix4.ts","../node_modules/gl-matrix/esm/quat.js","../node_modules/@math.gl/core/src/classes/quaternion.ts","../node_modules/@math.gl/core/src/classes/spherical-coordinates.ts","../node_modules/@math.gl/core/src/classes/vector2.ts","../node_modules/@math.gl/core/src/classes/vector3.ts","../node_modules/@math.gl/core/src/classes/vector4.ts","../node_modules/@math.gl/core/src/lib/assert.ts","../node_modules/@math.gl/core/src/lib/common.ts","../node_modules/@math.gl/core/src/lib/gl-matrix-extras.ts","../node_modules/@math.gl/core/src/lib/math-utils.ts","../node_modules/@math.gl/core/src/lib/validators.ts","../node_modules/@math.gl/culling/src/constants.ts","../node_modules/@math.gl/culling/src/lib/bounding-volumes/axis-aligned-bounding-box.ts","../node_modules/@math.gl/culling/src/lib/bounding-volumes/bounding-sphere.ts","../node_modules/@math.gl/culling/src/lib/bounding-volumes/oriented-bounding-box.ts","../node_modules/@math.gl/culling/src/lib/plane.ts","../node_modules/@math.gl/culling/src/lib/culling-volume.ts","../node_modules/@math.gl/culling/src/lib/perspective-off-center-frustum.ts","../node_modules/@math.gl/culling/src/lib/algorithms/bounding-sphere-from-points.ts","../node_modules/@math.gl/culling/src/lib/algorithms/compute-eigen-decomposition.ts","../node_modules/@math.gl/culling/src/lib/algorithms/bounding-box-from-points.ts","../node_modules/@math.gl/polygon/src/polygon-utils.ts","../node_modules/@math.gl/polygon/src/earcut.ts","../node_modules/@math.gl/polygon/src/lineclip.ts","../node_modules/@math.gl/polygon/src/utils.ts","../node_modules/@math.gl/polygon/src/cut-by-grid.ts","../node_modules/@math.gl/polygon/src/cut-by-mercator-bounds.ts","../node_modules/@math.gl/web-mercator/src/math-utils.ts","../node_modules/@math.gl/web-mercator/src/assert.ts","../node_modules/@math.gl/web-mercator/src/web-mercator-utils.ts","../node_modules/@math.gl/web-mercator/src/fit-bounds.ts","../node_modules/@math.gl/web-mercator/src/get-bounds.ts","../node_modules/@math.gl/web-mercator/src/web-mercator-viewport.ts","../node_modules/@math.gl/web-mercator/src/normalize-viewport-props.ts","../node_modules/@math.gl/web-mercator/src/fly-to-viewport.ts","../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/icons-material/Close.js","../node_modules/@mui/icons-material/DarkModeRounded.js","../node_modules/@mui/icons-material/Delete.js","../node_modules/@mui/icons-material/Edit.js","../node_modules/@mui/icons-material/EmergencyShare.js","../node_modules/@mui/icons-material/KeyboardArrowDownRounded.js","../node_modules/@mui/icons-material/KeyboardArrowUpRounded.js","../node_modules/@mui/icons-material/LightModeRounded.js","../node_modules/@mui/icons-material/LocalFireDepartment.js","../node_modules/@mui/icons-material/LogoutRounded.js","../node_modules/@mui/icons-material/Map.js","../node_modules/@mui/icons-material/Menu.js","../node_modules/@mui/icons-material/Polyline.js","../node_modules/@mui/icons-material/Radar.js","../node_modules/@mui/icons-material/Search.js","../node_modules/@mui/icons-material/ShapeLine.js","../node_modules/@mui/icons-material/SupervisorAccount.js","../node_modules/@mui/icons-material/UndoRounded.js","../node_modules/@mui/icons-material/utils/createSvgIcon.js","../node_modules/@mui/material/node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/@mui/material/node_modules/stylis/src/Utility.js","../node_modules/@mui/material/node_modules/stylis/src/Tokenizer.js","../node_modules/@mui/material/node_modules/stylis/src/Enum.js","../node_modules/@mui/material/node_modules/stylis/src/Serializer.js","../node_modules/@mui/material/node_modules/stylis/src/Parser.js","../node_modules/@mui/material/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/@mui/material/node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js","../node_modules/@mui/material/node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/node_modules/@mui/styled-engine/index.js","../node_modules/@mui/material/node_modules/stylis/src/Middleware.js","../node_modules/@mui/material/node_modules/@mui/system/colorManipulator.js","../node_modules/@mui/material/node_modules/@mui/system/createStyled.js","../node_modules/@mui/material/node_modules/@mui/system/esm/breakpoints.js","../node_modules/@mui/material/node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/material/node_modules/@mui/system/esm/createTheme/createBreakpoints.js","../node_modules/@mui/material/node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/material/node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/material/node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/material/node_modules/@mui/system/esm/merge.js","../node_modules/@mui/material/node_modules/@mui/system/esm/spacing.js","../node_modules/@mui/material/node_modules/@mui/system/esm/memoize.js","../node_modules/@mui/material/node_modules/@mui/system/esm/style.js","../node_modules/@mui/material/node_modules/@mui/system/esm/compose.js","../node_modules/@mui/material/node_modules/@mui/system/esm/borders.js","../node_modules/@mui/material/node_modules/@mui/system/esm/cssGrid.js","../node_modules/@mui/material/node_modules/@mui/system/esm/palette.js","../node_modules/@mui/material/node_modules/@mui/system/esm/sizing.js","../node_modules/@mui/material/node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/material/node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/material/node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/material/node_modules/@mui/system/esm/useThemeWithoutDefault.js","../node_modules/@mui/material/node_modules/@mui/system/esm/useTheme.js","../node_modules/@mui/material/node_modules/@mui/utils/resolveProps/resolveProps.js","../node_modules/@mui/material/node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/material/node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/material/node_modules/@mui/utils/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/material/node_modules/@mui/utils/capitalize/capitalize.js","../node_modules/@mui/material/node_modules/@mui/utils/clamp/clamp.js","../node_modules/@mui/material/node_modules/@mui/utils/composeClasses/composeClasses.js","../node_modules/@mui/material/node_modules/@mui/utils/deepmerge/deepmerge.js","../node_modules/@mui/material/node_modules/@mui/utils/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/material/node_modules/@mui/utils/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/material/node_modules/@mui/utils/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/material/node_modules/@mui/utils/getDisplayName/getDisplayName.js","../node_modules/@mui/material/node_modules/@mui/utils/isMuiElement/isMuiElement.js","../node_modules/@mui/material/styles/createMixins.js","../node_modules/@mui/material/colors/common.js","../node_modules/@mui/material/colors/grey.js","../node_modules/@mui/material/colors/purple.js","../node_modules/@mui/material/colors/red.js","../node_modules/@mui/material/colors/orange.js","../node_modules/@mui/material/colors/blue.js","../node_modules/@mui/material/colors/lightBlue.js","../node_modules/@mui/material/colors/green.js","../node_modules/@mui/material/styles/createPalette.js","../node_modules/@mui/material/styles/createTypography.js","../node_modules/@mui/material/styles/shadows.js","../node_modules/@mui/material/styles/createTransitions.js","../node_modules/@mui/material/styles/zIndex.js","../node_modules/@mui/material/styles/createTheme.js","../node_modules/@mui/material/styles/defaultTheme.js","../node_modules/@mui/material/styles/identifier.js","../node_modules/@mui/material/styles/slotShouldForwardProp.js","../node_modules/@mui/material/styles/rootShouldForwardProp.js","../node_modules/@mui/material/styles/styled.js","../node_modules/@mui/material/styles/useThemeProps.js","../node_modules/@mui/material/utils/capitalize.js","../node_modules/@mui/material/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/SvgIcon/SvgIcon.js","../node_modules/@mui/material/utils/createSvgIcon.js","../node_modules/@mui/material/utils/createChainedFunction.js","../node_modules/@mui/material/node_modules/@mui/utils/createChainedFunction/createChainedFunction.js","../node_modules/@mui/material/utils/debounce.js","../node_modules/@mui/material/node_modules/@mui/utils/debounce/debounce.js","../node_modules/@mui/material/utils/deprecatedPropType.js","../node_modules/@mui/material/node_modules/@mui/utils/deprecatedPropType/deprecatedPropType.js","../node_modules/@mui/material/utils/isMuiElement.js","../node_modules/@mui/material/node_modules/@mui/utils/ownerDocument/ownerDocument.js","../node_modules/@mui/material/utils/ownerDocument.js","../node_modules/@mui/material/utils/ownerWindow.js","../node_modules/@mui/material/node_modules/@mui/utils/ownerWindow/ownerWindow.js","../node_modules/@mui/material/utils/requirePropFactory.js","../node_modules/@mui/material/node_modules/@mui/utils/requirePropFactory/requirePropFactory.js","../node_modules/@mui/material/node_modules/@mui/utils/setRef/setRef.js","../node_modules/@mui/material/utils/setRef.js","../node_modules/@mui/material/node_modules/@mui/utils/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/material/utils/useEnhancedEffect.js","../node_modules/@mui/material/node_modules/@mui/utils/useId/useId.js","../node_modules/@mui/material/utils/useId.js","../node_modules/@mui/material/utils/unsupportedProp.js","../node_modules/@mui/material/node_modules/@mui/utils/unsupportedProp/unsupportedProp.js","../node_modules/@mui/material/utils/useControlled.js","../node_modules/@mui/material/node_modules/@mui/utils/useControlled/useControlled.js","../node_modules/@mui/material/node_modules/@mui/utils/useEventCallback/useEventCallback.js","../node_modules/@mui/material/utils/useEventCallback.js","../node_modules/@mui/material/utils/useForkRef.js","../node_modules/@mui/material/node_modules/@mui/utils/useForkRef/useForkRef.js","../node_modules/@mui/material/node_modules/@mui/utils/useTimeout/useTimeout.js","../node_modules/@mui/material/node_modules/@mui/utils/useIsFocusVisible/useIsFocusVisible.js","../node_modules/@mui/material/utils/useIsFocusVisible.js","../node_modules/@mui/material/utils/index.js","../node_modules/@nebula.gl/edit-modes/src/index.ts","../node_modules/@nebula.gl/edit-modes/src/lib/composite-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-90degree-polygon-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-circle-by-diameter-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-circle-from-center-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-ellipse-by-bounding-box-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-ellipse-using-three-points-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-line-string-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-point-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-polygon-by-dragging-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-polygon-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-rectangle-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/draw-rectangle-using-three-points-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/duplicate-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/elevation-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/extend-line-string-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/extrude-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/geojson-edit-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/immutable-feature-collection.ts","../node_modules/@nebula.gl/edit-modes/src/lib/measure-angle-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/measure-area-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/measure-distance-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/modify-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/rotate-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/scale-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/snappable-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/split-polygon-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/three-click-polygon-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/transform-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/translate-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/two-click-polygon-mode.ts","../node_modules/@nebula.gl/edit-modes/src/lib/view-mode.ts","../node_modules/@nebula.gl/edit-modes/src/memoize.ts","../node_modules/@nebula.gl/edit-modes/src/utils.ts","../node_modules/@nebula.gl/layers/src/index.ts","../node_modules/@nebula.gl/layers/src/layers/editable-geojson-layer.ts","../node_modules/@nebula.gl/layers/src/layers/editable-h3-cluster-layer.ts","../node_modules/@nebula.gl/layers/src/layers/editable-layer.ts","../node_modules/@nebula.gl/layers/src/layers/elevated-edit-handle-layer.ts","../node_modules/@nebula.gl/layers/src/layers/junction-scatterplot-layer.ts","../node_modules/@nebula.gl/layers/src/layers/path-marker-layer/arrow-2d-geometry.ts","../node_modules/@nebula.gl/layers/src/layers/path-marker-layer/create-path-markers.ts","../node_modules/@nebula.gl/layers/src/layers/path-marker-layer/path-marker-layer.ts","../node_modules/@nebula.gl/layers/src/layers/path-marker-layer/polyline.ts","../node_modules/@nebula.gl/layers/src/layers/path-outline-layer/path-outline-layer.ts","../node_modules/@nebula.gl/layers/src/layers/selection-layer.ts","../node_modules/@nebula.gl/layers/src/shaderlib/outline/outline.ts","../node_modules/@nebula.gl/layers/src/style.ts","../node_modules/@nebula.gl/layers/src/utils.ts","../node_modules/@probe.gl/env/src/lib/get-browser.ts","../node_modules/@probe.gl/env/src/lib/is-browser.ts","../node_modules/@probe.gl/env/src/lib/is-electron.ts","../node_modules/@probe.gl/env/src/utils/globals.ts","../node_modules/@probe.gl/log/src/utils/local-storage.ts","../node_modules/@probe.gl/log/src/utils/formatters.ts","../node_modules/@probe.gl/log/src/utils/color.ts","../node_modules/@probe.gl/log/src/utils/assert.ts","../node_modules/@probe.gl/env/src/lib/globals.ts","../node_modules/@probe.gl/log/src/utils/hi-res-timestamp.ts","../node_modules/@probe.gl/log/src/log.ts","../node_modules/@probe.gl/log/src/utils/autobind.ts","../node_modules/@probe.gl/stats/src/utils/hi-res-timestamp.ts","../node_modules/@probe.gl/stats/src/lib/stat.ts","../node_modules/@probe.gl/stats/src/lib/stats.ts","../node_modules/@turf/area/dist/js/index.js","../node_modules/@turf/bbox-polygon/dist/js/index.js","../node_modules/@turf/bbox/dist/js/index.js","../node_modules/@turf/bearing/dist/js/index.js","../node_modules/@turf/boolean-clockwise/dist/js/index.js","../node_modules/@turf/boolean-point-in-polygon/dist/js/index.js","../node_modules/@turf/buffer/dist/js/index.js","../node_modules/@turf/center/dist/js/index.js","../node_modules/@turf/centroid/dist/js/index.js","../node_modules/@turf/circle/dist/js/index.js","../node_modules/@turf/clone/dist/js/index.js","../node_modules/@turf/destination/dist/js/index.js","../node_modules/@turf/difference/dist/js/index.js","../node_modules/@turf/distance/dist/js/index.js","../node_modules/@turf/ellipse/dist/js/index.js","../node_modules/@turf/helpers/dist/js/index.js","../node_modules/@turf/intersect/dist/js/index.js","../node_modules/@turf/invariant/dist/js/index.js","../node_modules/@turf/line-intersect/dist/js/index.js","../node_modules/@turf/line-segment/dist/js/index.js","../node_modules/@turf/meta/dist/js/index.js","../node_modules/@turf/nearest-point-on-line/dist/js/index.js","../node_modules/@turf/point-to-line-distance/dist/js/index.js","../node_modules/@turf/polygon-to-line/dist/js/index.js","../node_modules/@turf/rewind/dist/js/index.js","../node_modules/@turf/rhumb-bearing/dist/js/index.js","../node_modules/@turf/rhumb-destination/dist/js/index.js","../node_modules/@turf/rhumb-distance/dist/js/index.js","../node_modules/@turf/transform-rotate/dist/js/index.js","../node_modules/@turf/transform-scale/dist/js/index.js","../node_modules/@turf/transform-translate/dist/js/index.js","../node_modules/@turf/union/dist/js/index.js","../node_modules/call-bind/callBound.js","../node_modules/call-bind/index.js","../node_modules/concaveman/index.js","../node_modules/concaveman/node_modules/rbush/rbush.min.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/constant.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/polygon.js","../node_modules/d3-geo/node_modules/d3-array/src/ascending.js","../node_modules/d3-geo/node_modules/d3-array/src/bisect.js","../node_modules/d3-geo/node_modules/d3-array/src/bisector.js","../node_modules/d3-geo/node_modules/d3-array/src/array.js","../node_modules/d3-geo/node_modules/d3-array/src/ticks.js","../node_modules/d3-geo/node_modules/d3-array/src/merge.js","../node_modules/d3-geo/node_modules/d3-array/src/range.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/distance.js","../node_modules/d3-geo/src/contains.js","../node_modules/d3-geo/src/graticule.js","../node_modules/d3-geo/src/interpolate.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/deep-equal/index.js","../node_modules/define-properties/index.js","../node_modules/density-clustering/lib/DBSCAN.js","../node_modules/density-clustering/lib/KMEANS.js","../node_modules/density-clustering/lib/OPTICS.js","../node_modules/density-clustering/lib/PriorityQueue.js","../node_modules/density-clustering/lib/index.js","../node_modules/earcut/src/earcut.js","../node_modules/form-data/lib/browser.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/functions-have-names/index.js","../node_modules/geojson-equality/index.js","../node_modules/geojson-rbush/index.js","../node_modules/geojson-rbush/node_modules/rbush/rbush.min.js","../node_modules/get-intrinsic/index.js","../node_modules/gl-matrix/esm/common.js","../node_modules/gl-matrix/esm/mat3.js","../node_modules/gl-matrix/esm/mat4.js","../node_modules/gl-matrix/esm/vec2.js","../node_modules/gl-matrix/esm/vec3.js","../node_modules/gl-matrix/esm/vec4.js","../node_modules/h3-js/dist/libh3-browser.js","../node_modules/h3-js/lib/bindings.js","../node_modules/h3-js/lib/h3core.js","../node_modules/hammerjs/hammer.js","../node_modules/has-property-descriptors/index.js","../node_modules/has-symbols/index.js","../node_modules/has-symbols/shams.js","../node_modules/has-tostringtag/shams.js","../node_modules/has/src/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/ieee754/index.js","../node_modules/is-arguments/index.js","../node_modules/is-date-object/index.js","../node_modules/is-regex/index.js","../node_modules/lodash.throttle/index.js","../node_modules/lodash/lodash.js","../node_modules/long/dist/long.js","../node_modules/@math.gl/core/src/classes/euler.ts","../node_modules/@math.gl/core/src/classes/pose.ts","../node_modules/moment/moment.js","../node_modules/object-assign/index.js","../node_modules/object-is/implementation.js","../node_modules/object-is/index.js","../node_modules/object-is/polyfill.js","../node_modules/object-is/shim.js","../node_modules/object-keys/implementation.js","../node_modules/object-keys/index.js","../node_modules/object-keys/isArguments.js","../node_modules/pbf/index.js","../node_modules/point-in-polygon/flat.js","../node_modules/point-in-polygon/index.js","../node_modules/point-in-polygon/nested.js","../node_modules/polygon-clipping/dist/polygon-clipping.umd.js","../node_modules/rbush/index.js","../node_modules/rbush/node_modules/quickselect/quickselect.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/regexp.prototype.flags/implementation.js","../node_modules/regexp.prototype.flags/index.js","../node_modules/regexp.prototype.flags/polyfill.js","../node_modules/regexp.prototype.flags/shim.js","../node_modules/robust-predicates/umd/orient2d.min.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/skmeans/distance.js","../node_modules/skmeans/kinit.js","../node_modules/skmeans/main.js","../node_modules/sweetalert2/dist/sweetalert2.all.js","../node_modules/tinyqueue/index.js","../node_modules/turf-jsts/jsts.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@mui/material/node_modules/@babel/runtime/helpers/extends.js","../node_modules/@mui/material/node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@mui/material/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@mui/material/node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@mui/material/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@mui/material/node_modules/clsx/dist/clsx.mjs","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@mui/utils/esm/deepmerge.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage.js","../node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/private-theming/useTheme/ThemeContext.js","../node_modules/@mui/private-theming/useTheme/useTheme.js","../node_modules/@mui/private-theming/ThemeProvider/nested.js","../node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js","../node_modules/@mui/system/esm/createTheme/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/breakpoints.js","../node_modules/@mui/utils/esm/capitalize.js","../node_modules/@mui/system/esm/style.js","../node_modules/@mui/system/esm/merge.js","../node_modules/@mui/system/esm/spacing.js","../node_modules/@mui/system/esm/memoize.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme.js","../node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js","../node_modules/@mui/system/esm/cssVars/getInitColorSchemeScript.js","../node_modules/@mui/system/esm/cssVars/useCurrentColorScheme.js","../node_modules/@mui/system/esm/cssVars/createCssVarsProvider.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/colorManipulator.js","../node_modules/@mui/joy/colors/colors.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/joy/className/index.js","../node_modules/@mui/joy/styles/variantUtils.js","../node_modules/@mui/joy/styles/extendTheme.js","../node_modules/@mui/joy/styles/CssVarsProvider.js","../node_modules/@mui/joy/CssBaseline/CssBaseline.js","theme.tsx","data/constants.ts","context/SimulatorContext.ts","context/CreateStore.tsx","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/goober/dist/goober.modern.js","../node_modules/react-hot-toast/src/core/types.ts","../node_modules/react-hot-toast/src/core/utils.ts","../node_modules/react-hot-toast/src/core/store.ts","../node_modules/react-hot-toast/src/core/toast.ts","../node_modules/react-hot-toast/src/core/use-toaster.ts","../node_modules/react-hot-toast/src/components/error.tsx","../node_modules/react-hot-toast/src/components/loader.tsx","../node_modules/react-hot-toast/src/components/checkmark.tsx","../node_modules/react-hot-toast/src/components/toast-icon.tsx","../node_modules/react-hot-toast/src/components/toast-bar.tsx","../node_modules/react-hot-toast/src/components/toaster.tsx","../node_modules/react-hot-toast/src/index.ts","../node_modules/swr/dist/_internal/index.mjs","../node_modules/swr/dist/core/index.mjs","pages/ErrorPage.tsx","../node_modules/react-spinners/esm/helpers/unitConverter.js","../node_modules/react-spinners/esm/helpers/animation.js","../node_modules/react-spinners/esm/PuffLoader.js","pages/LoadingPage.tsx","../node_modules/@mui/system/esm/compose.js","../node_modules/@mui/system/esm/borders.js","../node_modules/@mui/system/esm/display.js","../node_modules/@mui/system/esm/flexbox.js","../node_modules/@mui/system/esm/cssGrid.js","../node_modules/@mui/system/esm/positions.js","../node_modules/@mui/system/esm/palette.js","../node_modules/@mui/system/esm/shadows.js","../node_modules/@mui/system/esm/sizing.js","../node_modules/@mui/system/esm/typography.js","../node_modules/@mui/system/esm/getThemeValue.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/setRef.js","../node_modules/@mui/utils/esm/useForkRef.js","../node_modules/@mui/base/utils/isHostComponent.js","../node_modules/@mui/base/utils/appendOwnerState.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/@mui/base/utils/extractEventHandlers.js","../node_modules/@mui/base/utils/omitEventHandlers.js","../node_modules/@mui/base/utils/mergeSlotProps.js","../node_modules/@mui/base/utils/resolveComponentProps.js","../node_modules/@mui/base/utils/useSlotProps.js","../node_modules/@mui/styled-engine/index.js","../node_modules/@mui/system/esm/propsToClassKey.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/createStyled.js","../node_modules/@mui/joy/styles/defaultTheme.js","../node_modules/@mui/joy/styles/styleFunctionSx.js","../node_modules/@mui/joy/styles/styled.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/utils/esm/resolveProps.js","../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/joy/styles/useThemeProps.js","../node_modules/@mui/joy/Typography/typographyClasses.js","../node_modules/@mui/joy/Typography/Typography.js","../node_modules/@mui/system/esm/styled.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/joy/Stack/Stack.js","../node_modules/@mui/utils/esm/useId.js","../node_modules/@mui/joy/FormControl/FormControlContext.js","../node_modules/@mui/joy/FormControl/formControlClasses.js","../node_modules/@mui/joy/FormControl/FormControl.js","../node_modules/@mui/joy/FormLabel/formLabelClasses.js","../node_modules/@mui/joy/FormLabel/FormLabel.js","../node_modules/@mui/joy/Input/inputClasses.js","../node_modules/@mui/base/FormControlUnstyled/FormControlUnstyledContext.js","../node_modules/@mui/base/InputUnstyled/useInput.js","../node_modules/@mui/base/FormControlUnstyled/useFormControlUnstyledContext.js","../node_modules/@mui/joy/Input/useForwardedInput.js","../node_modules/@mui/joy/Input/Input.js","../node_modules/@mui/utils/esm/useIsFocusVisible.js","../node_modules/@mui/base/ButtonUnstyled/useButton.js","../node_modules/@mui/joy/styles/ColorInversion.js","../node_modules/@mui/joy/CircularProgress/circularProgressClasses.js","../node_modules/@mui/joy/CircularProgress/CircularProgress.js","../node_modules/@mui/joy/Button/buttonClasses.js","../node_modules/@mui/joy/Button/Button.js","../node_modules/@mui/system/esm/createBox.js","../node_modules/@mui/joy/Box/Box.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/env/classes/FormData.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/react-spinners/esm/RingLoader.js","pages/LoginPage.tsx","../node_modules/@mui/joy/styles/styleUtils.js","../node_modules/@mui/joy/Sheet/sheetClasses.js","../node_modules/@mui/joy/Sheet/Sheet.js","components/Layout.tsx","../node_modules/@mui/base/MenuUnstyled/MenuUnstyledContext.js","../node_modules/@mui/base/SelectUnstyled/SelectUnstyledContext.js","../node_modules/@mui/joy/List/listClasses.js","../node_modules/@mui/joy/List/NestedListContext.js","../node_modules/@mui/joy/List/ComponentListContext.js","../node_modules/@mui/joy/List/RowListContext.js","../node_modules/@mui/joy/List/WrapListContext.js","../node_modules/@mui/joy/List/ListProvider.js","../node_modules/@mui/joy/RadioGroup/RadioGroupContext.js","../node_modules/@mui/joy/List/List.js","../node_modules/@mui/utils/esm/useControlled.js","../node_modules/@mui/utils/esm/useEnhancedEffect.js","../node_modules/@mui/utils/esm/useEventCallback.js","../node_modules/@mui/base/AutocompleteUnstyled/useAutocomplete.js","../node_modules/@mui/utils/esm/ownerDocument.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@mui/base/Portal/Portal.js","../node_modules/@mui/base/PopperUnstyled/popperUnstyledClasses.js","../node_modules/@mui/base/PopperUnstyled/PopperUnstyled.js","../node_modules/@mui/joy/SvgIcon/svgIconClasses.js","../node_modules/@mui/joy/SvgIcon/SvgIcon.js","../node_modules/@mui/joy/utils/createSvgIcon.js","../node_modules/@mui/joy/internal/svg-icons/Close.js","../node_modules/@mui/joy/internal/svg-icons/ArrowDropDown.js","../node_modules/@mui/joy/IconButton/iconButtonClasses.js","../node_modules/@mui/joy/IconButton/IconButton.js","../node_modules/@mui/joy/Chip/chipClasses.js","../node_modules/@mui/joy/Chip/ChipContext.js","../node_modules/@mui/joy/Chip/Chip.js","../node_modules/@mui/joy/internal/svg-icons/Cancel.js","../node_modules/@mui/joy/ChipDelete/chipDeleteClasses.js","../node_modules/@mui/joy/ChipDelete/ChipDelete.js","../node_modules/@mui/joy/ListSubheader/listSubheaderClasses.js","../node_modules/@mui/joy/ListSubheader/ListSubheaderContext.js","../node_modules/@mui/joy/ListSubheader/ListSubheader.js","../node_modules/@mui/utils/esm/isMuiElement.js","../node_modules/@mui/joy/ListItem/listItemClasses.js","../node_modules/@mui/joy/ListItem/ListItem.js","../node_modules/@mui/joy/Autocomplete/autocompleteClasses.js","../node_modules/@mui/joy/AutocompleteListbox/AutocompleteListbox.js","../node_modules/@mui/joy/ListItemButton/listItemButtonClasses.js","../node_modules/@mui/joy/ListItemButton/ListItemButtonOrientationContext.js","../node_modules/@mui/joy/ListItemButton/ListItemButton.js","../node_modules/@mui/joy/AutocompleteOption/autocompleteOptionClasses.js","../node_modules/@mui/joy/AutocompleteOption/AutocompleteOption.js","../node_modules/@mui/joy/utils/useSlot.js","../node_modules/@mui/joy/Autocomplete/Autocomplete.js","../node_modules/@mui/joy/Divider/dividerClasses.js","../node_modules/@mui/joy/Divider/Divider.js","../node_modules/@mui/utils/esm/visuallyHidden.js","../node_modules/@mui/base/SliderUnstyled/useSlider.js","../node_modules/@mui/joy/Slider/sliderClasses.js","../node_modules/@mui/joy/Slider/Slider.js","components/sidepane/DetectionSidePane.tsx","../node_modules/@mui/system/esm/Container/createContainer.js","../node_modules/@mui/joy/Container/Container.js","../node_modules/@mui/joy/Tooltip/tooltipClasses.js","../node_modules/@mui/joy/Tooltip/Tooltip.js","helper/stringFormatting.ts","components/sidepane/AircraftSidePane.tsx","context/EnvironmentTypes.ts","components/sidepane/ContainmentSidePane.tsx","../node_modules/@mui/joy/Checkbox/checkboxClasses.js","../node_modules/@mui/joy/internal/svg-icons/Check.js","../node_modules/@mui/joy/internal/svg-icons/HorizontalRule.js","../node_modules/@mui/joy/Checkbox/Checkbox.js","../node_modules/@mui/base/SwitchUnstyled/useSwitch.js","components/sidepane/MapSidePane.tsx","../node_modules/@turf/helpers/dist/es/index.js","../node_modules/@turf/meta/dist/es/index.js","../node_modules/@turf/bbox/dist/es/index.js","../node_modules/@turf/invariant/dist/es/index.js","../node_modules/@turf/boolean-point-in-polygon/dist/es/index.js","../node_modules/@turf/distance/dist/es/index.js","../node_modules/topojson-server/src/object.js","../node_modules/topojson-server/src/hash/point-hash.js","../node_modules/@turf/bezier-spline/dist/es/lib/spline.js","../node_modules/@turf/envelope/dist/es/index.js","../node_modules/@turf/bbox-polygon/dist/es/index.js","../node_modules/@turf/great-circle/dist/es/index.js","../node_modules/@turf/isobands/dist/es/index.js","../node_modules/@turf/polygonize/dist/es/lib/util.js","../node_modules/@turf/polygonize/dist/es/lib/Node.js","../node_modules/@turf/polygonize/dist/es/lib/Edge.js","../node_modules/@turf/polygonize/dist/es/lib/EdgeRing.js","../node_modules/@turf/polygonize/dist/es/lib/Graph.js","../node_modules/@turf/shortest-path/dist/es/index.js","../node_modules/d3-voronoi/src/RedBlackTree.js","../node_modules/d3-voronoi/src/Edge.js","../node_modules/d3-voronoi/src/Cell.js","../node_modules/d3-voronoi/src/Circle.js","../node_modules/d3-voronoi/src/Beach.js","../node_modules/d3-voronoi/src/Diagram.js","../node_modules/@mui/joy/Card/cardClasses.js","../node_modules/@mui/joy/Card/CardContext.js","../node_modules/@mui/joy/Card/Card.js","components/sidepane/SimulatedFiresSidePane.tsx","../node_modules/@mui/icons-material/esm/FlightOutlined.js","../node_modules/@mui/icons-material/esm/PlayCircleSharp.js","../node_modules/@mui/icons-material/esm/SupervisedUserCircle.js","../node_modules/@mui/base/FocusTrap/FocusTrap.js","../node_modules/@mui/utils/esm/ownerWindow.js","../node_modules/@mui/base/ModalUnstyled/ModalManager.js","../node_modules/@mui/utils/esm/getScrollbarSize.js","../node_modules/@mui/joy/Modal/modalClasses.js","../node_modules/@mui/joy/Modal/CloseModalContext.js","../node_modules/@mui/joy/Modal/Modal.js","../node_modules/@mui/joy/ModalClose/modalCloseClasses.js","../node_modules/@mui/joy/ModalDialog/ModalDialogSizeContext.js","../node_modules/@mui/joy/ModalDialog/ModalDialogVariantColorContext.js","../node_modules/@mui/joy/ModalClose/ModalClose.js","components/modals/LoadConfirmationModal.tsx","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v4.js","components/sidepane/InstallationSidePane.tsx","../node_modules/@mui/base/SelectUnstyled/useSelect.types.js","../node_modules/@mui/base/SelectUnstyled/utils.js","../node_modules/@mui/base/ListboxUnstyled/useListbox.types.js","../node_modules/@mui/base/ListboxUnstyled/defaultListboxReducer.js","../node_modules/@mui/base/utils/areArraysEqual.js","../node_modules/@mui/base/ListboxUnstyled/useControllableReducer.js","../node_modules/@mui/base/ListboxUnstyled/useListbox.js","../node_modules/@mui/base/SelectUnstyled/defaultOptionStringifier.js","../node_modules/@mui/base/SelectUnstyled/useSelect.js","../node_modules/@mui/joy/internal/svg-icons/Unfold.js","../node_modules/@mui/joy/Select/selectClasses.js","../node_modules/@mui/joy/Select/Select.js","../node_modules/@mui/joy/Option/optionClasses.js","../node_modules/@mui/joy/Option/Option.js","../node_modules/@mui/material/Table/Tablelvl2Context.js","../node_modules/@mui/material/TableBody/tableBodyClasses.js","../node_modules/@mui/material/TableBody/TableBody.js","hooks/useUserProfile.ts","components/sidepane/UserManagementSidePane.tsx","hooks/useUserList.ts","../node_modules/@mui/system/esm/Unstable_Grid/gridGenerator.js","../node_modules/@mui/system/esm/Unstable_Grid/createGrid.js","../node_modules/@mui/joy/Grid/Grid.js","config/api.ts","components/sidepane/SimulationSidePane.tsx","../node_modules/@mui/joy/LinearProgress/linearProgressClasses.js","../node_modules/@mui/joy/LinearProgress/LinearProgress.js","data/InstallationTypes.ts","components/modals/GenerateRegionModal.tsx","../node_modules/@mui/material/Grid/GridContext.js","../node_modules/@mui/material/Grid/gridClasses.js","../node_modules/@mui/material/Grid/Grid.js","../node_modules/@mui/material/styles/useTheme.js","../node_modules/@mui/icons-material/esm/KeyboardArrowDown.js","components/modals/GenerationDetailModal.tsx","components/sidepane/GeneratedInstallationsSidePane.tsx","data/navigations.tsx","../node_modules/@mui/joy/ListItemDecorator/listItemDecoratorClasses.js","../node_modules/@mui/joy/ListItemDecorator/ListItemDecorator.js","../node_modules/@mui/joy/ListItemContent/listItemContentClasses.js","../node_modules/@mui/joy/ListItemContent/ListItemContent.js","components/navbar/NavItem.tsx","components/navbar/NavListItem.tsx","Rain-Station-inverted.svg","components/navbar/ColorSchemeToggle.tsx","components/navbar/UserProfileMenu.tsx","../node_modules/@mui/material/node_modules/@mui/system/esm/createStyled.js","../node_modules/@mui/material/node_modules/@mui/system/esm/styled.js","../node_modules/@mui/material/node_modules/@mui/system/esm/Unstable_Grid/traverseBreakpoints.js","../node_modules/@mui/material/node_modules/@mui/system/esm/Unstable_Grid/gridGenerator.js","../node_modules/@mui/material/node_modules/@mui/system/esm/Unstable_Grid/createGrid.js","../node_modules/@mui/material/Unstable_Grid2/Grid2.js","../node_modules/@deck.gl/react/src/utils/use-isomorphic-layout-effect.ts","../node_modules/@deck.gl/react/src/utils/inherits-from.ts","../node_modules/@deck.gl/react/src/utils/evaluate-children.ts","../node_modules/@deck.gl/react/src/utils/extract-jsx-layers.ts","../node_modules/@deck.gl/react/src/utils/extract-styles.ts","../node_modules/@deck.gl/react/src/deckgl.ts","../node_modules/@deck.gl/react/src/utils/position-children-under-views.ts","../node_modules/react-map-gl/src/components/use-map.tsx","../node_modules/react-map-gl/src/utils/transform.ts","../node_modules/react-map-gl/src/utils/style-utils.ts","../node_modules/react-map-gl/src/utils/deep-equal.ts","../node_modules/react-map-gl/src/mapbox/mapbox.ts","../node_modules/react-map-gl/src/mapbox/create-ref.ts","../node_modules/react-map-gl/src/utils/use-isomorphic-layout-effect.ts","../node_modules/react-map-gl/src/utils/set-globals.ts","../node_modules/react-map-gl/src/components/map.tsx","../node_modules/react-map-gl/src/utils/apply-react-style.ts","../node_modules/react-map-gl/src/components/marker.ts","../node_modules/react-map-gl/src/components/popup.ts","../node_modules/react-map-gl/src/components/use-control.ts","../node_modules/react-map-gl/src/components/attribution-control.ts","../node_modules/react-map-gl/src/components/fullscreen-control.ts","../node_modules/react-map-gl/src/components/geolocate-control.ts","../node_modules/react-map-gl/src/components/navigation-control.ts","../node_modules/react-map-gl/src/components/scale-control.ts","../node_modules/react-map-gl/src/components/layer.ts","extensions/H3Tileset.ts","config/shared.ts","components/sidepane/SearchLocationBar.tsx","components/WorldContainer.tsx","helpers/comparator.ts","components/navbar/MapInteractionModeButton.tsx","../node_modules/@mui/icons-material/esm/PlayCircleFilled.js","../node_modules/@mui/icons-material/esm/PauseCircleFilled.js","../node_modules/@mui/material/Typography/typographyClasses.js","../node_modules/@mui/material/Typography/Typography.js","components/SimulatorPlayback.tsx","layout/BaseLayout.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"sourcesContent":["// Copyright (c) 2015 Uber Technologies, Inc.\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable max-statements, complexity */\nimport TransitionManager, {TransitionProps} from './transition-manager';\nimport LinearInterpolator from '../transitions/linear-interpolator';\nimport {IViewState} from './view-state';\nimport {ConstructorOf} from '../types/types';\n\nimport type Viewport from '../viewports/viewport';\n\nimport type {EventManager, MjolnirEvent, MjolnirGestureEvent, MjolnirWheelEvent, MjolnirKeyEvent} from 'mjolnir.js';\nimport type {Timeline} from '@luma.gl/core';\n\nconst NO_TRANSITION_PROPS = {\n transitionDuration: 0\n} as const;\n\nconst DEFAULT_INERTIA = 300;\nconst INERTIA_EASING = t => 1 - (1 - t) * (1 - t);\n\nconst EVENT_TYPES = {\n WHEEL: ['wheel'],\n PAN: ['panstart', 'panmove', 'panend'],\n PINCH: ['pinchstart', 'pinchmove', 'pinchend'],\n TRIPLE_PAN: ['tripanstart', 'tripanmove', 'tripanend'],\n DOUBLE_TAP: ['doubletap'],\n KEYBOARD: ['keydown']\n} as const;\n\n/** Configuration of how user input is handled */\nexport type ControllerOptions = {\n /** Enable zooming with mouse wheel. Default `true`. */\n scrollZoom?: boolean | {\n /** Scaler that translates wheel delta to the change of viewport scale. Default `0.01`. */\n speed?: number;\n /** Smoothly transition to the new zoom. If enabled, will provide a slightly lagged but smoother experience. Default `false`. */\n smooth?: boolean\n };\n /** Enable panning with pointer drag. Default `true` */\n dragPan?: boolean;\n /** Enable rotating with pointer drag. Default `true` */\n dragRotate?: boolean;\n /** Enable zooming with double click. Default `true` */\n doubleClickZoom?: boolean;\n /** Enable zooming with multi-touch. Default `true` */\n touchZoom?: boolean;\n /** Enable rotating with multi-touch. Use two-finger rotating gesture for horizontal and three-finger swiping gesture for vertical rotation. Default `false` */\n touchRotate?: boolean;\n /** Enable interaction with keyboard. Default `true`. */\n keyboard?:\n | boolean\n | {\n /** Speed of zoom using +/- keys. Default `2` */\n zoomSpeed?: number;\n /** Speed of movement using arrow keys, in pixels. */\n moveSpeed?: number;\n /** Speed of rotation using shift + left/right arrow keys, in degrees. Default 15. */\n rotateSpeedX?: number;\n /** Speed of rotation using shift + up/down arrow keys, in degrees. Default 10. */\n rotateSpeedY?: number;\n };\n /** Drag behavior without pressing function keys, one of `pan` and `rotate`. */\n dragMode?: 'pan' | 'rotate';\n /** Enable inertia after panning/pinching. If a number is provided, indicates the duration of time over which the velocity reduces to zero, in milliseconds. Default `false`. */\n inertia?: boolean | number;\n};\n\nexport type ControllerProps = {\n /** Identifier of the controller */\n id: string;\n /** Viewport x position */\n x: number;\n /** Viewport y position */\n y: number;\n /** Viewport width */\n width: number;\n /** Viewport height */\n height: number;\n} & ControllerOptions & TransitionProps;\n\n/** The state of a controller */\nexport type InteractionState = {\n /** If the view state is in transition */\n inTransition?: boolean;\n /** If the user is dragging */\n isDragging?: boolean;\n /** If the view is being panned, either from user input or transition */\n isPanning?: boolean;\n /** If the view is being rotated, either from user input or transition */\n isRotating?: boolean;\n /** If the view is being zoomed, either from user input or transition */\n isZooming?: boolean;\n}\n\n/** Parameters passed to the onViewStateChange callback */\nexport type ViewStateChangeParameters = {\n /** The next view state, either from user input or transition */\n viewState: Record;\n /** Object describing the nature of the view state change */\n interactionState: InteractionState;\n /** The current view state */\n oldViewState?: Record;\n}\n\nconst pinchEventWorkaround: any = {};\n\nexport default abstract class Controller> {\n abstract get ControllerState(): ConstructorOf;\n abstract get transition(): TransitionProps;\n\n // @ts-expect-error (2564) - not assigned in the constructor\n protected props: ControllerProps;\n protected state: Record = {};\n\n protected transitionManager: TransitionManager;\n protected eventManager: EventManager;\n protected onViewStateChange: (params: ViewStateChangeParameters) => void;\n protected onStateChange: (state: InteractionState) => void;\n protected makeViewport: (opts: Record) => Viewport\n\n private _controllerState?: ControllerState;\n private _events: Record = {};\n private _interactionState: InteractionState = {\n isDragging: false\n };\n private _customEvents: string[] = [];\n private _eventStartBlocked: any = null;\n private _panMove: boolean = false;\n\n protected invertPan: boolean = false;\n protected dragMode: 'pan' | 'rotate' = 'rotate';\n protected inertia: number = 0;\n protected scrollZoom: boolean | {speed?: number; smooth?: boolean} = true;\n protected dragPan: boolean = true;\n protected dragRotate: boolean = true;\n protected doubleClickZoom: boolean = true;\n protected touchZoom: boolean = true;\n protected touchRotate: boolean = false;\n protected keyboard:\n | boolean\n | {\n zoomSpeed?: number; // speed of zoom using +/- keys. Default 2.\n moveSpeed?: number; // speed of movement using arrow keys, in pixels.\n rotateSpeedX?: number; // speed of rotation using shift + left/right arrow keys, in degrees. Default 15.\n rotateSpeedY?: number; // speed of rotation using shift + up/down arrow keys, in degrees. Default 10.\n } = true;\n\n constructor(opts: {\n timeline: Timeline,\n eventManager: EventManager;\n makeViewport: (opts: Record) => Viewport;\n onViewStateChange: (params: ViewStateChangeParameters) => void;\n onStateChange: (state: InteractionState) => void;\n }) {\n this.transitionManager = new TransitionManager({\n ...opts,\n getControllerState: props => new this.ControllerState(props),\n onViewStateChange: this._onTransition.bind(this),\n onStateChange: this._setInteractionState.bind(this)\n });\n\n this.handleEvent = this.handleEvent.bind(this);\n\n this.eventManager = opts.eventManager;\n this.onViewStateChange = opts.onViewStateChange || (() => {});\n this.onStateChange = opts.onStateChange || (() => {});\n this.makeViewport = opts.makeViewport;\n }\n\n set events(customEvents) {\n this.toggleEvents(this._customEvents, false);\n this.toggleEvents(customEvents, true);\n this._customEvents = customEvents;\n // Make sure default events are not overwritten\n if (this.props) {\n this.setProps(this.props);\n }\n }\n\n finalize() {\n for (const eventName in this._events) {\n if (this._events[eventName]) {\n // @ts-ignore (2345) event type string cannot be assifned to enum\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager?.off(eventName, this.handleEvent);\n }\n }\n this.transitionManager.finalize();\n }\n\n /**\n * Callback for events\n */\n handleEvent(event: MjolnirEvent) {\n // Force recalculate controller state\n this._controllerState = undefined;\n const eventStartBlocked = this._eventStartBlocked;\n\n switch (event.type) {\n case 'panstart':\n return eventStartBlocked ? false : this._onPanStart(event);\n case 'panmove':\n return this._onPan(event);\n case 'panend':\n return this._onPanEnd(event);\n case 'pinchstart':\n return eventStartBlocked ? false : this._onPinchStart(event);\n case 'pinchmove':\n return this._onPinch(event);\n case 'pinchend':\n return this._onPinchEnd(event);\n case 'tripanstart':\n return eventStartBlocked ? false : this._onTriplePanStart(event);\n case 'tripanmove':\n return this._onTriplePan(event);\n case 'tripanend':\n return this._onTriplePanEnd(event);\n case 'doubletap':\n return this._onDoubleTap(event);\n case 'wheel':\n return this._onWheel(event);\n case 'keydown':\n return this._onKeyDown(event);\n default:\n return false;\n }\n }\n\n /* Event utils */\n // Event object: http://hammerjs.github.io/api/#event-object\n get controllerState(): ControllerState {\n this._controllerState = this._controllerState || new this.ControllerState({\n makeViewport: this.makeViewport,\n ...this.props,\n ...this.state\n });\n return this._controllerState ;\n }\n\n getCenter(event: MjolnirGestureEvent | MjolnirWheelEvent) : [number, number] {\n const {x, y} = this.props;\n const {offsetCenter} = event;\n return [offsetCenter.x - x, offsetCenter.y - y];\n }\n\n isPointInBounds(pos: [number, number], event: MjolnirEvent): boolean {\n const {width, height} = this.props;\n if (event && event.handled) {\n return false;\n }\n\n const inside = pos[0] >= 0 && pos[0] <= width && pos[1] >= 0 && pos[1] <= height;\n if (inside && event) {\n event.stopPropagation();\n }\n return inside;\n }\n\n isFunctionKeyPressed(event: MjolnirEvent): boolean {\n const {srcEvent} = event;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n\n isDragging(): boolean {\n return this._interactionState.isDragging || false;\n }\n\n // When a multi-touch event ends, e.g. pinch, not all pointers are lifted at the same time.\n // This triggers a brief `pan` event.\n // Calling this method will temporarily disable *start events to avoid conflicting transitions.\n blockEvents(timeout: number): void {\n /* global setTimeout */\n const timer = setTimeout(() => {\n if (this._eventStartBlocked === timer) {\n this._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n\n /**\n * Extract interactivity options\n */\n setProps(props: ControllerProps) {\n if (props.dragMode) {\n this.dragMode = props.dragMode;\n }\n this.props = props;\n\n if (!('transitionInterpolator' in props)) {\n // Add default transition interpolator\n props.transitionInterpolator = this._getTransitionProps().transitionInterpolator;\n }\n\n this.transitionManager.processViewStateChange(props);\n\n const {inertia} = props;\n this.inertia = Number.isFinite(inertia) ? (inertia as number) : (inertia === true ? DEFAULT_INERTIA : 0);\n\n // TODO - make sure these are not reset on every setProps\n const {\n scrollZoom = true,\n dragPan = true,\n dragRotate = true,\n doubleClickZoom = true,\n touchZoom = true,\n touchRotate = false,\n keyboard = true\n } = props;\n\n // Register/unregister events\n const isInteractive = Boolean(this.onViewStateChange);\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive && (dragPan || dragRotate));\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.TRIPLE_PAN, isInteractive && touchRotate);\n this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && doubleClickZoom);\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);\n\n // Interaction toggles\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n\n updateTransition() {\n this.transitionManager.updateTransition();\n }\n\n toggleEvents(eventNames, enabled) {\n if (this.eventManager) {\n eventNames.forEach(eventName => {\n if (this._events[eventName] !== enabled) {\n this._events[eventName] = enabled;\n if (enabled) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.on(eventName, this.handleEvent);\n } else {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.off(eventName, this.handleEvent);\n }\n }\n });\n }\n }\n\n // Private Methods\n\n /* Callback util */\n // formats map state and invokes callback function\n protected updateViewport(newControllerState: ControllerState, extraProps: Record | null = null, interactionState: InteractionState = {}) {\n const viewState = {...newControllerState.getViewportProps(), ...extraProps};\n\n // TODO - to restore diffing, we need to include interactionState\n const changed = this.controllerState !== newControllerState;\n // const oldViewState = this.controllerState.getViewportProps();\n // const changed = Object.keys(viewState).some(key => oldViewState[key] !== viewState[key]);\n\n this.state = newControllerState.getState();\n this._setInteractionState(interactionState);\n\n if (changed) {\n const oldViewState = this.controllerState && this.controllerState.getViewportProps();\n if (this.onViewStateChange) {\n this.onViewStateChange({viewState, interactionState: this._interactionState, oldViewState});\n }\n }\n }\n\n private _onTransition(params: {viewState: Record, oldViewState: Record}) {\n this.onViewStateChange({...params, interactionState: this._interactionState});\n }\n\n private _setInteractionState(newStates: InteractionState) {\n Object.assign(this._interactionState, newStates);\n this.onStateChange(this._interactionState);\n }\n\n /* Event handlers */\n // Default handler for the `panstart` event.\n protected _onPanStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n let alternateMode = this.isFunctionKeyPressed(event) || event.rightButton || false;\n if (this.invertPan || this.dragMode === 'pan') {\n // invertPan is replaced by props.dragMode, keeping for backward compatibility\n alternateMode = !alternateMode;\n }\n const newControllerState = this.controllerState[alternateMode ? 'panStart' : 'rotateStart']({\n pos\n });\n this._panMove = alternateMode;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n // Default handler for the `panmove` and `panend` event.\n protected _onPan(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMove(event) : this._onPanRotate(event);\n }\n\n protected _onPanEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMoveEnd(event) : this._onPanRotateEnd(event);\n }\n\n // Default handler for panning to move.\n // Called by `_onPan` when panning without function key pressed.\n protected _onPanMove(event: MjolnirGestureEvent): boolean {\n if (!this.dragPan) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.pan({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: true\n });\n return true;\n }\n\n protected _onPanMoveEnd(event: MjolnirGestureEvent): boolean {\n const {inertia} = this;\n if (this.dragPan && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.pan({pos: endPos}).panEnd();\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isPanning: true\n }\n );\n } else {\n const newControllerState = this.controllerState.panEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false\n });\n }\n return true;\n }\n\n // Default handler for panning to rotate.\n // Called by `_onPan` when panning with function key pressed.\n protected _onPanRotate(event: MjolnirGestureEvent): boolean {\n if (!this.dragRotate) {\n return false;\n }\n\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.rotate({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n\n protected _onPanRotateEnd(event): boolean {\n const {inertia} = this;\n if (this.dragRotate && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.rotate({pos: endPos}).rotateEnd();\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isRotating: true\n }\n );\n } else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n\n // Default handler for the `wheel` event.\n protected _onWheel(event: MjolnirWheelEvent): boolean {\n if (!this.scrollZoom) {\n return false;\n }\n event.srcEvent.preventDefault();\n\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const {speed = 0.01, smooth = false} = this.scrollZoom === true ? {} : this.scrollZoom;\n const {delta} = event;\n\n // Map wheel delta to relative scale\n let scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n\n const newControllerState = this.controllerState.zoom({pos, scale});\n this.updateViewport(\n newControllerState,\n {...this._getTransitionProps({around: pos}), transitionDuration: smooth ? 250 : 1},\n {\n isZooming: true,\n isPanning: true\n }\n );\n return true;\n }\n\n protected _onTriplePanStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.rotateStart({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n protected _onTriplePan(event: MjolnirGestureEvent): boolean {\n if (!this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n\n const pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n\n const newControllerState = this.controllerState.rotate({pos});\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n\n protected _onTriplePanEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n const {inertia} = this;\n if (this.touchRotate && inertia && event.velocityY) {\n const pos = this.getCenter(event);\n const endPos: [number, number] = [pos[0], (pos[1] += (event.velocityY * inertia) / 2)];\n const newControllerState = this.controllerState.rotate({pos: endPos});\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isRotating: true\n }\n );\n this.blockEvents(inertia);\n } else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n\n // Default handler for the `pinchstart` event.\n protected _onPinchStart(event: MjolnirGestureEvent): boolean {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const newControllerState = this.controllerState.zoomStart({pos}).rotateStart({pos});\n // hack - hammer's `rotation` field doesn't seem to produce the correct angle\n pinchEventWorkaround._startPinchRotation = event.rotation;\n pinchEventWorkaround._lastPinchEvent = event;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {isDragging: true});\n return true;\n }\n\n // Default handler for the `pinchmove` and `pinchend` events.\n protected _onPinch(event: MjolnirGestureEvent): boolean {\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n\n let newControllerState = this.controllerState;\n if (this.touchZoom) {\n const {scale} = event;\n const pos = this.getCenter(event);\n newControllerState = newControllerState.zoom({pos, scale});\n }\n if (this.touchRotate) {\n const {rotation} = event;\n newControllerState = newControllerState.rotate({\n deltaAngleX: pinchEventWorkaround._startPinchRotation - rotation\n });\n }\n\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: this.touchRotate\n });\n pinchEventWorkaround._lastPinchEvent = event;\n return true;\n }\n\n protected _onPinchEnd(event: MjolnirGestureEvent): boolean {\n if (!this.isDragging()) {\n return false;\n }\n const {inertia} = this;\n const {_lastPinchEvent} = pinchEventWorkaround;\n if (this.touchZoom && inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n const pos = this.getCenter(event);\n let newControllerState = this.controllerState.rotateEnd();\n const z = Math.log2(event.scale);\n const velocityZ =\n (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n const endScale = Math.pow(2, z + (velocityZ * inertia) / 2);\n newControllerState = newControllerState.zoom({pos, scale: endScale}).zoomEnd();\n\n this.updateViewport(\n newControllerState,\n {\n ...this._getTransitionProps({around: pos}),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n },\n {\n isDragging: false,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: false\n }\n );\n this.blockEvents(inertia);\n } else {\n const newControllerState = this.controllerState.zoomEnd().rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n }\n pinchEventWorkaround._startPinchRotation = null;\n pinchEventWorkaround._lastPinchEvent = null;\n return true;\n }\n\n // Default handler for the `doubletap` event.\n protected _onDoubleTap(event: MjolnirGestureEvent): boolean {\n if (!this.doubleClickZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n\n const isZoomOut = this.isFunctionKeyPressed(event);\n\n const newControllerState = this.controllerState.zoom({pos, scale: isZoomOut ? 0.5 : 2});\n this.updateViewport(newControllerState, this._getTransitionProps({around: pos}), {\n isZooming: true,\n isPanning: true\n });\n this.blockEvents(100);\n return true;\n }\n\n // Default handler for the `keydown` event\n protected _onKeyDown(event: MjolnirKeyEvent): boolean {\n if (!this.keyboard) {\n return false;\n }\n const funcKey = this.isFunctionKeyPressed(event);\n // @ts-ignore\n const {zoomSpeed, moveSpeed, rotateSpeedX, rotateSpeedY} = this.keyboard === true ? {} : this.keyboard;\n const {controllerState} = this;\n let newControllerState;\n const interactionState: InteractionState = {};\n\n switch (event.srcEvent.code) {\n case 'Minus':\n newControllerState = funcKey\n ? controllerState.zoomOut(zoomSpeed).zoomOut(zoomSpeed)\n : controllerState.zoomOut(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'Equal':\n newControllerState = funcKey\n ? controllerState.zoomIn(zoomSpeed).zoomIn(zoomSpeed)\n : controllerState.zoomIn(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'ArrowLeft':\n if (funcKey) {\n newControllerState = controllerState.rotateLeft(rotateSpeedX);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveLeft(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowRight':\n if (funcKey) {\n newControllerState = controllerState.rotateRight(rotateSpeedX);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveRight(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowUp':\n if (funcKey) {\n newControllerState = controllerState.rotateUp(rotateSpeedY);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveUp(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowDown':\n if (funcKey) {\n newControllerState = controllerState.rotateDown(rotateSpeedY);\n interactionState.isRotating = true;\n } else {\n newControllerState = controllerState.moveDown(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n default:\n return false;\n }\n this.updateViewport(newControllerState, this._getTransitionProps(), interactionState);\n return true;\n }\n\n protected _getTransitionProps(opts?: any): TransitionProps {\n const {transition} = this;\n\n if (!transition || !transition.transitionInterpolator) {\n return NO_TRANSITION_PROPS;\n }\n\n // Enables Transitions on double-tap and key-down events.\n return opts\n ? {\n ...transition,\n transitionInterpolator: new LinearInterpolator({\n ...opts,\n ...(transition.transitionInterpolator as LinearInterpolator).opts,\n makeViewport: this.controllerState.makeViewport\n })\n }\n : transition;\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller, {ControllerProps} from './controller';\nimport ViewState from './view-state';\nimport {normalizeViewportProps} from '@math.gl/web-mercator';\nimport assert from '../utils/assert';\n\nimport LinearInterpolator from '../transitions/linear-interpolator';\nimport type Viewport from '../viewports/viewport';\n\nconst PITCH_MOUSE_THRESHOLD = 5;\nconst PITCH_ACCEL = 1.2;\n\nexport type MapStateProps = {\n /** Mapbox viewport properties */\n /** The width of the viewport */\n width: number;\n /** The height of the viewport */\n height: number;\n /** The latitude at the center of the viewport */\n latitude: number;\n /** The longitude at the center of the viewport */\n longitude: number;\n /** The tile zoom level of the map. */\n zoom: number;\n /** The bearing of the viewport in degrees */\n bearing?: number;\n /** The pitch of the viewport in degrees */\n pitch?: number;\n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude?: number;\n /** Viewport position */\n position?: [number, number, number];\n\n /** Viewport constraints */\n maxZoom?: number;\n minZoom?: number;\n maxPitch?: number;\n minPitch?: number;\n\n /** Normalize viewport props to fit map height into viewport. Default `true` */\n normalize?: boolean;\n};\n\ntype MapStateInternal = {\n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat?: [number, number];\n /* Center of the zoom when the operation first started */\n startZoomLngLat?: [number, number];\n /* Pointer position when rotation started */\n startRotatePos?: [number, number];\n /** Bearing when current perspective rotate operation started */\n startBearing?: number;\n /** Pitch when current perspective rotate operation started */\n startPitch?: number;\n /** Zoom when current zoom operation started */\n startZoom?: number;\n};\n\n/* Utils */\n\nexport class MapState extends ViewState {\n makeViewport: (props: Record) => Viewport;\n\n constructor(\n options: MapStateProps &\n MapStateInternal & {\n makeViewport: (props: Record) => Viewport;\n }\n ) {\n const {\n /** Mapbox viewport properties */\n /** The width of the viewport */\n width,\n /** The height of the viewport */\n height,\n /** The latitude at the center of the viewport */\n latitude,\n /** The longitude at the center of the viewport */\n longitude,\n /** The tile zoom level of the map. */\n zoom,\n /** The bearing of the viewport in degrees */\n bearing = 0,\n /** The pitch of the viewport in degrees */\n pitch = 0,\n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude = 1.5,\n /** Viewport position */\n position = [0, 0, 0],\n\n /** Viewport constraints */\n maxZoom = 20,\n minZoom = 0,\n maxPitch = 60,\n minPitch = 0,\n\n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat,\n /* Center of the zoom when the operation first started */\n startZoomLngLat,\n /* Pointer position when rotation started */\n startRotatePos,\n /** Bearing when current perspective rotate operation started */\n startBearing,\n /** Pitch when current perspective rotate operation started */\n startPitch,\n /** Zoom when current zoom operation started */\n startZoom,\n\n /** Normalize viewport props to fit map height into viewport */\n normalize = true\n } = options;\n\n assert(Number.isFinite(longitude)); // `longitude` must be supplied\n assert(Number.isFinite(latitude)); // `latitude` must be supplied\n assert(Number.isFinite(zoom)); // `zoom` must be supplied\n\n super(\n {\n width,\n height,\n latitude,\n longitude,\n zoom,\n bearing,\n pitch,\n altitude,\n maxZoom,\n minZoom,\n maxPitch,\n minPitch,\n normalize,\n position\n },\n {\n startPanLngLat,\n startZoomLngLat,\n startRotatePos,\n startBearing,\n startPitch,\n startZoom\n }\n );\n\n this.makeViewport = options.makeViewport;\n }\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startPanLngLat: this._unproject(pos)\n });\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n * @param {[Number, Number], optional} startPos - where the pointer grabbed at\n * the start of the operation. Must be supplied of `panStart()` was not called\n */\n pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): MapState {\n const startPanLngLat = this.getState().startPanLngLat || this._unproject(startPos);\n\n if (!startPanLngLat) {\n return this;\n }\n\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanLngLat, pos);\n\n return this._getUpdatedState(newProps);\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): MapState {\n return this._getUpdatedState({\n startPanLngLat: null\n });\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotateStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY?: number;\n }): MapState {\n const {startRotatePos, startBearing, startPitch} = this.getState();\n\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n let newRotation;\n if (pos) {\n newRotation = this._getNewRotation(pos, startRotatePos, startPitch, startBearing);\n } else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): MapState {\n return this._getUpdatedState({\n startBearing: null,\n startPitch: null\n });\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n zoomStart({pos}: {pos: [number, number]}): MapState {\n return this._getUpdatedState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): MapState {\n // Make sure we zoom around the current mouse position rather than map center\n let {startZoom, startZoomLngLat} = this.getState();\n\n if (!startZoomLngLat) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomLngLat) {\n return this;\n }\n\n const {maxZoom, minZoom} = this.getViewportProps();\n let zoom = (startZoom as number) + Math.log2(scale);\n zoom = clamp(zoom, minZoom, maxZoom);\n\n const zoomedViewport = this.makeViewport({...this.getViewportProps(), zoom});\n\n return this._getUpdatedState({\n zoom,\n ...zoomedViewport.panByPosition(startZoomLngLat, pos)\n });\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): MapState {\n return this._getUpdatedState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n\n zoomIn(speed: number = 2): MapState {\n return this._zoomFromCenter(speed);\n }\n\n zoomOut(speed: number = 2): MapState {\n return this._zoomFromCenter(1 / speed);\n }\n\n moveLeft(speed: number = 100): MapState {\n return this._panFromCenter([speed, 0]);\n }\n\n moveRight(speed: number = 100): MapState {\n return this._panFromCenter([-speed, 0]);\n }\n\n moveUp(speed: number = 100): MapState {\n return this._panFromCenter([0, speed]);\n }\n\n moveDown(speed: number = 100): MapState {\n return this._panFromCenter([0, -speed]);\n }\n\n rotateLeft(speed: number = 15): MapState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n\n rotateRight(speed: number = 15): MapState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n\n rotateUp(speed: number = 10): MapState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n\n rotateDown(speed: number = 10): MapState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n\n shortestPathFrom(viewState: MapState): MapStateProps {\n // const endViewStateProps = new this.ControllerState(endProps).shortestPathFrom(startViewstate);\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {bearing, longitude} = props;\n\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (Math.abs(longitude - fromProps.longitude) > 180) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom} = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n\n // Ensure pitch is within specified range\n const {maxPitch, minPitch, pitch} = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n\n // Normalize viewport props to fit map height into viewport\n const {normalize = true} = props;\n if (normalize) {\n Object.assign(props, normalizeViewportProps(props));\n }\n\n return props;\n }\n\n /* Private methods */\n\n _zoomFromCenter(scale) {\n const {width, height} = this.getViewportProps();\n return this.zoom({\n pos: [width / 2, height / 2],\n scale\n });\n }\n\n _panFromCenter(offset) {\n const {width, height} = this.getViewportProps();\n return this.pan({\n startPos: [width / 2, height / 2],\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n\n _getUpdatedState(newProps): MapState {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n\n _unproject(pos?: [number, number]): [number, number] | undefined {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n\n _getNewRotation(\n pos: [number, number],\n startPos: [number, number],\n startPitch: number,\n startBearing: number\n ): {\n pitch: number;\n bearing: number;\n } {\n const deltaX = pos[0] - startPos[0];\n const deltaY = pos[1] - startPos[1];\n const centerY = pos[1];\n const startY = startPos[1];\n const {width, height} = this.getViewportProps();\n\n const deltaScaleX = deltaX / width;\n let deltaScaleY = 0;\n\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to -1 as we drag upwards\n deltaScaleY = (deltaY / (startY - height)) * PITCH_ACCEL;\n }\n } else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to 1 as we drag upwards\n deltaScaleY = 1 - centerY / startY;\n }\n }\n // clamp deltaScaleY to [-1, 1] so that rotation is constrained between minPitch and maxPitch.\n // deltaScaleX does not need to be clamped as bearing does not have constraints.\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n\n const {minPitch, maxPitch} = this.getViewportProps();\n\n const bearing = startBearing + 180 * deltaScaleX;\n let pitch = startPitch;\n if (deltaScaleY > 0) {\n // Gradually increase pitch\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n } else if (deltaScaleY < 0) {\n // Gradually decrease pitch\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n\n return {\n pitch,\n bearing\n };\n }\n}\n\nexport default class MapController extends Controller {\n ControllerState = MapState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch', 'position'],\n required: ['longitude', 'latitude', 'zoom']\n }\n })\n };\n\n dragMode: 'pan' | 'rotate' = 'pan';\n\n setProps(props: ControllerProps & MapStateProps) {\n props.position = props.position || [0, 0, 0];\n const oldProps = this.props;\n\n super.setProps(props);\n\n const dimensionChanged = !oldProps || oldProps.height !== props.height;\n if (dimensionChanged) {\n // Dimensions changed, normalize the props\n this.updateViewport(\n new this.ControllerState({\n makeViewport: this.makeViewport,\n ...props,\n ...this.state\n })\n );\n }\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller from './controller';\nimport ViewState from './view-state';\nimport {mod} from '../utils/math-utils';\n\nimport type Viewport from '../viewports/viewport';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nexport type OrbitStateProps = {\n width: number;\n height: number;\n target?: number[];\n zoom?: number | number[];\n rotationX?: number;\n rotationOrbit?: number;\n\n /** Viewport constraints */\n maxZoom?: number;\n minZoom?: number;\n minRotationX?: number;\n maxRotationX?: number;\n};\n\ntype OrbitStateInternal = {\n startPanPosition?: number[];\n startRotatePos?: number[];\n startRotationX?: number;\n startRotationOrbit?: number;\n startZoomPosition?: number[];\n startZoom?: number | number[];\n};\n\nexport class OrbitState extends ViewState {\n makeViewport: (props: Record) => Viewport;\n\n constructor(\n options: OrbitStateProps &\n OrbitStateInternal & {\n makeViewport: (props: Record) => Viewport;\n }\n ) {\n const {\n /* Viewport arguments */\n width, // Width of viewport\n height, // Height of viewport\n rotationX = 0, // Rotation around x axis\n rotationOrbit = 0, // Rotation around orbit axis\n target = [0, 0, 0],\n zoom = 0,\n\n /* Viewport constraints */\n minRotationX = -90,\n maxRotationX = 90,\n minZoom = -Infinity,\n maxZoom = Infinity,\n\n /** Interaction states, required to calculate change during transform */\n // Model state when the pan operation first started\n startPanPosition,\n // Model state when the rotate operation first started\n startRotatePos,\n startRotationX,\n startRotationOrbit,\n // Model state when the zoom operation first started\n startZoomPosition,\n startZoom\n } = options;\n\n super(\n {\n width,\n height,\n rotationX,\n rotationOrbit,\n target,\n zoom,\n minRotationX,\n maxRotationX,\n minZoom,\n maxZoom\n },\n {\n startPanPosition,\n startRotatePos,\n startRotationX,\n startRotationOrbit,\n startZoomPosition,\n startZoom\n }\n );\n\n this.makeViewport = options.makeViewport;\n }\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startPanPosition: this._unproject(pos)\n });\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n pan({pos, startPosition}: {pos: [number, number]; startPosition?: number[]}): OrbitState {\n const startPanPosition = this.getState().startPanPosition || startPosition;\n\n if (!startPanPosition) {\n return this;\n }\n\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanPosition, pos);\n\n return this._getUpdatedState(newProps);\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): OrbitState {\n return this._getUpdatedState({\n startPanPosition: null\n });\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n rotateStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startRotationX: this.getViewportProps().rotationX,\n startRotationOrbit: this.getViewportProps().rotationOrbit\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY?: number;\n }): OrbitState {\n const {startRotatePos, startRotationX, startRotationOrbit} = this.getState();\n const {width, height} = this.getViewportProps();\n\n if (!startRotatePos || startRotationX === undefined || startRotationOrbit === undefined) {\n return this;\n }\n\n let newRotation;\n if (pos) {\n let deltaScaleX = (pos[0] - startRotatePos[0]) / width;\n const deltaScaleY = (pos[1] - startRotatePos[1]) / height;\n\n if (startRotationX < -90 || startRotationX > 90) {\n // When looking at the \"back\" side of the scene, invert horizontal drag\n // so that the camera movement follows user input\n deltaScaleX *= -1;\n }\n newRotation = {\n rotationX: startRotationX + deltaScaleY * 180,\n rotationOrbit: startRotationOrbit + deltaScaleX * 180\n };\n } else {\n newRotation = {\n rotationX: startRotationX + deltaAngleY,\n rotationOrbit: startRotationOrbit + deltaAngleX\n };\n }\n\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): OrbitState {\n return this._getUpdatedState({\n startRotationX: null,\n startRotationOrbit: null\n });\n }\n\n // shortest path between two view states\n shortestPathFrom(viewState: OrbitState): OrbitStateProps {\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {rotationOrbit} = props;\n\n if (Math.abs(rotationOrbit - fromProps.rotationOrbit) > 180) {\n props.rotationOrbit = rotationOrbit < 0 ? rotationOrbit + 360 : rotationOrbit - 360;\n }\n\n return props;\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n zoomStart({pos}: {pos: [number, number]}): OrbitState {\n return this._getUpdatedState({\n startZoomPosition: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current target is\n * @param {[Number, Number]} startPos - the target position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): OrbitState {\n let {startZoom, startZoomPosition} = this.getState();\n if (!startZoomPosition) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomPosition = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomPosition) {\n return this;\n }\n const newZoom = this._calculateNewZoom({scale, startZoom});\n const zoomedViewport = this.makeViewport({...this.getViewportProps(), zoom: newZoom});\n\n return this._getUpdatedState({\n zoom: newZoom,\n ...zoomedViewport.panByPosition(startZoomPosition, pos)\n });\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): OrbitState {\n return this._getUpdatedState({\n startZoomPosition: null,\n startZoom: null\n });\n }\n\n zoomIn(speed: number = 2): OrbitState {\n return this._getUpdatedState({\n zoom: this._calculateNewZoom({scale: speed})\n });\n }\n\n zoomOut(speed: number = 2): OrbitState {\n return this._getUpdatedState({\n zoom: this._calculateNewZoom({scale: 1 / speed})\n });\n }\n\n moveLeft(speed: number = 50): OrbitState {\n return this._panFromCenter([-speed, 0]);\n }\n\n moveRight(speed: number = 50): OrbitState {\n return this._panFromCenter([speed, 0]);\n }\n\n moveUp(speed: number = 50): OrbitState {\n return this._panFromCenter([0, -speed]);\n }\n\n moveDown(speed: number = 50): OrbitState {\n return this._panFromCenter([0, speed]);\n }\n\n rotateLeft(speed: number = 15): OrbitState {\n return this._getUpdatedState({\n rotationOrbit: this.getViewportProps().rotationOrbit - speed\n });\n }\n\n rotateRight(speed: number = 15): OrbitState {\n return this._getUpdatedState({\n rotationOrbit: this.getViewportProps().rotationOrbit + speed\n });\n }\n\n rotateUp(speed: number = 10): OrbitState {\n return this._getUpdatedState({\n rotationX: this.getViewportProps().rotationX - speed\n });\n }\n\n rotateDown(speed: number = 10): OrbitState {\n return this._getUpdatedState({\n rotationX: this.getViewportProps().rotationX + speed\n });\n }\n\n /* Private methods */\n\n _unproject(pos?: number[]): number[] | undefined {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n\n // Calculates new zoom\n _calculateNewZoom({\n scale,\n startZoom\n }: {\n scale: number;\n startZoom?: number | number[];\n }): number | number[] {\n const {maxZoom, minZoom} = this.getViewportProps();\n if (startZoom === undefined) {\n startZoom = this.getViewportProps().zoom;\n }\n const zoom = (startZoom as number) + Math.log2(scale);\n return clamp(zoom, minZoom, maxZoom);\n }\n\n _panFromCenter(offset) {\n const {width, height, target} = this.getViewportProps();\n return this.pan({\n startPosition: target,\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n\n _getUpdatedState(newProps): OrbitState {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom, maxRotationX, minRotationX, rotationOrbit} = props;\n\n props.zoom = Array.isArray(zoom)\n ? [clamp(zoom[0], minZoom, maxZoom), clamp(zoom[1], minZoom, maxZoom)]\n : clamp(zoom, minZoom, maxZoom);\n\n props.rotationX = clamp(props.rotationX, minRotationX, maxRotationX);\n if (rotationOrbit < -180 || rotationOrbit > 180) {\n props.rotationOrbit = mod(rotationOrbit + 180, 360) - 180;\n }\n\n return props;\n }\n}\n\nexport default class OrbitController extends Controller {\n ControllerState = OrbitState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['target', 'zoom', 'rotationX', 'rotationOrbit'],\n required: ['target', 'zoom']\n }\n })\n };\n}\n","import {clamp} from '@math.gl/core';\nimport Controller from './controller';\nimport {OrbitState} from './orbit-controller';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nclass OrthographicState extends OrbitState {\n zoomAxis: 'X' | 'Y' | 'all';\n\n constructor(props) {\n super(props);\n\n this.zoomAxis = props.zoomAxis || 'all';\n }\n\n _calculateNewZoom({scale, startZoom}) {\n const {maxZoom, minZoom} = this.getViewportProps();\n if (startZoom === undefined) {\n startZoom = this.getViewportProps().zoom;\n }\n let deltaZoom = Math.log2(scale);\n if (Array.isArray(startZoom)) {\n let [newZoomX, newZoomY] = startZoom;\n switch (this.zoomAxis) {\n case 'X':\n // Scale x only\n newZoomX = clamp(newZoomX + deltaZoom, minZoom, maxZoom);\n break;\n case 'Y':\n // Scale y only\n newZoomY = clamp(newZoomY + deltaZoom, minZoom, maxZoom);\n break;\n default:\n // Lock aspect ratio\n let z = Math.min(newZoomX + deltaZoom, newZoomY + deltaZoom);\n if (z < minZoom) {\n deltaZoom += minZoom - z;\n }\n z = Math.max(newZoomX + deltaZoom, newZoomY + deltaZoom);\n if (z > maxZoom) {\n deltaZoom += maxZoom - z;\n }\n newZoomX += deltaZoom;\n newZoomY += deltaZoom;\n }\n return [newZoomX, newZoomY];\n }\n // Ignore `zoomAxis`\n // `LinearTransitionInterpolator` does not support interpolation between a number and an array\n // So if zoom is a number (legacy use case), new zoom still has to be a number\n return clamp(startZoom + deltaZoom, minZoom, maxZoom);\n }\n}\n\nexport default class OrthographicController extends Controller {\n ControllerState = OrthographicState;\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['target', 'zoom'])\n };\n dragMode: 'pan' | 'rotate' = 'pan';\n\n _onPanRotate() {\n // No rotation in orthographic view\n return false;\n }\n}\n","import Transition, {TransitionSettings as BaseTransitionSettings} from '../transitions/transition';\nimport TransitionInterpolator from '../transitions/transition-interpolator';\nimport type {IViewState} from './view-state';\n\nimport type {Timeline} from '@luma.gl/core';\nimport type {InteractionState} from './controller';\n\nconst noop = () => {};\n\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport const TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3\n} as const;\n\ntype TransitionEvent = 1 | 2 | 3;\n\nexport type TransitionProps = {\n /** Transition duration in milliseconds, default value 0, implies no transition. When using `FlyToInterpolator`, it can also be set to `'auto'`. */\n transitionDuration?: number | 'auto';\n /** An interpolator object that defines the transition behavior between two viewports. */\n transitionInterpolator?: TransitionInterpolator;\n /** Easing function that can be used to achieve effects like \"Ease-In-Cubic\", \"Ease-Out-Cubic\", etc. Default value performs Linear easing. */\n transitionEasing?: (t: number) => number;\n /** Controls how to process a new view state change that occurs during an existing transition. */\n transitionInterruption?: TransitionEvent;\n /** Callback fired when requested transition starts. */\n onTransitionStart?: (transition: Transition) => void;\n /** Callback fired when requested transition is interrupted. */\n onTransitionInterrupt?: (transition: Transition) => void;\n /** Callback fired when requested transition ends. */\n onTransitionEnd?: (transition: Transition) => void;\n};\n\nconst DEFAULT_EASING = t => t;\nconst DEFAULT_INTERRUPTION = TRANSITION_EVENTS.BREAK;\n\ntype TransitionSettings = BaseTransitionSettings & {\n interpolator: TransitionInterpolator;\n easing: (t: number) => number;\n interruption: TransitionEvent;\n startProps: Record;\n endProps: Record;\n};\n\nexport default class TransitionManager> {\n getControllerState: (props: any) => ControllerState;\n props?: TransitionProps;\n propsInTransition: Record | null;\n transition: Transition;\n onViewStateChange: (params: {\n viewState: Record;\n oldViewState: Record;\n }) => void;\n onStateChange: (state: InteractionState) => void;\n\n constructor(opts: {\n timeline: Timeline;\n getControllerState: (props: any) => ControllerState;\n onViewStateChange?: (params: {\n viewState: Record;\n oldViewState: Record;\n }) => void;\n onStateChange?: (state: InteractionState) => void;\n }) {\n this.getControllerState = opts.getControllerState;\n this.propsInTransition = null;\n this.transition = new Transition(opts.timeline);\n\n this.onViewStateChange = opts.onViewStateChange || noop;\n this.onStateChange = opts.onStateChange || noop;\n }\n\n finalize(): void {\n this.transition.cancel();\n }\n\n // Returns current transitioned viewport.\n getViewportInTransition(): Record | null {\n return this.propsInTransition;\n }\n\n // Process the vewiport change, either ignore or trigger a new transition.\n // Return true if a new transition is triggered, false otherwise.\n processViewStateChange(nextProps: TransitionProps) {\n let transitionTriggered = false;\n const currentProps = this.props;\n // Set this.props here as '_triggerTransition' calls '_updateViewport' that uses this.props.\n this.props = nextProps;\n\n // NOTE: Be cautious re-ordering statements in this function.\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n let startProps = currentProps;\n if (this.transition.inProgress) {\n const {interruption, endProps} = this.transition.settings as TransitionSettings;\n startProps = {\n ...currentProps,\n ...(interruption === TRANSITION_EVENTS.SNAP_TO_END\n ? endProps\n : this.propsInTransition || currentProps)\n };\n }\n\n this._triggerTransition(startProps, nextProps);\n\n transitionTriggered = true;\n } else {\n this.transition.cancel();\n }\n\n return transitionTriggered;\n }\n\n updateTransition() {\n this.transition.update();\n }\n\n // Helper methods\n\n _isTransitionEnabled(props: TransitionProps): boolean {\n const {transitionDuration, transitionInterpolator} = props;\n return (\n ((transitionDuration as number) > 0 || transitionDuration === 'auto') &&\n Boolean(transitionInterpolator)\n );\n }\n\n _isUpdateDueToCurrentTransition(props: TransitionProps): boolean {\n if (this.transition.inProgress && this.propsInTransition) {\n return (this.transition.settings as TransitionSettings).interpolator.arePropsEqual(\n props,\n this.propsInTransition\n );\n }\n return false;\n }\n\n _shouldIgnoreViewportChange(currentProps: TransitionProps, nextProps: TransitionProps): boolean {\n if (this.transition.inProgress) {\n // Ignore update if it is requested to be ignored\n return (\n (this.transition.settings as TransitionSettings).interruption ===\n TRANSITION_EVENTS.IGNORE ||\n // Ignore update if it is due to current active transition.\n this._isUpdateDueToCurrentTransition(nextProps)\n );\n }\n if (this._isTransitionEnabled(nextProps)) {\n // Ignore if none of the viewport props changed.\n return (nextProps.transitionInterpolator as TransitionInterpolator).arePropsEqual(\n currentProps,\n nextProps\n );\n }\n return true;\n }\n\n _triggerTransition(startProps: TransitionProps, endProps: TransitionProps): void {\n const startViewstate = this.getControllerState(startProps);\n const endViewStateProps = this.getControllerState(endProps).shortestPathFrom(startViewstate);\n\n // update transitionDuration for 'auto' mode\n const transitionInterpolator = endProps.transitionInterpolator as TransitionInterpolator;\n const duration = transitionInterpolator.getDuration\n ? transitionInterpolator.getDuration(startProps, endProps)\n : (endProps.transitionDuration as number);\n\n if (duration === 0) {\n return;\n }\n\n const initialProps = transitionInterpolator.initializeProps(startProps, endViewStateProps);\n\n this.propsInTransition = {};\n const transitionSettings: TransitionSettings = {\n duration,\n easing: endProps.transitionEasing || DEFAULT_EASING,\n interpolator: transitionInterpolator,\n interruption: endProps.transitionInterruption || DEFAULT_INTERRUPTION,\n\n startProps: initialProps.start,\n endProps: initialProps.end,\n\n onStart: endProps.onTransitionStart,\n onUpdate: this._onTransitionUpdate,\n onInterrupt: this._onTransitionEnd(endProps.onTransitionInterrupt),\n onEnd: this._onTransitionEnd(endProps.onTransitionEnd)\n };\n this.transition.start(transitionSettings);\n\n this.onStateChange({inTransition: true});\n\n this.updateTransition();\n }\n\n _onTransitionEnd(callback?: (transition: Transition) => void) {\n return transition => {\n this.propsInTransition = null;\n\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n\n callback?.(transition);\n };\n }\n\n _onTransitionUpdate = transition => {\n // NOTE: Be cautious re-ordering statements in this function.\n const {\n time,\n settings: {interpolator, startProps, endProps, duration, easing}\n } = transition;\n const t = easing(time / duration);\n const viewport = interpolator.interpolateProps(startProps, endProps, t);\n\n // This gurantees all props (e.g. bearing, longitude) are normalized\n // So when viewports are compared they are in same range.\n this.propsInTransition = this.getControllerState({\n ...this.props,\n ...viewport\n }).getViewportProps();\n\n this.onViewStateChange({\n viewState: this.propsInTransition,\n oldViewState: this.props as TransitionProps\n });\n };\n}\n","import type Viewport from '../viewports/viewport';\n\nexport default abstract class ViewState implements IViewState {\n private _viewportProps: Required;\n private _state: State;\n\n constructor(props: Required, state: State) {\n this._viewportProps = this.applyConstraints(props);\n this._state = state;\n }\n\n getViewportProps(): Required {\n return this._viewportProps;\n }\n\n getState(): State {\n return this._state;\n }\n\n abstract applyConstraints(props: Required): Required;\n\n abstract shortestPathFrom(viewState: T): Props;\n\n abstract panStart(params: {pos: [number, number]}): T;\n abstract pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;\n abstract panEnd(): T;\n\n abstract rotateStart(params: {pos: [number, number]}): T;\n abstract rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY: number}): T;\n abstract rotateEnd(): T;\n\n abstract zoomStart({pos}: {pos: [number, number]}): T;\n abstract zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): T;\n abstract zoomEnd(): T;\n\n abstract zoomIn(speed?: number): T;\n abstract zoomOut(speed?: number): T;\n\n abstract moveLeft(speed?: number): T;\n abstract moveRight(speed?: number): T;\n abstract moveUp(speed?: number): T;\n abstract moveDown(speed?: number): T;\n\n abstract rotateLeft(speed?: number): T;\n abstract rotateRight(speed?: number): T;\n abstract rotateUp(speed?: number): T;\n abstract rotateDown(speed?: number): T;\n}\n\nexport interface IViewState {\n makeViewport?: (props: Record) => Viewport;\n\n getViewportProps(): Record;\n\n getState(): Record;\n\n shortestPathFrom(viewState: T): Record;\n\n panStart(params: {pos: [number, number]}): T;\n pan({pos, startPos}: {pos: [number, number]; startPos?: [number, number]}): T;\n panEnd(): T;\n\n rotateStart(params: {pos: [number, number]}): T;\n rotate(params: {pos?: [number, number]; deltaAngleX?: number; deltaAngleY?: number}): T;\n rotateEnd(): T;\n\n zoomStart({pos}: {pos: [number, number]}): T;\n zoom({\n pos,\n startPos,\n scale\n }: {\n pos: [number, number];\n startPos?: [number, number];\n scale: number;\n }): T;\n zoomEnd(): T;\n\n zoomIn(speed?: number): T;\n zoomOut(speed?: number): T;\n\n moveLeft(speed?: number): T;\n moveRight(speed?: number): T;\n moveUp(speed?: number): T;\n moveDown(speed?: number): T;\n\n rotateLeft(speed?: number): T;\n rotateRight(speed?: number): T;\n rotateUp(speed?: number): T;\n rotateDown(speed?: number): T;\n}\n","import deckLog from '../utils/log';\nimport {getLoggers} from './loggers';\n\n/* debug utility */\n\nlet loggers: Record = {};\n\n// Conditionally load default loggers in development mode\n// eslint-disable-next-line\nif (process.env.NODE_ENV !== 'production') {\n loggers = getLoggers(deckLog);\n}\n\nexport function register(handlers: Record): void {\n loggers = handlers;\n}\n\nexport default function debug(eventType: string, arg1?: any, arg2?: any, arg3?: any): void {\n if (deckLog.level > 0 && loggers[eventType]) {\n // Not using rest parameters to defeat perf hit from array construction\n loggers[eventType].call(null, arg1, arg2, arg3);\n }\n}\n","const DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\n\nlet idCount = 0;\n\nexport type AmbientLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n};\n\nexport class AmbientLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'ambient';\n\n constructor(props: AmbientLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n\n this.id = props.id || `ambient-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n }\n}\n","import {Vector3} from '@math.gl/core';\nimport type Layer from '../../lib/layer';\n\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_LIGHT_DIRECTION = [0.0, 0.0, -1.0];\n\nlet idCount = 0;\n\nexport type DirectionalLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /** Light direction in the common space\n * @default [0.0, 0.0, -1.0]\n */\n direction?: number[];\n /** (Experimental) render shadows cast by this light\n * @default false\n */\n _shadow?: boolean;\n};\n\nexport class DirectionalLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'directional';\n direction: number[];\n shadow: boolean;\n\n constructor(props: DirectionalLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n const {direction = DEFAULT_LIGHT_DIRECTION} = props;\n const {_shadow = false} = props;\n\n this.id = props.id || `directional-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'directional';\n this.direction = new Vector3(direction).normalize().toArray() as [number, number, number];\n this.shadow = _shadow;\n }\n\n getProjectedLight(opts: {layer: Layer}): DirectionalLight {\n return this;\n }\n}\n","import {default as LayersPass} from './layers-pass';\nimport {\n Framebuffer,\n Texture2D,\n Renderbuffer,\n withParameters,\n cssToDeviceRatio\n} from '@luma.gl/core';\n\nexport default class ShadowPass extends LayersPass {\n shadowMap: Texture2D;\n depthBuffer: Renderbuffer;\n fbo: Framebuffer;\n\n constructor(\n gl: WebGLRenderingContext,\n props?: {\n id;\n }\n ) {\n super(gl, props);\n\n // The shadowMap texture\n this.shadowMap = new Texture2D(gl, {\n width: 1,\n height: 1,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.depthBuffer = new Renderbuffer(gl, {\n format: gl.DEPTH_COMPONENT16,\n width: 1,\n height: 1\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'shadowmap',\n width: 1,\n height: 1,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.shadowMap,\n // Depth attachment has to be specified for depth test to work\n [gl.DEPTH_ATTACHMENT]: this.depthBuffer\n }\n });\n }\n\n render(params) {\n const target = this.fbo;\n\n withParameters(\n this.gl,\n {\n depthRange: [0, 1],\n depthTest: true,\n blend: false,\n clearColor: [1, 1, 1, 1]\n },\n () => {\n const viewport = params.viewports[0];\n const pixelRatio = cssToDeviceRatio(this.gl);\n const width = viewport.width * pixelRatio;\n const height = viewport.height * pixelRatio;\n if (width !== target.width || height !== target.height) {\n target.resize({width, height});\n }\n\n super.render({...params, target, pass: 'shadow'});\n }\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.shadowEnabled !== false;\n }\n\n getModuleParameters() {\n return {\n drawToShadowMap: true\n };\n }\n\n delete() {\n if (this.fbo) {\n this.fbo.delete();\n this.fbo = null;\n }\n\n if (this.shadowMap) {\n this.shadowMap.delete();\n this.shadowMap = null;\n }\n\n if (this.depthBuffer) {\n this.depthBuffer.delete();\n this.depthBuffer = null;\n }\n }\n}\n","import {Texture2D, ProgramManager} from '@luma.gl/core';\nimport {AmbientLight} from './ambient-light';\nimport {DirectionalLight} from './directional-light';\nimport {PointLight} from './point-light';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport ShadowPass from '../../passes/shadow-pass';\nimport shadow from '../../shaderlib/shadow/shadow';\n\nimport type Layer from '../../lib/layer';\nimport type {Effect, PreRenderOptions} from '../../lib/effect';\n\nconst DEFAULT_AMBIENT_LIGHT_PROPS = {color: [255, 255, 255], intensity: 1.0};\nconst DEFAULT_DIRECTIONAL_LIGHT_PROPS = [\n {\n color: [255, 255, 255],\n intensity: 1.0,\n direction: [-1, 3, -1]\n },\n {\n color: [255, 255, 255],\n intensity: 0.9,\n direction: [1, -8, -2.5]\n }\n];\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 200 / 255];\n\n// Class to manage ambient, point and directional light sources in deck\nexport default class LightingEffect implements Effect {\n id = 'lighting-effect';\n props = null;\n shadowColor: number[] = DEFAULT_SHADOW_COLOR;\n\n private shadow: boolean;\n private ambientLight: AmbientLight | null = null;\n private directionalLights: DirectionalLight[] = [];\n private pointLights: PointLight[] = [];\n private shadowPasses: ShadowPass[] = [];\n private shadowMaps: Texture2D[] = [];\n private dummyShadowMap: Texture2D | null = null;\n private programManager?: ProgramManager;\n private shadowMatrices?: Matrix4[];\n\n constructor(props: Record = {}) {\n for (const key in props) {\n const lightSource = props[key];\n\n switch (lightSource.type) {\n case 'ambient':\n this.ambientLight = lightSource;\n break;\n\n case 'directional':\n this.directionalLights.push(lightSource as DirectionalLight);\n break;\n\n case 'point':\n this.pointLights.push(lightSource as PointLight);\n break;\n default:\n }\n }\n this._applyDefaultLights();\n\n this.shadow = this.directionalLights.some(light => light.shadow);\n }\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views}: PreRenderOptions\n ) {\n if (!this.shadow) return;\n\n // create light matrix every frame to make sure always updated from light source\n this.shadowMatrices = this._calculateMatrices();\n\n if (this.shadowPasses.length === 0) {\n this._createShadowPasses(gl);\n }\n if (!this.programManager) {\n // TODO - support multiple contexts\n this.programManager = ProgramManager.getDefaultProgramManager(gl);\n if (shadow) {\n this.programManager.addDefaultModule(shadow);\n }\n }\n\n if (!this.dummyShadowMap) {\n this.dummyShadowMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n for (let i = 0; i < this.shadowPasses.length; i++) {\n const shadowPass = this.shadowPasses[i];\n shadowPass.render({\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n moduleParameters: {\n shadowLightId: i,\n dummyShadowMap: this.dummyShadowMap,\n shadowMatrices: this.shadowMatrices\n }\n });\n }\n }\n\n getModuleParameters(layer: Layer) {\n const parameters: {\n lightSources?: {\n ambientLight: AmbientLight | null;\n directionalLights: DirectionalLight[];\n pointLights: PointLight[];\n };\n shadowMaps?: Texture2D[];\n dummyShadowMap?: Texture2D;\n shadowColor?: number[];\n shadowMatrices?: Matrix4[];\n } = this.shadow\n ? {\n shadowMaps: this.shadowMaps,\n dummyShadowMap: this.dummyShadowMap,\n shadowColor: this.shadowColor,\n shadowMatrices: this.shadowMatrices\n }\n : {};\n\n // when not rendering to screen, turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n parameters.lightSources = {\n ambientLight: this.ambientLight,\n directionalLights: this.directionalLights.map(directionalLight =>\n directionalLight.getProjectedLight({layer})\n ),\n pointLights: this.pointLights.map(pointLight => pointLight.getProjectedLight({layer}))\n };\n\n return parameters;\n }\n\n cleanup(): void {\n for (const shadowPass of this.shadowPasses) {\n shadowPass.delete();\n }\n this.shadowPasses.length = 0;\n this.shadowMaps.length = 0;\n\n if (this.dummyShadowMap) {\n this.dummyShadowMap.delete();\n this.dummyShadowMap = null;\n }\n\n if (this.shadow && this.programManager) {\n this.programManager.removeDefaultModule(shadow);\n this.programManager = null;\n }\n }\n\n private _calculateMatrices(): Matrix4[] {\n const lightMatrices: Matrix4[] = [];\n for (const light of this.directionalLights) {\n const viewMatrix = new Matrix4().lookAt({\n eye: new Vector3(light.direction).negate()\n });\n\n lightMatrices.push(viewMatrix);\n }\n return lightMatrices;\n }\n\n private _createShadowPasses(gl: WebGLRenderingContext): void {\n for (let i = 0; i < this.directionalLights.length; i++) {\n const shadowPass = new ShadowPass(gl);\n this.shadowPasses[i] = shadowPass;\n this.shadowMaps[i] = shadowPass.shadowMap;\n }\n }\n\n private _applyDefaultLights(): void {\n const {ambientLight, pointLights, directionalLights} = this;\n if (!ambientLight && pointLights.length === 0 && directionalLights.length === 0) {\n this.ambientLight = new AmbientLight(DEFAULT_AMBIENT_LIGHT_PROPS);\n this.directionalLights.push(\n new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[0]),\n new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[1])\n );\n }\n }\n}\n","import {projectPosition} from '../../shaderlib/project/project-functions';\nimport {COORDINATE_SYSTEM} from '../../lib/constants';\n\nimport type Layer from '../../lib/layer';\n\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_ATTENUATION = [0, 0, 1];\nconst DEFAULT_LIGHT_POSITION = [0.0, 0.0, 1.0];\n\nlet idCount = 0;\n\nexport type PointLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /** Light position [x, y, z] in the common space\n * @default [0.0, 0.0, 1.0]\n */\n position?: number[];\n /** Light attenuation\n * @default [0.0, 0.0, 1.0]\n */\n attenuation?: number[];\n};\n\nexport class PointLight {\n id: string;\n color: number[];\n intensity: number;\n type = 'point';\n position: number[];\n attenuation: number[];\n\n protected projectedLight: PointLight;\n\n constructor(props: PointLightOptions = {}) {\n const {color = DEFAULT_LIGHT_COLOR} = props;\n const {intensity = DEFAULT_LIGHT_INTENSITY} = props;\n const {position = DEFAULT_LIGHT_POSITION} = props;\n\n this.id = props.id || `point-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'point';\n this.position = position;\n this.attenuation = getAttenuation(props);\n this.projectedLight = {...this};\n }\n\n getProjectedLight({layer}: {layer: Layer}): PointLight {\n const {projectedLight} = this;\n const viewport = layer.context.viewport;\n const {coordinateSystem, coordinateOrigin} = layer.props;\n const position = projectPosition(this.position, {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n fromCoordinateSystem: viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n fromCoordinateOrigin: [0, 0, 0]\n });\n projectedLight.color = this.color;\n projectedLight.intensity = this.intensity;\n projectedLight.position = position;\n return projectedLight;\n }\n}\n\nfunction getAttenuation(props: PointLightOptions): number[] {\n if (props.attenuation) {\n return props.attenuation;\n }\n if ('intensity' in props) {\n return [0, 0, props.intensity || 0];\n }\n return DEFAULT_ATTENUATION;\n}\n","/* eslint-disable camelcase */\nimport {PointLight} from './point-light';\nimport {getUniformsFromViewport} from '../../shaderlib/project/viewport-uniforms';\nimport type Layer from '../../lib/layer';\n\nexport default class CameraLight extends PointLight {\n getProjectedLight({layer}: {layer: Layer}): PointLight {\n const {projectedLight} = this;\n const viewport = layer.context.viewport;\n const {coordinateSystem, coordinateOrigin, modelMatrix} = layer.props;\n const {project_uCameraPosition} = getUniformsFromViewport({\n viewport,\n modelMatrix,\n coordinateSystem,\n coordinateOrigin\n });\n projectedLight.color = this.color;\n projectedLight.intensity = this.intensity;\n projectedLight.position = project_uCameraPosition;\n return projectedLight;\n }\n}\n","const DEGREES_TO_RADIANS = Math.PI / 180;\n\nconst DAY_IN_MS = 1000 * 60 * 60 * 24;\nconst JD1970 = 2440588; // Julian Day year 1970\nconst JD2000 = 2451545; // Julian Day year 2000\n\n// This angle ε [epsilon] is called the obliquity of the ecliptic and its value at the beginning of 2000 was 23.4397°\nconst e = DEGREES_TO_RADIANS * 23.4397; // obliquity of the Earth\n\n// Refer https://www.aa.quae.nl/en/reken/zonpositie.html\n// \"The Mean Anomaly\" section for explanation\nconst M0 = 357.5291; // Earth mean anomaly on start day\nconst M1 = 0.98560028; // Earth angle traverses on average per day seen from the sun\n\nconst THETA0 = 280.147; // The sidereal time (in degrees) at longitude 0° at the instant defined by JD2000\nconst THETA1 = 360.9856235; // The rate of change of the sidereal time, in degrees per day.\n\n/**\n * A position in the sky defined by two angles\n * The altitude is 0° at the horizon, +90° in the zenith (straight over your head), and −90° in the nadir (straight down).\n * The azimuth is the direction along the horizon, which we measure from south to west.\n * South has azimuth 0°, west +90°, north +180°, and east +270° (or −90°, that's the same thing).\n */\nexport type CelestialPosition = {\n azimuth: number;\n altitude: number;\n};\n\n/**\n * Calculate sun position\n * based on https://www.aa.quae.nl/en/reken/zonpositie.html\n * inspired by https://github.com/mourner/suncalc/blob/master/suncalc.js\n */\nexport function getSunPosition(\n timestamp: number | Date,\n latitude: number,\n longitude: number\n): CelestialPosition {\n const longitudeWestInRadians = DEGREES_TO_RADIANS * -longitude;\n const phi = DEGREES_TO_RADIANS * latitude;\n const d = toDays(timestamp);\n\n const c = getSunCoords(d);\n // hour angle\n const H = getSiderealTime(d, longitudeWestInRadians) - c.rightAscension;\n\n return {\n azimuth: getAzimuth(H, phi, c.declination),\n altitude: getAltitude(H, phi, c.declination)\n };\n}\n\nexport function getSunDirection(\n timestamp: number | Date,\n latitude: number,\n longitude: number\n): number[] {\n const {azimuth, altitude} = getSunPosition(timestamp, latitude, longitude);\n\n // solar position to light direction\n return [\n Math.sin(azimuth) * Math.cos(altitude),\n Math.cos(azimuth) * Math.cos(altitude),\n -Math.sin(altitude)\n ];\n}\n\nfunction toJulianDay(timestamp: number | Date): number {\n const ts = typeof timestamp === 'number' ? timestamp : timestamp.getTime();\n return ts / DAY_IN_MS - 0.5 + JD1970;\n}\n\nfunction toDays(timestamp: number | Date): number {\n return toJulianDay(timestamp) - JD2000;\n}\n\nfunction getRightAscension(eclipticLongitude: number, b: number): number {\n const lambda = eclipticLongitude;\n return Math.atan2(Math.sin(lambda) * Math.cos(e) - Math.tan(b) * Math.sin(e), Math.cos(lambda));\n}\n\nfunction getDeclination(eclipticLongitude: number, b: number): number {\n const lambda = eclipticLongitude;\n return Math.asin(Math.sin(b) * Math.cos(e) + Math.cos(b) * Math.sin(e) * Math.sin(lambda));\n}\n\nfunction getAzimuth(hourAngle: number, latitudeInRadians: number, declination: number): number {\n const H = hourAngle;\n const phi = latitudeInRadians;\n const delta = declination;\n return Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(phi) - Math.tan(delta) * Math.cos(phi));\n}\n\nfunction getAltitude(hourAngle: number, latitudeInRadians: number, declination: number): number {\n const H = hourAngle;\n const phi = latitudeInRadians;\n const delta = declination;\n return Math.asin(Math.sin(phi) * Math.sin(delta) + Math.cos(phi) * Math.cos(delta) * Math.cos(H));\n}\n\n// https://www.aa.quae.nl/en/reken/zonpositie.html\n// \"The Observer section\"\nfunction getSiderealTime(dates: number, longitudeWestInRadians: number): number {\n return DEGREES_TO_RADIANS * (THETA0 + THETA1 * dates) - longitudeWestInRadians;\n}\n\nfunction getSolarMeanAnomaly(days: number): number {\n return DEGREES_TO_RADIANS * (M0 + M1 * days);\n}\n\nfunction getEclipticLongitude(meanAnomaly: number): number {\n const M = meanAnomaly;\n // equation of center\n const C =\n DEGREES_TO_RADIANS * (1.9148 * Math.sin(M) + 0.02 * Math.sin(2 * M) + 0.0003 * Math.sin(3 * M));\n // perihelion of the Earth\n const P = DEGREES_TO_RADIANS * 102.9372;\n\n return M + C + P + Math.PI;\n}\n\nfunction getSunCoords(dates: number): {\n declination: number;\n rightAscension: number;\n} {\n const M = getSolarMeanAnomaly(dates);\n const L = getEclipticLongitude(M);\n\n return {\n declination: getDeclination(L, 0),\n rightAscension: getRightAscension(L, 0)\n };\n}\n","import {DirectionalLight} from './directional-light';\nimport {getSunDirection} from '@math.gl/sun';\n\nimport type Layer from '../../lib/layer';\n\nexport type SunLightOptions = {\n id?: string;\n /** Light color, [r, g, b] in the 0-255 range\n * @default [255, 255, 255]\n */\n color?: number[];\n /** Light intensity, higher number is brighter\n * @default 1.0\n */\n intensity?: number;\n /**\n * The time at which to position the sun. Either a Date object or a timestamp (milliseconds elapsed since unix time 0)\n */\n timestamp: number | Date;\n /** (Experimental) render shadows casted by this light\n * @default false\n */\n _shadow?: boolean;\n};\n\nexport default class SunLight extends DirectionalLight {\n timestamp: number | Date;\n\n constructor(opts: SunLightOptions) {\n super(opts);\n\n this.timestamp = opts.timestamp;\n }\n\n getProjectedLight({layer}: {layer: Layer}): DirectionalLight {\n const {viewport} = layer.context;\n const isGlobe = viewport.resolution && viewport.resolution > 0;\n\n if (isGlobe) {\n // Rotate vector to align with the direction of the globe projection (up at lon:0,lat:0 is [0, -1, 0])\n const [x, y, z] = getSunDirection(this.timestamp, 0, 0);\n this.direction = [x, -z, y];\n } else {\n // @ts-expect-error longitude and latitude are not defined on all viewports\n const {latitude, longitude} = viewport;\n this.direction = getSunDirection(this.timestamp, latitude, longitude);\n }\n\n return this;\n }\n}\n","//\n// A base render pass.\n//\n// Attribution: This class and the multipass system were inspired by\n// the THREE.js EffectComposer and *Pass classes\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport {ClipSpace, setParameters, withParameters, clear} from '@luma.gl/core';\nimport Pass from './pass';\n\nimport type {ShaderModule} from '../types/types';\n\ntype ScreenPassProps = {\n module: ShaderModule;\n fs: string | null;\n id: string;\n moduleSettings: any;\n};\n\ntype ScreenPassRenderOptions = {\n inputBuffer: Framebuffer;\n outputBuffer: Framebuffer;\n};\n\nexport default class ScreenPass extends Pass {\n model: ClipSpace;\n\n constructor(gl: WebGLRenderingContext, props: ScreenPassProps) {\n super(gl, props);\n const {module, fs, id} = props;\n this.model = new ClipSpace(gl, {id, fs, modules: [module]});\n }\n\n render(params: ScreenPassRenderOptions): void {\n const gl = this.gl;\n\n setParameters(gl, {viewport: [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]});\n\n withParameters(gl, {framebuffer: params.outputBuffer, clearColor: [0, 0, 0, 0]}, () =>\n this._renderPass(gl, params)\n );\n }\n\n delete() {\n this.model.delete();\n this.model = null;\n }\n\n // Private methods\n\n /**\n * Renders the pass.\n * This is an abstract method that should be overridden.\n * @param inputBuffer - Frame buffer that contains the result of the previous pass\n * @param outputBuffer - Frame buffer that serves as the output render target\n */\n protected _renderPass(gl: WebGLRenderingContext, options: ScreenPassRenderOptions) {\n const {inputBuffer} = options;\n clear(gl, {color: true});\n this.model.draw({\n moduleSettings: this.props.moduleSettings,\n uniforms: {\n texture: inputBuffer,\n texSize: [inputBuffer.width, inputBuffer.height]\n },\n parameters: {\n depthWrite: false,\n depthTest: false\n }\n });\n }\n}\n","import ScreenPass from '../passes/screen-pass';\nimport {normalizeShaderModule} from '@luma.gl/core';\n\nimport type {Effect, PostRenderOptions} from '../lib/effect';\nimport type {Framebuffer} from '@luma.gl/webgl';\nimport type {ShaderModule} from '../types/types';\n\nexport default class PostProcessEffect implements Effect {\n id: string;\n props: any;\n module: ShaderModule;\n passes?: ScreenPass[];\n\n constructor(module: ShaderModule, props: any = {}) {\n this.id = `${module.name}-pass`;\n this.props = props;\n normalizeShaderModule(module);\n this.module = module;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n preRender(): void {}\n\n postRender(gl: WebGLRenderingContext, params: PostRenderOptions): Framebuffer {\n const passes = this.passes || createPasses(gl, this.module, this.id, this.props);\n this.passes = passes;\n\n const {target} = params;\n let inputBuffer = params.inputBuffer;\n let outputBuffer = params.swapBuffer;\n\n for (let index = 0; index < this.passes.length; index++) {\n if (target && index === this.passes.length - 1) {\n outputBuffer = target;\n }\n this.passes[index].render({inputBuffer, outputBuffer});\n const switchBuffer = outputBuffer;\n outputBuffer = inputBuffer;\n inputBuffer = switchBuffer;\n }\n return inputBuffer;\n }\n\n cleanup(): void {\n if (this.passes) {\n for (const pass of this.passes) {\n pass.delete();\n }\n this.passes = undefined;\n }\n }\n}\n\nfunction createPasses(\n gl: WebGLRenderingContext,\n module: ShaderModule,\n id: string,\n moduleSettings: any\n): ScreenPass[] {\n if (!module.passes) {\n const fs = getFragmentShaderForRenderPass(module);\n const pass = new ScreenPass(gl, {\n id,\n module,\n fs,\n moduleSettings\n });\n return [pass];\n }\n\n return module.passes.map((pass, index) => {\n const fs = getFragmentShaderForRenderPass(module, pass);\n const idn = `${id}-${index}`;\n\n return new ScreenPass(gl, {\n id: idn,\n module,\n fs,\n moduleSettings\n });\n });\n}\n\nconst FILTER_FS_TEMPLATE = func => `\\\nuniform sampler2D texture;\nuniform vec2 texSize;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main() {\n vec2 texCoord = coordinate;\n\n gl_FragColor = texture2D(texture, texCoord);\n gl_FragColor = ${func}(gl_FragColor, texSize, texCoord);\n}\n`;\n\nconst SAMPLER_FS_TEMPLATE = func => `\\\nuniform sampler2D texture;\nuniform vec2 texSize;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main() {\n vec2 texCoord = coordinate;\n\n gl_FragColor = ${func}(texture, texSize, texCoord);\n}\n`;\n\nfunction getFragmentShaderForRenderPass(module, pass = module) {\n if (pass.filter) {\n const func = typeof pass.filter === 'string' ? pass.filter : `${module.name}_filterColor`;\n return FILTER_FS_TEMPLATE(func);\n }\n\n if (pass.sampler) {\n const func = typeof pass.sampler === 'string' ? pass.sampler : `${module.name}_sampleColor`;\n return SAMPLER_FS_TEMPLATE(func);\n }\n\n // console.error(`${module.name} no fragment shader generated`);\n return null;\n}\n","import Viewport from '../viewports/viewport';\n\nimport {Matrix4} from '@math.gl/core';\nimport {pixelsToWorld, fovyToAltitude} from '@math.gl/web-mercator';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nfunction getViewMatrix({\n height,\n focalDistance,\n orbitAxis,\n rotationX,\n rotationOrbit,\n zoom\n}: {\n height: number;\n focalDistance: number;\n orbitAxis: 'Y' | 'Z';\n rotationX: number;\n rotationOrbit: number;\n zoom: number;\n}): Matrix4 {\n // We position the camera so that one common space unit (world space unit scaled by zoom)\n // at the target maps to one screen pixel.\n // This is a similar technique to that used in web mercator projection\n // By doing so we are able to convert between common space and screen space sizes efficiently\n // in the vertex shader.\n const up = orbitAxis === 'Z' ? [0, 0, 1] : [0, 1, 0];\n const eye = orbitAxis === 'Z' ? [0, -focalDistance, 0] : [0, 0, focalDistance];\n\n const viewMatrix = new Matrix4().lookAt({eye, up});\n\n viewMatrix.rotateX(rotationX * DEGREES_TO_RADIANS);\n if (orbitAxis === 'Z') {\n viewMatrix.rotateZ(rotationOrbit * DEGREES_TO_RADIANS);\n } else {\n viewMatrix.rotateY(rotationOrbit * DEGREES_TO_RADIANS);\n }\n\n // When height increases, we need to increase the distance from the camera to the target to\n // keep the 1:1 mapping. However, this also changes the projected depth of each position by\n // moving them further away between the near/far plane.\n // Without modifying the default near/far planes, we instead scale down the common space to\n // remove the distortion to the depth field.\n const projectionScale = Math.pow(2, zoom) / height;\n viewMatrix.scale(projectionScale);\n\n return viewMatrix;\n}\n\nexport type OrbitViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Axis with 360 degrees rotating freedom, either `'Y'` or `'Z'`, default to `'Z'`. */\n orbitAxis?: 'Y' | 'Z';\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large. Default `0`. */\n zoom?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationOrbit?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationX?: number;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in the perspective case. In degrees. Default `50`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class OrbitViewport extends Viewport {\n projectedCenter: number[];\n\n constructor(props: OrbitViewportOptions) {\n const {\n height,\n\n projectionMatrix,\n\n fovy = 50, // For setting camera position\n orbitAxis = 'Z', // Orbit axis with 360 degrees rotating freedom, can only be 'Y' or 'Z'\n target = [0, 0, 0], // Which point is camera looking at, default origin\n\n rotationX = 0, // Rotating angle around X axis\n rotationOrbit = 0, // Rotating angle around orbit axis\n\n zoom = 0\n } = props;\n\n const focalDistance = projectionMatrix ? projectionMatrix[5] / 2 : fovyToAltitude(fovy);\n\n super({\n ...props,\n // in case viewState contains longitude/latitude values,\n // make sure that the base Viewport class does not treat this as a geospatial viewport\n longitude: undefined,\n viewMatrix: getViewMatrix({\n height: height || 1,\n focalDistance,\n orbitAxis,\n rotationX,\n rotationOrbit,\n zoom\n }),\n fovy,\n focalDistance,\n position: target,\n zoom\n });\n\n this.projectedCenter = this.project(this.center);\n }\n\n unproject(xyz: number[], {topLeft = true}: {topLeft?: boolean} = {}): [number, number, number] {\n const [x, y, z = this.projectedCenter[2]] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const [X, Y, Z] = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix);\n return [X, Y, Z];\n }\n\n panByPosition(coords: number[], pixel: number[]): OrbitViewportOptions {\n const p0 = this.project(coords);\n const nextCenter = [\n this.width / 2 + p0[0] - pixel[0],\n this.height / 2 + p0[1] - pixel[1],\n this.projectedCenter[2]\n ];\n return {\n target: this.unproject(nextCenter)\n };\n }\n}\n","import Viewport from '../viewports/viewport';\nimport {getMeterZoom} from '@math.gl/web-mercator';\nimport {Matrix4, _SphericalCoordinates as SphericalCoordinates} from '@math.gl/core';\n\nexport type FirstPersonViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude of the camera, in the geospatial case. */\n longitude?: number;\n /** Latitude of the camera, in the geospatial case. */\n latitude?: number;\n /** Meter offsets of the camera from the lng-lat anchor point. Default `[0, 0, 0]`. */\n position?: [number, number, number];\n /** Bearing (heading) of the camera in degrees. Default `0` (north). */\n bearing?: number;\n /** Pitch (tilt) of the camera in degrees. Default `0` (horizontal). */\n pitch?: number;\n /** Transform applied to the camera position and direction */\n modelMatrix?: number[] | null;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** The up direction, default positive z axis. */\n up?: [number, number, number];\n /** Field of view covered by camera, in degrees. Default `75`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Modifier of viewport scale. Corresponds to the number of pixels per meter. Default `1`. */\n focalDistance?: number;\n};\n\nexport default class FirstPersonViewport extends Viewport {\n longitude?: number;\n latitude?: number;\n\n constructor(props: FirstPersonViewportOptions) {\n // TODO - push direction handling into Matrix4.lookAt\n const {longitude, latitude, modelMatrix, bearing = 0, pitch = 0, up = [0, 0, 1]} = props;\n\n // Always calculate direction from bearing and pitch\n const spherical = new SphericalCoordinates({\n bearing,\n // Avoid \"pixel project matrix not invertible\" error\n pitch: pitch === -90 ? 0.0001 : 90 + pitch\n });\n const dir = spherical.toVector3().normalize();\n\n // Direction is relative to model coordinates, of course\n const center = modelMatrix ? new Matrix4(modelMatrix).transformAsVector(dir) : dir;\n\n // Just the direction. All the positioning is done in viewport.js\n const zoom = Number.isFinite(latitude) ? getMeterZoom({latitude: latitude as number}) : 0;\n const scale = Math.pow(2, zoom);\n const viewMatrix = new Matrix4().lookAt({eye: [0, 0, 0], center, up}).scale(scale);\n\n super({\n ...props,\n zoom,\n viewMatrix\n });\n\n this.latitude = latitude;\n this.longitude = longitude;\n }\n}\n","import Controller from './controller';\nimport ViewState from './view-state';\nimport {mod} from '../utils/math-utils';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nimport {Vector3, _SphericalCoordinates as SphericalCoordinates, clamp} from '@math.gl/core';\n\nconst MOVEMENT_SPEED = 20;\n\ntype FirstPersonStateProps = {\n width: number;\n height: number;\n\n position?: number[];\n bearing?: number;\n pitch?: number;\n\n // Geospatial anchor\n longitude?: number | null;\n latitude?: number | null;\n\n maxPitch?: number;\n minPitch?: number;\n};\n\ntype FirstPersonStateInternal = {\n startRotatePos?: [number, number];\n startBearing?: number;\n startPitch?: number;\n startZoomPosition?: number[];\n};\n\nclass FirstPersonState extends ViewState<\n FirstPersonState,\n FirstPersonStateProps,\n FirstPersonStateInternal\n> {\n constructor(options: FirstPersonStateProps & FirstPersonStateInternal) {\n const {\n /* Viewport arguments */\n width, // Width of viewport\n height, // Height of viewport\n\n // Position and orientation\n position = [0, 0, 0], // typically in meters from anchor point\n\n bearing = 0, // Rotation around y axis\n pitch = 0, // Rotation around x axis\n\n // Geospatial anchor\n longitude = null,\n latitude = null,\n\n maxPitch = 90,\n minPitch = -90,\n\n // Model state when the rotate operation first started\n startRotatePos,\n startBearing,\n startPitch,\n startZoomPosition\n } = options;\n\n super(\n {\n width,\n height,\n position,\n bearing,\n pitch,\n longitude,\n latitude,\n maxPitch,\n minPitch\n },\n {\n startRotatePos,\n startBearing,\n startPitch,\n startZoomPosition\n }\n );\n }\n\n /* Public API */\n\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart(): FirstPersonState {\n return this;\n }\n\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n pan(): FirstPersonState {\n return this;\n }\n\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd(): FirstPersonState {\n return this;\n }\n\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n rotateStart({pos}: {pos: [number, number]}): FirstPersonState {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the pointer is\n */\n rotate({\n pos,\n deltaAngleX = 0,\n deltaAngleY = 0\n }: {\n pos?: [number, number];\n deltaAngleX?: number;\n deltaAngleY: number;\n }): FirstPersonState {\n const {startRotatePos, startBearing, startPitch} = this.getState();\n const {width, height} = this.getViewportProps();\n\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n\n let newRotation;\n if (pos) {\n const deltaScaleX = (pos[0] - startRotatePos[0]) / width;\n const deltaScaleY = (pos[1] - startRotatePos[1]) / height;\n newRotation = {\n bearing: startBearing - deltaScaleX * 180,\n pitch: startPitch - deltaScaleY * 90\n };\n } else {\n newRotation = {\n bearing: startBearing - deltaAngleX,\n pitch: startPitch - deltaAngleY\n };\n }\n\n return this._getUpdatedState(newRotation);\n }\n\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd(): FirstPersonState {\n return this._getUpdatedState({\n startRotatePos: null,\n startBearing: null,\n startPitch: null\n });\n }\n\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n zoomStart(): FirstPersonState {\n return this._getUpdatedState({\n startZoomPosition: this.getViewportProps().position\n });\n }\n\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({scale}: {scale: number}): FirstPersonState {\n let {startZoomPosition} = this.getState();\n if (!startZoomPosition) {\n startZoomPosition = this.getViewportProps().position;\n }\n\n const direction = this.getDirection();\n return this._move(direction, Math.log2(scale) * MOVEMENT_SPEED, startZoomPosition);\n }\n\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd(): FirstPersonState {\n return this._getUpdatedState({\n startZoomPosition: null\n });\n }\n\n moveLeft(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.rotateZ({radians: Math.PI / 2}), speed);\n }\n\n moveRight(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.rotateZ({radians: -Math.PI / 2}), speed);\n }\n\n // forward\n moveUp(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction, speed);\n }\n\n // backward\n moveDown(speed: number = MOVEMENT_SPEED): FirstPersonState {\n const direction = this.getDirection(true);\n return this._move(direction.negate(), speed);\n }\n\n rotateLeft(speed: number = 15): FirstPersonState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n\n rotateRight(speed: number = 15): FirstPersonState {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n\n rotateUp(speed: number = 10): FirstPersonState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n\n rotateDown(speed: number = 10): FirstPersonState {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n\n zoomIn(speed: number = 2): FirstPersonState {\n return this.zoom({scale: speed});\n }\n\n zoomOut(speed: number = 2): FirstPersonState {\n return this.zoom({scale: 1 / speed});\n }\n\n // shortest path between two view states\n shortestPathFrom(viewState: FirstPersonState) {\n const fromProps = viewState.getViewportProps();\n const props = {...this.getViewportProps()};\n const {bearing, longitude} = props;\n\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (\n longitude !== null &&\n fromProps.longitude !== null &&\n Math.abs(longitude - fromProps.longitude) > 180\n ) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n\n /* Private methods */\n _move(\n direction: Vector3,\n speed: number,\n fromPosition: number[] = this.getViewportProps().position\n ) {\n const delta = direction.scale(speed);\n return this._getUpdatedState({\n position: new Vector3(fromPosition).add(delta)\n });\n }\n\n getDirection(use2D: boolean = false): Vector3 {\n const spherical = new SphericalCoordinates({\n bearing: this.getViewportProps().bearing,\n pitch: use2D ? 90 : 90 + this.getViewportProps().pitch\n });\n const direction = spherical.toVector3().normalize();\n return direction;\n }\n\n _getUpdatedState(newProps: Record): FirstPersonState {\n // Update _viewportProps\n return new FirstPersonState({...this.getViewportProps(), ...this.getState(), ...newProps});\n }\n\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure pitch and zoom are within specified range\n const {pitch, maxPitch, minPitch, longitude, bearing} = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n\n // Normalize degrees\n if (longitude !== null && (longitude < -180 || longitude > 180)) {\n props.longitude = mod(longitude + 180, 360) - 180;\n }\n if (bearing < -180 || bearing > 180) {\n props.bearing = mod(bearing + 180, 360) - 180;\n }\n\n return props;\n }\n}\n\nexport default class FirstPersonController extends Controller {\n ControllerState = FirstPersonState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['position', 'pitch', 'bearing'])\n };\n}\n","import View, {CommonViewState} from './view';\nimport FirstPersonViewport from '../viewports/first-person-viewport';\nimport FirstPersonController from '../controllers/first-person-controller';\n\nexport type FirstPersonViewState = {\n /** Longitude of the camera, in the geospatial case. */\n longitude?: number;\n /** Latitude of the camera, in the geospatial case. */\n latitude?: number;\n /** Meter offsets of the camera from the lng-lat anchor point. Default `[0, 0, 0]`. */\n position?: [number, number, number];\n /** Bearing (heading) of the camera in degrees. Default `0` (north). */\n bearing?: number;\n /** Pitch (tilt) of the camera in degrees. Default `0` (horizontal). */\n pitch?: number;\n /** Min pitch angle. Default `-90` (up). */\n minPitch?: number;\n /** Max pitch angle. Default `90` (down). */\n maxPitch?: number;\n /** Transform applied to the camera position and direction */\n modelMatrix?: number[] | null;\n} & CommonViewState;\n\ntype FirstPersonViewProps = {\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in degrees. Default `75`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Modifier of viewport scale. Corresponds to the number of pixels per meter. Default `1`. */\n focalDistance?: number;\n};\n\nexport default class FirstPersonView extends View {\n static displayName = 'FirstPersonView';\n\n get ViewportType() {\n return FirstPersonViewport;\n }\n\n get ControllerType() {\n return FirstPersonController;\n }\n}\n","import View, {CommonViewState} from './view';\nimport OrbitViewport from '../viewports/orbit-viewport';\nimport OrbitController from '../controllers/orbit-controller';\n\nexport type OrbitViewState = {\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target: [number, number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large. Default `0`. */\n zoom: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationOrbit?: number;\n /** Rotating angle around orbit axis. Default `0`. */\n rotationX?: number;\n /** The min zoom level of the viewport. Default `-Infinity`. */\n minZoom?: number;\n /** The max zoom level of the viewport. Default `Infinity`. */\n maxZoom?: number;\n /** The min rotating angle around X axis. Default `-90`. */\n minRotationX?: number;\n /** The max rotating angle around X axis. Default `90`. */\n maxRotationX?: number;\n} & CommonViewState;\n\ntype OrbitViewProps = {\n /** Axis with 360 degrees rotating freedom, either `'Y'` or `'Z'`, default to `'Z'`. */\n orbitAxis?: 'Y' | 'Z';\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Field of view covered by camera, in the perspective case. In degrees. Default `50`. */\n fovy?: number;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class OrbitView extends View {\n static displayName = 'OrbitView';\n\n constructor(props: OrbitViewProps = {}) {\n super(props);\n this.props.orbitAxis = props.orbitAxis || 'Z';\n }\n\n get ViewportType() {\n return OrbitViewport;\n }\n\n get ControllerType() {\n return OrbitController;\n }\n}\n","import {clamp} from '@math.gl/core';\nimport Controller, {ControllerProps} from './controller';\n\nimport {MapState, MapStateProps} from './map-controller';\nimport {mod} from '../utils/math-utils';\nimport LinearInterpolator from '../transitions/linear-interpolator';\n\nclass GlobeState extends MapState {\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props: Required): Required {\n // Ensure zoom is within specified range\n const {maxZoom, minZoom, zoom} = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n\n const {longitude, latitude} = props;\n if (longitude < -180 || longitude > 180) {\n props.longitude = mod(longitude + 180, 360) - 180;\n }\n props.latitude = clamp(latitude, -89, 89);\n\n return props;\n }\n}\n\nexport default class GlobeController extends Controller {\n ControllerState = GlobeState;\n\n transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['longitude', 'latitude', 'zoom'])\n };\n\n dragMode: 'pan' | 'rotate' = 'pan';\n\n setProps(props: ControllerProps) {\n super.setProps(props);\n\n // TODO - support pitching?\n this.dragRotate = false;\n this.touchRotate = false;\n }\n}\n","import View, {CommonViewState} from './view';\nimport GlobeViewport from '../viewports/globe-viewport';\nimport GlobeController from '../controllers/globe-controller';\n\nexport type GlobeViewState = {\n /** Longitude of the map center */\n longitude: number;\n /** Latitude of the map center */\n latitude: number;\n /** Zoom level */\n zoom: number;\n /** Min zoom, default `0` */\n minZoom?: number;\n /** Max zoom, default `20` */\n maxZoom?: number;\n} & CommonViewState;\n\ntype GlobeViewProps = {\n /** The resolution at which to turn flat features into 3D meshes, in degrees. Smaller numbers will generate more detailed mesh. Default `10`. */\n resolution?: number;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default to `0.1`. Overwrites the `near` parameter. */\n nearZMultiplier?: boolean;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the top edge of the screen. Default to `1.01`. Overwrites the `far` parameter. */\n farZMultiplier?: boolean;\n /** Distance of the camera relative to viewport height. Default `1.5`. */\n altitude?: number;\n};\n\nexport default class GlobeView extends View {\n static displayName = 'GlobeView';\n\n get ViewportType() {\n return GlobeViewport;\n }\n\n get ControllerType() {\n return GlobeController;\n }\n}\n","/* eslint-disable complexity */\nimport type DataColumn from './data-column';\nimport type {BufferAccessor, ShaderAttributeOptions} from './data-column';\nimport type {Buffer} from '@luma.gl/webgl';\nimport type {NumericArray} from '../../types/types';\n\nexport interface IShaderAttribute {\n value: NumericArray | null;\n getValue(): [Buffer, BufferAccessor] | NumericArray | null;\n}\n\n/* This class creates a luma.gl-compatible \"view\" on top of a DataColumn instance */\nexport default class ShaderAttribute implements IShaderAttribute {\n opts: ShaderAttributeOptions;\n source: DataColumn;\n\n constructor(dataColumn: DataColumn, opts: ShaderAttributeOptions) {\n // Options that cannot be changed later\n this.opts = opts;\n this.source = dataColumn;\n }\n\n get value(): NumericArray | null {\n return this.source.value;\n }\n\n getValue(): [Buffer, BufferAccessor] | NumericArray | null {\n const buffer = this.source.getBuffer();\n const accessor = this.getAccessor();\n if (buffer) {\n return [buffer, accessor];\n }\n\n const {value} = this.source;\n const {size} = accessor;\n let constantValue = value;\n\n if (value && value.length !== size) {\n constantValue = new Float32Array(size);\n // initiate offset values\n const index = accessor.elementOffset || 0; // element offset\n for (let i = 0; i < size; ++i) {\n constantValue[i] = value[index + i];\n }\n }\n\n return constantValue;\n }\n\n getAccessor() {\n return {\n // source data accessor\n ...this.source.getAccessor(),\n // shader attribute overrides\n ...this.opts\n };\n }\n}\n","/* eslint-disable complexity */\nimport GL from '@luma.gl/constants';\nimport {hasFeature, FEATURES, Buffer} from '@luma.gl/core';\nimport ShaderAttribute, {IShaderAttribute} from './shader-attribute';\nimport {glArrayFromType} from './gl-utils';\nimport typedArrayManager from '../../utils/typed-array-manager';\nimport {toDoublePrecisionArray} from '../../utils/math-utils';\nimport log from '../../utils/log';\n\nimport type {Buffer as LumaBuffer} from '@luma.gl/webgl';\nimport type {TypedArray, NumericArray, TypedArrayConstructor} from '../../types/types';\n\nexport type BufferAccessor = {\n /** A WebGL data type, see [vertexAttribPointer](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer#parameters). */\n type?: number;\n /** The number of elements per vertex attribute. */\n size?: number;\n /** 1 if instanced. */\n divisor?: number;\n /** Offset of the first vertex attribute into the buffer, in bytes. */\n offset?: number;\n /** The offset between the beginning of consecutive vertex attributes, in bytes. */\n stride?: number;\n /** Whether data values should be normalized. Note that all color attributes in deck.gl layers are normalized by default. */\n normalized?: boolean;\n integer?: boolean;\n};\n\nexport type ShaderAttributeOptions = Partial & {\n offset: number;\n stride: number;\n vertexOffset?: number;\n elementOffset?: number;\n};\n\nfunction getStride(accessor: DataColumnSettings): number {\n return accessor.stride || accessor.size * accessor.bytesPerElement;\n}\n\nfunction resolveShaderAttribute(\n baseAccessor: DataColumnSettings,\n shaderAttributeOptions: Partial\n): ShaderAttributeOptions {\n if (shaderAttributeOptions.offset) {\n log.removed('shaderAttribute.offset', 'vertexOffset, elementOffset')();\n }\n\n // All shader attributes share the parent's stride\n const stride = getStride(baseAccessor);\n // `vertexOffset` is used to access the neighboring vertex's value\n // e.g. `nextPositions` in polygon\n const vertexOffset =\n shaderAttributeOptions.vertexOffset !== undefined\n ? shaderAttributeOptions.vertexOffset\n : baseAccessor.vertexOffset || 0;\n // `elementOffset` is defined when shader attribute's size is smaller than the parent's\n // e.g. `translations` in transform matrix\n const elementOffset = shaderAttributeOptions.elementOffset || 0;\n const offset =\n // offsets defined by the attribute\n vertexOffset * stride +\n elementOffset * baseAccessor.bytesPerElement +\n // offsets defined by external buffers if any\n (baseAccessor.offset || 0);\n\n return {\n ...shaderAttributeOptions,\n offset,\n stride\n };\n}\n\nfunction resolveDoublePrecisionShaderAttributes(\n baseAccessor: DataColumnSettings,\n shaderAttributeOptions: Partial\n): {\n high: ShaderAttributeOptions;\n low: ShaderAttributeOptions;\n} {\n const resolvedOptions = resolveShaderAttribute(baseAccessor, shaderAttributeOptions);\n\n return {\n high: resolvedOptions,\n low: {\n ...resolvedOptions,\n offset: resolvedOptions.offset + baseAccessor.size * 4\n }\n };\n}\n\nexport type DataColumnOptions = Options &\n BufferAccessor & {\n id?: string;\n vertexOffset?: number;\n fp64?: boolean;\n logicalType?: number;\n isIndexed?: boolean;\n defaultValue?: number | number[];\n };\n\ntype DataColumnSettings = DataColumnOptions & {\n type: number;\n size: number;\n logicalType?: number;\n bytesPerElement: number;\n defaultValue: number[];\n defaultType: TypedArrayConstructor;\n};\n\ntype DataColumnInternalState = State & {\n externalBuffer: LumaBuffer | null;\n bufferAccessor: DataColumnSettings;\n allocatedValue: TypedArray | null;\n numInstances: number;\n bounds: [number[], number[]] | null;\n constant: boolean;\n};\n\nexport default class DataColumn implements IShaderAttribute {\n gl: WebGLRenderingContext;\n id: string;\n size: number;\n settings: DataColumnSettings;\n value: NumericArray | null;\n doublePrecision: boolean;\n\n protected _buffer: LumaBuffer | null;\n protected state: DataColumnInternalState;\n\n /* eslint-disable max-statements */\n constructor(gl: WebGLRenderingContext, opts: DataColumnOptions, state: State) {\n this.gl = gl;\n this.id = opts.id || '';\n this.size = opts.size || 1;\n\n const logicalType = opts.logicalType || opts.type;\n const doublePrecision = logicalType === GL.DOUBLE;\n\n let {defaultValue} = opts;\n defaultValue = Number.isFinite(defaultValue)\n ? [defaultValue]\n : defaultValue || new Array(this.size).fill(0);\n\n let bufferType: number;\n if (doublePrecision) {\n bufferType = GL.FLOAT;\n } else if (!logicalType && opts.isIndexed) {\n bufferType =\n gl && hasFeature(gl, FEATURES.ELEMENT_INDEX_UINT32) ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;\n } else {\n bufferType = logicalType || GL.FLOAT;\n }\n\n // This is the attribute type defined by the layer\n // If an external buffer is provided, this.type may be overwritten\n // But we always want to use defaultType for allocation\n let defaultType = glArrayFromType(logicalType || bufferType || GL.FLOAT);\n this.doublePrecision = doublePrecision;\n\n // `fp64: false` tells a double-precision attribute to allocate Float32Arrays\n // by default when using auto-packing. This is more efficient in use cases where\n // high precision is unnecessary, but the `64Low` attribute is still required\n // by the shader.\n if (doublePrecision && opts.fp64 === false) {\n defaultType = Float32Array;\n }\n\n this.value = null;\n this.settings = {\n ...opts,\n defaultType,\n defaultValue: defaultValue as number[],\n logicalType,\n type: bufferType,\n size: this.size,\n bytesPerElement: defaultType.BYTES_PER_ELEMENT\n };\n this.state = {\n ...state,\n externalBuffer: null,\n bufferAccessor: this.settings,\n allocatedValue: null,\n numInstances: 0,\n bounds: null,\n constant: false\n };\n this._buffer = null;\n }\n /* eslint-enable max-statements */\n\n get isConstant(): boolean {\n return this.state.constant;\n }\n\n get buffer(): LumaBuffer {\n if (!this._buffer) {\n const {isIndexed, type} = this.settings;\n this._buffer = new Buffer(this.gl, {\n id: this.id,\n target: isIndexed ? GL.ELEMENT_ARRAY_BUFFER : GL.ARRAY_BUFFER,\n accessor: {type}\n }) as LumaBuffer;\n }\n return this._buffer;\n }\n\n get byteOffset(): number {\n const accessor = this.getAccessor();\n if (accessor.vertexOffset) {\n return accessor.vertexOffset * getStride(accessor);\n }\n return 0;\n }\n\n get numInstances(): number {\n return this.state.numInstances;\n }\n\n set numInstances(n: number) {\n this.state.numInstances = n;\n }\n\n delete(): void {\n if (this._buffer) {\n this._buffer.delete();\n this._buffer = null;\n }\n typedArrayManager.release(this.state.allocatedValue);\n }\n\n getShaderAttributes(\n id: string,\n options: Partial | null\n ): Record {\n if (this.doublePrecision) {\n const shaderAttributes = {};\n const isBuffer64Bit = this.value instanceof Float64Array;\n\n const doubleShaderAttributeDefs = resolveDoublePrecisionShaderAttributes(\n this.getAccessor(),\n options || {}\n );\n\n shaderAttributes[id] = new ShaderAttribute(this, doubleShaderAttributeDefs.high);\n shaderAttributes[`${id}64Low`] = isBuffer64Bit\n ? new ShaderAttribute(this, doubleShaderAttributeDefs.low)\n : new Float32Array(this.size); // use constant for low part if buffer is 32-bit\n return shaderAttributes;\n }\n if (options) {\n const shaderAttributeDef = resolveShaderAttribute(this.getAccessor(), options);\n return {[id]: new ShaderAttribute(this, shaderAttributeDef)};\n }\n return {[id]: this};\n }\n\n getBuffer(): LumaBuffer | null {\n if (this.state.constant) {\n return null;\n }\n return this.state.externalBuffer || this._buffer;\n }\n\n getValue(): [LumaBuffer, BufferAccessor] | NumericArray | null {\n if (this.state.constant) {\n return this.value;\n }\n return [this.getBuffer() as LumaBuffer, this.getAccessor() as BufferAccessor];\n }\n\n getAccessor(): DataColumnSettings {\n return this.state.bufferAccessor;\n }\n\n // Returns [min: Array(size), max: Array(size)]\n /* eslint-disable max-depth */\n getBounds(): [number[], number[]] | null {\n if (this.state.bounds) {\n return this.state.bounds;\n }\n let result: [number[], number[]] | null = null;\n if (this.state.constant && this.value) {\n const min = Array.from(this.value);\n result = [min, min];\n } else {\n const {value, numInstances, size} = this;\n const len = numInstances * size;\n if (value && len && value.length >= len) {\n const min = new Array(size).fill(Infinity);\n const max = new Array(size).fill(-Infinity);\n for (let i = 0; i < len; ) {\n for (let j = 0; j < size; j++) {\n const v = value[i++];\n if (v < min[j]) min[j] = v;\n if (v > max[j]) max[j] = v;\n }\n }\n result = [min, max];\n }\n }\n this.state.bounds = result;\n return result;\n }\n\n // returns true if success\n // eslint-disable-next-line max-statements\n setData(\n data:\n | TypedArray\n | LumaBuffer\n | ({\n constant?: boolean;\n value?: NumericArray;\n buffer?: LumaBuffer;\n } & Partial)\n ): boolean {\n const {state} = this;\n\n let opts: {\n constant?: boolean;\n value?: NumericArray;\n buffer?: LumaBuffer;\n } & Partial;\n if (ArrayBuffer.isView(data)) {\n opts = {value: data};\n } else if (data instanceof Buffer) {\n opts = {buffer: data as LumaBuffer};\n } else {\n opts = data;\n }\n\n const accessor: DataColumnSettings = {...this.settings, ...opts};\n state.bufferAccessor = accessor;\n state.bounds = null; // clear cached bounds\n\n if (opts.constant) {\n // set constant\n let value = opts.value as NumericArray;\n value = this._normalizeValue(value, [], 0);\n if (this.settings.normalized) {\n value = this.normalizeConstant(value);\n }\n const hasChanged = !state.constant || !this._areValuesEqual(value, this.value);\n\n if (!hasChanged) {\n return false;\n }\n state.externalBuffer = null;\n state.constant = true;\n this.value = value;\n } else if (opts.buffer) {\n const buffer = opts.buffer;\n state.externalBuffer = buffer;\n state.constant = false;\n this.value = opts.value || null;\n const isBuffer64Bit = opts.value instanceof Float64Array;\n\n // Copy the type of the buffer into the accessor\n // @ts-ignore\n accessor.type = opts.type || buffer.accessor.type;\n // @ts-ignore\n accessor.bytesPerElement = buffer.accessor.BYTES_PER_ELEMENT * (isBuffer64Bit ? 2 : 1);\n accessor.stride = getStride(accessor);\n } else if (opts.value) {\n this._checkExternalBuffer(opts);\n\n let value = opts.value as TypedArray;\n state.externalBuffer = null;\n state.constant = false;\n this.value = value;\n\n accessor.bytesPerElement = value.BYTES_PER_ELEMENT;\n accessor.stride = getStride(accessor);\n\n const {buffer, byteOffset} = this;\n\n if (this.doublePrecision && value instanceof Float64Array) {\n value = toDoublePrecisionArray(value, accessor);\n }\n\n // A small over allocation is used as safety margin\n // Shader attributes may try to access this buffer with bigger offsets\n const requiredBufferSize = value.byteLength + byteOffset + accessor.stride * 2;\n if (buffer.byteLength < requiredBufferSize) {\n buffer.reallocate(requiredBufferSize);\n }\n // Hack: force Buffer to infer data type\n buffer.setAccessor(null);\n buffer.subData({data: value, offset: byteOffset});\n // @ts-ignore\n accessor.type = opts.type || buffer.accessor.type;\n }\n\n return true;\n }\n\n updateSubBuffer(\n opts: {\n startOffset?: number;\n endOffset?: number;\n } = {}\n ): void {\n this.state.bounds = null; // clear cached bounds\n\n const value = this.value as TypedArray;\n const {startOffset = 0, endOffset} = opts;\n this.buffer.subData({\n data:\n this.doublePrecision && value instanceof Float64Array\n ? toDoublePrecisionArray(value, {\n size: this.size,\n startIndex: startOffset,\n endIndex: endOffset\n })\n : value.subarray(startOffset, endOffset),\n offset: startOffset * value.BYTES_PER_ELEMENT + this.byteOffset\n });\n }\n\n allocate(numInstances: number, copy: boolean = false): boolean {\n const {state} = this;\n const oldValue = state.allocatedValue;\n\n // Allocate at least one element to ensure a valid buffer\n const value = typedArrayManager.allocate(oldValue, numInstances + 1, {\n size: this.size,\n type: this.settings.defaultType,\n copy\n });\n\n this.value = value;\n\n const {buffer, byteOffset} = this;\n\n if (buffer.byteLength < value.byteLength + byteOffset) {\n buffer.reallocate(value.byteLength + byteOffset);\n\n if (copy && oldValue) {\n // Upload the full existing attribute value to the GPU, so that updateBuffer\n // can choose to only update a partial range.\n // TODO - copy old buffer to new buffer on the GPU\n buffer.subData({\n data:\n oldValue instanceof Float64Array ? toDoublePrecisionArray(oldValue, this) : oldValue,\n offset: byteOffset\n });\n }\n }\n\n state.allocatedValue = value;\n state.constant = false;\n state.externalBuffer = null;\n state.bufferAccessor = this.settings;\n return true;\n }\n\n // PRIVATE HELPER METHODS\n protected _checkExternalBuffer(opts: {value?: NumericArray; normalized?: boolean}): void {\n const {value} = opts;\n if (!ArrayBuffer.isView(value)) {\n throw new Error(`Attribute ${this.id} value is not TypedArray`);\n }\n const ArrayType = this.settings.defaultType;\n\n let illegalArrayType = false;\n if (this.doublePrecision) {\n // not 32bit or 64bit\n illegalArrayType = value.BYTES_PER_ELEMENT < 4;\n }\n if (illegalArrayType) {\n throw new Error(`Attribute ${this.id} does not support ${value.constructor.name}`);\n }\n if (!(value instanceof ArrayType) && this.settings.normalized && !('normalized' in opts)) {\n log.warn(`Attribute ${this.id} is normalized`)();\n }\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\n normalizeConstant(value: NumericArray): NumericArray {\n switch (this.settings.type) {\n case GL.BYTE:\n // normalize [-128, 127] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 128) / 255) * 2 - 1);\n\n case GL.SHORT:\n // normalize [-32768, 32767] to [-1, 1]\n return new Float32Array(value).map(x => ((x + 32768) / 65535) * 2 - 1);\n\n case GL.UNSIGNED_BYTE:\n // normalize [0, 255] to [0, 1]\n return new Float32Array(value).map(x => x / 255);\n\n case GL.UNSIGNED_SHORT:\n // normalize [0, 65535] to [0, 1]\n return new Float32Array(value).map(x => x / 65535);\n\n default:\n // No normalization for gl.FLOAT and gl.HALF_FLOAT\n return value;\n }\n }\n\n /* check user supplied values and apply fallback */\n protected _normalizeValue(value: any, out: NumericArray, start: number): NumericArray {\n const {defaultValue, size} = this.settings;\n\n if (Number.isFinite(value)) {\n out[start] = value;\n return out;\n }\n if (!value) {\n out[start] = defaultValue[0];\n return out;\n }\n\n // Important - switch cases are 5x more performant than a for loop!\n /* eslint-disable no-fallthrough, default-case */\n switch (size) {\n case 4:\n out[start + 3] = Number.isFinite(value[3]) ? value[3] : defaultValue[3];\n case 3:\n out[start + 2] = Number.isFinite(value[2]) ? value[2] : defaultValue[2];\n case 2:\n out[start + 1] = Number.isFinite(value[1]) ? value[1] : defaultValue[1];\n case 1:\n out[start + 0] = Number.isFinite(value[0]) ? value[0] : defaultValue[0];\n break;\n\n default:\n // In the rare case where the attribute size > 4, do it the slow way\n // This is used for e.g. transform matrices\n let i = size;\n while (--i >= 0) {\n out[start + i] = Number.isFinite(value[i]) ? value[i] : defaultValue[i];\n }\n }\n\n return out;\n }\n\n protected _areValuesEqual(value1: any, value2: any): boolean {\n if (!value1 || !value2) {\n return false;\n }\n const {size} = this;\n for (let i = 0; i < size; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n}\n","import GL from '@luma.gl/constants';\nimport type {TypedArrayConstructor} from '../../types/types';\n\n/* eslint-disable complexity */\nexport function glArrayFromType(glType: number): TypedArrayConstructor {\n // Sorted in some order of likelihood to reduce amount of comparisons\n switch (glType) {\n case GL.FLOAT:\n return Float32Array;\n case GL.DOUBLE:\n return Float64Array;\n case GL.UNSIGNED_SHORT:\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return Uint16Array;\n case GL.UNSIGNED_INT:\n return Uint32Array;\n case GL.UNSIGNED_BYTE:\n return Uint8ClampedArray;\n case GL.BYTE:\n return Int8Array;\n case GL.SHORT:\n return Int16Array;\n case GL.INT:\n return Int32Array;\n default:\n throw new Error('Unknown GL type');\n }\n}\n/* eslint-enable complexity */\n","/*\n * range (Array)\n * + start (Number) - the start index (incl.)\n * + end (Number) - the end index (excl.)\n * rangeList (Array) - array of sorted, combined ranges\n */\nexport const EMPTY = [];\nexport const FULL = [[0, Infinity]];\n\n// Insert a range into a range collection\nexport function add(rangeList, range) {\n // Noop if range collection already covers all\n if (rangeList === FULL) {\n return rangeList;\n }\n\n // Validate the input range\n if (range[0] < 0) {\n range[0] = 0;\n }\n if (range[0] >= range[1]) {\n return rangeList;\n }\n\n // TODO - split off to tree-shakable Range class\n const newRangeList: number[] = [];\n const len = rangeList.length;\n let insertPosition = 0;\n\n for (let i = 0; i < len; i++) {\n const range0 = rangeList[i];\n\n if (range0[1] < range[0]) {\n // the current range is to the left of the new range\n newRangeList.push(range0);\n insertPosition = i + 1;\n } else if (range0[0] > range[1]) {\n // the current range is to the right of the new range\n newRangeList.push(range0);\n } else {\n range = [Math.min(range0[0], range[0]), Math.max(range0[1], range[1])];\n }\n }\n newRangeList.splice(insertPosition, 0, range);\n return newRangeList;\n}\n","/* eslint-disable complexity */\nimport DataColumn, {DataColumnOptions, ShaderAttributeOptions, BufferAccessor} from './data-column';\nimport {IShaderAttribute} from './shader-attribute';\nimport assert from '../../utils/assert';\nimport {createIterable, getAccessorFromBuffer} from '../../utils/iterable-utils';\nimport {fillArray} from '../../utils/flatten';\nimport * as range from '../../utils/range';\nimport {normalizeTransitionSettings, TransitionSettings} from './attribute-transition-utils';\nimport type {Buffer} from '@luma.gl/webgl';\n\nimport type {NumericArray, TypedArray} from '../../types/types';\n\nexport type Accessor = (\n object: DataType,\n context: {\n data: any;\n index: number;\n target: number[];\n }\n) => ReturnType;\n\nexport type Updater = (\n attribute: Attribute,\n {\n data,\n startRow,\n endRow,\n props,\n numInstances\n }: {\n data: any;\n startRow: number;\n endRow: number;\n props: any;\n numInstances: number;\n }\n) => void;\n\nexport type AttributeOptions = DataColumnOptions<{\n transition?: boolean | Partial;\n noAlloc?: boolean;\n update?: Updater;\n accessor?: Accessor | string | string[];\n transform?: (value: any) => any;\n shaderAttributes?: Record>;\n}>;\n\nexport type BinaryAttribute = Partial & {value?: TypedArray; buffer?: Buffer};\n\ntype AttributeInternalState = {\n startIndices: NumericArray | null;\n /** Legacy: external binary supplied via attribute name */\n lastExternalBuffer: TypedArray | Buffer | BinaryAttribute | null;\n /** External binary supplied via accessor name */\n binaryValue: TypedArray | Buffer | BinaryAttribute | null;\n binaryAccessor: Accessor | null;\n needsUpdate: string | boolean;\n needsRedraw: string | boolean;\n updateRanges: number[][];\n};\n\nexport default class Attribute extends DataColumn {\n /** Legacy approach to set attribute value - read `isConstant` instead for attribute state */\n constant: boolean = false;\n\n constructor(gl: WebGLRenderingContext, opts: AttributeOptions) {\n super(gl, opts, {\n startIndices: null,\n lastExternalBuffer: null,\n binaryValue: null,\n binaryAccessor: null,\n needsUpdate: true,\n needsRedraw: false,\n updateRanges: range.FULL\n });\n\n // eslint-disable-next-line\n this.settings.update = opts.update || (opts.accessor ? this._autoUpdater : undefined);\n\n Object.seal(this.settings);\n Object.seal(this.state);\n\n // Check all fields and generate helpful error messages\n this._validateAttributeUpdaters();\n }\n\n get startIndices(): NumericArray | null {\n return this.state.startIndices;\n }\n\n set startIndices(layout: NumericArray | null) {\n this.state.startIndices = layout;\n }\n\n needsUpdate(): string | boolean {\n return this.state.needsUpdate;\n }\n\n needsRedraw({clearChangedFlags = false}: {clearChangedFlags?: boolean} = {}): string | boolean {\n const needsRedraw = this.state.needsRedraw;\n this.state.needsRedraw = needsRedraw && !clearChangedFlags;\n return needsRedraw;\n }\n\n getUpdateTriggers(): string[] {\n const {accessor} = this.settings;\n\n // Backards compatibility: allow attribute name to be used as update trigger key\n return [this.id].concat((typeof accessor !== 'function' && accessor) || []);\n }\n\n supportsTransition(): boolean {\n return Boolean(this.settings.transition);\n }\n\n // Resolve transition settings object if transition is enabled, otherwise `null`\n getTransitionSetting(opts: Record): TransitionSettings | null {\n if (!opts || !this.supportsTransition()) {\n return null;\n }\n const {accessor} = this.settings;\n // TODO: have the layer resolve these transition settings itself?\n const layerSettings = this.settings.transition;\n // these are the transition settings passed in by the user\n const userSettings = Array.isArray(accessor)\n ? // @ts-ignore\n opts[accessor.find(a => opts[a])]\n : // @ts-ignore\n opts[accessor];\n\n // Shorthand: use duration instead of parameter object\n return normalizeTransitionSettings(userSettings, layerSettings);\n }\n\n setNeedsUpdate(reason: string = this.id, dataRange?: {startRow?: number; endRow?: number}): void {\n this.state.needsUpdate = this.state.needsUpdate || reason;\n this.setNeedsRedraw(reason);\n if (dataRange) {\n const {startRow = 0, endRow = Infinity} = dataRange;\n this.state.updateRanges = range.add(this.state.updateRanges, [startRow, endRow]);\n } else {\n this.state.updateRanges = range.FULL;\n }\n }\n\n clearNeedsUpdate(): void {\n this.state.needsUpdate = false;\n this.state.updateRanges = range.EMPTY;\n }\n\n setNeedsRedraw(reason: string = this.id): void {\n this.state.needsRedraw = this.state.needsRedraw || reason;\n }\n\n allocate(numInstances: number): boolean {\n const {state, settings} = this;\n\n if (settings.noAlloc) {\n // Data is provided through a Buffer object.\n return false;\n }\n\n if (settings.update) {\n super.allocate(numInstances, state.updateRanges !== range.FULL);\n return true;\n }\n\n return false;\n }\n\n updateBuffer({\n numInstances,\n data,\n props,\n context\n }: {\n numInstances: number;\n data: any;\n props: any;\n context: any;\n }): boolean {\n if (!this.needsUpdate()) {\n return false;\n }\n\n const {\n state: {updateRanges},\n settings: {update, noAlloc}\n } = this;\n\n let updated = true;\n if (update) {\n // Custom updater - typically for non-instanced layers\n for (const [startRow, endRow] of updateRanges) {\n update.call(context, this, {data, startRow, endRow, props, numInstances});\n }\n if (!this.value) {\n // no value was assigned during update\n } else if (\n this.constant ||\n this.buffer.byteLength < (this.value as TypedArray).byteLength + this.byteOffset\n ) {\n this.setData({\n value: this.value,\n constant: this.constant\n });\n // Setting attribute.constant in updater is a legacy approach that interferes with allocation in the next cycle\n // Respect it here but reset after use\n this.constant = false;\n } else {\n for (const [startRow, endRow] of updateRanges) {\n const startOffset = Number.isFinite(startRow) ? this.getVertexOffset(startRow) : 0;\n const endOffset = Number.isFinite(endRow)\n ? this.getVertexOffset(endRow)\n : noAlloc || !Number.isFinite(numInstances)\n ? this.value.length\n : numInstances * this.size;\n\n super.updateSubBuffer({startOffset, endOffset});\n }\n }\n this._checkAttributeArray();\n } else {\n updated = false;\n }\n\n this.clearNeedsUpdate();\n this.setNeedsRedraw();\n\n return updated;\n }\n\n // Use generic value\n // Returns true if successful\n setConstantValue(value?: NumericArray): boolean {\n if (value === undefined || typeof value === 'function') {\n return false;\n }\n\n const hasChanged = this.setData({constant: true, value});\n\n if (hasChanged) {\n this.setNeedsRedraw();\n }\n this.clearNeedsUpdate();\n return true;\n }\n\n // Use external buffer\n // Returns true if successful\n // eslint-disable-next-line max-statements\n setExternalBuffer(buffer?: TypedArray | Buffer | BinaryAttribute): boolean {\n const {state} = this;\n\n if (!buffer) {\n state.lastExternalBuffer = null;\n return false;\n }\n\n this.clearNeedsUpdate();\n\n if (state.lastExternalBuffer === buffer) {\n return true;\n }\n state.lastExternalBuffer = buffer;\n this.setNeedsRedraw();\n this.setData(buffer);\n return true;\n }\n\n // Binary value is a typed array packed from mapping the source data with the accessor\n // If the returned value from the accessor is the same as the attribute value, set it directly\n // Otherwise use the auto updater for transform/normalization\n setBinaryValue(\n buffer?: TypedArray | Buffer | BinaryAttribute,\n startIndices: NumericArray | null = null\n ): boolean {\n const {state, settings} = this;\n\n if (!buffer) {\n state.binaryValue = null;\n state.binaryAccessor = null;\n return false;\n }\n\n if (settings.noAlloc) {\n // Let the layer handle this\n return false;\n }\n\n if (state.binaryValue === buffer) {\n this.clearNeedsUpdate();\n return true;\n }\n state.binaryValue = buffer;\n this.setNeedsRedraw();\n\n const needsUpdate = settings.transform || startIndices !== this.startIndices;\n\n if (needsUpdate) {\n if (ArrayBuffer.isView(buffer)) {\n buffer = {value: buffer};\n }\n const binaryValue = buffer as BinaryAttribute;\n assert(ArrayBuffer.isView(binaryValue.value), `invalid ${settings.accessor}`);\n const needsNormalize = Boolean(binaryValue.size) && binaryValue.size !== this.size;\n\n state.binaryAccessor = getAccessorFromBuffer(binaryValue.value, {\n size: binaryValue.size || this.size,\n stride: binaryValue.stride,\n offset: binaryValue.offset,\n startIndices: startIndices as NumericArray,\n nested: needsNormalize\n });\n // Fall through to auto updater\n return false;\n }\n\n this.clearNeedsUpdate();\n this.setData(buffer);\n return true;\n }\n\n getVertexOffset(row: number): number {\n const {startIndices} = this;\n const vertexIndex = startIndices ? startIndices[row] : row;\n return vertexIndex * this.size;\n }\n\n getShaderAttributes(): Record {\n const shaderAttributeDefs = this.settings.shaderAttributes || {[this.id]: null};\n const shaderAttributes: Record = {};\n\n for (const shaderAttributeName in shaderAttributeDefs) {\n Object.assign(\n shaderAttributes,\n super.getShaderAttributes(shaderAttributeName, shaderAttributeDefs[shaderAttributeName])\n );\n }\n\n return shaderAttributes;\n }\n\n /* eslint-disable max-depth, max-statements */\n private _autoUpdater(\n attribute: Attribute,\n {\n data,\n startRow,\n endRow,\n props,\n numInstances\n }: {\n data: any;\n startRow: number;\n endRow: number;\n props: any;\n numInstances: number;\n }\n ): void {\n if (attribute.constant) {\n return;\n }\n const {settings, state, value, size, startIndices} = attribute;\n\n const {accessor, transform} = settings;\n const accessorFunc: Accessor =\n state.binaryAccessor ||\n // @ts-ignore\n (typeof accessor === 'function' ? accessor : props[accessor]);\n\n assert(typeof accessorFunc === 'function', `accessor \"${accessor}\" is not a function`);\n\n let i = attribute.getVertexOffset(startRow);\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n\n let objectValue = accessorFunc(object, objectInfo);\n if (transform) {\n // transform callbacks could be bound to a particular layer instance.\n // always point `this` to the current layer.\n objectValue = transform.call(this, objectValue);\n }\n\n if (startIndices) {\n const numVertices =\n (objectInfo.index < startIndices.length - 1\n ? startIndices[objectInfo.index + 1]\n : numInstances) - startIndices[objectInfo.index];\n if (objectValue && Array.isArray(objectValue[0])) {\n let startIndex = i;\n for (const item of objectValue) {\n attribute._normalizeValue(item, value as TypedArray, startIndex);\n startIndex += size;\n }\n } else if (objectValue && objectValue.length > size) {\n (value as TypedArray).set(objectValue, i);\n } else {\n attribute._normalizeValue(objectValue, objectInfo.target, 0);\n fillArray({\n target: value,\n source: objectInfo.target,\n start: i,\n count: numVertices\n });\n }\n i += numVertices * size;\n } else {\n attribute._normalizeValue(objectValue, value as TypedArray, i);\n i += size;\n }\n }\n }\n /* eslint-enable max-depth, max-statements */\n\n // Validate deck.gl level fields\n private _validateAttributeUpdaters() {\n const {settings} = this;\n\n // Check that 'update' is a valid function\n const hasUpdater = settings.noAlloc || typeof settings.update === 'function';\n if (!hasUpdater) {\n throw new Error(`Attribute ${this.id} missing update or accessor`);\n }\n }\n\n // check that the first few elements of the attribute are reasonable\n /* eslint-disable no-fallthrough */\n private _checkAttributeArray() {\n const {value} = this;\n const limit = Math.min(4, this.size);\n if (value && value.length >= limit) {\n let valid = true;\n switch (limit) {\n case 4:\n valid = valid && Number.isFinite(value[3]);\n case 3:\n valid = valid && Number.isFinite(value[2]);\n case 2:\n valid = valid && Number.isFinite(value[1]);\n case 1:\n valid = valid && Number.isFinite(value[0]);\n break;\n default:\n valid = false;\n }\n\n if (!valid) {\n throw new Error(`Illegal attribute generated for ${this.id}`);\n }\n }\n }\n /* eslint-enable no-fallthrough */\n}\n","import GL from '@luma.gl/constants';\nimport {Buffer, Transform} from '@luma.gl/core';\nimport Attribute from '../lib/attribute/attribute';\nimport {\n padBuffer,\n getAttributeTypeFromSize,\n getSourceBufferAttribute,\n getAttributeBufferLength,\n cycleBuffers,\n InterpolationTransitionSettings\n} from '../lib/attribute/attribute-transition-utils';\nimport Transition from './transition';\n\nimport type {Timeline, Transform as LumaTransform} from '@luma.gl/engine';\nimport type {Buffer as LumaBuffer} from '@luma.gl/webgl';\nimport type {NumericArray} from '../types/types';\nimport type GPUTransition from './gpu-transition';\n\nexport default class GPUInterpolationTransition implements GPUTransition {\n gl: WebGLRenderingContext;\n type = 'interpolation';\n attributeInTransition: Attribute;\n\n private settings?: InterpolationTransitionSettings;\n private attribute: Attribute;\n private transition: Transition;\n private currentStartIndices: NumericArray | null;\n private currentLength: number;\n private transform: LumaTransform;\n private buffers: LumaBuffer[];\n\n constructor({\n gl,\n attribute,\n timeline\n }: {\n gl: WebGLRenderingContext;\n attribute: Attribute;\n timeline: Timeline;\n }) {\n this.gl = gl;\n this.transition = new Transition(timeline);\n this.attribute = attribute;\n // this is the attribute we return during the transition - note: if it is a constant\n // attribute, it will be converted and returned as a regular attribute\n // `attribute.userData` is the original options passed when constructing the attribute.\n // This ensures that we set the proper `doublePrecision` flag and shader attributes.\n this.attributeInTransition = new Attribute(gl, attribute.settings);\n this.currentStartIndices = attribute.startIndices;\n // storing currentLength because this.buffer may be larger than the actual length we want to use\n // this is because we only reallocate buffers when they grow, not when they shrink,\n // due to performance costs\n this.currentLength = 0;\n this.transform = getTransform(gl, attribute);\n const bufferOpts = {\n byteLength: 0,\n usage: GL.DYNAMIC_COPY\n };\n this.buffers = [\n new Buffer(gl, bufferOpts), // from\n new Buffer(gl, bufferOpts) // current\n ];\n }\n\n get inProgress(): boolean {\n return this.transition.inProgress;\n }\n\n // this is called when an attribute's values have changed and\n // we need to start animating towards the new values\n // this also correctly resizes / pads the transform's buffers\n // in case the attribute's buffer has changed in length or in\n // startIndices\n start(transitionSettings: InterpolationTransitionSettings, numInstances: number): void {\n if (transitionSettings.duration <= 0) {\n this.transition.cancel();\n return;\n }\n this.settings = transitionSettings;\n\n const {gl, buffers, attribute} = this;\n // Alternate between two buffers when new transitions start.\n // Last destination buffer is used as an attribute (from state),\n // And the other buffer is now the current buffer.\n cycleBuffers(buffers);\n\n const padBufferOpts = {\n numInstances,\n attribute,\n fromLength: this.currentLength,\n fromStartIndices: this.currentStartIndices,\n getData: transitionSettings.enter\n };\n\n for (const buffer of buffers) {\n padBuffer({buffer, ...padBufferOpts});\n }\n\n this.currentStartIndices = attribute.startIndices;\n this.currentLength = getAttributeBufferLength(attribute, numInstances);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: attribute.value as NumericArray\n });\n\n this.transition.start(transitionSettings);\n\n this.transform.update({\n elementCount: Math.floor(this.currentLength / attribute.size),\n sourceBuffers: {\n aFrom: buffers[0],\n aTo: getSourceBufferAttribute(gl, attribute)\n },\n feedbackBuffers: {\n vCurrent: buffers[1]\n }\n });\n }\n\n update(): boolean {\n const updated = this.transition.update();\n if (updated) {\n const {duration, easing} = this.settings as InterpolationTransitionSettings;\n const {time} = this.transition;\n let t = time / duration;\n if (easing) {\n t = easing(t);\n }\n this.transform.run({\n uniforms: {time: t}\n });\n }\n return updated;\n }\n\n cancel(): void {\n this.transition.cancel();\n this.transform.delete();\n for (const buffer of this.buffers) {\n buffer.delete();\n }\n this.buffers.length = 0;\n }\n}\n\nconst vs = `\n#define SHADER_NAME interpolation-transition-vertex-shader\n\nuniform float time;\nattribute ATTRIBUTE_TYPE aFrom;\nattribute ATTRIBUTE_TYPE aTo;\nvarying ATTRIBUTE_TYPE vCurrent;\n\nvoid main(void) {\n vCurrent = mix(aFrom, aTo, time);\n gl_Position = vec4(0.0);\n}\n`;\n\nfunction getTransform(gl: WebGLRenderingContext, attribute: Attribute): LumaTransform {\n const attributeType = getAttributeTypeFromSize(attribute.size);\n return new Transform(gl, {\n vs,\n defines: {\n ATTRIBUTE_TYPE: attributeType\n },\n varyings: ['vCurrent']\n });\n}\n","import {Transform} from '@luma.gl/core';\nimport GPUInterpolationTransition from '../../transitions/gpu-interpolation-transition';\nimport GPUSpringTransition from '../../transitions/gpu-spring-transition';\nimport log from '../../utils/log';\n\nimport type {TransitionSettings} from './attribute-transition-utils';\nimport type Attribute from './attribute';\nimport type {Timeline} from '@luma.gl/engine';\nimport type GPUTransition from '../../transitions/gpu-transition';\nimport type {ConstructorOf} from '../../types/types';\n\nconst TRANSITION_TYPES: Record> = {\n interpolation: GPUInterpolationTransition,\n spring: GPUSpringTransition\n};\n\nexport default class AttributeTransitionManager {\n id: string;\n isSupported: boolean;\n\n private gl: WebGLRenderingContext;\n private timeline?: Timeline;\n\n private transitions: {[id: string]: GPUTransition};\n private needsRedraw: boolean;\n private numInstances: number;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n id,\n timeline\n }: {\n id: string;\n timeline?: Timeline;\n }\n ) {\n this.id = id;\n this.gl = gl;\n this.timeline = timeline;\n\n this.transitions = {};\n this.needsRedraw = false;\n this.numInstances = 1;\n\n this.isSupported = Transform.isSupported(gl);\n }\n\n finalize(): void {\n for (const attributeName in this.transitions) {\n this._removeTransition(attributeName);\n }\n }\n\n /* Public methods */\n\n // Called when attribute manager updates\n // Check the latest attributes for updates.\n update({\n attributes,\n transitions,\n numInstances\n }: {\n attributes: {[id: string]: Attribute};\n transitions: any;\n numInstances: number;\n }): void {\n // Transform class will crash if elementCount is 0\n this.numInstances = numInstances || 1;\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const settings = attribute.getTransitionSetting(transitions);\n\n // this attribute might not support transitions?\n if (!settings) continue; // eslint-disable-line no-continue\n this._updateAttribute(attributeName, attribute, settings);\n }\n\n for (const attributeName in this.transitions) {\n const attribute = attributes[attributeName];\n if (!attribute || !attribute.getTransitionSetting(transitions)) {\n // Animated attribute has been removed\n this._removeTransition(attributeName);\n }\n }\n }\n\n // Returns `true` if attribute is transition-enabled\n hasAttribute(attributeName: string): boolean {\n const transition = this.transitions[attributeName];\n return transition && transition.inProgress;\n }\n\n // Get all the animated attributes\n getAttributes(): {[id: string]: Attribute} {\n const animatedAttributes = {};\n\n for (const attributeName in this.transitions) {\n const transition = this.transitions[attributeName];\n if (transition.inProgress) {\n animatedAttributes[attributeName] = transition.attributeInTransition;\n }\n }\n\n return animatedAttributes;\n }\n\n /* eslint-disable max-statements */\n // Called every render cycle, run transform feedback\n // Returns `true` if anything changes\n run(): boolean {\n if (!this.isSupported || this.numInstances === 0) {\n return false;\n }\n\n for (const attributeName in this.transitions) {\n const updated = this.transitions[attributeName].update();\n if (updated) {\n this.needsRedraw = true;\n }\n }\n\n const needsRedraw = this.needsRedraw;\n this.needsRedraw = false;\n return needsRedraw;\n }\n /* eslint-enable max-statements */\n\n /* Private methods */\n private _removeTransition(attributeName: string): void {\n this.transitions[attributeName].cancel();\n delete this.transitions[attributeName];\n }\n\n // Check an attributes for updates\n // Returns a transition object if a new transition is triggered.\n private _updateAttribute(\n attributeName: string,\n attribute: Attribute,\n settings: TransitionSettings\n ): void {\n const transition = this.transitions[attributeName];\n // an attribute can change transition type when it updates\n // let's remove the transition when that happens so we can create the new transition type\n // TODO: when switching transition types, make sure to carry over the attribute's\n // previous buffers, currentLength, startIndices, etc, to be used as the starting point\n // for the next transition\n let isNew = !transition || transition.type !== settings.type;\n if (isNew) {\n if (!this.isSupported) {\n log.warn(\n `WebGL2 not supported by this browser. Transition for ${attributeName} is disabled.`\n )();\n return;\n }\n\n if (transition) {\n this._removeTransition(attributeName);\n }\n\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (TransitionType) {\n this.transitions[attributeName] = new TransitionType({\n attribute,\n timeline: this.timeline,\n gl: this.gl\n });\n } else {\n log.error(`unsupported transition type '${settings.type}'`)();\n isNew = false;\n }\n }\n\n if (isNew || attribute.needsRedraw()) {\n this.needsRedraw = true;\n this.transitions[attributeName].start(settings, this.numInstances);\n }\n }\n}\n","/* eslint-disable complexity, max-statements, max-params */\nimport GL from '@luma.gl/constants';\nimport {Buffer, Transform, Framebuffer, Texture2D, readPixelsToArray} from '@luma.gl/core';\nimport {\n padBuffer,\n getAttributeTypeFromSize,\n getSourceBufferAttribute,\n getAttributeBufferLength,\n cycleBuffers,\n SpringTransitionSettings\n} from '../lib/attribute/attribute-transition-utils';\nimport Attribute from '../lib/attribute/attribute';\nimport Transition from './transition';\n\nimport type {Timeline, Transform as LumaTransform} from '@luma.gl/engine';\nimport type {\n Buffer as LumaBuffer,\n Framebuffer as LumaFramebuffer,\n Texture2D as LumaTexture2D\n} from '@luma.gl/webgl';\nimport type {NumericArray} from '../types/types';\nimport type GPUTransition from './gpu-transition';\n\nexport default class GPUSpringTransition implements GPUTransition {\n gl: WebGLRenderingContext;\n type = 'spring';\n attributeInTransition: Attribute;\n\n private settings?: SpringTransitionSettings;\n private attribute: Attribute;\n private transition: Transition;\n private currentStartIndices: NumericArray | null;\n private currentLength: number;\n private texture: LumaTexture2D;\n private framebuffer: LumaFramebuffer;\n private transform: LumaTransform;\n private buffers: LumaBuffer[];\n\n constructor({\n gl,\n attribute,\n timeline\n }: {\n gl: WebGLRenderingContext;\n attribute: Attribute;\n timeline: Timeline;\n }) {\n this.gl = gl;\n this.type = 'spring';\n this.transition = new Transition(timeline);\n this.attribute = attribute;\n // this is the attribute we return during the transition - note: if it is a constant\n // attribute, it will be converted and returned as a regular attribute\n // `attribute.userData` is the original options passed when constructing the attribute.\n // This ensures that we set the proper `doublePrecision` flag and shader attributes.\n this.attributeInTransition = new Attribute(gl, {...attribute.settings, normalized: false});\n this.currentStartIndices = attribute.startIndices;\n // storing currentLength because this.buffer may be larger than the actual length we want to use\n // this is because we only reallocate buffers when they grow, not when they shrink,\n // due to performance costs\n this.currentLength = 0;\n this.texture = getTexture(gl);\n this.framebuffer = getFramebuffer(gl, this.texture);\n this.transform = getTransform(gl, attribute, this.framebuffer);\n const bufferOpts = {\n byteLength: 0,\n usage: GL.DYNAMIC_COPY\n };\n this.buffers = [\n new Buffer(gl, bufferOpts), // previous\n new Buffer(gl, bufferOpts), // current\n new Buffer(gl, bufferOpts) // next\n ];\n }\n\n get inProgress(): boolean {\n return this.transition.inProgress;\n }\n\n // this is called when an attribute's values have changed and\n // we need to start animating towards the new values\n // this also correctly resizes / pads the transform's buffers\n // in case the attribute's buffer has changed in length or in\n // startIndices\n start(transitionSettings: SpringTransitionSettings, numInstances: number): void {\n const {gl, buffers, attribute} = this;\n const padBufferOpts = {\n numInstances,\n attribute,\n fromLength: this.currentLength,\n fromStartIndices: this.currentStartIndices,\n getData: transitionSettings.enter\n };\n\n for (const buffer of buffers) {\n padBuffer({buffer, ...padBufferOpts});\n }\n\n this.settings = transitionSettings;\n this.currentStartIndices = attribute.startIndices;\n this.currentLength = getAttributeBufferLength(attribute, numInstances);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: attribute.value as NumericArray\n });\n\n // when an attribute changes values, a new transition is started. These\n // are properties that we have to store on this.transition but can change\n // when new transitions are started, so we have to keep them up-to-date.\n // this.transition.start() takes the latest settings and updates them.\n this.transition.start({...transitionSettings, duration: Infinity});\n\n this.transform.update({\n elementCount: Math.floor(this.currentLength / attribute.size),\n sourceBuffers: {\n aTo: getSourceBufferAttribute(gl, attribute)\n }\n });\n }\n\n update() {\n const {buffers, transform, framebuffer, transition} = this;\n const updated = transition.update();\n if (!updated) {\n return false;\n }\n const settings = this.settings as SpringTransitionSettings;\n\n transform.update({\n sourceBuffers: {\n aPrev: buffers[0],\n aCur: buffers[1]\n },\n feedbackBuffers: {\n vNext: buffers[2]\n }\n });\n transform.run({\n framebuffer,\n discard: false,\n clearRenderTarget: true,\n uniforms: {\n stiffness: settings.stiffness,\n damping: settings.damping\n },\n parameters: {\n depthTest: false,\n blend: true,\n viewport: [0, 0, 1, 1],\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: [GL.MAX, GL.MAX]\n }\n });\n\n cycleBuffers(buffers);\n this.attributeInTransition.setData({\n buffer: buffers[1],\n // Hack: Float64Array is required for double-precision attributes\n // to generate correct shader attributes\n value: this.attribute.value as NumericArray\n });\n\n const isTransitioning = readPixelsToArray(framebuffer)[0] > 0;\n\n if (!isTransitioning) {\n transition.end();\n }\n\n return true;\n }\n\n cancel() {\n this.transition.cancel();\n this.transform.delete();\n for (const buffer of this.buffers) {\n buffer.delete();\n }\n this.buffers.length = 0;\n this.texture.delete();\n this.framebuffer.delete();\n }\n}\n\nfunction getTransform(\n gl: WebGLRenderingContext,\n attribute: Attribute,\n framebuffer: LumaFramebuffer\n): LumaTransform {\n const attributeType = getAttributeTypeFromSize(attribute.size);\n return new Transform(gl, {\n framebuffer,\n vs: `\n#define SHADER_NAME spring-transition-vertex-shader\n\n#define EPSILON 0.00001\n\nuniform float stiffness;\nuniform float damping;\nattribute ATTRIBUTE_TYPE aPrev;\nattribute ATTRIBUTE_TYPE aCur;\nattribute ATTRIBUTE_TYPE aTo;\nvarying ATTRIBUTE_TYPE vNext;\nvarying float vIsTransitioningFlag;\n\nATTRIBUTE_TYPE getNextValue(ATTRIBUTE_TYPE cur, ATTRIBUTE_TYPE prev, ATTRIBUTE_TYPE dest) {\n ATTRIBUTE_TYPE velocity = cur - prev;\n ATTRIBUTE_TYPE delta = dest - cur;\n ATTRIBUTE_TYPE spring = delta * stiffness;\n ATTRIBUTE_TYPE damper = velocity * -1.0 * damping;\n return spring + damper + velocity + cur;\n}\n\nvoid main(void) {\n bool isTransitioning = length(aCur - aPrev) > EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n`,\n fs: `\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nvarying float vIsTransitioningFlag;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n gl_FragColor = vec4(1.0);\n}`,\n defines: {\n ATTRIBUTE_TYPE: attributeType\n },\n varyings: ['vNext']\n });\n}\n\nfunction getTexture(gl: WebGLRenderingContext): LumaTexture2D {\n return new Texture2D(gl, {\n data: new Uint8Array(4),\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n border: 0,\n mipmaps: false,\n dataFormat: GL.RGBA,\n width: 1,\n height: 1\n });\n}\n\nfunction getFramebuffer(gl: WebGLRenderingContext, texture: LumaTexture2D): LumaFramebuffer {\n return new Framebuffer(gl, {\n id: 'spring-transition-is-transitioning-framebuffer',\n width: 1,\n height: 1,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: texture\n }\n });\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable guard-for-in */\nimport Attribute, {AttributeOptions} from './attribute';\nimport {IShaderAttribute} from './shader-attribute';\nimport log from '../../utils/log';\nimport debug from '../../debug';\nimport {NumericArray} from '../../types/types';\n\nimport AttributeTransitionManager from './attribute-transition-manager';\n\nimport type {Stat} from 'probe.gl';\nimport type {Timeline} from '@luma.gl/engine';\n\nconst TRACE_INVALIDATE = 'attributeManager.invalidate';\nconst TRACE_UPDATE_START = 'attributeManager.updateStart';\nconst TRACE_UPDATE_END = 'attributeManager.updateEnd';\nconst TRACE_ATTRIBUTE_UPDATE_START = 'attribute.updateStart';\nconst TRACE_ATTRIBUTE_ALLOCATE = 'attribute.allocate';\nconst TRACE_ATTRIBUTE_UPDATE_END = 'attribute.updateEnd';\n\nexport default class AttributeManager {\n /**\n * @classdesc\n * Automated attribute generation and management. Suitable when a set of\n * vertex shader attributes are generated by iteration over a data array,\n * and updates to these attributes are needed either when the data itself\n * changes, or when other data relevant to the calculations change.\n *\n * - First the application registers descriptions of its dynamic vertex\n * attributes using AttributeManager.add().\n * - Then, when any change that affects attributes is detected by the\n * application, the app will call AttributeManager.invalidate().\n * - Finally before it renders, it calls AttributeManager.update() to\n * ensure that attributes are automatically rebuilt if anything has been\n * invalidated.\n *\n * The application provided update functions describe how attributes\n * should be updated from a data array and are expected to traverse\n * that data array (or iterable) and fill in the attribute's typed array.\n *\n * Note that the attribute manager intentionally does not do advanced\n * change detection, but instead makes it easy to build such detection\n * by offering the ability to \"invalidate\" each attribute separately.\n */\n id: string;\n gl: WebGLRenderingContext;\n attributes: Record;\n updateTriggers: {[name: string]: string[]};\n needsRedraw: string | boolean;\n userData: any;\n\n private stats?: Stat;\n private attributeTransitionManager: AttributeTransitionManager;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n id = 'attribute-manager',\n stats,\n timeline\n }: {\n id?: string;\n stats?: Stat;\n timeline?: Timeline;\n } = {}\n ) {\n this.id = id;\n this.gl = gl;\n\n this.attributes = {};\n\n this.updateTriggers = {};\n this.needsRedraw = true;\n\n this.userData = {};\n this.stats = stats;\n\n this.attributeTransitionManager = new AttributeTransitionManager(gl, {\n id: `${id}-transitions`,\n timeline\n });\n\n // For debugging sanity, prevent uninitialized members\n Object.seal(this);\n }\n\n finalize() {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].delete();\n }\n this.attributeTransitionManager.finalize();\n }\n\n // Returns the redraw flag, optionally clearing it.\n // Redraw flag will be set if any attributes attributes changed since\n // flag was last cleared.\n //\n // @param {String} [clearRedrawFlags=false] - whether to clear the flag\n // @return {false|String} - reason a redraw is needed.\n getNeedsRedraw(opts: {clearRedrawFlags?: boolean} = {clearRedrawFlags: false}): string | false {\n const redraw = this.needsRedraw;\n this.needsRedraw = this.needsRedraw && !opts.clearRedrawFlags;\n return redraw && this.id;\n }\n\n // Sets the redraw flag.\n // @param {Boolean} redraw=true\n setNeedsRedraw() {\n this.needsRedraw = true;\n }\n\n // Adds attributes\n add(attributes: {[id: string]: AttributeOptions}) {\n this._add(attributes);\n }\n\n // Adds attributes\n addInstanced(attributes: {[id: string]: AttributeOptions}) {\n this._add(attributes, {instanced: 1});\n }\n\n /**\n * Removes attributes\n * Takes an array of attribute names and delete them from\n * the attribute map if they exists\n *\n * @example\n * attributeManager.remove(['position']);\n *\n * @param {Object} attributeNameArray - attribute name array (see above)\n */\n remove(attributeNameArray: string[]) {\n for (const name of attributeNameArray) {\n if (this.attributes[name] !== undefined) {\n this.attributes[name].delete();\n delete this.attributes[name];\n }\n }\n }\n\n // Marks an attribute for update\n invalidate(triggerName: string, dataRange?: {startRow?: number; endRow?: number}) {\n const invalidatedAttributes = this._invalidateTrigger(triggerName, dataRange);\n // For performance tuning\n debug(TRACE_INVALIDATE, this, triggerName, invalidatedAttributes);\n }\n\n invalidateAll(dataRange?: {startRow?: number; endRow?: number}) {\n for (const attributeName in this.attributes) {\n this.attributes[attributeName].setNeedsUpdate(attributeName, dataRange);\n }\n // For performance tuning\n debug(TRACE_INVALIDATE, this, 'all');\n }\n\n // Ensure all attribute buffers are updated from props or data.\n update({\n data,\n numInstances,\n startIndices = null,\n transitions,\n props = {},\n buffers = {},\n context = {}\n }: {\n data: any;\n numInstances: number;\n startIndices?: NumericArray | null;\n transitions: any;\n props: any;\n buffers: any;\n context: any;\n }) {\n // keep track of whether some attributes are updated\n let updated = false;\n\n debug(TRACE_UPDATE_START, this);\n if (this.stats) {\n this.stats.get('Update Attributes').timeStart();\n }\n\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n const accessorName = attribute.settings.accessor;\n attribute.startIndices = startIndices;\n attribute.numInstances = numInstances;\n\n if (props[attributeName]) {\n log.removed(`props.${attributeName}`, `data.attributes.${attributeName}`)();\n }\n\n if (attribute.setExternalBuffer(buffers[attributeName])) {\n // Step 1: try update attribute directly from external buffers\n } else if (\n attribute.setBinaryValue(\n typeof accessorName === 'string' ? buffers[accessorName] : undefined,\n data.startIndices\n )\n ) {\n // Step 2: try set packed value from external typed array\n } else if (\n typeof accessorName === 'string' &&\n !buffers[accessorName] &&\n attribute.setConstantValue(props[accessorName])\n ) {\n // Step 3: try set constant value from props\n // Note: if buffers[accessorName] is supplied, ignore props[accessorName]\n // This may happen when setBinaryValue falls through to use the auto updater\n } else if (attribute.needsUpdate()) {\n // Step 4: update via updater callback\n updated = true;\n this._updateAttribute({\n attribute,\n numInstances,\n data,\n props,\n context\n });\n }\n\n this.needsRedraw = this.needsRedraw || attribute.needsRedraw();\n }\n\n if (updated) {\n // Only initiate alloc/update (and logging) if actually needed\n debug(TRACE_UPDATE_END, this, numInstances);\n }\n\n if (this.stats) {\n this.stats.get('Update Attributes').timeEnd();\n }\n\n this.attributeTransitionManager.update({\n attributes: this.attributes,\n numInstances,\n transitions\n });\n }\n\n // Update attribute transition to the current timestamp\n // Returns `true` if any transition is in progress\n updateTransition() {\n const {attributeTransitionManager} = this;\n const transitionUpdated = attributeTransitionManager.run();\n this.needsRedraw = this.needsRedraw || transitionUpdated;\n return transitionUpdated;\n }\n\n /**\n * Returns all attribute descriptors\n * Note: Format matches luma.gl Model/Program.setAttributes()\n * @return {Object} attributes - descriptors\n */\n getAttributes(): {[id: string]: Attribute} {\n return this.attributes;\n }\n\n /**\n * Returns changed attribute descriptors\n * This indicates which WebGLBuffers need to be updated\n * @return {Object} attributes - descriptors\n */\n getChangedAttributes(opts: {clearChangedFlags?: boolean} = {clearChangedFlags: false}): {\n [id: string]: Attribute;\n } {\n const {attributes, attributeTransitionManager} = this;\n\n const changedAttributes = {...attributeTransitionManager.getAttributes()};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n if (attribute.needsRedraw(opts) && !attributeTransitionManager.hasAttribute(attributeName)) {\n changedAttributes[attributeName] = attribute;\n }\n }\n\n return changedAttributes;\n }\n\n // Returns shader attributes\n getShaderAttributes(\n attributes?: {[id: string]: Attribute},\n excludeAttributes: Record = {}\n ): {[id: string]: IShaderAttribute} {\n if (!attributes) {\n attributes = this.getAttributes();\n }\n const shaderAttributes = {};\n for (const attributeName in attributes) {\n if (!excludeAttributes[attributeName]) {\n Object.assign(shaderAttributes, attributes[attributeName].getShaderAttributes());\n }\n }\n return shaderAttributes;\n }\n\n // PRIVATE METHODS\n\n // Used to register an attribute\n private _add(attributes: {[id: string]: AttributeOptions}, extraProps: any = {}) {\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n\n // Initialize the attribute descriptor, with WebGL and metadata fields\n this.attributes[attributeName] = this._createAttribute(attributeName, attribute, extraProps);\n }\n\n this._mapUpdateTriggersToAttributes();\n }\n /* eslint-enable max-statements */\n\n private _createAttribute(name: string, attribute: AttributeOptions, extraProps: any) {\n // For expected default values see:\n // https://github.com/visgl/luma.gl/blob/1affe21352e289eeaccee2a876865138858a765c/modules/webgl/src/classes/accessor.js#L5-L13\n // and https://deck.gl/docs/api-reference/core/attribute-manager#add\n const props: AttributeOptions = {\n ...attribute,\n id: name,\n size: (attribute.isIndexed && 1) || attribute.size || 1,\n divisor: extraProps.instanced ? 1 : attribute.divisor || 0\n };\n\n return new Attribute(this.gl, props);\n }\n\n // build updateTrigger name to attribute name mapping\n private _mapUpdateTriggersToAttributes() {\n const triggers: {[name: string]: string[]} = {};\n\n for (const attributeName in this.attributes) {\n const attribute = this.attributes[attributeName];\n attribute.getUpdateTriggers().forEach(triggerName => {\n if (!triggers[triggerName]) {\n triggers[triggerName] = [];\n }\n triggers[triggerName].push(attributeName);\n });\n }\n\n this.updateTriggers = triggers;\n }\n\n private _invalidateTrigger(\n triggerName: string,\n dataRange?: {startRow?: number; endRow?: number}\n ): string[] {\n const {attributes, updateTriggers} = this;\n const invalidatedAttributes = updateTriggers[triggerName];\n\n if (invalidatedAttributes) {\n invalidatedAttributes.forEach(name => {\n const attribute = attributes[name];\n if (attribute) {\n attribute.setNeedsUpdate(attribute.id, dataRange);\n }\n });\n }\n return invalidatedAttributes;\n }\n\n private _updateAttribute(opts: {\n attribute: Attribute;\n numInstances: number;\n data: any;\n props: any;\n context: any;\n }) {\n const {attribute, numInstances} = opts;\n debug(TRACE_ATTRIBUTE_UPDATE_START, attribute);\n\n if (attribute.constant) {\n // The attribute is flagged as constant outside of an update cycle\n // Skip allocation and updater call\n attribute.setConstantValue(attribute.value as NumericArray);\n return;\n }\n\n if (attribute.allocate(numInstances)) {\n debug(TRACE_ATTRIBUTE_ALLOCATE, attribute, numInstances);\n }\n\n // Calls update on any buffers that need update\n const updated = attribute.updateBuffer(opts);\n if (updated) {\n this.needsRedraw = true;\n debug(TRACE_ATTRIBUTE_UPDATE_END, attribute, numInstances);\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/*\n * Helper function for padArray\n */\nfunction padArrayChunk(options: {\n source;\n target;\n start?: number;\n end?: number;\n size: number;\n getData;\n}): void {\n const {source, target, start = 0, size, getData} = options;\n const end = options.end || target.length;\n\n const sourceLength = source.length;\n const targetLength = end - start;\n\n if (sourceLength > targetLength) {\n target.set(source.subarray(0, targetLength), start);\n return;\n }\n\n target.set(source, start);\n\n if (!getData) {\n return;\n }\n\n // source is not large enough to fill target space, call `getData` to get filler data\n let i = sourceLength;\n while (i < targetLength) {\n const datum = getData(i, source);\n for (let j = 0; j < size; j++) {\n target[start + i] = datum[j] || 0;\n i++;\n }\n }\n}\n\n/*\n * The padArray function stretches a source array to the size of a target array.\n The arrays can have internal structures (like the attributes of PathLayer and\n SolidPolygonLayer), defined by the optional sourceStartIndices and targetStartIndices parameters.\n If the target array is larger, the getData callback is used to fill in the blanks.\n * @params {TypedArray} source - original data\n * @params {TypedArray} target - output data\n * @params {Number} size - length per datum\n * @params {Function} getData - callback to get new data when source is short\n * @params {Array} [sourceStartIndices] - subdivision of the original data in [object0StartIndex, object1StartIndex, ...]\n * @params {Array} [targetStartIndices] - subdivision of the output data in [object0StartIndex, object1StartIndex, ...]\n */\nexport function padArray({source, target, size, getData, sourceStartIndices, targetStartIndices}) {\n if (!Array.isArray(targetStartIndices)) {\n // Flat arrays\n padArrayChunk({\n source,\n target,\n size,\n getData\n });\n return target;\n }\n\n // Arrays have internal structure\n let sourceIndex = 0;\n let targetIndex = 0;\n const getChunkData = getData && ((i, chunk) => getData(i + targetIndex, chunk));\n\n const n = Math.min(sourceStartIndices.length, targetStartIndices.length);\n\n for (let i = 1; i < n; i++) {\n const nextSourceIndex = sourceStartIndices[i] * size;\n const nextTargetIndex = targetStartIndices[i] * size;\n\n padArrayChunk({\n source: source.subarray(sourceIndex, nextSourceIndex),\n target,\n start: targetIndex,\n end: nextTargetIndex,\n size,\n getData: getChunkData\n });\n\n sourceIndex = nextSourceIndex;\n targetIndex = nextTargetIndex;\n }\n\n if (targetIndex < target.length) {\n padArrayChunk({\n source: [],\n target,\n start: targetIndex,\n size,\n getData: getChunkData\n });\n }\n\n return target;\n}\n","import {padArray} from '../../utils/array-utils';\nimport {NumericArray} from '../../types/types';\nimport Attribute from './attribute';\nimport type {BufferAccessor} from './data-column';\nimport type {Buffer} from '@luma.gl/webgl';\n\nexport interface TransitionSettings {\n type: string;\n /** Callback to get the value that the entering vertices are transitioning from. */\n enter?: (toValue: NumericArray, chunk?: NumericArray) => NumericArray;\n /** Callback when the transition is started */\n onStart?: () => void;\n /** Callback when the transition is done */\n onEnd?: () => void;\n /** Callback when the transition is interrupted */\n onInterrupt?: () => void;\n}\n\nexport type InterpolationTransitionSettings = TransitionSettings & {\n type?: 'interpolation';\n /** Duration of the transition animation, in milliseconds */\n duration: number;\n /** Easing function that maps a value from [0, 1] to [0, 1], see [http://easings.net/](http://easings.net/) */\n easing?: (t: number) => number;\n};\n\nexport type SpringTransitionSettings = TransitionSettings & {\n type: 'spring';\n /** \"Tension\" factor for the spring */\n stiffness: number;\n /** \"Friction\" factor that counteracts the spring's acceleration */\n damping: number;\n};\n\nconst DEFAULT_TRANSITION_SETTINGS = {\n interpolation: {\n duration: 0,\n easing: t => t\n },\n spring: {\n stiffness: 0.05,\n damping: 0.5\n }\n};\n\nexport function normalizeTransitionSettings(\n userSettings: number | InterpolationTransitionSettings | SpringTransitionSettings,\n layerSettings?: boolean | Partial\n): TransitionSettings | null {\n if (!userSettings) {\n return null;\n }\n if (Number.isFinite(userSettings)) {\n userSettings = {type: 'interpolation', duration: userSettings as number};\n }\n const type = (userSettings as TransitionSettings).type || 'interpolation';\n return {\n ...DEFAULT_TRANSITION_SETTINGS[type],\n ...(layerSettings as TransitionSettings),\n ...(userSettings as TransitionSettings),\n type\n };\n}\n\n// NOTE: NOT COPYING OVER OFFSET OR STRIDE HERE BECAUSE:\n// (1) WE DON'T SUPPORT INTERLEAVED BUFFERS FOR TRANSITIONS\n// (2) BUFFERS WITH OFFSETS ALWAYS CONTAIN VALUES OF THE SAME SIZE\n// (3) THE OPERATIONS IN THE SHADER ARE PER-COMPONENT (addition and scaling)\nexport function getSourceBufferAttribute(\n gl: WebGLRenderingContext,\n attribute: Attribute\n): [Buffer, BufferAccessor] | NumericArray {\n // The Attribute we pass to Transform as a sourceBuffer must have {divisor: 0}\n // so we create a copy of the attribute (with divisor=0) to use when running\n // transform feedback\n const buffer = attribute.getBuffer();\n if (buffer) {\n return [\n buffer,\n {\n divisor: 0,\n size: attribute.size,\n normalized: attribute.settings.normalized\n } as BufferAccessor\n ];\n }\n // constant\n // don't pass normalized here because the `value` from a normalized attribute is\n // already normalized\n return attribute.value as NumericArray;\n}\n\nexport function getAttributeTypeFromSize(size: number): string {\n switch (size) {\n case 1:\n return 'float';\n case 2:\n return 'vec2';\n case 3:\n return 'vec3';\n case 4:\n return 'vec4';\n default:\n throw new Error(`No defined attribute type for size \"${size}\"`);\n }\n}\n\nexport function cycleBuffers(buffers: Buffer[]): void {\n buffers.push(buffers.shift() as Buffer);\n}\n\nexport function getAttributeBufferLength(attribute: Attribute, numInstances: number): number {\n const {doublePrecision, settings, value, size} = attribute;\n const multiplier = doublePrecision && value instanceof Float64Array ? 2 : 1;\n return (settings.noAlloc ? (value as NumericArray).length : numInstances * size) * multiplier;\n}\n\n// This helper is used when transitioning attributes from a set of values in one buffer layout\n// to a set of values in a different buffer layout. (Buffer layouts are used when attribute values\n// within a buffer should be grouped for drawElements, like the Polygon layer.) For example, a\n// buffer layout of [3, 4] might have data [A1, A2, A3, B1, B2, B3, B4]. If it needs to transition\n// to a buffer layout of [4, 2], it should produce a buffer, using the transition setting's `enter`\n// function, that looks like this: [A1, A2, A3, A4 (user `enter` fn), B1, B2, 0]. Note: the final\n// 0 in this buffer is because we never shrink buffers, only grow them, for performance reasons.\nexport function padBuffer({\n buffer,\n numInstances,\n attribute,\n fromLength,\n fromStartIndices,\n getData = x => x\n}: {\n buffer: Buffer;\n numInstances: number;\n attribute: Attribute;\n fromLength: number;\n fromStartIndices?: NumericArray | null;\n getData?: (toValue: NumericArray, chunk?: NumericArray) => NumericArray;\n}): void {\n // TODO: move the precisionMultiplier logic to the attribute when retrieving\n // its `size` and `elementOffset`?\n const precisionMultiplier =\n attribute.doublePrecision && attribute.value instanceof Float64Array ? 2 : 1;\n const size = attribute.size * precisionMultiplier;\n const byteOffset = attribute.byteOffset;\n const toStartIndices = attribute.startIndices;\n const hasStartIndices = fromStartIndices && toStartIndices;\n const toLength = getAttributeBufferLength(attribute, numInstances);\n const isConstant = attribute.isConstant;\n\n // check if buffer needs to be padded\n if (!hasStartIndices && fromLength >= toLength) {\n return;\n }\n\n const toData = isConstant\n ? attribute.value\n : (attribute.getBuffer() as Buffer).getData({srcByteOffset: byteOffset});\n if (attribute.settings.normalized && !isConstant) {\n const getter = getData;\n getData = (value, chunk) => attribute.normalizeConstant(getter(value, chunk));\n }\n\n const getMissingData = isConstant\n ? (i, chunk) => getData(toData, chunk)\n : (i, chunk) => getData(toData.subarray(i, i + size), chunk);\n\n const source = buffer.getData({length: fromLength});\n const data = new Float32Array(toLength);\n padArray({\n source,\n target: data,\n sourceStartIndices: fromStartIndices,\n targetStartIndices: toStartIndices,\n size,\n getData: getMissingData\n });\n\n // TODO: support offset in buffer.setData?\n if (buffer.byteLength < data.byteLength + byteOffset) {\n buffer.reallocate(data.byteLength + byteOffset);\n }\n buffer.subData({data, offset: byteOffset});\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport Layer, {UpdateParameters} from './layer';\nimport debug from '../debug';\nimport {flatten} from '../utils/flatten';\n\nimport type AttributeManager from './attribute/attribute-manager';\nimport type {PickingInfo, GetPickingInfoParams} from './picking/pick-info';\nimport type {FilterContext} from '../passes/layers-pass';\nimport type {LayersList, LayerContext} from './layer-manager';\nimport type {CompositeLayerProps, Accessor, AccessorContext} from '../types/layer-props';\nimport {ConstructorOf} from '../types/types';\n\nconst TRACE_RENDER_LAYERS = 'compositeLayer.renderLayers';\n\nexport default abstract class CompositeLayer extends Layer<\n PropsT & Required\n> {\n static layerName: string = 'CompositeLayer';\n\n /** `true` if this layer renders other layers */\n get isComposite(): boolean {\n return true;\n }\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n return super.isLoaded && this.getSubLayers().every(layer => layer.isLoaded);\n }\n\n /** Return last rendered sub layers */\n getSubLayers(): Layer[] {\n return (this.internalState && this.internalState.subLayers) || [];\n }\n\n // initializeState is usually not needed for composite layers\n // Provide empty definition to disable check for missing definition\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n initializeState(context: LayerContext): void {}\n\n /** Updates selected state members and marks the composite layer to need rerender */\n setState(updateObject: any): void {\n super.setState(updateObject);\n // Trigger a layer update\n // Although conceptually layer.draw and compositeLayer.renderLayers are equivalent,\n // they are executed during different lifecycles.\n // draw can be called without calling updateState (e.g. most viewport changes),\n // while renderLayers can only be called during a recursive layer update.\n this.setNeedsUpdate();\n }\n\n /** called to augment the info object that is bubbled up from a sublayer\n override Layer.getPickingInfo() because decoding / setting uniform do\n not apply to a composite layer. */\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n const {object} = info;\n const isDataWrapped =\n object && object.__source && object.__source.parent && object.__source.parent.id === this.id;\n\n if (!isDataWrapped) {\n return info;\n }\n\n // override object with picked data\n info.object = object.__source.object;\n info.index = object.__source.index;\n\n return info;\n }\n\n // Implement to generate subLayers\n abstract renderLayers(): Layer | null | LayersList;\n\n /**\n * Filters sub layers at draw time. Return true if the sub layer should be drawn.\n */\n filterSubLayer(context: FilterContext): boolean {\n return true;\n }\n\n /** Returns true if sub layer needs to be rendered */\n protected shouldRenderSubLayer(subLayerId: string, data: any): boolean {\n return data && data.length;\n }\n\n /** Returns sub layer class for a specific sublayer */\n protected getSubLayerClass(\n subLayerId: string,\n DefaultLayerClass: ConstructorOf\n ): ConstructorOf {\n const {_subLayerProps: overridingProps} = this.props;\n\n return (\n (overridingProps &&\n overridingProps[subLayerId] &&\n (overridingProps[subLayerId].type as ConstructorOf)) ||\n DefaultLayerClass\n );\n }\n\n /** When casting user data into another format to pass to sublayers,\n add reference to the original object and object index */\n protected getSubLayerRow(row: T, sourceObject: any, sourceObjectIndex: number): T {\n // @ts-ignore (TS2339) adding undefined property\n row.__source = {\n parent: this,\n object: sourceObject,\n index: sourceObjectIndex\n };\n return row;\n }\n\n /** Some composite layers cast user data into another format before passing to sublayers\n We need to unwrap them before calling the accessor so that they see the original data\n objects */\n protected getSubLayerAccessor(accessor: Accessor): Accessor {\n if (typeof accessor === 'function') {\n const objectInfo: AccessorContext = {\n index: -1,\n // @ts-ignore accessing resolved data\n data: this.props.data,\n target: []\n };\n return (x: any, i: AccessorContext) => {\n if (x && x.__source) {\n objectInfo.index = x.__source.index;\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x.__source.object as In, objectInfo);\n }\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x as In, i);\n };\n }\n return accessor;\n }\n\n // eslint-disable-next-line complexity\n /** Returns sub layer props for a specific sublayer */\n protected getSubLayerProps(\n sublayerProps: {\n id?: string;\n updateTriggers?: Record;\n [propName: string]: any;\n } = {}\n ): any {\n const {\n opacity,\n pickable,\n visible,\n parameters,\n getPolygonOffset,\n highlightedObjectIndex,\n autoHighlight,\n highlightColor,\n coordinateSystem,\n coordinateOrigin,\n wrapLongitude,\n positionFormat,\n modelMatrix,\n extensions,\n fetch,\n operation,\n _subLayerProps: overridingProps\n } = this.props;\n const newProps = {\n id: '',\n updateTriggers: {},\n opacity,\n pickable,\n visible,\n parameters,\n getPolygonOffset,\n highlightedObjectIndex,\n autoHighlight,\n highlightColor,\n coordinateSystem,\n coordinateOrigin,\n wrapLongitude,\n positionFormat,\n modelMatrix,\n extensions,\n fetch,\n operation\n };\n\n const overridingSublayerProps =\n overridingProps && sublayerProps.id && overridingProps[sublayerProps.id];\n const overridingSublayerTriggers =\n overridingSublayerProps && overridingSublayerProps.updateTriggers;\n const sublayerId = sublayerProps.id || 'sublayer';\n\n if (overridingSublayerProps) {\n // @ts-ignore (TS2339) hidden property\n const propTypes = this.constructor._propTypes;\n const subLayerPropTypes = sublayerProps.type ? sublayerProps.type._propTypes : {};\n for (const key in overridingSublayerProps) {\n const propType = subLayerPropTypes[key] || propTypes[key];\n // eslint-disable-next-line\n if (propType && propType.type === 'accessor') {\n overridingSublayerProps[key] = this.getSubLayerAccessor(overridingSublayerProps[key]);\n }\n }\n }\n\n Object.assign(\n newProps,\n sublayerProps,\n // experimental feature that allows users to override sublayer props via parent layer prop\n overridingSublayerProps\n );\n newProps.id = `${this.props.id}-${sublayerId}`;\n newProps.updateTriggers = {\n all: this.props.updateTriggers?.all,\n ...sublayerProps.updateTriggers,\n ...overridingSublayerTriggers\n };\n\n // Pass through extension props\n // @ts-ignore (TS2532) extensions is always defined after merging with default props\n for (const extension of extensions) {\n const passThroughProps = extension.getSubLayerProps.call(this, extension);\n if (passThroughProps) {\n Object.assign(newProps, passThroughProps, {\n updateTriggers: Object.assign(newProps.updateTriggers, passThroughProps.updateTriggers)\n });\n }\n }\n\n return newProps;\n }\n\n /** Update sub layers to highlight the hovered object */\n protected _updateAutoHighlight(info: PickingInfo): void {\n for (const layer of this.getSubLayers()) {\n layer.updateAutoHighlight(info);\n }\n }\n\n /** Override base Layer method */\n protected _getAttributeManager(): AttributeManager | null {\n return null;\n }\n\n /** (Internal) Called after an update to rerender sub layers */\n protected _postUpdate(updateParams: UpdateParameters, forceUpdate: boolean) {\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n let subLayers = this.internalState.subLayers as Layer[];\n const shouldUpdate = !subLayers || this.needsUpdate();\n if (shouldUpdate) {\n const subLayersList = this.renderLayers();\n // Flatten the returned array, removing any null, undefined or false\n // this allows layers to render sublayers conditionally\n // (see CompositeLayer.renderLayers docs)\n subLayers = flatten(subLayersList, Boolean) as Layer[];\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n this.internalState.subLayers = subLayers;\n }\n debug(TRACE_RENDER_LAYERS, this, shouldUpdate, subLayers);\n\n // populate reference to parent layer (this layer)\n // NOTE: needs to be done even when reusing layers as the parent may have changed\n for (const layer of subLayers) {\n layer.parent = this;\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Note: The numeric values here are matched by shader code in the\n// \"project\" and \"project64\" shader modules. Both places need to be\n// updated.\nimport log from '../utils/log';\n\n/**\n * The coordinate system that positions/dimensions are defined in.\n */\nexport const COORDINATE_SYSTEM = {\n /**\n * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise\n */\n DEFAULT: -1,\n /**\n * Positions are interpreted as [longitude, latitude, elevation]\n * longitude/latitude are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT: 1,\n\n /**\n * Positions are interpreted as [x, y, z] in meter offsets from the coordinate origin.\n * Dimensions are in meters.\n */\n METER_OFFSETS: 2,\n\n /**\n * Positions are interpreted as [deltaLng, deltaLat, elevation] from the coordinate origin.\n * deltaLng/deltaLat are in degrees, elevation is in meters.\n * Dimensions are in meters.\n */\n LNGLAT_OFFSETS: 3,\n\n /**\n * Positions and dimensions are in the common units of the viewport.\n */\n CARTESIAN: 0\n} as const;\n\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport type CoordinateSystem = -1 | 0 | 1 | 2 | 3;\n\n// Deprecated\n/* eslint-disable accessor-pairs */\nObject.defineProperty(COORDINATE_SYSTEM, 'IDENTITY', {\n get: () => {\n log.deprecated('COORDINATE_SYSTEM.IDENTITY', 'COORDINATE_SYSTEM.CARTESIAN')();\n return 0;\n }\n});\n/* eslint-enable accessor-pairs */\n\n/**\n * How coordinates are transformed from the world space into the common space.\n */\nexport const PROJECTION_MODE = {\n /**\n * Render geospatial data in Web Mercator projection\n */\n WEB_MERCATOR: 1,\n /**\n * Render geospatial data as a 3D globe\n */\n GLOBE: 2,\n\n /**\n * (Internal use only) Web Mercator projection at high zoom\n */\n WEB_MERCATOR_AUTO_OFFSET: 4,\n\n /**\n * No transformation\n */\n IDENTITY: 0\n} as const;\n\nexport const UNIT = {\n common: 0,\n meters: 1,\n pixels: 2\n} as const;\n\nexport const EVENTS = {\n click: {handler: 'onClick'},\n panstart: {handler: 'onDragStart'},\n panmove: {handler: 'onDrag'},\n panend: {handler: 'onDragEnd'}\n} as const;\n\n/**\n * The rendering operation to perform with a layer, used in the `operation` prop\n */\nexport const OPERATION = {\n DRAW: 'draw',\n MASK: 'mask'\n} as const;\n","import {OPERATION} from '../lib/constants';\nimport LayersPass from './layers-pass';\n\nexport default class DrawLayersPass extends LayersPass {\n shouldDrawLayer(layer) {\n return layer.props.operation === OPERATION.DRAW;\n }\n}\n","import debug from '../debug';\nimport DrawLayersPass from '../passes/draw-layers-pass';\nimport PickLayersPass from '../passes/pick-layers-pass';\nimport {Framebuffer} from '@luma.gl/core';\n\nconst TRACE_RENDER_LAYERS = 'deckRenderer.renderLayers';\n\nexport default class DeckRenderer {\n constructor(gl) {\n this.gl = gl;\n this.layerFilter = null;\n this.drawPickingColors = false;\n this.drawLayersPass = new DrawLayersPass(gl);\n this.pickLayersPass = new PickLayersPass(gl);\n this.renderCount = 0;\n this._needsRedraw = 'Initial render';\n this.renderBuffers = [];\n this.lastPostProcessEffect = null;\n }\n\n setProps(props) {\n if ('layerFilter' in props && this.layerFilter !== props.layerFilter) {\n this.layerFilter = props.layerFilter;\n this._needsRedraw = 'layerFilter changed';\n }\n\n if ('drawPickingColors' in props && this.drawPickingColors !== props.drawPickingColors) {\n this.drawPickingColors = props.drawPickingColors;\n this._needsRedraw = 'drawPickingColors changed';\n }\n }\n\n /*\n target,\n layers,\n viewports,\n onViewportActive,\n views,\n redrawReason,\n clearCanvas,\n effects,\n pass,\n stats\n */\n renderLayers(opts) {\n const layerPass = this.drawPickingColors ? this.pickLayersPass : this.drawLayersPass;\n\n opts.layerFilter = opts.layerFilter || this.layerFilter;\n opts.effects = opts.effects || [];\n opts.target = opts.target || Framebuffer.getDefaultFramebuffer(this.gl);\n\n this._preRender(opts.effects, opts);\n\n const outputBuffer = this.lastPostProcessEffect ? this.renderBuffers[0] : opts.target;\n const renderStats = layerPass.render({...opts, target: outputBuffer});\n\n this._postRender(opts.effects, opts);\n\n this.renderCount++;\n\n debug(TRACE_RENDER_LAYERS, this, renderStats, opts);\n }\n\n needsRedraw(opts = {clearRedrawFlags: false}) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n finalize() {\n const {renderBuffers} = this;\n for (const buffer of renderBuffers) {\n buffer.delete();\n }\n renderBuffers.length = 0;\n }\n\n // Private\n _preRender(effects, opts) {\n let lastPostProcessEffect = null;\n\n for (const effect of effects) {\n effect.preRender(this.gl, opts);\n if (effect.postRender) {\n lastPostProcessEffect = effect;\n }\n }\n\n if (lastPostProcessEffect) {\n this._resizeRenderBuffers();\n }\n this.lastPostProcessEffect = lastPostProcessEffect;\n }\n\n _resizeRenderBuffers() {\n const {renderBuffers} = this;\n if (renderBuffers.length === 0) {\n renderBuffers.push(new Framebuffer(this.gl), new Framebuffer(this.gl));\n }\n for (const buffer of renderBuffers) {\n buffer.resize();\n }\n }\n\n _postRender(effects, opts) {\n const {renderBuffers} = this;\n const params = {\n inputBuffer: renderBuffers[0],\n swapBuffer: renderBuffers[1],\n target: null\n };\n for (const effect of effects) {\n if (effect.postRender) {\n if (effect === this.lastPostProcessEffect) {\n params.target = opts.target;\n effect.postRender(this.gl, params);\n break;\n }\n const buffer = effect.postRender(this.gl, params);\n params.inputBuffer = buffer;\n params.swapBuffer = buffer === renderBuffers[0] ? renderBuffers[1] : renderBuffers[0];\n }\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {deepEqual} from '../utils/deep-equal';\nimport log from '../utils/log';\nimport {flatten} from '../utils/flatten';\n\nimport type Controller from '../controllers/controller';\nimport type {ViewStateChangeParameters, InteractionState} from '../controllers/controller';\nimport type Viewport from '../viewports/viewport';\nimport type View from '../views/view';\nimport type {Timeline} from '@luma.gl/engine';\nimport type {EventManager} from 'mjolnir.js';\nimport type {ConstructorOf} from '../types/types';\n\nexport default class ViewManager {\n width: number;\n height: number;\n views: View[];\n viewState: any;\n controllers: {[viewId: string]: Controller | null};\n timeline: Timeline;\n\n private _viewports: Viewport[];\n private _viewportMap: {[viewId: string]: Viewport};\n private _isUpdating: boolean;\n private _needsRedraw: string | false;\n private _needsUpdate: string | false;\n private _eventManager: EventManager;\n private _eventCallbacks: {\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => void;\n onInteractionStateChange?: (state: InteractionState) => void;\n };\n\n constructor(props: {\n // Initial options\n timeline: Timeline;\n eventManager: EventManager;\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => void;\n onInteractionStateChange?: (state: InteractionState) => void;\n // Props\n views?: View[];\n viewState?: any;\n width?: number;\n height?: number;\n }) {\n // List of view descriptors, gets re-evaluated when width/height changes\n this.views = [];\n this.width = 100;\n this.height = 100;\n this.viewState = {};\n this.controllers = {};\n this.timeline = props.timeline;\n\n this._viewports = []; // Generated viewports\n this._viewportMap = {};\n this._isUpdating = false;\n this._needsRedraw = 'First render';\n this._needsUpdate = 'Initialize';\n\n this._eventManager = props.eventManager;\n this._eventCallbacks = {\n onViewStateChange: props.onViewStateChange,\n onInteractionStateChange: props.onInteractionStateChange\n };\n\n Object.seal(this);\n\n // Init with default map viewport\n this.setProps(props);\n }\n\n /** Remove all resources and event listeners */\n finalize(): void {\n for (const key in this.controllers) {\n const controller = this.controllers[key];\n if (controller) {\n controller.finalize();\n }\n }\n this.controllers = {};\n }\n\n /** Check if a redraw is needed */\n needsRedraw(\n opts: {\n /** Reset redraw flags to false */\n clearRedrawFlags?: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n /** Mark the manager as dirty. Will rebuild all viewports and update controllers. */\n setNeedsUpdate(reason: string): void {\n this._needsUpdate = this._needsUpdate || reason;\n this._needsRedraw = this._needsRedraw || reason;\n }\n\n /** Checks each viewport for transition updates */\n updateViewStates(): void {\n for (const viewId in this.controllers) {\n const controller = this.controllers[viewId];\n if (controller) {\n controller.updateTransition();\n }\n }\n }\n\n /** Get a set of viewports for a given width and height\n * TODO - Intention is for deck.gl to autodeduce width and height and drop the need for props\n * @param rect (object, optional) - filter the viewports\n * + not provided - return all viewports\n * + {x, y} - only return viewports that contain this pixel\n * + {x, y, width, height} - only return viewports that overlap with this rectangle\n */\n getViewports(rect?: {x: number; y: number; width?: number; height?: number}): Viewport[] {\n if (rect) {\n return this._viewports.filter(viewport => viewport.containsPixel(rect));\n }\n return this._viewports;\n }\n\n /** Get a map of all views */\n getViews(): {[viewId: string]: View} {\n const viewMap = {};\n this.views.forEach(view => {\n viewMap[view.id] = view;\n });\n return viewMap;\n }\n\n /** Resolves a viewId string to a View */\n getView(viewId: string): View | undefined {\n return this.views.find(view => view.id === viewId);\n }\n\n /** Returns the viewState for a specific viewId. Matches the viewState by\n 1. view.viewStateId\n 2. view.id\n 3. root viewState\n then applies the view's filter if any */\n getViewState(viewOrViewId: string | View): any {\n const view: View | undefined =\n typeof viewOrViewId === 'string' ? this.getView(viewOrViewId) : viewOrViewId;\n // Backward compatibility: view state for single view\n const viewState = (view && this.viewState[view.getViewStateId()]) || this.viewState;\n return view ? view.filterViewState(viewState) : viewState;\n }\n\n getViewport(viewId: string): Viewport | undefined {\n return this._viewportMap[viewId];\n }\n\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(xyz: number[], opts?: {topLeft?: boolean}): number[] | null {\n const viewports = this.getViewports();\n const pixel = {x: xyz[0], y: xyz[1]};\n for (let i = viewports.length - 1; i >= 0; --i) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n const p = xyz.slice();\n p[0] -= viewport.x;\n p[1] -= viewport.y;\n return viewport.unproject(p, opts);\n }\n }\n return null;\n }\n\n /** Update the manager with new Deck props */\n setProps(props: {views?: View[]; viewState?: any; width?: number; height?: number}) {\n if (props.views) {\n this._setViews(props.views);\n }\n\n if (props.viewState) {\n this._setViewState(props.viewState);\n }\n\n if ('width' in props || 'height' in props) {\n this._setSize(props.width as number, props.height as number);\n }\n\n // Important: avoid invoking _update() inside itself\n // Nested updates result in unexpected side effects inside _rebuildViewports()\n // when using auto control in pure-js\n if (!this._isUpdating) {\n this._update();\n }\n }\n\n //\n // PRIVATE METHODS\n //\n\n private _update(): void {\n this._isUpdating = true;\n\n // Only rebuild viewports if the update flag is set\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n\n // If viewport transition(s) are triggered during viewports update, controller(s)\n // will immediately call `onViewStateChange` which calls `viewManager.setProps` again.\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n\n this._isUpdating = false;\n }\n\n private _setSize(width: number, height: number): void {\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n this.setNeedsUpdate('Size changed');\n }\n }\n\n // Update the view descriptor list and set change flag if needed\n // Does not actually rebuild the `Viewport`s until `getViewports` is called\n private _setViews(views: View[]): void {\n views = flatten(views, Boolean);\n\n const viewsChanged = this._diffViews(views, this.views);\n if (viewsChanged) {\n this.setNeedsUpdate('views changed');\n }\n\n this.views = views;\n }\n\n private _setViewState(viewState: any): void {\n if (viewState) {\n const viewStateChanged = !deepEqual(viewState, this.viewState);\n\n if (viewStateChanged) {\n this.setNeedsUpdate('viewState changed');\n }\n\n this.viewState = viewState;\n } else {\n log.warn('missing `viewState` or `initialViewState`')();\n }\n }\n\n private _onViewStateChange(viewId: string, event: ViewStateChangeParameters) {\n if (this._eventCallbacks.onViewStateChange) {\n this._eventCallbacks.onViewStateChange({...event, viewId});\n }\n }\n\n private _createController(\n view: View,\n props: {id: string; type: ConstructorOf>}\n ): Controller {\n const Controller = props.type;\n\n const controller = new Controller({\n timeline: this.timeline,\n eventManager: this._eventManager,\n // Set an internal callback that calls the prop callback if provided\n onViewStateChange: this._onViewStateChange.bind(this, props.id),\n onStateChange: this._eventCallbacks.onInteractionStateChange,\n makeViewport: viewState =>\n this.getView(view.id)?.makeViewport({\n viewState,\n width: this.width,\n height: this.height\n })\n });\n\n return controller;\n }\n\n private _updateController(\n view: View,\n viewState: any,\n viewport: Viewport,\n controller?: Controller | null\n ): Controller | null {\n const controllerProps = view.controller;\n if (controllerProps) {\n const resolvedProps = {\n ...viewState,\n ...controllerProps,\n id: view.id,\n x: viewport.x,\n y: viewport.y,\n width: viewport.width,\n height: viewport.height\n };\n\n // TODO - check if view / controller type has changed, and replace the controller\n if (!controller) {\n controller = this._createController(view, resolvedProps);\n }\n if (controller) {\n controller.setProps(resolvedProps);\n }\n return controller;\n }\n return null;\n }\n\n // Rebuilds viewports from descriptors towards a certain window size\n private _rebuildViewports(): void {\n const {views} = this;\n\n const oldControllers = this.controllers;\n this._viewports = [];\n this.controllers = {};\n\n let invalidateControllers = false;\n // Create controllers in reverse order, so that views on top receive events first\n for (let i = views.length; i--; ) {\n const view = views[i];\n const viewState = this.getViewState(view);\n const viewport = view.makeViewport({viewState, width: this.width, height: this.height});\n\n let oldController = oldControllers[view.id];\n const hasController = Boolean(view.controller);\n if (hasController && !oldController) {\n // When a new controller is added, invalidate all controllers below it so that\n // events are registered in the correct order\n invalidateControllers = true;\n }\n if ((invalidateControllers || !hasController) && oldController) {\n // Remove and reattach invalidated controller\n oldController.finalize();\n oldController = null;\n }\n\n // Update the controller\n this.controllers[view.id] = this._updateController(view, viewState, viewport, oldController);\n\n this._viewports.unshift(viewport);\n }\n\n // Remove unused controllers\n for (const id in oldControllers) {\n const oldController = oldControllers[id];\n if (oldController && !this.controllers[id]) {\n oldController.finalize();\n }\n }\n\n this._buildViewportMap();\n }\n\n _buildViewportMap(): void {\n // Build a view id to view index\n this._viewportMap = {};\n this._viewports.forEach(viewport => {\n if (viewport.id) {\n // TODO - issue warning if multiple viewports use same id\n this._viewportMap[viewport.id] = this._viewportMap[viewport.id] || viewport;\n }\n });\n }\n\n // Check if viewport array has changed, returns true if any change\n // Note that descriptors can be the same\n _diffViews(newViews: View[], oldViews: View[]): boolean {\n if (newViews.length !== oldViews.length) {\n return true;\n }\n\n return newViews.some((_, i) => !newViews[i].equals(oldViews[i]));\n }\n}\n","import {Framebuffer, Texture2D, withParameters} from '@luma.gl/core';\nimport {OPERATION} from '../lib/constants';\nimport LayersPass from './layers-pass';\n\nimport type {LayersPassRenderOptions} from './layers-pass';\n\ntype MaskPassRenderOptions = LayersPassRenderOptions & {\n /** The channel to render into, 0:red, 1:green, 2:blue, 3:alpha */\n channel: number;\n};\n\nexport default class MaskPass extends LayersPass {\n maskMap: Texture2D;\n fbo: Framebuffer;\n\n constructor(gl, props: {id: string; mapSize?: number}) {\n super(gl, props);\n\n const {mapSize = 2048} = props;\n\n this.maskMap = new Texture2D(gl, {\n width: mapSize,\n height: mapSize,\n parameters: {\n [gl.TEXTURE_MIN_FILTER]: gl.LINEAR,\n [gl.TEXTURE_MAG_FILTER]: gl.LINEAR,\n [gl.TEXTURE_WRAP_S]: gl.CLAMP_TO_EDGE,\n [gl.TEXTURE_WRAP_T]: gl.CLAMP_TO_EDGE\n }\n });\n\n this.fbo = new Framebuffer(gl, {\n id: 'maskmap',\n width: mapSize,\n height: mapSize,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: this.maskMap\n }\n });\n }\n\n render(options: MaskPassRenderOptions) {\n const gl = this.gl;\n\n const colorMask = [false, false, false, false];\n colorMask[options.channel] = true;\n\n return withParameters(\n gl,\n {\n clearColor: [255, 255, 255, 255],\n blend: true,\n blendFunc: [gl.ZERO, gl.ONE],\n blendEquation: gl.FUNC_SUBTRACT,\n colorMask,\n depthTest: false\n },\n () => super.render({...options, target: this.fbo, pass: 'mask'})\n );\n }\n\n shouldDrawLayer(layer) {\n return layer.props.operation === OPERATION.MASK;\n }\n\n delete() {\n this.fbo.delete();\n this.maskMap.delete();\n }\n}\n","import {Texture2D} from '@luma.gl/core';\n// import {readPixelsToArray} from '@luma.gl/core';\nimport {equals} from '@math.gl/core';\nimport MaskPass from '../../passes/mask-pass';\nimport {OPERATION} from '../../lib/constants';\nimport {getMaskBounds, getMaskViewport} from './utils';\nimport log from '../../utils/log';\n\nimport type {Effect, PreRenderOptions} from '../../lib/effect';\nimport type Layer from '../../lib/layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {MaskBounds} from './utils';\nimport type {CoordinateSystem} from '../../lib/constants';\n\ntype Mask = {\n /** The channel index */\n index: number;\n bounds: MaskBounds;\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\ntype Channel = {\n id: string;\n index: number;\n layers: Layer[];\n bounds: MaskBounds;\n maskBounds: MaskBounds;\n layerBounds: MaskBounds[];\n coordinateOrigin: [number, number, number];\n coordinateSystem: CoordinateSystem;\n};\n\n// Class to manage mask effect\nexport default class MaskEffect implements Effect {\n id = 'mask-effect';\n props = null;\n useInPicking = true;\n\n private dummyMaskMap?: Texture2D;\n private channels: (Channel | null)[] = [];\n private masks: Record | null = null;\n private maskPass?: MaskPass;\n private maskMap?: Texture2D;\n private lastViewport?: Viewport;\n\n preRender(\n gl: WebGLRenderingContext,\n {layers, layerFilter, viewports, onViewportActive, views}: PreRenderOptions\n ): void {\n if (!this.dummyMaskMap) {\n this.dummyMaskMap = new Texture2D(gl, {\n width: 1,\n height: 1\n });\n }\n\n const maskLayers = layers.filter(l => l.props.visible && l.props.operation === OPERATION.MASK);\n if (maskLayers.length === 0) {\n this.masks = null;\n this.channels.length = 0;\n return;\n }\n this.masks = {};\n\n if (!this.maskPass) {\n this.maskPass = new MaskPass(gl, {id: 'default-mask'});\n this.maskMap = this.maskPass.maskMap;\n }\n\n // Map layers to channels\n const channelMap = this._sortMaskChannels(maskLayers);\n // TODO - support multiple views\n const viewport = viewports[0];\n const viewportChanged = !this.lastViewport || !this.lastViewport.equals(viewport);\n\n for (const maskId in channelMap) {\n this._renderChannel(channelMap[maskId], {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n });\n }\n\n // // Debug show FBO contents on screen\n // const color = readPixelsToArray(this.maskMap);\n // let canvas = document.getElementById('fbo-canvas');\n // if (!canvas) {\n // canvas = document.createElement('canvas');\n // canvas.id = 'fbo-canvas';\n // canvas.width = this.maskMap.width;\n // canvas.height = this.maskMap.height;\n // canvas.style.zIndex = 100;\n // canvas.style.position = 'absolute';\n // canvas.style.right = 0;\n // canvas.style.border = 'blue 1px solid';\n // canvas.style.width = '256px';\n // canvas.style.transform = 'scaleY(-1)';\n // document.body.appendChild(canvas);\n // }\n // const ctx = canvas.getContext('2d');\n // const imageData = ctx.createImageData(this.maskMap.width, this.maskMap.height);\n // for (let i = 0; i < color.length; i += 4) {\n // imageData.data[i + 0] = color[i + 0];\n // imageData.data[i + 1] = color[i + 1];\n // imageData.data[i + 2] = color[i + 2];\n // imageData.data[i + 3] = color[i + 3] + 128;\n // }\n // ctx.putImageData(imageData, 0, 0);\n }\n\n private _renderChannel(\n channelInfo: Channel,\n {\n layerFilter,\n onViewportActive,\n views,\n viewport,\n viewportChanged\n }: {\n layerFilter: PreRenderOptions['layerFilter'];\n onViewportActive: PreRenderOptions['onViewportActive'];\n views: PreRenderOptions['views'];\n viewport: Viewport;\n viewportChanged: boolean;\n }\n ) {\n const oldChannelInfo = this.channels[channelInfo.index];\n if (!oldChannelInfo) {\n return;\n }\n\n const maskChanged =\n // If a channel is new\n channelInfo === oldChannelInfo ||\n // If sublayers have changed\n oldChannelInfo.layers.length !== channelInfo.layers.length ||\n // If a sublayer's positions have been updated, the cached bounds will change shallowly\n channelInfo.layerBounds.some((b, i) => b !== oldChannelInfo.layerBounds[i]);\n\n channelInfo.bounds = oldChannelInfo.bounds;\n channelInfo.maskBounds = oldChannelInfo.maskBounds;\n this.channels[channelInfo.index] = channelInfo;\n\n if (maskChanged || viewportChanged) {\n // Recalculate mask bounds\n this.lastViewport = viewport;\n\n channelInfo.bounds = getMaskBounds({layers: channelInfo.layers, viewport});\n\n if (maskChanged || !equals(channelInfo.bounds, oldChannelInfo.bounds)) {\n // Rerender mask FBO\n const {maskPass, maskMap} = this;\n\n const maskViewport = getMaskViewport({\n bounds: channelInfo.bounds,\n viewport,\n width: maskMap.width,\n height: maskMap.height\n });\n\n channelInfo.maskBounds = maskViewport ? maskViewport.getBounds() : [0, 0, 1, 1];\n\n // @ts-ignore (2532) This method is only called from preRender where maskPass is defined\n maskPass.render({\n pass: 'mask',\n channel: channelInfo.index,\n layers: channelInfo.layers,\n layerFilter,\n viewports: maskViewport ? [maskViewport] : [],\n onViewportActive,\n views,\n moduleParameters: {\n devicePixelRatio: 1\n }\n });\n }\n }\n\n // @ts-ignore (2532) This method is only called from preRender where masks is defined\n this.masks[channelInfo.id] = {\n index: channelInfo.index,\n bounds: channelInfo.maskBounds,\n coordinateOrigin: channelInfo.coordinateOrigin,\n coordinateSystem: channelInfo.coordinateSystem\n };\n }\n\n /**\n * Find a channel to render each mask into\n * If a maskId already exists, diff and update the existing channel\n * Otherwise replace a removed mask\n * Otherwise create a new channel\n * Returns a map from mask layer id to channel info\n */\n private _sortMaskChannels(maskLayers: Layer[]): Record {\n const channelMap = {};\n let channelCount = 0;\n for (const layer of maskLayers) {\n const {id} = layer.root;\n let channelInfo = channelMap[id];\n if (!channelInfo) {\n if (++channelCount > 4) {\n log.warn('Too many mask layers. The max supported is 4')();\n continue; // eslint-disable-line no-continue\n }\n channelInfo = {\n id,\n index: this.channels.findIndex(c => c?.id === id),\n layers: [],\n layerBounds: [],\n coordinateOrigin: layer.root.props.coordinateOrigin,\n coordinateSystem: layer.root.props.coordinateSystem\n };\n channelMap[id] = channelInfo;\n }\n channelInfo.layers.push(layer);\n channelInfo.layerBounds.push(layer.getBounds());\n }\n\n for (let i = 0; i < 4; i++) {\n const channelInfo = this.channels[i];\n if (!channelInfo || !(channelInfo.id in channelMap)) {\n // The mask id at this channel no longer exists\n this.channels[i] = null;\n }\n }\n\n for (const maskId in channelMap) {\n const channelInfo = channelMap[maskId];\n\n if (channelInfo.index < 0) {\n channelInfo.index = this.channels.findIndex(c => !c);\n this.channels[channelInfo.index] = channelInfo;\n }\n }\n return channelMap;\n }\n\n getModuleParameters(): {\n maskMap: Texture2D;\n maskChannels: Record | null;\n } {\n return {\n maskMap: this.masks ? this.maskMap : this.dummyMaskMap,\n maskChannels: this.masks\n };\n }\n\n cleanup(): void {\n if (this.dummyMaskMap) {\n this.dummyMaskMap.delete();\n this.dummyMaskMap = undefined;\n }\n\n if (this.maskPass) {\n this.maskPass.delete();\n this.maskPass = undefined;\n this.maskMap = undefined;\n }\n\n this.lastViewport = undefined;\n this.masks = null;\n this.channels.length = 0;\n }\n}\n","import OrthographicView from '../../views/orthographic-view';\nimport WebMercatorViewport from '../../viewports/web-mercator-viewport';\nimport {fitBounds} from '@math.gl/web-mercator';\n\nimport type Layer from '../../lib/layer';\nimport type Viewport from '../../viewports/viewport';\n\nexport type MaskBounds = [number, number, number, number];\n\n/*\n * Compute the bounds of the mask in world space, such that it covers an\n * area currently visible (extended by a buffer) or the area of the masking\n * data, whichever is smaller\n */\nexport function getMaskBounds({\n layers,\n viewport\n}: {\n layers: Layer[];\n viewport: Viewport;\n}): MaskBounds {\n // Join the bounds of layer data\n let bounds: MaskBounds | null = null;\n for (const layer of layers) {\n const subLayerBounds = layer.getBounds();\n if (subLayerBounds) {\n if (bounds) {\n bounds[0] = Math.min(bounds[0], subLayerBounds[0][0]);\n bounds[1] = Math.min(bounds[1], subLayerBounds[0][1]);\n bounds[2] = Math.max(bounds[2], subLayerBounds[1][0]);\n bounds[3] = Math.max(bounds[3], subLayerBounds[1][1]);\n } else {\n bounds = [\n subLayerBounds[0][0],\n subLayerBounds[0][1],\n subLayerBounds[1][0],\n subLayerBounds[1][1]\n ];\n }\n }\n }\n const viewportBounds = viewport.getBounds();\n if (!bounds) {\n return viewportBounds;\n }\n\n // Expand viewport bounds by 2X. Heurestically chosen to avoid masking\n // errors when mask is partially out of view\n const paddedBounds = _doubleBounds(viewportBounds);\n\n // When bounds of the mask are smaller than the viewport bounds simply use\n // mask bounds, so as to maximize resolution & avoid mask rerenders\n if (\n bounds[2] - bounds[0] < paddedBounds[2] - paddedBounds[0] ||\n bounds[3] - bounds[1] < paddedBounds[3] - paddedBounds[1]\n ) {\n return bounds;\n }\n\n // As viewport shrinks, to avoid pixelation along mask edges\n // we need to reduce the bounds and only render the visible portion\n // of the mask.\n // We pad the viewport bounds to capture the section\n // of the mask just outside the viewport to correctly maskByInstance.\n // Intersect mask & padded viewport bounds\n bounds[0] = Math.max(bounds[0], paddedBounds[0]);\n bounds[1] = Math.max(bounds[1], paddedBounds[1]);\n bounds[2] = Math.min(bounds[2], paddedBounds[2]);\n bounds[3] = Math.min(bounds[3], paddedBounds[3]);\n return bounds;\n}\n\n/*\n * Compute viewport to render the mask into, covering the given bounds\n */\nexport function getMaskViewport({\n bounds,\n viewport,\n width,\n height\n}: {\n bounds: MaskBounds;\n viewport: Viewport;\n width: number;\n height: number;\n}): Viewport | null {\n if (bounds[2] <= bounds[0] || bounds[3] <= bounds[1]) {\n return null;\n }\n\n // Single pixel border to prevent mask bleeding at edge of texture\n const padding = 1;\n width -= padding * 2;\n height -= padding * 2;\n\n if (viewport instanceof WebMercatorViewport) {\n const {longitude, latitude, zoom} = fitBounds({\n width,\n height,\n bounds: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n maxZoom: 20\n });\n return new WebMercatorViewport({\n longitude,\n latitude,\n zoom,\n x: padding,\n y: padding,\n width,\n height\n });\n }\n\n const center = [(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2, 0];\n const scale = Math.min(20, width / (bounds[2] - bounds[0]), height / (bounds[3] - bounds[1]));\n\n return new OrthographicView({\n x: padding,\n y: padding\n }).makeViewport({\n width,\n height,\n viewState: {\n target: center,\n zoom: Math.log2(scale)\n }\n });\n}\n\nfunction _doubleBounds(bounds: MaskBounds): MaskBounds {\n const size = {\n x: bounds[2] - bounds[0],\n y: bounds[3] - bounds[1]\n };\n const center = {\n x: bounds[0] + 0.5 * size.x,\n y: bounds[1] + 0.5 * size.y\n };\n return [center.x - size.x, center.y - size.y, center.x + size.x, center.y + size.y];\n}\n","import {deepEqual} from '../utils/deep-equal';\nimport LightingEffect from '../effects/lighting/lighting-effect';\nimport MaskEffect from '../effects/mask/mask-effect';\nimport type {Effect} from './effect';\n\nconst DEFAULT_LIGHTING_EFFECT = new LightingEffect();\n\nexport default class EffectManager {\n effects: Effect[];\n _internalEffects: Effect[];\n _needsRedraw: false | string;\n\n constructor() {\n this.effects = [];\n this._internalEffects = [];\n this._needsRedraw = 'Initial render';\n this.setEffects();\n }\n\n setProps(props) {\n if ('effects' in props) {\n if (props.effects.length !== this.effects.length || !deepEqual(props.effects, this.effects)) {\n this.setEffects(props.effects);\n this._needsRedraw = 'effects changed';\n }\n }\n }\n\n needsRedraw(opts = {clearRedrawFlags: false}): false | string {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n\n getEffects() {\n return this._internalEffects;\n }\n\n finalize() {\n this.cleanup();\n }\n\n // Private\n setEffects(effects: Effect[] = []) {\n this.cleanup();\n this.effects = effects;\n\n this._internalEffects = effects.slice();\n // Unique MaskEffect per EffectManager as GL context may be different\n this._internalEffects.push(new MaskEffect());\n if (!effects.some(effect => effect instanceof LightingEffect)) {\n this._internalEffects.push(DEFAULT_LIGHTING_EFFECT);\n }\n }\n\n cleanup() {\n for (const effect of this.effects) {\n effect.cleanup();\n }\n\n for (const effect of this._internalEffects) {\n effect.cleanup();\n }\n this.effects.length = 0;\n this._internalEffects.length = 0;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport log from '../../utils/log';\nimport type Layer from '../layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {PickingColorDecoder} from '../../passes/pick-layers-pass';\n\nexport type PickedPixel = {\n pickedColor: Uint8Array | null;\n pickedLayer?: Layer;\n pickedViewports?: Viewport[];\n pickedX?: number;\n pickedY?: number;\n pickedObjectIndex: number;\n};\n\nconst NO_PICKED_OBJECT = {\n pickedColor: null,\n pickedObjectIndex: -1\n};\n\n/* eslint-disable max-depth, max-statements */\n/**\n * Pick at a specified pixel with a tolerance radius\n * Returns the closest object to the pixel in shape `{pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getClosestObject({\n pickedColors,\n decodePickingColor,\n deviceX,\n deviceY,\n deviceRadius,\n deviceRect\n}: {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n deviceX: number;\n deviceY: number;\n deviceRadius: number;\n deviceRect: {x: number; y: number; width: number; height: number};\n}): PickedPixel {\n // Traverse all pixels in picking results and find the one closest to the supplied\n // [deviceX, deviceY]\n const {x, y, width, height} = deviceRect;\n let minSquareDistanceToCenter = deviceRadius * deviceRadius;\n let closestPixelIndex = -1;\n let i = 0;\n\n for (let row = 0; row < height; row++) {\n const dy = row + y - deviceY;\n const dy2 = dy * dy;\n\n if (dy2 > minSquareDistanceToCenter) {\n // skip this row\n i += 4 * width;\n } else {\n for (let col = 0; col < width; col++) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n\n if (pickedLayerIndex >= 0) {\n const dx = col + x - deviceX;\n const d2 = dx * dx + dy2;\n\n if (d2 <= minSquareDistanceToCenter) {\n minSquareDistanceToCenter = d2;\n closestPixelIndex = i;\n }\n }\n i += 4;\n }\n }\n }\n\n if (closestPixelIndex >= 0) {\n // Decode picked object index from color\n const pickedColor = pickedColors.slice(closestPixelIndex, closestPixelIndex + 4);\n const pickedObject = decodePickingColor(pickedColor);\n if (pickedObject) {\n const dy = Math.floor(closestPixelIndex / 4 / width);\n const dx = closestPixelIndex / 4 - dy * width;\n return {\n ...pickedObject,\n pickedColor,\n pickedX: x + dx,\n pickedY: y + dy\n };\n }\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n return NO_PICKED_OBJECT;\n}\n\n/**\n * Examines a picking buffer for unique colors\n * Returns array of unique objects in shape `{x, y, pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getUniqueObjects({\n pickedColors,\n decodePickingColor\n}: {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n}): PickedPixel[] {\n const uniqueColors = new Map();\n\n // Traverse all pixels in picking results and get unique colors\n if (pickedColors) {\n for (let i = 0; i < pickedColors.length; i += 4) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n\n if (pickedLayerIndex >= 0) {\n const pickedColor = pickedColors.slice(i, i + 4);\n const colorKey = pickedColor.join(',');\n // eslint-disable-next-line\n if (!uniqueColors.has(colorKey)) {\n const pickedObject = decodePickingColor(pickedColor);\n // eslint-disable-next-line\n if (pickedObject) {\n uniqueColors.set(colorKey, {\n ...pickedObject,\n color: pickedColor\n });\n } else {\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n }\n }\n }\n }\n\n return Array.from(uniqueColors.values());\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type Layer from '../layer';\nimport type Viewport from '../../viewports/viewport';\nimport type {PickedPixel} from './query-object';\n\nexport interface PickingInfo {\n color: Uint8Array | null;\n layer: Layer | null;\n sourceLayer?: Layer | null;\n viewport?: Viewport;\n index: number;\n picked: boolean;\n object?: any;\n x: number;\n y: number;\n pixel?: [number, number];\n coordinate?: number[];\n devicePixel?: [number, number];\n pixelRatio: number;\n}\n\nexport interface GetPickingInfoParams {\n info: PickingInfo;\n mode: string;\n sourceLayer: Layer | null;\n}\n\n/** Generates some basic information of the picking action: x, y, coordinates etc.\n * Regardless if anything is picked\n */\nexport function getEmptyPickingInfo({\n pickInfo,\n viewports,\n pixelRatio,\n x,\n y,\n z\n}: {\n pickInfo?: PickedPixel;\n viewports: Viewport[];\n pixelRatio: number;\n x: number;\n y: number;\n z?: number;\n}): PickingInfo {\n // If more than one viewports are used in the picking pass, locate the viewport that\n // drew the picked pixel\n let pickedViewport = viewports[0];\n if (viewports.length > 1) {\n // Find the viewport that contain the picked pixel\n pickedViewport = getViewportFromCoordinates(pickInfo?.pickedViewports || viewports, {x, y});\n }\n let coordinate: number[] | undefined;\n if (pickedViewport) {\n const point = [x - pickedViewport.x, y - pickedViewport.y];\n if (z !== undefined) {\n point[2] = z;\n }\n coordinate = pickedViewport.unproject(point);\n }\n\n return {\n color: null,\n layer: null,\n viewport: pickedViewport,\n index: -1,\n picked: false,\n x,\n y,\n pixel: [x, y],\n coordinate,\n devicePixel:\n pickInfo && 'pickedX' in pickInfo\n ? [pickInfo.pickedX as number, pickInfo.pickedY as number]\n : undefined,\n pixelRatio\n };\n}\n\n/* eslint-disable max-depth */\n/** Generates the picking info of a picking operation */\nexport function processPickInfo(opts: {\n pickInfo: PickedPixel;\n lastPickedInfo: {\n index: number;\n layerId: string | null;\n info: PickingInfo | null;\n };\n mode: string;\n layers: Layer[];\n viewports: Viewport[];\n pixelRatio: number;\n x: number;\n y: number;\n z?: number;\n}): Map {\n const {pickInfo, lastPickedInfo, mode, layers} = opts;\n const {pickedColor, pickedLayer, pickedObjectIndex} = pickInfo;\n\n const affectedLayers = pickedLayer ? [pickedLayer] : [];\n\n if (mode === 'hover') {\n // only invoke onHover events if picked object has changed\n const lastPickedPixelIndex = lastPickedInfo.index;\n const lastPickedLayerId = lastPickedInfo.layerId;\n const pickedLayerId = pickedLayer ? pickedLayer.props.id : null;\n\n // proceed only if picked object changed\n if (pickedLayerId !== lastPickedLayerId || pickedObjectIndex !== lastPickedPixelIndex) {\n if (pickedLayerId !== lastPickedLayerId) {\n // We cannot store a ref to lastPickedLayer in the context because\n // the state of an outdated layer is no longer valid\n // and the props may have changed\n const lastPickedLayer = layers.find(layer => layer.props.id === lastPickedLayerId);\n if (lastPickedLayer) {\n // Let leave event fire before enter event\n affectedLayers.unshift(lastPickedLayer);\n }\n }\n\n // Update layer manager context\n lastPickedInfo.layerId = pickedLayerId;\n lastPickedInfo.index = pickedObjectIndex;\n lastPickedInfo.info = null;\n }\n }\n\n const baseInfo = getEmptyPickingInfo(opts);\n\n // Use a Map to store all picking infos.\n // The following two forEach loops are the result of\n // https://github.com/visgl/deck.gl/issues/443\n // Please be very careful when changing this pattern\n const infos = new Map();\n\n // Make sure infos always contain something even if no layer is affected\n infos.set(null, baseInfo);\n\n affectedLayers.forEach(layer => {\n let info = {...baseInfo};\n\n if (layer === pickedLayer) {\n info.color = pickedColor;\n info.index = pickedObjectIndex;\n info.picked = true;\n }\n\n info = getLayerPickingInfo({layer, info, mode});\n const rootLayer = info.layer as Layer;\n\n if (layer === pickedLayer && mode === 'hover') {\n lastPickedInfo.info = info;\n }\n\n // This guarantees that there will be only one copy of info for\n // one composite layer\n infos.set(rootLayer.id, info);\n\n if (mode === 'hover') {\n rootLayer.updateAutoHighlight(info);\n }\n });\n\n return infos;\n}\n\n/** Walk up the layer composite chain to populate the info object */\nexport function getLayerPickingInfo({\n layer,\n info,\n mode\n}: {\n layer: Layer;\n info: PickingInfo;\n mode: string;\n}): PickingInfo {\n while (layer && info) {\n // For a composite layer, sourceLayer will point to the sublayer\n // where the event originates from.\n // It provides additional context for the composite layer's\n // getPickingInfo() method to populate the info object\n const sourceLayer = info.layer || null;\n info.sourceLayer = sourceLayer;\n info.layer = layer;\n // layer.pickLayer() function requires a non-null ```layer.state```\n // object to function properly. So the layer referenced here\n // must be the \"current\" layer, not an \"out-dated\" / \"invalidated\" layer\n info = layer.getPickingInfo({info, mode, sourceLayer});\n layer = layer.parent as Layer;\n }\n return info;\n}\n\n/** Indentifies which viewport, if any corresponds to x and y\n If multiple viewports contain the target pixel, last viewport drawn is returend\n Returns first viewport if no match */\nfunction getViewportFromCoordinates(\n viewports: Viewport[],\n pixel: {x: number; y: number}\n): Viewport {\n // find the last viewport that contains the pixel\n for (let i = viewports.length - 1; i >= 0; i--) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n return viewport;\n }\n }\n return viewports[0];\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Framebuffer,\n Texture2D,\n isWebGL2,\n readPixelsToArray,\n cssToDeviceRatio,\n cssToDevicePixels\n} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport PickLayersPass, {PickingColorDecoder} from '../passes/pick-layers-pass';\nimport {getClosestObject, getUniqueObjects, PickedPixel} from './picking/query-object';\nimport {\n processPickInfo,\n getLayerPickingInfo,\n getEmptyPickingInfo,\n PickingInfo\n} from './picking/pick-info';\n\nimport type {Framebuffer as LumaFramebuffer} from '@luma.gl/webgl';\nimport type {FilterContext, Rect} from '../passes/layers-pass';\nimport type Layer from './layer';\nimport type {Effect} from './effect';\nimport type View from '../views/view';\nimport type Viewport from '../viewports/viewport';\n\nexport type PickByPointOptions = {\n x: number;\n y: number;\n radius?: number;\n depth?: number;\n mode?: string;\n unproject3D?: boolean;\n};\n\nexport type PickByRectOptions = {\n x: number;\n y: number;\n width?: number;\n height?: number;\n mode?: string;\n maxObjects?: number | null;\n};\n\ntype PickOperationContext = {\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n effects: Effect[];\n};\n\n/** Manages picking in a Deck context */\nexport default class DeckPicker {\n gl: WebGLRenderingContext;\n pickingFBO?: LumaFramebuffer;\n depthFBO?: LumaFramebuffer;\n pickLayersPass: PickLayersPass;\n layerFilter?: (context: FilterContext) => boolean;\n\n /** Identifiers of the previously picked object, for callback tracking and auto highlight */\n lastPickedInfo: {\n index: number;\n layerId: string | null;\n info: PickingInfo | null;\n };\n\n _pickable: boolean = true;\n\n constructor(gl: WebGLRenderingContext) {\n this.gl = gl;\n this.pickLayersPass = new PickLayersPass(gl);\n this.lastPickedInfo = {\n index: -1,\n layerId: null,\n info: null\n };\n }\n\n setProps(props: any): void {\n if ('layerFilter' in props) {\n this.layerFilter = props.layerFilter;\n }\n\n if ('_pickable' in props) {\n this._pickable = props._pickable;\n }\n }\n\n finalize() {\n if (this.pickingFBO) {\n this.pickingFBO.delete();\n }\n if (this.depthFBO) {\n this.depthFBO.color.delete();\n this.depthFBO.delete();\n }\n }\n\n /** Pick the closest info at given coordinate */\n pickObject(opts: PickByPointOptions & PickOperationContext) {\n return this._pickClosestObject(opts);\n }\n\n /** Get all unique infos within a bounding box */\n pickObjects(opts: PickByRectOptions & PickOperationContext) {\n return this._pickVisibleObjects(opts);\n }\n\n // Returns a new picking info object by assuming the last picked object is still picked\n getLastPickedObject({x, y, layers, viewports}, lastPickedInfo = this.lastPickedInfo.info) {\n const lastPickedLayerId = lastPickedInfo && lastPickedInfo.layer && lastPickedInfo.layer.id;\n const lastPickedViewportId =\n lastPickedInfo && lastPickedInfo.viewport && lastPickedInfo.viewport.id;\n const layer = lastPickedLayerId ? layers.find(l => l.id === lastPickedLayerId) : null;\n const viewport =\n (lastPickedViewportId && viewports.find(v => v.id === lastPickedViewportId)) || viewports[0];\n const coordinate = viewport && viewport.unproject([x - viewport.x, y - viewport.y]);\n\n const info = {\n x,\n y,\n viewport,\n coordinate,\n layer\n };\n\n return {...lastPickedInfo, ...info};\n }\n\n // Private\n\n /** Ensures that picking framebuffer exists and matches the canvas size */\n _resizeBuffer() {\n const {gl} = this;\n\n // Create a frame buffer if not already available\n if (!this.pickingFBO) {\n this.pickingFBO = new Framebuffer(gl);\n\n if (Framebuffer.isSupported(gl, {colorBufferFloat: true})) {\n const depthFBO = new Framebuffer(gl);\n depthFBO.attach({\n [GL.COLOR_ATTACHMENT0]: new Texture2D(gl, {\n format: isWebGL2(gl) ? GL.RGBA32F : GL.RGBA,\n type: GL.FLOAT\n })\n });\n this.depthFBO = depthFBO;\n }\n }\n // Resize it to current canvas size (this is a noop if size hasn't changed)\n this.pickingFBO?.resize({width: gl.canvas.width, height: gl.canvas.height});\n this.depthFBO?.resize({width: gl.canvas.width, height: gl.canvas.height});\n }\n\n /** Preliminary filtering of the layers list. Skid picking pass if no layer is pickable. */\n _getPickable(layers: Layer[]): Layer[] | null {\n if (this._pickable === false) {\n return null;\n }\n const pickableLayers = layers.filter(layer => layer.isPickable() && !layer.isComposite);\n return pickableLayers.length ? pickableLayers : null;\n }\n\n // eslint-disable-next-line max-statements,complexity\n /** Pick the closest object at the given coordinate */\n _pickClosestObject({\n layers,\n views,\n viewports,\n x,\n y,\n radius = 0,\n depth = 1,\n mode = 'query',\n unproject3D,\n onViewportActive,\n effects\n }: PickByPointOptions & PickOperationContext): {\n result: PickingInfo[];\n emptyInfo: PickingInfo;\n } {\n const pickableLayers = this._getPickable(layers);\n const pixelRatio = cssToDeviceRatio(this.gl);\n\n if (!pickableLayers) {\n return {\n result: [],\n emptyInfo: getEmptyPickingInfo({viewports, x, y, pixelRatio})\n };\n }\n\n this._resizeBuffer();\n\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // Top-left coordinates [x, y] to bottom-left coordinates [deviceX, deviceY]\n // And compensate for pixelRatio\n const devicePixelRange = cssToDevicePixels(this.gl, [x, y], true);\n const devicePixel = [\n devicePixelRange.x + Math.floor(devicePixelRange.width / 2),\n devicePixelRange.y + Math.floor(devicePixelRange.height / 2)\n ];\n\n const deviceRadius = Math.round(radius * pixelRatio);\n const {width, height} = this.pickingFBO as LumaFramebuffer;\n const deviceRect = this._getPickingRect({\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceWidth: width,\n deviceHeight: height\n });\n\n const cullRect: Rect = {\n x: x - radius,\n y: y - radius,\n width: radius * 2 + 1,\n height: radius * 2 + 1\n };\n\n let infos: Map;\n const result: PickingInfo[] = [];\n const affectedLayers = new Set();\n\n for (let i = 0; i < depth; i++) {\n let pickInfo: PickedPixel;\n\n if (deviceRect) {\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass: `picking:${mode}`\n });\n\n pickInfo = getClosestObject({\n ...pickedResult,\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceRect\n });\n } else {\n pickInfo = {\n pickedColor: null,\n pickedObjectIndex: -1\n };\n }\n\n let z;\n if (pickInfo.pickedLayer && unproject3D && this.depthFBO) {\n const pickedResultPass2 = this._drawAndSample(\n {\n layers: [pickInfo.pickedLayer],\n views,\n viewports,\n onViewportActive,\n deviceRect: {\n x: pickInfo.pickedX as number,\n y: pickInfo.pickedY as number,\n width: 1,\n height: 1\n },\n cullRect,\n effects,\n pass: `picking:${mode}:z`\n },\n true\n );\n // picked value is in common space (pixels) from the camera target (viewport.position)\n // convert it to meters from the ground\n z = pickedResultPass2.pickedColors[0];\n }\n\n // Only exclude if we need to run picking again.\n // We need to run picking again if an object is detected AND\n // we have not exhausted the requested depth.\n if (pickInfo.pickedLayer && i + 1 < depth) {\n affectedLayers.add(pickInfo.pickedLayer);\n pickInfo.pickedLayer.disablePickingIndex(pickInfo.pickedObjectIndex);\n }\n\n // This logic needs to run even if no object is picked.\n infos = processPickInfo({\n pickInfo,\n lastPickedInfo: this.lastPickedInfo,\n mode,\n layers: pickableLayers,\n viewports,\n x,\n y,\n z,\n pixelRatio\n });\n\n for (const info of infos.values()) {\n if (info.layer) {\n result.push(info);\n }\n }\n\n // If no object is picked stop.\n if (!pickInfo.pickedColor) {\n break;\n }\n }\n\n // reset only affected buffers\n for (const layer of affectedLayers) {\n layer.restorePickingColors();\n }\n\n return {result, emptyInfo: infos!.get(null) as PickingInfo};\n }\n\n /** Pick all objects within the given bounding box */\n _pickVisibleObjects({\n layers,\n views,\n viewports,\n x,\n y,\n width = 1,\n height = 1,\n mode = 'query',\n maxObjects = null,\n onViewportActive,\n effects\n }: PickByRectOptions & PickOperationContext): PickingInfo[] {\n const pickableLayers = this._getPickable(layers);\n\n if (!pickableLayers) {\n return [];\n }\n\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // And compensate for pixelRatio\n const pixelRatio = cssToDeviceRatio(this.gl);\n const leftTop = cssToDevicePixels(this.gl, [x, y], true);\n\n // take left and top (y inverted in device pixels) from start location\n const deviceLeft = leftTop.x;\n const deviceTop = leftTop.y + leftTop.height;\n\n // take right and bottom (y inverted in device pixels) from end location\n const rightBottom = cssToDevicePixels(this.gl, [x + width, y + height], true);\n const deviceRight = rightBottom.x + rightBottom.width;\n const deviceBottom = rightBottom.y;\n\n const deviceRect = {\n x: deviceLeft,\n y: deviceBottom,\n // deviceTop and deviceRight represent the first pixel outside the desired rect\n width: deviceRight - deviceLeft,\n height: deviceTop - deviceBottom\n };\n\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect: {x, y, width, height},\n effects,\n pass: `picking:${mode}`\n });\n\n const pickInfos = getUniqueObjects(pickedResult);\n\n // Only return unique infos, identified by info.object\n const uniqueInfos = new Map();\n\n const isMaxObjects = Number.isFinite(maxObjects);\n\n for (let i = 0; i < pickInfos.length; i++) {\n if (isMaxObjects && maxObjects && uniqueInfos.size >= maxObjects) {\n break;\n }\n const pickInfo = pickInfos[i];\n let info: PickingInfo = {\n color: pickInfo.pickedColor,\n layer: null,\n index: pickInfo.pickedObjectIndex,\n picked: true,\n x,\n y,\n pixelRatio\n };\n\n info = getLayerPickingInfo({layer: pickInfo.pickedLayer as Layer, info, mode});\n if (!uniqueInfos.has(info.object)) {\n uniqueInfos.set(info.object, info);\n }\n }\n\n return Array.from(uniqueInfos.values());\n }\n\n /** Renders layers into the picking buffer with picking colors and read the pixels. */\n _drawAndSample(params: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n }): {\n pickedColors: Uint8Array;\n decodePickingColor: PickingColorDecoder;\n };\n\n /** Renders layers into the picking buffer with encoded z values and read the pixels. */\n _drawAndSample(\n params: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n },\n pickZ: true\n ): {\n pickedColors: Float32Array;\n decodePickingColor: null;\n };\n\n _drawAndSample(\n {\n layers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass\n }: {\n deviceRect: Rect;\n pass: string;\n layers: Layer[];\n views: Record;\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n effects: Effect[];\n },\n pickZ: boolean = false\n ): {\n pickedColors: Uint8Array | Float32Array;\n decodePickingColor: PickingColorDecoder | null;\n } {\n const pickingFBO = pickZ ? this.depthFBO : this.pickingFBO;\n\n const {decodePickingColor} = this.pickLayersPass.render({\n layers,\n layerFilter: this.layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect,\n cullRect,\n effects,\n pass,\n pickZ\n });\n\n // Read from an already rendered picking buffer\n // Returns an Uint8ClampedArray of picked pixels\n const {x, y, width, height} = deviceRect;\n const pickedColors = new (pickZ ? Float32Array : Uint8Array)(width * height * 4);\n readPixelsToArray(pickingFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: width,\n sourceHeight: height,\n target: pickedColors\n });\n\n return {pickedColors, decodePickingColor};\n }\n\n // Calculate a picking rect centered on deviceX and deviceY and clipped to device\n // Returns null if pixel is outside of device\n _getPickingRect({\n deviceX,\n deviceY,\n deviceRadius,\n deviceWidth,\n deviceHeight\n }: {\n deviceX: number;\n deviceY: number;\n deviceRadius: number;\n deviceWidth: number;\n deviceHeight: number;\n }): Rect | null {\n // Create a box of size `radius * 2 + 1` centered at [deviceX, deviceY]\n const x = Math.max(0, deviceX - deviceRadius);\n const y = Math.max(0, deviceY - deviceRadius);\n const width = Math.min(deviceWidth, deviceX + deviceRadius + 1) - x;\n const height = Math.min(deviceHeight, deviceY + deviceRadius + 1) - y;\n\n // x, y out of bounds.\n if (width <= 0 || height <= 0) {\n return null;\n }\n\n return {x, y, width, height};\n }\n}\n","// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* global document */\nconst defaultStyle: Partial = {\n zIndex: '1',\n position: 'absolute',\n pointerEvents: 'none',\n color: '#a0a7b4',\n backgroundColor: '#29323c',\n padding: '10px',\n top: '0',\n left: '0',\n display: 'none'\n};\n\nexport type TooltipContent =\n | null\n | string\n | {\n text?: string;\n html?: string;\n className?: string;\n style?: Partial;\n };\n\nexport default class Tooltip {\n private el: HTMLDivElement | null = null;\n\n isVisible: boolean = false;\n\n constructor(canvas: HTMLCanvasElement) {\n const canvasParent = canvas.parentElement;\n if (canvasParent) {\n this.el = document.createElement('div');\n this.el.className = 'deck-tooltip';\n Object.assign(this.el.style, defaultStyle);\n canvasParent.appendChild(this.el);\n }\n }\n\n setTooltip(displayInfo: TooltipContent, x?: number, y?: number): void {\n const el = this.el;\n if (!el) {\n return;\n }\n\n if (typeof displayInfo === 'string') {\n el.innerText = displayInfo;\n } else if (!displayInfo) {\n this.isVisible = false;\n el.style.display = 'none';\n return;\n } else {\n if (displayInfo.text) {\n el.innerText = displayInfo.text;\n }\n if (displayInfo.html) {\n el.innerHTML = displayInfo.html;\n }\n if (displayInfo.className) {\n el.className = displayInfo.className;\n }\n Object.assign(el.style, displayInfo.style);\n }\n this.isVisible = true;\n el.style.display = 'block';\n el.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n remove(): void {\n if (this.el) {\n this.el.remove();\n this.el = null;\n }\n }\n}\n","import type {Loader} from '@loaders.gl/loader-utils';\n\nfunction isJSON(text: string): boolean {\n const firstChar = text[0];\n const lastChar = text[text.length - 1];\n return (firstChar === '{' && lastChar === '}') || (firstChar === '[' && lastChar === ']');\n}\n\n// A light weight version instead of @loaders.gl/json (stream processing etc.)\nexport default {\n id: 'JSON',\n name: 'JSON',\n module: '',\n version: '',\n options: {},\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json', 'application/geo+json'],\n testText: isJSON,\n parseTextSync: JSON.parse\n} as Loader;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {registerLoaders} from '@loaders.gl/core';\nimport {ImageLoader} from '@loaders.gl/images';\n\nimport log from '../utils/log';\nimport {register} from '../debug';\nimport jsonLoader from '../utils/json-loader';\n\n// Version detection using babel plugin\n// Fallback for tests and SSR since global variable is defined by Webpack.\nconst version =\n // @ts-expect-error __VERSION__ is replaced during transpilation\n typeof __VERSION__ !== 'undefined'\n ? // @ts-expect-error\n __VERSION__\n : globalThis.DECK_VERSION || 'untranspiled source';\n\n// Note: a `deck` object not created by deck.gl may exist in the global scope\nconst existingVersion = globalThis.deck && globalThis.deck.VERSION;\n\nif (existingVersion && existingVersion !== version) {\n throw new Error(`deck.gl - multiple versions detected: ${existingVersion} vs ${version}`);\n}\n\nif (!existingVersion) {\n log.log(1, `deck.gl ${version}`)();\n\n globalThis.deck = {\n ...globalThis.deck,\n VERSION: version,\n version,\n log,\n // experimental\n _registerLoggers: register\n };\n\n registerLoaders([\n jsonLoader,\n // @ts-expect-error non-standard Loader format\n [ImageLoader, {imagebitmap: {premultiplyAlpha: 'none'}}]\n ]);\n}\n\nexport default globalThis.deck;\n","/**\n * This file contains overrides the default\n * hammer.js functions to add our own utility\n */\n/* eslint-disable */\n\n/* Hammer.js constants */\nconst INPUT_START = 1;\nconst INPUT_MOVE = 2;\nconst INPUT_END = 4;\nconst MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\n/**\n * Helper function that returns true if any element in an array meets given criteria.\n * Because older browsers do not support `Array.prototype.some`\n * @params array {Array}\n * @params predict {Function}\n */\nfunction some(array, predict) {\n for (let i = 0; i < array.length; i++) {\n if (predict(array[i])) {\n return true;\n }\n }\n return false;\n}\n\n/* eslint-disable no-invalid-this */\nexport function enhancePointerEventInput(PointerEventInput) {\n const oldHandler = PointerEventInput.prototype.handler;\n\n // overrides PointerEventInput.handler to accept right mouse button\n PointerEventInput.prototype.handler = function handler(ev) {\n const store = this.store;\n\n // Allow non-left mouse buttons through\n if (ev.button > 0 && ev.type === 'pointerdown') {\n if (!some(store, e => e.pointerId === ev.pointerId)) {\n store.push(ev);\n }\n }\n\n oldHandler.call(this, ev);\n };\n}\n\n// overrides MouseInput.handler to accept right mouse button\nexport function enhanceMouseInput(MouseInput) {\n MouseInput.prototype.handler = function handler(ev) {\n let eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the mouse button down\n if (eventType & INPUT_START && ev.button >= 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which === 0) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: 'mouse',\n srcEvent: ev\n });\n };\n}\n","import * as hammerjs from 'hammerjs';\nimport {enhancePointerEventInput, enhanceMouseInput} from './hammer-overrides';\n\nenhancePointerEventInput(hammerjs.PointerEventInput);\nenhanceMouseInput(hammerjs.MouseInput);\n\nexport const Manager = hammerjs.Manager;\n\nexport default hammerjs;\n","import type {MjolnirEventRaw} from '../types';\n\nexport interface InputOptions {\n enable: boolean;\n events?: string[];\n}\n\nexport default class Input {\n element: HTMLElement;\n options: Options;\n callback: (e: EventType) => void;\n\n constructor(element: HTMLElement, callback: (e: EventType) => void, options: Options) {\n this.element = element;\n this.callback = callback;\n\n this.options = {enable: true, ...options};\n }\n}\n","import Hammer from './utils/hammer';\nimport {RecognizerTuple} from './types';\n\n// This module contains constants that must be conditionally required\n// due to `window`/`document` references downstream.\nexport const RECOGNIZERS: RecognizerTuple[] = Hammer\n ? [\n [Hammer.Pan, {event: 'tripan', pointers: 3, threshold: 0, enable: false}],\n [Hammer.Rotate, {enable: false}],\n [Hammer.Pinch, {enable: false}],\n [Hammer.Swipe, {enable: false}],\n [Hammer.Pan, {threshold: 0, enable: false}],\n [Hammer.Press, {enable: false}],\n [Hammer.Tap, {event: 'doubletap', taps: 2, enable: false}],\n // TODO - rename to 'tap' and 'singletap' in the next major release\n [Hammer.Tap, {event: 'anytap', enable: false}],\n [Hammer.Tap, {enable: false}]\n ]\n : null;\n\n// Recognize the following gestures even if a given recognizer succeeds\nexport const RECOGNIZER_COMPATIBLE_MAP = {\n tripan: ['rotate', 'pinch', 'pan'],\n rotate: ['pinch'],\n pinch: ['pan'],\n pan: ['press', 'doubletap', 'anytap', 'tap'],\n doubletap: ['anytap'],\n anytap: ['tap']\n} as const;\n\n// Recognize the folling gestures only if a given recognizer fails\nexport const RECOGNIZER_FALLBACK_MAP = {\n doubletap: ['tap']\n} as const;\n\n/**\n * Only one set of basic input events will be fired by Hammer.js:\n * either pointer, touch, or mouse, depending on system support.\n * In order to enable an application to be agnostic of system support,\n * alias basic input events into \"classes\" of events: down, move, and up.\n * See `_onBasicInput()` for usage of these aliases.\n */\nexport const BASIC_EVENT_ALIASES = {\n pointerdown: 'pointerdown',\n pointermove: 'pointermove',\n pointerup: 'pointerup',\n touchstart: 'pointerdown',\n touchmove: 'pointermove',\n touchend: 'pointerup',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup'\n} as const;\n\nexport const INPUT_EVENT_TYPES = {\n KEY_EVENTS: ['keydown', 'keyup'],\n MOUSE_EVENTS: ['mousedown', 'mousemove', 'mouseup', 'mouseover', 'mouseout', 'mouseleave'],\n WHEEL_EVENTS: [\n // Chrome, Safari\n 'wheel',\n // IE\n 'mousewheel'\n ]\n} as const;\n\n/**\n * \"Gestural\" events are those that have semantic meaning beyond the basic input event,\n * e.g. a click or tap is a sequence of `down` and `up` events with no `move` event in between.\n * Hammer.js handles these with its Recognizer system;\n * this block maps event names to the Recognizers required to detect the events.\n */\nexport const EVENT_RECOGNIZER_MAP = {\n tap: 'tap',\n anytap: 'anytap',\n doubletap: 'doubletap',\n press: 'press',\n pinch: 'pinch',\n pinchin: 'pinch',\n pinchout: 'pinch',\n pinchstart: 'pinch',\n pinchmove: 'pinch',\n pinchend: 'pinch',\n pinchcancel: 'pinch',\n rotate: 'rotate',\n rotatestart: 'rotate',\n rotatemove: 'rotate',\n rotateend: 'rotate',\n rotatecancel: 'rotate',\n tripan: 'tripan',\n tripanstart: 'tripan',\n tripanmove: 'tripan',\n tripanup: 'tripan',\n tripandown: 'tripan',\n tripanleft: 'tripan',\n tripanright: 'tripan',\n tripanend: 'tripan',\n tripancancel: 'tripan',\n pan: 'pan',\n panstart: 'pan',\n panmove: 'pan',\n panup: 'pan',\n pandown: 'pan',\n panleft: 'pan',\n panright: 'pan',\n panend: 'pan',\n pancancel: 'pan',\n swipe: 'swipe',\n swipeleft: 'swipe',\n swiperight: 'swipe',\n swipeup: 'swipe',\n swipedown: 'swipe'\n} as const;\n\n/**\n * Map gestural events typically provided by browsers\n * that are not reported in 'hammer.input' events\n * to corresponding Hammer.js gestures.\n */\nexport const GESTURE_EVENT_ALIASES = {\n click: 'tap',\n anyclick: 'anytap',\n dblclick: 'doubletap',\n mousedown: 'pointerdown',\n mousemove: 'pointermove',\n mouseup: 'pointerup',\n mouseover: 'pointerover',\n mouseout: 'pointerout',\n mouseleave: 'pointerleave'\n} as const;\n","// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global'\n\n/* global window, global, document, navigator */\nexport const userAgent =\n typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent.toLowerCase() : '';\n\nconst window_ = typeof window !== 'undefined' ? window : global;\nconst global_ = typeof global !== 'undefined' ? global : window;\nconst document_ = typeof document !== 'undefined' ? document : {};\n\nexport {window_ as window, global_ as global, document_ as document};\n\n/*\n * Detect whether passive option is supported by the current browser.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n #Safely_detecting_option_support\n */\nlet passiveSupported = false;\n\n/* eslint-disable accessor-pairs, no-empty */\ntry {\n const options = {\n // This function will be called when the browser\n // attempts to access the passive property.\n get passive() {\n passiveSupported = true;\n return true;\n }\n };\n\n window_.addEventListener('test', null, options);\n window_.removeEventListener('test', null);\n} catch (err) {\n passiveSupported = false;\n}\n\nexport {passiveSupported};\n","import type {MjolnirWheelEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nimport {INPUT_EVENT_TYPES} from '../constants';\nimport {window, userAgent, passiveSupported} from '../utils/globals';\n\nconst firefox = userAgent.indexOf('firefox') !== -1;\n\nconst {WHEEL_EVENTS} = INPUT_EVENT_TYPES;\nconst EVENT_TYPE = 'wheel';\n\n// Constants for normalizing input delta\nconst WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;\nconst WHEEL_DELTA_PER_LINE = 40;\n// Slow down zoom if shift key is held for more precise zooming\nconst SHIFT_MULTIPLIER = 0.25;\n\nexport default class WheelInput extends Input {\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirWheelEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n this.events = (this.options.events || []).concat(WHEEL_EVENTS);\n\n this.events.forEach(event =>\n element.addEventListener(event, this.handleEvent, passiveSupported ? {passive: false} : false)\n );\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n\n /* eslint-disable complexity, max-statements */\n handleEvent = (event: WheelEvent) => {\n if (!this.options.enable) {\n return;\n }\n\n let value = event.deltaY;\n if (window.WheelEvent) {\n // Firefox doubles the values on retina screens...\n if (firefox && event.deltaMode === window.WheelEvent.DOM_DELTA_PIXEL) {\n value /= window.devicePixelRatio;\n }\n if (event.deltaMode === window.WheelEvent.DOM_DELTA_LINE) {\n value *= WHEEL_DELTA_PER_LINE;\n }\n }\n\n if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {\n // This one is definitely a mouse wheel event.\n // Normalize this value to match trackpad.\n value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);\n }\n\n if (event.shiftKey && value) {\n value = value * SHIFT_MULTIPLIER;\n }\n\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n delta: -value,\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n };\n}\n","import type {MjolnirPointerEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\nimport {INPUT_EVENT_TYPES} from '../constants';\n\nconst {MOUSE_EVENTS} = INPUT_EVENT_TYPES;\nconst MOVE_EVENT_TYPE = 'pointermove';\nconst OVER_EVENT_TYPE = 'pointerover';\nconst OUT_EVENT_TYPE = 'pointerout';\nconst ENTER_EVENT_TYPE = 'pointerenter';\nconst LEAVE_EVENT_TYPE = 'pointerleave';\n\n/**\n * Hammer.js swallows 'move' events (for pointer/touch/mouse)\n * when the pointer is not down. This class sets up a handler\n * specifically for these events to work around this limitation.\n * Note that this could be extended to more intelligently handle\n * move events across input types, e.g. storing multiple simultaneous\n * pointer/touch events, calculating speed/direction, etc.\n */\nexport default class MoveInput extends Input {\n pressed: boolean;\n enableMoveEvent: boolean;\n enableEnterEvent: boolean;\n enableLeaveEvent: boolean;\n enableOutEvent: boolean;\n enableOverEvent: boolean;\n\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirPointerEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n this.pressed = false;\n const {enable} = this.options;\n\n this.enableMoveEvent = enable;\n this.enableLeaveEvent = enable;\n this.enableEnterEvent = enable;\n this.enableOutEvent = enable;\n this.enableOverEvent = enable;\n\n this.events = (this.options.events || []).concat(MOUSE_EVENTS);\n\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === MOVE_EVENT_TYPE) {\n this.enableMoveEvent = enabled;\n }\n if (eventType === OVER_EVENT_TYPE) {\n this.enableOverEvent = enabled;\n }\n if (eventType === OUT_EVENT_TYPE) {\n this.enableOutEvent = enabled;\n }\n if (eventType === ENTER_EVENT_TYPE) {\n this.enableEnterEvent = enabled;\n }\n if (eventType === LEAVE_EVENT_TYPE) {\n this.enableLeaveEvent = enabled;\n }\n }\n\n handleEvent = (event: PointerEvent) => {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleEnterEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n };\n\n handleOverEvent(event: PointerEvent) {\n if (this.enableOverEvent) {\n if (event.type === 'mouseover') {\n this._emit(OVER_EVENT_TYPE, event);\n }\n }\n }\n\n handleOutEvent(event: PointerEvent) {\n if (this.enableOutEvent) {\n if (event.type === 'mouseout') {\n this._emit(OUT_EVENT_TYPE, event);\n }\n }\n }\n\n handleEnterEvent(event: PointerEvent) {\n if (this.enableEnterEvent) {\n if (event.type === 'mouseenter') {\n this._emit(ENTER_EVENT_TYPE, event);\n }\n }\n }\n\n handleLeaveEvent(event: PointerEvent) {\n if (this.enableLeaveEvent) {\n if (event.type === 'mouseleave') {\n this._emit(LEAVE_EVENT_TYPE, event);\n }\n }\n }\n\n handleMoveEvent(event: PointerEvent) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case 'mousedown':\n if (event.button >= 0) {\n // Button is down\n this.pressed = true;\n }\n break;\n case 'mousemove':\n // Move events use `which` to track the button being pressed\n if (event.which === 0) {\n // Button is not down\n this.pressed = false;\n }\n if (!this.pressed) {\n // Drag events are emitted by hammer already\n // we just need to emit the move event on hover\n this._emit(MOVE_EVENT_TYPE, event);\n }\n break;\n case 'mouseup':\n this.pressed = false;\n break;\n default:\n }\n }\n }\n\n _emit(\n type: 'pointermove' | 'pointerover' | 'pointerout' | 'pointerenter' | 'pointerleave',\n event: PointerEvent\n ) {\n this.callback({\n type,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n }\n}\n","import type {MjolnirKeyEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nimport {INPUT_EVENT_TYPES} from '../constants';\n\nconst {KEY_EVENTS} = INPUT_EVENT_TYPES;\nconst DOWN_EVENT_TYPE = 'keydown';\nconst UP_EVENT_TYPE = 'keyup';\n\ntype KeyInputOptions = InputOptions & {\n events?: string[];\n tabIndex?: number;\n};\n\nexport default class KeyInput extends Input {\n enableDownEvent: boolean;\n enableUpEvent: boolean;\n\n events: string[];\n\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirKeyEventRaw) => void,\n options: KeyInputOptions\n ) {\n super(element, callback, options);\n\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n\n this.events = (this.options.events || []).concat(KEY_EVENTS);\n\n element.tabIndex = this.options.tabIndex || 0;\n element.style.outline = 'none';\n this.events.forEach(event => element.addEventListener(event, this.handleEvent));\n }\n\n destroy() {\n this.events.forEach(event => this.element.removeEventListener(event, this.handleEvent));\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === DOWN_EVENT_TYPE) {\n this.enableDownEvent = enabled;\n }\n if (eventType === UP_EVENT_TYPE) {\n this.enableUpEvent = enabled;\n }\n }\n\n handleEvent = (event: KeyboardEvent) => {\n // Ignore if focused on text input\n const targetElement = (event.target || event.srcElement) as HTMLElement;\n if (\n (targetElement.tagName === 'INPUT' && (targetElement as HTMLInputElement).type === 'text') ||\n targetElement.tagName === 'TEXTAREA'\n ) {\n return;\n }\n\n if (this.enableDownEvent && event.type === 'keydown') {\n this.callback({\n type: DOWN_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target as HTMLElement\n });\n }\n\n if (this.enableUpEvent && event.type === 'keyup') {\n this.callback({\n type: UP_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target as HTMLElement\n });\n }\n };\n}\n","import type {MjolnirPointerEventRaw} from '../types';\nimport Input, {InputOptions} from './input';\n\nconst EVENT_TYPE = 'contextmenu';\n\nexport default class ContextmenuInput extends Input {\n constructor(\n element: HTMLElement,\n callback: (event: MjolnirPointerEventRaw) => void,\n options: InputOptions\n ) {\n super(element, callback, options);\n\n element.addEventListener('contextmenu', this.handleEvent);\n }\n\n destroy() {\n this.element.removeEventListener('contextmenu', this.handleEvent);\n }\n\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType: string, enabled: boolean) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n\n handleEvent = (event: MouseEvent) => {\n if (!this.options.enable) {\n return;\n }\n\n this.callback({\n type: EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target as HTMLElement\n });\n };\n}\n","import type {MjolnirEventRaw, HammerInput, Point} from '../types';\n\n/* Constants */\nconst DOWN_EVENT = 1;\nconst MOVE_EVENT = 2;\nconst UP_EVENT = 4;\nconst MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\n\n// MouseEvent.which https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\nconst MOUSE_EVENT_WHICH_LEFT = 1;\nconst MOUSE_EVENT_WHICH_MIDDLE = 2;\nconst MOUSE_EVENT_WHICH_RIGHT = 3;\n// MouseEvent.button https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\nconst MOUSE_EVENT_BUTTON_LEFT = 0;\nconst MOUSE_EVENT_BUTTON_MIDDLE = 1;\nconst MOUSE_EVENT_BUTTON_RIGHT = 2;\n// MouseEvent.buttons https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\nconst MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nconst MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nconst MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\n\n/**\n * Extract the involved mouse button\n */\nexport function whichButtons(event: MjolnirEventRaw): {\n leftButton: boolean;\n middleButton: boolean;\n rightButton: boolean;\n} {\n const eventType = MOUSE_EVENTS[event.srcEvent.type];\n if (!eventType) {\n // Not a mouse evet\n return null;\n }\n\n const {buttons, button, which} = event.srcEvent as PointerEvent;\n let leftButton = false;\n let middleButton = false;\n let rightButton = false;\n\n if (\n // button is up, need to find out which one was pressed before\n eventType === UP_EVENT ||\n // moving but does not support `buttons` API\n (eventType === MOVE_EVENT && !Number.isFinite(buttons))\n ) {\n leftButton = which === MOUSE_EVENT_WHICH_LEFT;\n middleButton = which === MOUSE_EVENT_WHICH_MIDDLE;\n rightButton = which === MOUSE_EVENT_WHICH_RIGHT;\n } else if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n } else if (eventType === DOWN_EVENT) {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n\n return {leftButton, middleButton, rightButton};\n}\n\n/**\n * Calculate event position relative to the root element\n */\nexport function getOffsetPosition(\n event: MjolnirEventRaw,\n rootElement: HTMLElement\n): {\n center: Point;\n offsetCenter: Point;\n} {\n const center = (event as HammerInput).center;\n\n // `center` is a hammer.js event property\n if (!center) {\n // Not a gestural event\n return null;\n }\n\n const rect = rootElement.getBoundingClientRect();\n\n // Fix scale for map affected by a CSS transform.\n // See https://stackoverflow.com/a/26893663/3528533\n const scaleX = rect.width / rootElement.offsetWidth || 1;\n const scaleY = rect.height / rootElement.offsetHeight || 1;\n\n // Calculate center relative to the root element\n const offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n\n return {center, offsetCenter};\n}\n","import type EventManager from '../event-manager';\nimport {whichButtons, getOffsetPosition} from './event-utils';\nimport type {MjolnirEventRaw, MjolnirEventWrapper, MjolnirEvent} from '../types';\n\nexport type HandlerOptions = {\n srcElement?: 'root' | HTMLElement;\n priority?: number;\n};\n\ntype EventHandler = {\n type: string;\n handler: (event: MjolnirEvent) => void;\n once?: boolean;\n passive?: boolean;\n} & HandlerOptions;\n\nconst DEFAULT_OPTIONS: HandlerOptions = {\n srcElement: 'root',\n priority: 0\n};\n\nexport default class EventRegistrar {\n eventManager: EventManager;\n recognizerName: string;\n handlers: EventHandler[];\n handlersByElement: Map<'root' | HTMLElement, EventHandler[]>;\n _active: boolean;\n\n constructor(eventManager: EventManager) {\n this.eventManager = eventManager;\n this.handlers = [];\n // Element -> handler map\n this.handlersByElement = new Map();\n\n this._active = false;\n }\n\n // Returns true if there are no non-passive handlers\n isEmpty(): boolean {\n return !this._active;\n }\n\n add(\n type: string,\n handler: (event: MjolnirEvent) => void,\n options: HTMLElement | HandlerOptions,\n once: boolean = false,\n passive: boolean = false\n ) {\n const {handlers, handlersByElement} = this;\n let opts: HandlerOptions = DEFAULT_OPTIONS;\n\n if (typeof options === 'string' || (options && (options as HTMLElement).addEventListener)) {\n // is DOM element, backward compatibility\n // @ts-ignore\n opts = {...DEFAULT_OPTIONS, srcElement: options};\n } else if (options) {\n opts = {...DEFAULT_OPTIONS, ...options};\n }\n\n let entries = handlersByElement.get(opts.srcElement);\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n const entry: EventHandler = {\n type,\n handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n if (once) {\n entry.once = true;\n }\n if (passive) {\n entry.passive = true;\n }\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n\n // Sort handlers by descending priority\n // Handlers with the same priority are excuted in the order of registration\n let insertPosition = entries.length - 1;\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n insertPosition--;\n }\n entries.splice(insertPosition + 1, 0, entry);\n }\n\n remove(type: string, handler: (event: MjolnirEvent) => void) {\n const {handlers, handlersByElement} = this;\n\n for (let i = handlers.length - 1; i >= 0; i--) {\n const entry = handlers[i];\n\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n const entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n this._active = handlers.some(entry => !entry.passive);\n }\n\n /**\n * Handles hammerjs event\n */\n handleEvent = (event: MjolnirEventRaw) => {\n if (this.isEmpty()) {\n return;\n }\n\n const mjolnirEvent = this._normalizeEvent(event);\n let target = event.srcEvent.target as HTMLElement;\n\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n if (mjolnirEvent.handled) {\n return;\n }\n target = target.parentNode as HTMLElement;\n }\n this._emit(mjolnirEvent, 'root');\n };\n\n /**\n * Invoke handlers on a particular element\n */\n _emit(\n event: MjolnirEventWrapper,\n srcElement: 'root' | HTMLElement\n ) {\n const entries = this.handlersByElement.get(srcElement);\n\n if (entries) {\n let immediatePropagationStopped = false;\n\n // Prevents the current event from bubbling up\n const stopPropagation = () => {\n event.handled = true;\n };\n // Prevent any remaining listeners from being called\n const stopImmediatePropagation = () => {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n const entriesToRemove: EventHandler[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n const {type, handler, once} = entries[i];\n handler({\n ...event,\n // @ts-ignore\n type,\n stopPropagation,\n stopImmediatePropagation\n });\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n if (immediatePropagationStopped) {\n break;\n }\n }\n\n for (let i = 0; i < entriesToRemove.length; i++) {\n const {type, handler} = entriesToRemove[i];\n this.remove(type, handler);\n }\n }\n }\n\n /**\n * Normalizes hammerjs and custom events to have predictable fields.\n */\n _normalizeEvent(event: T): MjolnirEventWrapper {\n const rootElement = this.eventManager.getElement();\n\n return {\n ...event,\n ...whichButtons(event),\n ...getOffsetPosition(event, rootElement),\n preventDefault: () => {\n event.srcEvent.preventDefault();\n },\n stopImmediatePropagation: null,\n stopPropagation: null,\n handled: false,\n rootElement\n };\n }\n}\n","import {Manager} from './utils/hammer';\nimport type {\n HammerManager,\n HammerManagerConstructor,\n MjolnirEventRaw,\n MjolnirEvent,\n RecognizerOptions,\n RecognizerTuple,\n MjolnirEventHandlers\n} from './types';\n\nimport WheelInput from './inputs/wheel-input';\nimport MoveInput from './inputs/move-input';\nimport KeyInput from './inputs/key-input';\nimport ContextmenuInput from './inputs/contextmenu-input';\n\nimport EventRegistrar, {HandlerOptions} from './utils/event-registrar';\n\nimport {\n BASIC_EVENT_ALIASES,\n EVENT_RECOGNIZER_MAP,\n GESTURE_EVENT_ALIASES,\n RECOGNIZERS,\n RECOGNIZER_COMPATIBLE_MAP,\n RECOGNIZER_FALLBACK_MAP\n} from './constants';\n\nexport type EventManagerOptions = {\n events?: MjolnirEventHandlers;\n recognizers?: RecognizerTuple[];\n recognizerOptions?: {[type: string]: RecognizerOptions};\n Manager?: HammerManagerConstructor;\n touchAction?: string;\n tabIndex?: number;\n};\n\nconst DEFAULT_OPTIONS: EventManagerOptions = {\n // event handlers\n events: null,\n // custom recognizers\n recognizers: null,\n recognizerOptions: {},\n // Manager class\n Manager,\n // allow browser default touch action\n // https://github.com/uber/react-map-gl/issues/506\n touchAction: 'none',\n tabIndex: 0\n};\n\n// Unified API for subscribing to events about both\n// basic input events (e.g. 'mousemove', 'touchstart', 'wheel')\n// and gestural input (e.g. 'click', 'tap', 'panstart').\n// Delegates gesture related event registration and handling to Hammer.js.\nexport default class EventManager {\n private manager: HammerManager;\n private element: HTMLElement;\n private options: EventManagerOptions;\n private events: Map;\n\n // Custom handlers\n private wheelInput: WheelInput;\n private moveInput: MoveInput;\n private contextmenuInput: ContextmenuInput;\n private keyInput: KeyInput;\n\n constructor(element: HTMLElement = null, options: EventManagerOptions) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n this.events = new Map();\n\n this.setElement(element);\n\n // Register all passed events.\n const {events} = this.options;\n if (events) {\n this.on(events);\n }\n }\n\n getElement(): HTMLElement {\n return this.element;\n }\n\n setElement(element: HTMLElement): void {\n if (this.element) {\n // unregister all events\n this.destroy();\n }\n this.element = element;\n if (!element) {\n return;\n }\n\n const {options} = this;\n const ManagerClass = options.Manager;\n\n this.manager = new ManagerClass(element, {\n touchAction: options.touchAction,\n recognizers: options.recognizers || RECOGNIZERS\n }).on('hammer.input', this._onBasicInput);\n\n if (!options.recognizers) {\n // Set default recognize withs\n // http://hammerjs.github.io/recognize-with/\n Object.keys(RECOGNIZER_COMPATIBLE_MAP).forEach(name => {\n const recognizer = this.manager.get(name);\n if (recognizer) {\n RECOGNIZER_COMPATIBLE_MAP[name].forEach(otherName => {\n recognizer.recognizeWith(otherName);\n });\n }\n });\n }\n\n // Set recognizer options\n for (const recognizerName in options.recognizerOptions) {\n const recognizer = this.manager.get(recognizerName);\n if (recognizer) {\n const recognizerOption = options.recognizerOptions[recognizerName];\n // `enable` is managed by the event registrations\n delete recognizerOption.enable;\n recognizer.set(recognizerOption);\n }\n }\n\n // Handle events not handled by Hammer.js:\n // - mouse wheel\n // - pointer/touch/mouse move\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n\n // Register all existing events\n for (const [eventAlias, eventRegistrar] of this.events) {\n if (!eventRegistrar.isEmpty()) {\n // Enable recognizer for this event.\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n this.manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n }\n\n // Tear down internal event management implementations.\n destroy(): void {\n if (this.element) {\n // wheelInput etc. are created in setElement() and therefore\n // cannot exist if there is no element\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n\n this.wheelInput = null;\n this.moveInput = null;\n this.keyInput = null;\n this.contextmenuInput = null;\n this.manager = null;\n this.element = null;\n }\n }\n\n /** Register multiple event handlers */\n on(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n on(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n /** Register an event handler function to be called on `event` */\n on(event, handler, opts?: any) {\n this._addEventHandler(event, handler, opts, false);\n }\n\n /** Register an event handler function to be called on `event`, then remove it */\n once(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n once(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n once(event: any, handler: any, opts?: any) {\n this._addEventHandler(event, handler, opts, true);\n }\n\n /** Register an event handler function to be called on `event`\n * This handler does not ask the event to be recognized at all times.\n * Instead, it only \"intercepts\" the event if some other handler is getting it.\n */\n watch(events: MjolnirEventHandlers, opts?: HandlerOptions): void;\n watch(\n event: EventT['type'],\n handler: (event: EventT) => void,\n opts?: HandlerOptions\n ): void;\n\n watch(event: any, handler: any, opts?: any) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n\n /**\n * Deregister a previously-registered event handler.\n */\n off(events: MjolnirEventHandlers): void;\n off(event: EventT['type'], handler: (event: EventT) => void): void;\n\n off(event: any, handler?: any) {\n this._removeEventHandler(event, handler);\n }\n\n /*\n * Enable/disable recognizer for the given event\n */\n private _toggleRecognizer(name: string, enabled: boolean): void {\n const {manager} = this;\n if (!manager) {\n return;\n }\n const recognizer = manager.get(name);\n // @ts-ignore\n if (recognizer && recognizer.options.enable !== enabled) {\n recognizer.set({enable: enabled});\n\n const fallbackRecognizers: string[] = RECOGNIZER_FALLBACK_MAP[name];\n if (fallbackRecognizers && !this.options.recognizers) {\n // Set default require failures\n // http://hammerjs.github.io/require-failure/\n fallbackRecognizers.forEach(otherName => {\n const otherRecognizer = manager.get(otherName);\n if (enabled) {\n // Wait for this recognizer to fail\n otherRecognizer.requireFailure(name);\n /**\n * This seems to be a bug in hammerjs:\n * requireFailure() adds both ways\n * dropRequireFailure() only drops one way\n * https://github.com/hammerjs/hammer.js/blob/master/src/recognizerjs/\n recognizer-constructor.js#L136\n */\n recognizer.dropRequireFailure(otherName);\n } else {\n // Do not wait for this recognizer to fail\n otherRecognizer.dropRequireFailure(name);\n }\n });\n }\n }\n this.wheelInput.enableEventType(name, enabled);\n this.moveInput.enableEventType(name, enabled);\n this.keyInput.enableEventType(name, enabled);\n this.contextmenuInput.enableEventType(name, enabled);\n }\n\n /**\n * Process the event registration for a single event + handler.\n */\n private _addEventHandler(\n event: string | MjolnirEventHandlers,\n handler: (event: MjolnirEvent) => void,\n opts?: HandlerOptions,\n once?: boolean,\n passive?: boolean\n ) {\n if (typeof event !== 'string') {\n // @ts-ignore\n opts = handler;\n // If `event` is a map, call `on()` for each entry.\n for (const eventName in event) {\n this._addEventHandler(eventName, event[eventName], opts, once, passive);\n }\n return;\n }\n\n const {manager, events} = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias: string = GESTURE_EVENT_ALIASES[event] || event;\n\n let eventRegistrar = events.get(eventAlias);\n if (!eventRegistrar) {\n eventRegistrar = new EventRegistrar(this);\n events.set(eventAlias, eventRegistrar);\n // Enable recognizer for this event.\n eventRegistrar.recognizerName = EVENT_RECOGNIZER_MAP[eventAlias] || eventAlias;\n // Listen to the event\n if (manager) {\n manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n eventRegistrar.add(event, handler, opts, once, passive);\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n\n /**\n * Process the event deregistration for a single event + handler.\n */\n private _removeEventHandler(\n event: string | MjolnirEventHandlers,\n handler?: (event: MjolnirEvent) => void\n ) {\n if (typeof event !== 'string') {\n // If `event` is a map, call `off()` for each entry.\n for (const eventName in event) {\n this._removeEventHandler(eventName, event[eventName]);\n }\n return;\n }\n\n const {events} = this;\n // Alias to a recognized gesture as necessary.\n const eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n\n const eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n return;\n }\n\n eventRegistrar.remove(event, handler);\n\n if (eventRegistrar.isEmpty()) {\n const {recognizerName} = eventRegistrar;\n // Disable recognizer if no more handlers are attached to its events\n let isRecognizerUsed = false;\n for (const eh of events.values()) {\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n\n /**\n * Handle basic events using the 'hammer.input' Hammer.js API:\n * Before running Recognizers, Hammer emits a 'hammer.input' event\n * with the basic event info. This function emits all basic events\n * aliased to the \"class\" of event received.\n * See constants.BASIC_EVENT_CLASSES basic event class definitions.\n */\n private _onBasicInput = (event: MjolnirEventRaw) => {\n const {srcEvent} = event;\n const alias = BASIC_EVENT_ALIASES[srcEvent.type];\n if (alias) {\n // fire all events aliased to srcEvent.type\n this.manager.emit(alias, event);\n }\n };\n\n /**\n * Handle events not supported by Hammer.js,\n * and pipe back out through same (Hammer) channel used by other events.\n */\n private _onOtherEvent = (event: MjolnirEventRaw) => {\n // console.log('onotherevent', event.type, event)\n this.manager.emit(event.type, event);\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport LayerManager from './layer-manager';\nimport ViewManager from './view-manager';\nimport MapView from '../views/map-view';\nimport EffectManager from './effect-manager';\nimport DeckRenderer from './deck-renderer';\nimport DeckPicker from './deck-picker';\nimport Tooltip from './tooltip';\nimport log from '../utils/log';\nimport {deepEqual} from '../utils/deep-equal';\nimport typedArrayManager from '../utils/typed-array-manager';\nimport deckGlobal from './init';\n\nimport {getBrowser} from '@probe.gl/env';\nimport GL from '@luma.gl/constants';\nimport {\n AnimationLoop,\n createGLContext,\n instrumentGLContext,\n setParameters,\n Timeline,\n lumaStats\n} from '@luma.gl/core';\nimport {Stats} from '@probe.gl/stats';\nimport {EventManager} from 'mjolnir.js';\n\nimport assert from '../utils/assert';\nimport {EVENTS} from './constants';\n\nimport type {Effect} from './effect';\nimport type {FilterContext} from '../passes/layers-pass';\nimport type Layer from './layer';\nimport type View from '../views/view';\nimport type Viewport from '../viewports/viewport';\nimport type {RecognizerOptions, MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\nimport type {Framebuffer} from '@luma.gl/core';\nimport type {TypedArrayManagerOptions} from '../utils/typed-array-manager';\nimport type {ViewStateChangeParameters, InteractionState} from '../controllers/controller';\nimport type {PickingInfo} from './picking/pick-info';\nimport type {PickByPointOptions, PickByRectOptions} from './deck-picker';\nimport type {LayersList} from './layer-manager';\nimport type {TooltipContent} from './tooltip';\n\n/* global document */\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nconst getCursor = ({isDragging}) => (isDragging ? 'grabbing' : 'grab');\n\nexport type DeckMetrics = {\n fps: number;\n setPropsTime: number;\n updateAttributesTime: number;\n framesRedrawn: number;\n pickTime: number;\n pickCount: number;\n gpuTime: number;\n gpuTimePerFrame: number;\n cpuTime: number;\n cpuTimePerFrame: number;\n bufferMemory: number;\n textureMemory: number;\n renderbufferMemory: number;\n gpuMemory: number;\n};\n\ntype CursorState = {\n /** Whether the cursor is over a pickable object */\n isHovering: boolean;\n /** Whether the cursor is down */\n isDragging: boolean;\n};\n\nexport type DeckProps = {\n /** Id of this Deck instance */\n id?: string;\n /** Width of the canvas, a number in pixels or a valid CSS string.\n * @default `'100%'`\n */\n width?: string | number | null;\n /** Height of the canvas, a number in pixels or a valid CSS string.\n * @default `'100%'`\n */\n height?: string | number | null;\n /** Additional CSS styles for the canvas. */\n style?: Partial | null;\n\n /** Controls the resolution of drawing buffer used for rendering.\n * @default `true` (use browser devicePixelRatio)\n */\n useDevicePixels?: boolean | number;\n /** Extra pixels around the pointer to include while picking.\n * @default `0`\n */\n pickingRadius?: number;\n\n /** WebGL parameters to be set before each frame is rendered.\n * @see https://github.com/visgl/luma.gl/blob/8.5-release/modules/gltools/docs/api-reference/parameter-setting.md#parameters\n */\n parameters?: any;\n /** If supplied, will be called before a layer is drawn to determine whether it should be rendered. */\n layerFilter?: ((context: FilterContext) => boolean) | null;\n\n /** The container to append the auto-created canvas to.\n * @default `document.body`\n */\n parent?: HTMLDivElement | null;\n /** The canvas to render into.\n * Can be either a HTMLCanvasElement or the element id.\n * Will be auto-created if not supplied.\n */\n canvas?: HTMLCanvasElement | string | null;\n /** WebGL context. Will be auto-created if not supplied. */\n gl?: WebGLRenderingContext | null;\n /** Additional options used when creating the WebGL context. */\n glOptions?: WebGLContextAttributes;\n\n /**\n * The array of Layer instances to be rendered.\n * Nested arrays are accepted, as well as falsy values (`null`, `false`, `undefined`)\n */\n layers?: LayersList;\n /** The array of effects to be rendered. A lighting effect will be added if an empty array is supplied. */\n effects?: Effect[];\n /** A single View instance, or an array of `View` instances.\n * @default `new MapView()`\n */\n views?: View | View[] | null;\n /** Options for viewport interactivity, e.g. pan, rotate and zoom with mouse, touch and keyboard.\n * This is a shorthand for defining interaction with the `views` prop if you are using the default view (i.e. a single `MapView`)\n */\n controller?: View['props']['controller'];\n /**\n * An object that describes the view state for each view in the `views` prop.\n * Use if the camera state should be managed external to the `Deck` instance.\n */\n viewState?: any;\n /**\n * If provided, the `Deck` instance will track camera state changes automatically,\n * with `initialViewState` as its initial settings.\n */\n initialViewState?: any;\n\n /** Allow browser default touch actions.\n * @default `'none'`\n */\n touchAction?: string;\n /** Set Hammer.js recognizer options for gesture recognition. See documentation for details. */\n eventRecognizerOptions?: {\n [type: string]: RecognizerOptions;\n };\n\n /** (Experimental) Render to a custom frame buffer other than to screen. */\n _framebuffer?: Framebuffer | null;\n /** (Experimental) Forces deck.gl to redraw layers every animation frame. */\n _animate?: boolean;\n /** (Experimental) If set to `false`, force disables all picking features, disregarding the `pickable` prop set in any layer. */\n _pickable?: boolean;\n /** (Experimental) Fine-tune attribute memory usage. See documentation for details. */\n _typedArrayManagerProps?: TypedArrayManagerOptions;\n\n /** Called once the WebGL context has been initiated. */\n onWebGLInitialized?: (gl: WebGLRenderingContext) => void;\n /** Called when the canvas resizes. */\n onResize?: (dimensions: {width: number; height: number}) => void;\n /** Called when the user has interacted with the deck.gl canvas, e.g. using mouse, touch or keyboard. */\n onViewStateChange?: (params: ViewStateChangeParameters & {viewId: string}) => any;\n /** Called when the user has interacted with the deck.gl canvas, e.g. using mouse, touch or keyboard. */\n onInteractionStateChange?: (state: InteractionState) => void;\n /** Called just before the canvas rerenders. */\n onBeforeRender?: (context: {gl: WebGLRenderingContext}) => void;\n /** Called right after the canvas rerenders. */\n onAfterRender?: (context: {gl: WebGLRenderingContext}) => void;\n /** Called once after gl context and all Deck components are created. */\n onLoad?: () => void;\n /** Called if deck.gl encounters an error.\n * If this callback is set to `null`, errors are silently ignored.\n * @default `console.error`\n */\n onError?: ((error: Error, layer?: Layer) => void) | null;\n /** Called when the pointer moves over the canvas. */\n onHover?: ((info: PickingInfo, event: MjolnirPointerEvent) => void) | null;\n /** Called when clicking on the canvas. */\n onClick?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when the user starts dragging on the canvas. */\n onDragStart?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when dragging the canvas. */\n onDrag?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n /** Called when the user releases from dragging the canvas. */\n onDragEnd?: ((info: PickingInfo, event: MjolnirGestureEvent) => void) | null;\n\n /** (Experimental) Replace the default redraw procedure */\n _customRender?: ((reason: string) => void) | null;\n /** (Experimental) Called once every second with performance metrics. */\n _onMetrics?: ((metrics: DeckMetrics) => void) | null;\n\n /** A custom callback to retrieve the cursor type. */\n getCursor?: (state: CursorState) => string;\n /** Callback that takes a hovered-over point and renders a tooltip. */\n getTooltip?: ((info: PickingInfo) => TooltipContent) | null;\n\n /** (Debug) Flag to enable WebGL debug mode. Requires importing `@luma.gl/debug`. */\n debug?: boolean;\n /** (Debug) Render the picking buffer to screen. */\n drawPickingColors?: boolean;\n};\n\nconst defaultProps = {\n id: '',\n width: '100%',\n height: '100%',\n style: null,\n viewState: null,\n initialViewState: null,\n pickingRadius: 0,\n layerFilter: null,\n glOptions: {},\n parameters: {},\n parent: null,\n gl: null,\n canvas: null,\n layers: [],\n effects: [],\n views: null,\n controller: null, // Rely on external controller, e.g. react-map-gl\n useDevicePixels: true,\n touchAction: 'none',\n eventRecognizerOptions: {},\n _framebuffer: null,\n _animate: false,\n _pickable: true,\n _typedArrayManagerProps: {},\n _customRender: null,\n\n onWebGLInitialized: noop,\n onResize: noop,\n onViewStateChange: noop,\n onInteractionStateChange: noop,\n onBeforeRender: noop,\n onAfterRender: noop,\n onLoad: noop,\n onError: (error: Error) => log.error(error.message)(),\n onHover: null,\n onClick: null,\n onDragStart: null,\n onDrag: null,\n onDragEnd: null,\n _onMetrics: null,\n\n getCursor,\n getTooltip: null,\n\n debug: false,\n drawPickingColors: false\n};\n\n/* eslint-disable max-statements */\nexport default class Deck {\n static defaultProps = defaultProps;\n // This is used to defeat tree shaking of init.js\n // https://github.com/visgl/deck.gl/issues/3213\n static VERSION = deckGlobal.VERSION;\n\n readonly props: Required;\n readonly width: number = 0;\n readonly height: number = 0;\n // Allows attaching arbitrary data to the instance\n readonly userData: Record = {};\n\n protected canvas: HTMLCanvasElement | null = null;\n protected viewManager: ViewManager | null = null;\n protected layerManager: LayerManager | null = null;\n protected effectManager: EffectManager | null = null;\n protected deckRenderer: DeckRenderer | null = null;\n protected deckPicker: DeckPicker | null = null;\n protected eventManager: EventManager | null = null;\n protected tooltip: Tooltip | null = null;\n protected metrics: DeckMetrics;\n protected animationLoop: AnimationLoop;\n protected stats: Stats;\n\n /** Internal view state if no callback is supplied */\n protected viewState: any;\n protected cursorState: CursorState;\n\n private _needsRedraw: false | string;\n private _pickRequest: {\n mode: string;\n event: MjolnirPointerEvent | null;\n x: number;\n y: number;\n radius: number;\n };\n /**\n * Pick and store the object under the pointer on `pointerdown`.\n * This object is reused for subsequent `onClick` and `onDrag*` callbacks.\n */\n private _lastPointerDownInfo: PickingInfo | null = null;\n private _metricsCounter: number;\n\n constructor(props: DeckProps) {\n this.props = {...defaultProps, ...props};\n props = this.props;\n\n this._needsRedraw = 'Initial render';\n this._pickRequest = {\n mode: 'hover',\n x: -1,\n y: -1,\n radius: 0,\n event: null\n };\n\n this.cursorState = {\n isHovering: false,\n isDragging: false\n };\n\n if (props.viewState && props.initialViewState) {\n log.warn(\n 'View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.'\n )();\n }\n if (getBrowser() === 'IE') {\n log.warn('IE 11 is not supported')();\n }\n this.viewState = props.initialViewState;\n\n if (!props.gl) {\n // Note: LayerManager creation deferred until gl context available\n if (typeof document !== 'undefined') {\n this.canvas = this._createCanvas(props);\n }\n }\n this.animationLoop = this._createAnimationLoop(props);\n\n this.stats = new Stats({id: 'deck.gl'});\n this.metrics = {\n fps: 0,\n setPropsTime: 0,\n updateAttributesTime: 0,\n framesRedrawn: 0,\n pickTime: 0,\n pickCount: 0,\n gpuTime: 0,\n gpuTimePerFrame: 0,\n cpuTime: 0,\n cpuTimePerFrame: 0,\n bufferMemory: 0,\n textureMemory: 0,\n renderbufferMemory: 0,\n gpuMemory: 0\n };\n this._metricsCounter = 0;\n\n this.setProps(props);\n\n // UNSAFE/experimental prop: only set at initialization to avoid performance hit\n if (props._typedArrayManagerProps) {\n typedArrayManager.setOptions(props._typedArrayManagerProps);\n }\n\n this.animationLoop.start();\n }\n\n /** Stop rendering and dispose all resources */\n finalize() {\n this.animationLoop.stop();\n this.animationLoop = null;\n this._lastPointerDownInfo = null;\n\n this.layerManager?.finalize();\n this.layerManager = null;\n\n this.viewManager?.finalize();\n this.viewManager = null;\n\n this.effectManager?.finalize();\n this.effectManager = null;\n\n this.deckRenderer?.finalize();\n this.deckRenderer = null;\n\n this.deckPicker?.finalize();\n this.deckPicker = null;\n\n this.eventManager?.destroy();\n this.eventManager = null;\n\n this.tooltip?.remove();\n this.tooltip = null;\n\n if (!this.props.canvas && !this.props.gl && this.canvas) {\n // remove internally created canvas\n this.canvas.parentElement?.removeChild(this.canvas);\n this.canvas = null;\n }\n }\n\n /** Partially update props */\n setProps(props: DeckProps): void {\n this.stats.get('setProps Time').timeStart();\n\n if ('onLayerHover' in props) {\n log.removed('onLayerHover', 'onHover')();\n }\n if ('onLayerClick' in props) {\n log.removed('onLayerClick', 'onClick')();\n }\n if (props.initialViewState && !deepEqual(this.props.initialViewState, props.initialViewState)) {\n // Overwrite internal view state\n this.viewState = props.initialViewState;\n }\n\n // Merge with existing props\n Object.assign(this.props, props);\n\n // Update CSS size of canvas\n this._setCanvasSize(this.props);\n\n // We need to overwrite CSS style width and height with actual, numeric values\n const resolvedProps: Required & {\n width: number;\n height: number;\n views: View[];\n viewState: Record;\n } = Object.create(this.props);\n Object.assign(resolvedProps, {\n views: this._getViews(),\n width: this.width,\n height: this.height,\n viewState: this._getViewState()\n });\n\n // Update the animation loop\n this.animationLoop.setProps(resolvedProps);\n\n // If initialized, update sub manager props\n if (this.layerManager) {\n this.viewManager!.setProps(resolvedProps);\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager.activateViewport(this.getViewports()[0]);\n this.layerManager.setProps(resolvedProps);\n this.effectManager!.setProps(resolvedProps);\n this.deckRenderer!.setProps(resolvedProps);\n this.deckPicker!.setProps(resolvedProps);\n }\n\n this.stats.get('setProps Time').timeEnd();\n }\n\n // Public API\n\n /**\n * Check if a redraw is needed\n * @returns `false` or a string summarizing the redraw reason\n */\n needsRedraw(\n opts: {\n /** Reset the redraw flag afterwards. Default `true` */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): false | string {\n if (!this.layerManager) {\n // Not initialized or already finalized\n return false;\n }\n if (this.props._animate) {\n return 'Deck._animate';\n }\n\n let redraw: false | string = this._needsRedraw;\n\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n\n const viewManagerNeedsRedraw = this.viewManager!.needsRedraw(opts);\n const layerManagerNeedsRedraw = this.layerManager.needsRedraw(opts);\n const effectManagerNeedsRedraw = this.effectManager!.needsRedraw(opts);\n const deckRendererNeedsRedraw = this.deckRenderer!.needsRedraw(opts);\n\n redraw =\n redraw ||\n viewManagerNeedsRedraw ||\n layerManagerNeedsRedraw ||\n effectManagerNeedsRedraw ||\n deckRendererNeedsRedraw;\n return redraw;\n }\n\n /**\n * Redraw the GL context\n * @param reason If not provided, only redraw if deemed necessary. Otherwise redraw regardless of internal states.\n * @returns\n */\n redraw(reason?: string): void {\n if (!this.layerManager) {\n // Not yet initialized\n return;\n }\n // Check if we need to redraw\n let redrawReason = this.needsRedraw({clearRedrawFlags: true});\n // User-supplied should take precedent, however the redraw flags get cleared regardless\n redrawReason = reason || redrawReason;\n\n if (!redrawReason) {\n return;\n }\n\n this.stats.get('Redraw Count').incrementCount();\n if (this.props._customRender) {\n this.props._customRender(redrawReason);\n } else {\n this._drawLayers(redrawReason);\n }\n }\n\n /** Flag indicating that the Deck instance has initialized its resources and it's safe to call public methods. */\n get isInitialized(): boolean {\n return this.viewManager !== null;\n }\n\n /** Get a list of views that are currently rendered */\n getViews(): View[] {\n assert(this.viewManager);\n return this.viewManager.views;\n }\n\n /** Get a list of viewports that are currently rendered.\n * @param rect If provided, only returns viewports within the given bounding box.\n */\n getViewports(rect?: {x: number; y: number; width?: number; height?: number}): Viewport[] {\n assert(this.viewManager);\n return this.viewManager.getViewports(rect);\n }\n\n /** Query the object rendered on top at a given point */\n pickObject(opts: {\n /** x position in pixels */\n x: number;\n /** y position in pixels */\n y: number;\n /** Radius of tolerance in pixels. Default `0`. */\n radius?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If `true`, `info.coordinate` will be a 3D point by unprojecting the `x, y` screen coordinates onto the picked geometry. Default `false`. */\n unproject3D?: boolean;\n }): PickingInfo | null {\n const infos = this._pick('pickObject', 'pickObject Time', opts).result;\n return infos.length ? infos[0] : null;\n }\n\n /* Query all rendered objects at a given point */\n pickMultipleObjects(opts: {\n /** x position in pixels */\n x: number;\n /** y position in pixels */\n y: number;\n /** Radius of tolerance in pixels. Default `0`. */\n radius?: number;\n /** Specifies the max number of objects to return. Default `10`. */\n depth?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If `true`, `info.coordinate` will be a 3D point by unprojecting the `x, y` screen coordinates onto the picked geometry. Default `false`. */\n unproject3D?: boolean;\n }): PickingInfo[] {\n opts.depth = opts.depth || 10;\n return this._pick('pickObject', 'pickMultipleObjects Time', opts).result;\n }\n\n /* Query all objects rendered on top within a bounding box */\n pickObjects(opts: {\n /** Left of the bounding box in pixels */\n x: number;\n /** Top of the bounding box in pixels */\n y: number;\n /** Width of the bounding box in pixels. Default `1` */\n width?: number;\n /** Height of the bounding box in pixels. Default `1` */\n height?: number;\n /** A list of layer ids to query from. If not specified, then all pickable and visible layers are queried. */\n layerIds?: string[];\n /** If specified, limits the number of objects that can be returned. */\n maxObjects?: number | null;\n }): PickingInfo[] {\n return this._pick('pickObjects', 'pickObjects Time', opts);\n }\n\n /** Experimental\n * Add a global resource for sharing among layers\n */\n _addResources(\n resources: {\n [id: string]: any;\n },\n forceUpdate = false\n ) {\n for (const id in resources) {\n this.layerManager!.resourceManager.add({resourceId: id, data: resources[id], forceUpdate});\n }\n }\n\n /** Experimental\n * Remove a global resource\n */\n _removeResources(resourceIds: string[]) {\n for (const id of resourceIds) {\n this.layerManager!.resourceManager.remove(id);\n }\n }\n\n // Private Methods\n\n private _pick(\n method: 'pickObject',\n statKey: string,\n opts: PickByPointOptions & {layerIds?: string[]}\n ): {\n result: PickingInfo[];\n emptyInfo: PickingInfo;\n };\n private _pick(\n method: 'pickObjects',\n statKey: string,\n opts: PickByRectOptions & {layerIds?: string[]}\n ): PickingInfo[];\n\n private _pick(\n method: 'pickObject' | 'pickObjects',\n statKey: string,\n opts: (PickByPointOptions | PickByRectOptions) & {layerIds?: string[]}\n ) {\n assert(this.deckPicker);\n\n const {stats} = this;\n\n stats.get('Pick Count').incrementCount();\n stats.get(statKey).timeStart();\n\n const infos = this.deckPicker[method]({\n // layerManager, viewManager and effectManager are always defined if deckPicker is\n layers: this.layerManager!.getLayers(opts),\n views: this.viewManager!.getViews(),\n viewports: this.getViewports(opts),\n onViewportActive: this.layerManager!.activateViewport,\n effects: this.effectManager!.getEffects(),\n ...opts\n });\n\n stats.get(statKey).timeEnd();\n\n return infos;\n }\n\n /** Resolve props.canvas to element */\n private _createCanvas(props: DeckProps): HTMLCanvasElement {\n let canvas = props.canvas;\n\n // TODO EventManager should accept element id\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas) as HTMLCanvasElement;\n assert(canvas);\n }\n\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = props.id || 'deckgl-overlay';\n const parent = props.parent || document.body;\n parent.appendChild(canvas);\n }\n\n Object.assign(canvas.style, props.style);\n\n return canvas;\n }\n\n /** Updates canvas width and/or height, if provided as props */\n private _setCanvasSize(props: Required): void {\n if (!this.canvas) {\n return;\n }\n\n const {width, height} = props;\n // Set size ONLY if props are being provided, otherwise let canvas be layouted freely\n if (width || width === 0) {\n const cssWidth = Number.isFinite(width) ? `${width}px` : (width as string);\n this.canvas.style.width = cssWidth;\n }\n if (height || height === 0) {\n const cssHeight = Number.isFinite(height) ? `${height}px` : (height as string);\n // Note: position==='absolute' required for height 100% to work\n this.canvas.style.position = props.style?.position || 'absolute';\n this.canvas.style.height = cssHeight;\n }\n }\n\n /** If canvas size has changed, reads out the new size and update */\n private _updateCanvasSize(): void {\n const {canvas} = this;\n if (!canvas) {\n return;\n }\n // Fallback to width/height when clientWidth/clientHeight are 0 or undefined.\n const newWidth = canvas.clientWidth || canvas.width;\n const newHeight = canvas.clientHeight || canvas.height;\n if (newWidth !== this.width || newHeight !== this.height) {\n // @ts-expect-error private assign to read-only property\n this.width = newWidth;\n // @ts-expect-error private assign to read-only property\n this.height = newHeight;\n this.viewManager?.setProps({width: newWidth, height: newHeight});\n this.props.onResize({width: newWidth, height: newHeight});\n }\n }\n\n private _createAnimationLoop(props: DeckProps): AnimationLoop {\n const {\n width,\n height,\n gl,\n glOptions,\n debug,\n onError,\n onBeforeRender,\n onAfterRender,\n useDevicePixels\n } = props;\n\n return new AnimationLoop({\n width,\n height,\n useDevicePixels,\n autoResizeViewport: false,\n gl,\n onCreateContext: opts =>\n createGLContext({\n ...glOptions,\n ...opts,\n canvas: this.canvas,\n debug,\n onContextLost: () => this._onContextLost()\n }),\n onInitialize: context => this._setGLContext(context.gl),\n onRender: this._onRenderFrame.bind(this),\n onBeforeRender,\n onAfterRender,\n onError\n });\n }\n\n // Get the most relevant view state: props.viewState, if supplied, shadows internal viewState\n // TODO: For backwards compatibility ensure numeric width and height is added to the viewState\n private _getViewState(): Record {\n return this.props.viewState || this.viewState;\n }\n\n // Get the view descriptor list\n private _getViews(): View[] {\n // Default to a full screen map view port\n let views = this.props.views || [new MapView({id: 'default-view'})];\n views = Array.isArray(views) ? views : [views];\n if (views.length && this.props.controller) {\n // Backward compatibility: support controller prop\n views[0].props.controller = this.props.controller;\n }\n return views;\n }\n\n private _onContextLost() {\n const {onError} = this.props;\n if (this.animationLoop && onError) {\n onError(new Error('WebGL context is lost'));\n }\n }\n\n // The `pointermove` event may fire multiple times in between two animation frames,\n // it's a waste of time to run picking without rerender. Instead we save the last pick\n // request and only do it once on the next animation frame.\n /** Internal use only: event handler for pointerdown */\n _onPointerMove = (event: MjolnirPointerEvent) => {\n const {_pickRequest} = this;\n if (event.type === 'pointerleave') {\n _pickRequest.x = -1;\n _pickRequest.y = -1;\n _pickRequest.radius = 0;\n } else if (event.leftButton || event.rightButton) {\n // Do not trigger onHover callbacks if mouse button is down.\n return;\n } else {\n const pos = event.offsetCenter;\n // Do not trigger callbacks when click/hover position is invalid. Doing so will cause a\n // assertion error when attempting to unproject the position.\n if (!pos) {\n return;\n }\n _pickRequest.x = pos.x;\n _pickRequest.y = pos.y;\n _pickRequest.radius = this.props.pickingRadius;\n }\n\n if (this.layerManager) {\n this.layerManager.context.mousePosition = {x: _pickRequest.x, y: _pickRequest.y};\n }\n\n _pickRequest.event = event;\n };\n\n /** Actually run picking */\n private _pickAndCallback() {\n const {_pickRequest} = this;\n\n if (_pickRequest.event) {\n // Perform picking\n const {result, emptyInfo} = this._pick('pickObject', 'pickObject Time', _pickRequest);\n this.cursorState.isHovering = result.length > 0;\n\n // There are 4 possible scenarios:\n // result is [outInfo, pickedInfo] (moved from one pickable layer to another)\n // result is [outInfo] (moved outside of a pickable layer)\n // result is [pickedInfo] (moved into or over a pickable layer)\n // result is [] (nothing is or was picked)\n //\n // `layer.props.onHover` should be called on all affected layers (out/over)\n // `deck.props.onHover` should be called with the picked info if any, or empty info otherwise\n // `deck.props.getTooltip` should be called with the picked info if any, or empty info otherwise\n\n // Execute callbacks\n let pickedInfo = emptyInfo;\n let handled = false;\n for (const info of result) {\n pickedInfo = info;\n handled = info.layer?.onHover(info, _pickRequest.event) || handled;\n }\n if (!handled && this.props.onHover) {\n this.props.onHover(pickedInfo, _pickRequest.event);\n }\n\n // Update tooltip\n if (this.props.getTooltip && this.tooltip) {\n const displayInfo = this.props.getTooltip(pickedInfo);\n this.tooltip.setTooltip(displayInfo, pickedInfo.x, pickedInfo.y);\n }\n\n // Clear pending pickRequest\n _pickRequest.event = null;\n }\n }\n\n private _updateCursor(): void {\n const container = this.props.parent || this.canvas;\n if (container) {\n container.style.cursor = this.props.getCursor(this.cursorState);\n }\n }\n\n private _setGLContext(gl: WebGLRenderingContext) {\n if (this.layerManager) {\n return;\n }\n\n // if external context...\n if (!this.canvas) {\n this.canvas = gl.canvas;\n instrumentGLContext(gl, {enable: true, copyState: true});\n }\n\n this.tooltip = new Tooltip(this.canvas);\n\n setParameters(gl, {\n blend: true,\n blendFunc: [GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.ONE, GL.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthTest: true,\n depthFunc: GL.LEQUAL\n });\n\n this.props.onWebGLInitialized(gl);\n\n // timeline for transitions\n const timeline = new Timeline();\n timeline.play();\n this.animationLoop.attachTimeline(timeline);\n\n this.eventManager = new EventManager(this.props.parent || gl.canvas, {\n touchAction: this.props.touchAction,\n recognizerOptions: this.props.eventRecognizerOptions,\n events: {\n pointerdown: this._onPointerDown,\n pointermove: this._onPointerMove,\n pointerleave: this._onPointerMove\n }\n });\n for (const eventType in EVENTS) {\n this.eventManager.on(eventType as keyof typeof EVENTS, this._onEvent);\n }\n\n this.viewManager = new ViewManager({\n timeline,\n eventManager: this.eventManager,\n onViewStateChange: this._onViewStateChange.bind(this),\n onInteractionStateChange: this._onInteractionStateChange.bind(this),\n views: this._getViews(),\n viewState: this._getViewState(),\n width: this.width,\n height: this.height\n });\n\n // viewManager must be initialized before layerManager\n // layerManager depends on viewport created by viewManager.\n const viewport = this.viewManager.getViewports()[0];\n\n // Note: avoid React setState due GL animation loop / setState timing issue\n this.layerManager = new LayerManager(gl, {\n deck: this,\n stats: this.stats,\n viewport,\n timeline\n });\n\n this.effectManager = new EffectManager();\n\n this.deckRenderer = new DeckRenderer(gl);\n\n this.deckPicker = new DeckPicker(gl);\n\n this.setProps(this.props);\n\n this._updateCanvasSize();\n this.props.onLoad();\n }\n\n /** Internal only: default render function (redraw all layers and views) */\n _drawLayers(\n redrawReason: string,\n renderOptions?: {\n target?: Framebuffer;\n layerFilter?: (context: FilterContext) => boolean;\n layers?: Layer[];\n viewports?: Viewport[];\n views?: {[viewId: string]: View};\n pass?: string;\n effects?: Effect[];\n clearStack?: boolean;\n clearCanvas?: boolean;\n }\n ) {\n const {gl} = this.layerManager!.context;\n\n setParameters(gl, this.props.parameters);\n\n this.props.onBeforeRender({gl});\n\n this.deckRenderer!.renderLayers({\n target: this.props._framebuffer,\n layers: this.layerManager!.getLayers(),\n viewports: this.viewManager!.getViewports(),\n onViewportActive: this.layerManager!.activateViewport,\n views: this.viewManager!.getViews(),\n pass: 'screen',\n redrawReason,\n effects: this.effectManager!.getEffects(),\n ...renderOptions\n });\n\n this.props.onAfterRender({gl});\n }\n\n // Callbacks\n\n private _onRenderFrame(animationProps: any) {\n this._getFrameStats();\n\n // Log perf stats every second\n if (this._metricsCounter++ % 60 === 0) {\n this._getMetrics();\n this.stats.reset();\n log.table(4, this.metrics)();\n\n // Experimental: report metrics\n if (this.props._onMetrics) {\n this.props._onMetrics(this.metrics);\n }\n }\n\n this._updateCanvasSize();\n\n this._updateCursor();\n\n // If view state has changed, clear tooltip\n if (this.tooltip!.isVisible && this.viewManager!.needsRedraw()) {\n this.tooltip!.setTooltip(null);\n }\n\n // Update layers if needed (e.g. some async prop has loaded)\n // Note: This can trigger a redraw\n this.layerManager!.updateLayers();\n\n // Perform picking request if any\n this._pickAndCallback();\n\n // Redraw if necessary\n this.redraw();\n\n // Update viewport transition if needed\n // Note: this can trigger `onViewStateChange`, and affect layers\n // We want to defer these changes to the next frame\n if (this.viewManager) {\n this.viewManager.updateViewStates();\n }\n }\n\n // Callbacks\n\n private _onViewStateChange(params: ViewStateChangeParameters & {viewId: string}) {\n // Let app know that view state is changing, and give it a chance to change it\n const viewState = this.props.onViewStateChange(params) || params.viewState;\n\n // If initialViewState was set on creation, auto track position\n if (this.viewState) {\n this.viewState = {...this.viewState, [params.viewId]: viewState};\n if (!this.props.viewState) {\n // Apply internal view state\n if (this.viewManager) {\n this.viewManager.setProps({viewState: this.viewState});\n }\n }\n }\n }\n\n private _onInteractionStateChange(interactionState: InteractionState) {\n this.cursorState.isDragging = interactionState.isDragging || false;\n this.props.onInteractionStateChange(interactionState);\n }\n\n /** Internal use only: event handler for click & drag */\n _onEvent = (event: MjolnirGestureEvent) => {\n const eventOptions = EVENTS[event.type];\n const pos = event.offsetCenter;\n\n if (!eventOptions || !pos || !this.layerManager) {\n return;\n }\n\n // Reuse last picked object\n const layers = this.layerManager.getLayers();\n const info = this.deckPicker!.getLastPickedObject(\n {\n x: pos.x,\n y: pos.y,\n layers,\n viewports: this.getViewports(pos)\n },\n this._lastPointerDownInfo\n );\n\n const {layer} = info;\n const layerHandler =\n layer && (layer[eventOptions.handler] || layer.props[eventOptions.handler]);\n const rootHandler = this.props[eventOptions.handler];\n let handled = false;\n\n if (layerHandler) {\n handled = layerHandler.call(layer, info, event);\n }\n if (!handled && rootHandler) {\n rootHandler(info, event);\n }\n };\n\n /** Internal use only: evnet handler for pointerdown */\n _onPointerDown = (event: MjolnirPointerEvent) => {\n const pos = event.offsetCenter;\n const pickedInfo = this._pick('pickObject', 'pickObject Time', {\n x: pos.x,\n y: pos.y,\n radius: this.props.pickingRadius\n });\n this._lastPointerDownInfo = pickedInfo.result[0] || pickedInfo.emptyInfo;\n };\n\n private _getFrameStats(): void {\n const {stats} = this;\n stats.get('frameRate').timeEnd();\n stats.get('frameRate').timeStart();\n\n // Get individual stats from luma.gl so reset works\n const animationLoopStats = this.animationLoop.stats;\n stats.get('GPU Time').addTime(animationLoopStats.get('GPU Time').lastTiming);\n stats.get('CPU Time').addTime(animationLoopStats.get('CPU Time').lastTiming);\n }\n\n private _getMetrics(): void {\n const {metrics, stats} = this;\n metrics.fps = stats.get('frameRate').getHz();\n metrics.setPropsTime = stats.get('setProps Time').time;\n metrics.updateAttributesTime = stats.get('Update Attributes').time;\n metrics.framesRedrawn = stats.get('Redraw Count').count;\n metrics.pickTime =\n stats.get('pickObject Time').time +\n stats.get('pickMultipleObjects Time').time +\n stats.get('pickObjects Time').time;\n metrics.pickCount = stats.get('Pick Count').count;\n\n // Luma stats\n metrics.gpuTime = stats.get('GPU Time').time;\n metrics.cpuTime = stats.get('CPU Time').time;\n metrics.gpuTimePerFrame = stats.get('GPU Time').getAverageTime();\n metrics.cpuTimePerFrame = stats.get('CPU Time').getAverageTime();\n\n const memoryStats = lumaStats.get('Memory Usage');\n metrics.bufferMemory = memoryStats.get('Buffer Memory').count;\n metrics.textureMemory = memoryStats.get('Texture Memory').count;\n metrics.renderbufferMemory = memoryStats.get('Renderbuffer Memory').count;\n metrics.gpuMemory = memoryStats.get('GPU Memory').count;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {deepEqual} from '../utils/deep-equal';\nimport type Layer from './layer';\nimport type CompositeLayer from './composite-layer';\nimport type {UpdateParameters} from './layer';\nimport type {LayerContext} from './layer-manager';\n\nexport default abstract class LayerExtension {\n /**\n * Note that defaultProps of a LayerExtension does not behave like defaultProps of a Layer:\n - The default values are not automatically merged with user-supplied props when the layer is constructed\n - The types are not used during props diff\n * Currently they are only used in getSubLayerProps\n * TODO: find a more consistent solution\n */\n static defaultProps: any = {};\n opts!: OptionsT;\n\n constructor(opts?: OptionsT) {\n if (opts) {\n this.opts = opts;\n }\n }\n\n /** Returns true if two extensions are equivalent */\n equals(extension: LayerExtension): boolean {\n if (this === extension) {\n return true;\n }\n\n return this.constructor === extension.constructor && deepEqual(this.opts, extension.opts);\n }\n\n /** Only called if attached to a primitive layer */\n getShaders(this: Layer, extension: this): any {\n return null;\n }\n\n /** Only called if attached to a CompositeLayer */\n getSubLayerProps(this: CompositeLayer, extension: this): any {\n const {defaultProps} = extension.constructor as typeof LayerExtension;\n const newProps = {\n updateTriggers: {}\n };\n\n /* eslint-disable max-depth */\n for (const key in defaultProps) {\n if (key in this.props) {\n const propDef = defaultProps[key];\n const propValue = this.props[key];\n newProps[key] = propValue;\n if (propDef && propDef.type === 'accessor') {\n newProps.updateTriggers[key] = this.props.updateTriggers[key];\n if (typeof propValue === 'function') {\n newProps[key] = this.getSubLayerAccessor(propValue);\n }\n }\n }\n }\n /* eslint-enable max-depth */\n return newProps;\n }\n\n /* eslint-disable @typescript-eslint/no-empty-function */\n initializeState(this: Layer, context: LayerContext, extension: this): void {}\n\n updateState(this: Layer, params: UpdateParameters, extension: this): void {}\n\n draw(this: Layer, params: any, extension: this): void {}\n\n finalizeState(this: Layer, context: LayerContext, extension: this): void {}\n}\n","import {load} from '@loaders.gl/core';\n\nimport type {ResourceManagerContext} from './resource-manager';\n\nexport type ResourceSubscriber = {\n onChange: (data: T | Promise) => void;\n};\n\nexport default class Resource {\n id: string;\n context: ResourceManagerContext;\n isLoaded!: boolean;\n persistent?: boolean;\n\n private _loadCount: number = 0;\n private _subscribers = new Set>();\n private _data!: T | Promise | string;\n private _loader?: Promise;\n private _error?: Error;\n private _content?: T;\n\n constructor(id: string, data: T | Promise | string, context: ResourceManagerContext) {\n this.id = id;\n this.context = context;\n\n this.setData(data);\n }\n\n // consumer: {onChange: Function}\n subscribe(consumer: ResourceSubscriber): void {\n this._subscribers.add(consumer);\n }\n\n unsubscribe(consumer: ResourceSubscriber): void {\n this._subscribers.delete(consumer);\n }\n\n inUse(): boolean {\n return this._subscribers.size > 0;\n }\n\n delete(): void {\n // Remove any resources created\n }\n\n getData(): T | Promise {\n return this.isLoaded\n ? this._error\n ? Promise.reject(this._error)\n : this._content!\n : this._loader!.then(() => this.getData());\n }\n\n setData(data: any, forceUpdate?: boolean) {\n if (data === this._data && !forceUpdate) {\n return;\n }\n this._data = data;\n const loadCount = ++this._loadCount;\n\n let loader = data;\n if (typeof data === 'string') {\n loader = load(data);\n }\n if (loader instanceof Promise) {\n this.isLoaded = false;\n this._loader = loader\n .then(result => {\n // check if source has changed\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = undefined;\n this._content = result;\n }\n })\n .catch(error => {\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = error || true;\n }\n });\n } else {\n this.isLoaded = true;\n this._error = undefined;\n this._content = data;\n }\n\n for (const subscriber of this._subscribers) {\n subscriber.onChange(this.getData());\n }\n }\n}\n","/* global setTimeout */\nimport Resource from './resource';\nimport type {ResourceSubscriber} from './resource';\n\nexport type ResourceManagerContext = {\n gl: WebGLRenderingContext;\n resourceManager: ResourceManager;\n};\n\nexport default class ResourceManager {\n protocol: string;\n\n private _context: ResourceManagerContext;\n private _resources: Record;\n private _consumers: Record<\n string,\n Record<\n string,\n ResourceSubscriber & {\n resourceId: string;\n }\n >\n >;\n private _pruneRequest: number | null;\n\n constructor({gl, protocol}) {\n this.protocol = protocol || 'resource://';\n\n this._context = {\n gl,\n resourceManager: this\n };\n this._resources = {};\n this._consumers = {};\n\n this._pruneRequest = null;\n }\n\n contains(resourceId: string): boolean {\n if (resourceId.startsWith(this.protocol)) {\n return true;\n }\n return resourceId in this._resources;\n }\n\n add({\n resourceId,\n data,\n forceUpdate = false,\n persistent = true\n }: {\n resourceId: string;\n data: any;\n forceUpdate?: boolean;\n persistent?: boolean;\n }) {\n let res = this._resources[resourceId];\n\n if (res) {\n res.setData(data, forceUpdate);\n } else {\n res = new Resource(resourceId, data, this._context);\n this._resources[resourceId] = res;\n }\n // persistent resources can only be removed by calling `remove`\n // non-persistent resources may be released when there are no more consumers\n res.persistent = persistent;\n }\n\n remove(resourceId: string): void {\n const res = this._resources[resourceId];\n\n if (res) {\n res.delete();\n delete this._resources[resourceId];\n }\n }\n\n unsubscribe({consumerId}: {consumerId: string}): void {\n const consumer = this._consumers[consumerId];\n if (consumer) {\n for (const requestId in consumer) {\n const request = consumer[requestId];\n const resource = this._resources[request.resourceId];\n if (resource) {\n resource.unsubscribe(request);\n }\n }\n delete this._consumers[consumerId];\n this.prune();\n }\n }\n\n subscribe({\n resourceId,\n onChange,\n consumerId,\n requestId = 'default'\n }: {\n resourceId: string;\n onChange: (data: T | Promise) => void;\n consumerId: string;\n requestId: string;\n }): T | Promise | undefined {\n const {_resources: resources, protocol} = this;\n if (resourceId.startsWith(protocol)) {\n resourceId = resourceId.replace(protocol, '');\n if (!resources[resourceId]) {\n // Add placeholder. When this resource becomes available, the consumer will be notified.\n this.add({resourceId, data: null, persistent: false});\n }\n }\n const res: Resource = resources[resourceId];\n this._track(consumerId, requestId, res, onChange);\n if (res) {\n return res.getData();\n }\n\n return undefined;\n }\n\n prune(): void {\n if (!this._pruneRequest) {\n // prune() may be called multiple times in the same animation frame.\n // Batch multiple requests together\n // @ts-ignore setTimeout returns NodeJS.Timeout in node\n this._pruneRequest = setTimeout(() => this._prune(), 0);\n }\n }\n\n finalize(): void {\n for (const key in this._resources) {\n this._resources[key].delete();\n }\n }\n\n private _track(\n consumerId: string,\n requestId: string,\n resource: Resource,\n onChange: (data: any) => void\n ) {\n const consumers = this._consumers;\n const consumer = (consumers[consumerId] = consumers[consumerId] || {});\n const request = consumer[requestId] || {};\n\n const oldResource = request.resourceId && this._resources[request.resourceId];\n if (oldResource) {\n oldResource.unsubscribe(request);\n this.prune();\n }\n if (resource) {\n consumer[requestId] = request;\n request.onChange = onChange;\n request.resourceId = resource.id;\n resource.subscribe(request);\n }\n }\n\n private _prune(): void {\n this._pruneRequest = null;\n\n for (const key of Object.keys(this._resources)) {\n const res = this._resources[key];\n if (!res.persistent && !res.inUse()) {\n res.delete();\n delete this._resources[key];\n }\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {ProgramManager} from '@luma.gl/core';\nimport {gouraudLighting, phongLighting} from '@luma.gl/core';\nimport project from './project/project';\nimport project32 from './project32/project32';\nimport shadow from './shadow/shadow';\nimport picking from './picking/picking';\n\nconst DEFAULT_MODULES = [project];\n\nconst SHADER_HOOKS = [\n 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)',\n 'fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)'\n];\n\nexport function createProgramManager(gl) {\n const programManager = ProgramManager.getDefaultProgramManager(gl);\n\n for (const shaderModule of DEFAULT_MODULES) {\n programManager.addDefaultModule(shaderModule);\n }\n for (const shaderHook of SHADER_HOOKS) {\n programManager.addShaderHook(shaderHook);\n }\n\n return programManager;\n}\n\nexport {picking, project, project32, gouraudLighting, phongLighting, shadow};\n\n// Useful for custom shader modules\nexport type {ProjectUniforms} from './project/viewport-uniforms';\n\n// TODO - these should be imported from luma.gl\n/* eslint-disable camelcase */\nexport type PickingUniforms = {\n picking_uActive: boolean;\n picking_uAttribute: boolean;\n picking_uSelectedColor: [number, number, number];\n picking_uSelectedColorValid: boolean;\n picking_uHighlightColor: [number, number, number, number];\n};\n\nexport type LightingModuleSettings = {\n material:\n | boolean\n | {\n ambient?: number;\n diffuse?: number;\n shininess?: number;\n specularColor?: [number, number, number];\n };\n};\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Timeline} from '@luma.gl/core';\nimport {LIFECYCLE} from '../lifecycle/constants';\nimport log from '../utils/log';\nimport debug from '../debug';\nimport {flatten} from '../utils/flatten';\nimport {Stats} from '@probe.gl/stats';\nimport ResourceManager from './resource/resource-manager';\n\nimport Viewport from '../viewports/viewport';\nimport {createProgramManager} from '../shaderlib';\n\nimport type Layer from './layer';\nimport type CompositeLayer from './composite-layer';\nimport type Deck from './deck';\nimport type {ProgramManager} from '@luma.gl/engine';\n\nconst TRACE_SET_LAYERS = 'layerManager.setLayers';\nconst TRACE_ACTIVATE_VIEWPORT = 'layerManager.activateViewport';\n\nexport type LayerContext = {\n layerManager: LayerManager;\n resourceManager: ResourceManager;\n deck?: Deck;\n gl: WebGLRenderingContext;\n programManager: ProgramManager;\n stats: Stats;\n viewport: Viewport;\n timeline: Timeline;\n mousePosition: {x: number; y: number} | null;\n userData: any;\n onError?: (error: Error, source: Layer) => void;\n};\n\nexport type LayersList = (Layer | undefined | false | null | LayersList)[];\n\nexport default class LayerManager {\n layers: Layer[];\n context: LayerContext;\n resourceManager: ResourceManager;\n\n private _lastRenderedLayers: LayersList = [];\n private _needsRedraw: string | false = false;\n private _needsUpdate: string | false = false;\n private _nextLayers: LayersList | null = null;\n private _debug: boolean = false;\n\n // eslint-disable-next-line\n constructor(\n gl,\n {\n deck,\n stats,\n viewport,\n timeline\n }: {\n deck?: Deck;\n stats?: Stats;\n viewport?: Viewport;\n timeline?: Timeline;\n } = {}\n ) {\n // Currently deck.gl expects the DeckGL.layers array to be different\n // whenever React rerenders. If the same layers array is used, the\n // LayerManager's diffing algorithm will generate a fatal error and\n // break the rendering.\n\n // `this._lastRenderedLayers` stores the UNFILTERED layers sent\n // down to LayerManager, so that `layers` reference can be compared.\n // If it's the same across two React render calls, the diffing logic\n // will be skipped.\n this.layers = [];\n this.resourceManager = new ResourceManager({gl, protocol: 'deck://'});\n\n this.context = {\n mousePosition: null,\n userData: {},\n layerManager: this,\n gl,\n deck,\n // Enabling luma.gl Program caching using private API (_cachePrograms)\n programManager: gl && createProgramManager(gl),\n stats: stats || new Stats({id: 'deck.gl'}),\n // Make sure context.viewport is not empty on the first layer initialization\n viewport: viewport || new Viewport({id: 'DEFAULT-INITIAL-VIEWPORT'}), // Current viewport, exposed to layers for project* function\n timeline: timeline || new Timeline(),\n resourceManager: this.resourceManager,\n onError: undefined\n };\n\n Object.seal(this);\n }\n\n /** Method to call when the layer manager is not needed anymore. */\n finalize() {\n this.resourceManager.finalize();\n // Finalize all layers\n for (const layer of this.layers) {\n this._finalizeLayer(layer);\n }\n }\n\n /** Check if a redraw is needed */\n needsRedraw(\n opts: {\n /** Reset redraw flags to false after the call */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n\n // This layers list doesn't include sublayers, relying on composite layers\n for (const layer of this.layers) {\n // Call every layer to clear their flags\n const layerNeedsRedraw = layer.getNeedsRedraw(opts);\n redraw = redraw || layerNeedsRedraw;\n }\n\n return redraw;\n }\n\n /** Check if a deep update of all layers is needed */\n needsUpdate(): string | false {\n if (this._nextLayers && this._nextLayers !== this._lastRenderedLayers) {\n // New layers array may be the same as the old one if `setProps` is called by React\n return 'layers changed';\n }\n return this._needsUpdate;\n }\n\n /** Layers will be redrawn (in next animation frame) */\n setNeedsRedraw(reason: string): void {\n this._needsRedraw = this._needsRedraw || reason;\n }\n\n /** Layers will be updated deeply (in next animation frame)\n Potentially regenerating attributes and sub layers */\n setNeedsUpdate(reason: string): void {\n this._needsUpdate = this._needsUpdate || reason;\n }\n\n /** Gets a list of currently rendered layers. Optionally filter by id. */\n getLayers({layerIds}: {layerIds?: string[]} = {}): Layer[] {\n // Filtering by layerId compares beginning of strings, so that sublayers will be included\n // Dependes on the convention of adding suffixes to the parent's layer name\n return layerIds\n ? this.layers.filter(layer => layerIds.find(layerId => layer.id.indexOf(layerId) === 0))\n : this.layers;\n }\n\n /** Set props needed for layer rendering and picking. */\n setProps(props: any): void {\n if ('debug' in props) {\n this._debug = props.debug;\n }\n\n // A way for apps to add data to context that can be accessed in layers\n if ('userData' in props) {\n this.context.userData = props.userData;\n }\n\n // New layers will be processed in `updateLayers` in the next update cycle\n if ('layers' in props) {\n this._nextLayers = props.layers;\n }\n\n if ('onError' in props) {\n this.context.onError = props.onError;\n }\n }\n\n /** Supply a new layer list, initiating sublayer generation and layer matching */\n setLayers(newLayers: LayersList, reason?: string): void {\n debug(TRACE_SET_LAYERS, this, reason, newLayers);\n\n this._lastRenderedLayers = newLayers;\n\n const flatLayers = flatten(newLayers, Boolean) as Layer[];\n\n for (const layer of flatLayers) {\n layer.context = this.context;\n }\n\n this._updateLayers(this.layers, flatLayers);\n }\n\n /** Update layers from last cycle if `setNeedsUpdate()` has been called */\n updateLayers(): void {\n // NOTE: For now, even if only some layer has changed, we update all layers\n // to ensure that layer id maps etc remain consistent even if different\n // sublayers are rendered\n const reason = this.needsUpdate();\n if (reason) {\n this.setNeedsRedraw(`updating layers: ${reason}`);\n // Force a full update\n this.setLayers(this._nextLayers || this._lastRenderedLayers, reason);\n }\n // Updated, clear the backlog\n this._nextLayers = null;\n }\n\n //\n // INTERNAL METHODS\n //\n\n /** Make a viewport \"current\" in layer context, updating viewportChanged flags */\n activateViewport = (viewport: Viewport) => {\n debug(TRACE_ACTIVATE_VIEWPORT, this, viewport);\n if (viewport) {\n this.context.viewport = viewport;\n }\n };\n\n private _handleError(stage: string, error: Error, layer: Layer) {\n layer.raiseError(error, `${stage} of ${layer}`);\n }\n\n // TODO - mark layers with exceptions as bad and remove from rendering cycle?\n /** Match all layers, checking for caught errors\n to avoid having an exception in one layer disrupt other layers */\n private _updateLayers(oldLayers: Layer[], newLayers: Layer[]): void {\n // Create old layer map\n const oldLayerMap: {[layerId: string]: Layer | null} = {};\n for (const oldLayer of oldLayers) {\n if (oldLayerMap[oldLayer.id]) {\n log.warn(`Multiple old layers with same id ${oldLayer.id}`)();\n } else {\n oldLayerMap[oldLayer.id] = oldLayer;\n }\n }\n\n // Allocate array for generated layers\n const generatedLayers: Layer[] = [];\n\n // Match sublayers\n this._updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers);\n\n // Finalize unmatched layers\n this._finalizeOldLayers(oldLayerMap);\n\n let needsUpdate: string | false = false;\n for (const layer of generatedLayers) {\n if (layer.hasUniformTransition()) {\n needsUpdate = `Uniform transition in ${layer}`;\n break;\n }\n }\n\n this._needsUpdate = needsUpdate;\n this.layers = generatedLayers;\n }\n\n /* eslint-disable complexity,max-statements */\n // Note: adds generated layers to `generatedLayers` array parameter\n private _updateSublayersRecursively(\n newLayers: Layer[],\n oldLayerMap: {[layerId: string]: Layer | null},\n generatedLayers: Layer[]\n ) {\n for (const newLayer of newLayers) {\n newLayer.context = this.context;\n\n // Given a new coming layer, find its matching old layer (if any)\n const oldLayer = oldLayerMap[newLayer.id];\n if (oldLayer === null) {\n // null, rather than undefined, means this id was originally there\n log.warn(`Multiple new layers with same id ${newLayer.id}`)();\n }\n // Remove the old layer from candidates, as it has been matched with this layer\n oldLayerMap[newLayer.id] = null;\n\n let sublayers: Layer[] | null = null;\n\n // We must not generate exceptions until after layer matching is complete\n try {\n if (this._debug && oldLayer !== newLayer) {\n newLayer.validateProps();\n }\n\n if (!oldLayer) {\n this._initializeLayer(newLayer);\n } else {\n this._transferLayerState(oldLayer, newLayer);\n this._updateLayer(newLayer);\n }\n generatedLayers.push(newLayer);\n\n // Call layer lifecycle method: render sublayers\n sublayers = newLayer.isComposite ? (newLayer as CompositeLayer).getSubLayers() : null;\n // End layer lifecycle method: render sublayers\n } catch (err) {\n this._handleError('matching', err as Error, newLayer); // Record first exception\n }\n\n if (sublayers) {\n this._updateSublayersRecursively(sublayers, oldLayerMap, generatedLayers);\n }\n }\n }\n /* eslint-enable complexity,max-statements */\n\n // Finalize any old layers that were not matched\n private _finalizeOldLayers(oldLayerMap: {[layerId: string]: Layer | null}): void {\n for (const layerId in oldLayerMap) {\n const layer = oldLayerMap[layerId];\n if (layer) {\n this._finalizeLayer(layer);\n }\n }\n }\n\n // / EXCEPTION SAFE LAYER ACCESS\n\n /** Safely initializes a single layer, calling layer methods */\n private _initializeLayer(layer: Layer): void {\n try {\n layer._initialize();\n layer.lifecycle = LIFECYCLE.INITIALIZED;\n } catch (err) {\n this._handleError('initialization', err as Error, layer);\n // TODO - what should the lifecycle state be here? LIFECYCLE.INITIALIZATION_FAILED?\n }\n }\n\n /** Transfer state from one layer to a newer version */\n private _transferLayerState(oldLayer: Layer, newLayer: Layer): void {\n newLayer._transferState(oldLayer);\n newLayer.lifecycle = LIFECYCLE.MATCHED;\n\n if (newLayer !== oldLayer) {\n oldLayer.lifecycle = LIFECYCLE.AWAITING_GC;\n }\n }\n\n /** Safely updates a single layer, cleaning all flags */\n private _updateLayer(layer: Layer): void {\n try {\n layer._update();\n } catch (err) {\n this._handleError('update', err as Error, layer);\n }\n }\n\n /** Safely finalizes a single layer, removing all resources */\n private _finalizeLayer(layer: Layer): void {\n this._needsRedraw = this._needsRedraw || `finalized ${layer}`;\n\n layer.lifecycle = LIFECYCLE.AWAITING_FINALIZATION;\n\n try {\n layer._finalize();\n layer.lifecycle = LIFECYCLE.FINALIZED;\n } catch (err) {\n this._handleError('finalization', err as Error, layer);\n }\n }\n}\n","import {lerp} from '@math.gl/core';\nimport Transition from './transition';\n\nexport default class CPUInterpolationTransition extends Transition {\n get value() {\n return this._value;\n }\n\n _onUpdate() {\n const {\n time,\n settings: {fromValue, toValue, duration, easing}\n } = this;\n const t = easing(time / duration);\n this._value = lerp(fromValue, toValue, t);\n }\n}\n","import Transition from './transition';\n\nconst EPSILON = 1e-5;\n\n/*\n * Calculate the next value in the spring transition\n * @param prev {Number} - previous value\n * @param cur {Number} - current value\n * @param dest {Number} - destination value\n * @param damping {Number}\n * @param stiffness {Number}\n */\nfunction updateSpringElement(prev, cur, dest, damping, stiffness) {\n const velocity = cur - prev;\n const delta = dest - cur;\n const spring = delta * stiffness;\n const damper = -velocity * damping;\n return spring + damper + velocity + cur;\n}\n\n/*\n * Calculate the next value in the spring transition\n * @param prev {Number|Array} - previous value\n * @param cur {Number|Array} - current value\n * @param dest {Number|Array} - destination value\n * @param damping {Number}\n * @param stiffness {Number}\n */\nfunction updateSpring(prev, cur, dest, damping, stiffness) {\n if (Array.isArray(dest)) {\n const next = [];\n for (let i = 0; i < dest.length; i++) {\n next[i] = updateSpringElement(prev[i], cur[i], dest[i], damping, stiffness);\n }\n return next;\n }\n return updateSpringElement(prev, cur, dest, damping, stiffness);\n}\n\n/*\n * Calculate the distance between two numbers or two vectors\n */\nfunction distance(value1, value2) {\n if (Array.isArray(value1)) {\n let distanceSquare = 0;\n for (let i = 0; i < value1.length; i++) {\n const d = value1[i] - value2[i];\n distanceSquare += d * d;\n }\n return Math.sqrt(distanceSquare);\n }\n return Math.abs(value1 - value2);\n}\n\nexport default class CPUSpringTransition extends Transition {\n get value() {\n return this._currValue;\n }\n\n _onUpdate() {\n // TODO - use timeline\n // const {time} = this;\n\n const {fromValue, toValue, damping, stiffness} = this.settings;\n const {_prevValue = fromValue, _currValue = fromValue} = this;\n let nextValue = updateSpring(_prevValue, _currValue, toValue, damping, stiffness);\n const delta = distance(nextValue, toValue);\n const velocity = distance(nextValue, _currValue);\n\n if (delta < EPSILON && velocity < EPSILON) {\n nextValue = toValue;\n this.end();\n }\n\n this._prevValue = _currValue;\n this._currValue = nextValue;\n }\n}\n","import {normalizeTransitionSettings} from './attribute/attribute-transition-utils';\nimport CPUInterpolationTransition from '../transitions/cpu-interpolation-transition';\nimport CPUSpringTransition from '../transitions/cpu-spring-transition';\nimport log from '../utils/log';\n\nconst TRANSITION_TYPES = {\n interpolation: CPUInterpolationTransition,\n spring: CPUSpringTransition\n};\n\nexport default class UniformTransitionManager {\n constructor(timeline) {\n this.transitions = new Map();\n this.timeline = timeline;\n }\n\n get active() {\n return this.transitions.size > 0;\n }\n\n add(key, fromValue, toValue, settings) {\n const {transitions} = this;\n if (transitions.has(key)) {\n const transition = transitions.get(key);\n // value may not be available if `update()` has not been called. Fallback to `fromValue`\n const {value = transition.settings.fromValue} = transition;\n // start from interrupted position\n fromValue = value;\n this.remove(key);\n }\n\n settings = normalizeTransitionSettings(settings);\n if (!settings) {\n return;\n }\n\n const TransitionType = TRANSITION_TYPES[settings.type];\n if (!TransitionType) {\n log.error(`unsupported transition type '${settings.type}'`)();\n return;\n }\n const transition = new TransitionType(this.timeline);\n transition.start({\n ...settings,\n fromValue,\n toValue\n });\n transitions.set(key, transition);\n }\n\n remove(key) {\n const {transitions} = this;\n if (transitions.has(key)) {\n transitions.get(key).cancel();\n transitions.delete(key);\n }\n }\n\n update() {\n const propsInTransition = {};\n\n for (const [key, transition] of this.transitions) {\n transition.update();\n propsInTransition[key] = transition.value;\n if (!transition.inProgress) {\n // transition ended\n this.remove(key);\n }\n }\n\n return propsInTransition;\n }\n\n clear() {\n for (const key of this.transitions.keys()) {\n this.remove(key);\n }\n }\n}\n","import {Texture2D} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\n\nimport type Layer from '../lib/layer';\n\nconst DEFAULT_TEXTURE_PARAMETERS: Record = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\n// Track the textures that are created by us. They need to be released when they are no longer used.\nconst internalTextures: Record = {};\n\nexport function createTexture(layer: Layer, image: any): Texture2D | null {\n const gl = layer.context && layer.context.gl;\n if (!gl || !image) {\n return null;\n }\n\n // image could be one of:\n // - Texture2D\n // - Browser object: Image, ImageData, ImageData, HTMLCanvasElement, HTMLVideoElement, ImageBitmap\n // - Plain object: {width: , height: , data: }\n if (image instanceof Texture2D) {\n return image;\n } else if (image.constructor && image.constructor.name !== 'Object') {\n // Browser object\n image = {data: image};\n }\n\n let specialTextureParameters: Record | null = null;\n if (image.compressed) {\n specialTextureParameters = {\n [GL.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR\n };\n }\n\n const texture = new Texture2D(gl, {\n ...image,\n parameters: {\n ...DEFAULT_TEXTURE_PARAMETERS,\n ...specialTextureParameters,\n // @ts-expect-error textureParameter may not be defined\n ...layer.props.textureParameters\n }\n });\n // Track this texture\n internalTextures[texture.id] = true;\n return texture;\n}\n\nexport function destroyTexture(texture: Texture2D) {\n if (!texture || !(texture instanceof Texture2D)) {\n return;\n }\n if (internalTextures[texture.id]) {\n texture.delete();\n delete internalTextures[texture.id];\n }\n}\n","import {createTexture, destroyTexture} from '../utils/texture';\nimport {deepEqual} from '../utils/deep-equal';\n\nimport type Component from './component';\nimport type {Color, Texture} from '../types/layer-props';\n\ntype BasePropType = {\n value: ValueT;\n async?: boolean;\n validate?: (value: any, propType: PropType) => boolean;\n equal?: (value1: ValueT, value2: ValueT, propType: PropType) => boolean;\n};\n\n/**\n * Normalized prop type definition\n */\nexport type PropType = BasePropType & {\n type: string;\n name: string;\n transform?: (value: any, propType: PropType, component: Component) => any;\n release?: (value: any, propType: PropType, component: Component) => void;\n};\n\ntype DefaultProp =\n | T\n | DeprecatedProp\n | BooleanPropType\n | NumberPropType\n | ColorPropType\n | ImagePropType\n | DataPropType\n | ArrayPropType\n | ObjectPropType\n | AccessorPropType\n | FunctionPropType;\n\nexport type DefaultProps> = {\n [propName in keyof T]?: DefaultProp[propName]>;\n};\n\ntype BooleanPropType = BasePropType & {\n type: 'boolean';\n};\ntype NumberPropType = BasePropType & {\n type: 'number';\n min?: number;\n max?: number;\n};\ntype ColorPropType = BasePropType & {\n type: 'color';\n optional?: boolean;\n};\ntype ArrayPropType = BasePropType & {\n type: 'array';\n optional?: boolean;\n compare?: boolean;\n};\ntype AccessorPropType = BasePropType & {\n type: 'accessor';\n};\ntype FunctionPropType = BasePropType & {\n type: 'function';\n optional?: boolean;\n compare?: boolean;\n};\ntype DataPropType = BasePropType & {\n type: 'data';\n};\ntype ImagePropType = BasePropType & {\n type: 'image';\n};\ntype ObjectPropType = BasePropType & {\n type: 'object';\n optional?: boolean;\n compare?: boolean;\n};\ntype DeprecatedProp = {\n deprecatedFor?: string | string[];\n};\ntype PropTypeDef =\n | DeprecatedProp\n | boolean\n | BooleanPropType\n | number\n | NumberPropType\n | string\n | DataPropType\n | number[]\n | ColorPropType\n | ArrayPropType\n | AccessorPropType\n | FunctionPropType\n | ImagePropType\n | ObjectPropType\n | null;\n\nconst TYPE_DEFINITIONS = {\n boolean: {\n validate(value, propType: BooleanPropType) {\n return true;\n },\n equal(value1, value2, propType: BooleanPropType) {\n return Boolean(value1) === Boolean(value2);\n }\n },\n number: {\n validate(value, propType: NumberPropType) {\n return (\n Number.isFinite(value) &&\n (!('max' in propType) || value <= propType.max!) &&\n (!('min' in propType) || value >= propType.min!)\n );\n }\n },\n color: {\n validate(value, propType: ColorPropType) {\n return (\n (propType.optional && !value) ||\n (isArray(value) && (value.length === 3 || value.length === 4))\n );\n },\n equal(value1, value2, propType: ColorPropType) {\n return arrayEqual(value1, value2);\n }\n },\n accessor: {\n validate(value, propType: AccessorPropType) {\n const valueType = getTypeOf(value);\n return valueType === 'function' || valueType === getTypeOf(propType.value);\n },\n equal(value1, value2, propType: AccessorPropType) {\n if (typeof value2 === 'function') {\n return true;\n }\n return arrayEqual(value1, value2);\n }\n },\n array: {\n validate(value, propType: ArrayPropType) {\n return (propType.optional && !value) || isArray(value);\n },\n equal(value1, value2, propType: ArrayPropType) {\n return propType.compare ? arrayEqual(value1, value2) : value1 === value2;\n }\n },\n object: {\n equal(value1, value2, propType: ObjectPropType) {\n return propType.compare ? deepEqual(value1, value2) : value1 === value2;\n }\n },\n function: {\n validate(value, propType: FunctionPropType) {\n return (propType.optional && !value) || typeof value === 'function';\n },\n equal(value1, value2, propType: FunctionPropType) {\n return !propType.compare || value1 === value2;\n }\n },\n data: {\n transform: (value, propType: DataPropType, component) => {\n const {dataTransform} = component.props;\n return dataTransform && value ? dataTransform(value) : value;\n }\n },\n image: {\n transform: (value, propType: ImagePropType, component) => {\n return createTexture(component, value);\n },\n release: value => {\n destroyTexture(value);\n }\n }\n} as const;\n\nfunction arrayEqual(array1, array2) {\n if (array1 === array2) {\n return true;\n }\n if (!isArray(array1) || !isArray(array2)) {\n return false;\n }\n const len = array1.length;\n if (len !== array2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function parsePropTypes(propDefs: Record): {\n propTypes: Record;\n defaultProps: Record;\n deprecatedProps: Record;\n} {\n const propTypes = {};\n const defaultProps = {};\n const deprecatedProps = {};\n\n for (const [propName, propDef] of Object.entries(propDefs)) {\n const deprecated = (propDef as DeprecatedProp)?.deprecatedFor;\n if (deprecated) {\n deprecatedProps[propName] = Array.isArray(deprecated) ? deprecated : [deprecated];\n } else {\n const propType = parsePropType(propName, propDef);\n propTypes[propName] = propType;\n defaultProps[propName] = propType.value;\n }\n }\n return {propTypes, defaultProps, deprecatedProps};\n}\n\n// Parses one property definition entry. Either contains:\n// * a valid prop type object ({type, ...})\n// * or just a default value, in which case type and name inference is used\nfunction parsePropType(name: string, propDef: PropTypeDef): PropType {\n switch (getTypeOf(propDef)) {\n case 'object':\n return normalizePropDefinition(name, propDef);\n\n case 'array':\n return normalizePropDefinition(name, {type: 'array', value: propDef, compare: false});\n\n case 'boolean':\n return normalizePropDefinition(name, {type: 'boolean', value: propDef});\n\n case 'number':\n return normalizePropDefinition(name, {type: 'number', value: propDef});\n\n case 'function':\n // return guessFunctionType(name, propDef);\n return normalizePropDefinition(name, {type: 'function', value: propDef, compare: true});\n\n default:\n return {name, type: 'unknown', value: propDef};\n }\n}\n\nfunction normalizePropDefinition(name, propDef): PropType {\n if (!('type' in propDef)) {\n if (!('value' in propDef)) {\n // If no type and value this object is likely the value\n return {name, type: 'object', value: propDef};\n }\n return {name, type: getTypeOf(propDef.value), ...propDef};\n }\n return {name, ...TYPE_DEFINITIONS[propDef.type], ...propDef};\n}\n\nfunction isArray(value: any): boolean {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n\n// improved version of javascript typeof that can distinguish arrays and null values\nfunction getTypeOf(value: any): string {\n if (isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n}\n","import log from '../utils/log';\nimport {isAsyncIterable} from '../utils/iterable-utils';\nimport {parsePropTypes} from './prop-types';\nimport {\n COMPONENT_SYMBOL,\n ASYNC_ORIGINAL_SYMBOL,\n ASYNC_RESOLVED_SYMBOL,\n ASYNC_DEFAULTS_SYMBOL\n} from './constants';\nimport {StatefulComponentProps} from './component';\nimport type Component from './component';\n\n// Create a property object\nexport function createProps(\n component: Component,\n propObjects: Partial[]\n): StatefulComponentProps {\n // Get default prop object (a prototype chain for now)\n const propsPrototype = getPropsPrototype(component.constructor);\n\n // Create a new prop object with default props object in prototype chain\n const propsInstance = Object.create(propsPrototype);\n\n // Props need a back pointer to the owning component\n propsInstance[COMPONENT_SYMBOL] = component;\n // The supplied (original) values for those async props that are set to url strings or Promises.\n // In this case, the actual (i.e. resolved) values are looked up from component.internalState\n propsInstance[ASYNC_ORIGINAL_SYMBOL] = {};\n // Note: the actual (resolved) values for props that are NOT set to urls or Promises.\n // in this case the values are served directly from this map\n propsInstance[ASYNC_RESOLVED_SYMBOL] = {};\n\n // \"Copy\" all sync props\n for (let i = 0; i < propObjects.length; ++i) {\n const props = propObjects[i];\n // Do not use Object.assign here to avoid Symbols in props overwriting our private fields\n // This might happen if one of the arguments is another props instance\n for (const key in props) {\n propsInstance[key] = props[key];\n }\n }\n\n // Props must be immutable\n Object.freeze(propsInstance);\n\n return propsInstance;\n}\n\n// Return precalculated defaultProps and propType objects if available\n// build them if needed\nfunction getPropsPrototype(componentClass) {\n const defaultProps = getOwnProperty(componentClass, '_mergedDefaultProps');\n if (!defaultProps) {\n createPropsPrototypeAndTypes(componentClass);\n return componentClass._mergedDefaultProps;\n }\n return defaultProps;\n}\n\n// Build defaultProps and propType objects by walking component prototype chain\nfunction createPropsPrototypeAndTypes(componentClass) {\n const parent = componentClass.prototype;\n if (!parent) {\n return;\n }\n\n const parentClass = Object.getPrototypeOf(componentClass);\n const parentDefaultProps = getPropsPrototype(parentClass);\n\n // Parse propTypes from Component.defaultProps\n const componentDefaultProps = getOwnProperty(componentClass, 'defaultProps') || {};\n const componentPropDefs = parsePropTypes(componentDefaultProps);\n\n // Create any necessary property descriptors and create the default prop object\n // Assign merged default props\n const defaultProps = createPropsPrototype(\n componentPropDefs.defaultProps,\n parentDefaultProps,\n componentClass\n );\n\n // Create a merged type object\n const propTypes = {...parentClass._propTypes, ...componentPropDefs.propTypes};\n // Add getters/setters for async props\n addAsyncPropsToPropPrototype(defaultProps, propTypes);\n\n // Create a map for prop whose default value is a callback\n const deprecatedProps = {\n ...parentClass._deprecatedProps,\n ...componentPropDefs.deprecatedProps\n };\n // Add setters for deprecated props\n addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps);\n\n // Store the precalculated props\n componentClass._mergedDefaultProps = defaultProps;\n componentClass._propTypes = propTypes;\n componentClass._deprecatedProps = deprecatedProps;\n}\n\n// Builds a pre-merged default props object that component props can inherit from\nfunction createPropsPrototype(props, parentProps, componentClass) {\n const defaultProps = Object.create(null);\n\n Object.assign(defaultProps, parentProps, props);\n\n // Avoid freezing `id` prop\n const id = getComponentName(componentClass);\n delete props.id;\n\n Object.defineProperties(defaultProps, {\n // `id` is treated specially because layer might need to override it\n id: {\n writable: true,\n value: id\n }\n });\n\n return defaultProps;\n}\n\nfunction addDeprecatedPropsToPropPrototype(defaultProps, deprecatedProps) {\n for (const propName in deprecatedProps) {\n /* eslint-disable accessor-pairs */\n Object.defineProperty(defaultProps, propName, {\n enumerable: false,\n set(newValue) {\n const nameStr = `${this.id}: ${propName}`;\n\n for (const newPropName of deprecatedProps[propName]) {\n if (!hasOwnProperty(this, newPropName)) {\n this[newPropName] = newValue;\n }\n }\n\n log.deprecated(nameStr, deprecatedProps[propName].join('/'))();\n }\n });\n /* eslint-enable accessor-pairs */\n }\n}\n\n// Create descriptors for overridable props\nfunction addAsyncPropsToPropPrototype(defaultProps, propTypes) {\n const defaultValues = {};\n\n const descriptors = {};\n\n // Move async props into shadow values\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const {name, value} = propType;\n\n // Note: async is ES7 keyword, can't destructure\n if (propType.async) {\n defaultValues[name] = value;\n descriptors[name] = getDescriptorForAsyncProp(name);\n }\n }\n\n // Default \"resolved\" values for async props, returned if value not yet resolved/set.\n defaultProps[ASYNC_DEFAULTS_SYMBOL] = defaultValues;\n // Shadowed object, just to make sure \"early indexing\" into the instance does not fail\n defaultProps[ASYNC_ORIGINAL_SYMBOL] = {};\n\n Object.defineProperties(defaultProps, descriptors);\n}\n\n// Helper: Configures getter and setter for one async prop\nfunction getDescriptorForAsyncProp(name) {\n return {\n enumerable: true,\n // Save the provided value for async props in a special map\n set(newValue) {\n if (\n typeof newValue === 'string' ||\n newValue instanceof Promise ||\n isAsyncIterable(newValue)\n ) {\n this[ASYNC_ORIGINAL_SYMBOL][name] = newValue;\n } else {\n this[ASYNC_RESOLVED_SYMBOL][name] = newValue;\n }\n },\n // Only the component's state knows the true value of async prop\n get() {\n if (this[ASYNC_RESOLVED_SYMBOL]) {\n // Prop value isn't async, so just return it\n if (name in this[ASYNC_RESOLVED_SYMBOL]) {\n const value = this[ASYNC_RESOLVED_SYMBOL][name];\n\n return value || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n\n if (name in this[ASYNC_ORIGINAL_SYMBOL]) {\n // It's an async prop value: look into component state\n const state = this[COMPONENT_SYMBOL] && this[COMPONENT_SYMBOL].internalState;\n if (state && state.hasAsyncProp(name)) {\n return state.getAsyncProp(name) || this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n }\n }\n\n // the prop is not supplied, or\n // component not yet initialized/matched, return the component's default value for the prop\n return this[ASYNC_DEFAULTS_SYMBOL][name];\n }\n };\n}\n\n// HELPER METHODS\n\nfunction hasOwnProperty(object, prop) {\n return Object.prototype.hasOwnProperty.call(object, prop);\n}\n\n// Constructors have their super class constructors as prototypes\nfunction getOwnProperty(object, prop) {\n return hasOwnProperty(object, prop) && object[prop];\n}\n\nfunction getComponentName(componentClass) {\n const componentName =\n getOwnProperty(componentClass, 'layerName') || getOwnProperty(componentClass, 'componentName');\n if (!componentName) {\n log.once(0, `${componentClass.name}.componentName not specified`)();\n }\n return componentName || componentClass.name;\n}\n","import {\n COMPONENT_SYMBOL,\n ASYNC_ORIGINAL_SYMBOL,\n ASYNC_RESOLVED_SYMBOL,\n ASYNC_DEFAULTS_SYMBOL\n} from './constants';\nimport {createProps} from './create-props';\n\nlet counter = 0;\n\nexport type StatefulComponentProps = PropsT & {\n id: string;\n [COMPONENT_SYMBOL]: Component;\n [ASYNC_DEFAULTS_SYMBOL]: Partial;\n [ASYNC_ORIGINAL_SYMBOL]: Partial;\n [ASYNC_RESOLVED_SYMBOL]: Partial;\n};\n\nexport default class Component {\n static componentName: string = 'Component';\n static defaultProps: Readonly<{}> = {};\n\n id: string;\n props: StatefulComponentProps;\n count: number;\n\n constructor(...propObjects: Partial[]) {\n // Merge supplied props with default props and freeze them.\n /* eslint-disable prefer-spread */\n this.props = createProps(this, propObjects);\n /* eslint-enable prefer-spread */\n\n this.id = this.props.id; // The layer's id, used for matching with layers from last render cycle\n this.count = counter++; // Keep track of how many layer instances you are generating\n }\n\n // clone this layer with modified props\n clone(newProps: Partial) {\n const {props} = this;\n\n // Async props cannot be copied with Object.assign, copy them separately\n const asyncProps: Partial = {};\n\n // See async props definition in create-props.js\n for (const key in props[ASYNC_DEFAULTS_SYMBOL]) {\n if (key in props[ASYNC_RESOLVED_SYMBOL]) {\n asyncProps[key] = props[ASYNC_RESOLVED_SYMBOL][key];\n } else if (key in props[ASYNC_ORIGINAL_SYMBOL]) {\n asyncProps[key] = props[ASYNC_ORIGINAL_SYMBOL][key];\n }\n }\n\n // Some custom layer implementation may not support multiple arguments in the constructor\n // @ts-ignore\n return new this.constructor({...props, ...asyncProps, ...newProps});\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {isAsyncIterable} from '../utils/iterable-utils';\nimport {ASYNC_ORIGINAL_SYMBOL, ASYNC_RESOLVED_SYMBOL, ASYNC_DEFAULTS_SYMBOL} from './constants';\nimport type Component from './component';\nimport {PropType} from './prop-types';\n\nconst EMPTY_PROPS = Object.freeze({});\n\ntype AsyncPropState = {\n type: PropType;\n lastValue: any;\n resolvedValue: any;\n pendingLoadCount: number;\n resolvedLoadCount: number;\n};\n\nexport default class ComponentState {\n component: ComponentT;\n onAsyncPropUpdated: (propName: string, value: any) => void;\n\n private asyncProps: Partial>;\n private oldProps: ComponentT['props'] | null;\n private oldAsyncProps: ComponentT['props'] | null;\n\n constructor(component: ComponentT) {\n this.component = component;\n this.asyncProps = {}; // Prop values that the layer sees\n this.onAsyncPropUpdated = () => {};\n this.oldProps = null; // Last props before update\n this.oldAsyncProps = null; // Last props before update, with async values copied.\n }\n\n finalize() {\n for (const propName in this.asyncProps) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && asyncProp.type && asyncProp.type.release) {\n // Release any resources created by transforms\n asyncProp.type.release(\n asyncProp.resolvedValue,\n asyncProp.type,\n this.component as Component\n );\n }\n }\n }\n\n /* Layer-facing props API */\n\n getOldProps(): ComponentT['props'] | typeof EMPTY_PROPS {\n return this.oldAsyncProps || this.oldProps || EMPTY_PROPS;\n }\n\n resetOldProps() {\n this.oldAsyncProps = null;\n this.oldProps = this.component.props;\n }\n\n // Checks if a prop is overridden\n hasAsyncProp(propName: string): boolean {\n return propName in this.asyncProps;\n }\n\n // Returns value of an overriden prop\n getAsyncProp(propName: string): any {\n const asyncProp = this.asyncProps[propName];\n return asyncProp && asyncProp.resolvedValue;\n }\n\n isAsyncPropLoading(propName?: string): boolean {\n if (propName) {\n const asyncProp = this.asyncProps[propName];\n return Boolean(\n asyncProp &&\n asyncProp.pendingLoadCount > 0 &&\n asyncProp.pendingLoadCount !== asyncProp.resolvedLoadCount\n );\n }\n for (const key in this.asyncProps) {\n if (this.isAsyncPropLoading(key)) {\n return true;\n }\n }\n return false;\n }\n\n // Without changing the original prop value, swap out the data resolution under the hood\n reloadAsyncProp(propName: string, value: any) {\n this._watchPromise(propName, Promise.resolve(value));\n }\n\n // Updates all async/overridden props (when new props come in)\n // Checks if urls have changed, starts loading, or removes override\n setAsyncProps(props: ComponentT['props']) {\n // NOTE: prop param and default values are only support for testing\n const resolvedValues = props[ASYNC_RESOLVED_SYMBOL] || {};\n const originalValues = props[ASYNC_ORIGINAL_SYMBOL] || props;\n const defaultValues = props[ASYNC_DEFAULTS_SYMBOL] || {};\n\n // TODO - use async props from the layer's prop types\n for (const propName in resolvedValues) {\n const value = resolvedValues[propName];\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n // Use transformed value\n resolvedValues[propName] = this.getAsyncProp(propName);\n }\n\n for (const propName in originalValues) {\n const value = originalValues[propName];\n // Makes sure a record exists for this prop\n this._createAsyncPropData(propName, defaultValues[propName]);\n this._updateAsyncProp(propName, value);\n }\n }\n\n /* Placeholder methods for subclassing */\n\n protected _fetch(propName: string, url: string): any {\n return null;\n }\n\n protected _onResolve(propName: string, value: any) {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n protected _onError(propName: string, error: Error) {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n // Intercept strings (URLs) and Promises and activates loading and prop rewriting\n private _updateAsyncProp(propName: string, value: any) {\n if (!this._didAsyncInputValueChange(propName, value)) {\n return;\n }\n\n // interpret value string as url and start a new load tracked by a promise\n if (typeof value === 'string') {\n value = this._fetch(propName, value);\n }\n\n // interprets promise and track the \"loading\"\n if (value instanceof Promise) {\n this._watchPromise(propName, value);\n return;\n }\n\n if (isAsyncIterable(value)) {\n this._resolveAsyncIterable(propName, value); // eslint-disable-line @typescript-eslint/no-floating-promises\n return;\n }\n\n // else, normal, non-async value. Just store value for now\n this._setPropValue(propName, value);\n }\n\n // Whenever async props are changing, we need to make a copy of oldProps\n // otherwise the prop rewriting will affect the value both in props and oldProps.\n // While the copy is relatively expensive, this only happens on load completion.\n private _freezeAsyncOldProps() {\n if (!this.oldAsyncProps && this.oldProps) {\n // 1. inherit all synchronous props from oldProps\n // 2. reconfigure the async prop descriptors to fixed values\n this.oldAsyncProps = Object.create(this.oldProps);\n for (const propName in this.asyncProps) {\n Object.defineProperty(this.oldAsyncProps, propName, {\n enumerable: true,\n value: this.oldProps[propName]\n });\n }\n }\n }\n\n // Checks if an input value actually changed (to avoid reloading/rewatching promises/urls)\n private _didAsyncInputValueChange(propName: string, value: any): boolean {\n // @ts-ignore\n const asyncProp: AsyncPropState = this.asyncProps[propName];\n if (value === asyncProp.resolvedValue || value === asyncProp.lastValue) {\n return false;\n }\n asyncProp.lastValue = value;\n return true;\n }\n\n // Set normal, non-async value\n private _setPropValue(propName: string, value: any) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n value = this._postProcessValue(asyncProp, value);\n asyncProp.resolvedValue = value;\n asyncProp.pendingLoadCount++;\n asyncProp.resolvedLoadCount = asyncProp.pendingLoadCount;\n }\n }\n\n // Set a just resolved async value, calling onAsyncPropUpdates if value changes asynchronously\n private _setAsyncPropValue(propName: string, value: any, loadCount: number) {\n // Only update if loadCount is larger or equal to resolvedLoadCount\n // otherwise a more recent load has already completed\n const asyncProp = this.asyncProps[propName];\n if (asyncProp && loadCount >= asyncProp.resolvedLoadCount && value !== undefined) {\n // Save the current value before overwriting so that diffProps can access both\n this._freezeAsyncOldProps();\n\n asyncProp.resolvedValue = value;\n asyncProp.resolvedLoadCount = loadCount;\n\n // Call callback to inform listener\n this.onAsyncPropUpdated(propName, value);\n }\n }\n\n // Tracks a promise, sets the prop when loaded, handles load count\n private _watchPromise(propName: string, promise: Promise) {\n const asyncProp = this.asyncProps[propName];\n if (asyncProp) {\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n promise\n .then(data => {\n data = this._postProcessValue(asyncProp, data);\n this._setAsyncPropValue(propName, data, loadCount);\n this._onResolve(propName, data);\n })\n .catch(error => {\n this._onError(propName, error);\n });\n }\n }\n\n private async _resolveAsyncIterable(\n propName: string,\n iterable: AsyncIterable\n ): Promise {\n if (propName !== 'data') {\n // we only support data as async iterable\n this._setPropValue(propName, iterable);\n return;\n }\n\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n return;\n }\n\n asyncProp.pendingLoadCount++;\n const loadCount = asyncProp.pendingLoadCount;\n let data: any[] = [];\n let count = 0;\n\n for await (const chunk of iterable) {\n // @ts-expect-error (2339) dataTransform is not decared in base component props\n const {dataTransform} = this.component.props;\n if (dataTransform) {\n data = dataTransform(chunk, data) as any[];\n } else {\n data = data.concat(chunk);\n }\n\n // Used by the default _dataDiff function\n Object.defineProperty(data, '__diff', {\n enumerable: false,\n value: [{startRow: count, endRow: data.length}]\n });\n\n count = data.length;\n this._setAsyncPropValue(propName, data, loadCount);\n }\n\n this._onResolve(propName, data);\n }\n\n // Give the app a chance to post process the loaded data\n private _postProcessValue(asyncProp, value: any) {\n const propType = asyncProp.type;\n if (propType) {\n if (propType.release) {\n propType.release(asyncProp.resolvedValue, propType, this.component);\n }\n if (propType.transform) {\n return propType.transform(value, propType, this.component);\n }\n }\n return value;\n }\n\n // Creating an asyncProp record if needed\n private _createAsyncPropData(propName: string, defaultValue: any) {\n const asyncProp = this.asyncProps[propName];\n if (!asyncProp) {\n // @ts-expect-error\n const propTypes = this.component && this.component.constructor._propTypes;\n // assert(defaultValue !== undefined);\n this.asyncProps[propName] = {\n type: propTypes && propTypes[propName],\n lastValue: null, // Supplied prop value (can be url/promise, not visible to layer)\n resolvedValue: defaultValue, // Resolved prop value (valid data, can be \"shown\" to layer)\n pendingLoadCount: 0, // How many loads have been issued\n resolvedLoadCount: 0 // Latest resolved load, (earlier loads will be ignored)\n };\n }\n }\n}\n","import ComponentState from '../lifecycle/component-state';\n\nimport type Layer from './layer';\nimport type AttributeManager from './attribute/attribute-manager';\nimport type Viewport from '../viewports/viewport';\nimport type UniformTransitionManager from './uniform-transition-manager';\n\nexport type ChangeFlags = {\n // Primary changeFlags, can be strings stating reason for change\n dataChanged: string | false | {startRow: number; endRow?: number}[];\n propsChanged: string | false;\n updateTriggersChanged: Record | false;\n extensionsChanged: boolean;\n viewportChanged: boolean;\n stateChanged: boolean;\n\n // Derived changeFlags\n propsOrDataChanged: boolean;\n somethingChanged: boolean;\n};\n\nexport default class LayerState extends ComponentState {\n attributeManager: AttributeManager | null;\n needsRedraw: boolean;\n needsUpdate: boolean;\n /**\n * Sublayers rendered in a previous cycle\n */\n subLayers: Layer[] | null;\n /**\n * If the layer is using the shared instancedPickingColors buffer\n */\n usesPickingColorCache: boolean;\n /**\n * Dirty flags of the layer's props and state\n */\n changeFlags!: ChangeFlags;\n\n /** The last viewport rendered by this layer */\n viewport?: Viewport;\n\n uniformTransitions!: UniformTransitionManager;\n /** Populated during uniform transition to replace user-supplied values */\n propsInTransition?: LayerT['props'];\n\n constructor({\n attributeManager,\n layer\n }: {\n attributeManager: AttributeManager | null;\n layer: LayerT;\n }) {\n super(layer);\n this.attributeManager = attributeManager;\n this.needsRedraw = true;\n this.needsUpdate = true;\n this.subLayers = null;\n this.usesPickingColorCache = false;\n }\n\n get layer(): LayerT {\n return this.component;\n }\n\n set layer(layer: LayerT) {\n this.component = layer;\n }\n\n /* Override base Component methods with Layer-specific handling */\n\n protected _fetch(propName, url: string) {\n const fetch = this.component.props.fetch;\n if (fetch) {\n return fetch(url, {propName, layer: this.layer});\n }\n return super._fetch(propName, url);\n }\n\n protected _onResolve(propName: string, value: any) {\n const onDataLoad = this.component.props.onDataLoad;\n if (propName === 'data' && onDataLoad) {\n onDataLoad(value, {propName, layer: this.layer});\n }\n }\n\n protected _onError(propName: string, error: Error) {\n this.layer.raiseError(error, `loading ${propName} of ${this.layer}`);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable react/no-direct-mutation-state */\nimport {COORDINATE_SYSTEM, OPERATION} from './constants';\nimport AttributeManager from './attribute/attribute-manager';\nimport UniformTransitionManager from './uniform-transition-manager';\nimport {diffProps, validateProps} from '../lifecycle/props';\nimport {LIFECYCLE, Lifecycle} from '../lifecycle/constants';\nimport {count} from '../utils/count';\nimport log from '../utils/log';\nimport debug from '../debug';\nimport GL from '@luma.gl/constants';\nimport {withParameters, setParameters} from '@luma.gl/core';\nimport assert from '../utils/assert';\nimport memoize from '../utils/memoize';\nimport {mergeShaders} from '../utils/shader';\nimport {projectPosition, getWorldPosition} from '../shaderlib/project/project-functions';\nimport typedArrayManager from '../utils/typed-array-manager';\n\nimport Component from '../lifecycle/component';\nimport LayerState, {ChangeFlags} from './layer-state';\n\nimport {worldToPixels} from '@math.gl/web-mercator';\n\nimport {load} from '@loaders.gl/core';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {CoordinateSystem} from './constants';\nimport type Attribute from './attribute/attribute';\nimport type {Model} from '@luma.gl/engine';\nimport type {PickingInfo, GetPickingInfoParams} from './picking/pick-info';\nimport type Viewport from '../viewports/viewport';\nimport type {NumericArray} from '../types/types';\nimport type {DefaultProps} from '../lifecycle/prop-types';\nimport type {LayerProps} from '../types/layer-props';\nimport type {LayerContext} from './layer-manager';\n\nconst TRACE_CHANGE_FLAG = 'layer.changeFlag';\nconst TRACE_INITIALIZE = 'layer.initialize';\nconst TRACE_UPDATE = 'layer.update';\nconst TRACE_FINALIZE = 'layer.finalize';\nconst TRACE_MATCHED = 'layer.matched';\n\nconst MAX_PICKING_COLOR_CACHE_SIZE = 2 ** 24 - 1;\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n// Only compare the same two viewports once\nconst areViewportsEqual = memoize(\n ({oldViewport, viewport}: {oldViewport: Viewport; viewport: Viewport}): boolean => {\n return oldViewport.equals(viewport);\n }\n);\n\nlet pickingColorCache = new Uint8ClampedArray(0);\n\nconst defaultProps: DefaultProps = {\n // data: Special handling for null, see below\n data: {type: 'data', value: EMPTY_ARRAY, async: true},\n dataComparator: {type: 'function', value: null, compare: false, optional: true},\n _dataDiff: {\n type: 'function',\n // @ts-ignore __diff is not defined on data\n value: data => data && data.__diff,\n compare: false,\n optional: true\n },\n dataTransform: {type: 'function', value: null, compare: false, optional: true},\n onDataLoad: {type: 'function', value: null, compare: false, optional: true},\n onError: {type: 'function', value: null, compare: false, optional: true},\n fetch: {\n type: 'function',\n value: (\n url: string,\n {\n propName,\n layer,\n loaders,\n loadOptions,\n signal\n }: {\n propName: string;\n layer: LayerT;\n loaders?: Loader[];\n loadOptions?: any;\n signal?: AbortSignal;\n }\n ) => {\n const {resourceManager} = layer.context;\n loadOptions = loadOptions || layer.getLoadOptions();\n loaders = loaders || layer.props.loaders;\n if (signal) {\n loadOptions = {\n ...loadOptions,\n fetch: {\n ...loadOptions?.fetch,\n signal\n }\n };\n }\n\n let inResourceManager = resourceManager.contains(url);\n\n if (!inResourceManager && !loadOptions) {\n // If there is no layer-specific load options, then attempt to cache this resource in the data manager\n resourceManager.add({resourceId: url, data: load(url, loaders), persistent: false});\n inResourceManager = true;\n }\n if (inResourceManager) {\n return resourceManager.subscribe({\n resourceId: url,\n onChange: data => layer.internalState?.reloadAsyncProp(propName, data),\n consumerId: layer.id,\n requestId: propName\n });\n }\n\n return load(url, loaders, loadOptions);\n },\n compare: false\n },\n updateTriggers: {}, // Update triggers: a core change detection mechanism in deck.gl\n\n visible: true,\n pickable: false,\n opacity: {type: 'number', min: 0, max: 1, value: 1},\n operation: OPERATION.DRAW,\n\n onHover: {type: 'function', value: null, compare: false, optional: true},\n onClick: {type: 'function', value: null, compare: false, optional: true},\n onDragStart: {type: 'function', value: null, compare: false, optional: true},\n onDrag: {type: 'function', value: null, compare: false, optional: true},\n onDragEnd: {type: 'function', value: null, compare: false, optional: true},\n\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n coordinateOrigin: {type: 'array', value: [0, 0, 0], compare: true},\n modelMatrix: {type: 'array', value: null, compare: true, optional: true},\n wrapLongitude: false,\n positionFormat: 'XYZ',\n colorFormat: 'RGBA',\n\n parameters: {type: 'object', value: {}, optional: true, compare: true},\n transitions: null,\n extensions: [],\n loaders: {type: 'array', value: [], optional: true, compare: true},\n\n // Offset depth based on layer index to avoid z-fighting.\n // Negative values pull layer towards the camera\n // https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm\n getPolygonOffset: {\n type: 'function',\n value: ({layerIndex}) => [0, -layerIndex * 100],\n compare: false\n },\n\n // Selection/Highlighting\n highlightedObjectIndex: null,\n autoHighlight: false,\n highlightColor: {type: 'accessor', value: [0, 0, 128, 128]}\n};\n\nexport type UpdateParameters = {\n props: LayerT['props'];\n oldProps: LayerT['props'];\n context: LayerContext;\n changeFlags: ChangeFlags;\n};\n\nexport default abstract class Layer extends Component> {\n static defaultProps = defaultProps;\n static layerName: string = 'Layer';\n\n internalState: LayerState | null = null;\n lifecycle: Lifecycle = LIFECYCLE.NO_STATE; // Helps track and debug the life cycle of the layers\n\n // context and state can technically be null before a layer is initialized/matched.\n // However, they are most extensively accessed in a layer's lifecycle methods, where they are always defined.\n // Checking for null state constantly in layer implementation is unnecessarily verbose.\n context!: LayerContext; // Will reference layer manager's context, contains state shared by layers\n state!: Record; // Will be set to the shared layer state object during layer matching\n\n parent: Layer | null = null;\n\n get root(): Layer {\n // eslint-disable-next-line\n let layer: Layer = this;\n while (layer.parent) {\n layer = layer.parent;\n }\n return layer;\n }\n\n toString(): string {\n const className = (this.constructor as typeof Layer).layerName || this.constructor.name;\n return `${className}({id: '${this.props.id}'})`;\n }\n\n // Public API for users\n\n /** Projects a point with current view state from the current layer's coordinate system to screen */\n project(xyz: number[]): number[] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n\n const worldPosition = getWorldPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem\n });\n const [x, y, z] = worldToPixels(worldPosition, viewport.pixelProjectionMatrix);\n return xyz.length === 2 ? [x, y] : [x, y, z];\n }\n\n /** Unprojects a screen pixel to the current view's default coordinate system\n Note: this does not reverse `project`. */\n unproject(xy: number[]): number[] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n return viewport.unproject(xy);\n }\n\n /** Projects a point with current view state from the current layer's coordinate system to the world space */\n projectPosition(\n xyz: number[],\n params?: {\n /** The viewport to use */\n viewport?: Viewport;\n /** The coordinate system that the supplied position is in. Default to the same as `coordinateSystem`. */\n fromCoordinateSystem?: CoordinateSystem;\n /** The coordinate origin that the supplied position is in. Default to the same as `coordinateOrigin`. */\n fromCoordinateOrigin?: [number, number, number];\n }\n ): [number, number, number] {\n assert(this.internalState);\n const viewport = this.internalState.viewport || this.context.viewport;\n\n return projectPosition(xyz, {\n viewport,\n modelMatrix: this.props.modelMatrix,\n coordinateOrigin: this.props.coordinateOrigin,\n coordinateSystem: this.props.coordinateSystem,\n ...params\n });\n }\n\n // Public API for custom layer implementation\n\n /** `true` if this layer renders other layers */\n get isComposite(): boolean {\n return false;\n }\n\n /** Updates selected state members and marks the layer for redraw */\n setState(partialState: any): void {\n this.setChangeFlags({stateChanged: true});\n Object.assign(this.state, partialState);\n this.setNeedsRedraw();\n }\n\n /** Sets the redraw flag for this layer, will trigger a redraw next animation frame */\n setNeedsRedraw(): void {\n if (this.internalState) {\n this.internalState.needsRedraw = true;\n }\n }\n\n /** Mark this layer as needs a deep update */\n setNeedsUpdate() {\n if (this.internalState) {\n this.context.layerManager.setNeedsUpdate(String(this));\n this.internalState.needsUpdate = true;\n }\n }\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n return this.internalState ? !this.internalState.isAsyncPropLoading() : false;\n }\n\n /** Returns true if using shader-based WGS84 longitude wrapping */\n get wrapLongitude(): boolean {\n return this.props.wrapLongitude;\n }\n\n /** Returns true if the layer is visible in the picking pass */\n isPickable(): boolean {\n return this.props.pickable && this.props.visible;\n }\n\n /** Returns an array of models used by this layer, can be overriden by layer subclass */\n getModels(): Model[] {\n return (this.state && (this.state.models || (this.state.model && [this.state.model]))) || [];\n }\n\n /** Update shader module parameters */\n setModuleParameters(moduleParameters: any): void {\n for (const model of this.getModels()) {\n model.updateModuleSettings(moduleParameters);\n }\n }\n\n /** Returns the attribute manager of this layer */\n getAttributeManager(): AttributeManager | null {\n return this.internalState && this.internalState.attributeManager;\n }\n\n /** Returns the most recent layer that matched to this state\n (When reacting to an async event, this layer may no longer be the latest) */\n getCurrentLayer(): Layer | null {\n return this.internalState && this.internalState.layer;\n }\n\n /** Returns the default parse options for async props */\n getLoadOptions(): any {\n return this.props.loadOptions;\n }\n\n use64bitPositions(): boolean {\n const {coordinateSystem} = this.props;\n return (\n coordinateSystem === COORDINATE_SYSTEM.DEFAULT ||\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n );\n }\n\n // Event handling\n onHover(info: PickingInfo, pickingEvent): boolean {\n if (this.props.onHover) {\n return this.props.onHover(info, pickingEvent) || false;\n }\n return false;\n }\n\n onClick(info: PickingInfo, pickingEvent): boolean {\n if (this.props.onClick) {\n return this.props.onClick(info, pickingEvent) || false;\n }\n return false;\n }\n\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n // @return {Array} - a black color\n nullPickingColor() {\n return [0, 0, 0];\n }\n\n // Returns the picking color that doesn't match any subfeature\n // Use if some graphics do not belong to any pickable subfeature\n encodePickingColor(i, target: number[] = []): number[] {\n target[0] = (i + 1) & 255;\n target[1] = ((i + 1) >> 8) & 255;\n target[2] = (((i + 1) >> 8) >> 8) & 255;\n return target;\n }\n\n // Returns the index corresponding to a picking color that doesn't match any subfeature\n // @param {Uint8Array} color - color array to be decoded\n // @return {Array} - the decoded picking color\n decodePickingColor(color) {\n assert(color instanceof Uint8Array);\n const [i1, i2, i3] = color;\n // 1 was added to seperate from no selection\n const index = i1 + i2 * 256 + i3 * 65536 - 1;\n return index;\n }\n\n /** Deduces number of instances. Intention is to support:\n - Explicit setting of numInstances\n - Auto-deduction for ES6 containers that define a size member\n - Auto-deduction for Classic Arrays via the built-in length attribute\n - Auto-deduction via arrays */\n getNumInstances(): number {\n // First Check if app has provided an explicit value\n if (Number.isFinite(this.props.numInstances)) {\n return this.props.numInstances as number;\n }\n\n // Second check if the layer has set its own value\n if (this.state && this.state.numInstances !== undefined) {\n return this.state.numInstances;\n }\n\n // Use container library to get a count for any ES6 container or object\n return count(this.props.data);\n }\n\n /** Buffer layout describes how many attribute values are packed for each data object\n The default (null) is one value each object.\n Some data formats (e.g. paths, polygons) have various length. Their buffer layout\n is in the form of [L0, L1, L2, ...] */\n getStartIndices(): NumericArray | null {\n // First Check if startIndices is provided as an explicit value\n if (this.props.startIndices) {\n return this.props.startIndices;\n }\n\n // Second check if the layer has set its own value\n if (this.state && this.state.startIndices) {\n return this.state.startIndices;\n }\n\n return null;\n }\n\n // Default implementation\n // Sublayers chould override this method to provide an accurate calculation of the bounds\n getBounds(): [number[], number[]] | null {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) return null;\n const {positions, instancePositions} = attributeManager.attributes;\n return (positions || instancePositions)?.getBounds();\n }\n\n // / LIFECYCLE METHODS - overridden by the layer subclasses\n\n /** Called once to set up the initial state. Layers can create WebGL resources here. */\n abstract initializeState(context: LayerContext): void;\n\n getShaders(shaders: any): any {\n for (const extension of this.props.extensions) {\n shaders = mergeShaders(shaders, extension.getShaders.call(this, extension));\n }\n return shaders;\n }\n\n /** Controls if updateState should be called. By default returns true if any prop has changed */\n shouldUpdateState(params: UpdateParameters>): boolean {\n return params.changeFlags.propsOrDataChanged;\n }\n\n /* eslint-disable-next-line complexity */\n /** Default implementation, all attributes will be invalidated and updated when data changes */\n updateState(params: UpdateParameters>): void {\n const attributeManager = this.getAttributeManager();\n const {dataChanged} = params.changeFlags;\n if (dataChanged && attributeManager) {\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged) {\n attributeManager.invalidateAll(dataRange);\n }\n } else {\n attributeManager.invalidateAll();\n }\n }\n\n const {props, oldProps} = params;\n const neededPickingBuffer =\n Number.isInteger(oldProps.highlightedObjectIndex) || oldProps.pickable;\n const needPickingBuffer = Number.isInteger(props.highlightedObjectIndex) || props.pickable;\n if (neededPickingBuffer !== needPickingBuffer && attributeManager) {\n const {pickingColors, instancePickingColors} = attributeManager.attributes;\n const pickingColorsAttribute = pickingColors || instancePickingColors;\n if (pickingColorsAttribute) {\n if (needPickingBuffer && pickingColorsAttribute.constant) {\n pickingColorsAttribute.constant = false;\n attributeManager.invalidate(pickingColorsAttribute.id);\n }\n if (!pickingColorsAttribute.value && !needPickingBuffer) {\n pickingColorsAttribute.constant = true;\n pickingColorsAttribute.value = [0, 0, 0];\n }\n }\n }\n }\n\n /** Called once when layer is no longer matched and state will be discarded. Layers can destroy WebGL resources here. */\n finalizeState(context: LayerContext): void {\n for (const model of this.getModels()) {\n model.delete();\n }\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.finalize();\n }\n if (this.context) {\n this.context.resourceManager.unsubscribe({consumerId: this.id});\n }\n if (this.internalState) {\n this.internalState.uniformTransitions.clear();\n this.internalState.finalize();\n }\n }\n\n // If state has a model, draw it with supplied uniforms\n draw(opts) {\n for (const model of this.getModels()) {\n model.draw(opts);\n }\n }\n\n // called to populate the info object that is passed to the event handler\n // @return null to cancel event\n getPickingInfo({info, mode, sourceLayer}: GetPickingInfoParams) {\n const {index} = info;\n\n if (index >= 0) {\n // If props.data is an indexable array, get the object\n if (Array.isArray(this.props.data)) {\n info.object = this.props.data[index];\n }\n }\n\n return info;\n }\n\n // END LIFECYCLE METHODS\n\n // / INTERNAL METHODS - called by LayerManager, DeckRenderer and DeckPicker\n\n /** (Internal) Propagate an error event through the system */\n raiseError(error: Error, message: string): void {\n if (message) {\n error.message = `${message}: ${error.message}`;\n }\n if (!this.props.onError?.(error)) {\n this.context?.onError?.(error, this);\n }\n }\n\n /** (Internal) Checks if this layer needs redraw */\n getNeedsRedraw(\n opts: {\n /** Reset redraw flags to false after the check */\n clearRedrawFlags: boolean;\n } = {clearRedrawFlags: false}\n ): string | false {\n return this._getNeedsRedraw(opts);\n }\n\n /** (Internal) Checks if this layer needs a deep update */\n needsUpdate(): boolean {\n if (!this.internalState) {\n return false;\n }\n\n // Call subclass lifecycle method\n return (\n this.internalState.needsUpdate ||\n this.hasUniformTransition() ||\n this.shouldUpdateState(this._getUpdateParams())\n );\n // End lifecycle method\n }\n\n /** Checks if this layer has ongoing uniform transition */\n hasUniformTransition(): boolean {\n return this.internalState?.uniformTransitions.active || false;\n }\n\n /** Called when this layer is rendered into the given viewport */\n activateViewport(viewport: Viewport): void {\n if (!this.internalState) {\n return;\n }\n\n const oldViewport = this.internalState.viewport;\n this.internalState.viewport = viewport;\n\n if (!oldViewport || !areViewportsEqual({oldViewport, viewport})) {\n this.setChangeFlags({viewportChanged: true});\n\n if (this.isComposite) {\n if (this.needsUpdate()) {\n // Composite layers may add/remove sublayers on viewport change\n // Because we cannot change the layers list during a draw cycle, we don't want to update sublayers right away\n // This will not call update immediately, but mark the layerManager as needs update on the next frame\n this.setNeedsUpdate();\n }\n } else {\n this._update();\n }\n }\n }\n\n /** Default implementation of attribute invalidation, can be redefined */\n protected invalidateAttribute(name = 'all'): void {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n\n if (name === 'all') {\n attributeManager.invalidateAll();\n } else {\n attributeManager.invalidate(name);\n }\n }\n\n /** Send updated attributes to the WebGL model */\n protected updateAttributes(changedAttributes: {[id: string]: Attribute}) {\n for (const model of this.getModels()) {\n this._setModelAttributes(model, changedAttributes);\n }\n }\n\n /** Recalculate any attributes if needed */\n protected _updateAttributes(): void {\n const attributeManager = this.getAttributeManager();\n if (!attributeManager) {\n return;\n }\n const props = this.props;\n\n // Figure out data length\n const numInstances = this.getNumInstances();\n const startIndices = this.getStartIndices();\n\n attributeManager.update({\n data: props.data,\n numInstances,\n startIndices,\n props,\n transitions: props.transitions,\n // @ts-ignore (TS2339) property attribute is not present on some acceptable data types\n buffers: props.data.attributes,\n context: this\n });\n\n const changedAttributes = attributeManager.getChangedAttributes({clearChangedFlags: true});\n this.updateAttributes(changedAttributes);\n }\n\n /** Update attribute transitions. This is called in drawLayer, no model updates required. */\n private _updateAttributeTransition() {\n const attributeManager = this.getAttributeManager();\n if (attributeManager) {\n attributeManager.updateTransition();\n }\n }\n\n /** Update uniform (prop) transitions. This is called in updateState, may result in model updates. */\n private _updateUniformTransition(): Layer['props'] {\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n const {uniformTransitions} = this.internalState;\n if (uniformTransitions.active) {\n // clone props\n const propsInTransition = uniformTransitions.update();\n const props = Object.create(this.props);\n for (const key in propsInTransition) {\n Object.defineProperty(props, key, {value: propsInTransition[key]});\n }\n return props;\n }\n return this.props;\n }\n\n /** Updater for the automatically populated instancePickingColors attribute */\n protected calculateInstancePickingColors(\n attribute: Attribute,\n {numInstances}: {numInstances: number}\n ) {\n if (attribute.constant) {\n return;\n }\n\n // calculateInstancePickingColors always generates the same sequence.\n // pickingColorCache saves the largest generated sequence for reuse\n const cacheSize = Math.floor(pickingColorCache.length / 3);\n\n // Record when using the picking buffer cache, so that layers can always point at the most recently allocated cache\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.usesPickingColorCache = true;\n\n if (cacheSize < numInstances) {\n if (numInstances > MAX_PICKING_COLOR_CACHE_SIZE) {\n log.warn(\n 'Layer has too many data objects. Picking might not be able to distinguish all objects.'\n )();\n }\n\n pickingColorCache = typedArrayManager.allocate(pickingColorCache, numInstances, {\n size: 3,\n copy: true,\n maxCount: Math.max(numInstances, MAX_PICKING_COLOR_CACHE_SIZE)\n });\n\n // If the attribute is larger than the cache, resize the cache and populate the missing chunk\n const newCacheSize = Math.floor(pickingColorCache.length / 3);\n const pickingColor = [];\n for (let i = cacheSize; i < newCacheSize; i++) {\n this.encodePickingColor(i, pickingColor);\n pickingColorCache[i * 3 + 0] = pickingColor[0];\n pickingColorCache[i * 3 + 1] = pickingColor[1];\n pickingColorCache[i * 3 + 2] = pickingColor[2];\n }\n }\n\n attribute.value = pickingColorCache.subarray(0, numInstances * 3);\n }\n\n /** Apply changed attributes to */\n protected _setModelAttributes(\n model: Model,\n changedAttributes: {\n [id: string]: Attribute;\n }\n ) {\n const attributeManager = this.getAttributeManager();\n // @ts-ignore luma.gl type issue\n const excludeAttributes = model.userData.excludeAttributes || {};\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const shaderAttributes = attributeManager.getShaderAttributes(\n changedAttributes,\n excludeAttributes\n );\n\n model.setAttributes(shaderAttributes);\n }\n\n /** (Internal) Sets the picking color at the specified index to null picking color. Used for multi-depth picking.\n This method may be overriden by layer implementations */\n disablePickingIndex(objectIndex: number): void {\n this._disablePickingIndex(objectIndex);\n }\n\n // TODO - simplify subclassing interface\n protected _disablePickingIndex(objectIndex: number): void {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const {pickingColors, instancePickingColors} = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n\n const start = colors.getVertexOffset(objectIndex);\n const end = colors.getVertexOffset(objectIndex + 1);\n\n // Fill the sub buffer with 0s\n colors.buffer.subData({\n data: new Uint8Array(end - start),\n offset: start // 1 byte per element\n });\n }\n\n /** (Internal) Re-enable all picking indices after multi-depth picking */\n restorePickingColors(): void {\n // @ts-ignore (TS2531) this method is only called internally with attributeManager defined\n const {pickingColors, instancePickingColors} = this.getAttributeManager().attributes;\n const colors = pickingColors || instancePickingColors;\n if (!colors) {\n return;\n }\n // The picking color cache may have been freed and then reallocated. This ensures we read from the currently allocated cache.\n if (\n // @ts-ignore (TS2531) this method is only called internally with internalState defined\n this.internalState.usesPickingColorCache &&\n (colors.value as Uint8ClampedArray).buffer !== pickingColorCache.buffer\n ) {\n colors.value = pickingColorCache.subarray(0, (colors.value as Uint8ClampedArray).length);\n }\n colors.updateSubBuffer({startOffset: 0});\n }\n\n /* eslint-disable max-statements */\n /* (Internal) Called by layer manager when a new layer is found */\n _initialize() {\n assert(!this.internalState); // finalized layer cannot be reused\n assert(Number.isFinite(this.props.coordinateSystem)); // invalid coordinateSystem\n\n debug(TRACE_INITIALIZE, this);\n\n const attributeManager = this._getAttributeManager();\n\n if (attributeManager) {\n // All instanced layers get instancePickingColors attribute by default\n // Their shaders can use it to render a picking scene\n // TODO - this slightly slows down non instanced layers\n attributeManager.addInstanced({\n instancePickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // Updaters are always called with `this` pointing to the layer\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateInstancePickingColors\n }\n });\n }\n\n this.internalState = new LayerState({\n attributeManager,\n layer: this\n });\n this._clearChangeFlags(); // populate this.internalState.changeFlags\n\n this.state = {};\n // for backwards compatibility with older layers\n // TODO - remove in next release\n /* eslint-disable accessor-pairs */\n Object.defineProperty(this.state, 'attributeManager', {\n get: () => {\n log.deprecated('layer.state.attributeManager', 'layer.getAttributeManager()')();\n return attributeManager;\n }\n });\n /* eslint-enable accessor-pairs */\n\n this.internalState.layer = this;\n this.internalState.uniformTransitions = new UniformTransitionManager(this.context.timeline);\n this.internalState.onAsyncPropUpdated = this._onAsyncPropUpdated.bind(this);\n\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n\n // Call subclass lifecycle methods\n this.initializeState(this.context);\n\n // Initialize extensions\n for (const extension of this.props.extensions) {\n extension.initializeState.call(this, this.context, extension);\n }\n // End subclass lifecycle methods\n\n // initializeState callback tends to clear state\n this.setChangeFlags({\n dataChanged: 'init',\n propsChanged: 'init',\n viewportChanged: true,\n extensionsChanged: true\n });\n\n this._update();\n }\n\n /** (Internal) Called by layer manager to transfer state from an old layer */\n _transferState(oldLayer: Layer): void {\n debug(TRACE_MATCHED, this, this === oldLayer);\n\n const {state, internalState} = oldLayer;\n\n if (this === oldLayer) {\n return;\n }\n\n // Move internalState\n this.internalState = internalState as LayerState;\n this.internalState.layer = this;\n\n // Move state\n this.state = state;\n // We keep the state ref on old layers to support async actions\n // oldLayer.state = null;\n\n // Ensure any async props are updated\n this.internalState.setAsyncProps(this.props);\n\n this._diffProps(this.props, this.internalState.getOldProps() as Layer['props']);\n }\n\n /** (Internal) Called by layer manager when a new layer is added or an existing layer is matched with a new instance */\n _update(): void {\n // Call subclass lifecycle method\n const stateNeedsUpdate = this.needsUpdate();\n // End lifecycle method\n debug(TRACE_UPDATE, this, stateNeedsUpdate);\n\n if (!stateNeedsUpdate) {\n return;\n }\n\n const currentProps = this.props;\n const context = this.context;\n const internalState = this.internalState as LayerState;\n\n const currentViewport = context.viewport;\n const propsInTransition = this._updateUniformTransition();\n internalState.propsInTransition = propsInTransition;\n // Overwrite this.context.viewport during update to use the last activated viewport on this layer\n // In multi-view applications, a layer may only be drawn in one of the views\n // Which would make the \"active\" viewport different from the shared context\n context.viewport = internalState.viewport || currentViewport;\n // Overwrite this.props during update to use in-transition prop values\n this.props = propsInTransition;\n\n try {\n const updateParams = this._getUpdateParams();\n const oldModels = this.getModels();\n\n // Safely call subclass lifecycle methods\n if (context.gl) {\n this.updateState(updateParams);\n } else {\n try {\n this.updateState(updateParams);\n } catch (error) {\n // ignore error if gl context is missing\n }\n }\n // Execute extension updates\n for (const extension of this.props.extensions) {\n extension.updateState.call(this, updateParams, extension);\n }\n\n const modelChanged = this.getModels()[0] !== oldModels[0];\n this._postUpdate(updateParams, modelChanged);\n // End subclass lifecycle methods\n } finally {\n // Restore shared context\n context.viewport = currentViewport;\n this.props = currentProps;\n this._clearChangeFlags();\n internalState.needsUpdate = false;\n internalState.resetOldProps();\n }\n }\n /* eslint-enable max-statements */\n\n /** (Internal) Called by manager when layer is about to be disposed \n Note: not guaranteed to be called on application shutdown */\n _finalize(): void {\n debug(TRACE_FINALIZE, this);\n\n // Call subclass lifecycle method\n this.finalizeState(this.context);\n // Finalize extensions\n for (const extension of this.props.extensions) {\n extension.finalizeState.call(this, extension);\n }\n }\n\n // Calculates uniforms\n _drawLayer({\n moduleParameters = null,\n uniforms = {},\n parameters = {}\n }: {\n moduleParameters: any;\n uniforms: any;\n parameters: any;\n }): void {\n this._updateAttributeTransition();\n\n const currentProps = this.props;\n const context = this.context;\n // Overwrite this.props during redraw to use in-transition prop values\n // `internalState.propsInTransition` could be missing if `updateState` failed\n // @ts-ignore (TS2339) internalState is alwasy defined when this method is called\n this.props = this.internalState.propsInTransition || currentProps;\n\n const opacity = this.props.opacity;\n // apply gamma to opacity to make it visually \"linear\"\n uniforms.opacity = Math.pow(opacity, 1 / 2.2);\n\n try {\n // TODO/ib - hack move to luma Model.draw\n if (moduleParameters) {\n this.setModuleParameters(moduleParameters);\n }\n\n // Apply polygon offset to avoid z-fighting\n // TODO - move to draw-layers\n const {getPolygonOffset} = this.props;\n const offsets = (getPolygonOffset && getPolygonOffset(uniforms)) || [0, 0];\n\n setParameters(context.gl, {polygonOffset: offsets});\n\n // Call subclass lifecycle method\n withParameters(context.gl, parameters, () => {\n const opts = {moduleParameters, uniforms, parameters, context};\n\n // extensions\n for (const extension of this.props.extensions) {\n extension.draw.call(this, opts, extension);\n }\n\n this.draw(opts);\n });\n } finally {\n this.props = currentProps;\n }\n\n // End lifecycle method\n }\n\n // Helper methods\n /** Returns the current change flags */\n getChangeFlags(): ChangeFlags | undefined {\n return this.internalState?.changeFlags;\n }\n\n /* eslint-disable complexity */\n /** Dirty some change flags, will be handled by updateLayer */\n setChangeFlags(flags: Partial): void {\n if (!this.internalState) {\n return;\n }\n const {changeFlags} = this.internalState;\n\n /* eslint-disable no-fallthrough, max-depth */\n for (const key in flags) {\n if (flags[key]) {\n let flagChanged = false;\n switch (key) {\n case 'dataChanged':\n // changeFlags.dataChanged may be `false`, a string (reason) or an array of ranges\n const dataChangedReason = flags[key];\n const prevDataChangedReason = changeFlags[key];\n if (dataChangedReason && Array.isArray(prevDataChangedReason)) {\n // Merge partial updates\n changeFlags.dataChanged = Array.isArray(dataChangedReason)\n ? prevDataChangedReason.concat(dataChangedReason)\n : dataChangedReason;\n flagChanged = true;\n }\n\n default:\n if (!changeFlags[key]) {\n changeFlags[key] = flags[key];\n flagChanged = true;\n }\n }\n if (flagChanged) {\n debug(TRACE_CHANGE_FLAG, this, key, flags);\n }\n }\n }\n /* eslint-enable no-fallthrough, max-depth */\n\n // Update composite flags\n const propsOrDataChanged = Boolean(\n changeFlags.dataChanged ||\n changeFlags.updateTriggersChanged ||\n changeFlags.propsChanged ||\n changeFlags.extensionsChanged\n );\n changeFlags.propsOrDataChanged = propsOrDataChanged;\n changeFlags.somethingChanged =\n propsOrDataChanged || changeFlags.viewportChanged || changeFlags.stateChanged;\n }\n /* eslint-enable complexity */\n\n /** Clear all changeFlags, typically after an update */\n private _clearChangeFlags(): void {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this.internalState.changeFlags = {\n dataChanged: false,\n propsChanged: false,\n updateTriggersChanged: false,\n viewportChanged: false,\n stateChanged: false,\n extensionsChanged: false,\n propsOrDataChanged: false,\n somethingChanged: false\n };\n }\n\n /** Compares the layers props with old props from a matched older layer\n and extracts change flags that describe what has change so that state\n can be update correctly with minimal effort */\n private _diffProps(newProps: Layer['props'], oldProps: Layer['props']) {\n const changeFlags = diffProps(newProps, oldProps);\n\n // iterate over changedTriggers\n if (changeFlags.updateTriggersChanged) {\n for (const key in changeFlags.updateTriggersChanged) {\n if (changeFlags.updateTriggersChanged[key]) {\n this.invalidateAttribute(key);\n }\n }\n }\n\n // trigger uniform transitions\n if (changeFlags.transitionsChanged) {\n for (const key in changeFlags.transitionsChanged) {\n // prop changed and transition is enabled\n // @ts-ignore (TS2531) internalState is always defined when this method is called\n this.internalState.uniformTransitions.add(\n key,\n oldProps[key],\n newProps[key],\n newProps.transitions?.[key]\n );\n }\n }\n\n return this.setChangeFlags(changeFlags);\n }\n\n /** (Internal) called by layer manager to perform extra props validation (in development only) */\n validateProps(): void {\n validateProps(this.props);\n }\n\n /** (Internal) Called by deck picker when the hovered object changes to update the auto highlight */\n updateAutoHighlight(info: PickingInfo): void {\n if (this.props.autoHighlight && !Number.isInteger(this.props.highlightedObjectIndex)) {\n this._updateAutoHighlight(info);\n }\n }\n\n // May be overriden by subclasses\n\n // TODO - simplify subclassing interface\n /** Update picking module parameters to highlight the hovered object */\n protected _updateAutoHighlight(info: PickingInfo): void {\n const pickingModuleParameters: any = {\n pickingSelectedColor: info.picked ? info.color : null\n };\n const {highlightColor} = this.props;\n if (info.picked && typeof highlightColor === 'function') {\n pickingModuleParameters.pickingHighlightColor = highlightColor(info);\n }\n this.setModuleParameters(pickingModuleParameters);\n // setModuleParameters does not trigger redraw\n this.setNeedsRedraw();\n }\n\n /** Create new attribute manager */\n protected _getAttributeManager(): AttributeManager | null {\n const context = this.context;\n return new AttributeManager(context.gl, {\n id: this.props.id,\n stats: context.stats,\n timeline: context.timeline\n });\n }\n\n // Private methods\n\n /** Called after updateState to perform common tasks */\n protected _postUpdate(updateParams: UpdateParameters>, forceUpdate: boolean) {\n const {props, oldProps} = updateParams;\n\n this.setNeedsRedraw();\n // Check if attributes need recalculation\n this._updateAttributes();\n\n // Note: Automatic instance count update only works for single layers\n const {model} = this.state;\n model?.setInstanceCount(this.getNumInstances());\n\n // Set picking module parameters to match props\n const {autoHighlight, highlightedObjectIndex, highlightColor} = props;\n if (\n forceUpdate ||\n oldProps.autoHighlight !== autoHighlight ||\n oldProps.highlightedObjectIndex !== highlightedObjectIndex ||\n oldProps.highlightColor !== highlightColor\n ) {\n const parameters: any = {};\n if (!autoHighlight) {\n parameters.pickingSelectedColor = null;\n }\n if (Array.isArray(highlightColor)) {\n parameters.pickingHighlightColor = highlightColor;\n }\n\n // highlightedObjectIndex will overwrite any settings from auto highlighting.\n if (Number.isInteger(highlightedObjectIndex)) {\n parameters.pickingSelectedColor =\n Number.isFinite(highlightedObjectIndex) && (highlightedObjectIndex as number) >= 0\n ? this.encodePickingColor(highlightedObjectIndex)\n : null;\n }\n\n this.setModuleParameters(parameters);\n }\n }\n\n private _getUpdateParams(): UpdateParameters> {\n return {\n props: this.props,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n oldProps: this.internalState.getOldProps() as PropsT,\n context: this.context,\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n changeFlags: this.internalState.changeFlags\n };\n }\n\n /** Checks state of attributes and model */\n private _getNeedsRedraw(opts: {clearRedrawFlags: boolean}): string | false {\n // this method may be called by the render loop as soon a the layer\n // has been created, so guard against uninitialized state\n if (!this.internalState) {\n return false;\n }\n\n let redraw: string | false = false;\n redraw = redraw || (this.internalState.needsRedraw && this.id);\n this.internalState.needsRedraw = this.internalState.needsRedraw && !opts.clearRedrawFlags;\n\n // TODO - is attribute manager needed? - Model should be enough.\n const attributeManager = this.getAttributeManager();\n const attributeManagerNeedsRedraw = attributeManager\n ? attributeManager.getNeedsRedraw(opts)\n : false;\n redraw = redraw || attributeManagerNeedsRedraw;\n\n return redraw;\n }\n\n /** Callback when asyn prop is loaded */\n private _onAsyncPropUpdated(): void {\n // @ts-ignore TS2531 this method can only be called internally with internalState assigned\n this._diffProps(this.props, this.internalState.getOldProps());\n this.setNeedsUpdate();\n }\n}\n","export const LIFECYCLE = {\n NO_STATE: 'Awaiting state',\n MATCHED: 'Matched. State transferred from previous layer',\n INITIALIZED: 'Initialized',\n AWAITING_GC: 'Discarded. Awaiting garbage collection',\n AWAITING_FINALIZATION: 'No longer matched. Awaiting garbage collection',\n FINALIZED: 'Finalized! Awaiting garbage collection'\n} as const;\n\nexport type Lifecycle = typeof LIFECYCLE[keyof typeof LIFECYCLE];\n\n/* Secret props keys */\n// Symbols are non-enumerable by default, does not show in for...in or Object.keys\n// but are copied with Object.assign ¯\\_(ツ)_/¯\n// Supported everywhere except IE11, can be polyfilled with core-js\nexport const COMPONENT_SYMBOL: unique symbol = Symbol.for('component');\nexport const ASYNC_DEFAULTS_SYMBOL: unique symbol = Symbol.for('asyncPropDefaults');\nexport const ASYNC_ORIGINAL_SYMBOL: unique symbol = Symbol.for('asyncPropOriginal');\nexport const ASYNC_RESOLVED_SYMBOL: unique symbol = Symbol.for('asyncPropResolved');\n","import {COMPONENT_SYMBOL} from './constants';\nimport {PropType} from './prop-types';\n\nexport function validateProps(props) {\n const propTypes = getPropTypes(props);\n\n for (const propName in propTypes) {\n const propType = propTypes[propName];\n const {validate} = propType;\n if (validate && !validate(props[propName], propType)) {\n throw new Error(`Invalid prop ${propName}: ${props[propName]}`);\n }\n }\n}\n\n// Returns an object with \"change flags\", either false or strings indicating reason for change\nexport function diffProps(\n props,\n oldProps\n): {\n dataChanged: string | false | {startRow: number; endRow?: number}[];\n propsChanged: string | false;\n updateTriggersChanged: Record | false;\n extensionsChanged: boolean;\n transitionsChanged: Record | false;\n} {\n // First check if any props have changed (ignore props that will be examined separately)\n const propsChangedReason = compareProps({\n newProps: props,\n oldProps,\n propTypes: getPropTypes(props),\n ignoreProps: {data: null, updateTriggers: null, extensions: null, transitions: null}\n });\n\n // Now check if any data related props have changed\n const dataChangedReason = diffDataProps(props, oldProps);\n\n // Check update triggers to determine if any attributes need regeneration\n // Note - if data has changed, all attributes will need regeneration, so skip this step\n let updateTriggersChangedReason: false | string | Record = false;\n if (!dataChangedReason) {\n updateTriggersChangedReason = diffUpdateTriggers(props, oldProps);\n }\n\n return {\n dataChanged: dataChangedReason,\n propsChanged: propsChangedReason,\n updateTriggersChanged: updateTriggersChangedReason,\n extensionsChanged: diffExtensions(props, oldProps),\n transitionsChanged: diffTransitions(props, oldProps)\n };\n}\n\nfunction diffTransitions(props, oldProps): false | Record {\n if (!props.transitions) {\n return false;\n }\n const result: Record = {};\n const propTypes = getPropTypes(props);\n let changed = false;\n\n for (const key in props.transitions) {\n const propType = propTypes[key];\n const type = propType && propType.type;\n const isTransitionable = type === 'number' || type === 'color' || type === 'array';\n if (isTransitionable && comparePropValues(props[key], oldProps[key], propType)) {\n result[key] = true;\n changed = true;\n }\n }\n return changed ? result : false;\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * @param {Object} opt.oldProps - object with old key/value pairs\n * @param {Object} opt.newProps - object with new key/value pairs\n * @param {Object} opt.ignoreProps={} - object, keys that should not be compared\n * @returns {null|String} - null when values of all keys are strictly equal.\n * if unequal, returns a string explaining what changed.\n */\n/* eslint-disable max-statements, max-depth, complexity */\n/*\n * Note: for better performance, this function assumes that both oldProps and newProps\n inherit the same prototype (defaultProps). That is, if neither object contains own\n property , assume `oldProps.` and `newProps.` are equal.\n */\nexport function compareProps({\n newProps,\n oldProps,\n ignoreProps = {},\n propTypes = {},\n triggerName = 'props'\n}): string | false {\n // shallow equality => deep equality\n if (oldProps === newProps) {\n return false;\n }\n\n // TODO - do we need these checks? Should never happen...\n if (typeof newProps !== 'object' || newProps === null) {\n return `${triggerName} changed shallowly`;\n }\n\n if (typeof oldProps !== 'object' || oldProps === null) {\n return `${triggerName} changed shallowly`;\n }\n\n // Compare explicitly defined new props against old/default values\n for (const key of Object.keys(newProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in oldProps)) {\n return `${triggerName}.${key} added`;\n }\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n\n // Test if any old props have been dropped\n for (const key of Object.keys(oldProps)) {\n if (!(key in ignoreProps)) {\n if (!(key in newProps)) {\n return `${triggerName}.${key} dropped`;\n }\n if (!Object.hasOwnProperty.call(newProps, key)) {\n // Compare dropped old prop against default value\n const changed = comparePropValues(newProps[key], oldProps[key], propTypes[key]);\n if (changed) {\n return `${triggerName}.${key} ${changed}`;\n }\n }\n }\n }\n\n return false;\n}\n/* eslint-enable max-statements, max-depth, complexity */\n\n// HELPERS\nfunction comparePropValues(newProp, oldProp, propType) {\n // If prop type has an equal function, invoke it\n let equal = propType && propType.equal;\n if (equal && !equal(newProp, oldProp, propType)) {\n return 'changed deeply';\n }\n\n if (!equal) {\n // If object has an equals function, invoke it\n equal = newProp && oldProp && newProp.equals;\n if (equal && !equal.call(newProp, oldProp)) {\n return 'changed deeply';\n }\n }\n\n if (!equal && oldProp !== newProp) {\n return 'changed shallowly';\n }\n\n return null;\n}\n\n// The comparison of the data prop requires special handling\n// the dataComparator should be used if supplied\nfunction diffDataProps(props, oldProps): string | false | {startRow: number; endRow?: number}[] {\n if (oldProps === null) {\n return 'oldProps is null, initial diff';\n }\n\n let dataChanged: string | false | {startRow: number; endRow?: number}[] = false;\n // Support optional app defined comparison of data\n const {dataComparator, _dataDiff} = props;\n if (dataComparator) {\n if (!dataComparator(props.data, oldProps.data)) {\n dataChanged = 'Data comparator detected a change';\n }\n // Otherwise, do a shallow equal on props\n } else if (props.data !== oldProps.data) {\n dataChanged = 'A new data container was supplied';\n }\n if (dataChanged && _dataDiff) {\n dataChanged = _dataDiff(props.data, oldProps.data) || dataChanged;\n }\n\n return dataChanged;\n}\n\n// Checks if any update triggers have changed\n// also calls callback to invalidate attributes accordingly.\nfunction diffUpdateTriggers(props, oldProps): Record | false {\n if (oldProps === null) {\n return {all: true};\n }\n\n // If the 'all' updateTrigger fires, ignore testing others\n if ('all' in props.updateTriggers) {\n const diffReason = diffUpdateTrigger(props, oldProps, 'all');\n if (diffReason) {\n return {all: true};\n }\n }\n\n const reason: Record = {};\n let changed = false;\n // If the 'all' updateTrigger didn't fire, need to check all others\n for (const triggerName in props.updateTriggers) {\n if (triggerName !== 'all') {\n const diffReason = diffUpdateTrigger(props, oldProps, triggerName);\n if (diffReason) {\n reason[triggerName] = true;\n changed = true;\n }\n }\n }\n\n return changed ? reason : false;\n}\n\n// Returns true if any extensions have changed\nfunction diffExtensions(props, oldProps): boolean {\n if (oldProps === null) {\n return true;\n }\n\n const oldExtensions = oldProps.extensions;\n const {extensions} = props;\n\n if (extensions === oldExtensions) {\n return false;\n }\n if (!oldExtensions || !extensions) {\n return true;\n }\n if (extensions.length !== oldExtensions.length) {\n return true;\n }\n for (let i = 0; i < extensions.length; i++) {\n if (!extensions[i].equals(oldExtensions[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction diffUpdateTrigger(props, oldProps, triggerName) {\n let newTriggers = props.updateTriggers[triggerName];\n newTriggers = newTriggers === undefined || newTriggers === null ? {} : newTriggers;\n let oldTriggers = oldProps.updateTriggers[triggerName];\n oldTriggers = oldTriggers === undefined || oldTriggers === null ? {} : oldTriggers;\n const diffReason = compareProps({\n oldProps: oldTriggers,\n newProps: newTriggers,\n triggerName\n });\n return diffReason;\n}\n\nfunction getPropTypes(props): Record {\n const layer = props[COMPONENT_SYMBOL];\n const LayerType = layer && layer.constructor;\n return LayerType ? LayerType._propTypes : {};\n}\n","import GL from '@luma.gl/constants';\nimport Pass from './pass';\nimport {clear, setParameters, withParameters, cssToDeviceRatio} from '@luma.gl/core';\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport type Viewport from '../viewports/viewport';\nimport type View from '../views/view';\nimport type Layer from '../lib/layer';\nimport type {Effect} from '../lib/effect';\n\nexport type Rect = {x: number; y: number; width: number; height: number};\n\nexport type LayersPassRenderOptions = {\n target?: Framebuffer;\n pass: string;\n layers: Layer[];\n viewports: Viewport[];\n onViewportActive: (viewport: Viewport) => void;\n cullRect?: Rect;\n views?: Record;\n effects?: Effect[];\n /** If true, recalculates render index (z) from 0. Set to false if a stack of layers are rendered in multiple passes. */\n clearStack?: boolean;\n clearCanvas?: boolean;\n layerFilter?: (context: FilterContext) => boolean;\n moduleParameters?: any;\n};\n\ntype DrawLayerParameters = {\n shouldDrawLayer: boolean;\n layerRenderIndex?: number;\n moduleParameters?: any;\n layerParameters?: any;\n};\n\nexport type FilterContext = {\n layer: Layer;\n viewport: Viewport;\n isPicking: boolean;\n renderPass: string;\n cullRect?: Rect;\n};\n\nexport type RenderStats = {\n totalCount: number;\n visibleCount: number;\n compositeCount: number;\n pickableCount: number;\n};\n\nexport default class LayersPass extends Pass {\n _lastRenderIndex: number = -1;\n\n render(options: LayersPassRenderOptions): any {\n const gl = this.gl;\n\n setParameters(gl, {framebuffer: options.target});\n return this._drawLayers(options);\n }\n\n // Draw a list of layers in a list of viewports\n private _drawLayers(options: LayersPassRenderOptions) {\n const {\n target,\n moduleParameters,\n viewports,\n views,\n onViewportActive,\n clearStack = true,\n clearCanvas = true\n } = options;\n options.pass = options.pass || 'unknown';\n\n const gl = this.gl;\n if (clearCanvas) {\n clearGLCanvas(gl);\n }\n\n if (clearStack) {\n this._lastRenderIndex = -1;\n }\n\n const renderStats: RenderStats[] = [];\n\n for (const viewport of viewports) {\n const view = views && views[viewport.id];\n\n // Update context to point to this viewport\n onViewportActive(viewport);\n\n const drawLayerParams = this._getDrawLayerParams(viewport, options);\n\n // render this viewport\n // @ts-expect-error\n const subViewports = viewport.subViewports || [viewport];\n for (const subViewport of subViewports) {\n const stats = this._drawLayersInViewport(\n gl,\n {\n target,\n moduleParameters,\n viewport: subViewport,\n view,\n pass: options.pass,\n layers: options.layers\n },\n drawLayerParams\n );\n renderStats.push(stats);\n }\n }\n return renderStats;\n }\n\n // Resolve the parameters needed to draw each layer\n // When a viewport contains multiple subviewports (e.g. repeated web mercator map),\n // this is only done once for the parent viewport\n private _getDrawLayerParams(\n viewport: Viewport,\n {layers, pass, layerFilter, cullRect, effects, moduleParameters}: LayersPassRenderOptions\n ): DrawLayerParameters[] {\n const drawLayerParams: DrawLayerParameters[] = [];\n const indexResolver = layerIndexResolver(this._lastRenderIndex + 1);\n const drawContext: FilterContext = {\n layer: layers[0],\n viewport,\n isPicking: pass.startsWith('picking'),\n renderPass: pass,\n cullRect\n };\n const layerFilterCache = {};\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n // Check if we should draw layer\n const shouldDrawLayer = this._shouldDrawLayer(\n layer,\n drawContext,\n layerFilter,\n layerFilterCache\n );\n\n const layerParam: DrawLayerParameters = {\n shouldDrawLayer\n };\n\n if (shouldDrawLayer) {\n // This is the \"logical\" index for ordering this layer in the stack\n // used to calculate polygon offsets\n // It can be the same as another layer\n layerParam.layerRenderIndex = indexResolver(layer, shouldDrawLayer);\n\n layerParam.moduleParameters = this._getModuleParameters(\n layer,\n effects,\n pass,\n moduleParameters\n );\n layerParam.layerParameters = this.getLayerParameters(layer, layerIndex, viewport);\n }\n drawLayerParams[layerIndex] = layerParam;\n }\n return drawLayerParams;\n }\n\n // Draws a list of layers in one viewport\n // TODO - when picking we could completely skip rendering viewports that dont\n // intersect with the picking rect\n /* eslint-disable max-depth, max-statements */\n private _drawLayersInViewport(\n gl,\n {layers, moduleParameters: globalModuleParameters, pass, target, viewport, view},\n drawLayerParams\n ): RenderStats {\n const glViewport = getGLViewport(gl, {\n moduleParameters: globalModuleParameters,\n target,\n viewport\n });\n\n if (view && view.props.clear) {\n const clearOpts = view.props.clear === true ? {color: true, depth: true} : view.props.clear;\n withParameters(\n gl,\n {\n scissorTest: true,\n scissor: glViewport\n },\n () => clear(gl, clearOpts)\n );\n }\n\n // render layers in normal colors\n const renderStatus = {\n totalCount: layers.length,\n visibleCount: 0,\n compositeCount: 0,\n pickableCount: 0\n };\n\n setParameters(gl, {viewport: glViewport});\n\n // render layers in normal colors\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n const {shouldDrawLayer, layerRenderIndex, moduleParameters, layerParameters} =\n drawLayerParams[layerIndex];\n\n // Calculate stats\n if (shouldDrawLayer && layer.props.pickable) {\n renderStatus.pickableCount++;\n }\n if (layer.isComposite) {\n renderStatus.compositeCount++;\n } else if (shouldDrawLayer) {\n // Draw the layer\n renderStatus.visibleCount++;\n\n this._lastRenderIndex = Math.max(this._lastRenderIndex, layerRenderIndex);\n\n // overwrite layer.context.viewport with the sub viewport\n moduleParameters.viewport = viewport;\n\n try {\n layer._drawLayer({\n moduleParameters,\n uniforms: {layerIndex: layerRenderIndex},\n parameters: layerParameters\n });\n } catch (err) {\n layer.raiseError(err, `drawing ${layer} to ${pass}`);\n }\n }\n }\n\n return renderStatus;\n }\n /* eslint-enable max-depth, max-statements */\n\n /* Methods for subclass overrides */\n protected shouldDrawLayer(layer: Layer): boolean {\n return true;\n }\n\n protected getModuleParameters(layer: Layer, effects?: Effect[]): any {\n return null;\n }\n\n protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {\n return layer.props.parameters;\n }\n\n /* Private */\n private _shouldDrawLayer(\n layer: Layer,\n drawContext: FilterContext,\n layerFilter: ((params: FilterContext) => boolean) | undefined,\n layerFilterCache: Record\n ) {\n const shouldDrawLayer = layer.props.visible && this.shouldDrawLayer(layer);\n\n if (!shouldDrawLayer) {\n return false;\n }\n\n drawContext.layer = layer;\n\n let parent = layer.parent as Layer;\n while (parent) {\n // @ts-ignore\n if (!parent.props.visible || !parent.filterSubLayer(drawContext)) {\n return false;\n }\n drawContext.layer = parent;\n parent = parent.parent as Layer;\n }\n\n if (layerFilter) {\n const rootLayerId = drawContext.layer.id;\n if (!(rootLayerId in layerFilterCache)) {\n layerFilterCache[rootLayerId] = layerFilter(drawContext);\n }\n if (!layerFilterCache[rootLayerId]) {\n return false;\n }\n }\n\n // If a layer is drawn, update its viewportChanged flag\n layer.activateViewport(drawContext.viewport);\n\n return true;\n }\n\n private _getModuleParameters(\n layer: Layer,\n effects: Effect[] | undefined,\n pass: string,\n overrides: any\n ): any {\n const moduleParameters = Object.assign(\n Object.create(layer.internalState?.propsInTransition || layer.props),\n {\n autoWrapLongitude: layer.wrapLongitude,\n // @ts-ignore\n viewport: layer.context.viewport,\n // @ts-ignore\n mousePosition: layer.context.mousePosition,\n pickingActive: 0,\n devicePixelRatio: cssToDeviceRatio(this.gl)\n }\n );\n\n if (effects) {\n for (const effect of effects) {\n Object.assign(moduleParameters, effect.getModuleParameters?.(layer));\n }\n }\n\n return Object.assign(moduleParameters, this.getModuleParameters(layer, effects), overrides);\n }\n}\n\n// If the _index prop is defined, return a layer index that's relative to its parent\n// Otherwise return the index of the layer among all rendered layers\n// This is done recursively, i.e. if the user overrides a layer's default index,\n// all its descendants will be resolved relative to that index.\n// This implementation assumes that parent layers always appear before its children\n// which is true if the layer array comes from the LayerManager\nexport function layerIndexResolver(\n startIndex: number = 0,\n layerIndices: Record = {}\n): (layer: Layer, isDrawn: boolean) => number {\n const resolvers = {};\n\n const resolveLayerIndex = (layer, isDrawn) => {\n const indexOverride = layer.props._offset;\n const layerId = layer.id;\n const parentId = layer.parent && layer.parent.id;\n\n let index;\n\n if (parentId && !(parentId in layerIndices)) {\n // Populate layerIndices with the parent layer's index\n resolveLayerIndex(layer.parent, false);\n }\n\n if (parentId in resolvers) {\n const resolver = (resolvers[parentId] =\n resolvers[parentId] || layerIndexResolver(layerIndices[parentId], layerIndices));\n index = resolver(layer, isDrawn);\n resolvers[layerId] = resolver;\n } else if (Number.isFinite(indexOverride)) {\n index = indexOverride + (layerIndices[parentId] || 0);\n // Mark layer as needing its own resolver\n // We don't actually create it until it's used for the first time\n resolvers[layerId] = null;\n } else {\n index = startIndex;\n }\n\n if (isDrawn && index >= startIndex) {\n startIndex = index + 1;\n }\n\n layerIndices[layerId] = index;\n return index;\n };\n return resolveLayerIndex;\n}\n\n// Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\nfunction getGLViewport(\n gl,\n {\n moduleParameters,\n target,\n viewport\n }: {\n moduleParameters: any;\n target?: Framebuffer;\n viewport: Viewport;\n }\n): [number, number, number, number] {\n const useTarget = target && target.id !== 'default-framebuffer';\n const pixelRatio =\n (moduleParameters && moduleParameters.devicePixelRatio) || cssToDeviceRatio(gl);\n\n // Default framebuffer is used when writing to canvas\n const height = useTarget ? target.height : gl.drawingBufferHeight;\n\n // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\n const dimensions = viewport;\n return [\n dimensions.x * pixelRatio,\n height - (dimensions.y + dimensions.height) * pixelRatio,\n dimensions.width * pixelRatio,\n dimensions.height * pixelRatio\n ];\n}\n\nfunction clearGLCanvas(gl: WebGLRenderingContext) {\n const width = gl.drawingBufferWidth;\n const height = gl.drawingBufferHeight;\n // clear depth and color buffers, restoring transparency\n setParameters(gl, {viewport: [0, 0, width, height]});\n gl.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT);\n}\n","export default class Pass {\n id: string;\n gl: WebGLRenderingContext;\n props: any;\n\n constructor(gl: WebGLRenderingContext, props: {id: string} = {id: 'pass'}) {\n const {id} = props;\n this.id = id; // id of this pass\n this.gl = gl;\n this.props = {...props};\n }\n\n setProps(props): void {\n Object.assign(this.props, props);\n }\n\n render(params): void {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n cleanup() {} // eslint-disable-line @typescript-eslint/no-empty-function\n}\n","import LayersPass, {LayersPassRenderOptions, RenderStats, Rect} from './layers-pass';\nimport {withParameters} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport {OPERATION} from '../lib/constants';\nimport log from '../utils/log';\n\nimport type {Framebuffer} from '@luma.gl/core';\nimport type Viewport from '../viewports/viewport';\nimport type Layer from '../lib/layer';\n\nconst PICKING_PARAMETERS = {\n blendFunc: [GL.ONE, GL.ZERO, GL.CONSTANT_ALPHA, GL.ZERO],\n blendEquation: GL.FUNC_ADD\n};\n\ntype PickLayersPassRenderOptions = LayersPassRenderOptions & {\n pickingFBO: Framebuffer;\n deviceRect: Rect;\n pickZ: boolean;\n};\n\ntype EncodedPickingColors = {\n a: number;\n layer: Layer;\n viewports: Viewport[];\n};\n\nexport type PickingColorDecoder = (pickedColor: number[] | Uint8Array) =>\n | {\n pickedLayer: Layer;\n pickedViewports: Viewport[];\n pickedObjectIndex: number;\n }\n | undefined;\n\nexport default class PickLayersPass extends LayersPass {\n private pickZ?: boolean;\n private _colors: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n } | null = null;\n\n render(props: PickLayersPassRenderOptions) {\n if (props.pickingFBO) {\n // When drawing into an off-screen buffer, use the alpha channel to encode layer index\n return this._drawPickingBuffer(props);\n }\n // When drawing to screen (debug mode), do not use the alpha channel so that result is always visible\n return super.render(props);\n }\n\n // Private\n // Draws list of layers and viewports into the picking buffer\n // Note: does not sample the buffer, that has to be done by the caller\n _drawPickingBuffer({\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect: {x, y, width, height},\n cullRect,\n effects,\n pass = 'picking',\n pickZ\n }: PickLayersPassRenderOptions): {\n decodePickingColor: PickingColorDecoder | null;\n stats: RenderStats;\n } {\n const gl = this.gl;\n this.pickZ = pickZ;\n\n // Track encoded layer indices\n const encodedColors = pickZ\n ? null\n : {\n byLayer: new Map(),\n byAlpha: []\n };\n // Temporarily store it on the instance so that it can be accessed by this.getLayerParameters\n this._colors = encodedColors;\n\n // Make sure we clear scissor test and fbo bindings in case of exceptions\n // We are only interested in one pixel, no need to render anything else\n // Note that the callback here is called synchronously.\n // Set blend mode for picking\n // always overwrite existing pixel with [r,g,b,layerIndex]\n const renderStatus = withParameters(\n gl,\n {\n scissorTest: true,\n scissor: [x, y, width, height],\n clearColor: [0, 0, 0, 0],\n // When used as Mapbox custom layer, the context state may be dirty\n // TODO - Remove when mapbox fixes this issue\n // https://github.com/mapbox/mapbox-gl-js/issues/7801\n depthMask: true,\n depthTest: true,\n depthRange: [0, 1],\n colorMask: [true, true, true, true],\n // Blending\n ...PICKING_PARAMETERS,\n blend: !pickZ\n },\n () =>\n super.render({\n target: pickingFBO,\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n cullRect,\n effects: effects?.filter(e => e.useInPicking),\n pass\n })\n );\n\n // Clear the temp field\n this._colors = null;\n const decodePickingColor = encodedColors && decodeColor.bind(null, encodedColors);\n return {decodePickingColor, stats: renderStatus};\n }\n\n protected shouldDrawLayer(layer: Layer): boolean {\n return layer.props.pickable && layer.props.operation === OPERATION.DRAW;\n }\n\n protected getModuleParameters() {\n return {\n pickingActive: 1,\n pickingAttribute: this.pickZ,\n // turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n lightSources: {}\n };\n }\n\n protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any {\n const pickParameters = {...layer.props.parameters};\n\n if (!this._colors) {\n pickParameters.blend = false;\n } else {\n Object.assign(pickParameters, PICKING_PARAMETERS);\n pickParameters.blend = true;\n pickParameters.blendColor = encodeColor(this._colors, layer, viewport);\n }\n\n return pickParameters;\n }\n}\n\n// Assign an unique alpha value for each pickable layer and track the encoding in the cache object\n// Returns normalized blend color\nfunction encodeColor(\n encoded: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n },\n layer: Layer,\n viewport: Viewport\n): number[] {\n const {byLayer, byAlpha} = encoded;\n let a;\n\n // Encode layerIndex in the alpha channel\n // TODO - combine small layers to better utilize the picking color space\n let entry = byLayer.get(layer);\n if (entry) {\n entry.viewports.push(viewport);\n a = entry.a;\n } else {\n a = byLayer.size + 1;\n if (a <= 255) {\n entry = {a, layer, viewports: [viewport]};\n byLayer.set(layer, entry);\n byAlpha[a] = entry;\n } else {\n log.warn('Too many pickable layers, only picking the first 255')();\n a = 0;\n }\n }\n return [0, 0, 0, a / 255];\n}\n\n// Given a picked color, retrieve the corresponding layer and viewports from cache\nfunction decodeColor(\n encoded: {\n byLayer: Map;\n byAlpha: EncodedPickingColors[];\n },\n pickedColor: number[] | Uint8Array\n):\n | {\n pickedLayer: Layer;\n pickedViewports: Viewport[];\n pickedObjectIndex: number;\n }\n | undefined {\n const entry = encoded.byAlpha[pickedColor[3]];\n return (\n entry && {\n pickedLayer: entry.layer,\n pickedViewports: entry.viewports,\n pickedObjectIndex: entry.layer.decodePickingColor(pickedColor)\n }\n );\n}\n","import {picking} from '@luma.gl/core';\nimport type {ShaderModule} from '../../types/types';\n\ntype PickingModuleSettings = {\n /** Set to a picking color to visually highlight that item */\n pickingSelectedColor?: [number, number, number] | null;\n /** Color of the highlight */\n pickingHighlightColor?: [number, number, number, number];\n /** Set to true when rendering to off-screen \"picking\" buffer */\n pickingActive?: boolean;\n /** Set to true when picking an attribute value instead of object index */\n pickingAttribute?: boolean;\n};\n\nexport default {\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n // for picking depth values\n picking_setPickingAttribute(position.z / position.w);\n `,\n 'vs:DECKGL_FILTER_COLOR': `\n picking_setPickingColor(geometry.pickingColor);\n `,\n 'fs:DECKGL_FILTER_COLOR': {\n order: 99,\n injection: `\n // use highlight color if this fragment belongs to the selected object.\n color = picking_filterHighlightColor(color);\n\n // use picking color if rendering to picking FBO.\n color = picking_filterPickingColor(color);\n `\n }\n },\n ...picking\n} as ShaderModule;\n","/**\n * Projection utils\n * TODO: move to Viewport class?\n */\nimport {COORDINATE_SYSTEM} from '../../lib/constants';\nimport {getOffsetOrigin} from './viewport-uniforms';\nimport WebMercatorViewport from '../../viewports/web-mercator-viewport';\n\nimport * as vec4 from 'gl-matrix/vec4';\nimport * as vec3 from 'gl-matrix/vec3';\nimport {addMetersToLngLat} from '@math.gl/web-mercator';\n\nimport type {CoordinateSystem} from '../../lib/constants';\nimport type Viewport from '../../viewports/viewport';\nimport type {NumericArray} from '../../types/types';\n\n// In project.glsl, offset modes calculate z differently from LNG_LAT mode.\n// offset modes apply the y adjustment (unitsPerMeter2) when projecting z\n// LNG_LAT mode only use the linear scale.\nfunction lngLatZToWorldPosition(\n lngLatZ: [number, number, number],\n viewport: Viewport,\n offsetMode: boolean = false\n): [number, number, number] {\n const p = viewport.projectPosition(lngLatZ);\n\n // TODO - avoid using instanceof\n if (offsetMode && viewport instanceof WebMercatorViewport) {\n const [longitude, latitude, z = 0] = lngLatZ;\n const distanceScales = viewport.getDistanceScales([longitude, latitude]);\n p[2] = z * distanceScales.unitsPerMeter[2];\n }\n return p;\n}\n\nfunction normalizeParameters(opts: {\n viewport: Viewport;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n modelMatrix?: NumericArray | null;\n fromCoordinateSystem?: CoordinateSystem;\n fromCoordinateOrigin?: [number, number, number];\n}): {\n viewport: Viewport;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n modelMatrix?: NumericArray | null;\n fromCoordinateSystem: CoordinateSystem;\n fromCoordinateOrigin: [number, number, number];\n} {\n const {viewport, modelMatrix, coordinateOrigin} = opts;\n let {coordinateSystem, fromCoordinateSystem, fromCoordinateOrigin} = opts;\n\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n\n if (fromCoordinateSystem === undefined) {\n fromCoordinateSystem = coordinateSystem;\n }\n if (fromCoordinateOrigin === undefined) {\n fromCoordinateOrigin = coordinateOrigin;\n }\n\n return {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n modelMatrix,\n fromCoordinateSystem,\n fromCoordinateOrigin\n };\n}\n\n/** Get the common space position from world coordinates in the given coordinate system */\nexport function getWorldPosition(\n position: number[],\n {\n viewport,\n modelMatrix,\n coordinateSystem,\n coordinateOrigin,\n offsetMode\n }: {\n viewport: Viewport;\n modelMatrix?: NumericArray | null;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: [number, number, number];\n offsetMode?: boolean;\n }\n): [number, number, number] {\n let [x, y, z = 0] = position;\n\n if (modelMatrix) {\n [x, y, z] = vec4.transformMat4([], [x, y, z, 1.0], modelMatrix);\n }\n\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.LNGLAT:\n return lngLatZToWorldPosition([x, y, z], viewport, offsetMode);\n\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n return lngLatZToWorldPosition(\n [x + coordinateOrigin[0], y + coordinateOrigin[1], z + (coordinateOrigin[2] || 0)],\n viewport,\n offsetMode\n );\n\n case COORDINATE_SYSTEM.METER_OFFSETS:\n return lngLatZToWorldPosition(\n addMetersToLngLat(coordinateOrigin, [x, y, z]) as [number, number, number],\n viewport,\n offsetMode\n );\n\n case COORDINATE_SYSTEM.CARTESIAN:\n default:\n return viewport.isGeospatial\n ? [x + coordinateOrigin[0], y + coordinateOrigin[1], z + coordinateOrigin[2]]\n : viewport.projectPosition([x, y, z]);\n }\n}\n\n/**\n * Equivalent to project_position in project.glsl\n * projects a user supplied position to world position directly with or without\n * a reference coordinate system\n */\nexport function projectPosition(\n position: number[],\n params: {\n /** The current viewport */\n viewport: Viewport;\n /** The reference coordinate system used to align world position */\n coordinateSystem: CoordinateSystem;\n /** The reference coordinate origin used to align world position */\n coordinateOrigin: [number, number, number];\n /** The model matrix of the supplied position */\n modelMatrix?: NumericArray | null;\n /** The coordinate system that the supplied position is in. Default to the same as `coordinateSystem`. */\n fromCoordinateSystem?: CoordinateSystem;\n /** The coordinate origin that the supplied position is in. Default to the same as `coordinateOrigin`. */\n fromCoordinateOrigin?: [number, number, number];\n }\n): [number, number, number] {\n const {\n viewport,\n coordinateSystem,\n coordinateOrigin,\n modelMatrix,\n fromCoordinateSystem,\n fromCoordinateOrigin\n } = normalizeParameters(params);\n\n const {geospatialOrigin, shaderCoordinateOrigin, offsetMode} = getOffsetOrigin(\n viewport,\n coordinateSystem,\n coordinateOrigin\n );\n\n const worldPosition = getWorldPosition(position, {\n viewport,\n modelMatrix,\n coordinateSystem: fromCoordinateSystem,\n coordinateOrigin: fromCoordinateOrigin,\n offsetMode\n });\n\n if (offsetMode) {\n const positionCommonSpace = viewport.projectPosition(\n geospatialOrigin || shaderCoordinateOrigin\n );\n vec3.sub(worldPosition, worldPosition, positionCommonSpace);\n }\n\n return worldPosition;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport type {ShaderModule} from '../../types/types';\n\nconst defines = '#define SMOOTH_EDGE_RADIUS 0.5';\nconst vs = `\n${defines}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`;\n\nconst fs = `\n${defines}\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`;\n\nexport default {name: 'geometry', vs, fs} as ShaderModule;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {COORDINATE_SYSTEM, PROJECTION_MODE, UNIT} from '../../lib/constants';\n\n// We are generating these from the js code in constants.js\nconst COORDINATE_SYSTEM_GLSL_CONSTANTS = Object.keys(COORDINATE_SYSTEM)\n .map(key => `const int COORDINATE_SYSTEM_${key} = ${COORDINATE_SYSTEM[key]};`)\n .join('');\nconst PROJECTION_MODE_GLSL_CONSTANTS = Object.keys(PROJECTION_MODE)\n .map(key => `const int PROJECTION_MODE_${key} = ${PROJECTION_MODE[key]};`)\n .join('');\nconst UNIT_GLSL_CONSTANTS = Object.keys(UNIT)\n .map(key => `const int UNIT_${key.toUpperCase()} = ${UNIT[key]};`)\n .join('');\n\nexport default `\\\n${COORDINATE_SYSTEM_GLSL_CONSTANTS}\n${PROJECTION_MODE_GLSL_CONSTANTS}\n${UNIT_GLSL_CONSTANTS}\n\nuniform int project_uCoordinateSystem;\nuniform int project_uProjectionMode;\nuniform float project_uScale;\nuniform bool project_uWrapLongitude;\nuniform vec3 project_uCommonUnitsPerMeter;\nuniform vec3 project_uCommonUnitsPerWorldUnit;\nuniform vec3 project_uCommonUnitsPerWorldUnit2;\nuniform vec4 project_uCenter;\nuniform mat4 project_uModelMatrix;\nuniform mat4 project_uViewProjectionMatrix;\nuniform vec2 project_uViewportSize;\nuniform float project_uDevicePixelRatio;\nuniform float project_uFocalDistance;\nuniform vec3 project_uCameraPosition;\nuniform vec3 project_uCoordinateOrigin;\nuniform vec3 project_uCommonOrigin;\nuniform bool project_uPseudoMeters;\n\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0; // meters\nconst float GLOBE_RADIUS = 256.0;\n\n// returns an adjustment factor for uCommonUnitsPerMeter\nfloat project_size_at_latitude(float lat) {\n float y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\nfloat project_size() {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project_uPseudoMeters == false) {\n\n // uCommonUnitsPerMeter in low-zoom Web Mercator is non-linear\n // Adjust by 1 / cos(latitude)\n // If geometry.position (vertex in common space) is populated, use it\n // Otherwise use geometry.worldPosition (anchor in world space)\n \n if (geometry.position.w == 0.0) {\n return project_size_at_latitude(geometry.worldPosition.y);\n }\n\n // latitude from common y: 2.0 * (atan(exp(y / TILE_SIZE * 2.0 * PI - PI)) - PI / 4.0)\n // Taylor series of 1 / cos(latitude)\n // Max error < 0.003\n \n float y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n float y2 = y * y;\n float y4 = y2 * y2;\n float y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\nfloat project_size_at_latitude(float meters, float lat) {\n return meters * project_uCommonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\n\n//\n// Scaling offsets - scales meters to \"world distance\"\n// Note the scalar version of project_size is for scaling the z component only\n//\nfloat project_size(float meters) {\n return meters * project_uCommonUnitsPerMeter.z * project_size();\n}\n\nvec2 project_size(vec2 meters) {\n return meters * project_uCommonUnitsPerMeter.xy * project_size();\n}\n\nvec3 project_size(vec3 meters) {\n return meters * project_uCommonUnitsPerMeter * project_size();\n}\n\nvec4 project_size(vec4 meters) {\n return vec4(meters.xyz * project_uCommonUnitsPerMeter, meters.w);\n}\n\n// Get rotation matrix that aligns the z axis with the given up vector\n// Find 3 unit vectors ux, uy, uz that are perpendicular to each other and uz == up\nmat3 project_get_orientation_matrix(vec3 up) {\n vec3 uz = normalize(up);\n // Tangent on XY plane\n vec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\n vec3 uy = cross(uz, ux);\n return mat3(ux, uy, uz);\n}\n\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n transform = project_get_orientation_matrix(commonPosition);\n return true;\n }\n return false;\n}\n\n//\n// Projecting normal - transform deltas from current coordinate system to\n// normals in the worldspace\n//\nvec3 project_normal(vec3 vector) {\n // Apply model matrix\n vec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0);\n vec3 n = normalize(normal_modelspace.xyz * project_uCommonUnitsPerMeter);\n mat3 rotation;\n if (project_needs_rotation(geometry.position.xyz, rotation)) {\n n = rotation * n;\n }\n return n;\n}\n\nvec4 project_offset_(vec4 offset) {\n float dy = offset.y;\n vec3 commonUnitsPerWorldUnit = project_uCommonUnitsPerWorldUnit + project_uCommonUnitsPerWorldUnit2 * dy;\n return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n//\n// Projecting positions - non-linear projection: lnglats => unit tile [0-1, 0-1]\n//\nvec2 project_mercator_(vec2 lnglat) {\n float x = lnglat.x;\n if (project_uWrapLongitude) {\n x = mod(x + 180., 360.0) - 180.;\n }\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\nvec3 project_globe_(vec3 lnglatz) {\n float lambda = radians(lnglatz.x);\n float phi = radians(lnglatz.y);\n float cosPhi = cos(phi);\n float D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n\n return vec3(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n//\n// Projects positions (defined by project_uCoordinateSystem) to common space (defined by project_uProjectionMode)\n//\nvec4 project_position(vec4 position, vec3 position64Low) {\n vec4 position_world = project_uModelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_mercator_(position_world.xy),\n project_size_at_latitude(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world.xyz += project_uCoordinateOrigin;\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_GLOBE) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) {\n // Too far from the projection center for offset mode to be accurate\n // Only use high parts\n return vec4(\n project_mercator_(position_world.xy) - project_uCommonOrigin.xy,\n project_size(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project_uProjectionMode == PROJECTION_MODE_IDENTITY ||\n (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision.\n position_world.xyz -= project_uCoordinateOrigin;\n }\n\n // Translation is already added to the high parts\n return project_offset_(position_world + project_uModelMatrix * vec4(position64Low, 0.0));\n}\n\nvec4 project_position(vec4 position) {\n return project_position(position, ZERO_64_LOW);\n}\n\nvec3 project_position(vec3 position, vec3 position64Low) {\n vec4 projected_position = project_position(vec4(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nvec3 project_position(vec3 position) {\n vec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nvec2 project_position(vec2 position) {\n vec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\n return viewProjectionMatrix * position + center;\n}\n\n//\n// Projects from common space coordinates to clip space.\n// Uses project_uViewProjectionMatrix\n//\nvec4 project_common_position_to_clipspace(vec4 position) {\n return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project_uCenter);\n}\n\n// Returns a clip space offset that corresponds to a given number of screen pixels\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\n vec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio * 2.0;\n return offset * project_uFocalDistance;\n}\n\nfloat project_size_to_pixel(float meters) {\n return project_size(meters) * project_uScale;\n}\nfloat project_size_to_pixel(float size, int unit) {\n if (unit == UNIT_METERS) return project_size_to_pixel(size);\n if (unit == UNIT_COMMON) return size * project_uScale;\n // UNIT_PIXELS\n return size;\n}\nfloat project_pixel_size(float pixels) {\n return pixels / project_uScale;\n}\nvec2 project_pixel_size(vec2 pixels) {\n return pixels / project_uScale;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {fp32} from '@luma.gl/core';\nimport geometry from '../misc/geometry';\nimport projectShader from './project.glsl';\nimport {getUniformsFromViewport} from './viewport-uniforms';\n\nimport type {ProjectModuleSettings} from './viewport-uniforms';\nimport type {ShaderModule} from '../../types/types';\n\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getUniforms(opts: ProjectModuleSettings | {} = INITIAL_MODULE_OPTIONS) {\n if ('viewport' in opts) {\n return getUniformsFromViewport(opts);\n }\n return {};\n}\n\nexport default {\n name: 'project',\n dependencies: [fp32, geometry],\n vs: projectShader,\n getUniforms\n} as ShaderModule;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n/* eslint-disable complexity, camelcase */\n\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec4 from 'gl-matrix/vec4';\n\nimport {COORDINATE_SYSTEM, PROJECTION_MODE} from '../../lib/constants';\n\nimport memoize from '../../utils/memoize';\n\nimport type Viewport from '../../viewports/viewport';\nimport type {CoordinateSystem} from '../../lib/constants';\nimport type {NumericArray} from '../../types/types';\n\ntype Vec3 = [number, number, number];\ntype Vec4 = [number, number, number, number];\n\n// To quickly set a vector to zero\nconst ZERO_VECTOR: Vec4 = [0, 0, 0, 0];\n// 4x4 matrix that drops 4th component of vector\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\nconst DEFAULT_PIXELS_PER_UNIT2: Vec3 = [0, 0, 0];\nconst DEFAULT_COORDINATE_ORIGIN: Vec3 = [0, 0, 0];\n\nconst getMemoizedViewportUniforms = memoize(calculateViewportUniforms);\n\nexport function getOffsetOrigin(\n viewport: Viewport,\n coordinateSystem: CoordinateSystem,\n coordinateOrigin: Vec3 = DEFAULT_COORDINATE_ORIGIN\n): {\n geospatialOrigin: Vec3 | null;\n shaderCoordinateOrigin: Vec3;\n offsetMode: boolean;\n} {\n if (coordinateOrigin.length < 3) {\n coordinateOrigin = [coordinateOrigin[0], coordinateOrigin[1], 0];\n }\n\n let shaderCoordinateOrigin = coordinateOrigin;\n let geospatialOrigin: Vec3 | null;\n let offsetMode = true;\n\n if (\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS\n ) {\n geospatialOrigin = coordinateOrigin;\n } else {\n geospatialOrigin = viewport.isGeospatial\n ? // @ts-expect-error longitude and latitude are not defined on the base Viewport, but is expected on geospatial viewports\n [Math.fround(viewport.longitude), Math.fround(viewport.latitude), 0]\n : null;\n }\n\n switch (viewport.projectionMode) {\n case PROJECTION_MODE.WEB_MERCATOR:\n if (\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT ||\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN\n ) {\n geospatialOrigin = [0, 0, 0];\n offsetMode = false;\n }\n break;\n\n case PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET:\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n // viewport center in world space\n // @ts-expect-error when using LNGLAT coordinates, we expect the viewport to be geospatial, in which case geospatialOrigin is defined\n shaderCoordinateOrigin = geospatialOrigin;\n } else if (coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {\n // viewport center in common space\n shaderCoordinateOrigin = [\n Math.fround(viewport.center[0]),\n Math.fround(viewport.center[1]),\n 0\n ];\n // Geospatial origin (wgs84) must match shaderCoordinateOrigin (common)\n geospatialOrigin = viewport.unprojectPosition(shaderCoordinateOrigin);\n shaderCoordinateOrigin[0] -= coordinateOrigin[0];\n shaderCoordinateOrigin[1] -= coordinateOrigin[1];\n shaderCoordinateOrigin[2] -= coordinateOrigin[2];\n }\n break;\n\n case PROJECTION_MODE.IDENTITY:\n shaderCoordinateOrigin = viewport.position.map(Math.fround) as Vec3;\n shaderCoordinateOrigin[2] = shaderCoordinateOrigin[2] || 0;\n break;\n\n case PROJECTION_MODE.GLOBE:\n offsetMode = false;\n geospatialOrigin = null;\n break;\n\n default:\n // Unknown projection mode\n offsetMode = false;\n }\n\n return {geospatialOrigin, shaderCoordinateOrigin, offsetMode};\n}\n\n// The code that utilizes Matrix4 does the same calculation as their mat4 counterparts,\n// has lower performance but provides error checking.\nfunction calculateMatrixAndOffset(\n viewport: Viewport,\n coordinateSystem: CoordinateSystem,\n coordinateOrigin: Vec3\n): {\n viewMatrix: NumericArray;\n viewProjectionMatrix: NumericArray;\n projectionCenter: Vec4;\n originCommon: Vec4;\n cameraPosCommon: Vec3;\n shaderCoordinateOrigin: Vec3;\n geospatialOrigin: Vec3 | null;\n} {\n const {viewMatrixUncentered, projectionMatrix} = viewport;\n let {viewMatrix, viewProjectionMatrix} = viewport;\n\n let projectionCenter = ZERO_VECTOR;\n let originCommon: Vec4 = ZERO_VECTOR;\n let cameraPosCommon: Vec3 = viewport.cameraPosition as Vec3;\n const {geospatialOrigin, shaderCoordinateOrigin, offsetMode} = getOffsetOrigin(\n viewport,\n coordinateSystem,\n coordinateOrigin\n );\n\n if (offsetMode) {\n // Calculate transformed projectionCenter (using 64 bit precision JS)\n // This is the key to offset mode precision\n // (avoids doing this addition in 32 bit precision in GLSL)\n // @ts-expect-error the 4th component is assigned below\n originCommon = viewport.projectPosition(geospatialOrigin || shaderCoordinateOrigin);\n\n cameraPosCommon = [\n cameraPosCommon[0] - originCommon[0],\n cameraPosCommon[1] - originCommon[1],\n cameraPosCommon[2] - originCommon[2]\n ];\n\n originCommon[3] = 1;\n\n // projectionCenter = new Matrix4(viewProjectionMatrix)\n // .transformVector([positionPixels[0], positionPixels[1], 0.0, 1.0]);\n projectionCenter = vec4.transformMat4([], originCommon, viewProjectionMatrix);\n\n // Always apply uncentered projection matrix if available (shader adds center)\n viewMatrix = viewMatrixUncentered || viewMatrix;\n\n // Zero out 4th coordinate (\"after\" model matrix) - avoids further translations\n // viewMatrix = new Matrix4(viewMatrixUncentered || viewMatrix)\n // .multiplyRight(VECTOR_TO_POINT_MATRIX);\n viewProjectionMatrix = mat4.multiply([], projectionMatrix, viewMatrix);\n viewProjectionMatrix = mat4.multiply([], viewProjectionMatrix, VECTOR_TO_POINT_MATRIX);\n }\n\n return {\n viewMatrix,\n viewProjectionMatrix,\n projectionCenter,\n originCommon,\n cameraPosCommon,\n shaderCoordinateOrigin,\n geospatialOrigin\n };\n}\n\nexport type ProjectUniforms = {\n project_uCoordinateSystem: number;\n project_uProjectionMode: number;\n project_uCoordinateOrigin: Vec3;\n project_uCommonOrigin: Vec3;\n project_uCenter: Vec4;\n // Backward compatibility\n // TODO: remove in v9\n project_uPseudoMeters: boolean;\n\n // Screen size\n project_uViewportSize: [number, number];\n project_uDevicePixelRatio: number;\n\n project_uFocalDistance: number;\n project_uCommonUnitsPerMeter: Vec3;\n project_uCommonUnitsPerWorldUnit: Vec3;\n project_uCommonUnitsPerWorldUnit2: Vec3;\n /** 2^zoom */\n project_uScale: number;\n project_uWrapLongitude: boolean;\n\n project_uViewProjectionMatrix: NumericArray;\n project_uModelMatrix: NumericArray;\n\n // This is for lighting calculations\n project_uCameraPosition: Vec3;\n};\n\nexport type ProjectModuleSettings = {\n viewport: Viewport;\n devicePixelRatio?: number;\n modelMatrix?: NumericArray | null;\n coordinateSystem?: CoordinateSystem;\n coordinateOrigin?: Vec3;\n autoWrapLongitude?: boolean;\n};\n\n/**\n * Returns uniforms for shaders based on current projection\n * includes: projection matrix suitable for shaders\n *\n * TODO - Ensure this works with any viewport, not just WebMercatorViewports\n *\n * @param {WebMercatorViewport} viewport -\n * @return {Float32Array} - 4x4 projection matrix that can be used in shaders\n */\nexport function getUniformsFromViewport({\n viewport,\n devicePixelRatio = 1,\n modelMatrix = null,\n // Match Layer.defaultProps\n coordinateSystem = COORDINATE_SYSTEM.DEFAULT,\n coordinateOrigin = DEFAULT_COORDINATE_ORIGIN,\n autoWrapLongitude = false\n}: ProjectModuleSettings): ProjectUniforms {\n if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = viewport.isGeospatial\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN;\n }\n\n const uniforms = getMemoizedViewportUniforms({\n viewport,\n devicePixelRatio,\n coordinateSystem,\n coordinateOrigin\n });\n\n uniforms.project_uWrapLongitude = autoWrapLongitude;\n uniforms.project_uModelMatrix = modelMatrix || IDENTITY_MATRIX;\n\n return uniforms;\n}\n\nfunction calculateViewportUniforms({\n viewport,\n devicePixelRatio,\n coordinateSystem,\n coordinateOrigin\n}: {\n viewport: Viewport;\n devicePixelRatio: number;\n coordinateSystem: CoordinateSystem;\n coordinateOrigin: Vec3;\n}): ProjectUniforms {\n const {\n projectionCenter,\n viewProjectionMatrix,\n originCommon,\n cameraPosCommon,\n shaderCoordinateOrigin,\n geospatialOrigin\n } = calculateMatrixAndOffset(viewport, coordinateSystem, coordinateOrigin);\n\n // Calculate projection pixels per unit\n const distanceScales = viewport.getDistanceScales();\n\n const viewportSize: [number, number] = [\n viewport.width * devicePixelRatio,\n viewport.height * devicePixelRatio\n ];\n\n // Distance at which screen pixels are projected.\n // Used to scale sizes in clipspace to match screen pixels.\n // When using Viewport class's default projection matrix, this yields 1 for orthographic\n // and `viewport.focalDistance` for perspective views\n const focalDistance =\n vec4.transformMat4([], [0, 0, -viewport.focalDistance, 1], viewport.projectionMatrix)[3] || 1;\n\n const uniforms: ProjectUniforms = {\n // Projection mode values\n project_uCoordinateSystem: coordinateSystem,\n project_uProjectionMode: viewport.projectionMode,\n project_uCoordinateOrigin: shaderCoordinateOrigin,\n project_uCommonOrigin: originCommon.slice(0, 3) as Vec3,\n project_uCenter: projectionCenter,\n\n // Backward compatibility\n // TODO: remove in v9\n // @ts-expect-error _pseudoMeters is only defined on WebMercator viewport\n project_uPseudoMeters: Boolean(viewport._pseudoMeters),\n\n // Screen size\n project_uViewportSize: viewportSize,\n project_uDevicePixelRatio: devicePixelRatio,\n\n project_uFocalDistance: focalDistance,\n project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3,\n project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3,\n project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2,\n project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom)\n project_uWrapLongitude: false,\n\n project_uViewProjectionMatrix: viewProjectionMatrix,\n project_uModelMatrix: IDENTITY_MATRIX,\n\n // This is for lighting calculations\n project_uCameraPosition: cameraPosCommon\n };\n\n if (geospatialOrigin) {\n // Get high-precision DistanceScales from geospatial viewport\n // TODO: stricter types in Viewport classes\n const distanceScalesAtOrigin = viewport.getDistanceScales(geospatialOrigin) as {\n unitsPerMeter: Vec3;\n metersPerUnit: Vec3;\n unitsPerMeter2: Vec3;\n unitsPerDegree: Vec3;\n degreesPerUnit: Vec3;\n unitsPerDegree2: Vec3;\n };\n switch (coordinateSystem) {\n case COORDINATE_SYSTEM.METER_OFFSETS:\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2;\n break;\n\n case COORDINATE_SYSTEM.LNGLAT:\n case COORDINATE_SYSTEM.LNGLAT_OFFSETS:\n // @ts-expect-error _pseudoMeters only exists on WebMercatorView\n if (!viewport._pseudoMeters) {\n uniforms.project_uCommonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter;\n }\n uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree;\n uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2;\n break;\n\n // a.k.a \"preprojected\" positions\n case COORDINATE_SYSTEM.CARTESIAN:\n uniforms.project_uCommonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]];\n uniforms.project_uCommonUnitsPerWorldUnit2 = [\n 0,\n 0,\n distanceScalesAtOrigin.unitsPerMeter2[2]\n ];\n break;\n\n default:\n break;\n }\n }\n\n return uniforms;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport project from '../project/project';\nimport type {ShaderModule} from '../../types/types';\n\nconst vs = `\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition\n) {\n vec3 projectedPosition = project_position(position, position64Low);\n mat3 rotation;\n if (project_needs_rotation(projectedPosition, rotation)) {\n // offset is specified as ENU\n // when in globe projection, rotate offset so that the ground alighs with the surface of the globe\n offset = rotation * offset;\n }\n commonPosition = vec4(projectedPosition + offset, 1.0);\n return project_common_position_to_clipspace(commonPosition);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(position, position64Low, offset, commonPosition);\n}\n`;\n\nexport default {\n name: 'project32',\n dependencies: [project],\n vs\n} as ShaderModule;\n","// Copyright (c) 2015-2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {COORDINATE_SYSTEM, PROJECTION_MODE} from '../../lib/constants';\nimport project from '../project/project';\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport memoize from '../../utils/memoize';\nimport {pixelsToWorld} from '@math.gl/web-mercator';\n\nimport type {Texture2D} from '@luma.gl/webgl';\nimport type {ShaderModule, NumericArray} from '../../types/types';\nimport type Viewport from '../../viewports/viewport';\nimport type {ProjectUniforms} from '../project/viewport-uniforms';\n\nconst vs = `\nconst int max_lights = 2;\nuniform mat4 shadow_uViewProjectionMatrices[max_lights];\nuniform vec4 shadow_uProjectCenters[max_lights];\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform int shadow_uLightId;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n if (shadow_uDrawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[shadow_uLightId], shadow_uProjectCenters[shadow_uLightId]);\n }\n if (shadow_uUseShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow_uLightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, shadow_uViewProjectionMatrices[i], shadow_uProjectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n`;\n\nconst fs = `\nconst int max_lights = 2;\nuniform bool shadow_uDrawShadowMap;\nuniform bool shadow_uUseShadowMap;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\nuniform vec4 shadow_uColor;\nuniform float shadow_uLightCount;\n\nvarying vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture2D(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow_uDrawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow_uUseShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow_uLightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow_uColor.a / shadow_uLightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow_uColor.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n`;\n\nconst getMemoizedViewportCenterPosition = memoize(getViewportCenterPosition);\nconst getMemoizedViewProjectionMatrices = memoize(getViewProjectionMatrices);\n\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 1.0];\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\n\ntype ShadowModuleSettings = {\n viewport: Viewport;\n shadowEnabled?: boolean;\n drawToShadowMap?: boolean;\n shadowMaps?: Texture2D[];\n dummyShadowMap?: Texture2D;\n shadowColor?: number[];\n shadowMatrices?: Matrix4[];\n shadowLightId?: number;\n};\n\nfunction screenToCommonSpace(xyz: number[], pixelUnprojectionMatrix: number[]): number[] {\n const [x, y, z] = xyz;\n const coord = pixelsToWorld([x, y, z], pixelUnprojectionMatrix);\n\n if (Number.isFinite(z)) {\n return coord;\n }\n return [coord[0], coord[1], 0];\n}\n\nfunction getViewportCenterPosition({\n viewport,\n center\n}: {\n viewport: Viewport;\n center: NumericArray;\n}): NumericArray {\n return new Matrix4(viewport.viewProjectionMatrix).invert().transform(center);\n}\n\nfunction getViewProjectionMatrices({\n viewport,\n shadowMatrices\n}: {\n viewport: Viewport;\n shadowMatrices: Matrix4[];\n}): Matrix4[] {\n const projectionMatrices: Matrix4[] = [];\n const pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n const farZ = viewport.isGeospatial ? undefined : 1;\n const corners = [\n [0, 0, farZ], // top left ground\n [viewport.width, 0, farZ], // top right ground\n [0, viewport.height, farZ], // bottom left ground\n [viewport.width, viewport.height, farZ], // bottom right ground\n [0, 0, -1], // top left near\n [viewport.width, 0, -1], // top right near\n [0, viewport.height, -1], // bottom left near\n [viewport.width, viewport.height, -1] // bottom right near\n ].map(pixel =>\n // @ts-expect-error z may be undefined\n screenToCommonSpace(pixel, pixelUnprojectionMatrix)\n );\n\n for (const shadowMatrix of shadowMatrices) {\n const viewMatrix = shadowMatrix.clone().translate(new Vector3(viewport.center).negate());\n const positions = corners.map(corner => viewMatrix.transform(corner));\n const projectionMatrix = new Matrix4().ortho({\n left: Math.min(...positions.map(position => position[0])),\n right: Math.max(...positions.map(position => position[0])),\n bottom: Math.min(...positions.map(position => position[1])),\n top: Math.max(...positions.map(position => position[1])),\n near: Math.min(...positions.map(position => -position[2])),\n far: Math.max(...positions.map(position => -position[2]))\n });\n projectionMatrices.push(projectionMatrix.multiplyRight(shadowMatrix));\n }\n return projectionMatrices;\n}\n\n/* eslint-disable camelcase */\nfunction createShadowUniforms(\n opts: ShadowModuleSettings,\n context: ProjectUniforms\n): Record {\n const {shadowEnabled = true} = opts;\n if (!shadowEnabled || !opts.shadowMatrices || !opts.shadowMatrices.length) {\n return {\n shadow_uDrawShadowMap: false,\n shadow_uUseShadowMap: false\n };\n }\n const uniforms = {\n shadow_uDrawShadowMap: Boolean(opts.drawToShadowMap),\n shadow_uUseShadowMap: opts.shadowMaps ? opts.shadowMaps.length > 0 : false,\n shadow_uColor: opts.shadowColor || DEFAULT_SHADOW_COLOR,\n shadow_uLightId: opts.shadowLightId || 0,\n shadow_uLightCount: opts.shadowMatrices.length\n };\n\n const center = getMemoizedViewportCenterPosition({\n viewport: opts.viewport,\n center: context.project_uCenter\n });\n\n const projectCenters: NumericArray[] = [];\n const viewProjectionMatrices = getMemoizedViewProjectionMatrices({\n shadowMatrices: opts.shadowMatrices,\n viewport: opts.viewport\n }).slice();\n\n for (let i = 0; i < opts.shadowMatrices.length; i++) {\n const viewProjectionMatrix = viewProjectionMatrices[i];\n const viewProjectionMatrixCentered = viewProjectionMatrix\n .clone()\n .translate(new Vector3(opts.viewport.center).negate());\n\n if (\n context.project_uCoordinateSystem === COORDINATE_SYSTEM.LNGLAT &&\n context.project_uProjectionMode === PROJECTION_MODE.WEB_MERCATOR\n ) {\n viewProjectionMatrices[i] = viewProjectionMatrixCentered;\n projectCenters[i] = center;\n } else {\n viewProjectionMatrices[i] = viewProjectionMatrix\n .clone()\n .multiplyRight(VECTOR_TO_POINT_MATRIX);\n projectCenters[i] = viewProjectionMatrixCentered.transform(center);\n }\n }\n\n for (let i = 0; i < viewProjectionMatrices.length; i++) {\n uniforms[`shadow_uViewProjectionMatrices[${i}]`] = viewProjectionMatrices[i];\n uniforms[`shadow_uProjectCenters[${i}]`] = projectCenters[i];\n\n if (opts.shadowMaps && opts.shadowMaps.length > 0) {\n uniforms[`shadow_uShadowMap${i}`] = opts.shadowMaps[i];\n } else {\n uniforms[`shadow_uShadowMap${i}`] = opts.dummyShadowMap;\n }\n }\n return uniforms;\n}\n\nexport default {\n name: 'shadow',\n dependencies: [project],\n vs,\n fs,\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n position = shadow_setVertexPosition(geometry.position);\n `,\n 'fs:DECKGL_FILTER_COLOR': `\n color = shadow_filterShadowColor(color);\n `\n },\n getUniforms: (opts = {}, context = {}) => {\n if (\n 'viewport' in opts &&\n (opts.drawToShadowMap || (opts.shadowMaps && opts.shadowMaps.length > 0))\n ) {\n // @ts-expect-error if opts.viewport is defined, context should contain the project module's uniforms\n return createShadowUniforms(opts, context);\n }\n return {};\n }\n} as ShaderModule;\n","import TransitionInterpolator from './transition-interpolator';\nimport {lerp} from '@math.gl/core';\n\nimport {flyToViewport, getFlyToDuration} from '@math.gl/web-mercator';\n\nconst LINEARLY_INTERPOLATED_PROPS = ['bearing', 'pitch'];\nconst DEFAULT_OPTS = {\n speed: 1.2,\n curve: 1.414\n};\n\n/**\n * This class adapts mapbox-gl-js Map#flyTo animation so it can be used in\n * react/redux architecture.\n * mapbox-gl-js flyTo : https://www.mapbox.com/mapbox-gl-js/api/#map#flyto.\n * It implements “Smooth and efficient zooming and panning.” algorithm by\n * \"Jarke J. van Wijk and Wim A.A. Nuij\"\n */\nexport default class FlyToInterpolator extends TransitionInterpolator {\n opts: {\n curve: number;\n speed: number;\n screenSpeed?: number;\n maxDuration?: number;\n };\n\n constructor(\n opts: {\n /** The zooming \"curve\" that will occur along the flight path. Default 1.414 */\n curve?: number;\n /** The average speed of the animation defined in relation to `options.curve`, it linearly affects the duration, higher speed returns smaller durations and vice versa. Default 1.2 */\n speed?: number;\n /** The average speed of the animation measured in screenfuls per second. Similar to `opts.speed` it linearly affects the duration, when specified `opts.speed` is ignored. */\n screenSpeed?: number;\n /** Maximum duration in milliseconds, if calculated duration exceeds this value, `0` is returned. */\n maxDuration?: number;\n } = {}\n ) {\n super({\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'],\n extract: ['width', 'height', 'longitude', 'latitude', 'zoom', 'bearing', 'pitch'],\n required: ['width', 'height', 'latitude', 'longitude', 'zoom']\n });\n this.opts = {...DEFAULT_OPTS, ...opts};\n }\n\n interpolateProps(startProps, endProps, t) {\n const viewport = flyToViewport(startProps, endProps, t, this.opts);\n\n // Linearly interpolate 'bearing' and 'pitch'.\n // If pitch/bearing are not supplied, they are interpreted as zeros in viewport calculation\n // (fallback defined in WebMercatorViewport)\n // Because there is no guarantee that the current controller's ViewState normalizes\n // these props, safe guard is needed to avoid generating NaNs\n for (const key of LINEARLY_INTERPOLATED_PROPS) {\n viewport[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n\n return viewport;\n }\n\n // computes the transition duration\n getDuration(startProps, endProps) {\n let {transitionDuration} = endProps;\n if (transitionDuration === 'auto') {\n // auto calculate duration based on start and end props\n transitionDuration = getFlyToDuration(startProps, endProps, this.opts);\n }\n return transitionDuration;\n }\n}\n","import TransitionInterpolator from './transition-interpolator';\nimport {lerp} from '@math.gl/core';\n\nimport type Viewport from '../viewports/viewport';\n\nconst DEFAULT_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];\nconst DEFAULT_REQUIRED_PROPS = ['longitude', 'latitude', 'zoom'];\n\ntype PropsWithAnchor = {\n around?: number[];\n aroundPosition?: number[];\n [key: string]: any;\n};\n\n/**\n * Performs linear interpolation of two view states.\n */\nexport default class LinearInterpolator extends TransitionInterpolator {\n opts: {\n around?: number[];\n makeViewport?: (props: Record) => Viewport;\n };\n\n /**\n * @param {Object} opts\n * @param {Array} opts.transitionProps - list of props to apply linear transition to.\n * @param {Array} opts.around - a screen point to zoom/rotate around.\n * @param {Function} opts.makeViewport - construct a viewport instance with given props.\n */\n constructor(\n opts:\n | string[]\n | {\n transitionProps?:\n | string[]\n | {\n compare: string[];\n extract?: string[];\n required?: string[];\n };\n around?: number[];\n makeViewport?: (props: Record) => Viewport;\n } = {}\n ) {\n // Backward compatibility\n const transitionProps = Array.isArray(opts) ? opts : opts.transitionProps;\n\n const normalizedOpts = Array.isArray(opts) ? {} : opts;\n normalizedOpts.transitionProps = Array.isArray(transitionProps)\n ? {\n compare: transitionProps,\n required: transitionProps\n }\n : transitionProps || {\n compare: DEFAULT_PROPS,\n required: DEFAULT_REQUIRED_PROPS\n };\n\n super(normalizedOpts.transitionProps);\n this.opts = normalizedOpts;\n }\n\n initializeProps(\n startProps: Record,\n endProps: Record\n ): {\n start: PropsWithAnchor;\n end: PropsWithAnchor;\n } {\n const result = super.initializeProps(startProps, endProps);\n\n const {makeViewport, around} = this.opts;\n if (makeViewport && around) {\n const startViewport = makeViewport(startProps);\n const endViewport = makeViewport(endProps);\n const aroundPosition = startViewport.unproject(around);\n result.start.around = around;\n Object.assign(result.end, {\n around: endViewport.project(aroundPosition),\n aroundPosition,\n width: endProps.width,\n height: endProps.height\n });\n }\n\n return result;\n }\n\n interpolateProps(\n startProps: PropsWithAnchor,\n endProps: PropsWithAnchor,\n t: number\n ): Record {\n const propsInTransition = {};\n for (const key of this._propsToExtract) {\n propsInTransition[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n\n if (endProps.aroundPosition && this.opts.makeViewport) {\n // Linear transition should be performed in common space\n const viewport = this.opts.makeViewport({...endProps, ...propsInTransition});\n Object.assign(\n propsInTransition,\n viewport.panByPosition(\n endProps.aroundPosition,\n // anchor point in current screen coordinates\n lerp(startProps.around as number[], endProps.around as number[], t) as number[]\n )\n );\n }\n return propsInTransition;\n }\n}\n","import {equals} from '@math.gl/core';\nimport assert from '../utils/assert';\n\nexport default abstract class TransitionInterpolator {\n protected _propsToCompare: string[];\n protected _propsToExtract: string[];\n protected _requiredProps?: string[];\n\n /**\n * @param opts {array|object}\n * @param opts.compare {array} - prop names used in equality check\n * @param opts.extract {array} - prop names needed for interpolation\n * @param opts.required {array} - prop names that must be supplied\n * alternatively, supply one list of prop names as `opts` if all of the above are the same.\n */\n constructor(opts: {compare: string[]; extract?: string[]; required?: string[]}) {\n const {compare, extract, required} = opts;\n\n this._propsToCompare = compare;\n this._propsToExtract = extract || compare;\n this._requiredProps = required;\n }\n\n /**\n * Checks if two sets of props need transition in between\n * @param currentProps {object} - a list of viewport props\n * @param nextProps {object} - a list of viewport props\n * @returns {bool} - true if two props are equivalent\n */\n arePropsEqual(currentProps: Record, nextProps: Record): boolean {\n for (const key of this._propsToCompare) {\n if (\n !(key in currentProps) ||\n !(key in nextProps) ||\n !equals(currentProps[key], nextProps[key])\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Called before transition starts to validate/pre-process start and end props\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Object} {start, end} - start and end props to be passed\n * to `interpolateProps`\n */\n initializeProps(\n startProps: Record,\n endProps: Record\n ): {\n start: Record;\n end: Record;\n } {\n const startViewStateProps = {};\n const endViewStateProps = {};\n\n for (const key of this._propsToExtract) {\n if (key in startProps || key in endProps) {\n startViewStateProps[key] = startProps[key];\n endViewStateProps[key] = endProps[key];\n }\n }\n\n this._checkRequiredProps(startViewStateProps);\n this._checkRequiredProps(endViewStateProps);\n\n return {start: startViewStateProps, end: endViewStateProps};\n }\n\n /**\n * Returns viewport props in transition\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @param t {number} - a time factor between [0, 1]\n * @returns {object} - a list of interpolated viewport props\n */\n abstract interpolateProps(\n startProps: Record,\n endProps: Record,\n t: number\n ): Record;\n\n /**\n * Returns transition duration\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Number} - transition duration in milliseconds\n */\n getDuration(startProps: Record, endProps: Record): number {\n return endProps.transitionDuration;\n }\n\n _checkRequiredProps(props) {\n if (!this._requiredProps) {\n return;\n }\n\n this._requiredProps.forEach(propName => {\n const value = props[propName];\n assert(\n Number.isFinite(value) || Array.isArray(value),\n `${propName} is required for transition`\n );\n });\n }\n}\n","import type {Timeline} from '@luma.gl/core';\n\nexport type TransitionSettings = {\n duration: number;\n onStart?: (transition: Transition) => void;\n onUpdate?: (transition: Transition) => void;\n onInterrupt?: (transition: Transition) => void;\n onEnd?: (transition: Transition) => void;\n};\n\nexport default class Transition {\n private _inProgress: boolean;\n private _handle: number | null;\n private _timeline: Timeline;\n\n time: number;\n settings: TransitionSettings;\n\n /**\n * @params timeline {Timeline}\n */\n constructor(timeline: Timeline) {\n this._inProgress = false;\n this._handle = null;\n this._timeline = timeline;\n this.time = 0;\n\n // Defaults\n this.settings = {duration: 0};\n }\n\n /* Public API */\n get inProgress(): boolean {\n return this._inProgress;\n }\n\n /**\n * (re)start this transition.\n * @params props {object} - optional overriding props. see constructor\n */\n start(settings: TransitionSettings) {\n this.cancel();\n this.settings = settings;\n this._inProgress = true;\n this.settings.onStart?.(this);\n }\n\n /**\n * end this transition if it is in progress.\n */\n end() {\n if (this._inProgress) {\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n this.settings.onEnd?.(this);\n }\n }\n\n /**\n * cancel this transition if it is in progress.\n */\n cancel() {\n if (this._inProgress) {\n this.settings.onInterrupt?.(this);\n this._timeline.removeChannel(this._handle);\n this._handle = null;\n this._inProgress = false;\n }\n }\n\n /**\n * update this transition. Returns `true` if updated.\n */\n update() {\n if (!this._inProgress) {\n return false;\n }\n\n // It is important to initialize the handle during `update` instead of `start`.\n // The CPU time that the `start` frame takes should not be counted towards the duration.\n // On the other hand, `update` always happens during a render cycle. The clock starts when the\n // transition is rendered for the first time.\n if (this._handle === null) {\n const {_timeline: timeline, settings} = this;\n this._handle = timeline.addChannel({\n delay: timeline.getTime(),\n duration: settings.duration\n });\n }\n\n this.time = this._timeline.getTime(this._handle);\n // Call subclass method\n this._onUpdate();\n // Call user callback\n this.settings.onUpdate?.(this);\n\n // This only works if `settings.duration` is set\n // Spring transition must call `end` manually\n if (this._timeline.isFinished(this._handle)) {\n this.end();\n }\n return true;\n }\n\n /* Private API */\n\n protected _onUpdate() {\n // for subclass override\n }\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport default function assert(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'deck.gl: assertion failed.');\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nconst ERR_NOT_OBJECT = 'count(): argument not an object';\nconst ERR_NOT_CONTAINER = 'count(): argument not a container';\n\n/**\n * Deduces numer of elements in a JavaScript container.\n * - Auto-deduction for ES6 containers that define a count() method\n * - Auto-deduction for ES6 containers that define a size member\n * - Auto-deduction for Classic Arrays via the built-in length attribute\n * - Also handles objects, although note that this an O(N) operation\n */\nexport function count(container: any): number {\n if (!isObject(container)) {\n throw new Error(ERR_NOT_OBJECT);\n }\n\n // Check if ES6 collection \"count\" function is available\n if (typeof container.count === 'function') {\n return container.count();\n }\n\n // Check if ES6 collection \"size\" attribute is set\n if (Number.isFinite(container.size)) {\n return container.size;\n }\n\n // Check if array length attribute is set\n // Note: checking this last since some ES6 collections (Immutable.js)\n // emit profuse warnings when trying to access `length` attribute\n if (Number.isFinite(container.length)) {\n return container.length;\n }\n\n // Note that getting the count of an object is O(N)\n if (isPlainObject(container)) {\n return Object.keys(container).length;\n }\n\n throw new Error(ERR_NOT_CONTAINER);\n}\n\n/**\n * Checks if argument is a plain object (not a class or array etc)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a plain JavaScript object\n */\nfunction isPlainObject(value) {\n return value !== null && typeof value === 'object' && value.constructor === Object;\n}\n\n/**\n * Checks if argument is an indexable object (not a primitive value, nor null)\n * @param {*} value - JavaScript value to be tested\n * @return {Boolean} - true if argument is a JavaScript object\n */\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n","// Partial deep equal (only recursive on arrays)\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n for (const key in a) {\n const aValue = a[key];\n const bValue = b[key];\n const equals =\n aValue === bValue ||\n (Array.isArray(aValue) && Array.isArray(bValue) && deepEqual(aValue, bValue));\n if (!equals) {\n return false;\n }\n }\n return true;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\ntype NestedArray = (T | NestedArray)[];\n\n/**\n * Flattens a nested array into a single level array,\n * or a single value into an array with one value\n * @example flatten([[1, [2]], [3], 4]) => [1, 2, 3, 4]\n * @example flatten(1) => [1]\n * @param array The array to flatten.\n * @param filter= - Optional predicate called on each `value` to\n * determine if it should be included (pushed onto) the resulting array.\n * @return Returns the new flattened array (new array or `result` if provided)\n */\nexport function flatten(\n array: T | NestedArray,\n filter: (element: T) => boolean = () => true\n): T[] {\n // Wrap single object in array\n if (!Array.isArray(array)) {\n return filter(array) ? [array] : [];\n }\n // Deep flatten and filter the array\n return flattenArray(array, filter, []);\n}\n\n/** Deep flattens an array. Helper to `flatten`, see its parameters */\nfunction flattenArray(array: NestedArray, filter: (element: T) => boolean, result: T[]): T[] {\n let index = -1;\n while (++index < array.length) {\n const value = array[index];\n if (Array.isArray(value)) {\n flattenArray(value, filter, result);\n } else if (filter(value)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/** Uses copyWithin to significantly speed up typed array value filling */\nexport function fillArray({target, source, start = 0, count = 1}) {\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n } else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n\n return target;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport type {NumericArray} from '../types/types';\nimport type {AccessorFunction} from '../types/layer-props';\n\nconst EMPTY_ARRAY = [];\nconst placeholderArray = [];\n\n/*\n * Create an Iterable\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n * and a \"context\" tracker from the given data\n */\nexport function createIterable(\n data,\n startRow = 0,\n endRow = Infinity\n): {\n iterable: Iterable;\n objectInfo: {\n index: number;\n data: any;\n target: any[];\n };\n} {\n let iterable: Iterable = EMPTY_ARRAY;\n\n const objectInfo = {\n index: -1,\n data,\n // visitor can optionally utilize this to avoid constructing a new array for every object\n target: []\n };\n\n if (!data) {\n iterable = EMPTY_ARRAY;\n } else if (typeof data[Symbol.iterator] === 'function') {\n // data is already an iterable\n iterable = data;\n } else if (data.length > 0) {\n placeholderArray.length = data.length;\n iterable = placeholderArray;\n }\n\n if (startRow > 0 || Number.isFinite(endRow)) {\n iterable = (Array.isArray(iterable) ? iterable : Array.from(iterable)).slice(startRow, endRow);\n objectInfo.index = startRow - 1;\n }\n\n return {iterable, objectInfo};\n}\n\n/*\n * Returns true if data is an async iterable object\n */\nexport function isAsyncIterable(data): boolean {\n return data && data[Symbol.asyncIterator];\n}\n\n/*\n * Create an accessor function from a flat buffer that yields the value at each object index\n */\nexport function getAccessorFromBuffer(\n typedArray,\n options: {\n size: number;\n stride?: number;\n offset?: number;\n startIndices?: NumericArray;\n nested?: boolean;\n }\n): AccessorFunction {\n const {size, stride, offset, startIndices, nested} = options;\n const bytesPerElement = typedArray.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : size;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const vertexCount = Math.floor((typedArray.length - elementOffset) / elementStride);\n\n return (_, {index, target}) => {\n if (!startIndices) {\n const sourceIndex = index * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n return target;\n }\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || vertexCount;\n let result;\n\n if (nested) {\n result = new Array(endIndex - startIndex);\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n target = new Array(size);\n for (let j = 0; j < size; j++) {\n target[j] = typedArray[sourceIndex + j];\n }\n result[i - startIndex] = target;\n }\n } else if (elementStride === size) {\n result = typedArray.subarray(\n startIndex * size + elementOffset,\n endIndex * size + elementOffset\n );\n } else {\n result = new typedArray.constructor((endIndex - startIndex) * size);\n let targetIndex = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const sourceIndex = i * elementStride + elementOffset;\n for (let j = 0; j < size; j++) {\n result[targetIndex++] = typedArray[sourceIndex + j];\n }\n }\n }\n\n return result;\n };\n}\n","import {Log} from '@probe.gl/log';\n\nexport default new Log({id: 'deck'});\n","// Extensions to math.gl library. Intended to be folded back.\nimport typedArrayManager from './typed-array-manager';\nimport {Vector3, NumericArray} from '@math.gl/core';\n\nimport type {Matrix4} from '@math.gl/core';\n\n// Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()\nexport function createMat4(): number[] {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\nexport function mod(value: number, divisor: number): number {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\n\n// Extract camera vectors (move to math library?)\nexport function getCameraPosition(\n viewMatrixInverse: Matrix4 | NumericArray\n): [number, number, number] {\n // Read the translation from the inverse view matrix\n return [viewMatrixInverse[12], viewMatrixInverse[13], viewMatrixInverse[14]];\n}\n\nexport type FrustumPlane = {\n distance: number;\n normal: Vector3;\n};\n\n// https://www.gamedevs.org/uploads/fast-extraction-viewing-frustum-planes-from-world-view-projection-matrix.pdf\nexport function getFrustumPlanes(viewProjectionMatrix: Matrix4 | NumericArray): {\n left: FrustumPlane;\n right: FrustumPlane;\n top: FrustumPlane;\n bottom: FrustumPlane;\n near: FrustumPlane;\n far: FrustumPlane;\n} {\n return {\n left: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[0],\n viewProjectionMatrix[7] + viewProjectionMatrix[4],\n viewProjectionMatrix[11] + viewProjectionMatrix[8],\n viewProjectionMatrix[15] + viewProjectionMatrix[12]\n ),\n right: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[0],\n viewProjectionMatrix[7] - viewProjectionMatrix[4],\n viewProjectionMatrix[11] - viewProjectionMatrix[8],\n viewProjectionMatrix[15] - viewProjectionMatrix[12]\n ),\n bottom: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[1],\n viewProjectionMatrix[7] + viewProjectionMatrix[5],\n viewProjectionMatrix[11] + viewProjectionMatrix[9],\n viewProjectionMatrix[15] + viewProjectionMatrix[13]\n ),\n top: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[1],\n viewProjectionMatrix[7] - viewProjectionMatrix[5],\n viewProjectionMatrix[11] - viewProjectionMatrix[9],\n viewProjectionMatrix[15] - viewProjectionMatrix[13]\n ),\n near: getFrustumPlane(\n viewProjectionMatrix[3] + viewProjectionMatrix[2],\n viewProjectionMatrix[7] + viewProjectionMatrix[6],\n viewProjectionMatrix[11] + viewProjectionMatrix[10],\n viewProjectionMatrix[15] + viewProjectionMatrix[14]\n ),\n far: getFrustumPlane(\n viewProjectionMatrix[3] - viewProjectionMatrix[2],\n viewProjectionMatrix[7] - viewProjectionMatrix[6],\n viewProjectionMatrix[11] - viewProjectionMatrix[10],\n viewProjectionMatrix[15] - viewProjectionMatrix[14]\n )\n };\n}\n\nconst scratchVector = new Vector3();\n\nfunction getFrustumPlane(a: number, b: number, c: number, d: number): FrustumPlane {\n scratchVector.set(a, b, c);\n const L = scratchVector.len();\n return {distance: d / L, normal: new Vector3(-a / L, -b / L, -c / L)};\n}\n\n/**\n * Calculate the low part of a WebGL 64 bit float\n * @param x {number} - the input float number\n * @returns {number} - the lower 32 bit of the number\n */\nexport function fp64LowPart(x: number): number {\n return x - Math.fround(x);\n}\n\nlet scratchArray;\n\n/**\n * Split a Float64Array into a double-length Float32Array\n * @param typedArray\n * @param options\n * @param options.size - per attribute size\n * @param options.startIndex - start index in the source array\n * @param options.endIndex - end index in the source array\n * @returns {} - high part, low part for each attribute:\n [1xHi, 1yHi, 1zHi, 1xLow, 1yLow, 1zLow, 2xHi, ...]\n */\nexport function toDoublePrecisionArray(\n typedArray: Float64Array,\n options: {size?: number; startIndex?: number; endIndex?: number}\n): Float32Array {\n const {size = 1, startIndex = 0} = options;\n\n const endIndex = options.endIndex !== undefined ? options.endIndex : typedArray.length;\n\n const count = (endIndex - startIndex) / size;\n scratchArray = typedArrayManager.allocate(scratchArray, count, {\n type: Float32Array,\n size: size * 2\n });\n\n let sourceIndex = startIndex;\n let targetIndex = 0;\n while (sourceIndex < endIndex) {\n for (let j = 0; j < size; j++) {\n const value = typedArray[sourceIndex++];\n scratchArray[targetIndex + j] = value;\n scratchArray[targetIndex + j + size] = fp64LowPart(value);\n }\n targetIndex += size * 2;\n }\n\n return scratchArray.subarray(0, count * size * 2);\n}\n","function 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\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 {function} compute - the function to be memoized\n */\nexport default function memoize(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","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Merge two luma.gl shader descriptors\nexport function mergeShaders(target, source) {\n if (!source) {\n return target;\n }\n const result = {...target, ...source};\n\n if ('defines' in source) {\n result.defines = {...target.defines, ...source.defines};\n }\n if ('modules' in source) {\n result.modules = (target.modules || []).concat(source.modules);\n\n // Hack: prject32 and project64 cannot co-exist\n if (source.modules.some(module => module.name === 'project64')) {\n const index = result.modules.findIndex(module => module.name === 'project32');\n if (index >= 0) {\n result.modules.splice(index, 1);\n }\n }\n }\n if ('inject' in source) {\n if (!target.inject) {\n result.inject = source.inject;\n } else {\n const mergedInjection = {...target.inject};\n for (const key in source.inject) {\n mergedInjection[key] = (mergedInjection[key] || '') + source.inject[key];\n }\n result.inject = mergedInjection;\n }\n }\n return result;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {createIterable, getAccessorFromBuffer} from './iterable-utils';\nimport defaultTypedArrayManager from './typed-array-manager';\nimport assert from './assert';\n\nimport {Buffer} from '@luma.gl/webgl';\n\nimport type {BinaryAttribute} from '../lib/attribute/attribute';\nimport type {TypedArray} from '../types/types';\nimport type {AccessorFunction} from '../types/layer-props';\nimport type {TypedArrayManager} from './typed-array-manager';\n\ntype ExternalBuffer = TypedArray | Buffer | BinaryAttribute;\n\ntype TesselatorOptions = ExtraOptionsT & {\n attributes?: Record;\n getGeometry?: AccessorFunction;\n data?: any;\n buffers?: Record;\n geometryBuffer?: ExternalBuffer;\n positionFormat?: 'XY' | 'XYZ';\n dataChanged?: {startRow: number; endRow?: number}[] | string | false;\n normalize?: boolean;\n};\n\nexport type GeometryUpdateContext = {\n vertexStart: number;\n indexStart: number;\n geometrySize: number;\n geometryIndex: number;\n};\n\nexport default abstract class Tesselator {\n opts: TesselatorOptions;\n typedArrayManager: TypedArrayManager;\n indexStarts: number[] = [0];\n vertexStarts: number[] = [0];\n vertexCount: number = 0;\n instanceCount: number = 0;\n attributes: Record;\n\n protected _attributeDefs: any;\n protected data: any;\n protected getGeometry?: AccessorFunction | null;\n protected geometryBuffer?: ExternalBuffer;\n protected buffers!: Record;\n protected positionSize!: number;\n protected normalize!: boolean;\n\n constructor(opts: TesselatorOptions) {\n const {attributes = {}} = opts;\n\n this.typedArrayManager = defaultTypedArrayManager;\n this.attributes = {};\n this._attributeDefs = attributes;\n this.opts = opts;\n\n this.updateGeometry(opts);\n }\n\n /* Public methods */\n updateGeometry(opts: TesselatorOptions): void {\n Object.assign(this.opts, opts);\n const {\n data,\n buffers = {},\n getGeometry,\n geometryBuffer,\n positionFormat,\n dataChanged,\n normalize = true\n } = this.opts;\n this.data = data;\n this.getGeometry = getGeometry;\n this.positionSize =\n // @ts-ignore (2339) when geometryBuffer is a luma Buffer, size falls back to positionFormat\n (geometryBuffer && geometryBuffer.size) || (positionFormat === 'XY' ? 2 : 3);\n this.buffers = buffers;\n this.normalize = normalize;\n\n // Handle external logical value\n if (geometryBuffer) {\n assert(data.startIndices); // binary data missing startIndices\n this.getGeometry = this.getGeometryFromBuffer(geometryBuffer);\n\n if (!normalize) {\n // skip packing and set attribute value directly\n // TODO - avoid mutating user-provided object\n buffers.positions = geometryBuffer;\n }\n }\n this.geometryBuffer = buffers.positions;\n\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged as {startRow: number; endRow?: number}[]) {\n this._rebuildGeometry(dataRange);\n }\n } else {\n this._rebuildGeometry();\n }\n }\n\n updatePartialGeometry({startRow, endRow}: {startRow: number; endRow: number}): void {\n this._rebuildGeometry({startRow, endRow});\n }\n\n // Subclass interface\n\n /** Convert geometry to a uniform shape */\n protected abstract normalizeGeometry(geometry: GeometryT): NormalizedGeometryT;\n\n /** Update the positions buffer of a single geometry */\n protected abstract updateGeometryAttributes(\n geometry: NormalizedGeometryT | null,\n context: GeometryUpdateContext\n );\n\n /** Get the number of vertices in a geometry */\n protected abstract getGeometrySize(geometry: NormalizedGeometryT): number;\n\n protected getGeometryFromBuffer(\n geometryBuffer: ExternalBuffer\n ): AccessorFunction | null {\n const value = (geometryBuffer as BinaryAttribute).value || geometryBuffer;\n if (!ArrayBuffer.isView(value)) {\n // Cannot read binary geometries\n return null;\n }\n\n // @ts-ignore (2322) NumericArray not assignable to GeometryT\n return getAccessorFromBuffer(value, {\n size: this.positionSize,\n offset: (geometryBuffer as BinaryAttribute).offset,\n stride: (geometryBuffer as BinaryAttribute).stride,\n startIndices: this.data.startIndices\n });\n }\n\n /* Private utility methods */\n private _allocate(instanceCount: number, copy: boolean): void {\n // allocate attributes\n const {attributes, buffers, _attributeDefs, typedArrayManager} = this;\n for (const name in _attributeDefs) {\n if (name in buffers) {\n // Use external buffer\n typedArrayManager.release(attributes[name]);\n attributes[name] = null;\n } else {\n const def = _attributeDefs[name];\n // If dataRange is supplied, this is a partial update.\n // In case we need to reallocate the typed array, it will need the old values copied\n // before performing partial update.\n def.copy = copy;\n\n attributes[name] = typedArrayManager.allocate(attributes[name], instanceCount, def);\n }\n }\n }\n\n /**\n * Visit all objects\n * `data` is expected to be an iterable consistent with the base Layer expectation\n */\n private _forEachGeometry(\n visitor: (geometry: GeometryT | null, index: number) => void,\n startRow: number,\n endRow: number\n ): void {\n const {data, getGeometry} = this;\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n const geometry = getGeometry ? getGeometry(object, objectInfo) : null;\n visitor(geometry, objectInfo.index);\n }\n }\n\n /* eslint-disable complexity,max-statements */\n private _rebuildGeometry(dataRange?: {startRow: number; endRow?: number}): void {\n if (!this.data) {\n return;\n }\n\n let {indexStarts, vertexStarts, instanceCount} = this;\n const {data, geometryBuffer} = this;\n const {startRow = 0, endRow = Infinity} = dataRange || {};\n\n const normalizedData: Record = {};\n\n if (!dataRange) {\n // Full update - regenerate buffer layout from scratch\n indexStarts = [0];\n vertexStarts = [0];\n }\n if (this.normalize || !geometryBuffer) {\n this._forEachGeometry(\n (geometry: GeometryT | null, dataIndex: number) => {\n const normalizedGeometry = geometry && this.normalizeGeometry(geometry);\n normalizedData[dataIndex] = normalizedGeometry;\n vertexStarts[dataIndex + 1] =\n vertexStarts[dataIndex] +\n (normalizedGeometry ? this.getGeometrySize(normalizedGeometry) : 0);\n },\n startRow,\n endRow\n );\n // count instances\n instanceCount = vertexStarts[vertexStarts.length - 1];\n } else {\n // assume user provided data is already normalized\n vertexStarts = data.startIndices;\n instanceCount = vertexStarts[data.length] || 0;\n\n if (ArrayBuffer.isView(geometryBuffer)) {\n instanceCount = instanceCount || geometryBuffer.length / this.positionSize;\n } else if (geometryBuffer instanceof Buffer) {\n // @ts-expect-error (2339) accessor is not typed\n const byteStride = geometryBuffer.accessor.stride || this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.byteLength / byteStride;\n } else if (geometryBuffer.buffer) {\n const byteStride = geometryBuffer.stride || this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.buffer.byteLength / byteStride;\n } else if (geometryBuffer.value) {\n const bufferValue = geometryBuffer.value;\n const elementStride =\n // @ts-ignore (2339) if stride is not specified, will fall through to positionSize\n geometryBuffer.stride / bufferValue.BYTES_PER_ELEMENT || this.positionSize;\n instanceCount = instanceCount || bufferValue.length / elementStride;\n }\n }\n\n // allocate attributes\n this._allocate(instanceCount, Boolean(dataRange));\n\n this.indexStarts = indexStarts;\n this.vertexStarts = vertexStarts;\n this.instanceCount = instanceCount;\n\n // @ts-ignore (2739) context will be populated in the loop\n const context: GeometryUpdateContext = {};\n\n this._forEachGeometry(\n (geometry: GeometryT | null, dataIndex: number) => {\n const normalizedGeometry =\n normalizedData[dataIndex] ||\n // @ts-expect-error (2352) GeometryT cannot be casted to NormalizedGeometryT. We are assuming the user passed already normalized data if opts.normalize is set to false.\n (geometry as NormalizedGeometryT);\n context.vertexStart = vertexStarts[dataIndex];\n context.indexStart = indexStarts[dataIndex];\n const vertexEnd =\n dataIndex < vertexStarts.length - 1 ? vertexStarts[dataIndex + 1] : instanceCount;\n context.geometrySize = vertexEnd - vertexStarts[dataIndex];\n context.geometryIndex = dataIndex;\n this.updateGeometryAttributes(normalizedGeometry, context);\n },\n startRow,\n endRow\n );\n\n this.vertexCount = indexStarts[indexStarts.length - 1];\n }\n}\n","import {TypedArray, TypedArrayConstructor} from '../types/types';\n\nexport type TypedArrayManagerOptions = {\n overAlloc?: number;\n poolSize?: number;\n};\n\nexport class TypedArrayManager {\n private _pool: ArrayBuffer[] = [];\n opts: {\n overAlloc: number;\n poolSize: number;\n } = {overAlloc: 2, poolSize: 100};\n\n constructor(options: TypedArrayManagerOptions = {}) {\n this.setOptions(options);\n }\n\n setOptions(options: TypedArrayManagerOptions) {\n Object.assign(this.opts, options);\n }\n\n allocate(\n typedArray: T | null | undefined,\n count: number,\n {\n size = 1,\n type,\n padding = 0,\n copy = false,\n initialize = false,\n maxCount\n }: {\n size?: number;\n type?: TypedArrayConstructor;\n padding?: number;\n copy?: boolean;\n initialize?: boolean;\n maxCount?: number;\n }\n ): T {\n const Type =\n type || (typedArray && (typedArray.constructor as TypedArrayConstructor)) || Float32Array;\n\n const newSize = count * size + padding;\n if (ArrayBuffer.isView(typedArray)) {\n if (newSize <= typedArray.length) {\n return typedArray;\n }\n if (newSize * typedArray.BYTES_PER_ELEMENT <= typedArray.buffer.byteLength) {\n return new Type(typedArray.buffer, 0, newSize) as T;\n }\n }\n\n let maxSize: number = Infinity;\n if (maxCount) {\n maxSize = maxCount * size + padding;\n }\n\n const newArray = this._allocate(Type, newSize, initialize, maxSize);\n\n if (typedArray && copy) {\n newArray.set(typedArray);\n } else if (!initialize) {\n // Hack - always initialize the first 4 elements. NaNs crash the Attribute validation\n newArray.fill(0, 0, 4);\n }\n\n this._release(typedArray);\n return newArray as T;\n }\n\n release(typedArray: TypedArray | null | undefined) {\n this._release(typedArray);\n }\n\n private _allocate(\n Type: TypedArrayConstructor,\n size: number,\n initialize: boolean,\n maxSize: number\n ): TypedArray {\n // Allocate at least one element to ensure a valid buffer\n let sizeToAllocate = Math.max(Math.ceil(size * this.opts.overAlloc), 1);\n // Don't over allocate after certain specified number of elements\n if (sizeToAllocate > maxSize) {\n sizeToAllocate = maxSize;\n }\n\n // Check if available in pool\n const pool = this._pool;\n const byteLength = Type.BYTES_PER_ELEMENT * sizeToAllocate;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i >= 0) {\n // Create a new array using an existing buffer\n const array = new Type(pool.splice(i, 1)[0], 0, sizeToAllocate);\n if (initialize) {\n // Viewing a buffer with a different type may create NaNs\n array.fill(0);\n }\n return array;\n }\n return new Type(sizeToAllocate);\n }\n\n private _release(typedArray: TypedArray | null | undefined): void {\n if (!ArrayBuffer.isView(typedArray)) {\n return;\n }\n const pool = this._pool;\n const {buffer} = typedArray;\n // Save the buffer of the released array into the pool\n // Sort buffers by size\n // TODO - implement binary search?\n const {byteLength} = buffer;\n const i = pool.findIndex(b => b.byteLength >= byteLength);\n if (i < 0) {\n pool.push(buffer);\n } else if (i > 0 || pool.length < this.opts.poolSize) {\n pool.splice(i, 0, buffer);\n }\n if (pool.length > this.opts.poolSize) {\n // Drop the smallest one\n pool.shift();\n }\n }\n}\n\nexport default new TypedArrayManager();\n","import {Matrix4} from '@math.gl/core';\nimport Viewport from './viewport';\nimport {PROJECTION_MODE} from '../lib/constants';\n\nimport * as vec3 from 'gl-matrix/vec3';\nimport * as vec4 from 'gl-matrix/vec4';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nconst RADIANS_TO_DEGREES = 180 / Math.PI;\nconst EARTH_RADIUS = 6370972;\nconst GLOBE_RADIUS = 256;\n\nfunction getDistanceScales() {\n const unitsPerMeter = GLOBE_RADIUS / EARTH_RADIUS;\n const unitsPerDegree = (Math.PI / 180) * GLOBE_RADIUS;\n\n return {\n unitsPerMeter: [unitsPerMeter, unitsPerMeter, unitsPerMeter],\n unitsPerMeter2: [0, 0, 0],\n metersPerUnit: [1 / unitsPerMeter, 1 / unitsPerMeter, 1 / unitsPerMeter],\n unitsPerDegree: [unitsPerDegree, unitsPerDegree, unitsPerMeter],\n unitsPerDegree2: [0, 0, 0],\n degreesPerUnit: [1 / unitsPerDegree, 1 / unitsPerDegree, 1 / unitsPerMeter]\n };\n}\n\nexport type GlobeViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees */\n longitude?: number;\n /** Latitude in degrees */\n latitude?: number;\n /** Camera altitude relative to the viewport height, used to control the FOV. Default `1.5` */\n altitude?: number;\n /* Meter offsets of the viewport center from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Use orthographic projection */\n orthographic?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default `0.1` */\n nearZMultiplier?: number;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the edge of the screen. Default `2` */\n farZMultiplier?: number;\n /** The resolution at which to turn flat features into 3D meshes, in degrees. Smaller numbers will generate more detailed mesh. Default `10` */\n resolution?: number;\n};\n\nexport default class GlobeViewport extends Viewport {\n // @ts-ignore\n longitude: number;\n // @ts-ignore\n latitude: number;\n resolution: number;\n\n constructor(opts: GlobeViewportOptions = {}) {\n const {\n latitude = 0,\n longitude = 0,\n zoom = 0,\n nearZMultiplier = 0.1,\n farZMultiplier = 2,\n resolution = 10\n } = opts;\n\n let {height, altitude = 1.5} = opts;\n\n height = height || 1;\n altitude = Math.max(0.75, altitude);\n\n // Calculate view matrix\n const viewMatrix = new Matrix4().lookAt({eye: [0, -altitude, 0], up: [0, 0, 1]});\n const scale = Math.pow(2, zoom);\n viewMatrix.rotateX(latitude * DEGREES_TO_RADIANS);\n viewMatrix.rotateZ(-longitude * DEGREES_TO_RADIANS);\n viewMatrix.scale(scale / height);\n\n const halfFov = Math.atan(0.5 / altitude);\n const relativeScale = (GLOBE_RADIUS * 2 * scale) / height;\n\n super({\n ...opts,\n // x, y, width,\n height,\n\n // view matrix\n viewMatrix,\n longitude,\n latitude,\n zoom,\n\n // projection matrix parameters\n distanceScales: getDistanceScales(),\n fovyRadians: halfFov * 2,\n focalDistance: altitude,\n near: nearZMultiplier,\n far: Math.min(2, 1 / relativeScale + 1) * altitude * farZMultiplier\n });\n\n this.latitude = latitude;\n this.longitude = longitude;\n this.resolution = resolution;\n }\n\n get projectionMode() {\n return PROJECTION_MODE.GLOBE;\n }\n\n getDistanceScales() {\n return this.distanceScales;\n }\n\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n const unprojectOption = {targetZ: options.z || 0};\n\n const left = this.unproject([0, this.height / 2], unprojectOption);\n const top = this.unproject([this.width / 2, 0], unprojectOption);\n const right = this.unproject([this.width, this.height / 2], unprojectOption);\n const bottom = this.unproject([this.width / 2, this.height], unprojectOption);\n\n if (right[0] < this.longitude) right[0] += 360;\n if (left[0] > this.longitude) left[0] -= 360;\n\n return [\n Math.min(left[0], right[0], top[0], bottom[0]),\n Math.min(left[1], right[1], top[1], bottom[1]),\n Math.max(left[0], right[0], top[0], bottom[0]),\n Math.max(left[1], right[1], top[1], bottom[1])\n ];\n }\n\n unproject(\n xyz: number[],\n {topLeft = true, targetZ}: {topLeft?: boolean; targetZ?: number} = {}\n ): number[] {\n const [x, y, z] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const {pixelUnprojectionMatrix} = this;\n\n let coord;\n if (Number.isFinite(z)) {\n // Has depth component\n coord = transformVector(pixelUnprojectionMatrix, [x, y2, z, 1]);\n } else {\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that line that intersects with the sphere\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y2, -1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y2, 1, 1]);\n\n const lt = ((targetZ || 0) / EARTH_RADIUS + 1) * GLOBE_RADIUS;\n const lSqr = vec3.sqrLen(vec3.sub([], coord0, coord1));\n const l0Sqr = vec3.sqrLen(coord0);\n const l1Sqr = vec3.sqrLen(coord1);\n const sSqr = (4 * l0Sqr * l1Sqr - (lSqr - l0Sqr - l1Sqr) ** 2) / 16;\n const dSqr = (4 * sSqr) / lSqr;\n const r0 = Math.sqrt(l0Sqr - dSqr);\n const dr = Math.sqrt(Math.max(0, lt * lt - dSqr));\n const t = (r0 - dr) / Math.sqrt(lSqr);\n\n coord = vec3.lerp([], coord0, coord1, t);\n }\n const [X, Y, Z] = this.unprojectPosition(coord);\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ as number] : [X, Y];\n }\n\n projectPosition(xyz: number[]): [number, number, number] {\n const [lng, lat, Z = 0] = xyz;\n const lambda = lng * DEGREES_TO_RADIANS;\n const phi = lat * DEGREES_TO_RADIANS;\n const cosPhi = Math.cos(phi);\n const D = (Z / EARTH_RADIUS + 1) * GLOBE_RADIUS;\n\n return [Math.sin(lambda) * cosPhi * D, -Math.cos(lambda) * cosPhi * D, Math.sin(phi) * D];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n const [x, y, z] = xyz;\n const D = vec3.len(xyz);\n const phi = Math.asin(z / D);\n const lambda = Math.atan2(x, -y);\n\n const lng = lambda * RADIANS_TO_DEGREES;\n const lat = phi * RADIANS_TO_DEGREES;\n const Z = (D / GLOBE_RADIUS - 1) * EARTH_RADIUS;\n return [lng, lat, Z];\n }\n\n projectFlat(xyz: number[]): [number, number] {\n return xyz as [number, number];\n }\n\n unprojectFlat(xyz: number[]): [number, number] {\n return xyz as [number, number];\n }\n\n panByPosition(coords: number[], pixel: number[]): GlobeViewportOptions {\n const fromPosition = this.unproject(pixel);\n return {\n longitude: coords[0] - fromPosition[0] + this.longitude,\n latitude: coords[1] - fromPosition[1] + this.latitude\n };\n }\n}\n\nfunction transformVector(matrix: number[], vector: number[]): number[] {\n const result = vec4.transformMat4([], vector, matrix);\n vec4.scale(result, result, 1 / result[3]);\n return result;\n}\n","import Viewport from '../viewports/viewport';\n\nimport {Matrix4, clamp} from '@math.gl/core';\nimport {pixelsToWorld} from '@math.gl/web-mercator';\nimport * as vec2 from 'gl-matrix/vec2';\n\nimport type {Padding} from './viewport';\n\nconst viewMatrix = new Matrix4().lookAt({eye: [0, 0, 1]});\n\nfunction getProjectionMatrix({\n width,\n height,\n near,\n far,\n padding\n}: {\n width: number;\n height: number;\n near: number;\n far: number;\n padding: Padding | null;\n}) {\n let left = -width / 2;\n let right = width / 2;\n let bottom = -height / 2;\n let top = height / 2;\n if (padding) {\n const {left: l = 0, right: r = 0, top: t = 0, bottom: b = 0} = padding;\n const offsetX = clamp((l + width - r) / 2, 0, width) - width / 2;\n const offsetY = clamp((t + height - b) / 2, 0, height) - height / 2;\n left -= offsetX;\n right -= offsetX;\n bottom += offsetY;\n top += offsetY;\n }\n\n return new Matrix4().ortho({\n left,\n right,\n bottom,\n top,\n near,\n far\n });\n}\n\nexport type OrthographicViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number] | [number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large.\n * To apply independent zoom levels to the X and Y axes, supply an array `[zoomX, zoomY]`. Default `0`. */\n zoom?: number | [number, number];\n /** Padding around the viewport, in pixels. */\n padding?: Padding | null;\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to use top-left coordinates (`true`) or bottom-left coordinates (`false`). Default `true`. */\n flipY?: boolean;\n};\n\nexport default class OrthographicViewport extends Viewport {\n constructor(props: OrthographicViewportOptions) {\n const {\n width,\n height,\n near = 0.1,\n far = 1000,\n zoom = 0,\n target = [0, 0, 0],\n padding = null,\n flipY = true\n } = props;\n const zoomX = Array.isArray(zoom) ? zoom[0] : zoom;\n const zoomY = Array.isArray(zoom) ? zoom[1] : zoom;\n const zoom_ = Math.min(zoomX, zoomY);\n const scale = Math.pow(2, zoom_);\n\n let distanceScales;\n if (zoomX !== zoomY) {\n const scaleX = Math.pow(2, zoomX);\n const scaleY = Math.pow(2, zoomY);\n\n distanceScales = {\n unitsPerMeter: [scaleX / scale, scaleY / scale, 1],\n metersPerUnit: [scale / scaleX, scale / scaleY, 1]\n };\n }\n\n super({\n ...props,\n // in case viewState contains longitude/latitude values,\n // make sure that the base Viewport class does not treat this as a geospatial viewport\n longitude: undefined,\n position: target,\n viewMatrix: viewMatrix.clone().scale([scale, scale * (flipY ? -1 : 1), scale]),\n projectionMatrix: getProjectionMatrix({\n width: width || 1,\n height: height || 1,\n padding,\n near,\n far\n }),\n zoom: zoom_,\n distanceScales\n });\n }\n\n projectFlat([X, Y]: number[]): [number, number] {\n const {unitsPerMeter} = this.distanceScales;\n return [X * unitsPerMeter[0], Y * unitsPerMeter[1]];\n }\n\n unprojectFlat([x, y]: number[]): [number, number] {\n const {metersPerUnit} = this.distanceScales;\n return [x * metersPerUnit[0], y * metersPerUnit[1]];\n }\n\n /* Needed by LinearInterpolator */\n panByPosition(coords: number[], pixel: number[]): OrthographicViewportOptions {\n const fromLocation = pixelsToWorld(pixel, this.pixelUnprojectionMatrix);\n const toLocation = this.projectFlat(coords);\n\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n\n return {target: this.unprojectFlat(newCenter)};\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport log from '../utils/log';\nimport {createMat4, getCameraPosition, getFrustumPlanes, FrustumPlane} from '../utils/math-utils';\n\nimport {Matrix4, Vector3, equals, clamp} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\n\nimport {\n getDistanceScales,\n getMeterZoom,\n lngLatToWorld,\n worldToLngLat,\n worldToPixels,\n pixelsToWorld\n} from '@math.gl/web-mercator';\n\nimport {PROJECTION_MODE} from '../lib/constants';\n\nexport type DistanceScales = {\n unitsPerMeter: number[];\n metersPerUnit: number[];\n};\n\nexport type Padding = {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n};\n\nexport type ViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees (geospatial only) */\n longitude?: number;\n /** Latitude in degrees (geospatial only) */\n latitude?: number;\n /** Viewport center in world space. If geospatial, refers to meter offsets from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Padding around the viewport, in pixels. */\n padding?: Padding | null;\n distanceScales?: DistanceScales;\n /** Model matrix of viewport center */\n modelMatrix?: number[] | null;\n /** Custom view matrix */\n viewMatrix?: number[];\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Modifier of viewport scale. Corresponds to the number of pixels per common unit at zoom 0. */\n focalDistance?: number;\n /** Use orthographic projection */\n orthographic?: boolean;\n /** fovy in radians. If supplied, overrides fovy */\n fovyRadians?: number;\n /** fovy in degrees. */\n fovy?: number;\n /** Near plane of the projection matrix */\n near?: number;\n /** Far plane of the projection matrix */\n far?: number;\n};\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nconst IDENTITY = createMat4();\n\nconst ZERO_VECTOR = [0, 0, 0];\n\nconst DEFAULT_DISTANCE_SCALES: DistanceScales = {\n unitsPerMeter: [1, 1, 1],\n metersPerUnit: [1, 1, 1]\n};\n\n// / Helpers\nfunction createProjectionMatrix({\n width,\n height,\n orthographic,\n fovyRadians,\n focalDistance,\n padding,\n near,\n far\n}: {\n width: number;\n height: number;\n orthographic: boolean;\n fovyRadians: number;\n focalDistance: number;\n padding: Padding | null;\n near: number;\n far: number;\n}) {\n const aspect = width / height;\n const matrix = orthographic\n ? new Matrix4().orthographic({fovy: fovyRadians, aspect, focalDistance, near, far})\n : new Matrix4().perspective({fovy: fovyRadians, aspect, near, far});\n if (padding) {\n const {left = 0, right = 0, top = 0, bottom = 0} = padding;\n const offsetX = clamp((left + width - right) / 2, 0, width) - width / 2;\n const offsetY = clamp((top + height - bottom) / 2, 0, height) - height / 2;\n // pixels to clip space\n matrix[8] -= (offsetX * 2) / width;\n matrix[9] += (offsetY * 2) / height;\n }\n return matrix;\n}\n\n/**\n * Manages coordinate system transformations.\n *\n * Note: The Viewport is immutable in the sense that it only has accessors.\n * A new viewport instance should be created if any parameters have changed.\n */\nexport default class Viewport {\n static displayName = 'Viewport';\n\n /** Init parameters */\n\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n padding?: Padding | null;\n isGeospatial: boolean;\n zoom: number;\n focalDistance: number;\n position: number[];\n modelMatrix: number[] | null;\n\n /** Derived parameters */\n\n // `!` post-fix expression operator asserts that its operand is non-null and non-undefined in contexts\n // where the type checker is unable to conclude that fact.\n\n distanceScales: DistanceScales; /** scale factors between world space and common space */\n scale!: number; /** scale factor, equals 2^zoom */\n center!: number[]; /** viewport center in common space */\n cameraPosition!: number[]; /** Camera position in common space */\n projectionMatrix!: number[];\n viewMatrix!: number[];\n viewMatrixUncentered!: number[];\n viewMatrixInverse!: number[];\n viewProjectionMatrix!: number[];\n pixelProjectionMatrix!: number[];\n pixelUnprojectionMatrix!: number[];\n resolution?: number;\n\n private _frustumPlanes: {[name: string]: FrustumPlane} = {};\n\n constructor(opts: ViewportOptions = {}) {\n // @ts-ignore\n this.id = opts.id || this.constructor.displayName || 'viewport';\n\n this.x = opts.x || 0;\n this.y = opts.y || 0;\n // Silently allow apps to send in w,h = 0,0\n this.width = opts.width || 1;\n this.height = opts.height || 1;\n this.zoom = opts.zoom || 0;\n this.padding = opts.padding;\n this.distanceScales = opts.distanceScales || DEFAULT_DISTANCE_SCALES;\n this.focalDistance = opts.focalDistance || 1;\n this.position = opts.position || ZERO_VECTOR;\n this.modelMatrix = opts.modelMatrix || null;\n\n const {longitude, latitude} = opts;\n this.isGeospatial = Number.isFinite(latitude) && Number.isFinite(longitude);\n\n this._initProps(opts);\n this._initMatrices(opts);\n\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.projectPosition = this.projectPosition.bind(this);\n this.unprojectPosition = this.unprojectPosition.bind(this);\n this.projectFlat = this.projectFlat.bind(this);\n this.unprojectFlat = this.unprojectFlat.bind(this);\n }\n\n get metersPerPixel(): number {\n return this.distanceScales.metersPerUnit[2] / this.scale;\n }\n\n get projectionMode(): number {\n if (this.isGeospatial) {\n return this.zoom < 12\n ? PROJECTION_MODE.WEB_MERCATOR\n : PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET;\n }\n return PROJECTION_MODE.IDENTITY;\n }\n\n // Two viewports are equal if width and height are identical, and if\n // their view and projection matrices are (approximately) equal.\n equals(viewport: Viewport): boolean {\n if (!(viewport instanceof Viewport)) {\n return false;\n }\n if (this === viewport) {\n return true;\n }\n\n return (\n viewport.width === this.width &&\n viewport.height === this.height &&\n viewport.scale === this.scale &&\n equals(viewport.projectionMatrix, this.projectionMatrix) &&\n equals(viewport.viewMatrix, this.viewMatrix)\n );\n // TODO - check distance scales?\n }\n\n /**\n * Projects xyz (possibly latitude and longitude) to pixel coordinates in window\n * using viewport projection parameters\n * - [longitude, latitude] to [x, y]\n * - [longitude, latitude, Z] => [x, y, z]\n * Note: By default, returns top-left coordinates for canvas/SVG type render\n *\n * @param {Array} lngLatZ - [lng, lat] or [lng, lat, Z]\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether projected coords are top left\n * @return {Array} - [x, y] or [x, y, z] in top left coords\n */\n project(xyz: number[], {topLeft = true}: {topLeft?: boolean} = {}): number[] {\n const worldPosition = this.projectPosition(xyz);\n const coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n const [x, y] = coord;\n const y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(\n xyz: number[],\n {topLeft = true, targetZ}: {topLeft?: boolean; targetZ?: number} = {}\n ): number[] {\n const [x, y, z] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n const coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n const [X, Y, Z] = this.unprojectPosition(coord);\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ as number] : [X, Y];\n }\n\n // NON_LINEAR PROJECTION HOOKS\n // Used for web meractor projection\n\n projectPosition(xyz: number[]): [number, number, number] {\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n }\n\n /**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n * @param {Array} lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return {Array} [x,y] coordinates.\n */\n projectFlat(xyz: number[]): [number, number] {\n if (this.isGeospatial) {\n // Shader clamps latitude to +-89.9, see /shaderlib/project/project.glsl.js\n // lngLatToWorld([0, -89.9])[1] = -317.9934163758329\n // lngLatToWorld([0, 89.9])[1] = 829.9934163758271\n const result = lngLatToWorld(xyz);\n result[1] = clamp(result[1], -318, 830);\n return result;\n }\n return xyz as [number, number];\n }\n\n /**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n * @param {object|Vector} xy - object with {x,y} members\n * representing point on projected map plane\n * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\n unprojectFlat(xyz: number[]): [number, number] {\n if (this.isGeospatial) {\n return worldToLngLat(xyz);\n }\n return xyz as [number, number];\n }\n\n /**\n * Get bounds of the current viewport\n * @return {Array} - [minX, minY, maxX, maxY]\n */\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n const unprojectOption = {targetZ: options.z || 0};\n\n const topLeft = this.unproject([0, 0], unprojectOption);\n const topRight = this.unproject([this.width, 0], unprojectOption);\n const bottomLeft = this.unproject([0, this.height], unprojectOption);\n const bottomRight = this.unproject([this.width, this.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 getDistanceScales(coordinateOrigin?: number[]): DistanceScales {\n if (coordinateOrigin) {\n return getDistanceScales({\n longitude: coordinateOrigin[0],\n latitude: coordinateOrigin[1],\n highPrecision: true\n });\n }\n return this.distanceScales;\n }\n\n containsPixel({\n x,\n y,\n width = 1,\n height = 1\n }: {\n x: number;\n y: number;\n width?: number;\n height?: number;\n }): boolean {\n return (\n x < this.x + this.width &&\n this.x < x + width &&\n y < this.y + this.height &&\n this.y < y + height\n );\n }\n\n // Extract frustum planes in common space\n getFrustumPlanes(): {\n left: FrustumPlane;\n right: FrustumPlane;\n bottom: FrustumPlane;\n top: FrustumPlane;\n near: FrustumPlane;\n far: FrustumPlane;\n } {\n if (this._frustumPlanes.near) {\n // @ts-ignore\n return this._frustumPlanes;\n }\n\n Object.assign(this._frustumPlanes, getFrustumPlanes(this.viewProjectionMatrix));\n\n // @ts-ignore\n return this._frustumPlanes;\n }\n\n // EXPERIMENTAL METHODS\n\n /**\n * Needed by panning and linear transition\n * Pan the viewport to place a given world coordinate at screen point [x, y]\n *\n * @param {Array} coords - world coordinates\n * @param {Array} pixel - [x,y] coordinates on screen\n * @return {Object} props of the new viewport\n */\n panByPosition(coords: number[], pixel: number[]): any {\n return null;\n }\n\n // INTERNAL METHODS\n\n /* eslint-disable complexity, max-statements */\n private _initProps(opts: ViewportOptions) {\n const longitude = opts.longitude as number;\n const latitude = opts.latitude as number;\n\n if (this.isGeospatial) {\n if (!Number.isFinite(opts.zoom)) {\n this.zoom = getMeterZoom({latitude}) + Math.log2(this.focalDistance);\n }\n this.distanceScales = opts.distanceScales || getDistanceScales({latitude, longitude});\n }\n const scale = Math.pow(2, this.zoom);\n this.scale = scale;\n\n const {position, modelMatrix} = opts;\n let meterOffset: number[] = ZERO_VECTOR;\n if (position) {\n meterOffset = modelMatrix\n ? (new Matrix4(modelMatrix).transformAsVector(position, []) as number[])\n : position;\n }\n\n if (this.isGeospatial) {\n // Determine camera center in common space\n const center = this.projectPosition([longitude, latitude, 0]);\n\n this.center = new Vector3(meterOffset)\n // Convert to pixels in current zoom\n .scale(this.distanceScales.unitsPerMeter)\n .add(center);\n } else {\n this.center = this.projectPosition(meterOffset);\n }\n }\n /* eslint-enable complexity, max-statements */\n\n private _initMatrices(opts: ViewportOptions) {\n const {\n // View matrix\n viewMatrix = IDENTITY,\n // Projection matrix\n projectionMatrix = null,\n\n // Projection matrix parameters, used if projectionMatrix not supplied\n orthographic = false,\n fovyRadians,\n fovy = 75,\n near = 0.1, // Distance of near clipping plane\n far = 1000, // Distance of far clipping plane\n padding = null, // Center offset in pixels\n focalDistance = 1\n } = opts;\n\n this.viewMatrixUncentered = viewMatrix;\n // Make a centered version of the matrix for projection modes without an offset\n this.viewMatrix = new Matrix4()\n // Apply the uncentered view matrix\n .multiplyRight(viewMatrix)\n // And center it\n .translate(new Vector3(this.center).negate());\n\n this.projectionMatrix =\n projectionMatrix ||\n createProjectionMatrix({\n width: this.width,\n height: this.height,\n orthographic,\n fovyRadians: fovyRadians || fovy * DEGREES_TO_RADIANS,\n focalDistance,\n padding,\n near,\n far\n });\n\n // Note: As usual, matrix operations should be applied in \"reverse\" order\n // since vectors will be multiplied in from the right during transformation\n const vpm = createMat4();\n mat4.multiply(vpm, vpm, this.projectionMatrix);\n mat4.multiply(vpm, vpm, this.viewMatrix);\n this.viewProjectionMatrix = vpm;\n\n // console.log('VPM', this.viewMatrix, this.projectionMatrix, this.viewProjectionMatrix);\n\n // Calculate inverse view matrix\n this.viewMatrixInverse = mat4.invert([], this.viewMatrix) || this.viewMatrix;\n\n // Decompose camera parameters\n this.cameraPosition = getCameraPosition(this.viewMatrixInverse);\n\n /*\n * Builds matrices that converts preprojected lngLats to screen pixels\n * and vice versa.\n * Note: Currently returns bottom-left coordinates!\n * Note: Starts with the GL projection matrix and adds steps to the\n * scale and translate that matrix onto the window.\n * Note: WebGL controls clip space to screen projection with gl.viewport\n * and does not need this step.\n */\n\n // matrix for conversion from world location to screen (pixel) coordinates\n const viewportMatrix = createMat4(); // matrix from NDC to viewport.\n const pixelProjectionMatrix = createMat4(); // matrix from world space to viewport.\n mat4.scale(viewportMatrix, viewportMatrix, [this.width / 2, -this.height / 2, 1]);\n mat4.translate(viewportMatrix, viewportMatrix, [1, -1, 0]);\n mat4.multiply(pixelProjectionMatrix, viewportMatrix, this.viewProjectionMatrix);\n this.pixelProjectionMatrix = pixelProjectionMatrix;\n\n this.pixelUnprojectionMatrix = mat4.invert(createMat4(), this.pixelProjectionMatrix);\n if (!this.pixelUnprojectionMatrix) {\n log.warn('Pixel project matrix not invertible')();\n // throw new Error('Pixel project matrix not invertible');\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// View and Projection Matrix calculations for mapbox-js style\n// map view properties\nimport Viewport from './viewport';\n\nimport {\n pixelsToWorld,\n getViewMatrix,\n addMetersToLngLat,\n getProjectionParameters,\n altitudeToFovy,\n fovyToAltitude,\n fitBounds,\n getBounds\n} from '@math.gl/web-mercator';\nimport {Padding} from './viewport';\n\n// TODO - import from math.gl\nimport * as vec2 from 'gl-matrix/vec2';\nimport {Matrix4} from '@math.gl/core';\n\nconst TILE_SIZE = 512;\nconst EARTH_CIRCUMFERENCE = 40.03e6;\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nexport type WebMercatorViewportOptions = {\n /** Name of the viewport */\n id?: string;\n /** Left offset from the canvas edge, in pixels */\n x?: number;\n /** Top offset from the canvas edge, in pixels */\n y?: number;\n /** Viewport width in pixels */\n width?: number;\n /** Viewport height in pixels */\n height?: number;\n /** Longitude in degrees */\n longitude?: number;\n /** Latitude in degrees */\n latitude?: number;\n /** Tilt of the camera in degrees */\n pitch?: number;\n /** Heading of the camera in degrees */\n bearing?: number;\n /** Camera altitude relative to the viewport height, legacy property used to control the FOV. Default `1.5` */\n altitude?: number;\n /** Camera fovy in degrees. If provided, overrides `altitude` */\n fovy?: number;\n /** Viewport center in world space. If geospatial, refers to meter offsets from lng, lat */\n position?: number[];\n /** Zoom level */\n zoom?: number;\n /** Model matrix of viewport center */\n modelMatrix?: number[] | null;\n /** Custom projection matrix */\n projectionMatrix?: number[];\n /** Use orthographic projection */\n orthographic?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default `0.1` */\n nearZMultiplier?: number;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the edge of the screen. Default `1.01` */\n farZMultiplier?: number;\n /** Render multiple copies of the world */\n repeat?: boolean;\n /** Internal use */\n worldOffset?: number;\n /** @deprecated Revert to approximated meter size calculation prior to v8.5 */\n legacyMeterSizes?: boolean;\n};\n\nfunction unitsPerMeter(latitude: number): number {\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;\n}\n\n/**\n * Manages transformations to/from WGS84 coordinates using the Web Mercator Projection.\n */\nexport default class WebMercatorViewport extends Viewport {\n static displayName = 'WebMercatorViewport';\n\n longitude: number;\n latitude: number;\n pitch: number;\n bearing: number;\n altitude: number;\n fovy: number;\n orthographic: boolean;\n\n /** Each sub viewport renders one copy of the world if repeat:true. The list is generated and cached on first request. */\n private _subViewports: WebMercatorViewport[] | null;\n /** @deprecated Revert to approximated meter size calculation prior to v8.5 */\n private _pseudoMeters: boolean;\n\n /* eslint-disable complexity, max-statements */\n constructor(opts: WebMercatorViewportOptions = {}) {\n const {\n latitude = 0,\n longitude = 0,\n zoom = 0,\n pitch = 0,\n bearing = 0,\n nearZMultiplier = 0.1,\n farZMultiplier = 1.01,\n orthographic = false,\n projectionMatrix,\n\n repeat = false,\n worldOffset = 0,\n\n // backward compatibility\n // TODO: remove in v9\n legacyMeterSizes = false\n } = opts;\n\n let {width, height, altitude = 1.5} = opts;\n const scale = Math.pow(2, zoom);\n\n // Silently allow apps to send in 0,0 to facilitate isomorphic render etc\n width = width || 1;\n height = height || 1;\n\n let fovy;\n let projectionParameters: any = null;\n if (projectionMatrix) {\n altitude = projectionMatrix[5] / 2;\n fovy = altitudeToFovy(altitude);\n } else {\n if (opts.fovy) {\n fovy = opts.fovy;\n altitude = fovyToAltitude(fovy);\n } else {\n fovy = altitudeToFovy(altitude);\n }\n projectionParameters = getProjectionParameters({\n width,\n height,\n pitch,\n fovy,\n nearZMultiplier,\n farZMultiplier\n });\n }\n\n // The uncentered matrix allows us two move the center addition to the\n // shader (cheap) which gives a coordinate system that has its center in\n // the layer's center position. This makes rotations and other modelMatrx\n // transforms much more useful.\n let viewMatrixUncentered = getViewMatrix({\n height,\n pitch,\n bearing,\n scale,\n altitude\n });\n\n if (worldOffset) {\n const viewOffset = new Matrix4().translate([512 * worldOffset, 0, 0]);\n viewMatrixUncentered = viewOffset.multiplyLeft(viewMatrixUncentered);\n }\n\n super({\n ...opts,\n // x, y,\n width,\n height,\n\n // view matrix\n viewMatrix: viewMatrixUncentered,\n longitude,\n latitude,\n zoom,\n\n // projection matrix parameters\n ...projectionParameters,\n fovy,\n focalDistance: altitude\n });\n\n // Save parameters\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n\n this.orthographic = orthographic;\n\n this._subViewports = repeat ? [] : null;\n this._pseudoMeters = legacyMeterSizes;\n\n Object.freeze(this);\n }\n /* eslint-enable complexity, max-statements */\n\n get subViewports(): WebMercatorViewport[] | null {\n if (this._subViewports && !this._subViewports.length) {\n // Cache sub viewports so that we only calculate them once\n const bounds = this.getBounds();\n\n const minOffset = Math.floor((bounds[0] + 180) / 360);\n const maxOffset = Math.ceil((bounds[2] - 180) / 360);\n\n for (let x = minOffset; x <= maxOffset; x++) {\n const offsetViewport = x\n ? new WebMercatorViewport({\n ...this,\n worldOffset: x\n })\n : this;\n this._subViewports.push(offsetViewport);\n }\n }\n return this._subViewports;\n }\n\n projectPosition(xyz: number[]): [number, number, number] {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.projectPosition(xyz);\n }\n const [X, Y] = this.projectFlat(xyz);\n const Z = (xyz[2] || 0) * unitsPerMeter(xyz[1]);\n return [X, Y, Z];\n }\n\n unprojectPosition(xyz: number[]): [number, number, number] {\n if (this._pseudoMeters) {\n // Backward compatibility\n return super.unprojectPosition(xyz);\n }\n const [X, Y] = this.unprojectFlat(xyz);\n const Z = (xyz[2] || 0) / unitsPerMeter(Y);\n return [X, Y, Z];\n }\n\n /**\n * Add a meter delta to a base lnglat coordinate, returning a new lnglat array\n *\n * Note: Uses simple linear approximation around the viewport center\n * Error increases with size of offset (roughly 1% per 100km)\n *\n * @param {[Number,Number]|[Number,Number,Number]) lngLatZ - base coordinate\n * @param {[Number,Number]|[Number,Number,Number]) xyz - array of meter deltas\n * @return {[Number,Number]|[Number,Number,Number]) array of [lng,lat,z] deltas\n */\n addMetersToLngLat(lngLatZ: number[], xyz: number[]): number[] {\n return addMetersToLngLat(lngLatZ, xyz);\n }\n\n panByPosition(coords: number[], pixel: number[]): WebMercatorViewportOptions {\n const fromLocation = pixelsToWorld(pixel, this.pixelUnprojectionMatrix);\n const toLocation = this.projectFlat(coords);\n\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n\n const [longitude, latitude] = this.unprojectFlat(newCenter);\n return {longitude, latitude};\n }\n\n getBounds(options: {z?: number} = {}): [number, number, number, number] {\n // @ts-ignore\n const corners = getBounds(this, options.z || 0);\n\n return [\n Math.min(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.min(corners[0][1], corners[1][1], corners[2][1], corners[3][1]),\n Math.max(corners[0][0], corners[1][0], corners[2][0], corners[3][0]),\n Math.max(corners[0][1], corners[1][1], corners[2][1], corners[3][1])\n ];\n }\n\n /**\n * Returns a new viewport that fit around the given rectangle.\n * Only supports non-perspective mode.\n */\n fitBounds(\n /** [[lon, lat], [lon, lat]] */\n bounds: [[number, number], [number, number]],\n options: {\n /** If not supplied, will use the current width of the viewport (default `1`) */\n width?: number;\n /** If not supplied, will use the current height of the viewport (default `1`) */\n height?: number;\n /** In degrees, 0.01 would be about 1000 meters */\n minExtent?: number;\n /** Max zoom level */\n maxZoom?: number;\n /** Extra padding in pixels */\n padding?: number | Required;\n /** Center shift in pixels */\n offset?: number[];\n } = {}\n ) {\n const {width, height} = this;\n const {longitude, latitude, zoom} = fitBounds({width, height, bounds, ...options});\n return new WebMercatorViewport({width, height, longitude, latitude, zoom});\n }\n}\n","import View, {CommonViewState} from './view';\nimport WebMercatorViewport from '../viewports/web-mercator-viewport';\nimport MapController from '../controllers/map-controller';\n\nimport type {NumericArray} from '../types/types';\n\nexport type MapViewState = {\n /** Longitude of the map center */\n longitude: number;\n /** Latitude of the map center */\n latitude: number;\n /** Zoom level */\n zoom: number;\n /** Pitch (tilt) of the map, in degrees. `0` looks top down */\n pitch?: number;\n /** Bearing (rotation) of the map, in degrees. `0` is north up */\n bearing?: number;\n /** Min zoom, default `0` */\n minZoom?: number;\n /** Max zoom, default `20` */\n maxZoom?: number;\n /** Min pitch, default `0` */\n minPitch?: number;\n /** Max pitch, default `60` */\n maxPitch?: number;\n} & CommonViewState;\n\ntype MapViewProps = {\n /** Whether to render multiple copies of the map at low zoom levels. Default `false`. */\n repeat?: boolean;\n /** Scaler for the near plane, 1 unit equals to the height of the viewport. Default to `0.1`. Overwrites the `near` parameter. */\n nearZMultiplier?: boolean;\n /** Scaler for the far plane, 1 unit equals to the distance from the camera to the top edge of the screen. Default to `1.01`. Overwrites the `far` parameter. */\n farZMultiplier?: boolean;\n /** Custom projection matrix */\n projectionMatrix?: NumericArray;\n /** Field of view covered by the camera, in the perspective case. In degrees. If not supplied, will be calculated from `altitude`. */\n fovy?: number;\n /** Distance of the camera relative to viewport height. Default `1.5`. */\n altitude?: number;\n /** Whether to create an orthographic or perspective projection matrix. Default is `false` (perspective projection). */\n orthographic?: boolean;\n};\n\nexport default class MapView extends View {\n static displayName = 'MapView';\n\n get ViewportType() {\n return WebMercatorViewport;\n }\n\n get ControllerType() {\n return MapController;\n }\n}\n","import View, {CommonViewState} from './view';\nimport OrthographicViewport from '../viewports/orthographic-viewport';\nimport OrthographicController from '../controllers/orthographic-controller';\n\nexport type OrthographicViewState = {\n /** The world position at the center of the viewport. Default `[0, 0, 0]`. */\n target?: [number, number, number] | [number, number];\n /** The zoom level of the viewport. `zoom: 0` maps one unit distance to one pixel on screen, and increasing `zoom` by `1` scales the same object to twice as large.\n * To apply independent zoom levels to the X and Y axes, supply an array `[zoomX, zoomY]`. Default `0`. */\n zoom?: number | [number, number];\n /** The min zoom level of the viewport. Default `-Infinity`. */\n minZoom?: number;\n /** The max zoom level of the viewport. Default `Infinity`. */\n maxZoom?: number;\n} & CommonViewState;\n\ntype OrthographicViewProps = {\n /** Distance of near clipping plane. Default `0.1`. */\n near?: number;\n /** Distance of far clipping plane. Default `1000`. */\n far?: number;\n /** Whether to use top-left coordinates (`true`) or bottom-left coordinates (`false`). Default `true`. */\n flipY?: boolean;\n};\n\nexport default class OrthographicView extends View {\n static displayName = 'OrthographicView';\n\n get ViewportType() {\n return OrthographicViewport;\n }\n\n get ControllerType() {\n return OrthographicController;\n }\n}\n","const PERCENT_OR_PIXELS_REGEX = /([0-9]+\\.?[0-9]*)(%|px)/;\n\nexport type Position = {\n position: number;\n relative: boolean;\n};\n\n// Takes a number or a string of formats `50%`, `33.3%` or `200px`\nexport function parsePosition(value: number | string): Position {\n switch (typeof value) {\n case 'number':\n return {\n position: value,\n relative: false\n };\n\n case 'string':\n const match = PERCENT_OR_PIXELS_REGEX.exec(value);\n if (match && match.length >= 3) {\n const relative = match[2] === '%';\n const position = parseFloat(match[1]);\n return {\n position: relative ? position / 100 : position,\n relative\n };\n }\n // fallthrough\n\n default:\n // eslint-disable-line\n throw new Error(`Could not parse position string ${value}`);\n }\n}\n\nexport function getPosition(position: Position, extent: number): number {\n return position.relative ? Math.round(position.position * extent) : position.position;\n}\n","import Viewport from '../viewports/viewport';\nimport {parsePosition, getPosition, Position} from '../utils/positions';\nimport {deepEqual} from '../utils/deep-equal';\nimport assert from '../utils/assert';\nimport type Controller from '../controllers/controller';\nimport type {ControllerOptions} from '../controllers/controller';\nimport type {TransitionProps} from '../controllers/transition-manager';\nimport type {Padding} from '../viewports/viewport';\nimport type {ConstructorOf} from '../types/types';\n\nexport type CommonViewState = TransitionProps;\n\ntype CommonViewProps = {\n /** A unique id of the view. In a multi-view use case, this is important for matching view states and place contents into this view. */\n id?: string;\n /** A relative (e.g. `'50%'`) or absolute position. Default `0`. */\n x?: number | string;\n /** A relative (e.g. `'50%'`) or absolute position. Default `0`. */\n y?: number | string;\n /** A relative (e.g. `'50%'`) or absolute extent. Default `'100%'`. */\n width?: number | string;\n /** A relative (e.g. `'50%'`) or absolute extent. Default `'100%'`. */\n height?: number | string;\n /** Padding around the view, expressed in either relative (e.g. `'50%'`) or absolute pixels. Default `null`. */\n padding?: {\n left?: number | string;\n right?: number | string;\n top?: number | string;\n bottom?: number | string;\n } | null;\n /** State of the view */\n viewState?:\n | string\n | ({\n id?: string;\n } & Partial);\n /** Options for viewport interactivity. */\n controller?:\n | null\n | boolean\n | ConstructorOf>\n | (ControllerOptions & {\n type?: ConstructorOf>;\n });\n\n /** @deprecated Directly wrap a viewport instance */\n viewportInstance?: Viewport;\n};\n\nexport default abstract class View<\n ViewState extends CommonViewState = CommonViewState,\n ViewProps = {}\n> {\n id: string;\n abstract get ViewportType(): ConstructorOf;\n abstract get ControllerType(): ConstructorOf>;\n\n private viewportInstance?: Viewport;\n private _x: Position;\n private _y: Position;\n private _width: Position;\n private _height: Position;\n private _padding: {\n left: Position;\n right: Position;\n top: Position;\n bottom: Position;\n } | null;\n\n readonly props: ViewProps & CommonViewProps;\n\n constructor(props: ViewProps & CommonViewProps) {\n const {\n id,\n x = 0,\n y = 0,\n width = '100%',\n height = '100%',\n padding = null,\n viewportInstance\n } = props || {};\n\n assert(!viewportInstance || viewportInstance instanceof Viewport);\n this.viewportInstance = viewportInstance;\n\n // @ts-ignore\n this.id = id || this.constructor.displayName || 'view';\n\n this.props = {...props, id: this.id};\n\n // Extents\n this._x = parsePosition(x);\n this._y = parsePosition(y);\n this._width = parsePosition(width);\n this._height = parsePosition(height);\n this._padding = padding && {\n left: parsePosition(padding.left || 0),\n right: parsePosition(padding.right || 0),\n top: parsePosition(padding.top || 0),\n bottom: parsePosition(padding.bottom || 0)\n };\n\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n\n Object.seal(this);\n }\n\n equals(view: View): boolean {\n if (this === view) {\n return true;\n }\n\n // if `viewportInstance` is set, it is the only prop that is used\n // Delegate to `Viewport.equals`\n if (this.viewportInstance) {\n return view.viewportInstance ? this.viewportInstance.equals(view.viewportInstance) : false;\n }\n\n return this.ViewportType === view.ViewportType && deepEqual(this.props, view.props);\n }\n\n /** Make viewport from canvas dimensions and view state */\n makeViewport({width, height, viewState}: {width: number; height: number; viewState: any}) {\n if (this.viewportInstance) {\n return this.viewportInstance;\n }\n\n viewState = this.filterViewState(viewState);\n\n // Resolve relative viewport dimensions\n const viewportDimensions = this.getDimensions({width, height});\n return new this.ViewportType({...viewState, ...this.props, ...viewportDimensions});\n }\n\n getViewStateId(): string {\n const {viewState} = this.props;\n if (typeof viewState === 'string') {\n // if View.viewState is a string, return it\n return viewState;\n }\n return viewState?.id || this.id;\n }\n\n // Allows view to override (or completely define) viewState\n filterViewState(viewState: ViewState): ViewState {\n if (this.props.viewState && typeof this.props.viewState === 'object') {\n // If we have specified an id, then intent is to override,\n // If not, completely specify the view state\n if (!this.props.viewState.id) {\n return this.props.viewState as ViewState;\n }\n\n // Merge in all props from View's viewState, except id\n const newViewState = {...viewState};\n for (const key in this.props.viewState) {\n if (key !== 'id') {\n newViewState[key] = this.props.viewState[key];\n }\n }\n return newViewState;\n }\n\n return viewState;\n }\n\n /** Resolve the dimensions of the view from overall canvas dimensions */\n getDimensions({width, height}: {width: number; height: number}): {\n x: number;\n y: number;\n width: number;\n height: number;\n padding?: Padding;\n } {\n const dimensions: {\n x: number;\n y: number;\n width: number;\n height: number;\n padding?: Padding;\n } = {\n x: getPosition(this._x, width),\n y: getPosition(this._y, height),\n width: getPosition(this._width, width),\n height: getPosition(this._height, height)\n };\n\n if (this._padding) {\n dimensions.padding = {\n left: getPosition(this._padding.left, width),\n top: getPosition(this._padding.top, height),\n right: getPosition(this._padding.right, width),\n bottom: getPosition(this._padding.bottom, height)\n };\n }\n return dimensions;\n }\n\n // Used by sub classes to resolve controller props\n get controller(): (ControllerOptions & {type: ConstructorOf>}) | null {\n const opts = this.props.controller;\n\n if (!opts) {\n return null;\n }\n if (opts === true) {\n return {type: this.ControllerType};\n }\n if (typeof opts === 'function') {\n return {type: opts};\n }\n return {type: this.ControllerType, ...opts};\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {DefaultProps} from '@deck.gl/core';\nimport {ArcLayer, ArcLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\n getHeight: {type: 'accessor', value: 0},\n greatCircle: true\n};\n\n/** All properties supported by GreatCircleLayer. */\nexport type GreatCircleLayerProps = ArcLayerProps;\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 extends ArcLayer<\n DataT,\n ExtraProps\n> {\n static layerName = 'GreatCircleLayer';\n static defaultProps: any = defaultProps;\n}\n","import {CompositeLayer, CompositeLayerProps, Layer, LayersList, DefaultProps} from '@deck.gl/core';\nimport {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\n ...PolygonLayer.defaultProps\n};\n\n/** All properties supported by GeoCellLayer. */\nexport type GeoCellLayerProps = PolygonLayerProps & CompositeLayerProps;\n\nexport default class GeoCellLayer extends CompositeLayer<\n Required> & ExtraProps\n> {\n static layerName = 'GeoCellLayer';\n static defaultProps = defaultProps;\n\n /** Implement to generate props to create geometry. */\n indexToBounds(): Partial | 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 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 getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n }\n }),\n this.indexToBounds()\n );\n }\n}\n","/*\nAdapted from s2-geometry\n\nISC License (ISC)\n\nCopyright (c) 2012-2016, Jon Atkins \nCopyright (c) 2016, AJ ONeal \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","// 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","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\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 = {\n getS2Token: {type: 'accessor', value: d => d.token}\n};\n\n/** All properties supported by S2Layer. */\nexport type S2LayerProps = _S2LayerProps & GeoCellLayerProps;\n\n/** Properties added by S2Layer. */\ntype _S2LayerProps = {\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;\n};\n\n/** Render filled and/or stroked polygons based on the [S2](http://s2geometry.io/) geospatial indexing system. */\nexport default class S2Layer extends GeoCellLayer<\n DataT,\n Required<_S2LayerProps> & ExtraProps\n> {\n static layerName = 'S2Layer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial | 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","import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string): [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 + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey);\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","import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps = {\n getQuadkey: {type: 'accessor', value: d => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps = _QuadkeyLayerProps & GeoCellLayerProps;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps = {\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;\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 extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial | null {\n const {data, getQuadkey} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo))\n };\n }\n}\n","import {\n h3ToGeoBoundary,\n h3GetResolution,\n h3ToGeo,\n geoToH3,\n h3IsPentagon,\n h3Distance,\n edgeLength,\n H3Index\n} from 'h3-js';\nimport {lerp} from '@math.gl/core';\nimport {\n AccessorFunction,\n CompositeLayer,\n CompositeLayerProps,\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';\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\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: number[][], 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: H3Index, vertices: number[][], factor: number): void {\n const [lat, lng] = h3ToGeo(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `h3ToGeoBoundary` 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\nfunction getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = h3ToGeo(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = h3ToGeoBoundary(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\nfunction 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\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 = {\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 => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps = _H3HexagonLayerProps &\n PolygonLayerProps &\n CompositeLayerProps;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps = {\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;\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 extends CompositeLayer<\n ExtraPropsT & Required<_H3HexagonLayerProps & Required>>\n> {\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): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters): 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 = h3GetResolution(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 (h3IsPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? edgeLength(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 || geoToH3(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n const distance = h3Distance(centerHex, hex);\n // h3Distance returns a negative number if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = h3ToGeo(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","import {h3SetToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {H3HexagonLayer} from '@deck.gl/geo-layers';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\n\nconst defaultProps: DefaultProps = {\n getHexagons: {type: 'accessor', value: d => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps = _H3ClusterLayerProps &\n GeoCellLayerProps;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps = {\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;\n};\n\nexport default class H3ClusterLayer extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters): 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 = h3SetToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial {\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon\n };\n }\n}\n","import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\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 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) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps = {\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 = _MeshLayerProps & SimpleMeshLayerProps;\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 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(pbr);\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: GL.UNSIGNED_BYTE,\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) {\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 if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\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.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\nuniform bool pickFeatureIds;\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 mat3 instanceModelMatrix;\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 (pickFeatureIds) {\n geometry.pickingColor = featureIdsPickingColors;\n } else {\n geometry.pickingColor = instancePickingColors;\n }\n\n vTexCoord = uv;\n cameraPosition = project_uCameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * 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_PBR\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","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\nuniform sampler2D sampler;\nuniform bool flatShading;\nuniform float opacity;\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_PBR\n\n fragColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n fragColor.a *= opacity;\n\n#else\n\n geometry.uv = vTexCoord;\n\n vec3 normal;\n if (flatShading) {\n\n// NOTE(Tarek): This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * opacity);\n\n#endif\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nexport const WGS84_RADIUS_X = 6378137.0;\nexport const WGS84_RADIUS_Y = 6378137.0;\nexport const WGS84_RADIUS_Z = 6356752.3142451793;\n\n// Pre-calculated ellipsoid defaults to avoid utils depending on `ellipsoid.js`\n\nexport const WGS84_CONSTANTS = {\n radii: [WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z],\n radiiSquared: [\n WGS84_RADIUS_X * WGS84_RADIUS_X,\n WGS84_RADIUS_Y * WGS84_RADIUS_Y,\n WGS84_RADIUS_Z * WGS84_RADIUS_Z\n ],\n oneOverRadii: [1.0 / WGS84_RADIUS_X, 1.0 / WGS84_RADIUS_Y, 1.0 / WGS84_RADIUS_Z],\n oneOverRadiiSquared: [\n 1.0 / (WGS84_RADIUS_X * WGS84_RADIUS_X),\n 1.0 / (WGS84_RADIUS_Y * WGS84_RADIUS_Y),\n 1.0 / (WGS84_RADIUS_Z * WGS84_RADIUS_Z)\n ],\n maximumRadius: Math.max(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z),\n centerToleranceSquared: 1e-1 // EPSILON1;\n};\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport type {NumericArray} from '@math.gl/core';\nimport {Vector3, toRadians, toDegrees, config} from '@math.gl/core';\nimport {WGS84_CONSTANTS} from './constants';\n\ntype LngLatHeightObject = {\n longitude: number;\n latitude: number;\n height: number;\n};\n\ntype XYZObject = {\n x: number;\n y: number;\n z: number;\n};\n\ntype Cartographic = LngLatHeightObject | XYZObject | NumericArray;\n\nfunction identity(x: number): number {\n return x;\n}\n\nconst scratchVector = new Vector3();\n\nexport function fromCartographic(cartographic: Cartographic): number[];\nexport function fromCartographic(\n cartographic: Cartographic,\n result: NumArrayT,\n map?: (x: number) => number\n): NumArrayT;\nexport function fromCartographic(\n cartographic: Cartographic,\n result = [] as number[],\n map = identity\n): number[] {\n if ('longitude' in cartographic) {\n result[0] = map(cartographic.longitude);\n result[1] = map(cartographic.latitude);\n result[2] = cartographic.height;\n } else if ('x' in cartographic) {\n result[0] = map(cartographic.x);\n result[1] = map(cartographic.y);\n result[2] = cartographic.z;\n } else {\n result[0] = map(cartographic[0]);\n result[1] = map(cartographic[1]);\n result[2] = cartographic[2];\n }\n return result;\n}\n\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n vector = [] as number[]\n): number[] {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? identity : toRadians);\n}\n\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n result: TArray\n): TArray;\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n vector = [] as number[]\n): number[] {\n return fromCartographic(cartographic, vector, config._cartographicRadians ? toDegrees : identity);\n}\n\nexport function toCartographic(\n vector: Readonly,\n cartographic: T,\n map: (x: number) => number = identity\n): T {\n if ('longitude' in cartographic) {\n cartographic.longitude = map(vector[0]);\n cartographic.latitude = map(vector[1]);\n cartographic.height = vector[2];\n } else if ('x' in cartographic) {\n cartographic.x = map(vector[0]);\n cartographic.y = map(vector[1]);\n cartographic.z = vector[2];\n } else {\n cartographic[0] = map(vector[0]);\n cartographic[1] = map(vector[1]);\n cartographic[2] = vector[2];\n }\n return cartographic;\n}\n\nexport function toCartographicFromRadians(\n vector: Readonly,\n cartographic: T\n): T {\n return toCartographic(vector, cartographic, config._cartographicRadians ? identity : toDegrees);\n}\n\nexport function toCartographicFromDegrees(\n vector: Readonly,\n cartographic: T\n): T {\n return toCartographic(vector, cartographic, config._cartographicRadians ? toRadians : identity);\n}\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: Readonly): boolean {\n if (!vector) {\n return false;\n }\n scratchVector.from(vector);\n const {oneOverRadiiSquared, centerToleranceSquared} = WGS84_CONSTANTS;\n const x2 = vector[0] * vector[0] * oneOverRadiiSquared[0];\n const y2 = vector[1] * vector[1] * oneOverRadiiSquared[1];\n const z2 = vector[2] * vector[2] * oneOverRadiiSquared[2];\n return Math.abs(x2 + y2 + z2 - 1) < centerToleranceSquared;\n}\n\n/*\n\nexport function fromCartographic(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographic(cartographic: Cartographic, result: TypedArray): TypedArray;\nexport function fromCartographicToRadians(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToRadians(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\nexport function fromCartographicToDegrees(cartographic: Cartographic, result?: number[]): number[];\nexport function fromCartographicToDegrees(\n cartographic: Cartographic,\n result: TypedArray\n): TypedArray;\n\nexport function toCartographic(vector: number[] | TypedArray, result: Cartographic): number[];\nexport function toCartographicFromRadians(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\nexport function toCartographicFromDegrees(\n vector: number[] | TypedArray,\n result: Cartographic\n): number[];\n\n// Estimates if a vector is close to the surface of the WGS84 Ellipsoid\nexport function isWGS84(vector: number[] | TypedArray): boolean;\n*/\n","/* eslint-disable */\nimport {Vector3, _MathUtils} from '@math.gl/core';\nimport type Ellipsoid from '../ellipsoid';\n\nconst scratchVector = new Vector3();\nconst scaleToGeodeticSurfaceIntersection = new Vector3();\nconst scaleToGeodeticSurfaceGradient = new Vector3();\n\n// Scales the provided Cartesian position along the geodetic surface normal\n// so that it is on the surface of this ellipsoid. If the position is\n// at the center of the ellipsoid, this function returns undefined.\nexport default function scaleToGeodeticSurface(\n cartesian: number[],\n ellipsoid: Ellipsoid,\n result: number[] = []\n): number[] {\n const {oneOverRadii, oneOverRadiiSquared, centerToleranceSquared} = ellipsoid;\n\n scratchVector.from(cartesian);\n\n const positionX = scratchVector.x;\n const positionY = scratchVector.y;\n const positionZ = scratchVector.z;\n\n const oneOverRadiiX = oneOverRadii.x;\n const oneOverRadiiY = oneOverRadii.y;\n const oneOverRadiiZ = oneOverRadii.z;\n\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n const squaredNorm = x2 + y2 + z2;\n const ratio = Math.sqrt(1.0 / squaredNorm);\n\n // When very close to center or at center\n if (!Number.isFinite(ratio)) {\n return undefined;\n }\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n const intersection = scaleToGeodeticSurfaceIntersection;\n intersection.copy(cartesian).scale(ratio);\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return intersection.to(result);\n }\n\n const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n const gradient = scaleToGeodeticSurfaceGradient;\n gradient.set(\n intersection.x * oneOverRadiiSquaredX * 2.0,\n intersection.y * oneOverRadiiSquaredY * 2.0,\n intersection.z * oneOverRadiiSquaredZ * 2.0\n );\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n let lambda = ((1.0 - ratio) * scratchVector.len()) / (0.5 * gradient.len());\n let correction = 0.0;\n\n let xMultiplier;\n let yMultiplier;\n let zMultiplier;\n let func;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n const xMultiplier2 = xMultiplier * xMultiplier;\n const yMultiplier2 = yMultiplier * yMultiplier;\n const zMultiplier2 = zMultiplier * zMultiplier;\n\n const xMultiplier3 = xMultiplier2 * xMultiplier;\n const yMultiplier3 = yMultiplier2 * yMultiplier;\n const zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n const denominator =\n x2 * xMultiplier3 * oneOverRadiiSquaredX +\n y2 * yMultiplier3 * oneOverRadiiSquaredY +\n z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n const derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > _MathUtils.EPSILON12);\n\n return scratchVector.scale([xMultiplier, yMultiplier, zMultiplier]).to(result);\n}\n","import {Vector3, assert, equals as equalsEpsilon} from '@math.gl/core';\n\nimport type Ellipsoid from '../ellipsoid';\n\nconst EPSILON14 = 1e-14;\n\nconst scratchOrigin = new Vector3();\n\n// Caclulate third axis from given two axii\nconst VECTOR_PRODUCT_LOCAL_FRAME = {\n up: {\n south: 'east',\n north: 'west',\n west: 'south',\n east: 'north'\n },\n down: {\n south: 'west',\n north: 'east',\n west: 'north',\n east: 'south'\n },\n south: {\n up: 'west',\n down: 'east',\n west: 'down',\n east: 'up'\n },\n north: {\n up: 'east',\n down: 'west',\n west: 'up',\n east: 'down'\n },\n west: {\n up: 'north',\n down: 'south',\n north: 'down',\n south: 'up'\n },\n east: {\n up: 'south',\n down: 'north',\n north: 'up',\n south: 'down'\n }\n} as const;\n\nconst degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1]\n} as const;\n\nconst scratchAxisVectors = {\n east: new Vector3(),\n north: new Vector3(),\n up: new Vector3(),\n west: new Vector3(),\n south: new Vector3(),\n down: new Vector3()\n};\n\nconst scratchVector1 = new Vector3();\nconst scratchVector2 = new Vector3();\nconst scratchVector3 = new Vector3();\n\ntype Axis = 'up' | 'down' | 'north' | 'east' | 'south' | 'west';\n\n// Computes a 4x4 transformation matrix from a reference frame\n// centered at the provided origin to the provided ellipsoid's fixed reference frame.\n// eslint-disable-next-line max-statements, max-params, complexity\nexport default function localFrameToFixedFrame(\n ellipsoid: Ellipsoid,\n firstAxis: Axis,\n secondAxis: Axis,\n thirdAxis: Axis,\n cartesianOrigin: number[],\n result: number[]\n): number[] {\n const thirdAxisInferred =\n VECTOR_PRODUCT_LOCAL_FRAME[firstAxis] &&\n (VECTOR_PRODUCT_LOCAL_FRAME[firstAxis][secondAxis] as Axis);\n // firstAxis and secondAxis must be east, north, up, west, south or down.');\n assert(thirdAxisInferred && (!thirdAxis || thirdAxis === thirdAxisInferred));\n\n let firstAxisVector: Vector3;\n let secondAxisVector: Vector3;\n let thirdAxisVector: Vector3;\n\n const origin = scratchOrigin.copy(cartesianOrigin);\n\n // If x and y are zero, assume origin is at a pole, which is a special case.\n const atPole = equalsEpsilon(origin.x, 0.0, EPSILON14) && equalsEpsilon(origin.y, 0.0, EPSILON14);\n\n if (atPole) {\n // Look up axis value and adjust\n const sign = Math.sign(origin.z);\n\n firstAxisVector = scratchVector1.fromArray(degeneratePositionLocalFrame[firstAxis]);\n if (firstAxis !== 'east' && firstAxis !== 'west') {\n firstAxisVector.scale(sign);\n }\n\n secondAxisVector = scratchVector2.fromArray(degeneratePositionLocalFrame[secondAxis]);\n if (secondAxis !== 'east' && secondAxis !== 'west') {\n secondAxisVector.scale(sign);\n }\n\n thirdAxisVector = scratchVector3.fromArray(degeneratePositionLocalFrame[thirdAxis]);\n if (thirdAxis !== 'east' && thirdAxis !== 'west') {\n thirdAxisVector.scale(sign);\n }\n } else {\n // Calculate all axis\n const {up, east, north} = scratchAxisVectors;\n\n east.set(-origin.y, origin.x, 0.0).normalize();\n ellipsoid.geodeticSurfaceNormal(origin, up);\n north.copy(up).cross(east);\n\n const {down, west, south} = scratchAxisVectors;\n\n down.copy(up).scale(-1);\n west.copy(east).scale(-1);\n south.copy(north).scale(-1);\n\n // Pick three axis based on desired orientation\n firstAxisVector = scratchAxisVectors[firstAxis];\n secondAxisVector = scratchAxisVectors[secondAxis];\n thirdAxisVector = scratchAxisVectors[thirdAxis];\n }\n\n // TODO - assuming the result is column-major\n result[0] = firstAxisVector.x;\n result[1] = firstAxisVector.y;\n result[2] = firstAxisVector.z;\n result[3] = 0.0;\n result[4] = secondAxisVector.x;\n result[5] = secondAxisVector.y;\n result[6] = secondAxisVector.z;\n result[7] = 0.0;\n result[8] = thirdAxisVector.x;\n result[9] = thirdAxisVector.y;\n result[10] = thirdAxisVector.z;\n result[11] = 0.0;\n result[12] = origin.x;\n result[13] = origin.y;\n result[14] = origin.z;\n result[15] = 1.0;\n return result;\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {\n Vector3,\n Matrix4,\n toRadians,\n toDegrees,\n assert,\n equals,\n _MathUtils,\n NumericArray\n} from '@math.gl/core';\nimport * as vec3 from 'gl-matrix/vec3';\n\nimport {WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z} from '../constants';\nimport {fromCartographicToRadians, toCartographicFromRadians} from '../type-utils';\n\nimport scaleToGeodeticSurface from './helpers/scale-to-geodetic-surface';\nimport localFrameToFixedFrame from './helpers/ellipsoid-transform';\n\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\nconst scratchK = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchHeight = new Vector3();\nconst scratchCartesian = new Vector3();\n\nlet wgs84;\n\n/**\n * A quadratic surface defined in Cartesian coordinates by the equation\n * `(x / a)^2 + (y / b)^2 + (z / c)^2 = 1`. Primarily used\n * to represent the shape of planetary bodies.\n */\nexport default class Ellipsoid {\n /** An Ellipsoid instance initialized to the WGS84 standard. */\n static readonly WGS84: Ellipsoid = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);\n\n readonly radii: Vector3;\n readonly radiiSquared: Vector3;\n readonly radiiToTheFourth: Vector3;\n readonly oneOverRadii: Vector3;\n readonly oneOverRadiiSquared: Vector3;\n readonly minimumRadius: number;\n readonly maximumRadius: number;\n readonly centerToleranceSquared: number = _MathUtils.EPSILON1;\n readonly squaredXOverSquaredZ: number;\n\n /** Creates an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions. */\n constructor(x: number, y: number, z: number);\n constructor();\n\n constructor(x = 0.0, y = 0.0, z = 0.0) {\n assert(x >= 0.0);\n assert(y >= 0.0);\n assert(z >= 0.0);\n\n this.radii = new Vector3(x, y, z);\n\n this.radiiSquared = new Vector3(x * x, y * y, z * z);\n\n this.radiiToTheFourth = new Vector3(x * x * x * x, y * y * y * y, z * z * z * z);\n\n this.oneOverRadii = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / x,\n y === 0.0 ? 0.0 : 1.0 / y,\n z === 0.0 ? 0.0 : 1.0 / z\n );\n\n this.oneOverRadiiSquared = new Vector3(\n x === 0.0 ? 0.0 : 1.0 / (x * x),\n y === 0.0 ? 0.0 : 1.0 / (y * y),\n z === 0.0 ? 0.0 : 1.0 / (z * z)\n );\n\n this.minimumRadius = Math.min(x, y, z);\n\n this.maximumRadius = Math.max(x, y, z);\n\n if (this.radiiSquared.z !== 0) {\n this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;\n }\n\n Object.freeze(this);\n }\n\n /** Compares this Ellipsoid against the provided Ellipsoid componentwise */\n equals(right: Ellipsoid): boolean {\n return this === right || Boolean(right && this.radii.equals(right.radii));\n }\n\n /** Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'. */\n toString(): string {\n return this.radii.toString();\n }\n\n /** Converts the provided cartographic to Cartesian representation. */\n cartographicToCartesian(cartographic: number[], result: Vector3): Vector3;\n cartographicToCartesian(cartographic: number[], result?: number[]): number[];\n\n cartographicToCartesian(cartographic, result = [0, 0, 0]) {\n const normal = scratchNormal;\n const k = scratchK;\n\n const [, , height] = cartographic;\n this.geodeticSurfaceNormalCartographic(cartographic, normal);\n k.copy(this.radiiSquared).scale(normal);\n\n const gamma = Math.sqrt(normal.dot(k));\n k.scale(1 / gamma);\n\n normal.scale(height);\n\n k.add(normal);\n\n return k.to(result);\n }\n\n /** Converts the provided cartesian to cartographic (lng/lat/z) representation.\n * The cartesian is undefined at the center of the ellipsoid. */\n cartesianToCartographic(cartesian: number[], result: Vector3): Vector3;\n cartesianToCartographic(cartesian: number[], result?: number[]): number[];\n\n cartesianToCartographic(cartesian, result = [0, 0, 0]) {\n scratchCartesian.from(cartesian);\n const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);\n\n if (!point) {\n return undefined;\n }\n\n const normal = this.geodeticSurfaceNormal(point, scratchNormal);\n\n const h = scratchHeight;\n h.copy(scratchCartesian).subtract(point);\n\n const longitude = Math.atan2(normal.y, normal.x);\n const latitude = Math.asin(normal.z);\n const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);\n\n return toCartographicFromRadians([longitude, latitude, height], result);\n }\n\n /** Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame. */\n eastNorthUpToFixedFrame(origin: number[], result?: Matrix4): Matrix4;\n eastNorthUpToFixedFrame(origin: number[], result: number[]): number[];\n\n eastNorthUpToFixedFrame(origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, 'east', 'north', 'up', origin, result);\n }\n\n /** Computes a 4x4 transformation matrix from a reference frame centered at\n * the provided origin to the ellipsoid's fixed reference frame.\n */\n localFrameToFixedFrame(\n firstAxis: string,\n secondAxis: string,\n thirdAxis: string,\n origin: Readonly,\n result?: Matrix4\n ): Matrix4;\n localFrameToFixedFrame(\n firstAxis: string,\n secondAxis: string,\n thirdAxis: string,\n origin: Readonly,\n result: number[]\n ): number[];\n\n // Computes a 4x4 transformation matrix from a reference frame centered at\n // the provided origin to the ellipsoid's fixed reference frame.\n localFrameToFixedFrame(firstAxis, secondAxis, thirdAxis, origin, result = new Matrix4()) {\n return localFrameToFixedFrame(this, firstAxis, secondAxis, thirdAxis, origin, result);\n }\n\n /** Computes the unit vector directed from the center of this ellipsoid toward\n * the provided Cartesian position. */\n geocentricSurfaceNormal(cartesian: number[], result?: number[]): number[];\n geocentricSurfaceNormal(cartesian: number[], result: NumArray): NumArray;\n geocentricSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).normalize().to(result);\n }\n\n /** Computes the normal of the plane tangent to the surface of the ellipsoid at provided position. */\n geodeticSurfaceNormalCartographic(cartographic: number[], result: NumArray): NumArray;\n geodeticSurfaceNormalCartographic(cartographic: number[]): number[];\n geodeticSurfaceNormalCartographic(cartographic, result = [0, 0, 0]) {\n const cartographicVectorRadians = fromCartographicToRadians(cartographic);\n\n const longitude = cartographicVectorRadians[0];\n const latitude = cartographicVectorRadians[1];\n\n const cosLatitude = Math.cos(latitude);\n\n scratchVector\n .set(cosLatitude * Math.cos(longitude), cosLatitude * Math.sin(longitude), Math.sin(latitude))\n .normalize();\n\n return scratchVector.to(result);\n }\n\n /** Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. */\n geodeticSurfaceNormal(cartesian: number[], result: NumArrayT): NumArrayT;\n geodeticSurfaceNormal(cartesian: number[]): number[];\n geodeticSurfaceNormal(cartesian, result = [0, 0, 0]) {\n return scratchVector.from(cartesian).scale(this.oneOverRadiiSquared).normalize().to(result);\n }\n\n /** Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined. */\n scaleToGeodeticSurface(cartesian: number[], result?: number[]): number[] {\n return scaleToGeodeticSurface(cartesian, this, result);\n }\n\n /** Scales the provided Cartesian position along the geocentric surface normal\n * so that it is on the surface of this ellipsoid. */\n scaleToGeocentricSurface(cartesian: number[], result: number[] = [0, 0, 0]): number[] {\n scratchPosition.from(cartesian);\n\n const positionX = scratchPosition.x;\n const positionY = scratchPosition.y;\n const positionZ = scratchPosition.z;\n const oneOverRadiiSquared = this.oneOverRadiiSquared;\n\n const beta =\n 1.0 /\n Math.sqrt(\n positionX * positionX * oneOverRadiiSquared.x +\n positionY * positionY * oneOverRadiiSquared.y +\n positionZ * positionZ * oneOverRadiiSquared.z\n );\n\n return scratchPosition.multiplyScalar(beta).to(result);\n }\n\n /** Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\n * its components by the result of `Ellipsoid#oneOverRadii` */\n transformPositionToScaledSpace(position: number[], result: number[] = [0, 0, 0]): number[] {\n return scratchPosition.from(position).scale(this.oneOverRadii).to(result);\n }\n\n /** Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\n * its components by the result of `Ellipsoid#radii`. */\n transformPositionFromScaledSpace(position: number[], result: number[] = [0, 0, 0]): number[] {\n return scratchPosition.from(position).scale(this.radii).to(result);\n }\n\n /** Computes a point which is the intersection of the surface normal with the z-axis. */\n getSurfaceNormalIntersectionWithZAxis(\n position: number[],\n buffer: number = 0,\n result: number[] = [0, 0, 0]\n ): number[] {\n // Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\n assert(equals(this.radii.x, this.radii.y, _MathUtils.EPSILON15));\n assert(this.radii.z > 0);\n\n scratchPosition.from(position);\n const z = scratchPosition.z * (1 - this.squaredXOverSquaredZ);\n\n if (Math.abs(z) >= this.radii.z - buffer) {\n return undefined;\n }\n\n return scratchPosition.set(0.0, 0.0, z).to(result);\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/**\n * Doubly linked list node\n *\n * @private\n */\nexport default class DoublyLinkedListNode {\n item;\n previous;\n next;\n\n constructor(item, previous, next) {\n this.item = item;\n this.previous = previous;\n this.next = next;\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport DoublyLinkedListNode from '../utils/doubly-linked-list-node';\n\n/**\n * Doubly linked list\n *\n * @private\n */\nexport default class DoublyLinkedList {\n head: DoublyLinkedListNode | null = null;\n tail: DoublyLinkedListNode | null = null;\n _length = 0;\n\n get length() {\n return this._length;\n }\n\n /**\n * Adds the item to the end of the list\n * @param {*} [item]\n * @return {DoublyLinkedListNode}\n */\n add(item) {\n const node = new DoublyLinkedListNode(item, this.tail, null);\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n ++this._length;\n\n return node;\n }\n\n /**\n * Removes the given node from the list\n * @param {DoublyLinkedListNode} node\n */\n remove(node) {\n if (!node) {\n return;\n }\n\n if (node.previous && node.next) {\n node.previous.next = node.next;\n node.next.previous = node.previous;\n } else if (node.previous) {\n // Remove last node\n node.previous.next = null;\n this.tail = node.previous;\n } else if (node.next) {\n // Remove first node\n node.next.previous = null;\n this.head = node.next;\n } else {\n // Remove last node in the linked list\n this.head = null;\n this.tail = null;\n }\n\n node.next = null;\n node.previous = null;\n\n --this._length;\n }\n\n /**\n * Moves nextNode after node\n * @param {DoublyLinkedListNode} node\n * @param {DoublyLinkedListNode} nextNode\n */\n splice(node, nextNode) {\n if (node === nextNode) {\n return;\n }\n\n // Remove nextNode, then insert after node\n this.remove(nextNode);\n this._insert(node, nextNode);\n }\n\n _insert(node, nextNode) {\n const oldNodeNext = node.next;\n node.next = nextNode;\n\n // nextNode is the new tail\n if (this.tail === node) {\n this.tail = nextNode;\n } else {\n oldNodeNext.previous = nextNode;\n }\n\n nextNode.next = oldNodeNext;\n nextNode.previous = node;\n\n ++this._length;\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport DoublyLinkedList from '../utils/doubly-linked-list';\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\n/**\n * Stores tiles with content loaded.\n *\n * @private\n */\nexport default class TilesetCache {\n private _list: DoublyLinkedList;\n private _sentinel: any;\n private _trimTiles: boolean;\n\n constructor() {\n // [head, sentinel) -> tiles that weren't selected this frame and may be removed from the cache\n // (sentinel, tail] -> tiles that were selected this frame\n this._list = new DoublyLinkedList();\n this._sentinel = this._list.add('sentinel');\n this._trimTiles = false;\n }\n\n reset() {\n // Move sentinel node to the tail so, at the start of the frame, all tiles\n // may be potentially replaced. Tiles are moved to the right of the sentinel\n // when they are selected so they will not be replaced.\n this._list.splice(this._list.tail, this._sentinel);\n }\n\n touch(tile) {\n const node = tile._cacheNode;\n if (defined(node)) {\n this._list.splice(this._sentinel, node);\n }\n }\n\n add(tileset, tile, addCallback) {\n if (!defined(tile._cacheNode)) {\n tile._cacheNode = this._list.add(tile);\n\n if (addCallback) {\n addCallback(tileset, tile);\n }\n }\n }\n\n unloadTile(tileset, tile, unloadCallback?) {\n const node = tile._cacheNode;\n if (!defined(node)) {\n return;\n }\n\n this._list.remove(node);\n tile._cacheNode = undefined;\n if (unloadCallback) {\n unloadCallback(tileset, tile);\n }\n }\n\n unloadTiles(tileset, unloadCallback) {\n const trimTiles = this._trimTiles;\n this._trimTiles = false;\n\n const list = this._list;\n\n const maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;\n\n // Traverse the list only to the sentinel since tiles/nodes to the\n // right of the sentinel were used this frame.\n // The sub-list to the left of the sentinel is ordered from LRU to MRU.\n const sentinel = this._sentinel;\n let node = list.head;\n\n while (\n node !== sentinel &&\n (tileset.gpuMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)\n ) {\n // @ts-expect-error\n const tile = node.item;\n // @ts-expect-error\n node = node.next;\n this.unloadTile(tileset, tile, unloadCallback);\n }\n }\n\n trim() {\n this._trimTiles = true;\n }\n}\n","import {Tile3D} from '@loaders.gl/tiles';\nimport {Vector3} from '@math.gl/core';\nimport {CullingVolume, Plane} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GeospatialViewport, Viewport} from '../../types';\n\nexport type FrameState = {\n camera: {\n position: number[];\n direction: number[];\n up: number[];\n };\n viewport: GeospatialViewport;\n topDownViewport: GeospatialViewport; // Use it to calculate projected radius for a tile\n height: number;\n cullingVolume: CullingVolume;\n frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: number; // Assumes fovy = 60 degrees\n};\n\nconst scratchVector = new Vector3();\nconst scratchPosition = new Vector3();\nconst cullingVolume = new CullingVolume([\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane()\n]);\n\n// Extracts a frame state appropriate for tile culling from a deck.gl viewport\n// TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios\nexport function getFrameState(viewport: GeospatialViewport, frameNumber: number): FrameState {\n // Traverse and and request. Update _selectedTiles so that we know what to render.\n // Traverse and and request. Update _selectedTiles so that we know what to render.\n const {cameraDirection, cameraUp, height} = viewport;\n const {metersPerUnit} = viewport.distanceScales;\n\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?\n const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);\n const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);\n\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n const cameraPositionCartesian = Ellipsoid.WGS84.cartographicToCartesian(\n cameraPositionCartographic,\n new Vector3()\n );\n\n // These should still be normalized as the transform has scale 1 (goes from meters to meters)\n const cameraDirectionCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))\n ).normalize();\n const cameraUpCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))\n ).normalize();\n\n commonSpacePlanesToWGS84(viewport);\n\n const ViewportClass = viewport.constructor;\n const {longitude, latitude, width, bearing, zoom} = viewport;\n // @ts-ignore\n const topDownViewport = new ViewportClass({\n longitude,\n latitude,\n height,\n width,\n bearing,\n zoom,\n pitch: 0\n });\n\n // TODO: make a file/class for frameState and document what needs to be attached to this so that traversal can function\n return {\n camera: {\n position: cameraPositionCartesian,\n direction: cameraDirectionCartesian,\n up: cameraUpCartesian\n },\n viewport,\n topDownViewport,\n height,\n cullingVolume,\n frameNumber, // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: 1.15 // Assumes fovy = 60 degrees\n };\n}\n\n/**\n * Limit `tiles` array length with `maximumTilesSelected` number.\n * The criteria for this filtering is distance of a tile center\n * to the `frameState.viewport`'s longitude and latitude\n * @param tiles - tiles array to filter\n * @param frameState - frameState to calculate distances\n * @param maximumTilesSelected - maximal amount of tiles in the output array\n * @returns new tiles array\n */\nexport function limitSelectedTiles(\n tiles: Tile3D[],\n frameState: FrameState,\n maximumTilesSelected: number\n): [Tile3D[], Tile3D[]] {\n if (maximumTilesSelected === 0 || tiles.length <= maximumTilesSelected) {\n return [tiles, []];\n }\n // Accumulate distances in couples array: [tileIndex: number, distanceToViewport: number]\n const tuples: [number, number][] = [];\n const {longitude: viewportLongitude, latitude: viewportLatitude} = frameState.viewport;\n for (const [index, tile] of tiles.entries()) {\n const [longitude, latitude] = tile.header.mbs;\n const deltaLon = Math.abs(viewportLongitude - longitude);\n const deltaLat = Math.abs(viewportLatitude - latitude);\n const distance = Math.sqrt(deltaLat * deltaLat + deltaLon * deltaLon);\n tuples.push([index, distance]);\n }\n const tuplesSorted = tuples.sort((a, b) => a[1] - b[1]);\n const selectedTiles: Tile3D[] = [];\n for (let i = 0; i < maximumTilesSelected; i++) {\n selectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n const unselectedTiles: Tile3D[] = [];\n for (let i = maximumTilesSelected; i < tuplesSorted.length; i++) {\n unselectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n\n return [selectedTiles, unselectedTiles];\n}\n\nfunction commonSpacePlanesToWGS84(viewport) {\n // Extract frustum planes based on current view.\n const frustumPlanes = viewport.getFrustumPlanes();\n\n // Get the near/far plane centers\n const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);\n const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);\n const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);\n\n let i = 0;\n cullingVolume.planes[i++].fromPointNormal(\n nearCenterCartesian,\n scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian)\n );\n\n for (const dir in frustumPlanes) {\n if (dir === 'near') {\n continue;\n }\n const plane = frustumPlanes[dir];\n const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);\n const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);\n\n cullingVolume.planes[i++].fromPointNormal(\n cartesianPos,\n // Want the normal to point into the frustum since that's what culling expects\n scratchVector.copy(nearCenterCartesian).subtract(cartesianPos)\n );\n }\n}\n\nfunction closestPointOnPlane(\n plane: {distance: number; normal: Vector3},\n refPoint: [number, number, number] | Vector3,\n out: Vector3 = new Vector3()\n): Vector3 {\n const distanceToRef = plane.normal.dot(refPoint);\n out\n .copy(plane.normal)\n .scale(plane.distance - distanceToRef)\n .add(refPoint);\n return out;\n}\n\nfunction worldToCartesian(\n viewport: Viewport,\n point: number[] | Vector3,\n out: Vector3 = new Vector3()\n): Vector3 {\n const cartographicPos = viewport.unprojectPosition(point);\n return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);\n}\n","import {Vector3} from '@math.gl/core';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {BoundingRectangle} from '../../types';\n\nconst WGS84_RADIUS_X = 6378137.0;\nconst WGS84_RADIUS_Y = 6378137.0;\nconst WGS84_RADIUS_Z = 6356752.3142451793;\n\nconst scratchVector = new Vector3();\n\n/**\n * Calculate appropriate zoom value for a particular boundingVolume\n * @param boundingVolume - the instance of bounding volume\n * @param cartorgraphicCenter - cartographic center of the bounding volume\n * @returns {number} - zoom value\n */\nexport function getZoomFromBoundingVolume(\n boundingVolume: BoundingSphere | OrientedBoundingBox | BoundingRectangle,\n cartorgraphicCenter: Vector3\n) {\n if (boundingVolume instanceof OrientedBoundingBox) {\n // OrientedBoundingBox\n const {halfAxes} = boundingVolume;\n const obbSize = getObbSize(halfAxes);\n // Use WGS84_RADIUS_Z to allign with BoundingSphere algorithm\n // Add the tile elevation value for correct zooming to elevated tiles\n return Math.log2(WGS84_RADIUS_Z / (obbSize + cartorgraphicCenter[2]));\n } else if (boundingVolume instanceof BoundingSphere) {\n // BoundingSphere\n const {radius} = boundingVolume;\n // Add the tile elevation value for correct zooming to elevated tiles\n return Math.log2(WGS84_RADIUS_Z / (radius + cartorgraphicCenter[2]));\n } else if (boundingVolume.width && boundingVolume.height) {\n // BoundingRectangle\n const {width, height} = boundingVolume;\n const zoomX = Math.log2(WGS84_RADIUS_X / width);\n const zoomY = Math.log2(WGS84_RADIUS_Y / height);\n\n return (zoomX + zoomY) / 2;\n }\n\n return 1;\n}\n\n/**\n * Calculate initial zoom for the tileset from 3D `fullExtent` defined in\n * the tileset metadata\n * @param fullExtent - 3D extent of the tileset\n * @param fullExtent.xmin - minimal longitude in decimal degrees\n * @param fullExtent.xmax - maximal longitude in decimal degrees\n * @param fullExtent.ymin - minimal latitude in decimal degrees\n * @param fullExtent.ymax - maximal latitude in decimal degrees\n * @param fullExtent.zmin - minimal elevation in meters\n * @param fullExtent.zmax - maximal elevation in meters\n * @param cartorgraphicCenter - tileset center in cartographic coordinate system\n * @param cartesianCenter - tileset center in cartesian coordinate system\n * @returns - initial zoom for the tileset\n */\nexport function getZoomFromFullExtent(\n fullExtent: {\n xmin: number;\n xmax: number;\n ymin: number;\n ymax: number;\n zmin: number;\n zmax: number;\n },\n cartorgraphicCenter: Vector3,\n cartesianCenter: Vector3\n) {\n const extentVertex = Ellipsoid.WGS84.cartographicToCartesian(\n [fullExtent.xmax, fullExtent.ymax, fullExtent.zmax],\n new Vector3()\n );\n const extentSize = Math.sqrt(\n Math.pow(extentVertex[0] - cartesianCenter[0], 2) +\n Math.pow(extentVertex[1] - cartesianCenter[1], 2) +\n Math.pow(extentVertex[2] - cartesianCenter[2], 2)\n );\n return Math.log2(WGS84_RADIUS_Z / (extentSize + cartorgraphicCenter[2]));\n}\n\n/**\n * Calculate initial zoom for the tileset from 2D `extent` defined in\n * the tileset metadata\n * @param extent - 2D extent of the tileset. It is array of 4 elements [xmin, ymin, xmax, ymax]\n * @param extent[0] - minimal longitude in decimal degrees\n * @param extent[1] - minimal latitude in decimal degrees\n * @param extent[2] - maximal longitude in decimal degrees\n * @param extent[3] - maximal latitude in decimal degrees\n * @param cartorgraphicCenter - tileset center in cartographic coordinate system\n * @param cartesianCenter - tileset center in cartesian coordinate system\n * @returns - initial zoom for the tileset\n */\nexport function getZoomFromExtent(\n extent: [number, number, number, number],\n cartorgraphicCenter: Vector3,\n cartesianCenter: Vector3\n) {\n const [xmin, ymin, xmax, ymax] = extent;\n return getZoomFromFullExtent(\n {xmin, xmax, ymin, ymax, zmin: 0, zmax: 0},\n cartorgraphicCenter,\n cartesianCenter\n );\n}\n\nfunction getObbSize(halfAxes) {\n halfAxes.getColumn(0, scratchVector);\n const axeY = halfAxes.getColumn(1);\n const axeZ = halfAxes.getColumn(2);\n const farthestVertex = scratchVector.add(axeY).add(axeZ);\n const size = farthestVertex.len();\n return size;\n}\n","export const TILE_CONTENT_STATE = {\n UNLOADED: 0, // Has never been requested\n LOADING: 1, // Is waiting on a pending request\n PROCESSING: 2, // Request received. Contents are being processed for rendering. Depending on the content, it might make its own requests for external data.\n READY: 3, // Ready to render.\n EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n FAILED: 5 // Request failed.\n};\n\nexport const TILE_REFINEMENT = {\n ADD: 1, // Render tile and, if screen space error exceeded, also refine to its children.\n REPLACE: 2 // Render tile or, if screen space error exceeded, refine to its descendants instead.\n};\n\nexport const TILE_TYPE = {\n EMPTY: 'empty',\n SCENEGRAPH: 'scenegraph',\n POINTCLOUD: 'pointcloud',\n MESH: 'mesh'\n};\n\nexport const TILESET_TYPE = {\n I3S: 'I3S',\n TILES3D: 'TILES3D'\n};\n\nexport const LOD_METRIC_TYPE = {\n GEOMETRIC_ERROR: 'geometricError',\n MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'\n};\n\n// Cesium 3D Tiles Specific\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Quaternion, Vector3, Matrix3, Matrix4, degrees} from '@math.gl/core';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {assert} from '@loaders.gl/loader-utils';\n\n// const scratchProjectedBoundingSphere = new BoundingSphere();\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\n// const scratchMatrix = new Matrix3();\nconst scratchScale = new Vector3();\nconst scratchNorthWest = new Vector3();\nconst scratchSouthEast = new Vector3();\n// const scratchRectangle = new Rectangle();\n// const scratchOrientedBoundingBox = new OrientedBoundingBox();\n// const scratchTransform = new Matrix4();\n\n/**\n * Create a bounding volume from the tile's bounding volume header.\n * @param {Object} boundingVolumeHeader The tile's bounding volume header.\n * @param {Matrix4} transform The transform to apply to the bounding volume.\n * @param [result] The object onto which to store the result.\n * @returns The modified result parameter or a new TileBoundingVolume instance if none was provided.\n */\nexport function createBoundingVolume(boundingVolumeHeader, transform, result) {\n assert(boundingVolumeHeader, '3D Tile: boundingVolume must be defined');\n\n // boundingVolume schema:\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/specification/schema/boundingVolume.schema.json\n if (boundingVolumeHeader.box) {\n return createBox(boundingVolumeHeader.box, transform, result);\n }\n if (boundingVolumeHeader.region) {\n // [west, south, east, north, minimum height, maximum height]\n // Latitudes and longitudes are in the WGS 84 datum as defined in EPSG 4979 and are in radians.\n // Heights are in meters above (or below) the WGS 84 ellipsoid.\n const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;\n\n const northWest = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(west), degrees(north), minHeight],\n scratchNorthWest\n );\n const southEast = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(east), degrees(south), maxHeight],\n scratchSouthEast\n );\n const centerInCartesian = new Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);\n const radius = new Vector3().subVectors(northWest, southEast).len() / 2.0;\n\n // TODO improve region boundingVolume\n // for now, create a sphere as the boundingVolume instead of box\n return createSphere(\n [centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius],\n new Matrix4()\n );\n }\n\n if (boundingVolumeHeader.sphere) {\n return createSphere(boundingVolumeHeader.sphere, transform, result);\n }\n\n throw new Error('3D Tile: boundingVolume must contain a sphere, region, or box');\n}\n\nfunction createBox(box, transform, result) {\n // https://math.gl/modules/culling/docs/api-reference/oriented-bounding-box\n // 1. A half-axes based representation.\n // box: An array of 12 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box.\n // The next three elements (with indices 3, 4, and 5) define the x axis direction and half-length.\n // The next three elements (indices 6, 7, and 8) define the y axis direction and half-length.\n // The last three elements (indices 9, 10, and 11) define the z axis direction and half-length.\n // 2. A half-size-quaternion based representation.\n // box: An array of 10 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box in a right-handed 3-axis (x, y, z) Cartesian coordinate system where the z-axis is up.\n // The next three elements (with indices 3, 4, and 5) define the halfSize.\n // The last four elements (indices 6, 7, 8 and 10) define the quaternion.\n const center = new Vector3(box[0], box[1], box[2]);\n transform.transform(center, center);\n let origin: number[] = [];\n if (box.length === 10) {\n const halfSize = box.slice(3, 6);\n const quaternion = new Quaternion();\n quaternion.fromArray(box, 6);\n const x = new Vector3([1, 0, 0]);\n const y = new Vector3([0, 1, 0]);\n const z = new Vector3([0, 0, 1]);\n x.transformByQuaternion(quaternion);\n x.scale(halfSize[0]);\n y.transformByQuaternion(quaternion);\n y.scale(halfSize[1]);\n z.transformByQuaternion(quaternion);\n z.scale(halfSize[2]);\n origin = [...x.toArray(), ...y.toArray(), ...z.toArray()];\n } else {\n origin = [...box.slice(3, 6), ...box.slice(6, 9), ...box.slice(9, 12)];\n }\n const xAxis = transform.transformAsVector(origin.slice(0, 3));\n const yAxis = transform.transformAsVector(origin.slice(3, 6));\n const zAxis = transform.transformAsVector(origin.slice(6, 9));\n const halfAxes = new Matrix3([\n xAxis[0],\n xAxis[1],\n xAxis[2],\n yAxis[0],\n yAxis[1],\n yAxis[2],\n zAxis[0],\n zAxis[1],\n zAxis[2]\n ]);\n\n if (defined(result)) {\n result.center = center;\n result.halfAxes = halfAxes;\n return result;\n }\n\n return new OrientedBoundingBox(center, halfAxes);\n}\n\n/*\nfunction createBoxFromTransformedRegion(region, transform, initialTransform, result) {\n const rectangle = Rectangle.unpack(region, 0, scratchRectangle);\n const minimumHeight = region[4];\n const maximumHeight = region[5];\n\n const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n Ellipsoid.WGS84,\n scratchOrientedBoundingBox\n );\n const center = orientedBoundingBox.center;\n const halfAxes = orientedBoundingBox.halfAxes;\n\n // A region bounding volume is not transformed by the transform in the tileset JSON,\n // but may be transformed by additional transforms applied in Cesium.\n // This is why the transform is calculated as the difference between the initial transform and the current transform.\n transform = Matrix4.multiplyTransformation(\n transform,\n Matrix4.inverseTransformation(initialTransform, scratchTransform),\n scratchTransform\n );\n center = Matrix4.multiplyByPoint(transform, center, center);\n const rotationScale = Matrix4.getRotation(transform, scratchMatrix);\n halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n if (defined(result) && result instanceof TileOrientedBoundingBox) {\n result.update(center, halfAxes);\n return result;\n }\n\n return new TileOrientedBoundingBox(center, halfAxes);\n}\n\nfunction createRegion(region, transform, initialTransform, result) {\n if (!Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)) {\n return createBoxFromTransformedRegion(region, transform, initialTransform, result);\n }\n\n if (defined(result)) {\n return result;\n }\n\n const rectangleRegion = Rectangle.unpack(region, 0, scratchRectangle);\n\n return new TileBoundingRegion({\n rectangle: rectangleRegion,\n minimumHeight: region[4],\n maximumHeight: region[5]\n });\n}\n*/\n\nfunction createSphere(sphere, transform, result?) {\n // Find the transformed center\n const center = new Vector3(sphere[0], sphere[1], sphere[2]);\n transform.transform(center, center);\n const scale = transform.getScale(scratchScale);\n\n const uniformScale = Math.max(Math.max(scale[0], scale[1]), scale[2]);\n const radius = sphere[3] * uniformScale;\n\n if (defined(result)) {\n result.center = center;\n result.radius = radius;\n return result;\n }\n\n return new BoundingSphere(center, radius);\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// TODO - Dynamic screen space error provides an optimization when looking at\n// tilesets from above\n\n/* eslint-disable */\n// @ts-nocheck\nimport {Matrix4, Vector3, clamp} from '@math.gl/core';\n\nconst scratchPositionNormal = new Vector3();\nconst scratchCartographic = new Vector3();\nconst scratchMatrix = new Matrix4();\nconst scratchCenter = new Vector3();\nconst scratchPosition = new Vector3();\nconst scratchDirection = new Vector3();\n\n// eslint-disable-next-line max-statements, complexity\nexport function calculateDynamicScreenSpaceError(root, {camera, mapProjection}, options = {}) {\n const {dynamicScreenSpaceErrorHeightFalloff = 0.25, dynamicScreenSpaceErrorDensity = 0.00278} =\n options;\n\n let up;\n let direction;\n let height;\n let minimumHeight;\n let maximumHeight;\n\n const tileBoundingVolume = root.contentBoundingVolume;\n\n if (tileBoundingVolume instanceof TileBoundingRegion) {\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = tileBoundingVolume.minimumHeight;\n maximumHeight = tileBoundingVolume.maximumHeight;\n } else {\n // Transform camera position and direction into the local coordinate system of the tileset\n const transformLocal = Matrix4.inverseTransformation(root.computedTransform, scratchMatrix);\n const ellipsoid = mapProjection.ellipsoid;\n const boundingVolume = tileBoundingVolume.boundingVolume;\n const centerLocal = Matrix4.multiplyByPoint(\n transformLocal,\n boundingVolume.center,\n scratchCenter\n );\n if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {\n // The tileset is defined in WGS84. Approximate the minimum and maximum height.\n const centerCartographic = Cartographic.fromCartesian(\n centerLocal,\n ellipsoid,\n scratchCartographic\n );\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = 0.0;\n maximumHeight = centerCartographic.height * 2.0;\n } else {\n // The tileset is defined in local coordinates (z-up)\n const positionLocal = Matrix4.multiplyByPoint(\n transformLocal,\n camera.positionWC,\n scratchPosition\n );\n up = Cartesian3.UNIT_Z;\n direction = Matrix4.multiplyByPointAsVector(\n transformLocal,\n camera.directionWC,\n scratchDirection\n );\n direction = Cartesian3.normalize(direction, direction);\n height = positionLocal.z;\n if (tileBoundingVolume instanceof TileOrientedBoundingBox) {\n // Assuming z-up, the last component stores the half-height of the box\n const boxHeight = root._header.boundingVolume.box[11];\n minimumHeight = centerLocal.z - boxHeight;\n maximumHeight = centerLocal.z + boxHeight;\n } else if (tileBoundingVolume instanceof TileBoundingSphere) {\n const radius = boundingVolume.radius;\n minimumHeight = centerLocal.z - radius;\n maximumHeight = centerLocal.z + radius;\n }\n }\n }\n\n // The range where the density starts to lessen. Start at the quarter height of the tileset.\n const heightFalloff = dynamicScreenSpaceErrorHeightFalloff;\n const heightClose = minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;\n const heightFar = maximumHeight;\n\n const t = clamp((height - heightClose) / (heightFar - heightClose), 0.0, 1.0);\n\n // Increase density as the camera tilts towards the horizon\n const dot = Math.abs(Cartesian3.dot(direction, up));\n\n let horizonFactor = 1.0 - dot;\n\n // Weaken the horizon factor as the camera height increases, implying the camera is further away from the tileset.\n // The goal is to increase density for the \"street view\", not when viewing the tileset from a distance.\n horizonFactor = horizonFactor * (1.0 - t);\n\n return dynamicScreenSpaceErrorDensity * horizonFactor;\n}\n\nexport function fog(distanceToCamera, density) {\n const scalar = distanceToCamera * density;\n return 1.0 - Math.exp(-(scalar * scalar));\n}\n\nexport function getDynamicScreenSpaceError(tileset, distanceToCamera) {\n if (tileset.dynamicScreenSpaceError && tileset.dynamicScreenSpaceErrorComputedDensity) {\n const density = tileset.dynamicScreenSpaceErrorComputedDensity;\n const factor = tileset.dynamicScreenSpaceErrorFactor;\n // TODO: Refined screen space error that minimizes tiles in non-first-person\n const dynamicError = fog(distanceToCamera, density) * factor;\n return dynamicError;\n }\n\n return 0;\n}\n\nexport function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {\n const tileset = tile.tileset;\n const parentLodMetricValue = (tile.parent && tile.parent.lodMetricValue) || tile.lodMetricValue;\n const lodMetricValue = useParentLodMetric ? parentLodMetricValue : tile.lodMetricValue;\n\n // Leaf tiles do not have any error so save the computation\n if (lodMetricValue === 0.0) {\n return 0.0;\n }\n\n // TODO: Orthographic Frustum needs special treatment?\n // this._getOrthograhicScreenSpaceError();\n\n // Avoid divide by zero when viewer is inside the tile\n const distance = Math.max(tile._distanceToCamera, 1e-7);\n const {height, sseDenominator} = frameState;\n const {viewDistanceScale} = tileset.options;\n let error = (lodMetricValue * height * (viewDistanceScale || 1.0)) / (distance * sseDenominator);\n\n error -= getDynamicScreenSpaceError(tileset, distance);\n\n return error;\n}\n","import {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport Tile3D from '../tile-3d';\nimport {FrameState} from './frame-state';\n\nconst cameraPositionCartesian = new Vector3();\nconst toEye = new Vector3();\nconst cameraPositionEnu = new Vector3();\nconst extraVertexEnu = new Vector3();\nconst projectedOriginVector = new Vector3();\nconst enuToCartesianMatrix = new Matrix4();\nconst cartesianToEnuMatrix = new Matrix4();\n\n/**\n * For the maxScreenThreshold error metric, maxError means that you should replace the node with it's children\n as soon as the nodes bounding sphere has a screen radius larger than maxError pixels.\n In this sense a value of 0 means you should always load it's children,\n or if it's a leaf node, you should always display it.\n * @param tile \n * @param frameState \n * @returns \n */\nexport function getLodStatus(tile: Tile3D, frameState: FrameState): 'DIG' | 'OUT' | 'DRAW' {\n if (tile.lodMetricValue === 0 || isNaN(tile.lodMetricValue)) {\n return 'DIG';\n }\n const screenSize = 2 * getProjectedRadius(tile, frameState);\n if (screenSize < 2) {\n return 'OUT';\n }\n if (!tile.header.children || screenSize <= tile.lodMetricValue) {\n return 'DRAW';\n } else if (tile.header.children) {\n return 'DIG';\n }\n return 'OUT';\n}\n\n/**\n * Calculate size of MBS radius projected on the screen plane\n * @param tile\n * @param frameState\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport function getProjectedRadius(tile: Tile3D, frameState: FrameState): number {\n const {topDownViewport: viewport} = frameState;\n const mbsLat = tile.header.mbs[1];\n const mbsLon = tile.header.mbs[0];\n const mbsZ = tile.header.mbs[2];\n const mbsR = tile.header.mbs[3];\n const mbsCenterCartesian = [...tile.boundingVolume.center];\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);\n\n // ---------------------------\n // Calculate mbs border vertex\n // ---------------------------\n toEye.copy(cameraPositionCartesian).subtract(mbsCenterCartesian).normalize();\n // Add extra vector to form plane\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);\n cartesianToEnuMatrix.copy(enuToCartesianMatrix).invert();\n cameraPositionEnu.copy(cameraPositionCartesian).transform(cartesianToEnuMatrix);\n // Mean Proportionals in Right Triangles - Altitude rule\n // https://mathbitsnotebook.com/Geometry/RightTriangles/RTmeanRight.html\n const projection = Math.sqrt(\n cameraPositionEnu[0] * cameraPositionEnu[0] + cameraPositionEnu[1] * cameraPositionEnu[1]\n );\n const extraZ = (projection * projection) / cameraPositionEnu[2];\n extraVertexEnu.copy([cameraPositionEnu[0], cameraPositionEnu[1], extraZ]);\n const extraVertexCartesian = extraVertexEnu.transform(enuToCartesianMatrix);\n const extraVectorCartesian = extraVertexCartesian.subtract(mbsCenterCartesian).normalize();\n // We need radius vector orthogonal to toEye vector\n const radiusVector = toEye.cross(extraVectorCartesian).normalize().scale(mbsR);\n const sphereMbsBorderVertexCartesian = radiusVector.add(mbsCenterCartesian);\n const sphereMbsBorderVertexCartographic = Ellipsoid.WGS84.cartesianToCartographic(\n sphereMbsBorderVertexCartesian\n );\n // ---------------------------\n\n // Project center vertex and border vertex and calculate projected radius of MBS\n const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);\n const projectedMbsBorderVertex = viewport.project(\n sphereMbsBorderVertexCartographic as [number, number, number]\n );\n const projectedRadius = projectedOriginVector\n .copy(projectedOrigin)\n .subtract(projectedMbsBorderVertex)\n .magnitude();\n return projectedRadius;\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {assert} from '@loaders.gl/loader-utils';\n\n/**\n * A wrapper around arrays so that the internal length of the array can be manually managed.\n *\n * @alias ManagedArray\n * @constructor\n * @private\n *\n * @param {Number} [length=0] The initial length of the array.\n */\nexport default class ManagedArray {\n _map = new Map();\n _array: any[];\n _length: number;\n\n constructor(length = 0) {\n this._array = new Array(length);\n this._length = length;\n }\n\n /**\n * Gets or sets the length of the array.\n * If the set length is greater than the length of the internal array, the internal array is resized.\n *\n * @memberof ManagedArray.prototype\n * @type Number\n */\n get length() {\n return this._length;\n }\n\n set length(length) {\n this._length = length;\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Gets the internal array.\n *\n * @memberof ManagedArray.prototype\n * @type Array\n * @readonly\n */\n get values() {\n return this._array;\n }\n\n /**\n * Gets the element at an index.\n *\n * @param {Number} index The index to get.\n */\n get(index) {\n assert(index < this._array.length);\n return this._array[index];\n }\n\n /**\n * Sets the element at an index. Resizes the array if index is greater than the length of the array.\n *\n * @param {Number} index The index to set.\n * @param {*} element The element to set at index.\n */\n set(index, element) {\n assert(index >= 0);\n\n if (index >= this.length) {\n this.length = index + 1;\n }\n\n if (this._map.has(this._array[index])) {\n this._map.delete(this._array[index]);\n }\n\n this._array[index] = element;\n this._map.set(element, index);\n }\n\n delete(element) {\n const index = this._map.get(element);\n if (index >= 0) {\n this._array.splice(index, 1);\n this._map.delete(element);\n this.length--;\n }\n }\n\n /**\n * Returns the last element in the array without modifying the array.\n *\n * @returns {*} The last element in the array.\n */\n peek() {\n return this._array[this._length - 1];\n }\n\n /**\n * Push an element into the array.\n *\n * @param {*} element The element to push.\n */\n push(element) {\n if (!this._map.has(element)) {\n const index = this.length++;\n this._array[index] = element;\n this._map.set(element, index);\n }\n }\n\n /**\n * Pop an element from the array.\n *\n * @returns {*} The last element in the array.\n */\n pop() {\n const element = this._array[--this.length];\n this._map.delete(element);\n return element;\n }\n\n /**\n * Resize the internal array if length > _array.length.\n *\n * @param {Number} length The length.\n */\n reserve(length) {\n assert(length >= 0);\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Resize the array.\n *\n * @param {Number} length The length.\n */\n resize(length) {\n assert(length >= 0);\n\n this.length = length;\n }\n\n /**\n * Trim the internal array to the specified length. Defaults to the current length.\n *\n * @param {Number} [length] The length.\n */\n trim(length) {\n if (length === null || length === undefined) {\n length = this.length;\n }\n this._array.length = length;\n }\n\n reset() {\n this._array = [];\n this._map = new Map();\n this._length = 0;\n }\n\n find(target) {\n return this._map.has(target);\n }\n}\n","import ManagedArray from '../../utils/managed-array';\nimport {TILE_REFINEMENT} from '../../constants';\nimport {FrameState} from '../helpers/frame-state';\n\nexport type TilesetTraverserProps = {\n loadSiblings?: boolean;\n skipLevelOfDetail?: boolean;\n maximumScreenSpaceError?: number;\n onTraversalEnd?: (frameState) => any;\n viewportTraversersMap?: {[key: string]: any};\n basePath?: string;\n};\n\nexport type Props = {\n loadSiblings: boolean;\n skipLevelOfDetail: boolean;\n updateTransforms: boolean;\n maximumScreenSpaceError: number;\n onTraversalEnd: (frameState) => any;\n viewportTraversersMap: {[key: string]: any};\n basePath: string;\n};\n\nexport const DEFAULT_PROPS: Props = {\n loadSiblings: false,\n skipLevelOfDetail: false,\n maximumScreenSpaceError: 2,\n updateTransforms: true,\n onTraversalEnd: () => {},\n viewportTraversersMap: {},\n basePath: ''\n};\n\nexport default class TilesetTraverser {\n options: Props;\n\n root: any;\n requestedTiles: object;\n selectedTiles: object;\n emptyTiles: object;\n\n protected lastUpdate: number = new Date().getTime();\n protected readonly updateDebounceTime = 1000;\n protected _traversalStack: ManagedArray;\n protected _emptyTraversalStack: ManagedArray;\n protected _frameNumber: number | null;\n\n protected traversalFinished(frameState: FrameState): boolean {\n return true;\n }\n\n // TODO nested props\n constructor(options: TilesetTraverserProps) {\n this.options = {...DEFAULT_PROPS, ...options};\n // TRAVERSAL\n // temporary storage to hold the traversed tiles during a traversal\n this._traversalStack = new ManagedArray();\n this._emptyTraversalStack = new ManagedArray();\n\n // set in every traverse cycle\n this._frameNumber = null;\n\n // fulfill in traverse call\n this.root = null;\n\n // RESULT\n // tiles should be rendered\n this.selectedTiles = {};\n // tiles should be loaded from server\n this.requestedTiles = {};\n // tiles does not have render content\n this.emptyTiles = {};\n }\n\n // tiles should be visible\n traverse(root, frameState, options) {\n this.root = root; // for root screen space error\n this.options = {...this.options, ...options};\n\n // reset result\n this.reset();\n\n // update tile (visibility and expiration)\n this.updateTile(root, frameState);\n\n this._frameNumber = frameState.frameNumber;\n this.executeTraversal(root, frameState);\n }\n\n reset() {\n this.requestedTiles = {};\n this.selectedTiles = {};\n this.emptyTiles = {};\n this._traversalStack.reset();\n this._emptyTraversalStack.reset();\n }\n\n // execute traverse\n // Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n // If skipLevelOfDetail is off then a tile does not refine until all children are loaded.\n // This is the traditional replacement refinement approach and is called the base traversal.\n // Tiles that have a greater screen space error than the base screen space error are part of the base traversal,\n // all other tiles are part of the skip traversal. The skip traversal allows for skipping levels of the tree\n // and rendering children and parent tiles simultaneously.\n /* eslint-disable-next-line complexity, max-statements */\n executeTraversal(root, frameState: FrameState) {\n // stack to store traversed tiles, only visible tiles should be added to stack\n // visible: visible in the current view frustum\n const stack = this._traversalStack;\n root._selectionDepth = 1;\n\n stack.push(root);\n while (stack.length > 0) {\n // 1. pop tile\n const tile = stack.pop();\n\n // 2. check if tile needs to be refine, needs refine if a tile's LoD is not sufficient and tile has available children (available content)\n let shouldRefine = false;\n if (this.canTraverse(tile, frameState)) {\n this.updateChildTiles(tile, frameState);\n shouldRefine = this.updateAndPushChildren(\n tile,\n frameState,\n stack,\n tile.hasRenderContent ? tile._selectionDepth + 1 : tile._selectionDepth\n );\n }\n\n // 3. decide if should render (select) this tile\n // - tile does not have render content\n // - tile has render content and tile is `add` type (pointcloud)\n // - tile has render content and tile is `replace` type (photogrammetry) and can't refine any further\n const parent = tile.parent;\n const parentRefines = Boolean(!parent || parent._shouldRefine);\n const stoppedRefining = !shouldRefine;\n\n if (!tile.hasRenderContent) {\n this.emptyTiles[tile.id] = tile;\n this.loadTile(tile, frameState);\n if (stoppedRefining) {\n this.selectTile(tile, frameState);\n }\n // additive tiles\n } else if (tile.refine === TILE_REFINEMENT.ADD) {\n // Additive tiles are always loaded and selected\n this.loadTile(tile, frameState);\n this.selectTile(tile, frameState);\n\n // replace tiles\n } else if (tile.refine === TILE_REFINEMENT.REPLACE) {\n // Always load tiles in the base traversal\n // Select tiles that can't refine further\n this.loadTile(tile, frameState);\n if (stoppedRefining) {\n this.selectTile(tile, frameState);\n }\n }\n\n // 3. update cache, most recent touched tiles have higher priority to be fetched from server\n this.touchTile(tile, frameState);\n\n // 4. update tile refine prop and parent refinement status to trickle down to the descendants\n tile._shouldRefine = shouldRefine && parentRefines;\n }\n\n const newTime = new Date().getTime();\n if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {\n this.lastUpdate = newTime;\n this.options.onTraversalEnd(frameState);\n }\n }\n\n updateChildTiles(tile, frameState) {\n const children = tile.children;\n for (const child of children) {\n this.updateTile(child, frameState);\n }\n return true;\n }\n\n /* eslint-disable complexity, max-statements */\n updateAndPushChildren(tile, frameState, stack, depth) {\n const {loadSiblings, skipLevelOfDetail} = this.options;\n\n const children = tile.children;\n\n // sort children tiles\n children.sort(this.compareDistanceToCamera.bind(this));\n\n // For traditional replacement refinement only refine if all children are loaded.\n // Empty tiles are exempt since it looks better if children stream in as they are loaded to fill the empty space.\n const checkRefines =\n tile.refine === TILE_REFINEMENT.REPLACE && tile.hasRenderContent && !skipLevelOfDetail;\n\n let hasVisibleChild = false;\n let refines = true;\n\n for (const child of children) {\n child._selectionDepth = depth;\n if (child.isVisibleAndInRequestVolume) {\n if (stack.find(child)) {\n stack.delete(child);\n }\n stack.push(child);\n hasVisibleChild = true;\n } else if (checkRefines || loadSiblings) {\n // Keep non-visible children loaded since they are still needed before the parent can refine.\n // Or loadSiblings is true so always load tiles regardless of visibility.\n this.loadTile(child, frameState);\n this.touchTile(child, frameState);\n }\n\n if (checkRefines) {\n let childRefines;\n if (!child._inRequestVolume) {\n childRefines = false;\n } else if (!child.hasRenderContent) {\n childRefines = this.executeEmptyTraversal(child, frameState);\n } else {\n childRefines = child.contentAvailable;\n }\n refines = refines && childRefines;\n\n if (!refines) {\n return false;\n }\n }\n }\n\n if (!hasVisibleChild) {\n refines = false;\n }\n return refines;\n }\n /* eslint-enable complexity, max-statements */\n\n updateTile(tile, frameState) {\n this.updateTileVisibility(tile, frameState);\n }\n\n // tile to render in the browser\n selectTile(tile, frameState) {\n if (this.shouldSelectTile(tile)) {\n // The tile can be selected right away and does not require traverseAndSelect\n tile._selectedFrame = frameState.frameNumber;\n this.selectedTiles[tile.id] = tile;\n }\n }\n\n // tile to load from server\n loadTile(tile, frameState) {\n if (this.shouldLoadTile(tile)) {\n tile._requestedFrame = frameState.frameNumber;\n tile._priority = tile._getPriority();\n this.requestedTiles[tile.id] = tile;\n }\n }\n\n // cache tile\n touchTile(tile, frameState) {\n tile.tileset._cache.touch(tile);\n tile._touchedFrame = frameState.frameNumber;\n }\n\n // tile should be visible\n // tile should have children\n // tile LoD (level of detail) is not sufficient under current viewport\n canTraverse(tile, frameState, useParentMetric = false, ignoreVisibility = false) {\n if (!tile.hasChildren) {\n return false;\n }\n\n // cesium specific\n if (tile.hasTilesetContent) {\n // Traverse external this to visit its root tile\n // Don't traverse if the subtree is expired because it will be destroyed\n return !tile.contentExpired;\n }\n\n if (!ignoreVisibility && !tile.isVisibleAndInRequestVolume) {\n return false;\n }\n\n return this.shouldRefine(tile, frameState, useParentMetric);\n }\n\n shouldLoadTile(tile) {\n // if request tile is in current frame\n // and has unexpired render content\n return tile.hasUnloadedContent || tile.contentExpired;\n }\n\n shouldSelectTile(tile) {\n // if select tile is in current frame\n // and content available\n return tile.contentAvailable && !this.options.skipLevelOfDetail;\n }\n\n // Decide if tile LoD (level of detail) is not sufficient under current viewport\n shouldRefine(tile, frameState, useParentMetric) {\n let screenSpaceError = tile._screenSpaceError;\n if (useParentMetric) {\n screenSpaceError = tile.getScreenSpaceError(frameState, true);\n }\n\n return screenSpaceError > this.options.maximumScreenSpaceError;\n }\n\n updateTileVisibility(tile, frameState) {\n const viewportIds: string[] = [];\n if (this.options.viewportTraversersMap) {\n for (const key in this.options.viewportTraversersMap) {\n const value = this.options.viewportTraversersMap[key];\n if (value === frameState.viewport.id) {\n viewportIds.push(key);\n }\n }\n } else {\n viewportIds.push(frameState.viewport.id);\n }\n tile.updateVisibility(frameState, viewportIds);\n }\n\n // UTILITIES\n\n compareDistanceToCamera(b, a) {\n return b._distanceToCamera - a._distanceToCamera;\n }\n\n anyChildrenVisible(tile, frameState) {\n let anyVisible = false;\n for (const child of tile.children) {\n child.updateVisibility(frameState);\n anyVisible = anyVisible || child.isVisibleAndInRequestVolume;\n }\n return anyVisible;\n }\n\n // Depth-first traversal that checks if all nearest descendants with content are loaded.\n // Ignores visibility.\n executeEmptyTraversal(root, frameState) {\n let allDescendantsLoaded = true;\n const stack = this._emptyTraversalStack;\n\n stack.push(root);\n\n while (stack.length > 0 && allDescendantsLoaded) {\n const tile = stack.pop();\n\n this.updateTile(tile, frameState);\n\n if (!tile.isVisibleAndInRequestVolume) {\n // Load tiles that aren't visible since they are still needed for the parent to refine\n this.loadTile(tile, frameState);\n }\n\n this.touchTile(tile, frameState);\n\n // Only traverse if the tile is empty - traversal stop at descendants with content\n const traverse = !tile.hasRenderContent && this.canTraverse(tile, frameState, false, true);\n\n if (traverse) {\n const children = tile.children;\n for (const child of children) {\n // eslint-disable-next-line max-depth\n if (stack.find(child)) {\n stack.delete(child);\n }\n stack.push(child);\n }\n } else if (!tile.contentAvailable) {\n allDescendantsLoaded = false;\n }\n }\n\n return allDescendantsLoaded;\n }\n}\n\n// TODO\n// enable expiration\n// enable optimization hint\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\nimport {Vector3, Matrix4} from '@math.gl/core';\nimport {CullingVolume} from '@math.gl/culling';\n\nimport {load} from '@loaders.gl/core';\nimport {TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE} from '../constants';\n\nimport {FrameState} from './helpers/frame-state';\nimport {createBoundingVolume} from './helpers/bounding-volume';\nimport {getTiles3DScreenSpaceError} from './helpers/tiles-3d-lod';\nimport {getProjectedRadius} from './helpers/i3s-lod';\nimport {get3dTilesOptions} from './helpers/3d-tiles-options';\nimport TilesetTraverser from './traversers/tileset-traverser';\n\n// Note: circular dependency\nimport type Tileset3D from './tileset-3d';\n\nconst scratchVector = new Vector3();\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\n/**\n * @param tileset - Tileset3D instance\n * @param header - tile header - JSON loaded from a dataset\n * @param parentHeader - parent TileHeader instance\n * @param extendedId - optional ID to separate copies of a tile for different viewports.\n * const extendedId = `${tile.id}-${frameState.viewport.id}`;\n */\nexport type TileHeaderProps = {\n tileset: Tileset3D;\n header: Object;\n parentHeader: TileHeader;\n extendedId: string;\n};\n\n/**\n * A Tile3DHeader represents a tile as Tileset3D. When a tile is first created, its content is not loaded;\n * the content is loaded on-demand when needed based on the view.\n * Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.\n */\nexport default class TileHeader {\n tileset: Tileset3D;\n header: any;\n id: string;\n url: string;\n parent: TileHeader;\n refine: number;\n type: string;\n contentUrl: string;\n lodMetricType: string;\n lodMetricValue: number;\n boundingVolume: any;\n content: any;\n contentState: any;\n gpuMemoryUsageInBytes: number;\n children: TileHeader[];\n depth: number;\n viewportIds: any[];\n transform: Matrix4;\n extensions: any;\n\n // Container to store application specific data\n userData: {[key: string]: any};\n computedTransform: any;\n hasEmptyContent: boolean;\n hasTilesetContent: boolean;\n\n traverser: object;\n\n // @ts-ignore\n private _cacheNode: any;\n private _frameNumber: any;\n // TODO i3s specific, needs to remove\n // @ts-ignore\n private _lodJudge: any;\n // TODO Cesium 3d tiles specific\n private _expireDate: any;\n private _expiredContent: any;\n // @ts-ignore\n private _shouldRefine: boolean;\n\n // Members this are updated every frame for tree traversal and rendering optimizations:\n // @ts-ignore\n private _distanceToCamera: number;\n // @ts-ignore\n private _centerZDepth: number;\n private _screenSpaceError: number;\n private _visibilityPlaneMask: any;\n private _visible?: boolean;\n private _inRequestVolume: boolean;\n\n // @ts-ignore\n private _stackLength: number;\n // @ts-ignore\n private _selectionDepth: number;\n\n // @ts-ignore\n private _touchedFrame: number;\n // @ts-ignore\n private _visitedFrame: number;\n private _selectedFrame: number;\n // @ts-ignore\n private _requestedFrame: number;\n\n // @ts-ignore\n private _priority: number;\n\n private _contentBoundingVolume: any;\n private _viewerRequestVolume: any;\n\n _initialTransform: Matrix4;\n\n /**\n * @constructs\n * Create a TileHeader instance\n * @param tileset - Tileset3D instance\n * @param header - tile header - JSON loaded from a dataset\n * @param parentHeader - parent TileHeader instance\n * @param extendedId - optional ID to separate copies of a tile for different viewports.\n * const extendedId = `${tile.id}-${frameState.viewport.id}`;\n */\n // eslint-disable-next-line max-statements\n constructor(\n tileset: Tileset3D,\n header: {[key: string]: any},\n parentHeader?: TileHeader,\n extendedId = ''\n ) {\n // PUBLIC MEMBERS\n // original tile data\n this.header = header;\n\n // The tileset containing this tile.\n this.tileset = tileset;\n this.id = extendedId || header.id;\n this.url = header.url;\n\n // This tile's parent or `undefined` if this tile is the root.\n // @ts-ignore\n this.parent = parentHeader;\n this.refine = this._getRefine(header.refine);\n this.type = header.type;\n this.contentUrl = header.contentUrl;\n\n // The error, in meters, introduced if this tile is rendered and its children are not.\n this.lodMetricType = 'geometricError';\n this.lodMetricValue = 0;\n\n // Specifies the type of refine that is used when traversing this tile for rendering.\n this.boundingVolume = null;\n\n // The tile's content. This represents the actual tile's payload,\n // not the content's metadata in the tileset JSON file.\n this.content = null;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n this.gpuMemoryUsageInBytes = 0;\n\n // The tile's children - an array of Tile3D objects.\n this.children = [];\n\n this.hasEmptyContent = false;\n this.hasTilesetContent = false;\n\n this.depth = 0;\n this.viewportIds = [];\n\n // Container to store application specific data\n this.userData = {};\n this.extensions = null;\n\n // PRIVATE MEMBERS\n this._priority = 0;\n this._touchedFrame = 0;\n this._visitedFrame = 0;\n this._selectedFrame = 0;\n this._requestedFrame = 0;\n this._screenSpaceError = 0;\n\n this._cacheNode = null;\n this._frameNumber = null;\n this._cacheNode = null;\n\n this.traverser = new TilesetTraverser({});\n this._shouldRefine = false;\n this._distanceToCamera = 0;\n this._centerZDepth = 0;\n this._visible = undefined;\n this._inRequestVolume = false;\n this._stackLength = 0;\n this._selectionDepth = 0;\n this._initialTransform = new Matrix4();\n this.transform = new Matrix4();\n\n this._initializeLodMetric(header);\n this._initializeTransforms(header);\n this._initializeBoundingVolumes(header);\n this._initializeContent(header);\n this._initializeRenderingState(header);\n\n // TODO i3s specific, needs to remove\n this._lodJudge = null;\n\n // TODO Cesium 3d tiles specific\n this._expireDate = null;\n this._expiredContent = null;\n\n Object.seal(this);\n }\n\n destroy() {\n this.header = null;\n }\n\n isDestroyed() {\n return this.header === null;\n }\n\n get selected() {\n return this._selectedFrame === this.tileset._frameNumber;\n }\n\n get isVisible() {\n return this._visible;\n }\n\n get isVisibleAndInRequestVolume() {\n return this._visible && this._inRequestVolume;\n }\n\n /** Returns true if tile is not an empty tile and not an external tileset */\n get hasRenderContent() {\n return !this.hasEmptyContent && !this.hasTilesetContent;\n }\n\n /** Returns true if tile has children */\n get hasChildren() {\n return this.children.length > 0 || (this.header.children && this.header.children.length > 0);\n }\n\n /**\n * Determines if the tile's content is ready. This is automatically `true` for\n * tiles with empty content.\n */\n get contentReady() {\n return this.contentState === TILE_CONTENT_STATE.READY || this.hasEmptyContent;\n }\n\n /**\n * Determines if the tile has available content to render. `true` if the tile's\n * content is ready or if it has expired content this renders while new content loads; otherwise,\n */\n get contentAvailable() {\n return Boolean(\n (this.contentReady && this.hasRenderContent) || (this._expiredContent && !this.contentFailed)\n );\n }\n\n /** Returns true if tile has renderable content but it's unloaded */\n get hasUnloadedContent() {\n return this.hasRenderContent && this.contentUnloaded;\n }\n\n /**\n * Determines if the tile's content has not be requested. `true` if tile's\n * content has not be requested; otherwise, `false`.\n */\n get contentUnloaded() {\n return this.contentState === TILE_CONTENT_STATE.UNLOADED;\n }\n\n /**\n * Determines if the tile's content is expired. `true` if tile's\n * content is expired; otherwise, `false`.\n */\n get contentExpired() {\n return this.contentState === TILE_CONTENT_STATE.EXPIRED;\n }\n\n // Determines if the tile's content failed to load. `true` if the tile's\n // content failed to load; otherwise, `false`.\n get contentFailed() {\n return this.contentState === TILE_CONTENT_STATE.FAILED;\n }\n\n /** Get the tile's screen space error. */\n getScreenSpaceError(frameState, useParentLodMetric) {\n switch (this.tileset.type) {\n case TILESET_TYPE.I3S:\n return getProjectedRadius(this, frameState);\n case TILESET_TYPE.TILES3D:\n return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric);\n default:\n // eslint-disable-next-line\n throw new Error('Unsupported tileset type');\n }\n }\n\n /**\n * Make tile unselected than means it won't be shown\n * but it can be still loaded in memory\n */\n unselect(): void {\n this._selectedFrame = 0;\n }\n\n /*\n * If skipLevelOfDetail is off try to load child tiles as soon as possible so that their parent can refine sooner.\n * Tiles are prioritized by screen space error.\n */\n // eslint-disable-next-line complexity\n _getPriority() {\n const traverser = this.tileset._traverser;\n const {skipLevelOfDetail} = traverser.options;\n\n /*\n * Tiles that are outside of the camera's frustum could be skipped if we are in 'ADD' mode\n * or if we are using 'Skip Traversal' in 'REPLACE' mode.\n * Otherewise, all 'touched' child tiles have to be loaded and displayed,\n * this may include tiles that are outide of the camera frustum (so that we can hide the parent tile).\n */\n const maySkipTile = this.refine === TILE_REFINEMENT.ADD || skipLevelOfDetail;\n\n // Check if any reason to abort\n if (maySkipTile && !this.isVisible && this._visible !== undefined) {\n return -1;\n }\n // Condition used in `cancelOutOfViewRequests` function in CesiumJS/Cesium3DTileset.js\n if (this.tileset._frameNumber - this._touchedFrame >= 1) {\n return -1;\n }\n if (this.contentState === TILE_CONTENT_STATE.UNLOADED) {\n return -1;\n }\n\n // Based on the priority function `getPriorityReverseScreenSpaceError` in CesiumJS. Scheduling priority is based on the parent's screen space error when possible.\n const parent = this.parent;\n const useParentScreenSpaceError =\n parent && (!maySkipTile || this._screenSpaceError === 0.0 || parent.hasTilesetContent);\n const screenSpaceError = useParentScreenSpaceError\n ? parent._screenSpaceError\n : this._screenSpaceError;\n\n const rootScreenSpaceError = traverser.root ? traverser.root._screenSpaceError : 0.0;\n\n // Map higher SSE to lower values (e.g. root tile is highest priority)\n return Math.max(rootScreenSpaceError - screenSpaceError, 0);\n }\n\n /**\n * Requests the tile's content.\n * The request may not be made if the Request Scheduler can't prioritize it.\n */\n // eslint-disable-next-line max-statements, complexity\n async loadContent(): Promise {\n if (this.hasEmptyContent) {\n return false;\n }\n\n if (this.content) {\n return true;\n }\n\n const expired = this.contentExpired;\n\n if (expired) {\n this._expireDate = null;\n }\n\n this.contentState = TILE_CONTENT_STATE.LOADING;\n\n const requestToken = await this.tileset._requestScheduler.scheduleRequest(\n this.id,\n this._getPriority.bind(this)\n );\n\n if (!requestToken) {\n // cancelled\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n return false;\n }\n\n try {\n const contentUrl = this.tileset.getTileUrl(this.contentUrl);\n // The content can be a binary tile ot a JSON tileset\n const loader = this.tileset.loader;\n const options = {\n ...this.tileset.loadOptions,\n [loader.id]: {\n ...this.tileset.loadOptions[loader.id],\n isTileset: this.type === 'json',\n ...this._getLoaderSpecificOptions(loader.id)\n }\n };\n\n this.content = await load(contentUrl, loader, options);\n\n if (this.tileset.options.contentLoader) {\n await this.tileset.options.contentLoader(this);\n }\n\n if (this._isTileset()) {\n // Add tile headers for the nested tilset's subtree\n // Async update of the tree should be fine since there would never be edits to the same node\n // TODO - we need to capture the child tileset's URL\n this.tileset._initializeTileHeaders(this.content, this);\n }\n\n this.contentState = TILE_CONTENT_STATE.READY;\n this._onContentLoaded();\n return true;\n } catch (error) {\n // Tile is unloaded before the content finishes loading\n this.contentState = TILE_CONTENT_STATE.FAILED;\n throw error;\n } finally {\n requestToken.done();\n }\n }\n\n // Unloads the tile's content.\n unloadContent() {\n if (this.content && this.content.destroy) {\n this.content.destroy();\n }\n this.content = null;\n if (this.header.content && this.header.content.destroy) {\n this.header.content.destroy();\n }\n this.header.content = null;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n return true;\n }\n\n /**\n * Update the tile's visibility\n * @param {Object} frameState - frame state for tile culling\n * @param {string[]} viewportIds - a list of viewport ids that show this tile\n * @return {void}\n */\n updateVisibility(frameState, viewportIds) {\n if (this._frameNumber === frameState.frameNumber) {\n // Return early if visibility has already been checked during the traversal.\n // The visibility may have already been checked if the cullWithChildrenBounds optimization is used.\n return;\n }\n\n const parent = this.parent;\n const parentVisibilityPlaneMask = parent\n ? parent._visibilityPlaneMask\n : CullingVolume.MASK_INDETERMINATE;\n\n if (this.tileset._traverser.options.updateTransforms) {\n const parentTransform = parent ? parent.computedTransform : this.tileset.modelMatrix;\n this._updateTransform(parentTransform);\n }\n\n this._distanceToCamera = this.distanceToTile(frameState);\n this._screenSpaceError = this.getScreenSpaceError(frameState, false);\n this._visibilityPlaneMask = this.visibility(frameState, parentVisibilityPlaneMask); // Use parent's plane mask to speed up visibility test\n this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;\n this._inRequestVolume = this.insideViewerRequestVolume(frameState);\n\n this._frameNumber = frameState.frameNumber;\n this.viewportIds = viewportIds;\n }\n\n // Determines whether the tile's bounding volume intersects the culling volume.\n // @param {FrameState} frameState The frame state.\n // @param {Number} parentVisibilityPlaneMask The parent's plane mask to speed up the visibility check.\n // @returns {Number} A plane mask as described above in {@link CullingVolume#computeVisibilityWithPlaneMask}.\n visibility(frameState, parentVisibilityPlaneMask) {\n const {cullingVolume} = frameState;\n const {boundingVolume} = this;\n\n // TODO Cesium specific - restore clippingPlanes\n // const {clippingPlanes, clippingPlanesOriginMatrix} = tileset;\n // if (clippingPlanes && clippingPlanes.enabled) {\n // const intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n // boundingVolume,\n // clippingPlanesOriginMatrix\n // );\n // this._isClipped = intersection !== Intersect.INSIDE;\n // if (intersection === Intersect.OUTSIDE) {\n // return CullingVolume.MASK_OUTSIDE;\n // }\n // }\n\n // return cullingVolume.computeVisibilityWithPlaneMask(boundingVolume, parentVisibilityPlaneMask);\n return cullingVolume.computeVisibilityWithPlaneMask(boundingVolume, parentVisibilityPlaneMask);\n }\n\n // Assuming the tile's bounding volume intersects the culling volume, determines\n // whether the tile's content's bounding volume intersects the culling volume.\n // @param {FrameState} frameState The frame state.\n // @returns {Intersect} The result of the intersection: the tile's content is completely outside, completely inside, or intersecting the culling volume.\n contentVisibility() {\n return true;\n\n // TODO restore\n /*\n // Assumes the tile's bounding volume intersects the culling volume already, so\n // just return Intersect.INSIDE if there is no content bounding volume.\n if (!defined(this.contentBoundingVolume)) {\n return Intersect.INSIDE;\n }\n\n if (this._visibilityPlaneMask === CullingVolume.MASK_INSIDE) {\n // The tile's bounding volume is completely inside the culling volume so\n // the content bounding volume must also be inside.\n return Intersect.INSIDE;\n }\n\n // PERFORMANCE_IDEA: is it possible to burn less CPU on this test since we know the\n // tile's (not the content's) bounding volume intersects the culling volume?\n const cullingVolume = frameState.cullingVolume;\n const boundingVolume = tile.contentBoundingVolume;\n\n const tileset = this.tileset;\n const clippingPlanes = tileset.clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n const intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n boundingVolume,\n tileset.clippingPlanesOriginMatrix\n );\n this._isClipped = intersection !== Intersect.INSIDE;\n if (intersection === Intersect.OUTSIDE) {\n return Intersect.OUTSIDE;\n }\n }\n\n return cullingVolume.computeVisibility(boundingVolume);\n */\n }\n\n /**\n * Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.\n * @param frameState The frame state.\n * @returns {Number} The distance, in meters, or zero if the camera is inside the bounding volume.\n */\n distanceToTile(frameState: FrameState): number {\n const boundingVolume = this.boundingVolume;\n return Math.sqrt(Math.max(boundingVolume.distanceSquaredTo(frameState.camera.position), 0));\n }\n\n /**\n * Computes the tile's camera-space z-depth.\n * @param frameState The frame state.\n * @returns The distance, in meters.\n */\n cameraSpaceZDepth({camera}): number {\n const boundingVolume = this.boundingVolume; // Gets the underlying OrientedBoundingBox or BoundingSphere\n scratchVector.subVectors(boundingVolume.center, camera.position);\n return camera.direction.dot(scratchVector);\n }\n\n /**\n * Checks if the camera is inside the viewer request volume.\n * @param {FrameState} frameState The frame state.\n * @returns {Boolean} Whether the camera is inside the volume.\n */\n insideViewerRequestVolume(frameState: FrameState) {\n const viewerRequestVolume = this._viewerRequestVolume;\n return (\n !viewerRequestVolume || viewerRequestVolume.distanceSquaredTo(frameState.camera.position) <= 0\n );\n }\n\n // TODO Cesium specific\n\n // Update whether the tile has expired.\n updateExpiration() {\n if (defined(this._expireDate) && this.contentReady && !this.hasEmptyContent) {\n const now = Date.now();\n // @ts-ignore Date.lessThan - replace with ms compare?\n if (Date.lessThan(this._expireDate, now)) {\n this.contentState = TILE_CONTENT_STATE.EXPIRED;\n this._expiredContent = this.content;\n }\n }\n }\n\n get extras() {\n return this.header.extras;\n }\n\n // INTERNAL METHODS\n\n _initializeLodMetric(header) {\n if ('lodMetricType' in header) {\n this.lodMetricType = header.lodMetricType;\n } else {\n this.lodMetricType = (this.parent && this.parent.lodMetricType) || this.tileset.lodMetricType;\n // eslint-disable-next-line\n console.warn(`3D Tile: Required prop lodMetricType is undefined. Using parent lodMetricType`);\n }\n\n // This is used to compute screen space error, i.e., the error measured in pixels.\n if ('lodMetricValue' in header) {\n this.lodMetricValue = header.lodMetricValue;\n } else {\n this.lodMetricValue =\n (this.parent && this.parent.lodMetricValue) || this.tileset.lodMetricValue;\n // eslint-disable-next-line\n console.warn(\n '3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue'\n );\n }\n }\n\n _initializeTransforms(tileHeader) {\n // The local transform of this tile.\n this.transform = tileHeader.transform ? new Matrix4(tileHeader.transform) : new Matrix4();\n\n const parent = this.parent;\n const tileset = this.tileset;\n\n const parentTransform =\n parent && parent.computedTransform\n ? parent.computedTransform.clone()\n : tileset.modelMatrix.clone();\n this.computedTransform = new Matrix4(parentTransform).multiplyRight(this.transform);\n\n const parentInitialTransform =\n parent && parent._initialTransform ? parent._initialTransform.clone() : new Matrix4();\n this._initialTransform = new Matrix4(parentInitialTransform).multiplyRight(this.transform);\n }\n\n _initializeBoundingVolumes(tileHeader) {\n this._contentBoundingVolume = null;\n this._viewerRequestVolume = null;\n\n this._updateBoundingVolume(tileHeader);\n }\n\n _initializeContent(tileHeader) {\n // Empty tile by default\n this.content = {_tileset: this.tileset, _tile: this};\n this.hasEmptyContent = true;\n this.contentState = TILE_CONTENT_STATE.UNLOADED;\n\n // When `true`, the tile's content points to an external tileset.\n // This is `false` until the tile's content is loaded.\n this.hasTilesetContent = false;\n\n if (tileHeader.contentUrl) {\n this.content = null;\n this.hasEmptyContent = false;\n }\n }\n\n // TODO - remove anything not related to basic visibility detection\n _initializeRenderingState(header) {\n this.depth = header.level || (this.parent ? this.parent.depth + 1 : 0);\n this._shouldRefine = false;\n\n // Members this are updated every frame for tree traversal and rendering optimizations:\n this._distanceToCamera = 0;\n this._centerZDepth = 0;\n this._screenSpaceError = 0;\n this._visibilityPlaneMask = CullingVolume.MASK_INDETERMINATE;\n this._visible = undefined;\n this._inRequestVolume = false;\n\n this._stackLength = 0;\n this._selectionDepth = 0;\n\n this._frameNumber = 0;\n this._touchedFrame = 0;\n this._visitedFrame = 0;\n this._selectedFrame = 0;\n this._requestedFrame = 0;\n\n this._priority = 0.0;\n }\n\n _getRefine(refine) {\n // Inherit from parent tile if omitted.\n return refine || (this.parent && this.parent.refine) || TILE_REFINEMENT.REPLACE;\n }\n\n _isTileset() {\n return this.contentUrl.indexOf('.json') !== -1;\n }\n\n _onContentLoaded() {\n // Vector and Geometry tile rendering do not support the skip LOD optimization.\n switch (this.content && this.content.type) {\n case 'vctr':\n case 'geom':\n // @ts-ignore\n this.tileset._traverser.disableSkipLevelOfDetail = true;\n break;\n default:\n }\n\n // The content may be tileset json\n if (this._isTileset()) {\n this.hasTilesetContent = true;\n }\n }\n\n _updateBoundingVolume(header) {\n // Update the bounding volumes\n this.boundingVolume = createBoundingVolume(\n header.boundingVolume,\n this.computedTransform,\n this.boundingVolume\n );\n\n const content = header.content;\n if (!content) {\n return;\n }\n\n // TODO Cesium specific\n // Non-leaf tiles may have a content bounding-volume, which is a tight-fit bounding volume\n // around only the features in the tile. This box is useful for culling for rendering,\n // but not for culling for traversing the tree since it does not guarantee spatial coherence, i.e.,\n // since it only bounds features in the tile, not the entire tile, children may be\n // outside of this box.\n if (content.boundingVolume) {\n this._contentBoundingVolume = createBoundingVolume(\n content.boundingVolume,\n this.computedTransform,\n this._contentBoundingVolume\n );\n }\n if (header.viewerRequestVolume) {\n this._viewerRequestVolume = createBoundingVolume(\n header.viewerRequestVolume,\n this.computedTransform,\n this._viewerRequestVolume\n );\n }\n }\n\n // Update the tile's transform. The transform is applied to the tile's bounding volumes.\n _updateTransform(parentTransform = new Matrix4()) {\n const computedTransform = parentTransform.clone().multiplyRight(this.transform);\n const didTransformChange = !computedTransform.equals(this.computedTransform);\n\n if (!didTransformChange) {\n return;\n }\n\n this.computedTransform = computedTransform;\n\n this._updateBoundingVolume(this.header);\n }\n\n // Get options which are applicable only for the particular loader\n _getLoaderSpecificOptions(loaderId) {\n switch (loaderId) {\n case 'i3s':\n return {\n ...this.tileset.options.i3s,\n tile: this.header,\n tileset: this.tileset.tileset,\n isTileHeader: false\n };\n case '3d-tiles':\n case 'cesium-ion':\n default:\n return get3dTilesOptions(this.tileset.tileset);\n }\n }\n}\n","export function get3dTilesOptions(tileset) {\n return {\n assetGltfUpAxis: (tileset.asset && tileset.asset.gltfUpAxis) || 'Y'\n };\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {TILE3D_OPTIMIZATION_HINT, TILE_REFINEMENT} from '../../constants';\nimport TilesetTraverser from './tileset-traverser';\n\nexport default class Tileset3DTraverser extends TilesetTraverser {\n compareDistanceToCamera(a, b) {\n // Sort by farthest child first since this is going on a stack\n return b._distanceToCamera === 0 && a._distanceToCamera === 0\n ? b._centerZDepth - a._centerZDepth\n : b._distanceToCamera - a._distanceToCamera;\n }\n\n updateTileVisibility(tile, frameState) {\n super.updateTileVisibility(tile, frameState);\n\n // Optimization - if none of the tile's children are visible then this tile isn't visible\n if (!tile.isVisibleAndInRequestVolume) {\n return;\n }\n\n const hasChildren = tile.children.length > 0;\n if (tile.hasTilesetContent && hasChildren) {\n // Use the root tile's visibility instead of this tile's visibility.\n // The root tile may be culled by the children bounds optimization in which\n // case this tile should also be culled.\n const firstChild = tile.children[0];\n this.updateTileVisibility(firstChild, frameState);\n tile._visible = firstChild._visible;\n return;\n }\n\n if (this.meetsScreenSpaceErrorEarly(tile, frameState)) {\n tile._visible = false;\n return;\n }\n\n const replace = tile.refine === TILE_REFINEMENT.REPLACE;\n const useOptimization =\n tile._optimChildrenWithinParent === TILE3D_OPTIMIZATION_HINT.USE_OPTIMIZATION;\n if (replace && useOptimization && hasChildren) {\n if (!this.anyChildrenVisible(tile, frameState)) {\n tile._visible = false;\n return;\n }\n }\n }\n\n meetsScreenSpaceErrorEarly(tile, frameState) {\n const {parent} = tile;\n if (!parent || parent.hasTilesetContent || parent.refine !== TILE_REFINEMENT.ADD) {\n return false;\n }\n\n // Use parent's geometric error with child's box to see if the tile already meet the SSE\n return !this.shouldRefine(tile, frameState, true);\n }\n}\n","/**\n * Counter to register pending tile headers for the particular frameNumber\n * Until all tiles are loaded we won't call `onTraversalEnd` callback\n */\nexport default class I3SPendingTilesRegister {\n private frameNumberMap: Map> = new Map();\n\n /**\n * Register a new pending tile header for the particular frameNumber\n * @param viewportId\n * @param frameNumber\n */\n register(viewportId: string, frameNumber: number) {\n const viewportMap = this.frameNumberMap.get(viewportId) || new Map();\n const oldCount = viewportMap.get(frameNumber) || 0;\n viewportMap.set(frameNumber, oldCount + 1);\n this.frameNumberMap.set(viewportId, viewportMap);\n }\n\n /**\n * Deregister a pending tile header for the particular frameNumber\n * @param viewportId\n * @param frameNumber\n */\n deregister(viewportId: string, frameNumber: number) {\n const viewportMap = this.frameNumberMap.get(viewportId);\n if (!viewportMap) {\n return;\n }\n const oldCount = viewportMap.get(frameNumber) || 1;\n viewportMap.set(frameNumber, oldCount - 1);\n }\n\n /**\n * Check is there are no pending tile headers registered for the particular frameNumber\n * @param viewportId\n * @param frameNumber\n * @returns\n */\n isZero(viewportId: string, frameNumber: number) {\n const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;\n return count === 0;\n }\n}\n","import {FrameState} from '../helpers/frame-state';\nimport I3SPendingTilesRegister from './i3s-pending-tiles-register';\n\nconst STATUS = {\n REQUESTED: 'REQUESTED',\n COMPLETED: 'COMPLETED',\n ERROR: 'ERROR'\n};\n\n// A helper class to manage tile metadata fetching\nexport default class I3STileManager {\n private _statusMap: object;\n private pendingTilesRegister = new I3SPendingTilesRegister();\n\n constructor() {\n this._statusMap = {};\n }\n\n /**\n * Add request to map\n * @param request - node metadata request\n * @param key - unique key\n * @param callback - callback after request completed\n * @param frameState - frameState data\n */\n add(request, key, callback, frameState: FrameState) {\n if (!this._statusMap[key]) {\n const {\n frameNumber,\n viewport: {id}\n } = frameState;\n this._statusMap[key] = {request, callback, key, frameState, status: STATUS.REQUESTED};\n // Register pending request for the frameNumber\n this.pendingTilesRegister.register(id, frameNumber);\n request()\n .then((data) => {\n this._statusMap[key].status = STATUS.COMPLETED;\n const {\n frameNumber: actualFrameNumber,\n viewport: {id}\n } = this._statusMap[key].frameState;\n // Deregister pending request for the frameNumber\n this.pendingTilesRegister.deregister(id, actualFrameNumber);\n this._statusMap[key].callback(data, frameState);\n })\n .catch((error) => {\n this._statusMap[key].status = STATUS.ERROR;\n const {\n frameNumber: actualFrameNumber,\n viewport: {id}\n } = this._statusMap[key].frameState;\n // Deregister pending request for the frameNumber\n this.pendingTilesRegister.deregister(id, actualFrameNumber);\n callback(error);\n });\n }\n }\n\n /**\n * Update request if it is still actual for the new frameState\n * @param key - unique key\n * @param frameState - frameState data\n */\n update(key, frameState: FrameState) {\n if (this._statusMap[key]) {\n // Deregister pending request for the old frameNumber\n const {\n frameNumber,\n viewport: {id}\n } = this._statusMap[key].frameState;\n this.pendingTilesRegister.deregister(id, frameNumber);\n\n // Register pending request for the new frameNumber\n const {\n frameNumber: newFrameNumber,\n viewport: {id: newViewportId}\n } = frameState;\n this.pendingTilesRegister.register(newViewportId, newFrameNumber);\n this._statusMap[key].frameState = frameState;\n }\n }\n\n /**\n * Find request in the map\n * @param key - unique key\n * @returns\n */\n find(key) {\n return this._statusMap[key];\n }\n\n /**\n * Check it there are pending tile headers for the particular frameNumber\n * @param viewportId\n * @param frameNumber\n * @returns\n */\n hasPendingTiles(viewportId: string, frameNumber: number): boolean {\n return !this.pendingTilesRegister.isZero(viewportId, frameNumber);\n }\n}\n","import {load} from '@loaders.gl/core';\nimport TilesetTraverser from './tileset-traverser';\n\nimport {getLodStatus} from '../helpers/i3s-lod';\nimport TileHeader from '../tile-3d';\nimport I3STileManager from './i3s-tile-manager';\nimport {FrameState} from '../helpers/frame-state';\n\nexport default class I3STilesetTraverser extends TilesetTraverser {\n private _tileManager: I3STileManager;\n\n /**\n * Check if there are no penging tile header requests,\n * that means the traversal is finished and we can call\n * following-up callbacks.\n */\n protected traversalFinished(frameState: FrameState): boolean {\n return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);\n }\n\n constructor(options) {\n super(options);\n this._tileManager = new I3STileManager();\n }\n\n shouldRefine(tile, frameState: FrameState) {\n tile._lodJudge = getLodStatus(tile, frameState);\n return tile._lodJudge === 'DIG';\n }\n\n updateChildTiles(tile, frameState: FrameState): boolean {\n const children = tile.header.children || [];\n // children which are already fetched and constructed as Tile3D instances\n const childTiles = tile.children;\n const tileset = tile.tileset;\n\n for (const child of children) {\n const extendedId = `${child.id}-${frameState.viewport.id}`;\n // if child tile is not fetched\n const childTile = childTiles && childTiles.find((t) => t.id === extendedId);\n if (!childTile) {\n let request = () => this._loadTile(child.id, tileset);\n const cachedRequest = this._tileManager.find(extendedId);\n if (!cachedRequest) {\n // eslint-disable-next-line max-depth\n if (tileset.tileset.nodePages) {\n request = () => tileset.tileset.nodePagesTile.formTileFromNodePages(child.id);\n }\n this._tileManager.add(\n request,\n extendedId,\n (header) => this._onTileLoad(header, tile, extendedId),\n frameState\n );\n } else {\n // update frameNumber since it is still needed in current frame\n this._tileManager.update(extendedId, frameState);\n }\n } else if (childTile) {\n // if child tile is fetched and available\n this.updateTile(childTile, frameState);\n }\n }\n return false;\n }\n\n async _loadTile(nodeId, tileset) {\n const {loader} = tileset;\n const nodeUrl = tileset.getTileUrl(`${tileset.url}/nodes/${nodeId}`);\n // load metadata\n const options = {\n ...tileset.loadOptions,\n i3s: {\n ...tileset.loadOptions.i3s,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n return await load(nodeUrl, loader, options);\n }\n\n /**\n * The callback to init TileHeader instance after loading the tile JSON\n * @param {Object} header - the tile JSON from a dataset\n * @param {TileHeader} tile - the parent TileHeader instance\n * @param {string} extendedId - optional ID to separate copies of a tile for different viewports.\n * const extendedId = `${tile.id}-${frameState.viewport.id}`;\n * @return {void}\n */\n _onTileLoad(header, tile, extendedId) {\n // after child tile is fetched\n const childTile = new TileHeader(tile.tileset, header, tile, extendedId);\n tile.children.push(childTile);\n const frameState = this._tileManager.find(childTile.id).frameState;\n this.updateTile(childTile, frameState);\n\n // after tile fetched, resume traversal if still in current update/traversal frame\n if (\n this._frameNumber === frameState.frameNumber &&\n (this.traversalFinished(frameState) ||\n new Date().getTime() - this.lastUpdate > this.updateDebounceTime)\n ) {\n this.executeTraversal(childTile, frameState);\n }\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/*\n\n The Tileset loading and rendering flow is as below,\n A rendered (i.e. deck.gl `Tile3DLayer`) triggers `tileset.update()` after a `tileset` is loaded\n `tileset` starts traversing the tile tree and update `requestTiles` (tiles of which content need\n to be fetched) and `selectedTiles` (tiles ready for rendering under the current viewport).\n `Tile3DLayer` will update rendering based on `selectedTiles`.\n `Tile3DLayer` also listens to `onTileLoad` callback and trigger another round of `update and then traversal`\n when new tiles are loaded.\n\n As I3S tileset have stored `tileHeader` file (metadata) and tile content files (geometry, texture, ...) separately.\n During each traversal, it issues `tilHeader` requests if that `tileHeader` is not yet fetched,\n after the tile header is fulfilled, it will resume the traversal starting from the tile just fetched (not root).\n\n Tile3DLayer\n |\n await load(tileset)\n |\n tileset.update()\n | async load tileHeader\n tileset.traverse() -------------------------- Queued\n | resume traversal after fetched |\n |----------------------------------------|\n |\n | async load tile content\n tilset.requestedTiles ----------------------------- RequestScheduler\n |\n tilset.selectedTiles (ready for rendering) |\n | Listen to |\n Tile3DLayer ----------- onTileLoad ----------------------|\n | | notify new tile is available\n updateLayers |\n tileset.update // trigger another round of update\n*/\n\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {Stats} from '@probe.gl/stats';\nimport {\n RequestScheduler,\n assert,\n path,\n LoaderWithParser,\n LoaderOptions\n} from '@loaders.gl/loader-utils';\nimport TilesetCache from './tileset-cache';\nimport {calculateTransformProps} from './helpers/transform-utils';\nimport {FrameState, getFrameState, limitSelectedTiles} from './helpers/frame-state';\nimport {getZoomFromBoundingVolume, getZoomFromExtent, getZoomFromFullExtent} from './helpers/zoom';\nimport Tile3D from './tile-3d';\nimport Tileset3DTraverser from './traversers/tileset-3d-traverser';\nimport TilesetTraverser from './traversers/tileset-traverser';\nimport I3SetTraverser from './traversers/i3s-tileset-traverser';\nimport {TILESET_TYPE} from '../constants';\nimport {GeospatialViewport, Viewport} from '../types';\n\nexport type Tileset3DProps = {\n // loading\n throttleRequests?: boolean;\n maxRequests?: number;\n loadOptions?: LoaderOptions;\n loadTiles?: boolean;\n basePath?: string;\n maximumMemoryUsage?: number;\n maximumTilesSelected?: number;\n debounceTime?: number;\n\n // Metadata\n description?: string;\n attributions?: string[];\n\n // Transforms\n ellipsoid?: object;\n modelMatrix?: Matrix4;\n\n // Traversal\n maximumScreenSpaceError?: number;\n viewportTraversersMap?: any;\n updateTransforms?: boolean;\n viewDistanceScale?: number;\n\n // Callbacks\n onTileLoad?: (tile: Tile3D) => any;\n onTileUnload?: (tile: Tile3D) => any;\n onTileError?: (tile: Tile3D, message: string, url: string) => any;\n contentLoader?: (tile: Tile3D) => Promise;\n onTraversalComplete?: (selectedTiles: Tile3D[]) => Tile3D[];\n};\n\ntype Props = {\n description: string;\n ellipsoid: object;\n modelMatrix: Matrix4;\n throttleRequests: boolean;\n maximumMemoryUsage: number;\n maximumTilesSelected: number;\n debounceTime: number;\n onTileLoad: (tile: Tile3D) => any;\n onTileUnload: (tile: Tile3D) => any;\n onTileError: (tile: Tile3D, message: string, url: string) => any;\n onTraversalComplete: (selectedTiles: Tile3D[]) => Tile3D[];\n maximumScreenSpaceError: number;\n viewportTraversersMap: any;\n attributions: string[];\n maxRequests: number;\n loadTiles: boolean;\n loadOptions: LoaderOptions;\n updateTransforms: boolean;\n viewDistanceScale: number;\n basePath: string;\n contentLoader?: (tile: Tile3D) => Promise;\n i3s: {[key: string]: any};\n};\n\nconst DEFAULT_PROPS: Props = {\n description: '',\n\n ellipsoid: Ellipsoid.WGS84,\n // A 4x4 transformation matrix this transforms the entire tileset.\n modelMatrix: new Matrix4(),\n\n // Set to false to disable network request throttling\n throttleRequests: true,\n\n // Number of simultaneous requsts, if throttleRequests is true\n maxRequests: 64,\n\n maximumMemoryUsage: 32,\n /** Maximum number limit of tiles selected for show. 0 means no limit */\n maximumTilesSelected: 0,\n /** Delay time before the tileset traversal. It prevents traversal requests spam.*/\n debounceTime: 0,\n\n /**\n * Callback. Indicates this a tile's content was loaded\n * @param tile {TileHeader}\n */\n onTileLoad: () => {},\n /**\n * Callback. Indicates this a tile's content was unloaded\n * @param tile {TileHeader}\n */\n onTileUnload: () => {},\n onTileError: () => {},\n /**\n * Callback. Allows post-process selectedTiles right after traversal.\n * @param selectedTiles {TileHeader[]}\n * @returns TileHeader[] - output array of tiles to return to deck.gl\n */\n onTraversalComplete: (selectedTiles: Tile3D[]) => selectedTiles,\n\n // Optional async tile content loader\n contentLoader: undefined,\n\n // View distance scale modifier\n viewDistanceScale: 1.0,\n\n // The maximum screen space error used to drive level of detail refinement.\n maximumScreenSpaceError: 8,\n\n loadTiles: true,\n updateTransforms: true,\n viewportTraversersMap: null,\n\n loadOptions: {fetch: {}},\n\n attributions: [],\n basePath: '',\n\n i3s: {}\n};\n\n// Tracked Stats\nconst TILES_TOTAL = 'Tiles In Tileset(s)';\nconst TILES_IN_MEMORY = 'Tiles In Memory';\nconst TILES_IN_VIEW = 'Tiles In View';\nconst TILES_RENDERABLE = 'Tiles To Render';\nconst TILES_LOADED = 'Tiles Loaded';\nconst TILES_LOADING = 'Tiles Loading';\nconst TILES_UNLOADED = 'Tiles Unloaded';\nconst TILES_LOAD_FAILED = 'Failed Tile Loads';\nconst POINTS_COUNT = 'Points/Vertices';\nconst TILES_GPU_MEMORY = 'Tile Memory Use';\n\nexport default class Tileset3D {\n // props: Tileset3DProps;\n options: Props;\n loadOptions: {[key: string]: any};\n\n type: string;\n tileset: {[key: string]: any};\n loader: LoaderWithParser;\n url: string;\n basePath: string;\n modelMatrix: Matrix4;\n ellipsoid: any;\n lodMetricType: string;\n lodMetricValue: number;\n refine: string;\n root: Tile3D | null;\n roots: {[key: string]: Tile3D};\n asset: {[key: string]: any};\n\n description: string;\n properties: any;\n extras: any;\n attributions: any;\n credits: any;\n\n stats: Stats;\n\n traverseCounter: number;\n geometricError: number;\n selectedTiles: Tile3D[];\n private updatePromise: Promise | null = null;\n tilesetInitializationPromise: Promise;\n\n cartographicCenter: Vector3 | null;\n cartesianCenter: Vector3 | null;\n zoom: number;\n boundingVolume: any;\n\n // METRICS\n // The maximum amount of GPU memory (in MB) that may be used to cache tiles.\n // Tiles not in view are unloaded to enforce private\n // The total amount of GPU memory in bytes used by the tileset.\n gpuMemoryUsageInBytes: any;\n dynamicScreenSpaceErrorComputedDensity: any;\n\n // TRAVERSAL\n _traverser: TilesetTraverser;\n private _cache: TilesetCache;\n _requestScheduler: RequestScheduler;\n\n _frameNumber: number;\n private _queryParamsString: string;\n private _queryParams: any;\n private _extensionsUsed: any;\n private _tiles: {[id: string]: Tile3D};\n\n // counter for tracking tiles requests\n private _pendingCount: any;\n\n // HOLD TRAVERSAL RESULTS\n private lastUpdatedVieports: Viewport[] | Viewport | null;\n private _requestedTiles: any;\n private _emptyTiles: any;\n private frameStateData: any;\n\n maximumMemoryUsage: number;\n\n /**\n * Create a new Tileset3D\n * @param json\n * @param props\n */\n // eslint-disable-next-line max-statements\n constructor(json: any, options?: Tileset3DProps) {\n assert(json);\n\n // PUBLIC MEMBERS\n this.options = {...DEFAULT_PROPS, ...options};\n // raw data\n this.tileset = json;\n this.loader = json.loader;\n // could be 3d tiles, i3s\n this.type = json.type;\n // The url to a tileset JSON file.\n this.url = json.url;\n this.basePath = json.basePath || path.dirname(this.url);\n this.modelMatrix = this.options.modelMatrix;\n this.ellipsoid = this.options.ellipsoid;\n\n // Geometric error when the tree is not rendered at all\n this.lodMetricType = json.lodMetricType;\n this.lodMetricValue = json.lodMetricValue;\n this.refine = json.root.refine;\n\n this.loadOptions = this.options.loadOptions || {};\n\n this.root = null;\n this.roots = {};\n // view props\n this.cartographicCenter = null;\n this.cartesianCenter = null;\n this.zoom = 1;\n this.boundingVolume = null;\n\n // TRAVERSAL\n this.traverseCounter = 0;\n this.geometricError = 0;\n this._traverser = this._initializeTraverser();\n this._cache = new TilesetCache();\n this._requestScheduler = new RequestScheduler({\n throttleRequests: this.options.throttleRequests,\n maxRequests: this.options.maxRequests\n });\n // update tracker\n // increase in each update cycle\n this._frameNumber = 0;\n\n // counter for tracking tiles requests\n this._pendingCount = 0;\n\n // HOLD TRAVERSAL RESULTS\n this._tiles = {};\n this.selectedTiles = [];\n this._emptyTiles = [];\n this._requestedTiles = [];\n this.frameStateData = {};\n this.lastUpdatedVieports = null;\n\n this._queryParams = {};\n this._queryParamsString = '';\n\n // METRICS\n // The maximum amount of GPU memory (in MB) that may be used to cache tiles.\n // Tiles not in view are unloaded to enforce this.\n this.maximumMemoryUsage = this.options.maximumMemoryUsage || 32;\n // The total amount of GPU memory in bytes used by the tileset.\n this.gpuMemoryUsageInBytes = 0;\n this.stats = new Stats({id: this.url});\n this._initializeStats();\n\n // EXTRACTED FROM TILESET\n this._extensionsUsed = undefined;\n this.dynamicScreenSpaceErrorComputedDensity = 0.0; // Updated based on the camera position and direction\n // Metadata for the entire tileset\n this.extras = null;\n this.asset = {};\n this.credits = {};\n this.description = this.options.description || '';\n\n this.tilesetInitializationPromise = this._initializeTileSet(json);\n }\n\n /** Release resources */\n destroy(): void {\n this._destroy();\n }\n\n /** Is the tileset loaded (update needs to have been called at least once) */\n isLoaded(): boolean {\n // Check that `_frameNumber !== 0` which means that update was called at least once\n return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;\n }\n\n get tiles(): object[] {\n return Object.values(this._tiles);\n }\n\n get frameNumber(): number {\n return this._frameNumber;\n }\n\n get queryParams(): string {\n if (!this._queryParamsString) {\n this._queryParamsString = getQueryParamString(this._queryParams);\n }\n return this._queryParamsString;\n }\n\n setProps(props: Tileset3DProps): void {\n this.options = {...this.options, ...props};\n }\n\n /** @deprecated */\n setOptions(options: Tileset3DProps): void {\n this.options = {...this.options, ...options};\n }\n\n /**\n * Return a loadable tile url for a specific tile subpath\n * @param tilePath a tile subpath\n */\n getTileUrl(tilePath: string): string {\n const isDataUrl = tilePath.startsWith('data:');\n if (isDataUrl) {\n return tilePath;\n }\n return `${tilePath}${this.queryParams}`;\n }\n\n // TODO CESIUM specific\n hasExtension(extensionName: string): boolean {\n return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);\n }\n\n /**\n * Update visible tiles relying on a list of viewports\n * @param viewports - list of viewports\n * @deprecated\n */\n update(viewports: Viewport[] | Viewport | null = null) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.tilesetInitializationPromise.then(() => {\n if (!viewports && this.lastUpdatedVieports) {\n viewports = this.lastUpdatedVieports;\n } else {\n this.lastUpdatedVieports = viewports;\n }\n if (viewports) {\n this.doUpdate(viewports);\n }\n });\n }\n\n /**\n * Update visible tiles relying on a list of viewports.\n * Do it with debounce delay to prevent update spam\n * @param viewports viewports\n * @returns Promise of new frameNumber\n */\n async selectTiles(viewports: Viewport[] | Viewport | null = null): Promise {\n await this.tilesetInitializationPromise;\n if (viewports) {\n this.lastUpdatedVieports = viewports;\n }\n if (!this.updatePromise) {\n this.updatePromise = new Promise((resolve) => {\n setTimeout(() => {\n if (this.lastUpdatedVieports) {\n this.doUpdate(this.lastUpdatedVieports);\n }\n resolve(this._frameNumber);\n this.updatePromise = null;\n }, this.options.debounceTime);\n });\n }\n return this.updatePromise;\n }\n\n /**\n * Update visible tiles relying on a list of viewports\n * @param viewports viewports\n */\n // eslint-disable-next-line max-statements, complexity\n private doUpdate(viewports: Viewport[] | Viewport): void {\n if ('loadTiles' in this.options && !this.options.loadTiles) {\n return;\n }\n if (this.traverseCounter > 0) {\n return;\n }\n const preparedViewports = viewports instanceof Array ? viewports : [viewports];\n\n this._cache.reset();\n this._frameNumber++;\n this.traverseCounter = preparedViewports.length;\n const viewportsToTraverse: string[] = [];\n // First loop to decrement traverseCounter\n for (const viewport of preparedViewports) {\n const id = viewport.id;\n if (this._needTraverse(id)) {\n viewportsToTraverse.push(id);\n } else {\n this.traverseCounter--;\n }\n }\n\n // Second loop to traverse\n for (const viewport of preparedViewports) {\n const id = viewport.id;\n if (!this.roots[id]) {\n this.roots[id] = this._initializeTileHeaders(this.tileset, null);\n }\n\n if (!viewportsToTraverse.includes(id)) {\n continue; // eslint-disable-line no-continue\n }\n const frameState = getFrameState(viewport as GeospatialViewport, this._frameNumber);\n this._traverser.traverse(this.roots[id], frameState, this.options);\n }\n }\n\n /**\n * Check if traversal is needed for particular viewport\n * @param {string} viewportId - id of a viewport\n * @return {boolean}\n */\n _needTraverse(viewportId: string): boolean {\n let traverserId = viewportId;\n if (this.options.viewportTraversersMap) {\n traverserId = this.options.viewportTraversersMap[viewportId];\n }\n if (traverserId !== viewportId) {\n return false;\n }\n\n return true;\n }\n\n /**\n * The callback to post-process tiles after traversal procedure\n * @param frameState - frame state for tile culling\n */\n _onTraversalEnd(frameState: FrameState): void {\n const id = frameState.viewport.id;\n if (!this.frameStateData[id]) {\n this.frameStateData[id] = {selectedTiles: [], _requestedTiles: [], _emptyTiles: []};\n }\n const currentFrameStateData = this.frameStateData[id];\n const selectedTiles = Object.values(this._traverser.selectedTiles);\n const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(\n selectedTiles,\n frameState,\n this.options.maximumTilesSelected\n );\n currentFrameStateData.selectedTiles = filteredSelectedTiles;\n for (const tile of unselectedTiles) {\n tile.unselect();\n }\n\n currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);\n currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);\n\n this.traverseCounter--;\n if (this.traverseCounter > 0) {\n return;\n }\n\n this._updateTiles();\n }\n\n /**\n * Update tiles relying on data from all traversers\n */\n _updateTiles(): void {\n this.selectedTiles = [];\n this._requestedTiles = [];\n this._emptyTiles = [];\n\n for (const frameStateKey in this.frameStateData) {\n const frameStateDataValue = this.frameStateData[frameStateKey];\n this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);\n this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);\n this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);\n }\n\n this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);\n\n for (const tile of this.selectedTiles) {\n this._tiles[tile.id] = tile;\n }\n\n this._loadTiles();\n this._unloadTiles();\n this._updateStats();\n }\n\n _tilesChanged(oldSelectedTiles, selectedTiles) {\n if (oldSelectedTiles.length !== selectedTiles.length) {\n return true;\n }\n const set1 = new Set(oldSelectedTiles.map((t) => t.id));\n const set2 = new Set(selectedTiles.map((t) => t.id));\n let changed = oldSelectedTiles.filter((x) => !set2.has(x.id)).length > 0;\n changed = changed || selectedTiles.filter((x) => !set1.has(x.id)).length > 0;\n return changed;\n }\n\n _loadTiles() {\n // Sort requests by priority before making any requests.\n // This makes it less likely this requests will be cancelled after being issued.\n // requestedTiles.sort((a, b) => a._priority - b._priority);\n for (const tile of this._requestedTiles) {\n if (tile.contentUnloaded) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadTile(tile);\n }\n }\n }\n\n _unloadTiles() {\n // unload tiles from cache when hit maximumMemoryUsage\n this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));\n }\n\n _updateStats() {\n let tilesRenderable = 0;\n let pointsRenderable = 0;\n for (const tile of this.selectedTiles) {\n if (tile.contentAvailable && tile.content) {\n tilesRenderable++;\n if (tile.content.pointCount) {\n pointsRenderable += tile.content.pointCount;\n } else {\n // Calculate vertices for non point cloud tiles.\n pointsRenderable += tile.content.vertexCount;\n }\n }\n }\n\n this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;\n this.stats.get(TILES_RENDERABLE).count = tilesRenderable;\n this.stats.get(POINTS_COUNT).count = pointsRenderable;\n }\n\n async _initializeTileSet(tilesetJson) {\n if (this.type === TILESET_TYPE.I3S) {\n this.calculateViewPropsI3S();\n tilesetJson.root = await tilesetJson.root;\n }\n this.root = this._initializeTileHeaders(tilesetJson, null);\n\n if (this.type === TILESET_TYPE.TILES3D) {\n this._initializeTiles3DTileset(tilesetJson);\n this.calculateViewPropsTiles3D();\n }\n\n if (this.type === TILESET_TYPE.I3S) {\n this._initializeI3STileset();\n }\n }\n\n /**\n * Called during initialize Tileset to initialize the tileset's cartographic center (longitude, latitude) and zoom.\n * These metrics help apps center view on tileset\n * For I3S there is extent (<1.8 version) or fullExtent (>=1.8 version) to calculate view props\n * @returns\n */\n private calculateViewPropsI3S() {\n // for I3S 1.8 try to calculate with fullExtent\n const fullExtent = this.tileset.fullExtent;\n if (fullExtent) {\n const {xmin, xmax, ymin, ymax, zmin, zmax} = fullExtent;\n this.cartographicCenter = new Vector3(\n xmin + (xmax - xmin) / 2,\n ymin + (ymax - ymin) / 2,\n zmin + (zmax - zmin) / 2\n );\n this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(\n this.cartographicCenter,\n new Vector3()\n );\n this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);\n return;\n }\n // for I3S 1.6-1.7 try to calculate with extent\n const extent = this.tileset.store?.extent;\n if (extent) {\n const [xmin, ymin, xmax, ymax] = extent;\n this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);\n this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(\n this.cartographicCenter,\n new Vector3()\n );\n this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);\n return;\n }\n // eslint-disable-next-line no-console\n console.warn('Extent is not defined in the tileset header');\n this.cartographicCenter = new Vector3();\n this.zoom = 1;\n return;\n }\n\n /**\n * Called during initialize Tileset to initialize the tileset's cartographic center (longitude, latitude) and zoom.\n * These metrics help apps center view on tileset.\n * For 3DTiles the root tile data is used to calculate view props.\n * @returns\n */\n private calculateViewPropsTiles3D() {\n const root = this.root as Tile3D;\n assert(root);\n const {center} = root.boundingVolume;\n // TODO - handle all cases\n if (!center) {\n // eslint-disable-next-line no-console\n console.warn('center was not pre-calculated for the root tile');\n this.cartographicCenter = new Vector3();\n this.zoom = 1;\n return;\n }\n\n // cartographic coordinates are undefined at the center of the ellipsoid\n if (center[0] !== 0 || center[1] !== 0 || center[2] !== 0) {\n this.cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(center, new Vector3());\n } else {\n this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);\n }\n this.cartesianCenter = center;\n this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);\n }\n\n _initializeStats() {\n this.stats.get(TILES_TOTAL);\n this.stats.get(TILES_LOADING);\n this.stats.get(TILES_IN_MEMORY);\n this.stats.get(TILES_IN_VIEW);\n this.stats.get(TILES_RENDERABLE);\n this.stats.get(TILES_LOADED);\n this.stats.get(TILES_UNLOADED);\n this.stats.get(TILES_LOAD_FAILED);\n this.stats.get(POINTS_COUNT);\n this.stats.get(TILES_GPU_MEMORY, 'memory');\n }\n\n // Installs the main tileset JSON file or a tileset JSON file referenced from a tile.\n // eslint-disable-next-line max-statements\n _initializeTileHeaders(tilesetJson, parentTileHeader) {\n // A tileset JSON file referenced from a tile may exist in a different directory than the root tileset.\n // Get the basePath relative to the external tileset.\n const rootTile = new Tile3D(this, tilesetJson.root, parentTileHeader); // resource\n\n // If there is a parentTileHeader, add the root of the currently loading tileset\n // to parentTileHeader's children, and update its depth.\n if (parentTileHeader) {\n parentTileHeader.children.push(rootTile);\n rootTile.depth = parentTileHeader.depth + 1;\n }\n\n // 3DTiles knows the hierarchy beforehand\n if (this.type === TILESET_TYPE.TILES3D) {\n const stack: Tile3D[] = [];\n stack.push(rootTile);\n\n while (stack.length > 0) {\n const tile = stack.pop() as Tile3D;\n this.stats.get(TILES_TOTAL).incrementCount();\n const children = tile.header.children || [];\n for (const childHeader of children) {\n const childTile = new Tile3D(this, childHeader, tile);\n tile.children.push(childTile);\n childTile.depth = tile.depth + 1;\n stack.push(childTile);\n }\n }\n }\n\n return rootTile;\n }\n\n _initializeTraverser() {\n let TraverserClass;\n const type = this.type;\n switch (type) {\n case TILESET_TYPE.TILES3D:\n TraverserClass = Tileset3DTraverser;\n break;\n case TILESET_TYPE.I3S:\n TraverserClass = I3SetTraverser;\n break;\n default:\n TraverserClass = TilesetTraverser;\n }\n\n return new TraverserClass({\n basePath: this.basePath,\n onTraversalEnd: this._onTraversalEnd.bind(this)\n });\n }\n\n _destroyTileHeaders(parentTile) {\n this._destroySubtree(parentTile);\n }\n\n async _loadTile(tile) {\n let loaded;\n try {\n this._onStartTileLoading();\n loaded = await tile.loadContent();\n } catch (error) {\n this._onTileLoadError(tile, error);\n } finally {\n this._onEndTileLoading();\n this._onTileLoad(tile, loaded);\n }\n }\n\n _onTileLoadError(tile, error) {\n this.stats.get(TILES_LOAD_FAILED).incrementCount();\n\n const message = error.message || error.toString();\n const url = tile.url;\n // TODO - Allow for probe log to be injected instead of console?\n console.error(`A 3D tile failed to load: ${tile.url} ${message}`); // eslint-disable-line\n this.options.onTileError(tile, message, url);\n }\n\n _onTileLoad(tile, loaded) {\n if (!loaded) {\n return;\n }\n\n if (this.type === TILESET_TYPE.I3S) {\n // We can't calculate tiles total in I3S in advance so we calculate it dynamically.\n const nodesInNodePages = this.tileset?.nodePagesTile?.nodesInNodePages || 0;\n this.stats.get(TILES_TOTAL).reset();\n this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);\n }\n\n // add coordinateOrigin and modelMatrix to tile\n if (tile && tile.content) {\n calculateTransformProps(tile, tile.content);\n }\n\n this._addTileToCache(tile);\n this.options.onTileLoad(tile);\n }\n\n _onStartTileLoading() {\n this._pendingCount++;\n this.stats.get(TILES_LOADING).incrementCount();\n }\n\n _onEndTileLoading() {\n this._pendingCount--;\n this.stats.get(TILES_LOADING).decrementCount();\n }\n\n _addTileToCache(tile) {\n this._cache.add(this, tile, (tileset) => tileset._updateCacheStats(tile));\n }\n\n _updateCacheStats(tile) {\n this.stats.get(TILES_LOADED).incrementCount();\n this.stats.get(TILES_IN_MEMORY).incrementCount();\n\n // Good enough? Just use the raw binary ArrayBuffer's byte length.\n this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;\n this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;\n }\n\n _unloadTile(tile) {\n this.gpuMemoryUsageInBytes -= (tile.content && tile.content.byteLength) || 0;\n\n this.stats.get(TILES_IN_MEMORY).decrementCount();\n this.stats.get(TILES_UNLOADED).incrementCount();\n this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;\n\n this.options.onTileUnload(tile);\n tile.unloadContent();\n }\n\n // Traverse the tree and destroy all tiles\n _destroy() {\n const stack: Tile3D[] = [];\n\n if (this.root) {\n stack.push(this.root);\n }\n\n while (stack.length > 0) {\n const tile: Tile3D = stack.pop() as Tile3D;\n\n for (const child of tile.children) {\n stack.push(child);\n }\n\n this._destroyTile(tile);\n }\n this.root = null;\n }\n\n // Traverse the tree and destroy all sub tiles\n _destroySubtree(tile) {\n const root = tile;\n const stack: Tile3D[] = [];\n stack.push(root);\n while (stack.length > 0) {\n tile = stack.pop();\n for (const child of tile.children) {\n stack.push(child);\n }\n if (tile !== root) {\n this._destroyTile(tile);\n }\n }\n root.children = [];\n }\n\n _destroyTile(tile) {\n this._cache.unloadTile(this, tile);\n this._unloadTile(tile);\n tile.destroy();\n }\n\n _initializeTiles3DTileset(tilesetJson) {\n this.asset = tilesetJson.asset;\n if (!this.asset) {\n throw new Error('Tileset must have an asset property.');\n }\n if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {\n throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');\n }\n\n // Note: `asset.tilesetVersion` is version of the tileset itself (not the version of the 3D TILES standard)\n // We add this version as a `v=1.0` query param to fetch the right version and not get an older cached version\n if ('tilesetVersion' in this.asset) {\n this._queryParams.v = this.asset.tilesetVersion;\n }\n\n // TODO - ion resources have a credits property we can use for additional attribution.\n this.credits = {\n attributions: this.options.attributions || []\n };\n this.description = this.options.description || '';\n\n // Gets the tileset's properties dictionary object, which contains metadata about per-feature properties.\n this.properties = tilesetJson.properties;\n this.geometricError = tilesetJson.geometricError;\n this._extensionsUsed = tilesetJson.extensionsUsed;\n // Returns the extras property at the top of the tileset JSON (application specific metadata).\n this.extras = tilesetJson.extras;\n }\n\n _initializeI3STileset() {\n if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {\n this._queryParams.token = this.loadOptions.i3s.token;\n }\n }\n}\n\nfunction getQueryParamString(queryParams): string {\n const queryParamStrings: string[] = [];\n for (const key of Object.keys(queryParams)) {\n queryParamStrings.push(`${key}=${queryParams[key]}`);\n }\n switch (queryParamStrings.length) {\n case 0:\n return '';\n case 1:\n return `?${queryParamStrings[0]}`;\n default:\n return `?${queryParamStrings.join('&')}`;\n }\n}\n","import {Ellipsoid} from '@math.gl/geospatial';\nimport {Matrix4, Vector3} from '@math.gl/core';\nimport {assert} from '@loaders.gl/loader-utils';\n\nexport function calculateTransformProps(tileHeader, tile) {\n assert(tileHeader);\n assert(tile);\n\n const {rtcCenter, gltfUpAxis} = tile;\n const {\n computedTransform,\n boundingVolume: {center}\n } = tileHeader;\n\n let modelMatrix = new Matrix4(computedTransform);\n\n // Translate if appropriate\n if (rtcCenter) {\n modelMatrix.translate(rtcCenter);\n }\n\n // glTF models need to be rotated from Y to Z up\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up\n switch (gltfUpAxis) {\n case 'Z':\n break;\n case 'Y':\n const rotationY = new Matrix4().rotateX(Math.PI / 2);\n modelMatrix = modelMatrix.multiplyRight(rotationY);\n break;\n case 'X':\n const rotationX = new Matrix4().rotateY(-Math.PI / 2);\n modelMatrix = modelMatrix.multiplyRight(rotationX);\n break;\n default:\n break;\n }\n\n // Scale/offset positions if normalized integers\n if (tile.isQuantized) {\n modelMatrix.translate(tile.quantizedVolumeOffset).scale(tile.quantizedVolumeScale);\n }\n\n // Option 1: Cartesian matrix and origin\n const cartesianOrigin = new Vector3(center);\n\n tile.cartesianModelMatrix = modelMatrix;\n tile.cartesianOrigin = cartesianOrigin;\n\n // Option 2: Cartographic matrix and origin\n const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(\n cartesianOrigin,\n new Vector3()\n );\n const fromFixedFrameMatrix = Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin);\n const toFixedFrameMatrix = fromFixedFrameMatrix.invert();\n\n tile.cartographicModelMatrix = toFixedFrameMatrix.multiplyRight(modelMatrix);\n tile.cartographicOrigin = cartographicOrigin;\n\n // Deprecated, drop\n if (!tile.coordinateSystem) {\n tile.modelMatrix = tile.cartographicModelMatrix;\n }\n}\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","// TILE TYPES\n\nexport const TILE3D_TYPE = {\n COMPOSITE: 'cmpt',\n POINT_CLOUD: 'pnts',\n BATCHED_3D_MODEL: 'b3dm',\n INSTANCED_3D_MODEL: 'i3dm',\n GEOMETRY: 'geom',\n VECTOR: 'vect',\n GLTF: 'glTF'\n};\n\nexport const TILE3D_TYPES = Object.keys(TILE3D_TYPE);\n\nexport const MAGIC_ARRAY = {\n BATCHED_MODEL: [98, 51, 100, 109],\n INSTANCED_MODEL: [105, 51, 100, 109],\n POINT_CLOUD: [112, 110, 116, 115],\n COMPOSITE: [99, 109, 112, 116]\n};\n\n// TILE CONSTANTS\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {assert} from '@loaders.gl/loader-utils';\n\n// Decode the JSON binary array into clear text\nexport function getStringFromArrayBuffer(arrayBuffer, byteOffset, byteLength) {\n assert(arrayBuffer instanceof ArrayBuffer);\n const textDecoder = new TextDecoder('utf8');\n const typedArray = new Uint8Array(arrayBuffer, byteOffset, byteLength);\n const string = textDecoder.decode(typedArray);\n return string;\n}\n\n// Decode the JSON binary array into clear text\nexport function getStringFromTypedArray(typedArray) {\n assert(ArrayBuffer.isView(typedArray));\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(typedArray);\n return string;\n}\n\nexport function getMagicString(arrayBuffer, byteOffset = 0) {\n const dataView = new DataView(arrayBuffer);\n return `\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 0))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 1))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 2))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 3))}`;\n}\n","// Subset of WebGL constants\n\nexport const GL_PRIMITIVE = {\n POINTS: 0x0000, // Points. single points.\n LINES: 0x0001, // Lines. Each vertex connects to the one after it.\n TRIANGLES: 0x0004 // Triangles. Each set of three vertices creates a separate triangle.\n};\n\n// Primitive modes\nexport const GL_PRIMITIVE_MODE = {\n POINTS: 0x0000, // Points. single points.\n LINES: 0x0001, // Lines. Each vertex connects to the one after it.\n LINE_LOOP: 0x0002, // Lines. Each set of two vertices is treated as a separate line segment.\n LINE_STRIP: 0x0003, // Lines/ a connected group of line segments from the first vertex to the last\n TRIANGLES: 0x0004, // Triangles. Each set of three vertices creates a separate triangle.\n TRIANGLE_STRIP: 0x0005, // Triangles. A connected group of triangles.\n TRIANGLE_FAN: 0x0006 // Triangles. A connected group of triangles.\n // Each vertex connects to the previous and the first vertex in the fan.\n};\n\ntype glType = {\n BYTE: number;\n UNSIGNED_BYTE: number;\n SHORT: number;\n UNSIGNED_SHORT: number;\n INT: number;\n UNSIGNED_INT: number;\n FLOAT: number;\n DOUBLE: number;\n};\n\nexport const GL_TYPE: glType = {\n BYTE: 5120,\n UNSIGNED_BYTE: 5121,\n SHORT: 5122,\n UNSIGNED_SHORT: 5123,\n INT: 5124,\n UNSIGNED_INT: 5125,\n FLOAT: 5126,\n DOUBLE: 5130\n};\n\nexport const GL = {\n ...GL_PRIMITIVE_MODE,\n ...GL_TYPE\n};\n","import type {TypedArray} from '@math.gl/core';\nimport {GL_TYPE as GL} from '../constants';\n\nconst GL_TYPE_TO_ARRAY_TYPE = {\n [GL.DOUBLE]: Float64Array,\n [GL.FLOAT]: Float32Array,\n [GL.UNSIGNED_SHORT]: Uint16Array,\n [GL.UNSIGNED_INT]: Uint32Array,\n [GL.UNSIGNED_BYTE]: Uint8Array,\n [GL.BYTE]: Int8Array,\n [GL.SHORT]: Int16Array,\n [GL.INT]: Int32Array\n};\ntype GlTypeMap = {\n [index: string]: number;\n};\nconst NAME_TO_GL_TYPE: GlTypeMap = {\n DOUBLE: GL.DOUBLE,\n FLOAT: GL.FLOAT,\n UNSIGNED_SHORT: GL.UNSIGNED_SHORT,\n UNSIGNED_INT: GL.UNSIGNED_INT,\n UNSIGNED_BYTE: GL.UNSIGNED_BYTE,\n BYTE: GL.BYTE,\n SHORT: GL.SHORT,\n INT: GL.INT\n};\nconst ERR_TYPE_CONVERSION = 'Failed to convert GL type';\n// Converts TYPED ARRAYS to corresponding GL constant\n// Used to auto deduce gl parameter types\nexport default class GLType {\n // Signature: fromTypedArray(new Uint8Array())\n // Signature: fromTypedArray(Uint8Array)\n /**\n * Returns the size, in bytes, of the corresponding datatype\n * @param arrayOrType\n * @returns glType a a string\n */\n static fromTypedArray(arrayOrType: TypedArray | Function): string {\n // If typed array, look up constructor\n arrayOrType = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n for (const glType in GL_TYPE_TO_ARRAY_TYPE) {\n const ArrayType = GL_TYPE_TO_ARRAY_TYPE[glType];\n if (ArrayType === arrayOrType) {\n return glType;\n }\n }\n throw new Error(ERR_TYPE_CONVERSION);\n }\n /**\n * Extracts name for glType from array NAME_TO_GL_TYPE\n * @param name\n * @returns glType as a number\n */\n static fromName(name: string): number {\n const glType = NAME_TO_GL_TYPE[name];\n if (!glType) {\n throw new Error(ERR_TYPE_CONVERSION);\n }\n return glType;\n }\n // Converts GL constant to corresponding typed array type\n // eslint-disable-next-line complexity\n static getArrayType(glType: number) {\n switch (glType) {\n /*eslint-disable*/\n // @ts-ignore\n case GL.UNSIGNED_SHORT_5_6_5:\n // @ts-ignore\n case GL.UNSIGNED_SHORT_4_4_4_4:\n // @ts-ignore\n case GL.UNSIGNED_SHORT_5_5_5_1:\n /* eslint-enable*/\n return Uint16Array;\n default:\n const ArrayType = GL_TYPE_TO_ARRAY_TYPE[glType];\n if (!ArrayType) {\n throw new Error(ERR_TYPE_CONVERSION);\n }\n return ArrayType;\n }\n }\n /**\n * Returns the size in bytes of one element of the provided WebGL type\n * @param glType\n * @returns size of glType\n */\n static getByteSize(glType: number): number {\n const ArrayType = GLType.getArrayType(glType);\n return ArrayType.BYTES_PER_ELEMENT;\n }\n /**\n * Returns `true` if `glType` is a valid WebGL data type.\n * @param glType\n * @returns boolean\n */\n static validate(glType: number): boolean {\n return Boolean(GLType.getArrayType(glType));\n }\n /**\n * Creates a typed view of an array of bytes\n * @param glType The type of typed array (ArrayBuffer view) to create\n * @param buffer The buffer storage to use for the view.\n * @param byteOffset The offset, in bytes, to the first element in the view\n * @param length The number of elements in the view. Defaults to buffer length\n * @returns A typed array view of the buffer\n */\n static createTypedArray(\n glType: number,\n buffer: TypedArray,\n byteOffset: number = 0,\n length?: number\n ): TypedArray {\n if (length === undefined) {\n length = (buffer.byteLength - byteOffset) / GLType.getByteSize(glType);\n }\n const ArrayType = GLType.getArrayType(glType);\n return new ArrayType(buffer, byteOffset, length);\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {GL, GLType} from '@loaders.gl/math';\n\n// Reference:\n// https://github.com/AnalyticalGraphicsInc/cesium/blob/1de96d087f0b17575eb1a3f736407b348c765d59/Source/Scene/Cesium3DTileFeatureTable.js\nexport default class Tile3DFeatureTable {\n json;\n buffer;\n featuresLength = 0;\n _cachedTypedArrays = {};\n\n constructor(featureTableJson, featureTableBinary) {\n this.json = featureTableJson;\n this.buffer = featureTableBinary;\n }\n\n getExtension(extensionName) {\n return this.json.extensions && this.json.extensions[extensionName];\n }\n\n hasProperty(propertyName) {\n return Boolean(this.json[propertyName]);\n }\n\n getGlobalProperty(propertyName, componentType = GL.UNSIGNED_INT, componentLength = 1) {\n const jsonValue = this.json[propertyName];\n\n if (jsonValue && Number.isFinite(jsonValue.byteOffset)) {\n return this._getTypedArrayFromBinary(\n propertyName,\n componentType,\n componentLength,\n 1,\n jsonValue.byteOffset\n );\n }\n\n return jsonValue;\n }\n\n getPropertyArray(propertyName, componentType, componentLength) {\n const jsonValue = this.json[propertyName];\n\n if (jsonValue && Number.isFinite(jsonValue.byteOffset)) {\n if ('componentType' in jsonValue) {\n componentType = GLType.fromName(jsonValue.componentType);\n }\n return this._getTypedArrayFromBinary(\n propertyName,\n componentType,\n componentLength,\n this.featuresLength,\n jsonValue.byteOffset\n );\n }\n\n return this._getTypedArrayFromArray(propertyName, componentType, jsonValue);\n }\n\n getProperty(propertyName, componentType, componentLength, featureId, result) {\n const jsonValue = this.json[propertyName];\n if (!jsonValue) {\n return jsonValue;\n }\n\n const typedArray = this.getPropertyArray(propertyName, componentType, componentLength);\n\n if (componentLength === 1) {\n return typedArray[featureId];\n }\n\n for (let i = 0; i < componentLength; ++i) {\n result[i] = typedArray[componentLength * featureId + i];\n }\n\n return result;\n }\n\n // HELPERS\n\n _getTypedArrayFromBinary(propertyName, componentType, componentLength, count, byteOffset) {\n const cachedTypedArrays = this._cachedTypedArrays;\n let typedArray = cachedTypedArrays[propertyName];\n if (!typedArray) {\n typedArray = GLType.createTypedArray(\n componentType,\n this.buffer.buffer,\n this.buffer.byteOffset + byteOffset,\n count * componentLength\n );\n cachedTypedArrays[propertyName] = typedArray;\n }\n return typedArray;\n }\n\n _getTypedArrayFromArray(propertyName, componentType, array) {\n const cachedTypedArrays = this._cachedTypedArrays;\n let typedArray = cachedTypedArrays[propertyName];\n if (!typedArray) {\n typedArray = GLType.createTypedArray(componentType, array);\n cachedTypedArrays[propertyName] = typedArray;\n }\n return typedArray;\n }\n}\n","import {GLType} from '@loaders.gl/math'; // '@math.gl/geometry';\nimport {assert} from '@loaders.gl/loader-utils';\n\nconst COMPONENTS_PER_ATTRIBUTE = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\n// TODO - could just return typed array views...\n// prettier-ignore\nconst UNPACKER = {\n SCALAR: (values, i) => values[i],\n VEC2: (values, i) => [values[2 * i + 0], values[2 * i + 1]],\n VEC3: (values, i) => [values[3 * i + 0], values[3 * i + 1], values[3 * i + 2]],\n VEC4: (values, i) => [values[4 * i + 0], values[4 * i + 1], values[4 * i + 2], values[4 * i + 3]],\n // TODO: check column major\n MAT2: (values, i) => [\n values[4 * i + 0], values[4 * i + 1],\n values[4 * i + 2], values[4 * i + 3]\n ],\n MAT3: (values, i) => [\n values[9 * i + 0], values[9 * i + 1], values[9 * i + 2],\n values[9 * i + 3], values[9 * i + 4], values[9 * i + 5],\n values[9 * i + 6], values[9 * i + 7], values[9 * i + 8]\n ],\n MAT4: (values, i) => [\n values[16 * i + 0], values[16 * i + 1], values[16 * i + 2], values[16 * i + 3],\n values[16 * i + 4], values[16 * i + 5], values[16 * i + 6], values[16 * i + 7],\n values[16 * i + 8], values[16 * i + 9], values[16 * i + 10], values[16 * i + 11],\n values[16 * i + 12], values[16 * i + 13], values[16 * i + 14], values[16 * i + 15]\n ]\n};\n\nconst PACKER = {\n SCALAR: (x, values, i) => {\n values[i] = x;\n },\n VEC2: (x, values, i) => {\n values[2 * i + 0] = x[0];\n values[2 * i + 1] = x[1];\n },\n VEC3: (x, values, i) => {\n values[3 * i + 0] = x[0];\n values[3 * i + 1] = x[1];\n values[3 * i + 2] = x[2];\n },\n VEC4: (x, values, i) => {\n values[4 * i + 0] = x[0];\n values[4 * i + 1] = x[1];\n values[4 * i + 2] = x[2];\n values[4 * i + 3] = x[3];\n },\n // TODO: check column major correctness\n MAT2: (x, values, i) => {\n values[4 * i + 0] = x[0];\n values[4 * i + 1] = x[1];\n values[4 * i + 2] = x[2];\n values[4 * i + 3] = x[3];\n },\n MAT3: (x, values, i) => {\n values[9 * i + 0] = x[0];\n values[9 * i + 1] = x[1];\n values[9 * i + 2] = x[2];\n values[9 * i + 3] = x[3];\n values[9 * i + 4] = x[4];\n values[9 * i + 5] = x[5];\n values[9 * i + 6] = x[6];\n values[9 * i + 7] = x[7];\n values[9 * i + 8] = x[8];\n values[9 * i + 9] = x[9];\n },\n MAT4: (x, values, i) => {\n values[16 * i + 0] = x[0];\n values[16 * i + 1] = x[1];\n values[16 * i + 2] = x[2];\n values[16 * i + 3] = x[3];\n values[16 * i + 4] = x[4];\n values[16 * i + 5] = x[5];\n values[16 * i + 6] = x[6];\n values[16 * i + 7] = x[7];\n values[16 * i + 8] = x[8];\n values[16 * i + 9] = x[9];\n values[16 * i + 10] = x[10];\n values[16 * i + 11] = x[11];\n values[16 * i + 12] = x[12];\n values[16 * i + 13] = x[13];\n values[16 * i + 14] = x[14];\n values[16 * i + 15] = x[15];\n }\n};\n\nexport function createTypedArrayFromAccessor(tile3DAccessor, buffer, byteOffset, length) {\n const {componentType} = tile3DAccessor;\n assert(tile3DAccessor.componentType);\n const type = typeof componentType === 'string' ? GLType.fromName(componentType) : componentType;\n const size = COMPONENTS_PER_ATTRIBUTE[tile3DAccessor.type];\n const unpacker = UNPACKER[tile3DAccessor.type];\n const packer = PACKER[tile3DAccessor.type];\n\n byteOffset += tile3DAccessor.byteOffset;\n const values = GLType.createTypedArray(type, buffer, byteOffset, size * length);\n\n return {\n values,\n type,\n size,\n unpacker,\n packer\n };\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// TODO - Finish hierarchy suypport: this file is only half ported\n/* eslint-disable */\n// @ts-nocheck\nconst defined = (x) => x !== undefined;\n\nexport function initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n if (!jsonHeader) {\n return null;\n }\n\n let hierarchy = batchTable.getExtension('3DTILES_batch_table_hierarchy');\n\n const legacyHierarchy = jsonHeader.HIERARCHY;\n if (legacyHierarchy) {\n // eslint-disable-next-line\n console.warn('3D Tile Parser: HIERARCHY is deprecated. Use 3DTILES_batch_table_hierarchy.');\n jsonHeader.extensions = jsonHeader.extensions || {};\n jsonHeader.extensions['3DTILES_batch_table_hierarchy'] = legacyHierarchy;\n hierarchy = legacyHierarchy;\n }\n\n if (!hierarchy) {\n return null;\n }\n\n return initializeHierarchyValues(hierarchy, binaryBody);\n}\n\n// eslint-disable-next-line max-statements\nfunction initializeHierarchyValues(hierarchyJson, binaryBody) {\n let i;\n let classId;\n let binaryAccessor;\n\n const instancesLength = hierarchyJson.instancesLength;\n const classes = hierarchyJson.classes;\n let classIds = hierarchyJson.classIds;\n let parentCounts = hierarchyJson.parentCounts;\n let parentIds = hierarchyJson.parentIds;\n let parentIdsLength = instancesLength;\n\n if (defined(classIds.byteOffset)) {\n classIds.componentType = defaultValue(classIds.componentType, GL.UNSIGNED_SHORT);\n classIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(classIds);\n classIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + classIds.byteOffset,\n instancesLength\n );\n }\n\n let parentIndexes;\n if (defined(parentCounts)) {\n if (defined(parentCounts.byteOffset)) {\n parentCounts.componentType = defaultValue(parentCounts.componentType, GL.UNSIGNED_SHORT);\n parentCounts.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentCounts);\n parentCounts = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentCounts.byteOffset,\n instancesLength\n );\n }\n parentIndexes = new Uint16Array(instancesLength);\n parentIdsLength = 0;\n for (i = 0; i < instancesLength; ++i) {\n parentIndexes[i] = parentIdsLength;\n parentIdsLength += parentCounts[i];\n }\n }\n\n if (defined(parentIds) && defined(parentIds.byteOffset)) {\n parentIds.componentType = defaultValue(parentIds.componentType, GL.UNSIGNED_SHORT);\n parentIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentIds);\n parentIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentIds.byteOffset,\n parentIdsLength\n );\n }\n\n const classesLength = classes.length;\n for (i = 0; i < classesLength; ++i) {\n const classInstancesLength = classes[i].length;\n const properties = classes[i].instances;\n const binaryProperties = getBinaryProperties(classInstancesLength, properties, binaryBody);\n classes[i].instances = combine(binaryProperties, properties);\n }\n\n const classCounts = new Array(classesLength).fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n for (i = 0; i < instancesLength; ++i) {\n classId = classIds[i];\n classIndexes[i] = classCounts[classId];\n ++classCounts[classId];\n }\n\n const hierarchy = {\n classes,\n classIds,\n classIndexes,\n parentCounts,\n parentIndexes,\n parentIds\n };\n\n validateHierarchy(hierarchy);\n\n return hierarchy;\n}\n\n// HELPER CODE\n\n// Traverse over the hierarchy and process each instance with the endConditionCallback.\n// When the endConditionCallback returns a value, the traversal stops and that value is returned.\nexport function traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n if (!hierarchy) {\n return;\n }\n\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n if (parentIds) {\n return endConditionCallback(hierarchy, instanceIndex);\n }\n if (parentCounts > 0) {\n return traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback);\n }\n return traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback);\n}\n\n// eslint-disable-next-line max-statements\nfunction traverseHierarchyMultipleParents(hierarchy, instanceIndex, endConditionCallback) {\n const classIds = hierarchy.classIds;\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const instancesLength = classIds.length;\n\n // Ignore instances that have already been visited. This occurs in diamond inheritance situations.\n // Use a marker value to indicate that an instance has been visited, which increments with each run.\n // This is more efficient than clearing the visited array every time.\n const visited = scratchVisited;\n visited.length = Math.max(visited.length, instancesLength);\n const visitedMarker = ++marker;\n\n const stack = scratchStack;\n stack.length = 0;\n stack.push(instanceIndex);\n\n while (stack.length > 0) {\n instanceIndex = stack.pop();\n if (visited[instanceIndex] === visitedMarker) {\n // This instance has already been visited, stop traversal\n continue;\n }\n visited[instanceIndex] = visitedMarker;\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentCount = parentCounts[instanceIndex];\n const parentIndex = parentIndexes[instanceIndex];\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself)\n // else add the parent to the stack to continue the traversal.\n if (parentId !== instanceIndex) {\n stack.push(parentId);\n }\n }\n }\n\n return null;\n}\n\nfunction traverseHierarchySingleParent(hierarchy, instanceIndex, endConditionCallback) {\n let hasParent = true;\n while (hasParent) {\n const result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n const parentId = hierarchy.parentIds[instanceIndex];\n hasParent = parentId !== instanceIndex;\n instanceIndex = parentId;\n }\n throw new Error('traverseHierarchySingleParent');\n}\n\n// DEBUG CODE\n\nfunction validateHierarchy(hierarchy) {\n const scratchValidateStack = [];\n\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n for (let i = 0; i < instancesLength; ++i) {\n validateInstance(hierarchy, i, stack);\n }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n const parentCounts = hierarchy.parentCounts;\n const parentIds = hierarchy.parentIds;\n const parentIndexes = hierarchy.parentIndexes;\n const classIds = hierarchy.classIds;\n const instancesLength = classIds.length;\n\n if (!defined(parentIds)) {\n // No need to validate if there are no parents\n return;\n }\n\n assert(\n instanceIndex < instancesLength,\n `Parent index ${instanceIndex} exceeds the total number of instances: ${instancesLength}`\n );\n assert(\n stack.indexOf(instanceIndex) === -1,\n 'Circular dependency detected in the batch table hierarchy.'\n );\n\n stack.push(instanceIndex);\n const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n const parentIndex = defined(parentCounts) ? parentIndexes[instanceIndex] : instanceIndex;\n for (let i = 0; i < parentCount; ++i) {\n const parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself), else continue the traversal.\n if (parentId !== instanceIndex) {\n validateInstance(hierarchy, parentId, stack);\n }\n }\n stack.pop(instanceIndex);\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {assert} from '@loaders.gl/loader-utils';\n\nimport {createTypedArrayFromAccessor} from './helpers/tile-3d-accessor-utils';\nimport {initializeHierarchy, traverseHierarchy} from './tile-3d-batch-table-hierarchy';\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\nconst clone = (x, y) => x;\n\n// These top level fields in the batch table json are not properties\nconst IGNORED_PROPERTY_FIELDS = {\n HIERARCHY: true, // Deprecated HIERARCHY property\n extensions: true,\n extras: true\n};\n\n// The size of this array equals the maximum instance count among all loaded tiles, which has the potential to be large.\nexport default class Tile3DBatchTableParser {\n json;\n binary;\n featureCount;\n _extensions;\n // Copy all top-level property fields from the json object, ignoring special fields\n _properties;\n _binaryProperties;\n // TODO: hierarchy support is only partially implemented and not tested\n _hierarchy;\n\n constructor(json, binary, featureCount, options = {}) {\n assert(featureCount >= 0);\n this.json = json || {};\n this.binary = binary;\n this.featureCount = featureCount;\n\n this._extensions = this.json?.extensions || {};\n\n // Copy all top-level property fields from the json object, ignoring special fields\n this._properties = {};\n for (const propertyName in this.json) {\n if (!IGNORED_PROPERTY_FIELDS[propertyName]) {\n this._properties[propertyName] = this.json[propertyName];\n }\n }\n\n this._binaryProperties = this._initializeBinaryProperties();\n\n // TODO: hierarchy support is only partially implemented and not tested\n if (options['3DTILES_batch_table_hierarchy']) {\n this._hierarchy = initializeHierarchy(this, this.json, this.binary);\n }\n }\n\n getExtension(extensionName) {\n return this.json && this.json.extensions && this.json.extensions[extensionName];\n }\n\n memorySizeInBytes(): number {\n return 0;\n }\n\n isClass(batchId, className: string): boolean {\n this._checkBatchId(batchId);\n assert(typeof className === 'string', className);\n\n // extension: 3DTILES_batch_table_hierarchy\n if (this._hierarchy) {\n // PERFORMANCE_IDEA : cache results in the ancestor classes\n // to speed up this check if this area becomes a hotspot\n // PERFORMANCE_IDEA : treat class names as integers for faster comparisons\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n return instanceClass.name === className;\n });\n return defined(result);\n }\n\n return false;\n }\n\n isExactClass(batchId, className) {\n assert(typeof className === 'string', className);\n\n return this.getExactClassName(batchId) === className;\n }\n\n getExactClassName(batchId) {\n this._checkBatchId(batchId);\n\n // extension: 3DTILES_batch_table_hierarchy\n if (this._hierarchy) {\n const classId = this._hierarchy.classIds[batchId];\n const instanceClass = this._hierarchy.classes[classId];\n return instanceClass.name;\n }\n\n return undefined;\n }\n\n hasProperty(batchId, name) {\n this._checkBatchId(batchId);\n assert(typeof name === 'string', name);\n\n return defined(this._properties[name]) || this._hasPropertyInHierarchy(batchId, name);\n }\n\n getPropertyNames(batchId, results) {\n this._checkBatchId(batchId);\n\n results = defined(results) ? results : [];\n results.length = 0;\n\n const propertyNames = Object.keys(this._properties);\n results.push(...propertyNames);\n\n if (this._hierarchy) {\n this._getPropertyNamesInHierarchy(batchId, results);\n }\n\n return results;\n }\n\n getProperty(batchId, name) {\n this._checkBatchId(batchId);\n assert(typeof name === 'string', name);\n\n if (this._binaryProperties) {\n const binaryProperty = this._binaryProperties[name];\n if (defined(binaryProperty)) {\n return this._getBinaryProperty(binaryProperty, batchId);\n }\n }\n\n const propertyValues = this._properties[name];\n if (defined(propertyValues)) {\n return clone(propertyValues[batchId], true);\n }\n\n // EXTENSION: 3DTILES_batch_table_hierarchy\n if (this._hierarchy) {\n const hierarchyProperty = this._getHierarchyProperty(batchId, name);\n if (defined(hierarchyProperty)) {\n return hierarchyProperty;\n }\n }\n\n return undefined;\n }\n\n setProperty(batchId, name, value) {\n const featureCount = this.featureCount;\n\n this._checkBatchId(batchId);\n assert(typeof name === 'string', name);\n\n if (this._binaryProperties) {\n const binaryProperty = this._binaryProperties[name];\n if (binaryProperty) {\n this._setBinaryProperty(binaryProperty, batchId, value);\n return;\n }\n }\n\n // EXTENSION: 3DTILES_batch_table_hierarchy\n if (this._hierarchy) {\n if (this._setHierarchyProperty(this, batchId, name, value)) {\n return;\n }\n }\n\n let propertyValues = this._properties[name];\n if (!defined(propertyValues)) {\n // Property does not exist. Create it.\n this._properties[name] = new Array(featureCount);\n propertyValues = this._properties[name];\n }\n\n propertyValues[batchId] = clone(value, true);\n }\n\n // PRIVATE METHODS\n\n _checkBatchId(batchId) {\n const valid = batchId >= 0 && batchId < this.featureCount;\n if (!valid) {\n throw new Error('batchId not in range [0, featureCount - 1].');\n }\n }\n\n _getBinaryProperty(binaryProperty, index) {\n return binaryProperty.unpack(binaryProperty.typedArray, index);\n }\n\n _setBinaryProperty(binaryProperty, index, value) {\n binaryProperty.pack(value, binaryProperty.typedArray, index);\n }\n\n _initializeBinaryProperties() {\n let binaryProperties: Record | null = null;\n for (const name in this._properties) {\n const property = this._properties[name];\n const binaryProperty = this._initializeBinaryProperty(name, property);\n // Store any information needed to access the binary data, including the typed array,\n // componentCount (e.g. a VEC4 would be 4), and the type used to pack and unpack (e.g. Cartesian4).\n if (binaryProperty) {\n binaryProperties = binaryProperties || {};\n binaryProperties[name] = binaryProperty;\n }\n }\n return binaryProperties;\n }\n\n _initializeBinaryProperty(name, property) {\n if ('byteOffset' in property) {\n // This is a binary property\n const tile3DAccessor = property;\n\n assert(this.binary, `Property ${name} requires a batch table binary.`);\n assert(tile3DAccessor.type, `Property ${name} requires a type.`);\n\n const accessor = createTypedArrayFromAccessor(\n tile3DAccessor,\n this.binary.buffer,\n this.binary.byteOffset | 0,\n this.featureCount\n );\n\n // Store any information needed to access the binary data, including the typed array,\n // componentCount (e.g. a VEC4 would be 4), and the type used to pack and unpack (e.g. Cartesian4).\n return {\n typedArray: accessor.values,\n componentCount: accessor.size,\n unpack: accessor.unpacker,\n pack: accessor.packer\n };\n }\n\n return null;\n }\n\n // EXTENSION SUPPORT: 3DTILES_batch_table_hierarchy\n\n _hasPropertyInHierarchy(batchId, name) {\n if (!this._hierarchy) {\n return false;\n }\n\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instances = hierarchy.classes[classId].instances;\n return defined(instances[name]);\n });\n\n return defined(result);\n }\n\n _getPropertyNamesInHierarchy(batchId, results) {\n traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instances = hierarchy.classes[classId].instances;\n for (const name in instances) {\n if (instances.hasOwnProperty(name)) {\n if (results.indexOf(name) === -1) {\n results.push(name);\n }\n }\n }\n });\n }\n\n _getHierarchyProperty(batchId, name) {\n return traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n const indexInClass = hierarchy.classIndexes[instanceIndex];\n const propertyValues = instanceClass.instances[name];\n if (defined(propertyValues)) {\n if (defined(propertyValues.typedArray)) {\n return this._getBinaryProperty(propertyValues, indexInClass);\n }\n return clone(propertyValues[indexInClass], true);\n }\n return null;\n });\n }\n\n _setHierarchyProperty(batchTable, batchId, name, value) {\n const result = traverseHierarchy(this._hierarchy, batchId, (hierarchy, instanceIndex) => {\n const classId = hierarchy.classIds[instanceIndex];\n const instanceClass = hierarchy.classes[classId];\n const indexInClass = hierarchy.classIndexes[instanceIndex];\n const propertyValues = instanceClass.instances[name];\n if (defined(propertyValues)) {\n assert(instanceIndex === batchId, `Inherited property \"${name}\" is read-only.`);\n if (defined(propertyValues.typedArray)) {\n this._setBinaryProperty(propertyValues, indexInClass, value);\n } else {\n propertyValues[indexInClass] = clone(value, true);\n }\n return true;\n }\n return false;\n });\n return defined(result);\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nconst SIZEOF_UINT32 = 4;\n\n/* PARSE FIXED HEADER:\nPopulates\n magic, // identifies type of tile\n type, // String version of magic\n version,\n byteLength\n */\nexport function parse3DTileHeaderSync(tile, arrayBuffer, byteOffset = 0) {\n const view = new DataView(arrayBuffer);\n\n tile.magic = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n tile.version = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n tile.byteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n // TODO - move version check into each tile parser?\n if (tile.version !== 1) {\n throw new Error(`3D Tile Version ${tile.version} not supported`);\n }\n\n return byteOffset; // Indicates where the parsing ended\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {getStringFromArrayBuffer} from './parse-utils';\n\nconst SIZEOF_UINT32 = 4;\nconst DEPRECATION_WARNING = 'b3dm tile in legacy format.';\n\n// eslint-disable-next-line max-statements\nexport function parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset) {\n const view = new DataView(arrayBuffer);\n let batchLength;\n\n tile.header = tile.header || {};\n\n let featureTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n let featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n let batchTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n let batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += SIZEOF_UINT32;\n\n // First legacy header format - [batchLength] [batchTableByteLength] ('batchTableJsonByteLength': JSON starts with a quotation mark or the glTF magic)\n // Second legacy format - [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength] (Second legacy format is similar as first but here we check 'batchTableBinaryByteLength' instead)\n // Current header format - [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength]\n // First byte will be 0x22 or 0x67. The minimum uint32 expected is 0x22000000 = 570425344 = 570MB.\n if (batchTableJsonByteLength >= 570425344) {\n byteOffset -= SIZEOF_UINT32 * 2;\n batchLength = featureTableJsonByteLength;\n batchTableJsonByteLength = featureTableBinaryByteLength;\n batchTableBinaryByteLength = 0;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n\n console.warn(DEPRECATION_WARNING); // eslint-disable-line\n } else if (batchTableBinaryByteLength >= 570425344) {\n byteOffset -= SIZEOF_UINT32;\n batchLength = batchTableJsonByteLength;\n batchTableJsonByteLength = featureTableJsonByteLength;\n batchTableBinaryByteLength = featureTableBinaryByteLength;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n\n console.warn(DEPRECATION_WARNING); // eslint-disable-line\n }\n\n tile.header.featureTableJsonByteLength = featureTableJsonByteLength;\n tile.header.featureTableBinaryByteLength = featureTableBinaryByteLength;\n tile.header.batchTableJsonByteLength = batchTableJsonByteLength;\n tile.header.batchTableBinaryByteLength = batchTableBinaryByteLength;\n tile.header.batchLength = batchLength;\n\n return byteOffset;\n}\n\nexport function parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options) {\n byteOffset = parse3DTileFeatureTable(tile, arrayBuffer, byteOffset, options);\n byteOffset = parse3DTileBatchTable(tile, arrayBuffer, byteOffset, options);\n return byteOffset;\n}\n\nfunction parse3DTileFeatureTable(tile, arrayBuffer, byteOffset, options) {\n const {featureTableJsonByteLength, featureTableBinaryByteLength, batchLength} = tile.header;\n\n tile.featureTableJson = {\n BATCH_LENGTH: batchLength || 0\n };\n\n if (featureTableJsonByteLength > 0) {\n const featureTableString = getStringFromArrayBuffer(\n arrayBuffer,\n byteOffset,\n featureTableJsonByteLength\n );\n tile.featureTableJson = JSON.parse(featureTableString);\n }\n byteOffset += featureTableJsonByteLength;\n\n tile.featureTableBinary = new Uint8Array(arrayBuffer, byteOffset, featureTableBinaryByteLength);\n byteOffset += featureTableBinaryByteLength;\n\n /*\n const featureTable = parseFeatureTable(featureTableJson, featureTableBinary);\n\n const batchLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n featureTable.featuresLength = batchLength;\n */\n\n return byteOffset;\n}\n\nfunction parse3DTileBatchTable(tile, arrayBuffer, byteOffset, options) {\n const {batchTableJsonByteLength, batchTableBinaryByteLength} = tile.header;\n\n if (batchTableJsonByteLength > 0) {\n const batchTableString = getStringFromArrayBuffer(\n arrayBuffer,\n byteOffset,\n batchTableJsonByteLength\n );\n tile.batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJsonByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n tile.batchTableBinary = new Uint8Array(arrayBuffer, byteOffset, batchTableBinaryByteLength);\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n tile.batchTableBinary = new Uint8Array(tile.batchTableBinary);\n\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n return byteOffset;\n}\n","/**\n * Decode color values\n * @param rgb565\n * @param target\n * @returns target\n */\nexport function decodeRGB565(rgb565: number, target: number[] = [0, 0, 0]): number[] {\n const r5 = (rgb565 >> 11) & 31;\n const g6 = (rgb565 >> 5) & 63;\n const b5 = rgb565 & 31;\n\n target[0] = r5 << 3;\n target[1] = g6 << 2;\n target[2] = b5 << 3;\n\n return target;\n}\n\n/**\n * Encode color values\n * @param rgb\n * @returns color\n */\nexport function encodeRGB565(rgb: number[]): number {\n const r5 = Math.floor(rgb[0] / 8) + 4;\n const g6 = Math.floor(rgb[1] / 4) + 2;\n const b5 = Math.floor(rgb[2] / 8) + 4;\n return r5 + (g6 << 5) + (b5 << 11);\n}\n","import {decodeRGB565, GL} from '@loaders.gl/math';\n\n/* eslint-disable complexity*/\nexport function normalize3DTileColorAttribute(tile, colors, batchTable?) {\n // no colors defined\n if (!colors && (!tile || !tile.batchIds || !batchTable)) {\n return null;\n }\n\n const {batchIds, isRGB565, pointCount} = tile;\n // Batch table, look up colors in table\n if (batchIds && batchTable) {\n const colorArray = new Uint8ClampedArray(pointCount * 3);\n for (let i = 0; i < pointCount; i++) {\n const batchId = batchIds[i];\n // TODO figure out what is `dimensions` used for\n const dimensions = batchTable.getProperty(batchId, 'dimensions');\n const color = dimensions.map((d) => d * 255);\n colorArray[i * 3] = color[0];\n colorArray[i * 3 + 1] = color[1];\n colorArray[i * 3 + 2] = color[2];\n }\n return {\n type: GL.UNSIGNED_BYTE,\n value: colorArray,\n size: 3,\n normalized: true\n };\n }\n\n // RGB565 case, convert to RGB\n if (isRGB565) {\n const colorArray = new Uint8ClampedArray(pointCount * 3);\n for (let i = 0; i < pointCount; i++) {\n const color = decodeRGB565(colors[i]);\n colorArray[i * 3] = color[0];\n colorArray[i * 3 + 1] = color[1];\n colorArray[i * 3 + 2] = color[2];\n }\n return {\n type: GL.UNSIGNED_BYTE,\n value: colorArray,\n size: 3,\n normalized: true\n };\n }\n\n // RGB case (tile.isTranslucent)\n if (colors && colors.length === pointCount * 3) {\n return {\n type: GL.UNSIGNED_BYTE,\n value: colors,\n size: 3,\n normalized: true\n };\n }\n\n // DEFAULT: RGBA case\n return {\n type: GL.UNSIGNED_BYTE,\n value: colors,\n size: 4,\n normalized: true\n };\n}\n/* eslint-enable complexity*/\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// Attribute compression and decompression functions.\n\nimport {Vector2, Vector3, clamp, _MathUtils} from '@math.gl/core';\nimport {assert} from '../utils/assert';\n\ntype Vector4 = {\n x: number;\n y: number;\n z: number;\n w: number;\n};\n\nconst RIGHT_SHIFT = 1.0 / 256.0;\nconst LEFT_SHIFT = 256.0;\n\nconst scratchVector2 = new Vector2();\nconst scratchVector3 = new Vector3();\nconst scratchEncodeVector2 = new Vector2();\nconst octEncodeScratch = new Vector2();\n\nconst uint8ForceArray = new Uint8Array(1);\n\n/**\n * Force a value to Uint8\n *\n * @param value\n * @returns\n */\nfunction forceUint8(value: number): number {\n uint8ForceArray[0] = value;\n return uint8ForceArray[0];\n}\n\n/**\n * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0].\n *\n * @param value SNORM value in the range [0, rangeMaximum]\n * @param [rangeMaximum=255] The maximum value in the SNORM range, 255 by default.\n * @returns Scalar in the range [-1.0, 1.0].\n *\n * @see CesiumMath.toSNorm\n */\nfunction fromSNorm(value: number, rangeMaximum = 255): number {\n return (clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0;\n}\n\n/**\n * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum].\n *\n * @param value The scalar value in the range [-1.0, 1.0]\n * @param [rangeMaximum=255] The maximum value in the mapped range, 255 by default.\n * @returns A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0.\n *\n * @see CesiumMath.fromSNorm\n */\nfunction toSNorm(value: number, rangeMaximum = 255): number {\n return Math.round((clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum);\n}\n\n/**\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative.\n * This is similar to `Math.sign` except that returns 1.0 instead of\n * 0.0 when the input value is 0.0.\n *\n * @param value The value to return the sign of.\n * @returns The sign of value.\n */\nfunction signNotZero(value: number): number {\n return value < 0.0 ? -1.0 : 1.0;\n}\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-rangeMax] following the 'oct' encoding.\n *\n * Oct encoding is a compact representation of unit length vectors.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: {@link http://jcgt.org/published/0003/02/01/}\n *\n * @param vector The normalized vector to be compressed into 2 component 'oct' encoding.\n * @param result The 2 component oct-encoded unit length vector.\n * @param rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @returns The 2 component oct-encoded unit length vector.\n *\n * @exception vector must be normalized.\n *\n * @see octDecodeInRange\n */\nexport function octEncodeInRange(vector: Vector3, rangeMax: number, result: Vector2): Vector2 {\n assert(vector);\n assert(result);\n\n const vector3 = scratchVector3.from(vector);\n\n assert(Math.abs(vector3.magnitudeSquared() - 1.0) <= _MathUtils.EPSILON6);\n\n result.x = vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n result.y = vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n\n if (vector.z < 0) {\n const x = result.x;\n const y = result.y;\n result.x = (1.0 - Math.abs(y)) * signNotZero(x);\n result.y = (1.0 - Math.abs(x)) * signNotZero(y);\n }\n\n result.x = toSNorm(result.x, rangeMax);\n result.y = toSNorm(result.y, rangeMax);\n\n return result;\n}\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding.\n *\n * @param vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @param result The 2 byte oct-encoded unit length vector.\n * @returns he 2 byte oct-encoded unit length vector.\n *\n * @exception vector must be normalized.\n *\n * @see octEncodeInRange\n * @see octDecode\n */\nexport function octEncode(vector: Vector3, result: Vector2): Vector2 {\n return octEncodeInRange(vector, 255, result);\n}\n\n/**\n * Encodes a normalized vector into 4-byte vector\n * @param vector The normalized vector to be compressed into 4 byte 'oct' encoding.\n * @param result The 4 byte oct-encoded unit length vector.\n * @returns The 4 byte oct-encoded unit length vector.\n *\n * @exception vector must be normalized.\n *\n * @see octEncodeInRange\n * @see octDecodeFromVector4\n */\nexport function octEncodeToVector4(vector: Vector3, result: Vector4): Vector4 {\n octEncodeInRange(vector, 65535, octEncodeScratch);\n result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT);\n result.y = forceUint8(octEncodeScratch.x);\n result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT);\n result.w = forceUint8(octEncodeScratch.y);\n return result;\n}\n\n/**\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component vector.\n *\n * @param x The x component of the oct-encoded unit length vector.\n * @param y The y component of the oct-encoded unit length vector.\n * @param rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @param result The decoded and normalized vector\n * @returns The decoded and normalized vector.\n *\n * @exception x and y must be unsigned normalized integers between 0 and rangeMax.\n *\n * @see octEncodeInRange\n */\nexport function octDecodeInRange(x: number, y: number, rangeMax: number, result: Vector3): Vector3 {\n assert(result);\n if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) {\n throw new Error(`x and y must be unsigned normalized integers between 0 and ${rangeMax}`);\n }\n\n result.x = fromSNorm(x, rangeMax);\n result.y = fromSNorm(y, rangeMax);\n result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y));\n\n if (result.z < 0.0) {\n const oldVX = result.x;\n result.x = (1.0 - Math.abs(result.y)) * signNotZero(oldVX);\n result.y = (1.0 - Math.abs(oldVX)) * signNotZero(result.y);\n }\n\n return result.normalize();\n}\n\n/**\n * Decodes a unit-length vector in 2 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param x The x component of the oct-encoded unit length vector.\n * @param y The y component of the oct-encoded unit length vector.\n * @param result The decoded and normalized vector.\n * @returns he decoded and normalized vector.\n *\n * @exception x and y must be an unsigned normalized integer between 0 and 255.\n *\n * @see octDecodeInRange\n */\nexport function octDecode(x: number, y: number, result: Vector3): Vector3 {\n return octDecodeInRange(x, y, 255, result);\n}\n\n/**\n * Decodes a unit-length vector in 4 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param encoded The oct-encoded unit length vector.\n * @param esult The decoded and normalized vector.\n * @returns The decoded and normalized vector.\n *\n * @exception x, y, z, and w must be unsigned normalized integers between 0 and 255.\n *\n * @see octDecodeInRange\n * @see octEncodeToVector4\n */\nexport function octDecodeFromVector4(encoded: Vector4, result: Vector3): Vector3 {\n assert(encoded);\n assert(result);\n const x = encoded.x;\n const y = encoded.y;\n const z = encoded.z;\n const w = encoded.w;\n\n if (x < 0 || x > 255 || y < 0 || y > 255 || z < 0 || z > 255 || w < 0 || w > 255) {\n throw new Error('x, y, z, and w must be unsigned normalized integers between 0 and 255');\n }\n\n const xOct16 = x * LEFT_SHIFT + y;\n const yOct16 = z * LEFT_SHIFT + w;\n return octDecodeInRange(xOct16, yOct16, 65535, result);\n}\n\n/**\n * Packs an oct encoded vector into a single floating-point number.\n *\n * @param encoded The oct encoded vector.\n * @returns The oct encoded vector packed into a single float.\n *\n */\nexport function octPackFloat(encoded: Vector2): number {\n const vector2 = scratchVector2.from(encoded);\n return 256.0 * vector2.x + vector2.y;\n}\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding and\n * stores those values in a single float-point number.\n *\n * @param vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @returns The 2 byte oct-encoded unit length vector.\n *\n * @exception vector must be normalized.\n */\nexport function octEncodeFloat(vector: Vector3): number {\n octEncode(vector, scratchEncodeVector2);\n return octPackFloat(scratchEncodeVector2);\n}\n\n/**\n * Decodes a unit-length vector in 'oct' encoding packed in a floating-point number to a normalized 3-component vector.\n *\n * @param value The oct-encoded unit length vector stored as a single floating-point number.\n * @param result The decoded and normalized vector\n * @returns The decoded and normalized vector.\n *\n */\nexport function octDecodeFloat(value: number, result: Vector3): Vector3 {\n assert(Number.isFinite(value));\n\n const temp = value / 256.0;\n const x = Math.floor(temp);\n const y = (temp - x) * 256.0;\n\n return octDecode(x, y, result);\n}\n\n/**\n * Encodes three normalized vectors into 6 SNORM values in the range of [0-255] following the 'oct' encoding and\n * packs those into two floating-point numbers.\n *\n * @param v1 A normalized vector to be compressed.\n * @param v2 A normalized vector to be compressed.\n * @param v3 A normalized vector to be compressed.\n * @param result The 'oct' encoded vectors packed into two floating-point numbers.\n * @returns The 'oct' encoded vectors packed into two floating-point numbers.\n *\n */\nexport function octPack(v1: Vector3, v2: Vector3, v3: Vector3, result: Vector2): Vector2 {\n assert(v1);\n assert(v2);\n assert(v3);\n assert(result);\n\n const encoded1 = octEncodeFloat(v1);\n const encoded2 = octEncodeFloat(v2);\n\n const encoded3 = octEncode(v3, scratchEncodeVector2);\n result.x = 65536.0 * encoded3.x + encoded1;\n result.y = 65536.0 * encoded3.y + encoded2;\n return result;\n}\n\n/**\n * Decodes three unit-length vectors in 'oct' encoding packed into a floating-point number to a normalized 3-component vector.\n *\n * @param packed The three oct-encoded unit length vectors stored as two floating-point number.\n * @param v1 One decoded and normalized vector.\n * @param v2 One decoded and normalized vector.\n * @param v3 One decoded and normalized vector.\n */\nexport function octUnpack(packed: Vector2, v1: Vector3, v2: Vector3, v3: Vector3): void {\n let temp = packed.x / 65536.0;\n const x = Math.floor(temp);\n const encodedFloat1 = (temp - x) * 65536.0;\n\n temp = packed.y / 65536.0;\n const y = Math.floor(temp);\n const encodedFloat2 = (temp - y) * 65536.0;\n\n octDecodeFloat(encodedFloat1, v1);\n octDecodeFloat(encodedFloat2, v2);\n octDecode(x, y, v3);\n}\n\n/**\n * Pack texture coordinates into a single float. The texture coordinates will only preserve 12 bits of precision.\n *\n * @param textureCoordinates The texture coordinates to compress. Both coordinates must be in the range 0.0-1.0.\n * @returns The packed texture coordinates.\n *\n */\nexport function compressTextureCoordinates(textureCoordinates: Vector2): number {\n // Move x and y to the range 0-4095;\n const x = (textureCoordinates.x * 4095.0) | 0;\n const y = (textureCoordinates.y * 4095.0) | 0;\n return 4096.0 * x + y;\n}\n\n/**\n * Decompresses texture coordinates that were packed into a single float.\n *\n * @param compressed The compressed texture coordinates.\n * @param result The decompressed texture coordinates.\n * @returns The modified result parameter.\n *\n */\nexport function decompressTextureCoordinates(compressed: number, result: Vector2): Vector2 {\n const temp = compressed / 4096.0;\n const xZeroTo4095 = Math.floor(temp);\n result.x = xZeroTo4095 / 4095.0;\n result.y = (compressed - xZeroTo4095 * 4096) / 4095;\n return result;\n}\n\n/**\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\n *\n * @param uBuffer The buffer view of u values.\n * @param vBuffer The buffer view of v values.\n * @param [heightBuffer] The buffer view of height values.\n *\n * @link https://github.com/AnalyticalGraphicsInc/quantized-mesh|quantized-mesh-1.0 terrain format\n */\nexport function zigZagDeltaDecode(\n uBuffer: Uint16Array,\n vBuffer: Uint16Array,\n heightBuffer?: Uint16Array | number[]\n) {\n assert(uBuffer);\n assert(vBuffer);\n assert(uBuffer.length === vBuffer.length);\n if (heightBuffer) {\n assert(uBuffer.length === heightBuffer.length);\n }\n\n function zigZagDecode(value: number) {\n return (value >> 1) ^ -(value & 1);\n }\n\n let u = 0;\n let v = 0;\n let height = 0;\n\n for (let i = 0; i < uBuffer.length; ++i) {\n u += zigZagDecode(uBuffer[i]);\n v += zigZagDecode(vBuffer[i]);\n\n uBuffer[i] = u;\n vBuffer[i] = v;\n\n if (heightBuffer) {\n height += zigZagDecode(heightBuffer[i]);\n heightBuffer[i] = height;\n }\n }\n}\n","/**\n * Throws error message\n * @param condition checks if an attribute equal to condition\n * @param message error message\n */\nexport function assert(condition: any, message?: any): void {\n if (!condition) {\n throw new Error(`math.gl assertion failed. ${message}`);\n }\n}\n","import {Vector3} from '@math.gl/core';\nimport {GL, octDecode} from '@loaders.gl/math';\n\nconst scratchNormal = new Vector3();\n\nexport function normalize3DTileNormalAttribute(tile, normals) {\n if (!normals) {\n return null;\n }\n\n if (tile.isOctEncoded16P) {\n const decodedArray = new Float32Array(tile.pointsLength * 3);\n for (let i = 0; i < tile.pointsLength; i++) {\n octDecode(normals[i * 2], normals[i * 2 + 1], scratchNormal);\n // @ts-ignore\n scratchNormal.toArray(decodedArray, i * 3);\n }\n\n return {\n type: GL.FLOAT,\n size: 2,\n value: decodedArray\n };\n }\n\n return {\n type: GL.FLOAT,\n size: 2,\n value: normals\n };\n}\n","import {Vector3} from '@math.gl/core';\nimport {GL} from '@loaders.gl/math';\n\n// Prepare attribute for positions\nexport function normalize3DTilePositionAttribute(tile, positions, options) {\n if (!tile.isQuantized) {\n return positions;\n }\n\n // For quantized posititions, either expand to Float32Array or return custom accessor\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/specification/TileFormats/Instanced3DModel/README.md#quantized-positions\n\n // Optionally decodes quantized positions on GPU, for simpler renderers that don't accept normalized attributes\n if (options['3d-tiles'] && options['3d-tiles'].decodeQuantizedPositions) {\n tile.isQuantized = false;\n return decodeQuantizedPositions(tile, positions);\n }\n\n // Default: Use normalized shorts directly, no copying/processing.\n // NOTE: The \"missing\" offset/scaling operations are automatically added to modelMatrix if `tile.isQuantized === true`\n return {\n type: GL.UNSIGNED_SHORT,\n value: positions,\n size: 3,\n normalized: true\n };\n}\n\n// Pre-scale quantized positions on CPU\nfunction decodeQuantizedPositions(tile, positions) {\n const scratchPosition = new Vector3();\n const decodedArray = new Float32Array(tile.pointCount * 3);\n\n for (let i = 0; i < tile.pointCount; i++) {\n // POSITION = POSITION_QUANTIZED / 65535.0 * QUANTIZED_VOLUME_SCALE + QUANTIZED_VOLUME_OFFSET\n scratchPosition\n .set(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2])\n .scale(1 / tile.quantizedRange)\n .multiply(tile.quantizedVolumeScale)\n .add(tile.quantizedVolumeOffset)\n .toArray(decodedArray, i * 3);\n }\n\n return decodedArray;\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {GL} from '@loaders.gl/math';\nimport {Vector3} from '@math.gl/core';\n\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {normalize3DTileColorAttribute} from './helpers/normalize-3d-tile-colors';\nimport {normalize3DTileNormalAttribute} from './helpers/normalize-3d-tile-normals';\nimport {normalize3DTilePositionAttribute} from './helpers/normalize-3d-tile-positions';\n\nexport async function parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n initializeTile(tile);\n\n const {featureTable, batchTable} = parsePointCloudTables(tile);\n\n await parseDraco(tile, featureTable, batchTable, options, context);\n\n parsePositions(tile, featureTable, options);\n parseColors(tile, featureTable, batchTable);\n parseNormals(tile, featureTable);\n\n return byteOffset;\n}\n\nfunction initializeTile(tile) {\n // Initialize point cloud tile defaults\n tile.attributes = {\n positions: null,\n colors: null,\n normals: null,\n batchIds: null\n };\n tile.isQuantized = false;\n tile.isTranslucent = false;\n tile.isRGB565 = false;\n tile.isOctEncoded16P = false;\n}\n\nfunction parsePointCloudTables(tile) {\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const pointsLength = featureTable.getGlobalProperty('POINTS_LENGTH');\n if (!Number.isFinite(pointsLength)) {\n throw new Error('POINTS_LENGTH must be defined');\n }\n featureTable.featuresLength = pointsLength;\n\n tile.featuresLength = pointsLength;\n tile.pointsLength = pointsLength;\n tile.pointCount = pointsLength;\n\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = parseBatchIds(tile, featureTable);\n\n return {featureTable, batchTable};\n}\n\nfunction parsePositions(tile, featureTable, options) {\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n const positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n tile.isQuantized = true;\n tile.quantizedRange = (1 << 16) - 1;\n\n tile.quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeScale) {\n throw new Error('QUANTIZED_VOLUME_SCALE must be defined for quantized positions.');\n }\n\n tile.quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3\n );\n if (!tile.quantizedVolumeOffset) {\n throw new Error('QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.');\n }\n\n tile.attributes.positions = normalize3DTilePositionAttribute(tile, positions, options);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n\nfunction parseColors(tile, featureTable, batchTable) {\n if (!tile.attributes.colors) {\n let colors = null;\n if (featureTable.hasProperty('RGBA')) {\n colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasProperty('RGB565')) {\n colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n\n tile.attributes.colors = normalize3DTileColorAttribute(tile, colors, batchTable);\n }\n\n if (featureTable.hasProperty('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n}\n\nfunction parseNormals(tile, featureTable) {\n if (!tile.attributes.normals) {\n let normals = null;\n if (featureTable.hasProperty('NORMAL')) {\n normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('NORMAL_OCT16P')) {\n normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n\n tile.attributes.normals = normalize3DTileNormalAttribute(tile, normals);\n }\n}\n\nfunction parseBatchIds(tile, featureTable) {\n let batchTable: Tile3DBatchTable | null = null;\n if (!tile.batchIds && featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n\n if (tile.batchIds) {\n const batchFeatureLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!batchFeatureLength) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n const {batchTableJson, batchTableBinary} = tile;\n batchTable = new Tile3DBatchTable(batchTableJson, batchTableBinary, batchFeatureLength);\n }\n }\n return batchTable;\n}\n\n// eslint-disable-next-line complexity\nasync function parseDraco(tile, featureTable, batchTable, options, context) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n const batchTableDraco =\n tile.batchTableJson &&\n tile.batchTableJson.extensions &&\n tile.batchTableJson.extensions['3DTILES_draco_point_compression'];\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !Number.isFinite(dracoByteOffset) || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = tile.featureTableBinary.slice(dracoByteOffset, dracoByteOffset + dracoByteLength);\n\n tile.hasPositions = Number.isFinite(dracoFeatureTableProperties.POSITION);\n tile.hasColors =\n Number.isFinite(dracoFeatureTableProperties.RGB) ||\n Number.isFinite(dracoFeatureTableProperties.RGBA);\n tile.hasNormals = Number.isFinite(dracoFeatureTableProperties.NORMAL);\n tile.hasBatchIds = Number.isFinite(dracoFeatureTableProperties.BATCH_ID);\n tile.isTranslucent = Number.isFinite(dracoFeatureTableProperties.RGBA);\n }\n\n if (!dracoBuffer) {\n return true;\n }\n\n const dracoData = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n return await loadDraco(tile, dracoData, options, context);\n}\n\n// eslint-disable-next-line complexity, max-statements\nexport async function loadDraco(tile, dracoData, options, context) {\n const {parse} = context;\n const dracoOptions = {\n ...options,\n draco: {\n ...options.draco,\n extraAttributes: dracoData.batchTableProperties || {}\n }\n };\n\n // The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n\n const data = await parse(dracoData.buffer, DracoLoader, dracoOptions);\n\n const decodedPositions = data.attributes.POSITION && data.attributes.POSITION.value;\n const decodedColors = data.attributes.COLOR_0 && data.attributes.COLOR_0.value;\n const decodedNormals = data.attributes.NORMAL && data.attributes.NORMAL.value;\n const decodedBatchIds = data.attributes.BATCH_ID && data.attributes.BATCH_ID.value;\n const isQuantizedDraco = decodedPositions && data.attributes.POSITION.value.quantization;\n const isOctEncodedDraco = decodedNormals && data.attributes.NORMAL.value.quantization;\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n const quantization = data.POSITION.data.quantization;\n const range = quantization.range;\n tile.quantizedVolumeScale = new Vector3(range, range, range);\n tile.quantizedVolumeOffset = new Vector3(quantization.minValues);\n tile.quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile.isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile.octEncodedRange = (1 << data.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile.isOctEncodedDraco = true;\n }\n\n // Extra batch table attributes\n const batchTableAttributes = {};\n if (dracoData.batchTableProperties) {\n for (const attributeName of Object.keys(dracoData.batchTableProperties)) {\n if (data.attributes[attributeName] && data.attributes[attributeName].value) {\n batchTableAttributes[attributeName.toLowerCase()] = data.attributes[attributeName].value;\n }\n }\n }\n\n tile.attributes = {\n positions: decodedPositions,\n colors: normalize3DTileColorAttribute(tile, decodedColors, undefined),\n normals: decodedNormals,\n batchIds: decodedBatchIds,\n ...batchTableAttributes\n };\n}\n\n// TODO - this is the remaining code from Cesium's parser\n/*\n const batchTable = new Tile3DBatchTable(tile);\n\n // parseDracoBuffer(tile, featureTable, batchTable);\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n}\n/*\n\n if (!tile.attributes.positions) {\n if (featureTable.hasProperty('POSITION')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION', GL.FLOAT, 3);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n tile.attributes.positions = featureTable.getPropertyArray('POSITION_QUANTIZED', GL.UNSIGNED_SHORT, 3);\n\n\n if (!tile.colors) {\n if (featureTable.hasProperty('RGBA')) {\n tile.colors = featureTable.getPropertyArray('RGBA', GL.UNSIGNED_BYTE, 4);\n tile.isTranslucent = true;\n } else if (featureTable.hasProperty('RGB')) {\n tile.colors = featureTable.getPropertyArray('RGB', GL.UNSIGNED_BYTE, 3);\n } else if (featureTable.hasPropertry('RGB565')) {\n tile.colors = featureTable.getPropertyArray('RGB565', GL.UNSIGNED_SHORT, 1);\n tile.isRGB565 = true;\n }\n }\n\n if (!tile.attributes.normals) {\n if (featureTable.getPropertry('NORMAL')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL', GL.FLOAT, 3);\n } else if (featureTable.getProperty('NORMAL_OCT16P')) {\n tile.attributes.normals = featureTable.getPropertyArray('NORMAL_OCT16P', GL.UNSIGNED_BYTE, 2);\n tile.isOctEncoded16P = true;\n }\n }\n\n if (!tile.batchIds) {\n if (featureTable.hasProperty('BATCH_ID')) {\n tile.batchIds = featureTable.getPropertyArray('BATCH_ID', GL.UNSIGNED_SHORT, 1);\n }\n }\n\n if (!tile.attributes.positions) {\n throw new Error('Either POSITION or POSITION_QUANTIZED must be defined.');\n }\n\n if (featureTable.getPropertry('CONSTANT_RGBA')) {\n tile.constantRGBA = featureTable.getGlobalProperty('CONSTANT_RGBA', GL.UNSIGNED_BYTE, 4);\n }\n\n if (tile.batchIds) {\n const batchLength = featureTable.getGlobalProperty('BATCH_LENGTH');\n if (!defined(batchLength)) {\n throw new Error('Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.');\n }\n\n if (defined(batchTableBinary)) {\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n }\n\n if (defined(pointCloud._batchTableLoaded)) {\n pointCloud._batchTableLoaded(batchLength, batchTableJson, batchTableBinary);\n }\n }\n\n // If points are not batched and there are per-point properties, use these properties for styling purposes\n var styleableProperties;\n if (!hasBatchIds && defined(batchTableBinary)) {\n tile.styleableProperties = Cesium3DTileBatchTable.getBinaryProperties(\n pointsLength,\n batchTableJson,\n batchTableBinary\n );\n }\n\n tile.draco = draco;\n}\n\n// Separate parsing and decoding of Draco\nexport function parseDracoBuffer(tile, featureTable, batchTable) {\n let dracoBuffer;\n let dracoFeatureTableProperties;\n let dracoBatchTableProperties;\n\n const batchTableDraco = batchTable.getExtension('3DTILES_draco_point_compression');\n if (batchTableDraco) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n const featureTableDraco = featureTable.getExtension('3DTILES_draco_point_compression');\n if (featureTableDraco) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n const dracoByteOffset = featureTableDraco.byteOffset;\n const dracoByteLength = featureTableDraco.byteLength;\n if (!dracoFeatureTableProperties || !dracoByteOffset || !dracoByteLength) {\n throw new Error('Draco properties, byteOffset, and byteLength must be defined');\n }\n\n dracoBuffer = arraySlice(\n featureTableBinary,\n dracoByteOffset,\n dracoByteOffset + dracoByteLength\n );\n tile.hasPositions = dracoFeatureTableProperties.POSITION;\n tile.hasColors = dracoFeatureTableProperties.RGB || dracoFeatureTableProperties.RGBA;\n tile.hasNormals = dracoFeatureTableProperties.NORMAL;\n tile.hasBatchIds = dracoFeatureTableProperties.BATCH_ID;\n tile.isTranslucent = dracoFeatureTableProperties.RGBA;\n }\n\n if (dracoBuffer) {\n tile.draco = {\n buffer: dracoBuffer,\n properties: {...dracoFeatureTableProperties, ...dracoBatchTableProperties},\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n dequantizeInShader: false\n };\n\n tile.decodingState = DECODING_STATE.NEEDS_DECODE;\n }\n}\n\n/*\nfunction decodeDraco(tile, context) {\n if (tile.decodingState === DECODING_STATE.READY) {\n return false;\n }\n if (tile.decodingState === DECODING_STATE.NEEDS_DECODE) {\n var parsedContent = tile._parsedContent;\n var draco = parsedContent.draco;\n var decodePromise = DracoLoader.decodePointCloud(draco, context);\n if (defined(decodePromise)) {\n tile.decodingState = DECODING_STATE.DECODING;\n decodePromise.then(function(result) {\n tile.decodingState = DECODING_STATE.READY;\n var decodedPositions = defined(result.POSITION) ? result.POSITION.array : undefined;\n var decodedRgb = defined(result.RGB) ? result.RGB.array : undefined;\n var decodedRgba = defined(result.RGBA) ? result.RGBA.array : undefined;\n var decodedNormals = defined(result.NORMAL) ? result.NORMAL.array : undefined;\n var decodedBatchIds = defined(result.BATCH_ID) ? result.BATCH_ID.array : undefined;\n var isQuantizedDraco = defined(decodedPositions) && defined(result.POSITION.data.quantization);\n var isOctEncodedDraco = defined(decodedNormals) && defined(result.NORMAL.data.quantization);\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n var quantization = result.POSITION.data.quantization;\n var range = quantization.range;\n tile._quantizedVolumeScale = Cartesian3.fromElements(range, range, range);\n tile._quantizedVolumeOffset = Cartesian3.unpack(quantization.minValues);\n tile._quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n tile._isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n tile._octEncodedRange = (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n tile._isOctEncodedDraco = true;\n }\n var styleableProperties = parsedContent.styleableProperties;\n var batchTableProperties = draco.batchTableProperties;\n for (var name in batchTableProperties) {\n if (batchTableProperties.hasOwnProperty(name)) {\n var property = result[name];\n if (!defined(styleableProperties)) {\n styleableProperties = {};\n }\n styleableProperties[name] = {\n typedArray : property.array,\n componentCount : property.data.componentsPerAttribute\n };\n }\n }\n parsedContent.positions = defaultValue(decodedPositions, parsedContent.positions);\n parsedContent.colors = defaultValue(defaultValue(decodedRgba, decodedRgb), parsedContent.colors);\n parsedContent.normals = defaultValue(decodedNormals, parsedContent.normals);\n parsedContent.batchIds = defaultValue(decodedBatchIds, parsedContent.batchIds);\n parsedContent.styleableProperties = styleableProperties;\n }).otherwise(function(error) {\n tile.decodingState = DECODING_STATE.FAILED;\n tile._readyPromise.reject(error);\n });\n }\n }\n return true;\n}\n*/\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// TODO - should we automatically parse the embedded glTF or leave it to the app?\n// - I.e. some apps might work directly on a GLB, in that case no need for us to decode...\n// - And if we decode, do we still keep the GLB in case it is needed?\n// - Do we add an option to control this?\n// - Also, should we have hard dependency on gltf module or use injection or auto-discovery for gltf parser?\n\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\n\nexport const GLTF_FORMAT = {\n URI: 0,\n EMBEDDED: 1\n};\n\nexport function parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options) {\n // Set flags\n // glTF models need to be rotated from Y to Z up\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up\n tile.rotateYtoZ = true;\n\n // Assume glTF consumes rest of tile\n const gltfByteLength = tile.byteOffset + tile.byteLength - byteOffset;\n if (gltfByteLength === 0) {\n throw new Error('glTF byte length must be greater than 0.');\n }\n\n // Save gltf up axis\n tile.gltfUpAxis =\n options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis\n ? options['3d-tiles'].assetGltfUpAxis\n : 'Y';\n\n // TODO - We can avoid copy if already 4-byte aligned...\n // However the rest of the code may not be able to accept byteOffsets, so copy anyway\n tile.gltfArrayBuffer = sliceArrayBuffer(arrayBuffer, byteOffset, gltfByteLength);\n tile.gltfByteOffset = 0;\n tile.gltfByteLength = gltfByteLength;\n\n if (byteOffset % 4 === 0) {\n // tile.gltfArrayBuffer = arrayBuffer;\n // tile.gltfByteOffset = byteOffset;\n // tile.gltfByteLength = gltfByteLength;\n } else {\n // Create a copy of the glb so that it is 4-byte aligned\n // eslint-disable-next-line\n console.warn(`${tile.type}: embedded glb is not aligned to a 4-byte boundary.`);\n }\n\n // Entire tile is consumed\n return tile.byteOffset + tile.byteLength;\n}\n\nexport async function extractGLTF(tile, gltfFormat, options, context) {\n const tile3DOptions = options['3d-tiles'] || {};\n\n extractGLTFBufferOrURL(tile, gltfFormat, options);\n\n if (tile3DOptions.loadGLTF) {\n const {parse, fetch} = context;\n if (tile.gltfUrl) {\n tile.gltfArrayBuffer = await fetch(tile.gltfUrl, options);\n tile.gltfByteOffset = 0;\n }\n if (tile.gltfArrayBuffer) {\n // TODO - Should handle byteOffset... However, not used now...\n tile.gltf = await parse(tile.gltfArrayBuffer, GLTFLoader, options, context);\n delete tile.gltfArrayBuffer;\n delete tile.gltfByteOffset;\n delete tile.gltfByteLength;\n }\n }\n}\n\nfunction extractGLTFBufferOrURL(tile, gltfFormat, options) {\n switch (gltfFormat) {\n case GLTF_FORMAT.URI:\n // We need to remove padding from the end of the model URL in case this tile was part of a composite tile.\n // This removes all white space and null characters from the end of the string.\n const gltfUrlBytes = new Uint8Array(tile.gltfArrayBuffer, tile.gltfByteOffset);\n const textDecoder = new TextDecoder();\n const gltfUrl = textDecoder.decode(gltfUrlBytes);\n tile.gltfUrl = gltfUrl.replace(/[\\s\\0]+$/, '');\n delete tile.gltfArrayBuffer;\n delete tile.gltfByteOffset;\n delete tile.gltfByteLength;\n break;\n case GLTF_FORMAT.EMBEDDED:\n break;\n default:\n throw new Error('b3dm: Illegal glTF format field');\n }\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {GL} from '@loaders.gl/math'; // math.gl/geometry;\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\n// import Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF, GLTF_FORMAT} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseBatchedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, GLTF_FORMAT.EMBEDDED, options, context);\n\n const extensions = tile?.gltf?.extensions;\n if (extensions && extensions.CESIUM_RTC) {\n tile.rtcCenter = extensions.CESIUM_RTC.center;\n }\n\n return byteOffset;\n}\n\nfunction parseBatchedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n return byteOffset;\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GL} from '@loaders.gl/math'; // 'math.gl/geometry';\nimport Tile3DFeatureTable from '../classes/tile-3d-feature-table';\nimport Tile3DBatchTable from '../classes/tile-3d-batch-table';\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\nimport {parse3DTileTablesHeaderSync, parse3DTileTablesSync} from './helpers/parse-3d-tile-tables';\nimport {parse3DTileGLTFViewSync, extractGLTF} from './helpers/parse-3d-tile-gltf-view';\n\nexport async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);\n await extractGLTF(tile, tile.gltfFormat, options, context);\n return byteOffset;\n}\n\nfunction parseInstancedModel(tile, arrayBuffer, byteOffset, options, context) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n if (tile.version !== 1) {\n throw new Error(`Instanced 3D Model version ${tile.version} is not supported`);\n }\n\n byteOffset = parse3DTileTablesHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n tile.gltfFormat = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // PARSE FEATURE TABLE\n byteOffset = parse3DTileTablesSync(tile, arrayBuffer, byteOffset, options);\n\n byteOffset = parse3DTileGLTFViewSync(tile, arrayBuffer, byteOffset, options);\n\n // TODO - Is the feature table sometimes optional or can check be moved into table header parser?\n if (tile.featureTableJsonByteLength === 0) {\n throw new Error('i3dm parser: featureTableJsonByteLength is zero.');\n }\n\n const featureTable = new Tile3DFeatureTable(tile.featureTableJson, tile.featureTableBinary);\n\n const instancesLength = featureTable.getGlobalProperty('INSTANCES_LENGTH');\n featureTable.featuresLength = instancesLength;\n\n if (!Number.isFinite(instancesLength)) {\n throw new Error('i3dm parser: INSTANCES_LENGTH must be defined');\n }\n\n tile.eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP');\n tile.rtcCenter = featureTable.getGlobalProperty('RTC_CENTER', GL.FLOAT, 3);\n\n const batchTable = new Tile3DBatchTable(\n tile.batchTableJson,\n tile.batchTableBinary,\n instancesLength\n );\n\n extractInstancedAttributes(tile, featureTable, batchTable, instancesLength);\n\n return byteOffset;\n}\n\n// eslint-disable-next-line max-statements, complexity\nfunction extractInstancedAttributes(tile, featureTable, batchTable, instancesLength) {\n // Create model instance collection\n const collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: tile._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n // requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n // TODO - tileset is not available at this stage, tile is parsed independently\n // upAxis: (tileset && tileset._gltfUpAxis) || [0, 1, 0],\n forwardAxis: [1, 0, 0]\n };\n\n const instances = collectionOptions.instances;\n const instancePosition = new Vector3();\n const instanceNormalRight = new Vector3();\n const instanceNormalUp = new Vector3();\n const instanceNormalForward = new Vector3();\n const instanceRotation = new Matrix3();\n const instanceQuaternion = new Quaternion();\n const instanceScale = new Vector3();\n const instanceTranslationRotationScale = {};\n const instanceTransform = new Matrix4();\n const scratch1 = [];\n const scratch2 = [];\n const scratchVector1 = new Vector3();\n const scratchVector2 = new Vector3();\n\n for (let i = 0; i < instancesLength; i++) {\n let position;\n\n // Get the instance position\n if (featureTable.hasProperty('POSITION')) {\n position = featureTable.getProperty('POSITION', GL.FLOAT, 3, i, instancePosition);\n } else if (featureTable.hasProperty('POSITION_QUANTIZED')) {\n position = featureTable.getProperty(\n 'POSITION_QUANTIZED',\n GL.UNSIGNED_SHORT,\n 3,\n i,\n instancePosition\n );\n\n const quantizedVolumeOffset = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_OFFSET',\n GL.FLOAT,\n 3,\n scratchVector1\n );\n if (!quantizedVolumeOffset) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.'\n );\n }\n\n const quantizedVolumeScale = featureTable.getGlobalProperty(\n 'QUANTIZED_VOLUME_SCALE',\n GL.FLOAT,\n 3,\n scratchVector2\n );\n if (!quantizedVolumeScale) {\n throw new Error(\n 'i3dm parser: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.'\n );\n }\n\n const MAX_UNSIGNED_SHORT = 65535.0;\n for (let j = 0; j < 3; j++) {\n position[j] =\n (position[j] / MAX_UNSIGNED_SHORT) * quantizedVolumeScale[j] + quantizedVolumeOffset[j];\n }\n }\n\n if (!position) {\n throw new Error('i3dm: POSITION or POSITION_QUANTIZED must be defined for each instance.');\n }\n\n instancePosition.copy(position);\n // @ts-expect-error\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n tile.normalUp = featureTable.getProperty('NORMAL_UP', GL.FLOAT, 3, i, scratch1);\n tile.normalRight = featureTable.getProperty('NORMAL_RIGHT', GL.FLOAT, 3, i, scratch2);\n\n const hasCustomOrientation = false;\n if (tile.normalUp) {\n if (!tile.normalRight) {\n throw new Error('i3dm: Custom orientation requires both NORMAL_UP and NORMAL_RIGHT.');\n }\n // Vector3.unpack(normalUp, 0, instanceNormalUp);\n // Vector3.unpack(normalRight, 0, instanceNormalRight);\n tile.hasCustomOrientation = true;\n } else {\n tile.octNormalUp = featureTable.getProperty(\n 'NORMAL_UP_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch1\n );\n tile.octNormalRight = featureTable.getProperty(\n 'NORMAL_RIGHT_OCT32P',\n GL.UNSIGNED_SHORT,\n 2,\n scratch2\n );\n\n if (tile.octNormalUp) {\n if (!tile.octNormalRight) {\n throw new Error(\n 'i3dm: oct-encoded orientation requires NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P'\n );\n }\n\n throw new Error('i3dm: oct-encoded orientation not implemented');\n /*\n AttributeCompression.octDecodeInRange(octNormalUp[0], octNormalUp[1], 65535, instanceNormalUp);\n AttributeCompression.octDecodeInRange(octNormalRight[0], octNormalRight[1], 65535, instanceNormalRight);\n hasCustomOrientation = true;\n */\n } else if (tile.eastNorthUp) {\n Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);\n instanceTransform.getRotationMatrix3(instanceRotation);\n } else {\n instanceRotation.identity();\n }\n }\n\n if (hasCustomOrientation) {\n instanceNormalForward.copy(instanceNormalRight).cross(instanceNormalUp).normalize();\n instanceRotation.setColumn(0, instanceNormalRight);\n instanceRotation.setColumn(1, instanceNormalUp);\n instanceRotation.setColumn(2, instanceNormalForward);\n }\n\n instanceQuaternion.fromMatrix3(instanceRotation);\n // @ts-expect-error\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale.set(1.0, 1.0, 1.0);\n const scale = featureTable.getProperty('SCALE', GL.FLOAT, 1, i);\n if (Number.isFinite(scale)) {\n instanceScale.multiplyByScalar(scale);\n }\n const nonUniformScale = featureTable.getProperty('SCALE_NON_UNIFORM', GL.FLOAT, 3, i, scratch1);\n if (nonUniformScale) {\n instanceScale.scale(nonUniformScale);\n }\n\n // @ts-expect-error\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n let batchId = featureTable.getProperty('BATCH_ID', GL.UNSIGNED_SHORT, 1, i);\n if (batchId === undefined) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // @ts-expect-error\n const rotationMatrix = new Matrix4().fromQuaternion(instanceTranslationRotationScale.rotation);\n\n // Create the model matrix and the instance\n instanceTransform.identity();\n // @ts-expect-error\n instanceTransform.translate(instanceTranslationRotationScale.translation);\n instanceTransform.multiplyRight(rotationMatrix);\n // @ts-expect-error\n instanceTransform.scale(instanceTranslationRotationScale.scale);\n\n const modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix,\n batchId\n };\n }\n\n tile.instances = instances;\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// Reference code:\n// https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Scene/Composite3DTileContent.js#L182\n\nimport {parse3DTileHeaderSync} from './helpers/parse-3d-tile-header';\n\n// eslint-disable-next-line max-params\nexport async function parseComposite3DTile(\n tile,\n arrayBuffer,\n byteOffset,\n options,\n context,\n parse3DTile\n) {\n byteOffset = parse3DTileHeaderSync(tile, arrayBuffer, byteOffset);\n\n const view = new DataView(arrayBuffer);\n\n // Extract number of tiles\n tile.tilesLength = view.getUint32(byteOffset, true);\n byteOffset += 4;\n\n // extract each tile from the byte stream\n tile.tiles = [];\n while (tile.tiles.length < tile.tilesLength && tile.byteLength - byteOffset > 12) {\n const subtile = {};\n tile.tiles.push(subtile);\n byteOffset = await parse3DTile(arrayBuffer, byteOffset, options, context, subtile);\n // TODO - do we need to add any padding in between tiles?\n }\n\n return byteOffset;\n}\n","import {GLTFLoader} from '@loaders.gl/gltf';\n\nexport async function parseGltf3DTile(tile, arrayBuffer, options, context) {\n // Set flags\n // glTF models need to be rotated from Y to Z up\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up\n tile.rotateYtoZ = true;\n // Save gltf up axis\n tile.gltfUpAxis =\n options['3d-tiles'] && options['3d-tiles'].assetGltfUpAxis\n ? options['3d-tiles'].assetGltfUpAxis\n : 'Y';\n\n const {parse} = context;\n tile.gltf = await parse(arrayBuffer, GLTFLoader, options, context);\n}\n","// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {TILE3D_TYPE} from '../constants';\nimport {getMagicString} from './helpers/parse-utils';\n\nimport {parsePointCloud3DTile} from './parse-3d-tile-point-cloud';\nimport {parseBatchedModel3DTile} from './parse-3d-tile-batched-model';\nimport {parseInstancedModel3DTile} from './parse-3d-tile-instanced-model';\nimport {parseComposite3DTile} from './parse-3d-tile-composite';\nimport {parseGltf3DTile} from './parse-3d-tile-gltf';\n\n// Extracts\nexport async function parse3DTile(arrayBuffer, byteOffset = 0, options, context, tile = {}) {\n // @ts-expect-error\n tile.byteOffset = byteOffset;\n // @ts-expect-error\n tile.type = getMagicString(arrayBuffer, byteOffset);\n\n // @ts-expect-error\n switch (tile.type) {\n case TILE3D_TYPE.COMPOSITE:\n // Note: We pass this function as argument so that embedded tiles can be parsed recursively\n return await parseComposite3DTile(\n tile,\n arrayBuffer,\n byteOffset,\n options,\n context,\n parse3DTile\n );\n\n case TILE3D_TYPE.BATCHED_3D_MODEL:\n return await parseBatchedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.GLTF:\n return await parseGltf3DTile(tile, arrayBuffer, options, context);\n\n case TILE3D_TYPE.INSTANCED_3D_MODEL:\n return await parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n case TILE3D_TYPE.POINT_CLOUD:\n return await parsePointCloud3DTile(tile, arrayBuffer, byteOffset, options, context);\n\n default:\n // @ts-expect-error\n throw new Error(`3DTileLoader: unknown type ${tile.type}`); // eslint-disable-line\n }\n}\n","import type {Subtree, ExplicitBitstream} from '../../../types';\nimport {fetchFile} from '@loaders.gl/core';\n\nconst SUBTREE_FILE_MAGIC = 0x74627573;\nconst SUBTREE_FILE_VERSION = 1;\n\n/**\n * Parse subtree file\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subtree-file-format\n * @param data\n * @returns\n */\n// eslint-disable-next-line max-statements\nexport default async function parse3DTilesSubtree(data: ArrayBuffer): Promise {\n const magic = new Uint32Array(data.slice(0, 4));\n\n if (magic[0] !== SUBTREE_FILE_MAGIC) {\n throw new Error('Wrong subtree file magic number');\n }\n\n const version = new Uint32Array(data.slice(4, 8));\n\n if (version[0] !== SUBTREE_FILE_VERSION) {\n throw new Error('Wrong subtree file verson, must be 1');\n }\n\n const jsonByteLength = parseUint64Value(data.slice(8, 16));\n const stringAttribute = new Uint8Array(data, 24, jsonByteLength);\n\n const textDecoder = new TextDecoder('utf8');\n const string = textDecoder.decode(stringAttribute);\n const subtree = JSON.parse(string);\n\n const binaryByteLength = parseUint64Value(data.slice(16, 24));\n let internalBinaryBuffer = new ArrayBuffer(0);\n\n if (binaryByteLength) {\n internalBinaryBuffer = data.slice(24 + jsonByteLength);\n }\n\n if ('bufferView' in subtree.tileAvailability) {\n subtree.tileAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'tileAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.contentAvailability) {\n subtree.contentAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'contentAvailability',\n internalBinaryBuffer\n );\n }\n\n if ('bufferView' in subtree.childSubtreeAvailability) {\n subtree.childSubtreeAvailability.explicitBitstream = await getExplicitBitstream(\n subtree,\n 'childSubtreeAvailability',\n internalBinaryBuffer\n );\n }\n\n return subtree;\n}\n\n/**\n * Get explicit bitstream for subtree availability data.\n * @param subtree\n * @param name\n * @param internalBinaryBuffer\n */\nasync function getExplicitBitstream(\n subtree: Subtree,\n name: string,\n internalBinaryBuffer: ArrayBuffer\n): Promise {\n const bufferViewIndex = subtree[name].bufferView;\n const bufferView = subtree.bufferViews[bufferViewIndex];\n const buffer = subtree.buffers[bufferView.buffer];\n\n // External bitstream loading\n if (buffer.uri) {\n const response = await fetchFile(buffer.uri);\n const data = await response.arrayBuffer();\n // Return view of bitstream.\n return new Uint8Array(data, bufferView.byteOffset, bufferView.byteLength);\n }\n // Return view of bitstream.\n return new Uint8Array(internalBinaryBuffer, bufferView.byteOffset, bufferView.byteLength);\n}\n\n/**\n * Parse buffer to return uint64 value\n * @param buffer\n * @returns 64-bit value until precision is lost after Number.MAX_SAFE_INTEGER\n */\nfunction parseUint64Value(buffer: ArrayBuffer): number {\n const dataView = new DataView(buffer);\n const left = dataView.getUint32(0, true);\n const right = dataView.getUint32(4, true);\n // combine the two 32-bit values\n return left + 2 ** 32 * right;\n}\n","import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parse3DTilesSubtree from './lib/parsers/helpers/parse-3d-tile-subtree';\nimport {VERSION} from './lib/utils/version';\n\n/**\n * Loader for 3D Tiles Subtree\n *\n */\nexport const Tile3DSubtreeLoader: LoaderWithParser = {\n id: '3d-tiles-subtree',\n name: '3D Tiles Subtree',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['subtree'],\n mimeTypes: ['application/octet-stream'],\n tests: ['subtree'],\n parse: parse3DTilesSubtree,\n options: {}\n};\n","import type {Availability, BoundingVolume, Subtree} from '../../../types';\nimport {Tile3DSubtreeLoader} from '../../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\n\nconst QUADTREE_DEVISION_COUNT = 4;\nconst OCTREE_DEVISION_COUNT = 8;\n\nconst SUBDIVISION_COUNT_MAP = {\n QUADTREE: QUADTREE_DEVISION_COUNT,\n OCTREE: OCTREE_DEVISION_COUNT\n};\n\n/**\n * Recursively parse implicit tiles tree\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling\n * TODO Check out do we able to use Tile3D class as return type here.\n * @param subtree\n * @param lodMetricValue\n * @param options\n * @param parentData\n * @param childIndex\n * @param level\n * @param globalData\n */\n// eslint-disable-next-line max-statements\nexport async function parseImplicitTiles(params: {\n subtree: Subtree;\n options: any;\n parentData?: {mortonIndex: number; x: number; y: number; z: number};\n childIndex?: number;\n level?: number;\n globalData?: {level: number; mortonIndex: number; x: number; y: number; z: number};\n}) {\n const {\n options,\n parentData = {\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n },\n childIndex = 0,\n globalData = {\n level: 0,\n mortonIndex: 0,\n x: 0,\n y: 0,\n z: 0\n }\n } = params;\n let {subtree, level = 0} = params;\n const {\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n contentUrlTemplate,\n subtreesUriTemplate,\n basePath\n } = options;\n\n const tile = {children: [], lodMetricValue: 0, contentUrl: ''};\n\n const childrenPerTile = SUBDIVISION_COUNT_MAP[subdivisionScheme];\n\n const childX = childIndex & 0b01;\n const childY = (childIndex >> 1) & 0b01;\n const childZ = (childIndex >> 2) & 0b01;\n\n const levelOffset = (childrenPerTile ** level - 1) / (childrenPerTile - 1);\n let childTileMortonIndex = concatBits(parentData.mortonIndex, childIndex);\n let tileAvailabilityIndex = levelOffset + childTileMortonIndex;\n\n // Local tile coordinates\n let childTileX = concatBits(parentData.x, childX);\n let childTileY = concatBits(parentData.y, childY);\n let childTileZ = concatBits(parentData.z, childZ);\n\n // TODO Remove after real implicit tileset will be tested.\n // Degug data\n // tile.level = level + globalData.level;\n // tile.x = concatBits(globalData.x, childTileX);\n // tile.y = concatBits(globalData.y, childTileY);\n // tile.z = concatBits(globalData.z, childTileZ);\n // tile.mortonIndex = childTileMortonIndex;\n // End of debug data\n\n let isChildSubtreeAvailable = false;\n\n if (level + 1 > subtreeLevels) {\n isChildSubtreeAvailable = getAvailabilityResult(\n subtree.childSubtreeAvailability,\n childTileMortonIndex\n );\n }\n\n const x = concatBits(globalData.x, childTileX);\n const y = concatBits(globalData.y, childTileY);\n const z = concatBits(globalData.z, childTileZ);\n const lev = level + globalData.level;\n\n if (isChildSubtreeAvailable) {\n const subtreePath = `${basePath}/${subtreesUriTemplate}`;\n const childSubtreeUrl = replaceContentUrlTemplate(subtreePath, lev, x, y, z);\n const childSubtree = await load(childSubtreeUrl, Tile3DSubtreeLoader);\n\n subtree = childSubtree;\n\n globalData.mortonIndex = childTileMortonIndex;\n globalData.x = childTileX;\n globalData.y = childTileY;\n globalData.z = childTileZ;\n globalData.level = level;\n\n childTileMortonIndex = 0;\n tileAvailabilityIndex = 0;\n childTileX = 0;\n childTileY = 0;\n childTileZ = 0;\n level = 0;\n }\n\n const isTileAvailable = getAvailabilityResult(subtree.tileAvailability, tileAvailabilityIndex);\n\n if (!isTileAvailable || level > maximumLevel) {\n return tile;\n }\n\n const isContentAvailable = getAvailabilityResult(\n subtree.contentAvailability,\n tileAvailabilityIndex\n );\n\n if (isContentAvailable) {\n tile.contentUrl = replaceContentUrlTemplate(contentUrlTemplate, lev, x, y, z);\n }\n\n const childTileLevel = level + 1;\n const pData = {mortonIndex: childTileMortonIndex, x: childTileX, y: childTileY, z: childTileZ};\n\n for (let index = 0; index < childrenPerTile; index++) {\n const currentTile = await parseImplicitTiles({\n subtree,\n options,\n parentData: pData,\n childIndex: index,\n level: childTileLevel,\n globalData\n });\n\n if (currentTile.contentUrl || currentTile.children.length) {\n const globalLevel = lev + 1;\n const childCoordinates = {childTileX, childTileY, childTileZ};\n const formattedTile = formatTileData(currentTile, globalLevel, childCoordinates, options);\n // @ts-ignore\n tile.children.push(formattedTile);\n }\n }\n\n return tile;\n}\n\nfunction getAvailabilityResult(availabilityData: Availability, index: number): boolean {\n if ('constant' in availabilityData) {\n return Boolean(availabilityData.constant);\n }\n\n if (availabilityData.explicitBitstream) {\n return getBooleanValueFromBitstream(index, availabilityData.explicitBitstream);\n }\n\n return false;\n}\n\n/**\n * Do formatting of implicit tile data.\n * TODO Check out do we able to use Tile3D class as type here.\n * @param tile\n * @param lodMetricValue\n * @param options\n * @returns\n */\nfunction formatTileData(\n tile,\n level: number,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number},\n options: any\n) {\n const {\n basePath,\n refine,\n getRefine,\n lodMetricType,\n getTileType,\n rootLodMetricValue,\n rootBoundingVolume\n } = options;\n const uri = tile.contentUrl && tile.contentUrl.replace(`${basePath}/`, '');\n const lodMetricValue = rootLodMetricValue / 2 ** level;\n const boundingVolume = calculateBoundingVolumeForChildTile(\n level,\n rootBoundingVolume,\n childCoordinates\n );\n\n return {\n children: tile.children,\n contentUrl: tile.contentUrl,\n content: {uri},\n id: tile.contentUrl,\n refine: getRefine(refine),\n type: getTileType(tile),\n lodMetricType,\n lodMetricValue,\n boundingVolume\n // Temp debug values. Remove when real implicit tileset will be tested.\n // x: tile.x,\n // y: tile.y,\n // z: tile.z,\n // level: tile.level\n };\n}\n\n/**\n * Calculate child bounding volume.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_implicit_tiling#subdivision-rules\n * @param level\n * @param rootBoundingVolume\n * @param childCoordinates\n */\nfunction calculateBoundingVolumeForChildTile(\n level: number,\n rootBoundingVolume: BoundingVolume,\n childCoordinates: {childTileX: number; childTileY: number; childTileZ: number}\n): BoundingVolume | null {\n if (rootBoundingVolume.region) {\n const {childTileX, childTileY, childTileZ} = childCoordinates;\n const [west, south, east, north, minimumHeight, maximumHeight] = rootBoundingVolume.region;\n const boundingVolumesCount = 2 ** level;\n\n const sizeX = (east - west) / boundingVolumesCount;\n const sizeY = (north - south) / boundingVolumesCount;\n const sizeZ = (maximumHeight - minimumHeight) / boundingVolumesCount;\n\n const [childWest, childEast] = [west + sizeX * childTileX, west + sizeX * (childTileX + 1)];\n const [childSouth, childNorth] = [south + sizeY * childTileY, south + sizeY * (childTileY + 1)];\n const [childMinimumHeight, childMaximumHeight] = [\n minimumHeight + sizeZ * childTileZ,\n minimumHeight + sizeZ * (childTileZ + 1)\n ];\n\n return {\n region: [childWest, childSouth, childEast, childNorth, childMinimumHeight, childMaximumHeight]\n };\n }\n\n // eslint-disable-next-line no-console\n console.warn('Unsupported bounding volume type: ', rootBoundingVolume);\n return null;\n}\n\n/**\n * Do binary concatenation\n * @param first\n * @param second\n */\nfunction concatBits(first: number, second: number): number {\n return parseInt(first.toString(2) + second.toString(2), 2);\n}\n\n/**\n * Replace implicit tile content url with real coordinates.\n * @param templateUrl\n * @param level\n * @param x\n * @param y\n * @param z\n */\nexport function replaceContentUrlTemplate(\n templateUrl: string,\n level: number,\n x: number,\n y: number,\n z: number\n): string {\n const mapUrl = generateMapUrl({level, x, y, z});\n return templateUrl.replace(/{level}|{x}|{y}|{z}/gi, (matched) => mapUrl[matched]);\n}\n\n/**\n * Get Map object for content url generation\n * @param items\n */\nfunction generateMapUrl(items: {[key: string]: number}): {[key: string]: string} {\n const mapUrl = {};\n\n for (const key in items) {\n mapUrl[`{${key}}`] = items[key];\n }\n return mapUrl;\n}\n\n/**\n * Get boolean value from bistream by index\n * A boolean value is encoded as a single bit, either 0 (false) or 1 (true).\n * Multiple boolean values are packed tightly in the same buffer.\n * These buffers of tightly-packed bits are sometimes referred to as bitstreams.\n * Spec - https://github.com/CesiumGS/3d-tiles/tree/implicit-revisions/specification/Metadata#booleans\n * @param availabilitiIndex\n */\nfunction getBooleanValueFromBitstream(\n availabilityIndex: number,\n availabilityBuffer: Uint8Array\n): boolean {\n const byteIndex = Math.floor(availabilityIndex / 8);\n const bitIndex = availabilityIndex % 8;\n const bitValue = (availabilityBuffer[byteIndex] >> bitIndex) & 1;\n\n return bitValue === 1;\n}\n","import {Tile3DSubtreeLoader} from '../../tile-3d-subtree-loader';\nimport {load} from '@loaders.gl/core';\nimport {Tileset3D, LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_TYPE} from '@loaders.gl/tiles';\nimport {Subtree} from '../../types';\nimport {parseImplicitTiles, replaceContentUrlTemplate} from './helpers/parse-3d-implicit-tiles';\n\nfunction getTileType(tile) {\n if (!tile.contentUrl) {\n return TILE_TYPE.EMPTY;\n }\n\n const contentUrl = tile.contentUrl;\n const fileExtension = contentUrl.split('.').pop();\n switch (fileExtension) {\n case 'pnts':\n return TILE_TYPE.POINTCLOUD;\n case 'i3dm':\n case 'b3dm':\n case 'glb':\n case 'gltf':\n return TILE_TYPE.SCENEGRAPH;\n default:\n return fileExtension;\n }\n}\n\nfunction getRefine(refine) {\n switch (refine) {\n case 'REPLACE':\n case 'replace':\n return TILE_REFINEMENT.REPLACE;\n case 'ADD':\n case 'add':\n return TILE_REFINEMENT.ADD;\n default:\n return refine;\n }\n}\n\nfunction resolveUri(uri, basePath) {\n // url scheme per RFC3986\n const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;\n\n if (urlSchemeRegex.test(basePath)) {\n const url = new URL(uri, `${basePath}/`);\n return decodeURI(url.toString());\n } else if (uri.startsWith('/')) {\n return uri;\n }\n\n return `${basePath}/${uri}`;\n}\n\nexport function normalizeTileData(tile, options) {\n if (!tile) {\n return null;\n }\n if (tile.content) {\n const contentUri = tile.content.uri || tile.content.url;\n tile.contentUrl = resolveUri(contentUri, options.basePath);\n }\n tile.id = tile.contentUrl;\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n tile.type = getTileType(tile);\n tile.refine = getRefine(tile.refine);\n\n return tile;\n}\n\n// normalize tile headers\nexport function normalizeTileHeaders(tileset) {\n const basePath = tileset.basePath;\n const root = normalizeTileData(tileset.root, tileset);\n\n const stack: any[] = [];\n stack.push(root);\n\n while (stack.length > 0) {\n const tile = stack.pop() || {};\n const children = tile.children || [];\n for (const childHeader of children) {\n normalizeTileData(childHeader, {basePath});\n stack.push(childHeader);\n }\n }\n\n return root;\n}\n\n/**\n * Do normalisation of implicit tile headers\n * TODO Check if Tile3D class can be a return type here.\n * @param tileset\n */\nexport async function normalizeImplicitTileHeaders(tileset: Tileset3D) {\n if (!tileset.root) {\n return null;\n }\n\n const basePath = tileset.basePath;\n const implicitTilingExtension = tileset.root.extensions['3DTILES_implicit_tiling'];\n const {\n subdivisionScheme,\n maximumLevel,\n subtreeLevels,\n subtrees: {uri: subtreesUriTemplate}\n } = implicitTilingExtension;\n const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);\n const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);\n const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);\n const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);\n const refine = tileset.root.refine;\n // @ts-ignore\n const rootLodMetricValue = tileset.root.geometricError;\n const rootBoundingVolume = tileset.root.boundingVolume;\n\n const options = {\n contentUrlTemplate,\n subtreesUriTemplate,\n subdivisionScheme,\n subtreeLevels,\n maximumLevel,\n refine,\n basePath,\n lodMetricType: LOD_METRIC_TYPE.GEOMETRIC_ERROR,\n rootLodMetricValue,\n rootBoundingVolume,\n getTileType,\n getRefine\n };\n\n return await normalizeImplicitTileData(tileset.root, rootSubtree, options);\n}\n\n/**\n * Do implicit data normalisation to create hierarchical tile structure\n * @param tile\n * @param rootSubtree\n * @param options\n * @returns\n */\nexport async function normalizeImplicitTileData(tile, rootSubtree: Subtree, options: any) {\n if (!tile) {\n return null;\n }\n\n tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tile.lodMetricValue = tile.geometricError;\n tile.transformMatrix = tile.transform;\n\n const {children, contentUrl} = await parseImplicitTiles({subtree: rootSubtree, options});\n\n if (contentUrl) {\n tile.contentUrl = contentUrl;\n tile.content = {uri: contentUrl.replace(`${options.basePath}/`, '')};\n }\n\n tile.refine = getRefine(tile.refine);\n tile.type = getTileType(tile);\n tile.children = children;\n tile.id = tile.contentUrl;\n\n return tile;\n}\n","import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {path} from '@loaders.gl/loader-utils';\nimport {TILESET_TYPE, LOD_METRIC_TYPE} from '@loaders.gl/tiles';\nimport {VERSION} from './lib/utils/version';\nimport {parse3DTile} from './lib/parsers/parse-3d-tile';\nimport {\n normalizeTileHeaders,\n normalizeImplicitTileHeaders\n} from './lib/parsers/parse-3d-tile-header';\n\nconst IMPLICIT_TILING_EXTENSION_NAME = '3DTILES_implicit_tiling';\n\n/**\n * Loader for 3D Tiles\n */\nexport const Tiles3DLoader: LoaderWithParser = {\n id: '3d-tiles',\n name: '3D Tiles',\n module: '3d-tiles',\n version: VERSION,\n extensions: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n mimeTypes: ['application/octet-stream'],\n tests: ['cmpt', 'pnts', 'b3dm', 'i3dm'],\n parse,\n options: {\n '3d-tiles': {\n loadGLTF: true,\n decodeQuantizedPositions: false,\n isTileset: 'auto',\n assetGltfUpAxis: null\n }\n }\n};\n\nfunction getBaseUri(tileset) {\n return path.dirname(tileset.url);\n}\n\nasync function parseTile(arrayBuffer, options, context) {\n const tile = {\n content: {\n featureIds: null\n }\n };\n const byteOffset = 0;\n await parse3DTile(arrayBuffer, byteOffset, options, context, tile.content);\n return tile.content;\n}\n\nasync function parseTileset(data, options, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n // eslint-disable-next-line no-use-before-define\n tilesetJson.loader = options.loader || Tiles3DLoader;\n tilesetJson.url = context.url;\n // base path that non-absolute paths in tileset are relative to.\n tilesetJson.basePath = getBaseUri(tilesetJson);\n tilesetJson.root = hasImplicitTilingExtension(tilesetJson)\n ? await normalizeImplicitTileHeaders(tilesetJson)\n : normalizeTileHeaders(tilesetJson);\n\n tilesetJson.type = TILESET_TYPE.TILES3D;\n\n tilesetJson.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;\n tilesetJson.lodMetricValue = tilesetJson.root?.lodMetricValue || 0;\n\n return tilesetJson;\n}\n\nasync function parse(data, options, context) {\n // auto detect file type\n const loaderOptions = options['3d-tiles'] || {};\n let isTileset;\n if (loaderOptions.isTileset === 'auto') {\n isTileset = context.url && context.url.indexOf('.json') !== -1;\n } else {\n isTileset = loaderOptions.isTileset;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else {\n data = await parseTile(data, options, context);\n }\n\n return data;\n}\n\nfunction hasImplicitTilingExtension(tilesetJson) {\n return (\n tilesetJson?.extensionsRequired?.includes(IMPLICIT_TILING_EXTENSION_NAME) &&\n tilesetJson?.extensionsUsed?.includes(IMPLICIT_TILING_EXTENSION_NAME)\n );\n}\n","import GL from '@luma.gl/constants';\nimport {Geometry} from '@luma.gl/core';\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 = {\n getPointColor: {type: 'accessor', value: [0, 0, 0, 255]},\n pointSize: 1.0,\n\n // @ts-expect-error Disable async data loading (handling it in _loadTileSet)\n data: null,\n loader: Tiles3DLoader,\n\n onTilesetLoad: {type: 'function', value: tileset3d => {}, compare: false},\n onTileLoad: {type: 'function', value: tileHeader => {}, compare: false},\n onTileUnload: {type: 'function', value: tileHeader => {}, compare: false},\n onTileError: {type: 'function', value: (tile, message, url) => {}, compare: false},\n _getMeshColor: {type: 'function', value: tileHeader => [255, 255, 255], compare: false}\n};\n\n/** All properties supported by Tile3DLayer */\nexport type Tile3DLayerProps = _Tile3DLayerProps & CompositeLayerProps;\n\n/** Props added by the Tile3DLayer */\ntype _Tile3DLayerProps = {\n /** Color Accessor for point clouds. **/\n getPointColor?: Accessor;\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 extends CompositeLayer<\n ExtraPropsT & Required<_Tile3DLayerProps>\n> {\n static defaultProps = defaultProps as any;\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 const {tileset3d} = this.state;\n return tileset3d !== null && tileset3d.isLoaded();\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters): void {\n if (props.data && props.data !== oldProps.data) {\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 {layerMap} = this.state;\n const layerId = sourceLayer && sourceLayer.id;\n if (layerId) {\n // layerId: this.id-[scenegraph|pointcloud]-tileId\n const substr = layerId.substring(this.id.length + 1);\n const tileId = substr.substring(substr.indexOf('-') + 1);\n info.object = layerMap[tileId] && layerMap[tileId].tile;\n }\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 if (info.sourceLayer) {\n info.sourceLayer.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 let loader = this.props.loader || this.props.loaders;\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const options = {loadOptions: {...loadOptions}};\n if (loader.preload) {\n const preloadOptions = await loader.preload(tilesetUrl, loadOptions);\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(tilesetUrl, 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 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 | PointCloudLayer | ScenegraphLayer | null {\n if (!tileHeader.content) {\n return null;\n }\n\n switch (tileHeader.type) {\n case TILE_TYPE.POINTCLOUD:\n return this._makePointCloudLayer(tileHeader, oldLayer as PointCloudLayer);\n case TILE_TYPE.SCENEGRAPH:\n return this._make3DModelLayer(tileHeader);\n case TILE_TYPE.MESH:\n return this._makeSimpleMeshLayer(tileHeader, oldLayer as MeshLayer);\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\n ): PointCloudLayer | 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 {\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): MeshLayer {\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 drawMode: GL.TRIANGLES,\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","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","import type {Loader} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\n\n/**\n * Worker loader for color-encoded images\n */\nexport const TerrainLoader = {\n name: 'Terrain',\n id: 'terrain',\n module: 'terrain',\n version: VERSION,\n worker: true,\n extensions: ['png', 'pngraw', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'],\n mimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp'],\n options: {\n terrain: {\n tesselator: 'auto',\n bounds: null,\n meshMaxError: 10,\n elevationDecoder: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n },\n skirtHeight: null\n }\n }\n};\n\n/**\n * Loader for color-encoded images\n */\nexport const _typecheckTerrainWorkerLoader: Loader = TerrainLoader;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n Texture,\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 Tile2DHeader from '../tile-layer/tile-2d-header';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tile-layer/types';\nimport {urlType, getURLFromTemplate} from '../tile-layer/utils';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps = {\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: {type: 'string', value: null},\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\ntype URLTemplate = string | string[];\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate | null): 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, Texture | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps &\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 | null;\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/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required>>\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): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData &&\n (Array.isArray(elevationData) ||\n (elevationData.includes('{x}') && elevationData.includes('{y}')));\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 | 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 {\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;\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 & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader;\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[]): 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(\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 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","/* eslint-disable indent */\nimport {earcut} from '@math.gl/polygon';\nimport type {\n BinaryAttribute,\n BinaryFeatures,\n FlatFeature,\n FlatPoint,\n FlatLineString,\n FlatPolygon,\n GeojsonGeometryInfo,\n TypedArray\n} from '@loaders.gl/schema';\nimport {PropArrayConstructor, Lines, Points, Polygons} from './flat-geojson-to-binary-types';\n\n/**\n * Convert binary features to flat binary arrays. Similar to\n * `geojsonToBinary` helper function, except that it expects\n * a binary representation of the feature data, which enables\n * 2X-3X speed increase in parse speed, compared to using\n * geoJSON. See `binary-vector-tile/VectorTileFeature` for\n * data format detais\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns filled arrays\n */\nexport function flatGeojsonToBinary(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo,\n options?: FlatGeojsonToBinaryOptions\n) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(\n features,\n {\n propArrayTypes,\n ...geometryInfo\n },\n {\n numericPropKeys: (options && options.numericPropKeys) || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array\n }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n};\n\nexport const TEST_EXPORTS = {\n extractNumericPropTypes\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nfunction extractNumericPropTypes(features: FlatFeature[]): {\n [key: string]: PropArrayConstructor;\n} {\n const propArrayTypes = {};\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return propArrayTypes;\n}\n\n/**\n * Fills coordinates into pre-allocated typed arrays\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity\nfunction fillArrays(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo & {\n propArrayTypes: {[key: string]: PropArrayConstructor};\n },\n options: FlatGeojsonToBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n propArrayTypes,\n coordLength\n } = geometryInfo;\n const {numericPropKeys = [], PositionDataType = Float32Array} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: Points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines: Lines = {\n type: 'LineString',\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons: Polygons = {\n type: 'Polygon',\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n triangles: [],\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength) as TypedArray;\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n points.fields.push({id: feature.id});\n }\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n lines.fields.push({id: feature.id});\n }\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n polygons.fields.push({id: feature.id});\n }\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/**\n * Fills (Multi)Point coordinates into points object of arrays\n *\n * @param geometry\n * @param points\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePoint(\n geometry: FlatPoint,\n points: Points,\n indexMap: {\n pointPosition: number;\n pointFeature: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n points.featureIds.fill(\n indexMap.pointFeature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n\n indexMap.pointPosition += nPositions;\n}\n\n/**\n * Fills (Multi)LineString coordinates into lines object of arrays\n *\n * @param geometry\n * @param lines\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handleLineString(\n geometry: FlatLineString,\n lines: Lines,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition: number;\n linePath: number;\n lineFeature: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n lines.featureIds.fill(\n indexMap.lineFeature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n // Extract range of data we are working with, defined by start\n // and end indices (these index into the geometry.data array)\n const start = geometry.indices[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.indices[i + 1]; // start index for next line\n\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n\n/**\n * Fills (Multi)Polygon coordinates into polygons object of arrays\n *\n * @param geometry\n * @param polygons\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePolygon(\n geometry: FlatPolygon,\n polygons: Polygons,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition: number;\n polygonObject: number;\n polygonRing: number;\n polygonFeature: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n polygons.featureIds.fill(\n indexMap.polygonFeature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n\n // Unlike Point & LineString geometry.indices is a 2D array\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextIndices === undefined\n ? geometry.data.length // end of data (no next indices)\n : nextIndices[0] // start of first line in nextIndices\n : indices[i + 1]; // start index for next line\n\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param indices\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: Polygons,\n areas: number[],\n indices: number[],\n {\n startPosition,\n endPosition,\n coordLength\n }: {startPosition: number; endPosition: number; coordLength: number}\n): void {\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.subarray(start, end);\n\n // Holes are referenced relative to outer polygon\n const offset = indices[0];\n const holes = indices.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n\n/**\n * Wraps an object containing array into accessors\n *\n * @param obj\n * @param size\n */\nfunction wrapProps(\n obj: {[key: string]: TypedArray},\n size: number\n): {[key: string]: BinaryAttribute} {\n const returnObj = {};\n for (const key in obj) {\n returnObj[key] = {value: obj[key], size};\n }\n return returnObj;\n}\n\n/**\n * Wrap each array in an accessor object with value and size keys\n *\n * @param points\n * @param lines\n * @param polygons\n * @param coordLength\n * @returns object\n */\nfunction makeAccessorObjects(\n points: Points,\n lines: Lines,\n polygons: Polygons,\n coordLength: number\n): BinaryFeatures {\n return {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: {\n ...lines,\n positions: {value: lines.positions, size: coordLength},\n pathIndices: {value: lines.pathIndices, size: 1},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: {\n ...polygons,\n positions: {value: polygons.positions, size: coordLength},\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n triangles: {value: new Uint32Array(polygons.triangles), size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n }\n };\n}\n\n/**\n * Add numeric properties to object\n *\n * @param object\n * @param properties\n * @param index\n * @param length\n */\nfunction fillNumericProperties(\n object: Points | Lines | Polygons,\n properties: {[x: string]: string | number | boolean | null},\n index: number,\n length: number\n): void {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName] as number;\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n\n/**\n * Keep string properties in object\n *\n * @param properties\n * @param numericKeys\n * @returns object\n */\nfunction keepStringProperties(\n properties: {[x: string]: string | number | boolean | null},\n numericKeys: string[]\n) {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/**\n *\n * Deduce correct array constructor to use for a given value\n *\n * @param x value to test\n * @param constructor previous constructor deduced\n * @returns PropArrayConstructor\n */\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n","import Protobuf from 'pbf';\nimport {MVTMapboxGeometry} from '../lib/types';\nimport VectorTileFeature from '../lib/mapbox-vector-tile/vector-tile-feature';\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n * @param rings\n * @returns polygons\n */\nexport function classifyRings(rings: MVTMapboxGeometry) {\n const len = rings.length;\n\n if (len <= 1) return [rings];\n\n const polygons: number[][][] = [];\n let polygon: number[][] | undefined;\n let ccw: boolean | undefined;\n\n for (let i = 0; i < len; i++) {\n const area = signedArea(rings[i]);\n if (area === 0) continue; // eslint-disable-line no-continue\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) polygons.push(polygon);\n polygon = [rings[i]];\n } else if (polygon) polygon.push(rings[i]);\n }\n if (polygon) polygons.push(polygon);\n\n return polygons;\n}\n\n/**\n *\n * @param ring\n * @returns sum\n */\nexport function signedArea(ring: number[][]) {\n let sum = 0;\n for (let i = 0, j = ring.length - 1, p1: number[], p2: number[]; i < ring.length; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);\n }\n return sum;\n}\n\n/**\n *\n * @param tag\n * @param feature\n * @param pbf\n */\nexport function readFeature(tag: number, feature?: VectorTileFeature, pbf?: Protobuf): void {\n if (feature && pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n }\n}\n\n/**\n *\n * @param pbf\n * @param feature\n */\nexport function readTag(pbf: Protobuf, feature: VectorTileFeature): void {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n","// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\nimport Protobuf from 'pbf';\nimport {MVTMapboxCoordinates, MVTMapboxGeometry} from '../types';\nimport {readFeature, classifyRings} from '../../helpers/mapbox-util-functions';\n\nexport default class VectorTileFeature {\n properties: {[x: string]: string | number | boolean | null};\n extent: any;\n type: number;\n id: number | null;\n _pbf: Protobuf;\n _geometry: number;\n _keys: string[];\n _values: (string | number | boolean | null)[];\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(\n pbf: Protobuf,\n end: number,\n extent: any,\n keys: string[],\n values: (string | number | boolean | null)[]\n ) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry(): MVTMapboxGeometry {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n const lines: number[][][] = [];\n let line: number[][] | undefined;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // moveTo\n if (line) lines.push(line);\n line = [];\n }\n if (line) line.push([x, y]);\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (line) {\n line.push(line[0].slice()); // closePolygon\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n if (line) lines.push(line);\n\n return lines;\n }\n\n // eslint-disable-next-line max-statements\n bbox() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n let x1 = Infinity;\n let x2 = -Infinity;\n let y1 = Infinity;\n let y2 = -Infinity;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n if (x < x1) x1 = x;\n if (x > x2) x2 = x;\n if (y < y1) y1 = y;\n if (y > y2) y2 = y;\n } else if (cmd !== 7) {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n _toGeoJSON(transform) {\n let coords = this.loadGeometry();\n let type = VectorTileFeature.types[this.type];\n let i: number;\n let j: number;\n\n // eslint-disable-next-line default-case\n switch (this.type) {\n case 1:\n const points: number[] = [];\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n coords = points;\n transform(coords, this);\n break;\n\n case 2:\n for (i = 0; i < coords.length; i++) {\n transform(coords[i], this);\n }\n break;\n\n case 3:\n coords = classifyRings(coords);\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n transform(coords[i][j], this);\n }\n }\n break;\n }\n\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = `Multi${type}`;\n }\n\n const result: MVTMapboxCoordinates = {\n type: 'Feature',\n geometry: {\n type,\n coordinates: coords\n },\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toGeoJSON(\n options: {x: number; y: number; z: number} | ((data: number[], feature: {extent: any}) => void)\n ): MVTMapboxCoordinates {\n if (typeof options === 'function') {\n return this._toGeoJSON(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(line: number[]) {\n for (let j = 0; j < line.length; j++) {\n const p = line[j];\n p[0] = ((p[0] + x0) * 360) / size - 180;\n const y2 = 180 - ((p[1] + y0) * 360) / size;\n p[1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n }\n return this._toGeoJSON(project);\n }\n}\n","/* eslint-disable indent */\n// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n\nimport Protobuf from 'pbf';\nimport VectorTileFeature from './vector-tile-feature';\n\nexport default class VectorTileLayer {\n version: number;\n name: string;\n extent: number;\n length: number;\n _pbf: Protobuf;\n _keys: string[];\n _values: (string | number | boolean | null)[];\n _features: number[];\n constructor(pbf: Protobuf, end: number) {\n // Public\n this.version = 1;\n this.name = '';\n this.extent = 4096;\n this.length = 0;\n\n // Private\n this._pbf = pbf;\n this._keys = [];\n this._values = [];\n this._features = [];\n\n pbf.readFields(readLayer, this, end);\n\n this.length = this._features.length;\n }\n\n /**\n * return feature `i` from this layer as a `VectorTileFeature`\n * @param index\n * @returns feature\n */\n\n feature(i: number): VectorTileFeature {\n if (i < 0 || i >= this._features.length) {\n throw new Error('feature index out of bounds');\n }\n\n this._pbf.pos = this._features[i];\n\n const end = this._pbf.readVarint() + this._pbf.pos;\n return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n }\n}\n\n/**\n *\n * @param tag\n * @param layer\n * @param pbf\n */\nfunction readLayer(tag: number, layer?: VectorTileLayer, pbf?: Protobuf): void {\n if (layer && pbf) {\n if (tag === 15) layer.version = pbf.readVarint();\n else if (tag === 1) layer.name = pbf.readString();\n else if (tag === 5) layer.extent = pbf.readVarint();\n else if (tag === 2) layer._features.push(pbf.pos);\n else if (tag === 3) layer._keys.push(pbf.readString());\n else if (tag === 4) layer._values.push(readValueMessage(pbf));\n }\n}\n\n/**\n *\n * @param pbf\n * @returns value\n */\nfunction readValueMessage(pbf: Protobuf) {\n let value: string | number | boolean | null = null;\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const tag = pbf.readVarint() >> 3;\n\n value =\n tag === 1\n ? pbf.readString()\n : tag === 2\n ? pbf.readFloat()\n : tag === 3\n ? pbf.readDouble()\n : tag === 4\n ? pbf.readVarint64()\n : tag === 5\n ? pbf.readVarint()\n : tag === 6\n ? pbf.readSVarint()\n : tag === 7\n ? pbf.readBoolean()\n : null;\n }\n\n return value;\n}\n","// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n\nimport VectorTileLayer from './vector-tile-layer';\nimport Protobuf from 'pbf';\n\nexport default class VectorTile {\n layers: {[x: string]: VectorTileLayer};\n constructor(pbf: Protobuf, end?: number) {\n this.layers = pbf.readFields(readTile, {}, end);\n }\n}\n\n/**\n *\n * @param tag\n * @param layers\n * @param pbf\n */\nfunction readTile(tag: number, layers?: {[x: string]: VectorTileLayer}, pbf?: Protobuf): void {\n if (tag === 3) {\n if (pbf) {\n const layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n if (layer.length && layers) {\n layers[layer.name] = layer;\n }\n }\n }\n}\n","import Protobuf from 'pbf';\nimport {getPolygonSignedArea} from '@math.gl/polygon';\nimport {FlatIndexedGeometry, FlatPolygon} from '@loaders.gl/schema';\nimport VectorTileFeature from '../lib/binary-vector-tile/vector-tile-feature';\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n * The function also detects holes which have zero area and\n * removes them. In doing so it modifies the input\n * `geom.data` array to remove the unneeded data\n *\n * @param geometry\n * @returns object\n */\n// eslint-disable-next-line max-statements\nexport function classifyRings(geom: FlatIndexedGeometry): FlatPolygon {\n const len = geom.indices.length;\n const type = 'Polygon';\n\n if (len <= 1) {\n return {\n type,\n data: geom.data,\n areas: [[getPolygonSignedArea(geom.data)]],\n indices: [geom.indices]\n };\n }\n\n const areas: any[] = [];\n const polygons: any[] = [];\n let ringAreas: number[] = [];\n let polygon: number[] = [];\n let ccw: boolean | undefined;\n let offset = 0;\n\n for (let endIndex: number, i = 0, startIndex: number; i < len; i++) {\n startIndex = geom.indices[i] - offset;\n\n endIndex = geom.indices[i + 1] - offset || geom.data.length;\n const shape = geom.data.slice(startIndex, endIndex);\n const area = getPolygonSignedArea(shape);\n\n if (area === 0) {\n // This polygon has no area, so remove it from the shape\n // Remove the section from the data array\n const before = geom.data.slice(0, startIndex);\n const after = geom.data.slice(endIndex);\n geom.data = before.concat(after);\n\n // Need to offset any remaining indices as we have\n // modified the data buffer\n offset += endIndex - startIndex;\n\n // Do not add this index to the output and process next shape\n continue; // eslint-disable-line no-continue\n }\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon.length) {\n areas.push(ringAreas);\n polygons.push(polygon);\n }\n polygon = [startIndex];\n ringAreas = [area];\n } else {\n ringAreas.push(area);\n polygon.push(startIndex);\n }\n }\n if (ringAreas) areas.push(ringAreas);\n if (polygon.length) polygons.push(polygon);\n\n return {type, areas, indices: polygons, data: geom.data};\n}\n\n/**\n *\n * @param data\n * @param x0\n * @param y0\n * @param size\n */\nexport function project(data: number[], x0: number, y0: number, size: number): void {\n for (let j = 0, jl = data.length; j < jl; j += 2) {\n data[j] = ((data[j] + x0) * 360) / size - 180;\n const y2 = 180 - ((data[j + 1] + y0) * 360) / size;\n data[j + 1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n}\n\n/**\n * All code below is unchanged from the original Mapbox implemenation\n *\n * @param tag\n * @param feature\n * @param pbf\n */\nexport function readFeature(tag: number, feature?: VectorTileFeature, pbf?: Protobuf): void {\n if (feature && pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n }\n}\n\n/**\n * @param pbf\n * @param feature\n */\nexport function readTag(pbf: Protobuf, feature: VectorTileFeature): void {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n","// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n\nimport Protobuf from 'pbf';\nimport {FlatFeature, FlatIndexedGeometry, GeojsonGeometryInfo} from '@loaders.gl/schema';\nimport {classifyRings, project, readFeature} from '../../helpers/binary-util-functions';\n\n// Reduce GC by reusing variables\nlet endPos: number;\nlet cmd: number;\nlet cmdLen: number;\nlet length: number;\nlet x: number;\nlet y: number;\nlet i: number;\n\nexport const TEST_EXPORTS = {\n classifyRings\n};\n\nexport default class VectorTileFeature {\n properties: {[x: string]: string | number | boolean | null};\n extent: any;\n type: number;\n id: number | null;\n _pbf: Protobuf;\n _geometry: number;\n _keys: string[];\n _values: (string | number | boolean | null)[];\n _geometryInfo: GeojsonGeometryInfo;\n\n // eslint-disable-next-line max-params\n constructor(\n pbf: Protobuf,\n end: number,\n extent: any,\n keys: string[],\n values: (string | number | boolean | null)[],\n geometryInfo: GeojsonGeometryInfo\n ) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n this._geometryInfo = geometryInfo;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry(): FlatIndexedGeometry {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n endPos = pbf.readVarint() + pbf.pos;\n cmd = 1;\n length = 0;\n x = 0;\n y = 0;\n i = 0;\n\n // Note: I attempted to replace the `data` array with a\n // Float32Array, but performance was worse, both using\n // `set()` and direct index access. Also, we cannot\n // know how large the buffer should be, so it would\n // increase memory usage\n const indices: number[] = []; // Indices where geometries start\n const data: number[] = []; // Flat array of coordinate data\n\n while (pbf.pos < endPos) {\n if (length <= 0) {\n cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // New line\n indices.push(i);\n }\n data.push(x, y);\n i += 2;\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (i > 0) {\n const start = indices[indices.length - 1]; // start index of polygon\n data.push(data[start], data[start + 1]); // closePolygon\n i += 2;\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return {data, indices};\n }\n\n /**\n *\n * @param transform\n * @returns result\n */\n _toBinaryCoordinates(transform) {\n // Expands the protobuf data to an intermediate Flat GeoJSON\n // data format, which maps closely to the binary data buffers.\n // It is similar to GeoJSON, but rather than storing the coordinates\n // in multidimensional arrays, we have a 1D `data` with all the\n // coordinates, and then index into this using the `indices`\n // parameter, e.g.\n //\n // geometry: {\n // type: 'Point', data: [1,2], indices: [0]\n // }\n // geometry: {\n // type: 'LineString', data: [1,2,3,4,...], indices: [0]\n // }\n // geometry: {\n // type: 'Polygon', data: [1,2,3,4,...], indices: [[0, 2]]\n // }\n // Thus the indices member lets us look up the relevant range\n // from the data array.\n // The Multi* versions of the above types share the same data\n // structure, just with multiple elements in the indices array\n const geom = this.loadGeometry();\n let geometry;\n\n // Apply the supplied transformation to data\n transform(geom.data, this);\n\n const coordLength = 2;\n\n // eslint-disable-next-line default-case\n switch (this.type) {\n case 1: // Point\n this._geometryInfo.pointFeaturesCount++;\n this._geometryInfo.pointPositionsCount += geom.indices.length;\n geometry = {type: 'Point', ...geom};\n break;\n\n case 2: // LineString\n this._geometryInfo.lineFeaturesCount++;\n this._geometryInfo.linePathsCount += geom.indices.length;\n this._geometryInfo.linePositionsCount += geom.data.length / coordLength;\n geometry = {type: 'LineString', ...geom};\n break;\n\n case 3: // Polygon\n geometry = classifyRings(geom);\n\n // Unlike Point & LineString geom.indices is a 2D array, thanks\n // to the classifyRings method\n this._geometryInfo.polygonFeaturesCount++;\n this._geometryInfo.polygonObjectsCount += geometry.indices.length;\n\n for (const indices of geometry.indices) {\n this._geometryInfo.polygonRingsCount += indices.length;\n }\n this._geometryInfo.polygonPositionsCount += geometry.data.length / coordLength;\n\n break;\n default:\n throw new Error(`Invalid geometry type: ${this.type}`);\n }\n\n const result: FlatFeature = {type: 'Feature', geometry, properties: this.properties};\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toBinaryCoordinates(\n options: {x: number; y: number; z: number} | ((data: number[], feature: {extent: any}) => void)\n ): FlatFeature {\n if (typeof options === 'function') {\n return this._toBinaryCoordinates(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n return this._toBinaryCoordinates((data: number[]) => project(data, x0, y0, size));\n }\n}\n","/* eslint-disable indent */\n// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n\nimport VectorTileFeature from './vector-tile-feature';\nimport Protobuf from 'pbf';\nimport {GeojsonGeometryInfo} from '@loaders.gl/schema';\n\nexport default class VectorTileLayer {\n version: number;\n name: string;\n extent: number;\n length: number;\n _pbf: Protobuf;\n _keys: string[];\n _values: (string | number | boolean | null)[];\n _features: number[];\n constructor(pbf: Protobuf, end: number) {\n // Public\n this.version = 1;\n this.name = '';\n this.extent = 4096;\n this.length = 0;\n\n // Private\n this._pbf = pbf;\n this._keys = [];\n this._values = [];\n this._features = [];\n\n pbf.readFields(readLayer, this, end);\n\n this.length = this._features.length;\n }\n\n /**\n * return feature `i` from this layer as a `VectorTileFeature`\n *\n * @param index\n * @param geometryInfo\n * @returns {VectorTileFeature}\n */\n feature(i: number, geometryInfo: GeojsonGeometryInfo): VectorTileFeature {\n if (i < 0 || i >= this._features.length) {\n throw new Error('feature index out of bounds');\n }\n\n this._pbf.pos = this._features[i];\n\n const end = this._pbf.readVarint() + this._pbf.pos;\n return new VectorTileFeature(\n this._pbf,\n end,\n this.extent,\n this._keys,\n this._values,\n geometryInfo\n );\n }\n}\n\n/**\n *\n * @param tag\n * @param layer\n * @param pbf\n */\nfunction readLayer(tag: number, layer?: VectorTileLayer, pbf?: Protobuf): void {\n if (layer && pbf) {\n if (tag === 15) layer.version = pbf.readVarint();\n else if (tag === 1) layer.name = pbf.readString();\n else if (tag === 5) layer.extent = pbf.readVarint();\n else if (tag === 2) layer._features.push(pbf.pos);\n else if (tag === 3) layer._keys.push(pbf.readString());\n else if (tag === 4) layer._values.push(readValueMessage(pbf));\n }\n}\n\n/**\n *\n * @param pbf\n * @returns value\n */\nfunction readValueMessage(pbf: Protobuf) {\n let value: string | number | boolean | null = null;\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const tag = pbf.readVarint() >> 3;\n\n value =\n tag === 1\n ? pbf.readString()\n : tag === 2\n ? pbf.readFloat()\n : tag === 3\n ? pbf.readDouble()\n : tag === 4\n ? pbf.readVarint64()\n : tag === 5\n ? pbf.readVarint()\n : tag === 6\n ? pbf.readSVarint()\n : tag === 7\n ? pbf.readBoolean()\n : null;\n }\n\n return value;\n}\n","// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n\nimport VectorTileLayer from './vector-tile-layer';\nimport Protobuf from 'pbf';\n\nexport default class VectorTile {\n layers: {[x: string]: VectorTileLayer};\n constructor(pbf: Protobuf, end?: number) {\n this.layers = pbf.readFields(readTile, {}, end);\n }\n}\n\n/**\n *\n * @param tag\n * @param layers\n * @param pbf\n */\nfunction readTile(tag: number, layers?: {[x: string]: VectorTileLayer}, pbf?: Protobuf): void {\n if (tag === 3) {\n if (pbf) {\n const layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n if (layer.length && layers) {\n layers[layer.name] = layer;\n }\n }\n }\n}\n","import {flatGeojsonToBinary} from '@loaders.gl/gis';\nimport type {\n FlatFeature,\n Feature,\n GeojsonGeometryInfo,\n BinaryFeatures,\n GeoJSONRowTable\n} from '@loaders.gl/schema';\nimport Protobuf from 'pbf';\n\nimport type {MVTMapboxCoordinates, MVTOptions, MVTLoaderOptions} from '../lib/types';\n\nimport VectorTile from './mapbox-vector-tile/vector-tile';\nimport BinaryVectorTile from './binary-vector-tile/vector-tile';\nimport VectorTileFeatureBinary from './binary-vector-tile/vector-tile-feature';\nimport VectorTileFeatureMapBox from './mapbox-vector-tile/vector-tile-feature';\n\n/**\n * Parse MVT arrayBuffer and return GeoJSON.\n *\n * @param arrayBuffer A MVT arrayBuffer\n * @param options\n * @returns A GeoJSON geometry object or a binary representation\n */\nexport default function parseMVT(arrayBuffer: ArrayBuffer, options?: MVTLoaderOptions) {\n const mvtOptions = normalizeOptions(options);\n\n const shape = options?.gis?.format || options?.mvt?.shape;\n switch (shape) {\n case 'columnar-table': // binary + some JS arrays\n return {shape: 'columnar-table', data: parseToBinary(arrayBuffer, mvtOptions)};\n case 'geojson-row-table': {\n const table: GeoJSONRowTable = {\n shape: 'geojson-row-table',\n data: parseToGeojson(arrayBuffer, mvtOptions)\n };\n return table;\n }\n case 'geojson':\n return parseToGeojson(arrayBuffer, mvtOptions);\n case 'binary-geometry':\n return parseToBinary(arrayBuffer, mvtOptions);\n case 'binary':\n return parseToBinary(arrayBuffer, mvtOptions);\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseToBinary(arrayBuffer: ArrayBuffer, options: MVTOptions): BinaryFeatures {\n const [flatGeoJsonFeatures, geometryInfo] = parseToFlatGeoJson(arrayBuffer, options);\n\n const binaryData = flatGeojsonToBinary(flatGeoJsonFeatures, geometryInfo);\n // Add the original byteLength (as a reasonable approximation of the size of the binary data)\n // TODO decide where to store extra fields like byteLength (header etc) and document\n // @ts-ignore\n binaryData.byteLength = arrayBuffer.byteLength;\n return binaryData;\n}\n\nfunction parseToFlatGeoJson(\n arrayBuffer: ArrayBuffer,\n options: MVTOptions\n): [FlatFeature[], GeojsonGeometryInfo] {\n const features: FlatFeature[] = [];\n const geometryInfo: GeojsonGeometryInfo = {\n coordLength: 2,\n pointPositionsCount: 0,\n pointFeaturesCount: 0,\n linePositionsCount: 0,\n linePathsCount: 0,\n lineFeaturesCount: 0,\n polygonPositionsCount: 0,\n polygonObjectsCount: 0,\n polygonRingsCount: 0,\n polygonFeaturesCount: 0\n };\n\n if (arrayBuffer.byteLength <= 0) {\n return [features, geometryInfo];\n }\n\n const tile = new BinaryVectorTile(new Protobuf(arrayBuffer));\n\n const selectedLayers =\n options && Array.isArray(options.layers) ? options.layers : Object.keys(tile.layers);\n\n selectedLayers.forEach((layerName: string) => {\n const vectorTileLayer = tile.layers[layerName];\n if (!vectorTileLayer) {\n return;\n }\n\n for (let i = 0; i < vectorTileLayer.length; i++) {\n const vectorTileFeature = vectorTileLayer.feature(i, geometryInfo);\n const decodedFeature = getDecodedFeatureBinary(vectorTileFeature, options, layerName);\n features.push(decodedFeature);\n }\n });\n\n return [features, geometryInfo];\n}\n\nfunction parseToGeojson(arrayBuffer: ArrayBuffer, options: MVTOptions): Feature[] {\n if (arrayBuffer.byteLength <= 0) {\n return [];\n }\n\n const features: MVTMapboxCoordinates[] = [];\n const tile = new VectorTile(new Protobuf(arrayBuffer));\n\n const selectedLayers = Array.isArray(options.layers) ? options.layers : Object.keys(tile.layers);\n\n selectedLayers.forEach((layerName: string) => {\n const vectorTileLayer = tile.layers[layerName];\n if (!vectorTileLayer) {\n return;\n }\n\n for (let i = 0; i < vectorTileLayer.length; i++) {\n const vectorTileFeature = vectorTileLayer.feature(i);\n const decodedFeature = getDecodedFeature(vectorTileFeature, options, layerName);\n features.push(decodedFeature);\n }\n });\n\n return features as Feature[];\n}\n\nfunction normalizeOptions(options?: MVTLoaderOptions): MVTOptions {\n if (!options?.mvt) {\n throw new Error('mvt options required');\n }\n\n // Validate\n const wgs84Coordinates = options.mvt?.coordinates === 'wgs84';\n const {tileIndex} = options.mvt;\n const hasTileIndex =\n tileIndex &&\n Number.isFinite(tileIndex.x) &&\n Number.isFinite(tileIndex.y) &&\n Number.isFinite(tileIndex.z);\n\n if (wgs84Coordinates && !hasTileIndex) {\n throw new Error('MVT Loader: WGS84 coordinates need tileIndex property');\n }\n\n return options.mvt;\n}\n\n/**\n * @param feature\n * @param options\n * @returns decoded feature\n */\nfunction getDecodedFeature(\n feature: VectorTileFeatureMapBox,\n options: MVTOptions,\n layerName: string\n): MVTMapboxCoordinates {\n const decodedFeature = feature.toGeoJSON(\n options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates\n );\n\n // Add layer name to GeoJSON properties\n if (options.layerProperty) {\n decodedFeature.properties[options.layerProperty] = layerName;\n }\n\n return decodedFeature;\n}\n\n/**\n * @param feature\n * @param options\n * @returns decoded binary feature\n */\nfunction getDecodedFeatureBinary(\n feature: VectorTileFeatureBinary,\n options: MVTOptions,\n layerName: string\n): FlatFeature {\n const decodedFeature = feature.toBinaryCoordinates(\n options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary\n );\n\n // Add layer name to GeoJSON properties\n if (options.layerProperty && decodedFeature.properties) {\n decodedFeature.properties[options.layerProperty] = layerName;\n }\n\n return decodedFeature;\n}\n\n/**\n * @param line\n * @param feature\n */\nfunction transformToLocalCoordinates(line: number[], feature: {extent: any}): void {\n // This function transforms local coordinates in a\n // [0 - bufferSize, this.extent + bufferSize] range to a\n // [0 - (bufferSize / this.extent), 1 + (bufferSize / this.extent)] range.\n // The resulting extent would be 1.\n const {extent} = feature;\n for (let i = 0; i < line.length; i++) {\n const p = line[i];\n p[0] /= extent;\n p[1] /= extent;\n }\n}\n\nfunction transformToLocalCoordinatesBinary(data: number[], feature: {extent: any}) {\n // For the binary code path, the feature data is just\n // one big flat array, so we just divide each value\n const {extent} = feature;\n for (let i = 0, il = data.length; i < il; ++i) {\n data[i] /= extent;\n }\n}\n","import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {MVTLoaderOptions} from './lib/types';\nimport parseMVT from './lib/parse-mvt';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst DEFAULT_MVT_LOADER_OPTIONS: MVTLoaderOptions = {\n mvt: {\n shape: 'geojson',\n coordinates: 'local',\n layerProperty: 'layerName',\n layers: undefined,\n tileIndex: null\n }\n};\n\n/**\n * Worker loader for the Mapbox Vector Tile format\n */\nexport const MVTWorkerLoader: Loader = {\n name: 'Mapbox Vector Tile',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n // Note: ArcGIS uses '.pbf' extension and 'application/octet-stream'\n extensions: ['mvt', 'pbf'],\n mimeTypes: [\n 'application/vnd.mapbox-vector-tile',\n 'application/x-protobuf'\n // 'application/octet-stream'\n ],\n worker: true,\n category: 'geometry',\n options: DEFAULT_MVT_LOADER_OPTIONS\n};\n\n/**\n * Loader for the Mapbox Vector Tile format\n */\nexport const MVTLoader: LoaderWithParser = {\n ...MVTWorkerLoader,\n parse: async (arrayBuffer, options?: MVTLoaderOptions) => parseMVT(arrayBuffer, options),\n parseSync: parseMVT,\n binary: true\n};\n","import type {\n BinaryGeometry,\n BinaryFeatures,\n BinaryGeometryType,\n BinaryPointFeatures,\n BinaryLineFeatures,\n BinaryPolygonFeatures,\n BinaryAttribute\n} from '@loaders.gl/schema';\nimport type {Feature, Geometry, Position, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n} from '@loaders.gl/schema';\n\n// Note:L We do not handle GeometryCollection, define a limited Geometry type that always has coordinates.\n// type FeatureGeometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;\n\ntype BinaryToGeoJsonOptions = {\n type?: BinaryGeometryType;\n globalFeatureId?: number;\n};\n\n/**\n * Convert binary geometry representation to GeoJSON\n * @param data geometry data in binary representation\n * @param options\n * @param options.type Input data type: Point, LineString, or Polygon\n * @param options.featureId Global feature id. If specified, only a single feature is extracted\n * @return GeoJSON objects\n */\nexport function binaryToGeojson(\n data: BinaryFeatures,\n options?: BinaryToGeoJsonOptions\n): Feature[] | Feature {\n const globalFeatureId = options?.globalFeatureId;\n if (globalFeatureId !== undefined) {\n return getSingleFeature(data, globalFeatureId);\n }\n return parseFeatures(data, options?.type);\n}\n\n/** @deprecated use `binaryToGeojson` or `binaryToGeometry` instead */\nexport function binaryToGeoJson(\n data: BinaryGeometry | BinaryFeatures,\n type?: BinaryGeometryType,\n format: 'feature' | 'geometry' = 'feature'\n): Geometry | Feature[] {\n switch (format) {\n case 'feature':\n return parseFeatures(data as BinaryFeatures, type);\n case 'geometry':\n return binaryToGeometry(data as BinaryGeometry);\n default:\n throw new Error(format);\n }\n}\n\n/**\n * Return a single feature from a binary geometry representation as GeoJSON\n * @param data geometry data in binary representation\n * @return GeoJSON feature\n */\nfunction getSingleFeature(data: BinaryFeatures, globalFeatureId: number): Feature {\n const dataArray = normalizeInput(data);\n for (const data of dataArray) {\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Scan through data until we find matching feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, i);\n }\n lastIndex = i;\n lastValue = currValue;\n }\n\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, data.featureIds.value.length);\n }\n }\n\n throw new Error(`featureId:${globalFeatureId} not found`);\n}\n\nfunction parseFeatures(data: BinaryFeatures, type?: BinaryGeometryType): Feature[] {\n const dataArray = normalizeInput(data, type);\n return parseFeatureCollection(dataArray);\n}\n\n/** Parse input binary data and return a valid GeoJSON geometry object */\nexport function binaryToGeometry(\n data: BinaryGeometry,\n startIndex?: number,\n endIndex?: number\n): Geometry {\n switch (data.type) {\n case 'Point':\n return pointToGeoJson(data, startIndex, endIndex);\n case 'LineString':\n return lineStringToGeoJson(data, startIndex, endIndex);\n case 'Polygon':\n return polygonToGeoJson(data, startIndex, endIndex);\n default:\n const unexpectedInput: never = data;\n throw new Error(`Unsupported geometry type: ${(unexpectedInput as any)?.type}`);\n }\n}\n\ntype BinaryFeature = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\ntype BinaryFeaturesArray = BinaryFeature[];\n\n// Normalize features\n// Return an array of data objects, each of which have a type key\nfunction normalizeInput(data: BinaryFeatures, type?: BinaryGeometryType): BinaryFeaturesArray {\n const isHeterogeneousType = Boolean(data.points || data.lines || data.polygons);\n\n if (!isHeterogeneousType) {\n // @ts-expect-error This is a legacy check which allowed `data` to be an instance of the values\n // here. Aka the new data.points, data.lines, or data.polygons.\n data.type = type || parseType(data);\n return [data] as BinaryFeaturesArray;\n }\n\n const features: BinaryFeaturesArray = [];\n if (data.points) {\n data.points.type = 'Point';\n features.push(data.points);\n }\n if (data.lines) {\n data.lines.type = 'LineString';\n features.push(data.lines);\n }\n if (data.polygons) {\n data.polygons.type = 'Polygon';\n features.push(data.polygons);\n }\n\n return features;\n}\n\n/** Parse input binary data and return an array of GeoJSON Features */\nfunction parseFeatureCollection(dataArray): Feature[] {\n const features: Feature[] = [];\n for (const data of dataArray) {\n if (data.featureIds.value.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Need to deduce start, end indices of each feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n features.push(parseFeature(data, lastIndex, i));\n lastIndex = i;\n lastValue = currValue;\n }\n\n // Last feature\n features.push(parseFeature(data, lastIndex, data.featureIds.value.length));\n }\n return features;\n}\n\n/** Parse input binary data and return a single GeoJSON Feature */\nfunction parseFeature(data, startIndex?: number, endIndex?: number): Feature {\n const geometry = binaryToGeometry(data, startIndex, endIndex);\n const properties = parseProperties(data, startIndex, endIndex);\n const fields = parseFields(data, startIndex, endIndex);\n return {type: 'Feature', geometry, properties, ...fields};\n}\n\n/** Parse input binary data and return an object of fields */\nfunction parseFields(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n return data.fields && data.fields[data.featureIds.value[startIndex]];\n}\n\n/** Parse input binary data and return an object of properties */\nfunction parseProperties(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);\n for (const key in data.numericProps) {\n properties[key] = data.numericProps[key].value[startIndex];\n }\n return properties;\n}\n\n/** Parse binary data of type Polygon */\nfunction polygonToGeoJson(\n data,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): Polygon | MultiPolygon {\n const {positions} = data;\n const polygonIndices = data.polygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const primitivePolygonIndices = data.primitivePolygonIndices.value.filter(\n (x) => x >= startIndex && x <= endIndex\n );\n const multi = polygonIndices.length > 2;\n\n // Polygon\n if (!multi) {\n const coordinates: Position[][] = [];\n for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {\n const startRingIndex = primitivePolygonIndices[i];\n const endRingIndex = primitivePolygonIndices[i + 1];\n const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'Polygon', coordinates};\n }\n\n // MultiPolygon\n const coordinates: Position[][][] = [];\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startPolygonIndex = polygonIndices[i];\n const endPolygonIndex = polygonIndices[i + 1];\n const polygonCoordinates = polygonToGeoJson(\n data,\n startPolygonIndex,\n endPolygonIndex\n ).coordinates;\n coordinates.push(polygonCoordinates as Position[][]);\n }\n\n return {type: 'MultiPolygon', coordinates};\n}\n\n/** Parse binary data of type LineString */\nfunction lineStringToGeoJson(\n data,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): LineString | MultiLineString {\n const {positions} = data;\n const pathIndices = data.pathIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const multi = pathIndices.length > 2;\n\n if (!multi) {\n const coordinates = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);\n return {type: 'LineString', coordinates};\n }\n\n const coordinates: Position[][] = [];\n for (let i = 0; i < pathIndices.length - 1; i++) {\n const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'MultiLineString', coordinates};\n}\n\n/** Parse binary data of type Point */\nfunction pointToGeoJson(data, startIndex, endIndex): Point | MultiPoint {\n const {positions} = data;\n const coordinates = ringToGeoJson(positions, startIndex, endIndex);\n const multi = coordinates.length > 1;\n\n if (multi) {\n return {type: 'MultiPoint', coordinates};\n }\n\n return {type: 'Point', coordinates: coordinates[0]};\n}\n\n/**\n * Parse a linear ring of positions to a GeoJSON linear ring\n *\n * @param positions Positions TypedArray\n * @param startIndex Start index to include in ring\n * @param endIndex End index to include in ring\n * @returns GeoJSON ring\n */\nfunction ringToGeoJson(\n positions: BinaryAttribute,\n startIndex?: number,\n endIndex?: number\n): Position[] {\n startIndex = startIndex || 0;\n endIndex = endIndex || positions.value.length / positions.size;\n\n const ringCoordinates: Position[] = [];\n for (let j = startIndex; j < endIndex; j++) {\n const coord = Array();\n for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {\n coord.push(Number(positions.value[k]));\n }\n ringCoordinates.push(coord);\n }\n return ringCoordinates;\n}\n\n// Deduce geometry type of data object\nfunction parseType(data) {\n if (data.pathIndices) {\n return 'LineString';\n }\n\n if (data.polygonIndices) {\n return 'Polygon';\n }\n\n return 'Point';\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {LayerExtension, _ShaderModule as ShaderModule} from '@deck.gl/core';\n\nimport type {Layer} from '@deck.gl/core';\n\nconst defaultProps = {\n clipBounds: [0, 0, 1, 1]\n};\n\nexport type ClipExtensionProps = {\n /** Rectangular bounds to be used for clipping the rendered region, in `[left, bottom, right, top]`.\n * @default [0, 0, 1, 1]\n */\n clipBounds?: [number, number, number, number];\n /**\n * Controls whether an object is clipped by its anchor (e.g. icon, point) or by its geometry (e.g. path, polygon).\n * If not specified, it is automatically deduced from the layer.\n */\n clipByInstance?: boolean;\n};\n\nconst shaderFunction = `\nuniform vec4 clip_bounds;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];\n}\n`;\n\n/*\n * The vertex-shader version clips geometries by their anchor position\n * e.g. ScatterplotLayer - show if the center of a circle is within bounds\n */\nconst shaderModuleVs: ShaderModule = {\n name: 'clip-vs',\n vs: shaderFunction\n};\n\nconst injectionVs = {\n 'vs:#decl': `\nvarying float clip_isVisible;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n`,\n 'fs:#decl': `\nvarying float clip_isVisible;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (clip_isVisible < 0.5) discard;\n`\n};\n\n/*\n * The fragment-shader version clips pixels at the bounds\n * e.g. PolygonLayer - show the part of the polygon that intersect with the bounds\n */\nconst shaderModuleFs: ShaderModule = {\n name: 'clip-fs',\n fs: shaderFunction\n};\n\nconst injectionFs = {\n 'vs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'vs:DECKGL_FILTER_GL_POSITION': `\n clip_commonPosition = geometry.position.xy;\n`,\n 'fs:#decl': `\nvarying vec2 clip_commonPosition;\n`,\n 'fs:DECKGL_FILTER_COLOR': `\n if (!clip_isInBounds(clip_commonPosition)) discard;\n`\n};\n\n/** Adds support for clipping rendered layers by rectangular bounds. */\nexport default class ClipExtension extends LayerExtension {\n static defaultProps: any = defaultProps;\n static extensionName = 'ClipExtension';\n\n getShaders(this: Layer) {\n // If `clipByInstance: true`, the entire object is shown/hidden based on its anchor position (done by vertex shader)\n // Otherwise, the object is trimmed by the clip bounds (done by fragment shader)\n\n // Default behavior: consider a layer instanced if it has attribute `instancePositions`\n // @ts-expect-error attributeManager is always defined for primitive layers\n let clipByInstance = 'instancePositions' in this.getAttributeManager().attributes;\n // Users can override by setting the `clipByInstance` prop\n if ('clipByInstance' in this.props) {\n clipByInstance = this.props.clipByInstance as boolean;\n }\n this.state.clipByInstance = clipByInstance;\n\n return clipByInstance\n ? {\n modules: [shaderModuleVs],\n inject: injectionVs\n }\n : {\n modules: [shaderModuleFs],\n inject: injectionFs\n };\n }\n\n /* eslint-disable camelcase */\n draw(this: Layer, {uniforms}: any): void {\n const {clipBounds = defaultProps.clipBounds} = this.props;\n if (this.state.clipByInstance) {\n uniforms.clip_bounds = clipBounds;\n } else {\n const corner0 = this.projectPosition([clipBounds[0], clipBounds[1], 0]);\n const corner1 = this.projectPosition([clipBounds[2], clipBounds[3], 0]);\n\n uniforms.clip_bounds = [\n Math.min(corner0[0], corner1[0]),\n Math.min(corner0[1], corner1[1]),\n Math.max(corner0[0], corner1[0]),\n Math.max(corner0[1], corner1[1])\n ];\n }\n }\n}\n","import {Viewport} from '@deck.gl/core';\nimport {lerp} from '@math.gl/core';\nimport {GeoBoundingBox} from '../tile-layer/types';\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","import type {\n BinaryFeatures,\n BinaryLineFeatures,\n BinaryPointFeatures,\n BinaryPolygonFeatures\n} from '@loaders.gl/schema';\n\ntype FeatureTypes = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\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 * @param {Object} data - The data in binary format\n * @param {String} uniqueIdProperty - Name of the unique id property\n * @param {Number|String} featureId - feature id to find\n * @param {String} layerName - the layer to search in\n */\nexport default function findIndexBinary(\n data: BinaryFeatures,\n uniqueIdProperty: string,\n featureId: string | number,\n layerName: string\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\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;\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 = {};\n const {properties} = geomData;\n for (let i = 0; i < properties.length; i++) {\n const {layerName: key} = properties[i] as Record;\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(\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","import {\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 {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\nimport Tileset2D, {Tileset2DProps} from '../tile-layer/tileset-2d';\nimport {getURLFromTemplate, isGeoBoundingBox, isURLTemplate} from '../tile-layer/utils';\nimport {GeoBoundingBox, TileLoadProps} from '../tile-layer/types';\nimport Tile2DHeader from '../tile-layer/tile-2d-header';\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps = {\n ...GeoJsonLayer.defaultProps,\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[] | BinaryFeatures;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps = _MVTLayerProps &\n GeoJsonLayerProps &\n TileLayerProps;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\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 | 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 extends TileLayer<\n ParsedMvtTile,\n Required<_MVTLayerProps> & ExtraProps\n> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\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 });\n }\n\n get isLoaded(): boolean {\n return this.state && this.state.data && this.state.tileset && super.isLoaded;\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters) {\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 {\n let data: any = this.props.data;\n let tileJSON: any = 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.tilejson) {\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 | undefined = 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 as number;\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 as number;\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 {\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;\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;\n let newHoveredFeatureLayerName;\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 getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {globalFeatureId: info.index}) as DataT;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox,\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Record {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader): 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): DataT[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: DataT[] = [];\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 DataT);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as DataT);\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","const 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","import {AccessorFunction} from '@deck.gl/core';\nimport GeoCellLayer from '../geo-cell-layer/GeoCellLayer';\nimport {getGeohashPolygon} from './geohash-utils';\n\nconst defaultProps = {\n getGeohash: {type: 'accessor', value: d => d.geohash}\n};\n\n/**\n * Properties of `GeohashLayer`.\n */\ntype GeohashLayerProps = {\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;\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 extends GeoCellLayer<\n DataT,\n Required & ExtraProps\n> {\n static layerName = 'GeohashLayer';\n static defaultProps: any = defaultProps;\n\n indexToBounds(): Partial | 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","/* eslint-env browser */\nimport {Layer, log} from '@deck.gl/core';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\nexport type TileLoadDataProps = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise;\n onLoad: (tile: Tile2DHeader) => void;\n onError: (error: any, tile: Tile2DHeader) => void;\n};\n\nexport default class Tile2DHeader {\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 bbox!: TileBoundingBox; // assigned _always_ with result of `getTileMetadata`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record; // _may be_ assigned with result of `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\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 get data(): Promise | 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 log.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): Promise {\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 {\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","import {\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';\nimport Tile2DHeader from './tile-2d-header';\n\nimport Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';\nimport {TileLoadProps, ZRange} from './types';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps: DefaultProps = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\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 zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps = CompositeLayerProps & _TileLayerProps;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps = {\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 & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader;\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) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any) => 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 * 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 TiledPickingInfo = PickingInfo & {\n tile?: Tile2DHeader;\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 extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps>\n> {\n static defaultProps = defaultProps as any;\n static layerName = 'TileLayer';\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 this.state?.tileset?.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters) {\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 this.state.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 zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\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;\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 onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise | 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;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo {\n if (info.picked) {\n (info as any).tile = (sourceLayer as any).props.tile;\n }\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\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 id: `${this.id}-${tile.id}`,\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 return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n","import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals} from '@math.gl/core';\nimport {Viewport} from '@deck.gl/core';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLayerProps} from './tile-layer';\nimport {_memoize as memoize} from '@deck.gl/core';\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 | typeof STRATEGY_NEVER\n | typeof STRATEGY_REPLACE\n | typeof STRATEGY_DEFAULT\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 = Pick<\n Required,\n | 'tileSize'\n | 'maxCacheSize'\n | 'maxCacheByteSize'\n | 'refinementStrategy'\n | 'extent'\n | 'maxZoom'\n | 'minZoom'\n | 'maxRequests'\n | 'zoomOffset'\n> & {\n getTileData: NonNullable;\n onTileLoad: (tile: Tile2DHeader) => void;\n onTileUnload: (tile: Tile2DHeader) => void;\n onTileError: (error: any, tile: Tile2DHeader) => void;\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 default class Tileset2D {\n private opts: Tileset2DProps;\n private _requestScheduler: RequestScheduler;\n private _cache: Map;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange?: ZRange;\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 = opts;\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: opts.maxRequests > 0\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._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\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; modelMatrix?: Matrix4} = {}\n ): number {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\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 isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const [minX, minY, maxX, maxY] = getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n if ('west' in bbox) {\n return bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\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 return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\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 | undefined;\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 {\n const {tileSize} = this.opts;\n // @ts-expect-error\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} = 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 ? 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 ? 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","/* eslint-disable complexity */\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\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 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\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | undefined,\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","import {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 const urlType = {\n type: 'url',\n value: null,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equals: (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\nfunction 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: string | string[],\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 | undefined;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number] {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n if (!Array.isArray(z)) {\n const unprojectOption = {targetZ: z || 0};\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 = getCullBounds({viewport, z: z[0], cullRect});\n const bounds1 = getCullBounds({viewport, z: 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 | undefined;\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","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps = {\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 => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps = _TripsLayerProps & PathLayerProps;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps = {\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;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer extends PathLayer<\n DataT,\n Required<_TripsLayerProps> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nuniform float trailLength;\nattribute float instanceTimestamps;\nattribute float instanceNextTimestamps;\nvarying float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nuniform bool fadeTrail;\nuniform float trailLength;\nuniform float currentTime;\nvarying float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n`\n };\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\n params.uniforms = {\n ...params.uniforms,\n fadeTrail,\n trailLength,\n currentTime\n };\n\n super.draw(params);\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME arc-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec4 instanceSourceColors;\nattribute vec4 instanceTargetColors;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\nattribute float instanceHeights;\nattribute float instanceTilts;\n\nuniform bool greatCircle;\nuniform bool useShortestPath;\nuniform float numSegments;\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform int widthUnits;\n\nvarying vec4 vColor;\nvarying vec2 uv;\nvarying float isValid;\n\nfloat paraboloid(float distance, float sourceZ, float targetZ, float ratio) {\n // d: distance on the xy plane\n // r: ratio of the current point\n // p: ratio of the peak of the arc\n // h: height multiplier\n // z = f(r) = sqrt(r * (p * 2 - r)) * d * h\n // f(0) = 0\n // f(1) = dz\n\n float deltaZ = targetZ - sourceZ;\n float dh = distance * instanceHeights;\n if (dh == 0.0) {\n return sourceZ + deltaZ * ratio;\n }\n float unitZ = deltaZ / dh;\n float p2 = unitZ * unitZ + 1.0;\n\n // sqrt does not deal with negative values, manually flip source and target if delta.z < 0\n float dir = step(deltaZ, 0.0);\n float z0 = mix(sourceZ, targetZ, dir);\n float r = mix(ratio, 1.0 - ratio, dir);\n return sqrt(r * (p2 - r)) * dh + z0;\n}\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n return dir_screenspace * offset_direction * width / 2.0;\n}\n\nfloat getSegmentRatio(float index) {\n return smoothstep(0.0, 1.0, index / (numSegments - 1.0));\n}\n\nvec3 interpolateFlat(vec3 source, vec3 target, float segmentRatio) {\n float distance = length(source.xy - target.xy);\n float z = paraboloid(distance, source.z, target.z, segmentRatio);\n\n float tiltAngle = radians(instanceTilts);\n vec2 tiltDirection = normalize(target.xy - source.xy);\n vec2 tilt = vec2(-tiltDirection.y, tiltDirection.x) * z * sin(tiltAngle);\n\n return vec3(\n mix(source.xy, target.xy, segmentRatio) + tilt,\n z * cos(tiltAngle)\n );\n}\n\n/* Great circle interpolation\n * http://www.movable-type.co.uk/scripts/latlong.html\n */\nfloat getAngularDist (vec2 source, vec2 target) {\n vec2 sourceRadians = radians(source);\n vec2 targetRadians = radians(target);\n vec2 sin_half_delta = sin((sourceRadians - targetRadians) / 2.0);\n vec2 shd_sq = sin_half_delta * sin_half_delta;\n\n float a = shd_sq.y + cos(sourceRadians.y) * cos(targetRadians.y) * shd_sq.x;\n return 2.0 * asin(sqrt(a));\n}\n\nvec3 interpolateGreatCircle(vec3 source, vec3 target, vec3 source3D, vec3 target3D, float angularDist, float t) {\n vec2 lngLat;\n\n // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation\n if(abs(angularDist - PI) < 0.001) {\n lngLat = (1.0 - t) * source.xy + t * target.xy;\n } else {\n float a = sin((1.0 - t) * angularDist);\n float b = sin(t * angularDist);\n vec3 p = source3D.yxz * a + target3D.yxz * b;\n lngLat = degrees(vec2(atan(p.y, -p.x), atan(p.z, length(p.xy))));\n }\n\n float z = paraboloid(angularDist * EARTH_RADIUS, source.z, target.z, t);\n\n return vec3(lngLat, z);\n}\n\n/* END GREAT CIRCLE */\n\nvoid main(void) {\n geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;\n\n float segmentIndex = positions.x;\n float segmentRatio = getSegmentRatio(segmentIndex);\n float prevSegmentRatio = getSegmentRatio(max(0.0, segmentIndex - 1.0));\n float nextSegmentRatio = getSegmentRatio(min(numSegments - 1.0, segmentIndex + 1.0));\n\n // if it's the first point, use next - current as direction\n // otherwise use current - prev\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\n isValid = 1.0;\n\n uv = vec2(segmentRatio, positions.y);\n geometry.uv = uv;\n geometry.pickingColor = instancePickingColors;\n\n vec4 curr;\n vec4 next;\n vec3 source;\n vec3 target;\n\n if ((greatCircle || project_uProjectionMode == PROJECTION_MODE_GLOBE) && project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n source = project_globe_(vec3(instanceSourcePositions.xy, 0.0));\n target = project_globe_(vec3(instanceTargetPositions.xy, 0.0));\n float angularDist = getAngularDist(instanceSourcePositions.xy, instanceTargetPositions.xy);\n\n vec3 prevPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, prevSegmentRatio);\n vec3 currPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, segmentRatio);\n vec3 nextPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, nextSegmentRatio);\n\n if (abs(currPos.x - prevPos.x) > 180.0) {\n indexDir = -1.0;\n isValid = 0.0;\n } else if (abs(currPos.x - nextPos.x) > 180.0) {\n indexDir = 1.0;\n isValid = 0.0;\n }\n nextPos = indexDir < 0.0 ? prevPos : nextPos;\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n\n if (isValid == 0.0) {\n // split at the 180th meridian\n nextPos.x += nextPos.x > 0.0 ? -360.0 : 360.0;\n float t = ((currPos.x > 0.0 ? 180.0 : -180.0) - currPos.x) / (nextPos.x - currPos.x);\n currPos = mix(currPos, nextPos, t);\n segmentRatio = mix(segmentRatio, nextSegmentRatio, t);\n }\n\n vec3 currPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, segmentRatio);\n vec3 nextPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, nextSegmentRatio);\n \n curr = project_position_to_clipspace(currPos, currPos64Low, vec3(0.0), geometry.position);\n next = project_position_to_clipspace(nextPos, nextPos64Low, vec3(0.0));\n \n } else {\n vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n if (useShortestPath) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n\n float deltaLng = target_world.x - source_world.x;\n if (deltaLng > 180.) target_world.x -= 360.;\n if (deltaLng < -180.) source_world.x -= 360.;\n }\n source = project_position(source_world, instanceSourcePositions64Low);\n target = project_position(target_world, instanceTargetPositions64Low);\n\n // common x at longitude=-180\n float antiMeridianX = 0.0;\n\n if (useShortestPath) {\n if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n antiMeridianX = -(project_uCoordinateOrigin.x + 180.) / 360. * TILE_SIZE;\n }\n float thresholdRatio = (antiMeridianX - source.x) / (target.x - source.x);\n\n if (prevSegmentRatio <= thresholdRatio && nextSegmentRatio > thresholdRatio) {\n isValid = 0.0;\n indexDir = sign(segmentRatio - thresholdRatio);\n segmentRatio = thresholdRatio;\n }\n }\n\n nextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\n vec3 currPos = interpolateFlat(source, target, segmentRatio);\n vec3 nextPos = interpolateFlat(source, target, nextSegmentRatio);\n\n if (useShortestPath) {\n if (nextPos.x < antiMeridianX) {\n currPos.x += TILE_SIZE;\n nextPos.x += TILE_SIZE;\n }\n }\n\n curr = project_common_position_to_clipspace(vec4(currPos, 1.0));\n next = project_common_position_to_clipspace(vec4(nextPos, 1.0));\n geometry.position = vec4(currPos, 1.0);\n }\n\n // Multiply out width and clamp to limits\n // mercator pixels are interpreted as screen pixels\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset((next.xy - curr.xy) * indexDir, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = curr + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio);\n vColor = vec4(color.rgb, color.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n picking,\n UNIT,\n UpdateParameters,\n LayerProps,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n DefaultProps\n} from '@deck.gl/core';\n\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './arc-layer-vertex.glsl';\nimport fs from './arc-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n getSourcePosition: {type: 'accessor', value: x => x.sourcePosition},\n getTargetPosition: {type: 'accessor', value: x => x.targetPosition},\n getSourceColor: {type: 'accessor', value: DEFAULT_COLOR},\n getTargetColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n getHeight: {type: 'accessor', value: 1},\n getTilt: {type: 'accessor', value: 0},\n\n greatCircle: false,\n\n widthUnits: 'pixels',\n widthScale: {type: 'number', value: 1, min: 0},\n widthMinPixels: {type: 'number', value: 0, min: 0},\n widthMaxPixels: {type: 'number', value: Number.MAX_SAFE_INTEGER, min: 0}\n};\n\n/** All properties supported by ArcLayer. */\nexport type ArcLayerProps = _ArcLayerProps & LayerProps;\n\n/** Properties added by ArcLayer. */\ntype _ArcLayerProps = {\n /**\n * If `true`, create the arc along the shortest path on the earth surface.\n * @default false\n */\n greatCircle?: boolean;\n\n /**\n * The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`\n * @default 'pixels'\n */\n widthUnits?: Unit;\n\n /**\n * The scaling multiplier for the width of each line.\n * @default 1\n */\n widthScale?: number;\n\n /**\n * The minimum line width in pixels.\n * @default 0\n */\n widthMinPixels?: number;\n\n /**\n * The maximum line width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n\n /**\n * Method called to retrieve the source position of each object.\n * @default object => object.sourcePosition\n */\n getSourcePosition?: AccessorFunction;\n\n /**\n * Method called to retrieve the target position of each object.\n * @default object => object.targetPosition\n */\n getTargetPosition?: AccessorFunction;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getSourceColor?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getTargetColor?: Accessor;\n\n /**\n * The line width of each object, in units specified by `widthUnits`.\n * @default 1\n */\n getWidth?: Accessor;\n\n /**\n * Multiplier of layer height. `0` will make the layer flat.\n * @default 1\n */\n getHeight?: Accessor;\n\n /**\n * Use to tilt the arc to the side if you have multiple arcs with the same source and target positions.\n * @default 0\n */\n getTilt?: Accessor;\n};\n\n/** Render raised arcs joining pairs of source and target coordinates. */\nexport default class ArcLayer extends Layer<\n ExtraPropsT & Required<_ArcLayerProps>\n> {\n static layerName = 'ArcLayer';\n static defaultProps = defaultProps;\n\n state!: Layer['state'] & {\n model?: Model;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]}); // 'project' module added by default.\n }\n\n // This layer has its own wrapLongitude logic\n get wrapLongitude() {\n return false;\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceSourcePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getSourcePosition'\n },\n instanceTargetPositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getTargetPosition'\n },\n instanceSourceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getSourceColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceTargetColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getTargetColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceWidths: {\n size: 1,\n transition: true,\n accessor: 'getWidth',\n defaultValue: 1\n },\n instanceHeights: {\n size: 1,\n transition: true,\n accessor: 'getHeight',\n defaultValue: 1\n },\n instanceTilts: {\n size: 1,\n transition: true,\n accessor: 'getTilt',\n defaultValue: 0\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(opts: UpdateParameters): void {\n super.updateState(opts);\n // Re-generate model if geometry changed\n if (opts.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {widthUnits, widthScale, widthMinPixels, widthMaxPixels, greatCircle, wrapLongitude} =\n this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n greatCircle,\n widthUnits: UNIT[widthUnits],\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n useShortestPath: wrapLongitude\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n let positions: number[] = [];\n const NUM_SEGMENTS = 50;\n /*\n * (0, -1)-------------_(1, -1)\n * | _,-\" |\n * o _,-\" o\n * | _,-\" |\n * (0, 1)\"-------------(1, 1)\n */\n for (let i = 0; i < NUM_SEGMENTS; i++) {\n positions = positions.concat([i, 1, 0, i, -1, 0]);\n }\n\n const model = new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n\n model.setUniforms({numSegments: NUM_SEGMENTS});\n\n return model;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME arc-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\nvarying float isValid;\n\nvoid main(void) {\n if (isValid == 0.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n geometry.uv = uv;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import {log, BinaryAttribute} from '@deck.gl/core';\nimport {Geometry, uid} from '@luma.gl/core';\nimport {modifyPolygonWindingDirection, WINDING} from '@math.gl/polygon';\n\ntype ColumnGeometryProps = {\n id?: string;\n radius: number;\n height?: number;\n nradial?: number;\n vertices?: number[];\n};\n\nexport default class ColumnGeometry extends Geometry {\n constructor(props: ColumnGeometryProps) {\n const {id = uid('column-geometry')} = props;\n const {indices, attributes} = tesselateColumn(props);\n super({\n ...props,\n id,\n indices,\n attributes\n });\n }\n}\n\n/* eslint-disable max-statements, complexity */\nfunction tesselateColumn(props: ColumnGeometryProps): {\n indices: Uint16Array;\n attributes: Record;\n} {\n const {radius, height = 1, nradial = 10} = props;\n let {vertices} = props;\n\n if (vertices) {\n log.assert(vertices.length >= nradial); // `vertices` must contain at least `diskResolution` points\n vertices = vertices.flatMap(v => [v[0], v[1]]);\n modifyPolygonWindingDirection(vertices, WINDING.COUNTER_CLOCKWISE);\n }\n\n const isExtruded = height > 0;\n const vertsAroundEdge = nradial + 1; // loop\n const numVertices = isExtruded\n ? vertsAroundEdge * 3 + 1 // top, side top edge, side bottom edge, one additional degenerage vertex\n : nradial; // top\n\n const stepAngle = (Math.PI * 2) / nradial;\n\n // Used for wireframe\n const indices = new Uint16Array(isExtruded ? nradial * 3 * 2 : 0); // top loop, side vertical, bottom loop\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n\n let i = 0;\n\n // side tesselation: 0, 1, 2, 3, 4, 5, ...\n //\n // 0 - 2 - 4 ... top\n // | / | / |\n // 1 - 3 - 5 ... bottom\n //\n if (isExtruded) {\n for (let j = 0; j < vertsAroundEdge; j++) {\n const a = j * stepAngle;\n const vertexIndex = j % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n\n for (let k = 0; k < 2; k++) {\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = (1 / 2 - k) * height;\n\n normals[i + 0] = vertices ? vertices[vertexIndex * 2] : cos;\n normals[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin;\n\n i += 3;\n }\n }\n\n // duplicate the last vertex to create proper degenerate triangle.\n positions[i + 0] = positions[i - 3];\n positions[i + 1] = positions[i - 2];\n positions[i + 2] = positions[i - 1];\n i += 3;\n }\n\n // The column geometry is rendered as a triangle strip, so\n // in order to render sides and top in one go we need to use degenerate triangles.\n // Duplicate last vertex of side trinagles and first vertex of the top cap to preserve winding order.\n\n // top tesselation: 0, -1, 1, -2, 2, -3, 3, ...\n //\n // 0 -- 1\n // / \\\n // -1 2\n // | |\n // -2 3\n // \\ /\n // -3 -- 4\n //\n for (let j = isExtruded ? 0 : 1; j < vertsAroundEdge; j++) {\n const v = Math.floor(j / 2) * Math.sign(0.5 - (j % 2));\n const a = v * stepAngle;\n const vertexIndex = (v + nradial) % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = height / 2;\n\n normals[i + 2] = 1;\n\n i += 3;\n }\n\n if (isExtruded) {\n let index = 0;\n for (let j = 0; j < nradial; j++) {\n // top loop\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 2;\n // side vertical\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 1;\n // bottom loop\n indices[index++] = j * 2 + 1;\n indices[index++] = j * 2 + 3;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals}\n }\n };\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `#version 300 es\n\n#define SHADER_NAME column-layer-vertex-shader\n\nin vec3 positions;\nin vec3 normals;\n\nin vec3 instancePositions;\nin float instanceElevations;\nin vec3 instancePositions64Low;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin float instanceStrokeWidths;\n\nin vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float edgeDistance;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform int radiusUnits;\nuniform int widthUnits;\n\n// Result\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n\n vec4 color = isStroke ? instanceLineColors : instanceFillColors;\n // rotate primitive position and normal\n mat2 rotationMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar gemoetry height are between -1.0 to 1.0, transform it to between 0, 1\n float elevation = 0.0;\n // calculate stroke offset\n float strokeOffsetRatio = 1.0;\n\n if (extruded) {\n elevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n } else if (stroked) {\n float widthPixels = clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0;\n float halfOffset = project_pixel_size(widthPixels) / project_size(edgeDistance * coverage * radius);\n if (isStroke) {\n strokeOffsetRatio -= sign(positions.z) * halfOffset;\n } else {\n strokeOffsetRatio -= halfOffset;\n }\n }\n\n // if alpha == 0.0 or z < 0.0, do not render element\n float shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\n float dotRadius = radius * coverage * shouldRender;\n\n geometry.pickingColor = instancePickingColors;\n\n // project center of column\n vec3 centroidPosition = vec3(instancePositions.xy, instancePositions.z + elevation);\n vec3 centroidPosition64Low = instancePositions64Low;\n vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + offset) * dotRadius;\n if (radiusUnits == UNIT_METERS) {\n offset = project_size(offset);\n }\n vec3 pos = vec3(offset, 0.);\n DECKGL_FILTER_SIZE(pos, geometry);\n\n gl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\n geometry.normal = project_normal(vec3(rotationMatrix * normals.xy, normals.z));\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Light calculations\n if (extruded && !isStroke) {\n#ifdef FLAT_SHADING\n position_commonspace = geometry.position;\n vColor = vec4(color.rgb, color.a * opacity);\n#else\n vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n vColor = vec4(lightColor, color.a * opacity);\n#endif\n } else {\n vColor = vec4(color.rgb, color.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n gouraudLighting,\n phongLighting,\n picking,\n UNIT,\n LayerProps,\n UpdateParameters,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n Material,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, isWebGL2, hasFeature, FEATURES} from '@luma.gl/core';\nimport ColumnGeometry from './column-geometry';\n\nimport vs from './column-layer-vertex.glsl';\nimport fs from './column-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n diskResolution: {type: 'number', min: 4, value: 20},\n vertices: null,\n radius: {type: 'number', min: 0, value: 1000},\n angle: {type: 'number', value: 0},\n offset: {type: 'array', value: [0, 0]},\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n elevationScale: {type: 'number', min: 0, value: 1},\n radiusUnits: 'meters',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n\n extruded: true,\n wireframe: false,\n filled: true,\n stroked: false,\n\n getPosition: {type: 'accessor', value: x => x.position},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineWidth: {type: 'accessor', value: 1},\n getElevation: {type: 'accessor', value: 1000},\n material: true,\n getColor: {deprecatedFor: ['getFillColor', 'getLineColor']}\n};\n\n/** All properties supported by ColumnLayer. */\nexport type ColumnLayerProps = _ColumnLayerProps & LayerProps;\n\n/** Properties added by ColumnLayer. */\ntype _ColumnLayerProps = {\n /**\n * The number of sides to render the disk as.\n * @default 20\n */\n diskResolution?: number;\n\n /**\n * isk size in units specified by `radiusUnits`.\n * @default 1000\n */\n radius?: number;\n\n /**\n * Disk rotation, counter-clockwise in degrees.\n * @default 0\n */\n angle?: number;\n\n /**\n * Replace the default geometry (regular polygon that fits inside the unit circle) with a custom one.\n * @default null\n */\n vertices: Position[] | null;\n\n /**\n * Disk offset from the position, relative to the radius.\n * @default [0,0]\n */\n offset?: [number, number];\n\n /**\n * Radius multiplier, between 0 - 1\n * @default 1\n */\n coverage?: number;\n\n /**\n * Column elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to draw a filled column (solid fill).\n * @default true\n */\n filled?: boolean;\n\n /**\n * Whether to draw an outline around the disks.\n * @default false\n */\n stroked?: boolean;\n\n /**\n * Whether to extrude the columns. If set to `false`, all columns will be rendered as flat polygons.\n * @default true\n */\n extruded?: boolean;\n\n /**\n * Whether to generate a line wireframe of the column.\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * If `true`, the vertical surfaces of the columns use [flat shading](https://en.wikipedia.org/wiki/Shading#Flat_vs._smooth_shading).\n * @default false\n */\n flatShading?: boolean;\n\n /**\n * The units of the radius.\n * @default 'meters'\n */\n radiusUnits?: Unit;\n\n /**\n * The units of the line width.\n * @default 'meters'\n */\n lineWidthUnits?: Unit;\n\n /**\n * The line width multiplier that multiplied to all outlines.\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum outline width in pixels.\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum outline width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Method called to retrieve the position of each column.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * @deprecated Use getFilledColor and getLineColor instead\n */\n getColor?: Accessor;\n\n /**\n * Fill collor value or accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * The elevation of each cell in meters.\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * The width of the outline of the column, in units specified by `lineWidthUnits`.\n *\n * @default 1\n */\n getLineWidth?: Accessor;\n};\n\n/** Render extruded cylinders (tessellated regular polygons) at given coordinates. */\nexport default class ColumnLayer extends Layer<\n ExtraPropsT & Required<_ColumnLayerProps>\n> {\n static layerName = 'ColumnLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const {gl} = this.context;\n const transpileToGLSL100 = !isWebGL2(gl);\n const defines: Record = {};\n\n const useDerivatives = this.props.flatShading && hasFeature(gl, FEATURES.GLSL_DERIVATIVES);\n if (useDerivatives) {\n defines.FLAT_SHADING = 1;\n }\n return super.getShaders({\n vs,\n fs,\n defines,\n transpileToGLSL100,\n modules: [project32, useDerivatives ? phongLighting : gouraudLighting, picking]\n });\n }\n\n /**\n * DeckGL calls initializeState when GL context is available\n * Essentially a deferred constructor\n */\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceElevations: {\n size: 1,\n transition: true,\n accessor: 'getElevation'\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getLineWidth',\n transition: true\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(params: UpdateParameters): void {\n super.updateState(params);\n\n const {props, oldProps, changeFlags} = params;\n const regenerateModels =\n changeFlags.extensionsChanged || props.flatShading !== oldProps.flatShading;\n\n if (regenerateModels) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n\n if (\n regenerateModels ||\n props.diskResolution !== oldProps.diskResolution ||\n props.vertices !== oldProps.vertices ||\n (props.extruded || props.stroked) !== (oldProps.extruded || oldProps.stroked)\n ) {\n this._updateGeometry(props);\n }\n }\n\n getGeometry(diskResolution: number, vertices: number[] | undefined, hasThinkness: boolean) {\n const geometry = new ColumnGeometry({\n radius: 1,\n height: hasThinkness ? 2 : 0,\n vertices,\n nradial: diskResolution\n });\n\n let meanVertexDistance = 0;\n if (vertices) {\n for (let i = 0; i < diskResolution; i++) {\n const p = vertices[i];\n const d = Math.sqrt(p[0] * p[0] + p[1] * p[1]);\n meanVertexDistance += d / diskResolution;\n }\n } else {\n meanVertexDistance = 1;\n }\n this.setState({\n edgeDistance: Math.cos(Math.PI / diskResolution) * meanVertexDistance\n });\n\n return geometry;\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n isInstanced: true\n });\n }\n\n protected _updateGeometry({diskResolution, vertices, extruded, stroked}) {\n const geometry: any = this.getGeometry(diskResolution, vertices, extruded || stroked);\n\n this.setState({\n fillVertexCount: geometry.attributes.POSITION.value.length / 3,\n wireframeVertexCount: geometry.indices.value.length\n });\n\n this.state.model.setProps({geometry});\n }\n\n draw({uniforms}) {\n const {\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n radiusUnits,\n elevationScale,\n extruded,\n filled,\n stroked,\n wireframe,\n offset,\n coverage,\n radius,\n angle\n } = this.props;\n const {model, fillVertexCount, wireframeVertexCount, edgeDistance} = this.state;\n\n model.setUniforms(uniforms).setUniforms({\n radius,\n angle: (angle / 180) * Math.PI,\n offset,\n extruded,\n stroked,\n coverage,\n elevationScale,\n edgeDistance,\n radiusUnits: UNIT[radiusUnits],\n widthUnits: UNIT[lineWidthUnits],\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels\n });\n\n // When drawing 3d: draw wireframe first so it doesn't get occluded by depth test\n if (extruded && wireframe) {\n model.setProps({isIndexed: true});\n model\n .setVertexCount(wireframeVertexCount)\n .setDrawMode(GL.LINES)\n .setUniforms({isStroke: true})\n .draw();\n }\n if (filled) {\n model.setProps({isIndexed: false});\n model\n .setVertexCount(fillVertexCount)\n .setDrawMode(GL.TRIANGLE_STRIP)\n .setUniforms({isStroke: false})\n .draw();\n }\n // When drawing 2d: draw fill before stroke so that the outline is always on top\n if (!extruded && stroked) {\n model.setProps({isIndexed: false});\n // The width of the stroke is achieved by flattening the side of the cylinder.\n // Skip the last 1/3 of the vertices which is the top.\n model\n .setVertexCount((fillVertexCount * 2) / 3)\n .setDrawMode(GL.TRIANGLE_STRIP)\n .setUniforms({isStroke: true})\n .draw();\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `#version 300 es\n#define SHADER_NAME column-layer-fragment-shader\n\nprecision highp float;\n\nuniform vec3 project_uCameraPosition;\nuniform bool extruded;\nuniform bool isStroke;\n\nout vec4 fragColor;\n\nin vec4 vColor;\n#ifdef FLAT_SHADING\nin vec4 position_commonspace;\n#endif\n\nvoid main(void) {\n fragColor = vColor;\n#ifdef FLAT_SHADING\n if (extruded && !isStroke && !picking_uActive) {\n vec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n fragColor.rgb = lighting_getLightColor(vColor.rgb, project_uCameraPosition, position_commonspace.xyz, normal);\n }\n#endif\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","import {CompositeLayer, Layer} from '@deck.gl/core';\n\nimport IconLayer from '../icon-layer/icon-layer';\nimport ScatterplotLayer from '../scatterplot-layer/scatterplot-layer';\nimport TextLayer from '../text-layer/text-layer';\nimport PathLayer from '../path-layer/path-layer';\nimport SolidPolygonLayer from '../solid-polygon-layer/solid-polygon-layer';\n\nexport const POINT_LAYER = {\n circle: {\n type: ScatterplotLayer,\n props: {\n filled: 'filled',\n stroked: 'stroked',\n\n lineWidthMaxPixels: 'lineWidthMaxPixels',\n lineWidthMinPixels: 'lineWidthMinPixels',\n lineWidthScale: 'lineWidthScale',\n lineWidthUnits: 'lineWidthUnits',\n pointRadiusMaxPixels: 'radiusMaxPixels',\n pointRadiusMinPixels: 'radiusMinPixels',\n pointRadiusScale: 'radiusScale',\n pointRadiusUnits: 'radiusUnits',\n pointAntialiasing: 'antialiasing',\n pointBillboard: 'billboard',\n\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor',\n getLineWidth: 'getLineWidth',\n getPointRadius: 'getRadius'\n }\n },\n icon: {\n type: IconLayer,\n props: {\n iconAtlas: 'iconAtlas',\n iconMapping: 'iconMapping',\n\n iconSizeMaxPixels: 'sizeMaxPixels',\n iconSizeMinPixels: 'sizeMinPixels',\n iconSizeScale: 'sizeScale',\n iconSizeUnits: 'sizeUnits',\n iconAlphaCutoff: 'alphaCutoff',\n iconBillboard: 'billboard',\n\n getIcon: 'getIcon',\n getIconAngle: 'getAngle',\n getIconColor: 'getColor',\n getIconPixelOffset: 'getPixelOffset',\n getIconSize: 'getSize'\n }\n },\n text: {\n type: TextLayer,\n props: {\n textSizeMaxPixels: 'sizeMaxPixels',\n textSizeMinPixels: 'sizeMinPixels',\n textSizeScale: 'sizeScale',\n textSizeUnits: 'sizeUnits',\n\n textBackground: 'background',\n textBackgroundPadding: 'backgroundPadding',\n textFontFamily: 'fontFamily',\n textFontWeight: 'fontWeight',\n textLineHeight: 'lineHeight',\n textMaxWidth: 'maxWidth',\n textOutlineColor: 'outlineColor',\n textOutlineWidth: 'outlineWidth',\n textWordBreak: 'wordBreak',\n textCharacterSet: 'characterSet',\n textBillboard: 'billboard',\n textFontSettings: 'fontSettings',\n\n getText: 'getText',\n getTextAngle: 'getAngle',\n getTextColor: 'getColor',\n getTextPixelOffset: 'getPixelOffset',\n getTextSize: 'getSize',\n getTextAnchor: 'getTextAnchor',\n getTextAlignmentBaseline: 'getAlignmentBaseline',\n getTextBackgroundColor: 'getBackgroundColor',\n getTextBorderColor: 'getBorderColor',\n getTextBorderWidth: 'getBorderWidth'\n }\n }\n};\n\nexport const LINE_LAYER = {\n type: PathLayer,\n props: {\n lineWidthUnits: 'widthUnits',\n lineWidthScale: 'widthScale',\n lineWidthMinPixels: 'widthMinPixels',\n lineWidthMaxPixels: 'widthMaxPixels',\n lineJointRounded: 'jointRounded',\n lineCapRounded: 'capRounded',\n lineMiterLimit: 'miterLimit',\n lineBillboard: 'billboard',\n\n getLineColor: 'getColor',\n getLineWidth: 'getWidth'\n }\n};\n\nexport const POLYGON_LAYER = {\n type: SolidPolygonLayer,\n props: {\n extruded: 'extruded',\n filled: 'filled',\n wireframe: 'wireframe',\n elevationScale: 'elevationScale',\n material: 'material',\n\n getElevation: 'getElevation',\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor'\n }\n};\n\nexport function getDefaultProps({\n type,\n props\n}: {\n type: typeof Layer;\n props: Record;\n}): Record {\n const result = {};\n for (const key in props) {\n result[key] = type.defaultProps[props[key]];\n }\n return result;\n}\n\nexport function forwardProps(\n layer: CompositeLayer,\n mapping: Record\n): Record {\n const {transitions, updateTriggers} = layer.props;\n const result: Record = {\n updateTriggers: {},\n transitions: transitions && {\n getPosition: transitions.geometry\n }\n };\n\n for (const sourceKey in mapping) {\n const targetKey = mapping[sourceKey];\n let value = layer.props[sourceKey];\n if (sourceKey.startsWith('get')) {\n // isAccessor\n value = (layer as any).getSubLayerAccessor(value);\n result.updateTriggers[targetKey] = updateTriggers[sourceKey];\n if (transitions) {\n result.transitions[targetKey] = transitions[sourceKey];\n }\n }\n result[targetKey] = value;\n }\n return result;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {log} from '@deck.gl/core';\nimport type {\n Feature,\n GeoJSON,\n GeoJsonGeometryTypes,\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon\n} from 'geojson';\n\ntype SupportedGeometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;\n\nexport type SeparatedGeometries = {\n pointFeatures: {geometry: Point}[];\n lineFeatures: {geometry: LineString}[];\n polygonFeatures: {geometry: Polygon}[];\n polygonOutlineFeatures: {geometry: LineString}[];\n};\n\n/**\n * \"Normalizes\" complete or partial GeoJSON data into iterable list of features\n * Can accept GeoJSON geometry or \"Feature\", \"FeatureCollection\" in addition\n * to plain arrays and iterables.\n * Works by extracting the feature array or wrapping single objects in an array,\n * so that subsequent code can simply iterate over features.\n *\n * @param {object} geojson - geojson data\n * @param {Object|Array} data - geojson object (FeatureCollection, Feature or\n * Geometry) or array of features\n * @return {Array|\"iteratable\"} - iterable list of features\n */\nexport function getGeojsonFeatures(geojson: GeoJSON): Feature[] {\n // If array, assume this is a list of features\n if (Array.isArray(geojson)) {\n return geojson;\n }\n\n log.assert(geojson.type, 'GeoJSON does not have type');\n\n switch (geojson.type) {\n case 'Feature':\n // Wrap the feature in a 'Features' array\n return [geojson];\n case 'FeatureCollection':\n // Just return the 'Features' array from the collection\n log.assert(Array.isArray(geojson.features), 'GeoJSON does not have features array');\n return geojson.features;\n default:\n // Assume it's a geometry, we'll check type in separateGeojsonFeatures\n // Wrap the geometry object in a 'Feature' object and wrap in an array\n return [{geometry: geojson}] as Feature[];\n }\n}\n\n// Linearize\nexport function separateGeojsonFeatures(\n features: Feature[],\n wrapFeature: (row: T, sourceObject: any, sourceObjectIndex: number) => T,\n dataRange: {startRow?: number; endRow?: number} = {}\n): SeparatedGeometries {\n const separated: SeparatedGeometries = {\n pointFeatures: [],\n lineFeatures: [],\n polygonFeatures: [],\n polygonOutlineFeatures: []\n };\n const {startRow = 0, endRow = features.length} = dataRange;\n\n for (let featureIndex = startRow; featureIndex < endRow; featureIndex++) {\n const feature = features[featureIndex];\n const {geometry} = feature;\n\n if (!geometry) {\n // geometry can be null per specification\n continue;\n }\n\n if (geometry.type === 'GeometryCollection') {\n log.assert(Array.isArray(geometry.geometries), 'GeoJSON does not have geometries array');\n const {geometries} = geometry;\n for (let i = 0; i < geometries.length; i++) {\n const subGeometry = geometries[i];\n separateGeometry(\n subGeometry as SupportedGeometry,\n separated,\n wrapFeature,\n feature,\n featureIndex\n );\n }\n } else {\n separateGeometry(geometry, separated, wrapFeature, feature, featureIndex);\n }\n }\n\n return separated;\n}\n\nfunction separateGeometry(\n geometry: SupportedGeometry,\n separated: SeparatedGeometries,\n wrapFeature: (row: T, sourceObject: any, sourceObjectIndex: number) => T,\n sourceFeature: Feature,\n sourceFeatureIndex: number\n) {\n const {type, coordinates} = geometry;\n const {pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures} = separated;\n\n if (!validateGeometry(type, coordinates)) {\n // Avoid hard failure if some features are malformed\n log.warn(`${type} coordinates are malformed`)();\n return;\n }\n\n // Split each feature, but keep track of the source feature and index (for Multi* geometries)\n switch (type) {\n case 'Point':\n pointFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n break;\n case 'MultiPoint':\n coordinates.forEach(point => {\n pointFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'Point', coordinates: point}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'LineString':\n lineFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n break;\n case 'MultiLineString':\n // Break multilinestrings into multiple lines\n coordinates.forEach(path => {\n lineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'Polygon':\n polygonFeatures.push(\n wrapFeature(\n {\n geometry\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n // Break polygon into multiple lines\n coordinates.forEach(path => {\n polygonOutlineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n break;\n case 'MultiPolygon':\n // Break multipolygons into multiple polygons\n coordinates.forEach(polygon => {\n polygonFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'Polygon', coordinates: polygon}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n // Break polygon into multiple lines\n polygon.forEach(path => {\n polygonOutlineFeatures.push(\n wrapFeature(\n {\n geometry: {type: 'LineString', coordinates: path}\n },\n sourceFeature,\n sourceFeatureIndex\n )\n );\n });\n });\n break;\n default:\n }\n}\n\n/**\n * Simple GeoJSON validation util. For perf reasons we do not validate against the full spec,\n * only the following:\n - geometry.type is supported\n - geometry.coordinate has correct nesting level\n */\nconst COORDINATE_NEST_LEVEL: Record = {\n Point: 1,\n MultiPoint: 2,\n LineString: 2,\n MultiLineString: 3,\n Polygon: 3,\n MultiPolygon: 4\n};\n\nexport function validateGeometry(type: GeoJsonGeometryTypes, coordinates: any): boolean {\n let nestLevel = COORDINATE_NEST_LEVEL[type] as number;\n\n log.assert(nestLevel, `Unknown GeoJSON type ${type}`);\n\n while (coordinates && --nestLevel > 0) {\n coordinates = coordinates[0];\n }\n\n return coordinates && Number.isFinite(coordinates[0]);\n}\n","import {BinaryAttribute, LayerData, LayerProps} from '@deck.gl/core';\nimport {PolygonLayerProps, ScatterplotLayerProps} from '..';\nimport {calculatePickingColors} from './geojson-binary';\nimport {BinaryFeatures} from '@loaders.gl/schema';\nimport {SeparatedGeometries} from './geojson';\n\n// TODO: PathLayer is not yet typed\ntype PathLayerProps = LayerProps & Record;\n\ntype SubLayersProps = {\n points: Partial;\n lines: Partial;\n polygons: Partial;\n polygonsOutline: Partial;\n};\n\ntype ExtendedBinaryFeatures = {\n [P in keyof BinaryFeatures]: BinaryFeatures[P] & {attributes?: Record};\n};\n\nfunction createEmptyLayerProps(): SubLayersProps {\n return {\n points: {},\n lines: {},\n polygons: {},\n polygonsOutline: {}\n };\n}\n\nfunction getCoordinates(f) {\n return f.geometry.coordinates;\n}\n\nexport function createLayerPropsFromFeatures(\n features: SeparatedGeometries,\n featuresDiff\n): SubLayersProps {\n const layerProps = createEmptyLayerProps();\n const {pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures} = features;\n\n layerProps.points.data = pointFeatures;\n layerProps.points._dataDiff = featuresDiff.pointFeatures && (() => featuresDiff.pointFeatures);\n layerProps.points.getPosition = getCoordinates;\n\n layerProps.lines.data = lineFeatures;\n layerProps.lines._dataDiff = featuresDiff.lineFeatures && (() => featuresDiff.lineFeatures);\n layerProps.lines.getPath = getCoordinates;\n\n layerProps.polygons.data = polygonFeatures;\n layerProps.polygons._dataDiff =\n featuresDiff.polygonFeatures && (() => featuresDiff.polygonFeatures);\n layerProps.polygons.getPolygon = getCoordinates;\n\n layerProps.polygonsOutline.data = polygonOutlineFeatures;\n layerProps.polygonsOutline._dataDiff =\n featuresDiff.polygonOutlineFeatures && (() => featuresDiff.polygonOutlineFeatures);\n layerProps.polygonsOutline.getPath = getCoordinates;\n\n return layerProps;\n}\n\nexport function createLayerPropsFromBinary(\n geojsonBinary: Required,\n encodePickingColor\n): SubLayersProps {\n // The binary data format is documented here\n // https://github.com/visgl/loaders.gl/blob/master/modules/gis/docs/api-reference/geojson-to-binary.md\n // It is the default output from the `MVTLoader` and can also be obtained\n // from GeoJSON by using the `geojsonToBinary` utility function.\n const layerProps = createEmptyLayerProps();\n const {points, lines, polygons} = geojsonBinary;\n\n const customPickingColors = calculatePickingColors(geojsonBinary, encodePickingColor);\n\n layerProps.points.data = {\n length: points.positions.value.length / points.positions.size,\n attributes: {\n ...points.attributes,\n getPosition: points.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.points!\n }\n },\n properties: points.properties,\n numericProps: points.numericProps,\n featureIds: points.featureIds\n } as LayerData;\n\n layerProps.lines.data = {\n length: lines.pathIndices.value.length - 1,\n startIndices: lines.pathIndices.value,\n attributes: {\n ...lines.attributes,\n getPath: lines.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.lines!\n }\n },\n properties: lines.properties,\n numericProps: lines.numericProps,\n featureIds: lines.featureIds\n } as LayerData;\n layerProps.lines._pathType = 'open';\n\n layerProps.polygons.data = {\n length: polygons.polygonIndices.value.length - 1,\n startIndices: polygons.polygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPolygon: polygons.positions,\n pickingColors: {\n size: 3,\n value: customPickingColors.polygons!\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n } as LayerData;\n layerProps.polygons._normalize = false;\n if (polygons.triangles) {\n (layerProps.polygons.data as any).attributes.indices = polygons.triangles.value;\n }\n\n layerProps.polygonsOutline.data = {\n length: polygons.primitivePolygonIndices.value.length - 1,\n startIndices: polygons.primitivePolygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPath: polygons.positions,\n instancePickingColors: {\n size: 3,\n value: customPickingColors.polygons!\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n } as LayerData;\n layerProps.polygonsOutline._pathType = 'open';\n\n return layerProps;\n}\n","// This module implement some utility functions to work with\n// the geojson-binary format defined at loaders.gl:\n// https://github.com/visgl/loaders.gl/blob/master/modules/gis/docs/api-reference/geojson-to-binary.md\n\nimport {\n BinaryFeatures,\n BinaryLineFeatures,\n BinaryPointFeatures,\n BinaryPolygonFeatures,\n Feature\n} from '@loaders.gl/schema';\n\nexport type BinaryFeatureTypes = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\n\ntype FeaureOnlyProperties = Pick;\n\n/**\n * Return the feature for an accesor\n */\nexport function binaryToFeatureForAccesor(\n data: BinaryFeatureTypes,\n index: number\n): FeaureOnlyProperties | null {\n if (!data) {\n return null;\n }\n\n const featureIndex = 'startIndices' in data ? (data as any).startIndices[index] : index;\n const geometryIndex = data.featureIds.value[featureIndex];\n\n if (featureIndex !== -1) {\n return getPropertiesForIndex(data, geometryIndex, featureIndex);\n }\n\n return null;\n}\n\nfunction getPropertiesForIndex(\n data: BinaryFeatureTypes,\n propertiesIndex: number,\n numericPropsIndex: number\n): FeaureOnlyProperties {\n const feature = {\n properties: {...data.properties[propertiesIndex]}\n };\n\n for (const prop in data.numericProps) {\n feature.properties[prop] = data.numericProps[prop].value[numericPropsIndex];\n }\n\n return feature;\n}\n\n// Custom picking color to keep binary indexes\nexport function calculatePickingColors(\n geojsonBinary: BinaryFeatures,\n encodePickingColor: (id: number, result: number[]) => void\n): Record {\n const pickingColors: Record = {\n points: null,\n lines: null,\n polygons: null\n };\n for (const key in pickingColors) {\n const featureIds = geojsonBinary[key].globalFeatureIds.value;\n pickingColors[key] = new Uint8ClampedArray(featureIds.length * 3);\n const pickingColor = [];\n for (let i = 0; i < featureIds.length; i++) {\n encodePickingColor(featureIds[i], pickingColor);\n pickingColors[key]![i * 3 + 0] = pickingColor[0];\n pickingColors[key]![i * 3 + 1] = pickingColor[1];\n pickingColors[key]![i * 3 + 2] = pickingColor[2];\n }\n }\n\n return pickingColors;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n PickingInfo,\n Unit,\n Material,\n UpdateParameters,\n _ConstructorOf,\n DefaultProps\n} from '@deck.gl/core';\n\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {replaceInRange} from '../utils';\nimport {BinaryFeatureTypes, binaryToFeatureForAccesor} from './geojson-binary';\nimport {\n POINT_LAYER,\n LINE_LAYER,\n POLYGON_LAYER,\n getDefaultProps,\n forwardProps\n} from './sub-layer-map';\n\nimport {getGeojsonFeatures, SeparatedGeometries, separateGeojsonFeatures} from './geojson';\nimport {createLayerPropsFromFeatures, createLayerPropsFromBinary} from './geojson-layer-props';\n\n/** All properties supported by GeoJsonLayer */\nexport type GeoJsonLayerProps = _GeoJsonLayerProps &\n CompositeLayerProps;\n\n/** Properties added by GeoJsonLayer */\nexport type _GeoJsonLayerProps = {\n /**\n * How to render Point and MultiPoint features in the data.\n *\n * Supported types are:\n * * `'circle'`\n * * `'icon'`\n * * `'text'`\n *\n * @default 'circle'\n */\n pointType?: string;\n} & _GeoJsonLayerFillProps &\n _GeoJsonLayerStrokeProps &\n _GeoJsonLayer3DProps &\n _GeoJsonLayerPointCircleProps &\n _GeojsonLayerIconPointProps &\n _GeojsonLayerTextPointProps;\n\n/** GeoJsonLayer fill options. */\ntype _GeoJsonLayerFillProps = {\n /**\n * Whether to draw a filled polygon (solid fill).\n *\n * Note that only the area between the outer polygon and any holes will be filled.\n *\n * @default true\n */\n filled?: boolean;\n\n /**\n * Fill collor value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n};\n\n/** GeoJsonLayer stroke options. */\ntype _GeoJsonLayerStrokeProps = {\n /**\n * Whether to draw an outline around the polygon (solid fill).\n *\n * Note that both the outer polygon as well the outlines of any holes will be drawn.\n *\n * @default true\n */\n stroked?: boolean;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Line width value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineWidth?: Accessor;\n\n /**\n * The units of the line width, one of `meters`, `common`, and `pixels`.\n *\n * @default 'meters'\n * @see Unit.\n */\n lineWidthUnits?: Unit;\n\n /**\n * A multiplier that is applied to all line widths\n *\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum line width in pixels.\n *\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum line width in pixels\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n *\n * @default false\n */\n lineJointRounded?: boolean;\n\n /**\n * The maximum extent of a joint in ratio to the stroke width.\n *\n * Only works if `lineJointRounded` is false.\n *\n * @default 4\n */\n lineMiterLimit?: number;\n\n /**\n * Type of line caps.\n *\n * If `true`, draw round caps. Otherwise draw square caps.\n *\n * @default false\n */\n lineCapRounded?: boolean;\n\n /**\n * If `true`, extrude the line in screen space (width always faces the camera).\n * If `false`, the width always faces up.\n *\n * @default false\n */\n lineBillboard?: boolean;\n};\n\n/** GeoJsonLayer 3D options. */\ntype _GeoJsonLayer3DProps = {\n /**\n * Extrude Polygon and MultiPolygon features along the z-axis if set to true\n *\n * Based on the elevations provided by the `getElevation` accessor.\n *\n * @default false\n */\n extruded?: boolean;\n\n /**\n * Whether to generate a line wireframe of the hexagon.\n *\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * Elevation valur or accessor.\n *\n * Only used if `extruded: true`.\n *\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * Elevation multiplier.\n *\n * The final elevation is calculated by `elevationScale * getElevation(d)`.\n * `elevationScale` is a handy property to scale all elevation without updating the data.\n *\n * @default 1\n */\n elevationScale?: boolean;\n\n /**\n * Material settings for lighting effect. Applies to extruded polgons.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\n/** GeoJsonLayer Properties forwarded to `ScatterPlotLayer` if `pointType` is `'circle'` */\nexport type _GeoJsonLayerPointCircleProps = {\n getPointRadius?: Accessor;\n pointRadiusUnits?: Unit;\n pointRadiusScale?: number;\n pointRadiusMinPixels?: number;\n pointRadiusMaxPixels?: number;\n pointAntialiasing?: boolean;\n pointBillboard?: boolean;\n\n /** @deprecated use getPointRadius */\n getRadius?: Accessor;\n};\n\n/** GeoJsonLayer properties forwarded to `IconLayer` if `pointType` is `'icon'` */\ntype _GeojsonLayerIconPointProps = {\n iconAtlas?: any;\n iconMapping?: any;\n getIcon?: Accessor;\n getIconSize?: Accessor;\n getIconColor?: Accessor;\n getIconAngle?: Accessor;\n getIconPixelOffset?: Accessor;\n iconSizeUnits?: Unit;\n iconSizeScale?: number;\n iconSizeMinPixels?: number;\n iconSizeMaxPixels?: number;\n iconBillboard?: boolean;\n iconAlphaCutoff?: number;\n};\n\n/** GeoJsonLayer properties forwarded to `TextLayer` if `pointType` is `'text'` */\ntype _GeojsonLayerTextPointProps = {\n getText?: Accessor;\n getTextColor?: Accessor;\n getTextAngle?: Accessor;\n getTextSize?: Accessor;\n getTextAnchor?: Accessor;\n getTextAlignmentBaseline?: Accessor;\n getTextPixelOffset?: Accessor;\n getTextBackgroundColor?: Accessor;\n getTextBorderColor?: Accessor;\n getTextBorderWidth?: Accessor;\n textSizeUnits?: Unit;\n textSizeScale?: number;\n textSizeMinPixels?: number;\n textSizeMaxPixels?: number;\n textCharacterSet?: any;\n textFontFamily?: string;\n textFontWeight?: number;\n textLineHeight?: number;\n textMaxWidth?: number;\n textWordBreak?: string; // TODO\n textBackground?: boolean;\n textBackgroundPadding?: number[];\n textOutlineColor?: Color;\n textOutlineWidth?: number;\n textBillboard?: boolean;\n textFontSettings?: any;\n};\n\nconst FEATURE_TYPES = ['points', 'linestrings', 'polygons'];\n\nconst defaultProps: DefaultProps = {\n ...getDefaultProps(POINT_LAYER.circle),\n ...getDefaultProps(POINT_LAYER.icon),\n ...getDefaultProps(POINT_LAYER.text),\n ...getDefaultProps(LINE_LAYER),\n ...getDefaultProps(POLYGON_LAYER),\n\n // Overwrite sub layer defaults\n stroked: true,\n filled: true,\n extruded: false,\n wireframe: false,\n iconAtlas: {type: 'object', value: null},\n iconMapping: {type: 'object', value: {}},\n getIcon: {type: 'accessor', value: f => f.properties.icon},\n getText: {type: 'accessor', value: f => f.properties.text},\n\n // Self props\n pointType: 'circle',\n\n // TODO: deprecated, remove in v9\n getRadius: {deprecatedFor: 'getPointRadius'}\n};\n\ntype GeoJsonPickingInfo = PickingInfo & {\n featureType?: string | null;\n info?: any;\n};\n\n/** Render GeoJSON formatted data as polygons, lines and points (circles, icons and/or texts). */\nexport default class GeoJsonLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends CompositeLayer> & ExtraProps> {\n static layerName = 'GeoJsonLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n this.state = {\n layerProps: {},\n features: {}\n };\n }\n\n updateState({props, changeFlags}: UpdateParameters): void {\n if (!changeFlags.dataChanged) {\n return;\n }\n const {data} = this.props;\n const binary =\n data && 'points' in (data as {}) && 'polygons' in (data as {}) && 'lines' in (data as {});\n\n this.setState({binary});\n\n if (binary) {\n this._updateStateBinary({props, changeFlags});\n } else {\n this._updateStateJSON({props, changeFlags});\n }\n }\n\n private _updateStateBinary({props, changeFlags}): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const layerProps = createLayerPropsFromBinary(props.data, this.encodePickingColor);\n this.setState({layerProps});\n }\n\n private _updateStateJSON({props, changeFlags}): void {\n const features: Feature[] = getGeojsonFeatures(props.data) as any;\n const wrapFeature = this.getSubLayerRow.bind(this);\n let newFeatures: SeparatedGeometries = {} as SeparatedGeometries;\n const featuresDiff = {};\n\n if (Array.isArray(changeFlags.dataChanged)) {\n const oldFeatures = this.state.features;\n for (const key in oldFeatures) {\n newFeatures[key] = oldFeatures[key].slice();\n featuresDiff[key] = [];\n }\n\n for (const dataRange of changeFlags.dataChanged) {\n const partialFeatures = separateGeojsonFeatures(features, wrapFeature, dataRange);\n for (const key in oldFeatures) {\n featuresDiff[key].push(\n replaceInRange({\n data: newFeatures[key],\n getIndex: f => f.__source.index,\n dataRange,\n replace: partialFeatures[key]\n })\n );\n }\n }\n } else {\n newFeatures = separateGeojsonFeatures(features, wrapFeature);\n }\n\n const layerProps = createLayerPropsFromFeatures(newFeatures, featuresDiff);\n\n this.setState({\n features: newFeatures,\n featuresDiff,\n layerProps\n });\n }\n\n getPickingInfo(params): GeoJsonPickingInfo {\n const info = super.getPickingInfo(params) as GeoJsonPickingInfo;\n const {index, sourceLayer} = info;\n info.featureType = FEATURE_TYPES.find(ft => sourceLayer!.id.startsWith(`${this.id}-${ft}-`));\n if (index >= 0 && sourceLayer!.id.startsWith(`${this.id}-points-text`) && this.state.binary) {\n info.index = (this.props.data as BinaryFeatures).points!.globalFeatureIds.value[index];\n }\n return info;\n }\n\n _updateAutoHighlight(info: GeoJsonPickingInfo): void {\n // All sub layers except the points layer use source feature index to encode the picking color\n // The points layer uses indices from the points data array.\n const pointLayerIdPrefix = `${this.id}-points-`;\n const sourceIsPoints = info.featureType === 'points';\n for (const layer of this.getSubLayers()) {\n if (layer.id.startsWith(pointLayerIdPrefix) === sourceIsPoints) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n private _renderPolygonLayer(): Layer | null {\n const {extruded, wireframe} = this.props;\n const {layerProps} = this.state;\n const id = 'polygons-fill';\n\n const PolygonFillLayer =\n this.shouldRenderSubLayer(id, layerProps.polygons.data) &&\n this.getSubLayerClass(id, POLYGON_LAYER.type);\n\n if (PolygonFillLayer) {\n const forwardedProps = forwardProps(this, POLYGON_LAYER.props);\n // Avoid building the lineColors attribute if wireframe is off\n const useLineColor = extruded && wireframe;\n if (!useLineColor) {\n delete forwardedProps.getLineColor;\n }\n // using a legacy API to invalid lineColor attributes\n forwardedProps.updateTriggers.lineColors = useLineColor;\n\n return new PolygonFillLayer(\n forwardedProps,\n this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.polygons\n );\n }\n return null;\n }\n\n private _renderLineLayers(): (Layer | false)[] | null {\n const {extruded, stroked} = this.props;\n const {layerProps} = this.state;\n const polygonStrokeLayerId = 'polygons-stroke';\n const lineStringsLayerId = 'linestrings';\n\n const PolygonStrokeLayer =\n !extruded &&\n stroked &&\n this.shouldRenderSubLayer(polygonStrokeLayerId, layerProps.polygonsOutline.data) &&\n this.getSubLayerClass(polygonStrokeLayerId, LINE_LAYER.type);\n const LineStringsLayer =\n this.shouldRenderSubLayer(lineStringsLayerId, layerProps.lines.data) &&\n this.getSubLayerClass(lineStringsLayerId, LINE_LAYER.type);\n\n if (PolygonStrokeLayer || LineStringsLayer) {\n const forwardedProps = forwardProps(this, LINE_LAYER.props);\n\n return [\n PolygonStrokeLayer &&\n new PolygonStrokeLayer(\n forwardedProps,\n this.getSubLayerProps({\n id: polygonStrokeLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.polygonsOutline\n ),\n\n LineStringsLayer &&\n new LineStringsLayer(\n forwardedProps,\n this.getSubLayerProps({\n id: lineStringsLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }),\n layerProps.lines\n )\n ];\n }\n return null;\n }\n\n private _renderPointLayers(): Layer[] | null {\n const {pointType} = this.props;\n const {layerProps, binary} = this.state;\n let {highlightedObjectIndex} = this.props;\n\n if (!binary && Number.isFinite(highlightedObjectIndex)) {\n highlightedObjectIndex = layerProps.points.data.findIndex(\n d => d.__source.index === highlightedObjectIndex\n );\n }\n\n // Avoid duplicate sub layer ids\n const types = new Set(pointType.split('+'));\n const pointLayers: Layer[] = [];\n for (const type of types) {\n const id = `points-${type}`;\n const PointLayerMapping = POINT_LAYER[type];\n const PointsLayer: _ConstructorOf =\n PointLayerMapping &&\n this.shouldRenderSubLayer(id, layerProps.points.data) &&\n this.getSubLayerClass(id, PointLayerMapping.type);\n if (PointsLayer) {\n const forwardedProps = forwardProps(this, PointLayerMapping.props);\n let pointsLayerProps = layerProps.points;\n\n if (type === 'text' && binary) {\n // Picking colors are per-point but for text per-character are required\n // getPickingInfo() maps back to the correct index\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {instancePickingColors, ...rest} = pointsLayerProps.data.attributes;\n pointsLayerProps = {\n ...pointsLayerProps,\n data: {...pointsLayerProps.data, attributes: rest}\n };\n }\n\n pointLayers.push(\n new PointsLayer(\n forwardedProps,\n this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers,\n highlightedObjectIndex\n }),\n pointsLayerProps\n )\n );\n }\n }\n return pointLayers;\n }\n\n renderLayers() {\n const {extruded} = this.props;\n\n const polygonFillLayer = this._renderPolygonLayer();\n const lineLayers = this._renderLineLayers();\n const pointLayers = this._renderPointLayers();\n\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonFillLayer,\n lineLayers,\n pointLayers,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonFillLayer\n ];\n }\n\n protected getSubLayerAccessor(accessor: Accessor): Accessor {\n const {binary} = this.state;\n if (!binary || typeof accessor !== 'function') {\n return super.getSubLayerAccessor(accessor);\n }\n\n return (object, info) => {\n const {data, index} = info;\n const feature = binaryToFeatureForAccesor(data as unknown as BinaryFeatureTypes, index);\n // @ts-ignore (TS2349) accessor is always function\n return accessor(feature, info);\n };\n }\n}\n","/* global document */\nimport GL from '@luma.gl/constants';\nimport {Texture2D, copyToTexture} from '@luma.gl/core';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {load} from '@loaders.gl/core';\nimport {createIterable} from '@deck.gl/core';\n\nimport type {AccessorFunction} from '@deck.gl/core';\n\nconst DEFAULT_CANVAS_WIDTH = 1024;\nconst DEFAULT_BUFFER = 4;\n\nconst noop = () => {};\n\nconst DEFAULT_TEXTURE_PARAMETERS = {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n // GL.LINEAR is the default value but explicitly set it here\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // for texture boundary artifact\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\n\ntype IconDef = {\n /** Width of the icon */\n width: number;\n /** Height of the icon */\n height: number;\n /** Horizontal position of icon anchor. Default: half width. */\n anchorX?: number;\n /** Vertical position of icon anchor. Default: half height. */\n anchorY?: number;\n /**\n * Whether the icon is treated as a transparency mask.\n * If `true`, color defined by `getColor` is applied.\n * If `false`, pixel color from the icon image is applied.\n * @default false\n */\n mask?: boolean;\n};\n\nexport type UnpackedIcon = {\n /** Url to fetch the icon */\n url: string;\n /** Unique identifier of the icon. Icons of the same id are only fetched once. Fallback to `url` if not specified. */\n id?: string;\n} & IconDef;\n\ntype PrepackedIcon = {\n /** Left position of the icon on the atlas */\n x: number;\n /** Top position of the icon on the atlas */\n y: number;\n} & IconDef;\n\nexport type IconMapping = Record;\n\nexport type LoadIconErrorContext = {\n error: Error;\n /** The URL that was trying to fetch */\n url: string;\n /** The original data object that requested this icon */\n source: any;\n /** The index of the original data object that requested this icon */\n sourceIndex: number;\n /** The load options used for the fetch */\n loadOptions: any;\n};\n\nfunction nextPowOfTwo(number: number): number {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n\n// update comment to create a new texture and copy original data.\nfunction resizeImage(\n ctx: CanvasRenderingContext2D,\n imageData: HTMLImageElement | ImageBitmap,\n width: number,\n height: number\n): HTMLImageElement | HTMLCanvasElement | ImageBitmap {\n if (width === imageData.width && height === imageData.height) {\n return imageData;\n }\n\n ctx.canvas.height = height;\n ctx.canvas.width = width;\n\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n // image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight\n ctx.drawImage(imageData, 0, 0, imageData.width, imageData.height, 0, 0, width, height);\n\n return ctx.canvas;\n}\n\nfunction getIconId(icon: UnpackedIcon): string {\n return icon && (icon.id || icon.url);\n}\n\n// resize texture without losing original data\nfunction resizeTexture(\n texture: Texture2D,\n width: number,\n height: number,\n parameters: any\n): Texture2D {\n const oldWidth = texture.width;\n const oldHeight = texture.height;\n\n const newTexture = new Texture2D(texture.gl, {width, height, parameters});\n copyToTexture(texture, newTexture, {\n targetY: 0,\n width: oldWidth,\n height: oldHeight\n });\n\n texture.delete();\n return newTexture;\n}\n\n// traverse icons in a row of icon atlas\n// extend each icon with left-top coordinates\nfunction buildRowMapping(\n mapping: IconMapping,\n columns: {\n icon: UnpackedIcon;\n xOffset: number;\n }[],\n yOffset: number\n): void {\n for (let i = 0; i < columns.length; i++) {\n const {icon, xOffset} = columns[i];\n const id = getIconId(icon);\n mapping[id] = {\n ...icon,\n x: xOffset,\n y: yOffset\n };\n }\n}\n\n/**\n * Generate coordinate mapping to retrieve icon left-top position from an icon atlas\n */\nexport function buildMapping({\n icons,\n buffer,\n mapping = {},\n xOffset = 0,\n yOffset = 0,\n rowHeight = 0,\n canvasWidth\n}: {\n /** list of icon definitions */\n icons: UnpackedIcon[];\n /** add bleeding buffer to the right and bottom side of the image */\n buffer: number;\n /** right position of last icon in old mapping */\n xOffset: number;\n /** top position in last icon in old mapping */\n yOffset: number;\n /** height of the last icon's row */\n rowHeight: number;\n /** max width of canvas */\n canvasWidth: number;\n mapping: IconMapping;\n}): {\n mapping: IconMapping;\n rowHeight: number;\n xOffset: number;\n yOffset: number;\n canvasWidth: number;\n canvasHeight: number;\n} {\n let columns: {\n icon: UnpackedIcon;\n xOffset: number;\n }[] = [];\n // Strategy to layout all the icons into a texture:\n // traverse the icons sequentially, layout the icons from left to right, top to bottom\n // when the sum of the icons width is equal or larger than canvasWidth,\n // move to next row starting from total height so far plus max height of the icons in previous row\n // row width is equal to canvasWidth\n // row height is decided by the max height of the icons in that row\n // mapping coordinates of each icon is its left-top position in the texture\n for (let i = 0; i < icons.length; i++) {\n const icon = icons[i];\n const id = getIconId(icon);\n\n if (!mapping[id]) {\n const {height, width} = icon;\n\n // fill one row\n if (xOffset + width + buffer > canvasWidth) {\n buildRowMapping(mapping, columns, yOffset);\n\n xOffset = 0;\n yOffset = rowHeight + yOffset + buffer;\n rowHeight = 0;\n columns = [];\n }\n\n columns.push({\n icon,\n xOffset\n });\n\n xOffset = xOffset + width + buffer;\n rowHeight = Math.max(rowHeight, height);\n }\n }\n\n if (columns.length > 0) {\n buildRowMapping(mapping, columns, yOffset);\n }\n\n return {\n mapping,\n rowHeight,\n xOffset,\n yOffset,\n canvasWidth,\n canvasHeight: nextPowOfTwo(rowHeight + yOffset + buffer)\n };\n}\n\n// extract icons from data\n// return icons should be unique, and not cached or cached but url changed\nexport function getDiffIcons(\n data: any,\n getIcon: AccessorFunction | null,\n cachedIcons: Record\n): Record<\n string,\n UnpackedIcon & {\n source: any;\n sourceIndex: number;\n }\n> | null {\n if (!data || !getIcon) {\n return null;\n }\n\n cachedIcons = cachedIcons || {};\n const icons = {};\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const icon = getIcon(object, objectInfo);\n const id = getIconId(icon);\n\n if (!icon) {\n throw new Error('Icon is missing.');\n }\n\n if (!icon.url) {\n throw new Error('Icon url is missing.');\n }\n\n if (!icons[id] && (!cachedIcons[id] || icon.url !== cachedIcons[id].url)) {\n icons[id] = {...icon, source: object, sourceIndex: objectInfo.index};\n }\n }\n return icons;\n}\n\nexport default class IconManager {\n gl: WebGLRenderingContext;\n\n private onUpdate: () => void;\n private onError: (context: LoadIconErrorContext) => void;\n private _loadOptions: any = null;\n private _texture: Texture2D | null = null;\n private _externalTexture: Texture2D | null = null;\n private _mapping: IconMapping = {};\n private _textureParameters: Record | null = null;\n\n /** count of pending requests to fetch icons */\n private _pendingCount: number = 0;\n\n private _autoPacking: boolean = false;\n\n // / internal state used for autoPacking\n\n private _xOffset: number = 0;\n private _yOffset: number = 0;\n private _rowHeight: number = 0;\n private _buffer: number = DEFAULT_BUFFER;\n private _canvasWidth: number = DEFAULT_CANVAS_WIDTH;\n private _canvasHeight: number = 0;\n private _canvas: HTMLCanvasElement | null = null;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n onUpdate = noop,\n onError = noop\n }: {\n /** Callback when the texture updates */\n onUpdate: () => void;\n /** Callback when an error is encountered */\n onError: (context: LoadIconErrorContext) => void;\n }\n ) {\n this.gl = gl;\n this.onUpdate = onUpdate;\n this.onError = onError;\n }\n\n finalize(): void {\n this._texture?.delete();\n }\n\n getTexture(): Texture2D | null {\n return this._texture || this._externalTexture;\n }\n\n getIconMapping(icon: string | UnpackedIcon): PrepackedIcon {\n const id = this._autoPacking ? getIconId(icon as UnpackedIcon) : (icon as string);\n return this._mapping[id] || {};\n }\n\n setProps({\n loadOptions,\n autoPacking,\n iconAtlas,\n iconMapping,\n textureParameters\n }: {\n loadOptions?: any;\n autoPacking?: boolean;\n iconAtlas?: Texture2D | null;\n iconMapping?: IconMapping | null;\n textureParameters?: Record | null;\n }) {\n if (loadOptions) {\n this._loadOptions = loadOptions;\n }\n\n if (autoPacking !== undefined) {\n this._autoPacking = autoPacking;\n }\n\n if (iconMapping) {\n this._mapping = iconMapping;\n }\n\n if (iconAtlas) {\n this._texture?.delete();\n this._texture = null;\n this._externalTexture = iconAtlas;\n }\n\n if (textureParameters) {\n this._textureParameters = textureParameters;\n }\n }\n\n get isLoaded(): boolean {\n return this._pendingCount === 0;\n }\n\n packIcons(data: any, getIcon: AccessorFunction): void {\n if (!this._autoPacking || typeof document === 'undefined') {\n return;\n }\n\n const icons = Object.values(getDiffIcons(data, getIcon, this._mapping) || {});\n\n if (icons.length > 0) {\n // generate icon mapping\n const {mapping, xOffset, yOffset, rowHeight, canvasHeight} = buildMapping({\n icons,\n buffer: this._buffer,\n canvasWidth: this._canvasWidth,\n mapping: this._mapping,\n rowHeight: this._rowHeight,\n xOffset: this._xOffset,\n yOffset: this._yOffset\n });\n\n this._rowHeight = rowHeight;\n this._mapping = mapping;\n this._xOffset = xOffset;\n this._yOffset = yOffset;\n this._canvasHeight = canvasHeight;\n\n // create new texture\n if (!this._texture) {\n this._texture = new Texture2D(this.gl, {\n width: this._canvasWidth,\n height: this._canvasHeight,\n parameters: this._textureParameters || DEFAULT_TEXTURE_PARAMETERS\n });\n }\n\n if (this._texture.height !== this._canvasHeight) {\n this._texture = resizeTexture(\n this._texture,\n this._canvasWidth,\n this._canvasHeight,\n this._textureParameters || DEFAULT_TEXTURE_PARAMETERS\n );\n }\n\n this.onUpdate();\n\n // load images\n this._canvas = this._canvas || document.createElement('canvas');\n this._loadIcons(icons);\n }\n }\n\n private _loadIcons(\n icons: (UnpackedIcon & {\n source: any;\n sourceIndex: number;\n })[]\n ): void {\n // This method is only called in the auto packing case, where _canvas is defined\n const ctx = this._canvas!.getContext('2d') as CanvasRenderingContext2D;\n\n for (const icon of icons) {\n this._pendingCount++;\n load(icon.url, ImageLoader, this._loadOptions)\n .then(imageData => {\n const id = getIconId(icon);\n const {x, y, width, height} = this._mapping[id];\n\n const data = resizeImage(ctx, imageData, width, height);\n\n this._texture.setSubImageData({\n data,\n x,\n y,\n width,\n height\n });\n\n // Call to regenerate mipmaps after modifying texture(s)\n this._texture.generateMipmap();\n\n this.onUpdate();\n })\n .catch(error => {\n this.onError({\n url: icon.url,\n source: icon.source,\n sourceIndex: icon.sourceIndex,\n loadOptions: this._loadOptions,\n error\n });\n })\n .finally(() => {\n this._pendingCount--;\n });\n }\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {Layer, project32, picking, log, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './icon-layer-vertex.glsl';\nimport fs from './icon-layer-fragment.glsl';\nimport IconManager from './icon-manager';\n\nimport type {\n LayerProps,\n Accessor,\n AccessorFunction,\n Position,\n Color,\n Texture,\n Unit,\n UpdateParameters,\n LayerContext,\n DefaultProps\n} from '@deck.gl/core';\nimport type {UnpackedIcon, IconMapping, LoadIconErrorContext} from './icon-manager';\n\ntype _IconLayerProps = {\n /** A prepacked image that contains all icons. */\n iconAtlas?: string | Texture;\n /** Icon names mapped to icon definitions, or a URL to load such mapping from a JSON file. */\n iconMapping?: string | IconMapping;\n\n /** Icon size multiplier.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The units of the icon size, one of `meters`, `common`, and `pixels`.\n *\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n /**\n * The minimum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too small when zoomed out.\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too big when zoomed in.\n */\n sizeMaxPixels?: number;\n /** If `true`, the icon always faces camera. Otherwise the icon faces up (z)\n * @default true\n */\n billboard?: boolean;\n /**\n * Discard pixels whose opacity is below this threshold.\n * A discarded pixel would create a \"hole\" in the icon that is not considered part of the object.\n * @default 0.05\n */\n alphaCutoff?: number;\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Icon definition accessor.\n * Should return the icon id if using pre-packed icons (`iconAtlas` + `iconMapping`).\n * Return an object that defines the icon if using auto-packing.\n */\n getIcon?: AccessorFunction | AccessorFunction;\n /** Icon color accessor.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /** Icon size accessor.\n * @default 1\n */\n getSize?: Accessor;\n /** Icon rotation accessor, in degrees.\n * @default 0\n */\n getAngle?: Accessor;\n /**\n * Icon offsest accessor, in pixels.\n * @default [0, 0]\n */\n getPixelOffset?: Accessor;\n /**\n * Callback called if the attempt to fetch an icon returned by `getIcon` fails.\n */\n onIconError?: ((context: LoadIconErrorContext) => void) | null;\n\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n};\n\nexport type IconLayerProps = _IconLayerProps & LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n iconAtlas: {type: 'image', value: null, async: true},\n iconMapping: {type: 'object', value: {}, async: true},\n sizeScale: {type: 'number', value: 1, min: 0},\n billboard: true,\n sizeUnits: 'pixels',\n sizeMinPixels: {type: 'number', min: 0, value: 0}, // min point radius in pixels\n sizeMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER}, // max point radius in pixels\n alphaCutoff: {type: 'number', value: 0.05, min: 0, max: 1},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getIcon: {type: 'accessor', value: x => x.icon},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getSize: {type: 'accessor', value: 1},\n getAngle: {type: 'accessor', value: 0},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n\n onIconError: {type: 'function', value: null, compare: false, optional: true}\n};\n\n/** Render raster icons at given coordinates. */\nexport default class IconLayer extends Layer<\n ExtraPropsT & Required<_IconLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'IconLayer';\n\n state!: {\n model?: Model;\n iconManager: IconManager;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.state = {\n iconManager: new IconManager(this.context.gl, {\n onUpdate: this._onUpdate.bind(this),\n onError: this._onError.bind(this)\n })\n };\n\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceOffsets: {\n size: 2,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceOffset\n },\n instanceIconFrames: {\n size: 4,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceIconFrame\n },\n instanceColorModes: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceColorMode\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instancePixelOffset: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n }\n });\n /* eslint-enable max-len */\n }\n\n /* eslint-disable max-statements, complexity */\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager();\n const {iconAtlas, iconMapping, data, getIcon, textureParameters} = props;\n const {iconManager} = this.state;\n\n // internalState is always defined during updateState\n const prePacked = iconAtlas || this.internalState!.isAsyncPropLoading('iconAtlas');\n iconManager.setProps({\n loadOptions: props.loadOptions,\n autoPacking: !prePacked,\n iconAtlas,\n iconMapping: prePacked ? (iconMapping as IconMapping) : null,\n textureParameters\n });\n\n // prepacked iconAtlas from user\n if (prePacked) {\n if (oldProps.iconMapping !== props.iconMapping) {\n attributeManager!.invalidate('getIcon');\n }\n } else if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getIcon))\n ) {\n // Auto packing - getIcon is expected to return an object\n iconManager.packIcons(data, getIcon as AccessorFunction);\n }\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager!.invalidateAll();\n }\n }\n /* eslint-enable max-statements, complexity */\n\n get isLoaded(): boolean {\n return super.isLoaded && this.state.iconManager.isLoaded;\n }\n\n finalizeState(context: LayerContext): void {\n super.finalizeState(context);\n // Release resources held by the icon manager\n this.state.iconManager.finalize();\n }\n\n draw({uniforms}): void {\n const {sizeScale, sizeMinPixels, sizeMaxPixels, sizeUnits, billboard, alphaCutoff} = this.props;\n const {iconManager} = this.state;\n\n const iconsTexture = iconManager.getTexture();\n if (iconsTexture) {\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n iconsTexture,\n iconsTextureDim: [iconsTexture.width, iconsTexture.height],\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeMinPixels,\n sizeMaxPixels,\n billboard,\n alphaCutoff\n })\n .draw();\n }\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // The icon-layer vertex shader uses 2d positions\n // specifed via: attribute vec2 positions;\n const positions = [-1, -1, -1, 1, 1, 1, 1, -1];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n attributes: {\n // The size must be explicitly passed here otherwise luma.gl\n // will default to assuming that positions are 3D (x,y,z)\n positions: {\n size: 2,\n value: new Float32Array(positions)\n }\n }\n }),\n isInstanced: true\n });\n }\n\n private _onUpdate(): void {\n this.setNeedsRedraw();\n }\n\n private _onError(evt: LoadIconErrorContext): void {\n const onIconError = this.getCurrentLayer()?.props.onIconError;\n if (onIconError) {\n onIconError(evt);\n } else {\n log.error(evt.error.message)();\n }\n }\n\n protected getInstanceOffset(icon: string): number[] {\n const {\n width,\n height,\n anchorX = width / 2,\n anchorY = height / 2\n } = this.state.iconManager.getIconMapping(icon);\n return [width / 2 - anchorX, height / 2 - anchorY];\n }\n\n protected getInstanceColorMode(icon: string): number {\n const mapping = this.state.iconManager.getIconMapping(icon);\n return mapping.mask ? 1 : 0;\n }\n\n protected getInstanceIconFrame(icon: string): number[] {\n const {x, y, width, height} = this.state.iconManager.getIconMapping(icon);\n return [x, y, width, height];\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\nattribute vec2 instancePixelOffset;\n\nuniform float sizeScale;\nuniform vec2 iconsTextureDim;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform bool billboard;\nuniform int sizeUnits;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = positions;\n geometry.pickingColor = instancePickingColors;\n uv = positions;\n\n vec2 iconSize = instanceIconFrames.zw;\n // convert size in meters to pixels, then scaled and clamp\n \n // project meters to pixels and clamp to limits \n float sizePixels = clamp(\n project_size_to_pixel(instanceSizes * sizeScale, sizeUnits), \n sizeMinPixels, sizeMaxPixels\n );\n\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : sizePixels / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * instanceScale;\n pixelOffset += instancePixelOffset;\n pixelOffset.y *= -1.0;\n\n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = vec3(pixelOffset, 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n\n } else {\n vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\n DECKGL_FILTER_SIZE(offset_common, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position); \n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vColor = instanceColors;\n DECKGL_FILTER_COLOR(vColor, geometry);\n\n vColorMode = instanceColorModes;\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME icon-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D iconsTexture;\nuniform float alphaCutoff;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n vec4 texColor = texture2D(iconsTexture, vTextureCoords);\n\n // if colorMode == 0, use pixel color from the texture\n // if colorMode == 1 or rendering picking buffer, use texture as transparency mask\n vec3 color = mix(texColor.rgb, vColor.rgb, vColorMode);\n // Take the global opacity and the alpha from vColor into account for the alpha component\n float a = texColor.a * opacity * vColor.a;\n\n if (a < alphaCutoff) {\n discard;\n }\n\n gl_FragColor = vec4(color, a);\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","import {lerp} from '@math.gl/core';\n\nconst DEFAULT_INDICES = new Uint16Array([0, 2, 1, 0, 3, 2]);\nconst DEFAULT_TEX_COORDS = new Float32Array([0, 1, 0, 0, 1, 0, 1, 1]);\n\n/*\n 1 ---- 2\n | |\n | |\n 0 ---- 3\n*/\n/* eslint-disable max-statements */\nexport default function createMesh(bounds, resolution) {\n if (!resolution) {\n return createQuad(bounds);\n }\n const maxXSpan = Math.max(\n Math.abs(bounds[0][0] - bounds[3][0]),\n Math.abs(bounds[1][0] - bounds[2][0])\n );\n const maxYSpan = Math.max(\n Math.abs(bounds[1][1] - bounds[0][1]),\n Math.abs(bounds[2][1] - bounds[3][1])\n );\n const uCount = Math.ceil(maxXSpan / resolution) + 1;\n const vCount = Math.ceil(maxYSpan / resolution) + 1;\n\n const vertexCount = (uCount - 1) * (vCount - 1) * 6;\n const indices = new Uint32Array(vertexCount);\n const texCoords = new Float32Array(uCount * vCount * 2);\n const positions = new Float64Array(uCount * vCount * 3);\n\n // Tesselate\n let vertex = 0;\n let index = 0;\n for (let u = 0; u < uCount; u++) {\n const ut = u / (uCount - 1);\n for (let v = 0; v < vCount; v++) {\n const vt = v / (vCount - 1);\n const p = interpolateQuad(bounds, ut, vt);\n\n positions[vertex * 3 + 0] = p[0];\n positions[vertex * 3 + 1] = p[1];\n positions[vertex * 3 + 2] = p[2] || 0;\n\n texCoords[vertex * 2 + 0] = ut;\n texCoords[vertex * 2 + 1] = 1 - vt;\n\n if (u > 0 && v > 0) {\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - vCount - 1;\n indices[index++] = vertex - 1;\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - 1;\n indices[index++] = vertex;\n }\n\n vertex++;\n }\n }\n return {\n vertexCount,\n positions,\n indices,\n texCoords\n };\n}\n\nfunction createQuad(bounds) {\n const positions = new Float64Array(12);\n // [[minX, minY], [minX, maxY], [maxX, maxY], [maxX, minY]]\n for (let i = 0; i < bounds.length; i++) {\n positions[i * 3 + 0] = bounds[i][0];\n positions[i * 3 + 1] = bounds[i][1];\n positions[i * 3 + 2] = bounds[i][2] || 0;\n }\n\n return {\n vertexCount: 6,\n positions,\n indices: DEFAULT_INDICES,\n texCoords: DEFAULT_TEX_COORDS\n };\n}\n\nfunction interpolateQuad(quad, ut, vt) {\n return lerp(lerp(quad[0], quad[1], vt), lerp(quad[3], quad[2], vt), ut);\n}\n","export default `\n#define SHADER_NAME bitmap-layer-vertex-shader\n\nattribute vec2 texCoords;\nattribute vec3 positions;\nattribute vec3 positions64Low;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float coordinateConversion;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n\n if (coordinateConversion < -0.5) {\n vTexPos = geometry.position.xy + project_uCommonOrigin.xy;\n } else if (coordinateConversion > 0.5) {\n vTexPos = geometry.worldPosition.xy;\n }\n\n vec4 color = vec4(0.0);\n DECKGL_FILTER_COLOR(color, geometry);\n}\n`;\n","/**\n * Pack the top 12 bits of two normalized floats into 3 8-bit (rgb) values\n * This enables addressing 4096x4096 individual pixels\n *\n * returns vec3 encoded RGB colors\n * result.r - top 8 bits of u\n * result.g - top 8 bits of v\n * result.b - next 4 bits of u and v: (u + v * 16)\n */\nconst packUVsIntoRGB = `\nvec3 packUVsIntoRGB(vec2 uv) {\n // Extract the top 8 bits. We want values to be truncated down so we can add a fraction\n vec2 uv8bit = floor(uv * 256.);\n\n // Calculate the normalized remainders of u and v parts that do not fit into 8 bits\n // Scale and clamp to 0-1 range\n vec2 uvFraction = fract(uv * 256.);\n vec2 uvFraction4bit = floor(uvFraction * 16.);\n\n // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates\n float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.;\n\n return vec3(uv8bit, fractions) / 255.;\n}\n`;\n\nexport default `\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nvarying vec2 vTexCoord;\nvarying vec2 vTexPos;\n\nuniform float desaturate;\nuniform vec4 transparentColor;\nuniform vec3 tintColor;\nuniform float opacity;\n\nuniform float coordinateConversion;\nuniform vec4 bounds;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n return mix(transparentColor, vec4(color, 1.0), alpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bounds[0]) / (bounds[2] - bounds[0]),\n (pos.y - bounds[3]) / (bounds[1] - bounds[3])\n );\n}\n\n${packUVsIntoRGB}\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture2D(bitmapTexture, uv);\n\n gl_FragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n\n if (picking_uActive) {\n // Since instance information is not used, we can use picking color for pixel index\n gl_FragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n`;\n","// Copyright (c) 2015 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {\n Layer,\n project32,\n picking,\n CoordinateSystem,\n COORDINATE_SYSTEM,\n LayerProps,\n PickingInfo,\n GetPickingInfoParams,\n UpdateParameters,\n Color,\n Texture,\n Position,\n DefaultProps\n} from '@deck.gl/core';\nimport {Model, Geometry} from '@luma.gl/core';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\n\nimport createMesh from './create-mesh';\n\nimport vs from './bitmap-layer-vertex';\nimport fs from './bitmap-layer-fragment';\n\nconst defaultProps: DefaultProps = {\n image: {type: 'image', value: null, async: true},\n bounds: {type: 'array', value: [1, 0, 0, 1], compare: true},\n _imageCoordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n\n desaturate: {type: 'number', min: 0, max: 1, value: 0},\n // More context: because of the blending mode we're using for ground imagery,\n // alpha is not effective when blending the bitmap layers with the base map.\n // Instead we need to manually dim/blend rgb values with a background color.\n transparentColor: {type: 'color', value: [0, 0, 0, 0]},\n tintColor: {type: 'color', value: [255, 255, 255]}\n};\n\n/** All properties supported by BitmapLayer. */\nexport type BitmapLayerProps = _BitmapLayerProps & LayerProps;\nexport type BitmapBoundingBox =\n | [left: number, bottom: number, right: number, top: number]\n | [Position, Position, Position, Position];\n\n/** Properties added by BitmapLayer. */\ntype _BitmapLayerProps = {\n /**\n * The image to display.\n *\n * @default null\n */\n image?: string | Texture | null;\n\n /**\n * Supported formats:\n * - Coordinates of the bounding box of the bitmap `[left, bottom, right, top]`\n * - Coordinates of four corners of the bitmap, should follow the sequence of `[[left, bottom], [left, top], [right, top], [right, bottom]]`.\n * Each position could optionally contain a third component `z`.\n * @default [1, 0, 0, 1]\n */\n bounds?: BitmapBoundingBox;\n\n /**\n * > Note: this prop is experimental.\n *\n * Specifies how image coordinates should be geographically interpreted.\n * @default COORDINATE_SYSTEM.DEFAULT\n */\n _imageCoordinateSystem?: CoordinateSystem;\n\n /**\n * The desaturation of the bitmap. Between `[0, 1]`.\n * @default 0\n */\n desaturate?: number;\n\n /**\n * The color to use for transparent pixels, in `[r, g, b, a]`.\n * @default [0, 0, 0, 0]\n */\n transparentColor?: Color;\n\n /**\n * The color to tint the bitmap by, in `[r, g, b]`.\n * @default [255, 255, 255]\n */\n tintColor?: Color;\n\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n};\n\n/** Render a bitmap at specified boundaries. */\nexport default class BitmapLayer extends Layer<\n ExtraPropsT & Required<_BitmapLayerProps>\n> {\n static layerName = 'BitmapLayer';\n static defaultProps = defaultProps;\n\n state!: Layer['state'] & {\n disablePicking?: boolean;\n model?: Model;\n mesh?: any;\n coordinateConversion?: number;\n bounds?: number[];\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n attributeManager.remove(['instancePickingColors']);\n const noAlloc = true;\n\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n update: attribute => (attribute.value = this.state.mesh.indices),\n noAlloc\n },\n positions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n update: attribute => (attribute.value = this.state.mesh.positions),\n noAlloc\n },\n texCoords: {\n size: 2,\n update: attribute => (attribute.value = this.state.mesh.texCoords),\n noAlloc\n }\n });\n }\n\n updateState({props, oldProps, changeFlags}: UpdateParameters): void {\n // setup model first\n const attributeManager = this.getAttributeManager()!;\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager.invalidateAll();\n }\n\n if (props.bounds !== oldProps.bounds) {\n const oldMesh = this.state.mesh;\n const mesh = this._createMesh();\n this.state.model.setVertexCount(mesh.vertexCount);\n for (const key in mesh) {\n if (oldMesh && oldMesh[key] !== mesh[key]) {\n attributeManager.invalidate(key);\n }\n }\n this.setState({mesh, ...this._getCoordinateUniforms()});\n } else if (props._imageCoordinateSystem !== oldProps._imageCoordinateSystem) {\n this.setState(this._getCoordinateUniforms());\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const {image} = this.props;\n const info: PickingInfo & {bitmap?: any} = params.info;\n\n if (!info.color || !image) {\n info.bitmap = null;\n return info;\n }\n\n const {width, height} = image as Texture;\n\n // Picking color doesn't represent object index in this layer\n info.index = 0;\n\n // Calculate uv and pixel in bitmap\n const uv = unpackUVsFromRGB(info.color);\n\n const pixel = [Math.floor(uv[0] * (width as number)), Math.floor(uv[1] * (height as number))];\n\n info.bitmap = {\n size: {width, height}, // Size of bitmap\n uv, // Floating point precision in 0-1 range\n pixel // Truncated to integer and scaled to pixel size\n };\n\n return info;\n }\n\n // Override base Layer multi-depth picking logic\n disablePickingIndex() {\n this.setState({disablePicking: true});\n }\n\n restorePickingColors() {\n this.setState({disablePicking: false});\n }\n\n protected _updateAutoHighlight(info) {\n super._updateAutoHighlight({\n ...info,\n color: this.encodePickingColor(0)\n });\n }\n\n protected _createMesh() {\n const {bounds} = this.props;\n\n let normalizedBounds = bounds;\n // bounds as [minX, minY, maxX, maxY]\n if (isRectangularBounds(bounds)) {\n /*\n (minX0, maxY3) ---- (maxX2, maxY3)\n | |\n | |\n | |\n (minX0, minY1) ---- (maxX2, minY1)\n */\n normalizedBounds = [\n [bounds[0], bounds[1]],\n [bounds[0], bounds[3]],\n [bounds[2], bounds[3]],\n [bounds[2], bounds[1]]\n ];\n }\n\n return createMesh(normalizedBounds, this.context.viewport.resolution);\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n if (!gl) {\n return null;\n }\n\n /*\n 0,0 --- 1,0\n | |\n 0,1 --- 1,1\n */\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n vertexCount: 6\n }),\n isInstanced: false\n });\n }\n\n draw(opts) {\n const {uniforms, moduleParameters} = opts;\n const {model, coordinateConversion, bounds, disablePicking} = this.state;\n const {image, desaturate, transparentColor, tintColor} = this.props;\n\n if (moduleParameters.pickingActive && disablePicking) {\n return;\n }\n\n // // TODO fix zFighting\n // Render the image\n if (image && model) {\n model\n .setUniforms(uniforms)\n .setUniforms({\n bitmapTexture: image,\n desaturate,\n transparentColor: transparentColor.map(x => x / 255),\n tintColor: tintColor.slice(0, 3).map(x => x / 255),\n coordinateConversion,\n bounds\n })\n .draw();\n }\n }\n\n _getCoordinateUniforms() {\n const {LNGLAT, CARTESIAN, DEFAULT} = COORDINATE_SYSTEM;\n let {_imageCoordinateSystem: imageCoordinateSystem} = this.props;\n if (imageCoordinateSystem !== DEFAULT) {\n const {bounds} = this.props;\n if (!isRectangularBounds(bounds)) {\n throw new Error('_imageCoordinateSystem only supports rectangular bounds');\n }\n\n // The default behavior (linearly interpolated tex coords)\n const defaultImageCoordinateSystem = this.context.viewport.resolution ? LNGLAT : CARTESIAN;\n imageCoordinateSystem = imageCoordinateSystem === LNGLAT ? LNGLAT : CARTESIAN;\n\n if (imageCoordinateSystem === LNGLAT && defaultImageCoordinateSystem === CARTESIAN) {\n // LNGLAT in Mercator, e.g. display LNGLAT-encoded image in WebMercator projection\n return {coordinateConversion: -1, bounds};\n }\n if (imageCoordinateSystem === CARTESIAN && defaultImageCoordinateSystem === LNGLAT) {\n // Mercator in LNGLAT, e.g. display WebMercator encoded image in Globe projection\n const bottomLeft = lngLatToWorld([bounds[0], bounds[1]]);\n const topRight = lngLatToWorld([bounds[2], bounds[3]]);\n return {\n coordinateConversion: 1,\n bounds: [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]\n };\n }\n }\n return {\n coordinateConversion: 0,\n bounds: [0, 0, 0, 0]\n };\n }\n}\n\n/**\n * Decode uv floats from rgb bytes where b contains 4-bit fractions of uv\n * @param {number[]} color\n * @returns {number[]} uvs\n * https://stackoverflow.com/questions/30242013/glsl-compressing-packing-multiple-0-1-colours-var4-into-a-single-var4-variab\n */\nfunction unpackUVsFromRGB(color) {\n const [u, v, fracUV] = color;\n const vFrac = (fracUV & 0xf0) / 256;\n const uFrac = (fracUV & 0x0f) / 16;\n return [(u + uFrac) / 256, (v + vFrac) / 256];\n}\n\nfunction isRectangularBounds(\n bounds: [number, number, number, number] | [Position, Position, Position, Position]\n): bounds is [number, number, number, number] {\n return Number.isFinite(bounds[0]);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME line-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec3 instanceSourcePositions64Low;\nattribute vec3 instanceTargetPositions64Low;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute float instanceWidths;\n\nuniform float opacity;\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float useShortestPath;\nuniform int widthUnits;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n return dir_screenspace * offset_direction * width / 2.0;\n}\n\nvec3 splitLine(vec3 a, vec3 b, float x) {\n float t = (x - a.x) / (b.x - a.x);\n return vec3(x, mix(a.yz, b.yz, t));\n}\n\nvoid main(void) {\n geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;\n\n vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n vec3 source_world_64low = instanceSourcePositions64Low;\n vec3 target_world_64low = instanceTargetPositions64Low;\n\n if (useShortestPath > 0.5 || useShortestPath < -0.5) {\n source_world.x = mod(source_world.x + 180., 360.0) - 180.;\n target_world.x = mod(target_world.x + 180., 360.0) - 180.;\n float deltaLng = target_world.x - source_world.x;\n\n if (deltaLng * useShortestPath > 180.) {\n source_world.x += 360. * useShortestPath;\n source_world = splitLine(source_world, target_world, 180. * useShortestPath);\n source_world_64low = vec3(0.0);\n } else if (deltaLng * useShortestPath < -180.) {\n target_world.x += 360. * useShortestPath;\n target_world = splitLine(source_world, target_world, 180. * useShortestPath);\n target_world_64low = vec3(0.0);\n } else if (useShortestPath < 0.) {\n // Line is not split, abort\n gl_Position = vec4(0.);\n return;\n }\n }\n\n // Position\n vec4 source_commonspace;\n vec4 target_commonspace;\n vec4 source = project_position_to_clipspace(source_world, source_world_64low, vec3(0.), source_commonspace);\n vec4 target = project_position_to_clipspace(target_world, target_world_64low, vec3(0.), target_commonspace);\n \n // linear interpolation of source & target to pick right coord\n float segmentIndex = positions.x;\n vec4 p = mix(source, target, segmentIndex);\n geometry.position = mix(source_commonspace, target_commonspace, segmentIndex);\n uv = positions.xy;\n geometry.uv = uv;\n geometry.pickingColor = instancePickingColors;\n\n // Multiply out width and clamp to limits\n float widthPixels = clamp(\n project_size_to_pixel(instanceWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels\n );\n\n // extrude\n vec3 offset = vec3(\n getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels),\n 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n picking,\n UNIT,\n LayerProps,\n Unit,\n Position,\n Accessor,\n Color,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './line-layer-vertex.glsl';\nimport fs from './line-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n getSourcePosition: {type: 'accessor', value: x => x.sourcePosition},\n getTargetPosition: {type: 'accessor', value: x => x.targetPosition},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n\n widthUnits: 'pixels',\n widthScale: {type: 'number', value: 1, min: 0},\n widthMinPixels: {type: 'number', value: 0, min: 0},\n widthMaxPixels: {type: 'number', value: Number.MAX_SAFE_INTEGER, min: 0}\n};\n\n/** All properties supported by LineLayer. */\nexport type LineLayerProps = _LineLayerProps & LayerProps;\n\n/** Properties added by LineLayer. */\ntype _LineLayerProps = {\n /**\n * The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n widthUnits?: Unit;\n\n /**\n * The scaling multiplier for the width of each line.\n * @default 1\n */\n widthScale?: number;\n\n /**\n * The minimum line width in pixels.\n * @default 0\n */\n widthMinPixels?: number;\n\n /**\n * The maximum line width in pixels.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n\n /**\n * Source position of each object.\n * @default object => object.sourcePosition\n */\n getSourcePosition?: Accessor;\n\n /**\n * Target position of each object.\n * @default object => object.targetPosition\n */\n getTargetPosition?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n\n /**\n * Width of each object\n * @default 1\n */\n getWidth?: Accessor;\n};\n\n/**\n * A layer that renders straight lines joining pairs of source and target coordinates.\n */\nexport default class LineLayer extends Layer<\n ExtraProps & Required<_LineLayerProps>\n> {\n static layerName = 'LineLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n // This layer has its own wrapLongitude logic\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager()!;\n\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceSourcePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getSourcePosition'\n },\n instanceTargetPositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getTargetPosition'\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceWidths: {\n size: 1,\n transition: true,\n accessor: 'getWidth',\n defaultValue: 1\n }\n });\n /* eslint-enable max-len */\n }\n\n updateState(params: UpdateParameters): void {\n super.updateState(params);\n\n if (params.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}): void {\n const {widthUnits, widthScale, widthMinPixels, widthMaxPixels, wrapLongitude} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n widthUnits: UNIT[widthUnits],\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n useShortestPath: wrapLongitude ? 1 : 0\n })\n .draw();\n\n if (wrapLongitude) {\n // Render a second copy for the clipped lines at the 180th meridian\n this.state.model\n .setUniforms({\n useShortestPath: -1\n })\n .draw();\n }\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n /*\n * (0, -1)-------------_(1, -1)\n * | _,-\" |\n * o _,-\" o\n * | _,-\" |\n * (0, 1)\"-------------(1, 1)\n */\n const positions = [0, -1, 0, 0, 1, 0, 1, -1, 0, 1, 1, 0];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME line-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {CubeGeometry} from '@luma.gl/core';\nimport {UNIT} from '@deck.gl/core';\nimport ColumnLayer, {ColumnLayerProps} from './column-layer';\n\nimport type {DefaultProps} from '@deck.gl/core';\n\nconst defaultProps: DefaultProps = {\n cellSize: {type: 'number', min: 0, value: 1000},\n offset: {type: 'array', value: [1, 1]}\n};\n\n/** All properties supported by GridCellLayer. */\nexport type GridCellLayerProps = _GridCellLayerProps & ColumnLayerProps;\n\n/** Properties added by GridCellLayer. */\ntype _GridCellLayerProps = {\n /**\n * @default 1000\n */\n cellSize?: number;\n};\n\nexport default class GridCellLayer extends ColumnLayer<\n DataT,\n ExtraPropsT & Required<_GridCellLayerProps>\n> {\n static layerName = 'GridCellLayer';\n static defaultProps = defaultProps;\n\n getGeometry(diskResolution) {\n return new CubeGeometry();\n }\n\n draw({uniforms}) {\n const {elevationScale, extruded, offset, coverage, cellSize, angle, radiusUnits} = this.props;\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n radius: cellSize / 2,\n radiusUnits: UNIT[radiusUnits],\n angle,\n offset,\n extruded,\n coverage,\n elevationScale,\n edgeDistance: 1,\n isWireframe: false\n })\n .draw();\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {Tesselator} from '@deck.gl/core';\nimport {normalizePath} from './path';\n\nimport type {TypedArray} from '@math.gl/core';\nimport type {PathGeometry, FlatPathGeometry, NormalizedPathGeometry} from './path';\n\nconst START_CAP = 1;\nconst END_CAP = 2;\nconst INVALID = 4;\n\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PathTesselator extends Tesselator<\n PathGeometry,\n NormalizedPathGeometry,\n {\n fp64?: boolean;\n resolution?: number;\n wrapLongitude?: boolean;\n loop?: boolean;\n }\n> {\n constructor(opts) {\n super({\n ...opts,\n attributes: {\n // Padding covers shaderAttributes for last segment in largest case fp64\n // additional vertex + hi & low parts, 3 * 6\n positions: {\n size: 3,\n padding: 18,\n initialize: true,\n type: opts.fp64 ? Float64Array : Float32Array\n },\n segmentTypes: {size: 1, type: Uint8ClampedArray}\n }\n });\n }\n\n /** Get packed attribute by name */\n get(attributeName: string): TypedArray | null {\n return this.attributes[attributeName];\n }\n\n /* Implement base Tesselator interface */\n protected getGeometryFromBuffer(buffer) {\n if (this.normalize) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization\n return null;\n }\n\n /* Implement base Tesselator interface */\n protected normalizeGeometry(path: PathGeometry): number[][] | PathGeometry {\n if (this.normalize) {\n return normalizePath(path, this.positionSize, this.opts.resolution, this.opts.wrapLongitude);\n }\n return path;\n }\n\n /* Implement base Tesselator interface */\n protected getGeometrySize(path: NormalizedPathGeometry): number {\n if (isCut(path)) {\n let size = 0;\n for (const subPath of path) {\n size += this.getGeometrySize(subPath);\n }\n return size;\n }\n const numPoints = this.getPathLength(path);\n if (numPoints < 2) {\n // invalid path\n return 0;\n }\n if (this.isClosed(path)) {\n // minimum 3 vertices\n return numPoints < 3 ? 0 : numPoints + 2;\n }\n return numPoints;\n }\n\n /* Implement base Tesselator interface */\n protected updateGeometryAttributes(\n path: NormalizedPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ): void {\n if (context.geometrySize === 0) {\n return;\n }\n if (path && isCut(path)) {\n for (const subPath of path) {\n const geometrySize = this.getGeometrySize(subPath);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPath, context);\n context.vertexStart += geometrySize;\n }\n } else {\n this._updateSegmentTypes(path, context);\n this._updatePositions(path, context);\n }\n }\n\n private _updateSegmentTypes(\n path: FlatPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ) {\n const segmentTypes = this.attributes.segmentTypes as TypedArray;\n const isPathClosed = path ? this.isClosed(path) : false;\n const {vertexStart, geometrySize} = context;\n\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n segmentTypes.fill(0, vertexStart, vertexStart + geometrySize);\n if (isPathClosed) {\n segmentTypes[vertexStart] = INVALID;\n segmentTypes[vertexStart + geometrySize - 2] = INVALID;\n } else {\n segmentTypes[vertexStart] += START_CAP;\n segmentTypes[vertexStart + geometrySize - 2] += END_CAP;\n }\n segmentTypes[vertexStart + geometrySize - 1] = INVALID;\n }\n\n private _updatePositions(\n path: FlatPathGeometry | null,\n context: {\n vertexStart: number;\n geometrySize: number;\n }\n ) {\n const {positions} = this.attributes;\n if (!positions || !path) {\n return;\n }\n const {vertexStart, geometrySize} = context;\n const p = new Array(3);\n\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n for (let i = vertexStart, ptIndex = 0; ptIndex < geometrySize; i++, ptIndex++) {\n this.getPointOnPath(path, ptIndex, p);\n positions[i * 3] = p[0];\n positions[i * 3 + 1] = p[1];\n positions[i * 3 + 2] = p[2];\n }\n }\n\n // Utilities\n /** Returns the number of points in the path */\n private getPathLength(path: FlatPathGeometry): number {\n return path.length / this.positionSize;\n }\n\n /** Returns a point on the path at the specified index */\n private getPointOnPath(path: FlatPathGeometry, index: number, target: number[] = []): number[] {\n const {positionSize} = this;\n if (index * positionSize >= path.length) {\n // loop\n index += 1 - path.length / positionSize;\n }\n const i = index * positionSize;\n target[0] = path[i];\n target[1] = path[i + 1];\n target[2] = (positionSize === 3 && path[i + 2]) || 0;\n return target;\n }\n\n // Returns true if the first and last points are identical\n private isClosed(path: FlatPathGeometry): boolean {\n if (!this.normalize) {\n return Boolean(this.opts.loop);\n }\n const {positionSize} = this;\n const lastPointIndex = path.length - positionSize;\n return (\n path[0] === path[lastPointIndex] &&\n path[1] === path[lastPointIndex + 1] &&\n (positionSize === 2 || path[2] === path[lastPointIndex + 2])\n );\n }\n}\n\nfunction isCut(path: NormalizedPathGeometry): path is FlatPathGeometry[] {\n return Array.isArray(path[0]);\n}\n","import {cutPolylineByGrid, cutPolylineByMercatorBounds} from '@math.gl/polygon';\n\nimport type {NumericArray} from '@math.gl/core';\nimport type {Position} from '@deck.gl/core';\n\nexport type NestedPathGeometry = Position[];\nexport type FlatPathGeometry = NumericArray;\nexport type PathGeometry = NestedPathGeometry | FlatPathGeometry;\nexport type NormalizedPathGeometry = FlatPathGeometry[] | FlatPathGeometry;\n\n/**\n * Flattens a nested path object\n * Cut the feature if needed (globe projection, wrap longitude, etc.)\n * Returns a flat array of path positions, or a list of flat arrays representing multiple paths\n */\nexport function normalizePath(\n path: PathGeometry,\n size: number,\n gridResolution?: number,\n wrapLongitude?: boolean\n): number[][] | NumericArray {\n let flatPath: NumericArray;\n if (Array.isArray(path[0])) {\n const length = path.length * size;\n flatPath = new Array(length);\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < size; j++) {\n flatPath[i * size + j] = path[i][j] || 0;\n }\n }\n } else {\n flatPath = path as NumericArray;\n }\n if (gridResolution) {\n return cutPolylineByGrid(flatPath, {size, gridResolution});\n }\n if (wrapLongitude) {\n return cutPolylineByMercatorBounds(flatPath, {size});\n }\n return flatPath;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME path-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute float instanceTypes;\nattribute vec3 instanceStartPositions;\nattribute vec3 instanceEndPositions;\nattribute vec3 instanceLeftPositions;\nattribute vec3 instanceRightPositions;\nattribute vec3 instanceLeftPositions64Low;\nattribute vec3 instanceStartPositions64Low;\nattribute vec3 instanceEndPositions64Low;\nattribute vec3 instanceRightPositions64Low;\nattribute float instanceStrokeWidths;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float jointType;\nuniform float capType;\nuniform float miterLimit;\nuniform bool billboard;\nuniform int widthUnits;\n\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\nvarying vec2 vPathPosition;\nvarying float vPathLength;\nvarying float vJointType;\n\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\n\nfloat flipIfTrue(bool flag) {\n return -(float(flag) * 2. - 1.);\n}\n\n// calculate line join positions\nvec3 lineJoin(\n vec3 prevPoint, vec3 currPoint, vec3 nextPoint,\n vec2 width\n) {\n bool isEnd = positions.x > 0.0;\n // side of the segment - -1: left, 0: center, 1: right\n float sideOfPath = positions.y;\n float isJoint = float(sideOfPath == 0.0);\n\n vec3 deltaA3 = (currPoint - prevPoint);\n vec3 deltaB3 = (nextPoint - currPoint);\n\n mat3 rotationMatrix;\n bool needsRotation = !billboard && project_needs_rotation(currPoint, rotationMatrix);\n if (needsRotation) {\n deltaA3 = deltaA3 * rotationMatrix;\n deltaB3 = deltaB3 * rotationMatrix;\n }\n vec2 deltaA = deltaA3.xy / width;\n vec2 deltaB = deltaB3.xy / width;\n\n float lenA = length(deltaA);\n float lenB = length(deltaB);\n\n vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = dirA + dirB;\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // direction of the segment\n vec2 dir = isEnd ? dirA : dirB;\n // direction of the extrusion\n vec2 perp = isEnd ? perpA : perpB;\n // length of the segment\n float L = isEnd ? lenA : lenB;\n\n // A = angle of the corner\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n\n // -1: right, 1: left\n float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n float cornerPosition = sideOfPath * turnDirection;\n\n float miterSize = 1.0 / max(sinHalfA, EPSILON);\n // trim if inside corner extends further than the line segment\n miterSize = mix(\n min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\n miterSize,\n step(0.0, cornerPosition)\n );\n\n vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n * (sideOfPath + isJoint * turnDirection);\n\n // special treatment for start cap and end cap\n bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\n bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\n bool isCap = isStartCap || isEndCap;\n\n // extend out a triangle to envelope the round cap\n if (isCap) {\n offsetVec = mix(perp * sideOfPath, dir * capType * 4.0 * flipIfTrue(isStartCap), isJoint);\n vJointType = capType;\n } else {\n vJointType = jointType;\n }\n\n // Generate variables for fragment shader\n vPathLength = L;\n vCornerOffset = offsetVec;\n vMiterLength = dot(vCornerOffset, miterVec * turnDirection);\n vMiterLength = isCap ? isJoint : vMiterLength;\n\n vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\n vPathPosition = vec2(\n dot(offsetFromStartOfPath, perp),\n dot(offsetFromStartOfPath, dir)\n );\n geometry.uv = vPathPosition;\n\n float isValid = step(instanceTypes, 3.5);\n vec3 offset = vec3(offsetVec * width * isValid, 0.0);\n\n if (needsRotation) {\n offset = rotationMatrix * offset;\n }\n return currPoint + offset;\n}\n\n// In clipspace extrusion, if a line extends behind the camera, clip it to avoid visual artifacts\nvoid clipLine(inout vec4 position, vec4 refPosition) {\n if (position.w < EPSILON) {\n float r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\n position = refPosition + (position - refPosition) * r;\n }\n}\n\nvoid main() {\n geometry.pickingColor = instancePickingColors;\n\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n\n float isEnd = positions.x;\n\n vec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\n vec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\n\n vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\n vec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\n\n vec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\n vec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\n\n geometry.worldPosition = currPosition;\n vec2 widthPixels = vec2(clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0);\n vec3 width;\n\n if (billboard) {\n // Extrude in clipspace\n vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\n vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\n vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\n\n clipLine(prevPositionScreen, currPositionScreen);\n clipLine(nextPositionScreen, currPositionScreen);\n clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\n\n width = vec3(widthPixels, 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec3 pos = lineJoin(\n prevPositionScreen.xyz / prevPositionScreen.w,\n currPositionScreen.xyz / currPositionScreen.w,\n nextPositionScreen.xyz / nextPositionScreen.w,\n project_pixel_size_to_clipspace(width.xy)\n );\n\n gl_Position = vec4(pos * currPositionScreen.w, currPositionScreen.w);\n } else {\n // Extrude in commonspace\n prevPosition = project_position(prevPosition, prevPosition64Low);\n currPosition = project_position(currPosition, currPosition64Low);\n nextPosition = project_position(nextPosition, nextPosition64Low);\n\n width = vec3(project_pixel_size(widthPixels), 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec4 pos = vec4(\n lineJoin(prevPosition, currPosition, nextPosition, width.xy),\n 1.0);\n geometry.position = pos;\n gl_Position = project_common_position_to_clipspace(pos);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\nimport PathTesselator from './path-tesselator';\n\nimport vs from './path-layer-vertex.glsl';\nimport fs from './path-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Color,\n Accessor,\n AccessorFunction,\n Unit,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\nimport type {PathGeometry} from './path';\n\ntype _PathLayerProps = {\n /** The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`\n * @default 'meters'\n */\n widthUnits?: Unit;\n /**\n * Path width multiplier.\n * @default 1\n */\n widthScale?: number;\n /**\n * The minimum path width in pixels. This prop can be used to prevent the path from getting too thin when zoomed out.\n * @default 0\n */\n widthMinPixels?: number;\n /**\n * The maximum path width in pixels. This prop can be used to prevent the path from getting too thick when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n widthMaxPixels?: number;\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n * @default false\n */\n jointRounded?: boolean;\n /**\n * Type of caps. If `true`, draw round caps. Otherwise draw square caps.\n * @default false\n */\n capRounded?: boolean;\n /**\n * The maximum extent of a joint in ratio to the stroke width. Only works if `jointRounded` is `false`.\n * @default 4\n */\n miterLimit?: number;\n /**\n * If `true`, extrude the path in screen space (width always faces the camera).\n * If `false`, the width always faces up (z).\n * @default false\n */\n billboard?: boolean;\n /**\n * (Experimental) If `'loop'` or `'open'`, will skip normalizing the coordinates returned by `getPath` and instead assume all paths are to be loops or open paths.\n * When normalization is disabled, paths must be specified in the format of flat array. Open paths must contain at least 2 vertices and closed paths must contain at least 3 vertices.\n * @default null\n */\n _pathType?: null | 'loop' | 'open';\n /**\n * Path geometry accessor.\n */\n getPath?: AccessorFunction;\n /**\n * Path color accessor.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Path width accessor.\n * @default 1\n */\n getWidth?: Accessor;\n /**\n * @deprecated Use `jointRounded` and `capRounded` instead\n */\n rounded?: boolean;\n};\n\nexport type PathLayerProps = _PathLayerProps & LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n widthUnits: 'meters',\n widthScale: {type: 'number', min: 0, value: 1},\n widthMinPixels: {type: 'number', min: 0, value: 0},\n widthMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n jointRounded: false,\n capRounded: false,\n miterLimit: {type: 'number', min: 0, value: 4},\n billboard: false,\n _pathType: null,\n\n getPath: {type: 'accessor', value: object => object.path},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getWidth: {type: 'accessor', value: 1},\n\n // deprecated props\n rounded: {deprecatedFor: ['jointRounded', 'capRounded']}\n};\n\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\n\n/** Render lists of coordinate points as extruded polylines with mitering. */\nexport default class PathLayer extends Layer<\n ExtraPropsT & Required<_PathLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'PathLayer';\n\n state!: {\n model?: Model;\n pathTesselator: PathTesselator;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]}); // 'project' module added by default.\n }\n\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const noAlloc = true;\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager!.addInstanced({\n positions: {\n size: 3,\n // Start filling buffer from 1 vertex in\n vertexOffset: 1,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPath',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n instanceLeftPositions: {\n vertexOffset: 0\n },\n instanceStartPositions: {\n vertexOffset: 1\n },\n instanceEndPositions: {\n vertexOffset: 2\n },\n instanceRightPositions: {\n vertexOffset: 3\n }\n }\n },\n instanceTypes: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateSegmentTypes,\n noAlloc\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getWidth',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: 1\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n accessor: 'getColor',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: DEFAULT_COLOR\n },\n instancePickingColors: {\n size: 3,\n type: GL.UNSIGNED_BYTE,\n accessor: (object, {index, target: value}) =>\n this.encodePickingColor(object && object.__source ? object.__source.index : index, value)\n }\n });\n /* eslint-enable max-len */\n\n this.setState({\n pathTesselator: new PathTesselator({\n fp64: this.use64bitPositions()\n })\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, changeFlags} = params;\n\n const attributeManager = this.getAttributeManager();\n\n const geometryChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPath));\n\n if (geometryChanged) {\n const {pathTesselator} = this.state;\n const buffers = (props.data as any).attributes || {};\n\n pathTesselator.updateGeometry({\n data: props.data,\n geometryBuffer: buffers.getPath,\n buffers,\n normalize: !props._pathType,\n loop: props._pathType === 'loop',\n getGeometry: props.getPath,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n dataChanged: changeFlags.dataChanged\n });\n this.setState({\n numInstances: pathTesselator.instanceCount,\n startIndices: pathTesselator.vertexStarts\n });\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n attributeManager!.invalidateAll();\n }\n }\n\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n attributeManager!.invalidateAll();\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const info = super.getPickingInfo(params);\n const {index} = info;\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = (data as any[]).find(d => d.__source.index === index);\n }\n return info;\n }\n\n /** Override base Layer method */\n disablePickingIndex(objectIndex: number) {\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < (data as any[]).length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n } else {\n this._disablePickingIndex(objectIndex);\n }\n }\n\n draw({uniforms}) {\n const {\n jointRounded,\n capRounded,\n billboard,\n miterLimit,\n widthUnits,\n widthScale,\n widthMinPixels,\n widthMaxPixels\n } = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n billboard,\n widthUnits: UNIT[widthUnits],\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n /*\n * _\n * \"-_ 1 3 5\n * _ \"o---------------------o-------------------_-o\n * - / \"\"--..__ '. _.-' /\n * _ \"@- - - - - \"\"--..__- - - - x - - - -_.@' /\n * \"-_ / \"\"--..__ '. _,-` : /\n * \"o----------------------------\"\"-o' : /\n * 0,2 4 / '. : /\n * / '.: /\n * / :'. /\n * / : ', /\n * / : o\n */\n\n // prettier-ignore\n const SEGMENT_INDICES = [\n // start corner\n 0, 1, 2,\n // body\n 1, 4, 2,\n 1, 3, 4,\n // end corner\n 3, 5, 4\n ];\n\n // [0] position on segment - 0: start, 1: end\n // [1] side of path - -1: left, 0: center (joint), 1: right\n // prettier-ignore\n const SEGMENT_POSITIONS = [\n // bevel start corner\n 0, 0,\n // start inner corner\n 0, -1,\n // start outer corner\n 0, 1,\n // end inner corner\n 1, -1,\n // end outer corner\n 1, 1,\n // bevel end corner\n 1, 0\n ];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n attributes: {\n indices: new Uint16Array(SEGMENT_INDICES),\n positions: {value: new Float32Array(SEGMENT_POSITIONS), size: 2}\n }\n }),\n isInstanced: true\n });\n }\n\n protected calculatePositions(attribute) {\n const {pathTesselator} = this.state;\n\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('positions');\n }\n\n protected calculateSegmentTypes(attribute) {\n const {pathTesselator} = this.state;\n\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('segmentTypes');\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME path-layer-fragment-shader\n\nprecision highp float;\n\nuniform float miterLimit;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\n/*\n * vPathPosition represents the relative coordinates of the current fragment on the path segment.\n * vPathPosition.x - position along the width of the path, between [-1, 1]. 0 is the center line.\n * vPathPosition.y - position along the length of the path, between [0, L / width].\n */\nvarying vec2 vPathPosition;\nvarying float vPathLength;\nvarying float vJointType;\n\nvoid main(void) {\n geometry.uv = vPathPosition;\n\n if (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\n // if joint is rounded, test distance from the corner\n if (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\n discard;\n }\n // trim miter\n if (vJointType < 0.5 && vMiterLength > miterLimit + 1.0) {\n discard;\n }\n }\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME point-cloud-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceNormals;\nattribute vec4 instanceColors;\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusPixels;\nuniform int sizeUnits;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.normal = project_normal(instanceNormals);\n\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n geometry.uv = unitPosition;\n geometry.pickingColor = instancePickingColors;\n\n // Find the center of the point and add the current vertex\n vec3 offset = vec3(positions.xy * project_size_to_pixel(radiusPixels, sizeUnits), 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.), geometry.position);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply lighting\n vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\n\n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(lightColor, instanceColors.a * opacity);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n gouraudLighting,\n picking,\n UNIT,\n LayerProps,\n UpdateParameters,\n Unit,\n AccessorFunction,\n Position,\n Accessor,\n Color,\n Material,\n DefaultProps\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './point-cloud-layer-vertex.glsl';\nimport fs from './point-cloud-layer-fragment.glsl';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\nconst DEFAULT_NORMAL: [number, number, number] = [0, 0, 1];\n\nconst defaultProps: DefaultProps = {\n sizeUnits: 'pixels',\n pointSize: {type: 'number', min: 0, value: 10}, // point radius in pixels\n\n getPosition: {type: 'accessor', value: x => x.position},\n getNormal: {type: 'accessor', value: DEFAULT_NORMAL},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n material: true,\n\n // Depreated\n radiusPixels: {deprecatedFor: 'pointSize'}\n};\n\n// support loaders.gl point cloud format\nfunction normalizeData(data) {\n const {header, attributes} = data;\n if (!header || !attributes) {\n return;\n }\n\n data.length = header.vertexCount;\n\n if (attributes.POSITION) {\n attributes.instancePositions = attributes.POSITION;\n }\n if (attributes.NORMAL) {\n attributes.instanceNormals = attributes.NORMAL;\n }\n if (attributes.COLOR_0) {\n attributes.instanceColors = attributes.COLOR_0;\n }\n}\n\n/** All properties supported by PointCloudLayer. */\nexport type PointCloudLayerProps = _PointCloudLayerProps & LayerProps;\n\n/** Properties added by PointCloudLayer. */\ntype _PointCloudLayerProps = {\n /**\n * The units of the point size, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n\n /**\n * Global radius of all points, in units specified by `sizeUnits`\n * @default 10\n */\n pointSize?: number;\n\n /**\n * @deprecated Use `pointSize` instead\n */\n radiusPixels?: number;\n\n /**\n * Material settings for lighting effect.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n\n /**\n * Method called to retrieve the position of each object.\n * @default object => object.position\n */\n getPosition?: AccessorFunction;\n\n /**\n * The normal of each object, in `[nx, ny, nz]`.\n * @default [0, 0, 1]\n */\n getNormal?: Accessor;\n\n /**\n * The rgba color is in the format of `[r, g, b, [a]]`\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n};\n\n/** Render a point cloud with 3D positions, normals and colors. */\nexport default class PointCloudLayer extends Layer<\n ExtraPropsT & Required<_PointCloudLayerProps>\n> {\n static layerName = 'PointCloudLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, gouraudLighting, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceNormals: {\n size: 3,\n transition: true,\n accessor: 'getNormal',\n defaultValue: DEFAULT_NORMAL\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n }\n });\n }\n\n updateState(params: UpdateParameters): void {\n const {changeFlags, props} = params;\n super.updateState(params);\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n if (changeFlags.dataChanged) {\n normalizeData(props.data);\n }\n }\n\n draw({uniforms}) {\n const {pointSize, sizeUnits} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n sizeUnits: UNIT[sizeUnits],\n radiusPixels: pointSize\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // a triangle that minimally cover the unit circle\n const positions: number[] = [];\n for (let i = 0; i < 3; i++) {\n const angle = (i / 3) * Math.PI * 2;\n positions.push(Math.cos(angle) * 2, Math.sin(angle) * 2, 0);\n }\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLES,\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME point-cloud-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n geometry.uv = unitPosition;\n\n float distToCenter = length(unitPosition);\n\n if (distToCenter > 1.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Accessor,\n AccessorFunction,\n Color,\n CompositeLayer,\n CompositeLayerProps,\n createIterable,\n Layer,\n LayersList,\n log,\n Unit,\n Material,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport SolidPolygonLayer from '../solid-polygon-layer/solid-polygon-layer';\nimport PathLayer from '../path-layer/path-layer';\nimport * as Polygon from '../solid-polygon-layer/polygon';\nimport {replaceInRange} from '../utils';\n\n/**\n * All properties supported by `PolygonLayer`.\n */\nexport type PolygonLayerProps = _PolygonLayerProps & CompositeLayerProps;\n\n/**\n * Properties added by `PolygonLayer`.\n */\ntype _PolygonLayerProps = {\n /**\n * Whether to draw an outline around the polygon (solid fill).\n *\n * Note that both the outer polygon as well the outlines of any holes will be drawn.\n *\n * @default true\n */\n stroked?: boolean;\n\n /**\n * Whether to draw a filled polygon (solid fill).\n *\n * Note that only the area between the outer polygon and any holes will be filled.\n *\n * @default true\n */\n filled?: boolean;\n\n /**\n * Whether to extrude the polygons.\n *\n * Based on the elevations provided by the `getElevation` accessor.\n *\n * If set to `false`, all polygons will be flat, this generates less geometry and is faster\n * than simply returning 0 from getElevation.\n *\n * @default false\n */\n extruded?: boolean;\n\n /**\n * Elevation multiplier.\n *\n * The final elevation is calculated by `elevationScale * getElevation(d)`.\n * `elevationScale` is a handy property to scale all elevation without updating the data.\n *\n * @default 1\n */\n elevationScale?: number;\n\n /**\n * Whether to generate a line wireframe of the hexagon.\n *\n * The outline will have \"horizontal\" lines closing the top and bottom polygons and a vertical\n * line (a \"strut\") for each vertex on the polygon.\n *\n * @default false\n */\n wireframe?: boolean;\n\n /**\n * The units of the line width, one of `meters`, `common`, and `pixels`.\n *\n * @default 'meters'\n * @see Unit.\n */\n lineWidthUnits?: Unit;\n\n /**\n * The line width multiplier that multiplied to all outlines of `Polygon` and `MultiPolygon`\n * features if the stroked attribute is true.\n *\n * @default 1\n */\n lineWidthScale?: number;\n\n /**\n * The minimum line width in pixels.\n *\n * @default 0\n */\n lineWidthMinPixels?: number;\n\n /**\n * The maximum line width in pixels\n *\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Type of joint. If `true`, draw round joints. Otherwise draw miter joints.\n *\n * @default false\n */\n lineJointRounded?: boolean;\n\n /**\n * The maximum extent of a joint in ratio to the stroke width.\n *\n * Only works if `lineJointRounded` is false.\n *\n * @default 4\n */\n lineMiterLimit?: number;\n\n lineDashJustified?: boolean;\n\n /** Called on each object in the data stream to retrieve its corresponding polygon. */\n getPolygon?: AccessorFunction;\n\n /**\n * Fill collor value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n\n /**\n * Line color value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Line width value or accessor.\n *\n * @default [0, 0, 0, 255]\n */\n getLineWidth?: Accessor;\n\n /**\n * Elevation valur or accessor.\n *\n * Only used if `extruded: true`.\n *\n * @default 1000\n */\n getElevation?: Accessor;\n\n /**\n * This property has been moved to `PathStyleExtension`.\n *\n * @deprecated\n */\n getLineDashArray?: Accessor | null;\n\n /**\n * If `false`, will skip normalizing the coordinates returned by `getPolygon`.\n *\n * **Note**: This prop is experimental\n *\n * @default true\n */\n _normalize?: boolean;\n\n /**\n * Specifies the winding order of rings in the polygon data.\n *\n * **Note**: This prop is experimental\n *\n * @default 'CW'\n */\n _windingOrder?: 'CW' | 'CCW';\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\nconst defaultLineColor: [number, number, number, number] = [0, 0, 0, 255];\nconst defaultFillColor: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n stroked: true,\n filled: true,\n extruded: false,\n elevationScale: 1,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineMiterLimit: 4,\n\n getPolygon: {type: 'accessor', value: f => f.polygon},\n // Polygon fill color\n getFillColor: {type: 'accessor', value: defaultFillColor},\n // Point, line and polygon outline color\n getLineColor: {type: 'accessor', value: defaultLineColor},\n // Line and polygon outline accessors\n getLineWidth: {type: 'accessor', value: 1},\n // Polygon extrusion accessor\n getElevation: {type: 'accessor', value: 1000},\n\n // Optional material for 'lighting' shader module\n material: true\n};\n\n/** A composite layer that renders filled, stroked and/or extruded polygons. */\nexport default class PolygonLayer extends CompositeLayer<\n Required<_PolygonLayerProps> & ExtraProps\n> {\n static layerName = 'PolygonLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n this.state = {\n paths: []\n };\n\n if (this.props.getLineDashArray) {\n log.removed('getLineDashArray', 'PathStyleExtension')();\n }\n }\n\n updateState({changeFlags}: UpdateParameters) {\n const geometryChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n\n if (geometryChanged && Array.isArray(changeFlags.dataChanged)) {\n const paths = this.state.paths.slice();\n const pathsDiff = changeFlags.dataChanged.map(dataRange =>\n replaceInRange({\n data: paths,\n getIndex: p => p.__source.index,\n dataRange,\n replace: this._getPaths(dataRange)\n })\n );\n this.setState({paths, pathsDiff});\n } else if (geometryChanged) {\n this.setState({\n paths: this._getPaths(),\n pathsDiff: null\n });\n }\n }\n\n private _getPaths(dataRange: {startRow?: number; endRow?: number} = {}): {path: number[]}[] {\n const {data, getPolygon, positionFormat, _normalize} = this.props;\n const paths: {path: number[]}[] = [];\n const positionSize = positionFormat === 'XY' ? 2 : 3;\n const {startRow, endRow} = dataRange;\n\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let polygon = getPolygon(object, objectInfo);\n if (_normalize) {\n polygon = Polygon.normalize(polygon, positionSize);\n }\n const {holeIndices} = polygon;\n const positions = polygon.positions || polygon;\n\n if (holeIndices) {\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= holeIndices.length; i++) {\n const path = positions.slice(holeIndices[i - 1] || 0, holeIndices[i] || positions.length);\n paths.push(this.getSubLayerRow({path}, object, objectInfo.index));\n }\n } else {\n paths.push(this.getSubLayerRow({path: positions}, object, objectInfo.index));\n }\n }\n return paths;\n }\n\n /* eslint-disable complexity */\n renderLayers(): Layer | null | LayersList {\n // Layer composition props\n const {\n data,\n _dataDiff,\n stroked,\n filled,\n extruded,\n wireframe,\n _normalize,\n _windingOrder,\n elevationScale,\n transitions,\n positionFormat\n } = this.props;\n\n // Rendering props underlying layer\n const {\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified\n } = this.props;\n\n // Accessor props for underlying layers\n const {\n getFillColor,\n getLineColor,\n getLineWidth,\n getLineDashArray,\n getElevation,\n getPolygon,\n updateTriggers,\n material\n } = this.props;\n\n const {paths, pathsDiff} = this.state;\n\n const FillLayer = this.getSubLayerClass('fill', SolidPolygonLayer);\n const StrokeLayer = this.getSubLayerClass('stroke', PathLayer);\n\n // Filled Polygon Layer\n const polygonLayer =\n this.shouldRenderSubLayer('fill', paths) &&\n new FillLayer(\n {\n _dataDiff,\n extruded,\n elevationScale,\n\n filled,\n wireframe,\n _normalize,\n _windingOrder,\n\n getElevation,\n getFillColor,\n getLineColor: extruded && wireframe ? getLineColor : defaultLineColor,\n\n material,\n transitions\n },\n this.getSubLayerProps({\n id: 'fill',\n updateTriggers: updateTriggers && {\n getPolygon: updateTriggers.getPolygon,\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n // using a legacy API to invalid lineColor attributes\n // if (extruded && wireframe) has changed\n lineColors: extruded && wireframe,\n getLineColor: updateTriggers.getLineColor\n }\n }),\n {\n data,\n positionFormat,\n getPolygon\n }\n );\n\n // Polygon line layer\n const polygonLineLayer =\n !extruded &&\n stroked &&\n this.shouldRenderSubLayer('stroke', paths) &&\n new StrokeLayer(\n {\n _dataDiff: pathsDiff && (() => pathsDiff),\n widthUnits: lineWidthUnits,\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels,\n jointRounded: lineJointRounded,\n miterLimit: lineMiterLimit,\n dashJustified: lineDashJustified,\n\n // Already normalized\n _pathType: 'loop',\n\n transitions: transitions && {\n getWidth: transitions.getLineWidth,\n getColor: transitions.getLineColor,\n getPath: transitions.getPolygon\n },\n\n getColor: this.getSubLayerAccessor(getLineColor),\n getWidth: this.getSubLayerAccessor(getLineWidth),\n getDashArray: this.getSubLayerAccessor(getLineDashArray)\n },\n this.getSubLayerProps({\n id: 'stroke',\n updateTriggers: updateTriggers && {\n getWidth: updateTriggers.getLineWidth,\n getColor: updateTriggers.getLineColor,\n getDashArray: updateTriggers.getLineDashArray\n }\n }),\n {\n data: paths,\n positionFormat,\n getPath: x => x.path\n }\n );\n\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonLayer,\n polygonLineLayer,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonLayer\n ];\n }\n /* eslint-enable complexity */\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME scatterplot-layer-vertex-shader\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute float instanceRadius;\nattribute float instanceLineWidths;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusScale;\nuniform float radiusMinPixels;\nuniform float radiusMaxPixels;\nuniform float lineWidthScale;\nuniform float lineWidthMinPixels;\nuniform float lineWidthMaxPixels;\nuniform float stroked;\nuniform bool filled;\nuniform bool antialiasing;\nuniform bool billboard;\nuniform int radiusUnits;\nuniform int lineWidthUnits;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\nvarying float outerRadiusPixels;\n\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n\n // Multiply out radius and clamp to limits\n outerRadiusPixels = clamp(\n project_size_to_pixel(radiusScale * instanceRadius, radiusUnits),\n radiusMinPixels, radiusMaxPixels\n );\n \n // Multiply out line width and clamp to limits\n float lineWidthPixels = clamp(\n project_size_to_pixel(lineWidthScale * instanceLineWidths, lineWidthUnits),\n lineWidthMinPixels, lineWidthMaxPixels\n );\n\n // outer radius needs to offset by half stroke width\n outerRadiusPixels += stroked * lineWidthPixels / 2.0;\n\n // Expand geometry to accomodate edge smoothing\n float edgePadding = antialiasing ? (outerRadiusPixels + SMOOTH_EDGE_RADIUS) / outerRadiusPixels : 1.0;\n\n // position on the containing square in [-1, 1] space\n unitPosition = edgePadding * positions.xy;\n geometry.uv = unitPosition;\n geometry.pickingColor = instancePickingColors;\n\n innerUnitRadius = 1.0 - stroked * lineWidthPixels / outerRadiusPixels;\n \n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = edgePadding * positions * outerRadiusPixels;\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n } else {\n vec3 offset = edgePadding * positions * project_pixel_size(outerRadiusPixels);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset, geometry.position);\n }\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply opacity to instance color, or return instance picking color\n vFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * opacity);\n DECKGL_FILTER_COLOR(vFillColor, geometry);\n vLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * opacity);\n DECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './scatterplot-layer-vertex.glsl';\nimport fs from './scatterplot-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n UpdateParameters,\n Accessor,\n Unit,\n Position,\n Color,\n DefaultProps\n} from '@deck.gl/core';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\n/** All props supported by the ScatterplotLayer */\nexport type ScatterplotLayerProps = _ScatterplotLayerProps & LayerProps;\n\n/** Props added by the ScatterplotLayer */\ntype _ScatterplotLayerProps = {\n /**\n * The units of the radius, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'meters'\n */\n radiusUnits?: Unit;\n /**\n * Radius multiplier.\n * @default 1\n */\n radiusScale?: number;\n /**\n * The minimum radius in pixels. This prop can be used to prevent the circle from getting too small when zoomed out.\n * @default 0\n */\n radiusMinPixels?: number;\n /**\n * The maximum radius in pixels. This prop can be used to prevent the circle from getting too big when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n radiusMaxPixels?: number;\n\n /**\n * The units of the stroke width, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'meters'\n */\n lineWidthUnits?: Unit;\n /**\n * Stroke width multiplier.\n * @default 1\n */\n lineWidthScale?: number;\n /**\n * The minimum stroke width in pixels. This prop can be used to prevent the line from getting too thin when zoomed out.\n * @default 0\n */\n lineWidthMinPixels?: number;\n /**\n * The maximum stroke width in pixels. This prop can be used to prevent the circle from getting too thick when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n lineWidthMaxPixels?: number;\n\n /**\n * Draw the outline of points.\n * @default false\n */\n stroked?: boolean;\n /**\n * Draw the filled area of points.\n * @default true\n */\n filled?: boolean;\n /**\n * If `true`, rendered circles always face the camera. If `false` circles face up (i.e. are parallel with the ground plane).\n * @default false\n */\n billboard?: boolean;\n /**\n * If `true`, circles are rendered with smoothed edges. If `false`, circles are rendered with rough edges. Antialiasing can cause artifacts on edges of overlapping circles.\n * @default true\n */\n antialiasing?: boolean;\n\n /**\n * Center position accessor.\n */\n getPosition?: Accessor;\n /**\n * Radius accessor.\n * @default 1\n */\n getRadius?: Accessor;\n /**\n * Fill color accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n /**\n * Stroke color accessor.\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n /**\n * Stroke width accessor.\n * @default 1\n */\n getLineWidth?: Accessor;\n /**\n * @deprecated Use `getLineWidth` instead\n */\n strokeWidth?: number;\n /**\n * @deprecated Use `stroked` instead\n */\n outline?: boolean;\n /**\n * @deprecated Use `getFillColor` and `getLineColor` instead\n */\n getColor?: Accessor;\n};\n\nconst defaultProps: DefaultProps = {\n radiusUnits: 'meters',\n radiusScale: {type: 'number', min: 0, value: 1},\n radiusMinPixels: {type: 'number', min: 0, value: 0}, // min point radius in pixels\n radiusMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER}, // max point radius in pixels\n\n lineWidthUnits: 'meters',\n lineWidthScale: {type: 'number', min: 0, value: 1},\n lineWidthMinPixels: {type: 'number', min: 0, value: 0},\n lineWidthMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n\n stroked: false,\n filled: true,\n billboard: false,\n antialiasing: true,\n\n getPosition: {type: 'accessor', value: x => x.position},\n getRadius: {type: 'accessor', value: 1},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineWidth: {type: 'accessor', value: 1},\n\n // deprecated\n strokeWidth: {deprecatedFor: 'getLineWidth'},\n outline: {deprecatedFor: 'stroked'},\n getColor: {deprecatedFor: ['getFillColor', 'getLineColor']}\n};\n\n/** Render circles at given coordinates. */\nexport default class ScatterplotLayer extends Layer<\n ExtraPropsT & Required<_ScatterplotLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName: string = 'ScatterplotLayer';\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceRadius: {\n size: 1,\n transition: true,\n accessor: 'getRadius',\n defaultValue: 1\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n if (params.changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {\n radiusUnits,\n radiusScale,\n radiusMinPixels,\n radiusMaxPixels,\n stroked,\n filled,\n billboard,\n antialiasing,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels\n } = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n stroked: stroked ? 1 : 0,\n filled,\n billboard,\n antialiasing,\n radiusUnits: UNIT[radiusUnits],\n radiusScale,\n radiusMinPixels,\n radiusMaxPixels,\n lineWidthUnits: UNIT[lineWidthUnits],\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl) {\n // a square that minimally cover the unit circle\n const positions = [-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n vertexCount: 4,\n attributes: {\n positions: {size: 3, value: new Float32Array(positions)}\n }\n }),\n isInstanced: true\n });\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME scatterplot-layer-fragment-shader\n\nprecision highp float;\n\nuniform bool filled;\nuniform float stroked;\nuniform bool antialiasing;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\nvarying float outerRadiusPixels;\n\nvoid main(void) {\n geometry.uv = unitPosition;\n\n float distToCenter = length(unitPosition) * outerRadiusPixels;\n float inCircle = antialiasing ? \n smoothedge(distToCenter, outerRadiusPixels) : \n step(distToCenter, outerRadiusPixels);\n\n if (inCircle == 0.0) {\n discard;\n }\n\n if (stroked > 0.5) {\n float isLine = antialiasing ? \n smoothedge(innerUnitRadius * outerRadiusPixels, distToCenter) :\n step(innerUnitRadius * outerRadiusPixels, distToCenter);\n\n if (filled) {\n gl_FragColor = mix(vFillColor, vLineColor, isLine);\n } else {\n if (isLine == 0.0) {\n discard;\n }\n gl_FragColor = vec4(vLineColor.rgb, vLineColor.a * isLine);\n }\n } else if (filled) {\n gl_FragColor = vFillColor;\n } else {\n discard;\n }\n\n gl_FragColor.a *= inCircle;\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* eslint-disable max-params */\nimport earcut from 'earcut';\nimport {modifyPolygonWindingDirection, WINDING} from '@math.gl/polygon';\n\nimport type {Position} from '@deck.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\nconst OUTER_POLYGON_WINDING = WINDING.CLOCKWISE;\nconst HOLE_POLYGON_WINDING = WINDING.COUNTER_CLOCKWISE;\n\ntype WindingOptions = {\n start?: number;\n end?: number;\n size?: number;\n isClosed?: boolean;\n};\n\n/** A scratch object for sending winding options */\nconst windingOptions: WindingOptions = {\n isClosed: true\n};\n\n// 4 data formats are supported:\n\n/** Simple Polygon: an array of points */\nexport type NestedSimplePolygonGeometry = Position[];\n/** Complex Polygon: an array of array of points (array of rings)\n * with the first ring representing the outer hull and other rings representing holes\n */\nexport type NestedComplexPolygonGeometry = Position[][];\n/** An array of numbers (flattened \"simple polygon\") */\nexport type FlatSimplePolygonGeometry = NumericArray;\n/** Flattened \"complex polygon\" */\nexport type FlatComplexPolygonGeometry = {positions: NumericArray; holeIndices: NumericArray};\n\nexport type PolygonGeometry =\n | NestedSimplePolygonGeometry\n | NestedComplexPolygonGeometry\n | FlatSimplePolygonGeometry\n | FlatComplexPolygonGeometry;\n\nexport type NormalizedPolygonGeometry = FlatSimplePolygonGeometry | FlatComplexPolygonGeometry;\n\n/**\n * Ensure a polygon is valid format\n */\nfunction validate(polygon: PolygonGeometry): void {\n polygon = (polygon && (polygon as FlatComplexPolygonGeometry).positions) || polygon;\n if (!Array.isArray(polygon) && !ArrayBuffer.isView(polygon)) {\n throw new Error('invalid polygon');\n }\n}\n\n/** Get the positions from a normalized polygon */\nexport function getPositions(polygon: NormalizedPolygonGeometry): NumericArray {\n return 'positions' in polygon ? polygon.positions : polygon;\n}\n\n/** Get the hole indices from a normalized polygon */\nexport function getHoleIndices(polygon: NormalizedPolygonGeometry): NumericArray | null {\n return 'holeIndices' in polygon ? polygon.holeIndices : null;\n}\n\n/**\n * Check if a polygon is nested or flat\n * Returns true if the polygon is a flat polygon (i.e. not an array of polygons)\n */\nfunction isNested(\n polygon: PolygonGeometry\n): polygon is NestedSimplePolygonGeometry | NestedComplexPolygonGeometry {\n return Array.isArray(polygon[0]);\n}\n\n/**\n * Check if a polygon is simple or complex\n * Returns true if the polygon is a simple polygon (i.e. not an array of polygons)\n */\nfunction isSimple(\n polygon: NestedSimplePolygonGeometry | NestedComplexPolygonGeometry\n): polygon is NestedSimplePolygonGeometry {\n return polygon.length >= 1 && polygon[0].length >= 2 && Number.isFinite(polygon[0][0]);\n}\n\n/**\n * Check if a simple polygon is a closed ring\n * Returns true if the simple polygon is a closed ring\n */\nfunction isNestedRingClosed(simplePolygon: NestedSimplePolygonGeometry): boolean {\n // check if first and last vertex are the same\n const p0 = simplePolygon[0];\n const p1 = simplePolygon[simplePolygon.length - 1];\n\n return p0[0] === p1[0] && p0[1] === p1[1] && p0[2] === p1[2];\n}\n\n/**\n * Check if a simple flat array is a closed ring\n * Returns true if the simple flat array is a closed ring\n */\nfunction isFlatRingClosed(\n positions: FlatSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** start index of the path in the positions array */\n startIndex: number,\n /** end index of the path in the positions array */\n endIndex: number\n): boolean {\n for (let i = 0; i < size; i++) {\n if (positions[startIndex + i] !== positions[endIndex - size + i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Copy a simple polygon coordinates into a flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyNestedRing(\n /** destination */\n target: NumericArray,\n /** index in the destination to start copying into */\n targetStartIndex: number,\n /** the source polygon */\n simplePolygon: NestedSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** modify polygon to be of the specified winding direction */\n windingDirection: number\n): number {\n let targetIndex = targetStartIndex;\n const len = simplePolygon.length;\n for (let i = 0; i < len; i++) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[i][j] || 0;\n }\n }\n\n if (!isNestedRingClosed(simplePolygon)) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[0][j] || 0;\n }\n }\n\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n\n return targetIndex;\n}\n\n/**\n * Copy a simple flat array into another flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyFlatRing(\n /** destination */\n target: NumericArray,\n /** index in the destination to start copying into */\n targetStartIndex: number,\n /** the source polygon */\n positions: FlatSimplePolygonGeometry,\n /** size of a position, 2 (xy) or 3 (xyz) */\n size: number,\n /** start index of the path in the positions array */\n srcStartIndex: number = 0,\n /** end index of the path in the positions array */\n srcEndIndex: number,\n windingDirection: number\n): number {\n srcEndIndex = srcEndIndex || positions.length;\n const srcLength = srcEndIndex - srcStartIndex;\n if (srcLength <= 0) {\n return targetStartIndex;\n }\n let targetIndex = targetStartIndex;\n\n for (let i = 0; i < srcLength; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n\n if (!isFlatRingClosed(positions, size, srcStartIndex, srcEndIndex)) {\n for (let i = 0; i < size; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n }\n\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n\n return targetIndex;\n}\n\n/**\n * Normalize any polygon representation into the \"complex flat\" format\n */\n/* eslint-disable max-statements */\nexport function normalize(\n polygon: PolygonGeometry,\n positionSize: number\n): NormalizedPolygonGeometry {\n validate(polygon);\n\n const positions: number[] = [];\n const holeIndices: number[] = [];\n\n if ('positions' in polygon) {\n // complex flat\n const {positions: srcPositions, holeIndices: srcHoleIndices} = polygon;\n\n if (srcHoleIndices) {\n let targetIndex = 0;\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= srcHoleIndices.length; i++) {\n targetIndex = copyFlatRing(\n positions,\n targetIndex,\n srcPositions,\n positionSize,\n srcHoleIndices[i - 1],\n srcHoleIndices[i],\n i === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING\n );\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n\n return {positions, holeIndices};\n }\n polygon = srcPositions;\n }\n if (!isNested(polygon)) {\n // simple flat\n copyFlatRing(positions, 0, polygon, positionSize, 0, positions.length, OUTER_POLYGON_WINDING);\n return positions;\n }\n if (!isSimple(polygon)) {\n // complex polygon\n let targetIndex = 0;\n\n for (const [polygonIndex, simplePolygon] of polygon.entries()) {\n targetIndex = copyNestedRing(\n positions,\n targetIndex,\n simplePolygon,\n positionSize,\n polygonIndex === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING\n );\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n // last index points to the end of the array, remove it\n return {positions, holeIndices};\n }\n // simple polygon\n copyNestedRing(positions, 0, polygon, positionSize, OUTER_POLYGON_WINDING);\n return positions;\n}\n/* eslint-enable max-statements */\n\n/*\n * Get vertex indices for drawing polygon mesh (triangulation)\n */\nexport function getSurfaceIndices(\n polygon: NormalizedPolygonGeometry,\n positionSize: number,\n preproject?: (xy: number[]) => number[]\n): number[] {\n let holeIndices = getHoleIndices(polygon);\n if (holeIndices) {\n holeIndices = holeIndices.map(positionIndex => positionIndex / positionSize);\n }\n\n let positions = getPositions(polygon);\n\n if (preproject) {\n // When tesselating lnglat coordinates, project them to the common space for accuracy\n const n = positions.length;\n // Clone the array\n positions = positions.slice();\n const p: number[] = [];\n for (let i = 0; i < n; i += positionSize) {\n p[0] = positions[i];\n p[1] = positions[i + 1];\n const xy = preproject(p);\n positions[i] = xy[0];\n positions[i + 1] = xy[1];\n }\n }\n\n // Let earcut triangulate the polygon\n return earcut(positions, holeIndices, positionSize);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// Handles tesselation of polygons with holes\n// - 2D surfaces\n// - 2D outlines\n// - 3D surfaces (top and sides only)\n// - 3D wireframes (not yet)\nimport * as Polygon from './polygon';\nimport {Tesselator} from '@deck.gl/core';\nimport {cutPolygonByGrid, cutPolygonByMercatorBounds} from '@math.gl/polygon';\n\nimport type {\n PolygonGeometry,\n NormalizedPolygonGeometry,\n FlatComplexPolygonGeometry\n} from './polygon';\nimport type {TypedArray} from '@math.gl/core';\n\ntype GeometryUpdateContext = {\n vertexStart: number;\n indexStart: number;\n geometrySize: number;\n geometryIndex: number;\n};\n\ntype CutPolygon = FlatComplexPolygonGeometry & {\n edgeTypes: number[];\n};\n\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PolygonTesselator extends Tesselator<\n PolygonGeometry,\n NormalizedPolygonGeometry | CutPolygon[],\n {\n fp64?: boolean;\n IndexType?: Uint32ArrayConstructor | Uint16ArrayConstructor;\n resolution?: number;\n wrapLongitude?: boolean;\n preproject?: (xy: number[]) => number[];\n }\n> {\n constructor(opts) {\n const {fp64, IndexType = Uint32Array} = opts;\n super({\n ...opts,\n attributes: {\n positions: {size: 3, type: fp64 ? Float64Array : Float32Array},\n vertexValid: {type: Uint8ClampedArray, size: 1},\n indices: {type: IndexType, size: 1}\n }\n });\n }\n\n /** Get attribute by name */\n get(attributeName: string): TypedArray | null {\n const {attributes} = this;\n if (attributeName === 'indices') {\n return attributes.indices && attributes.indices.subarray(0, this.vertexCount);\n }\n\n return attributes[attributeName];\n }\n\n /** Override base Tesselator method */\n updateGeometry(opts) {\n super.updateGeometry(opts);\n\n const externalIndices = this.buffers.indices;\n if (externalIndices) {\n // @ts-ignore (2339) value is not defined on TypedArray (fall through)\n this.vertexCount = (externalIndices.value || externalIndices).length;\n } else if (this.data && !this.getGeometry) {\n throw new Error('missing indices buffer');\n }\n }\n\n /** Implement base Tesselator interface */\n protected normalizeGeometry(polygon: PolygonGeometry): NormalizedPolygonGeometry | CutPolygon[] {\n if (this.normalize) {\n const normalizedPolygon = Polygon.normalize(polygon, this.positionSize);\n if (this.opts.resolution) {\n return cutPolygonByGrid(\n Polygon.getPositions(normalizedPolygon),\n Polygon.getHoleIndices(normalizedPolygon),\n {\n size: this.positionSize,\n gridResolution: this.opts.resolution,\n edgeTypes: true\n }\n ) as CutPolygon[];\n }\n if (this.opts.wrapLongitude) {\n return cutPolygonByMercatorBounds(\n Polygon.getPositions(normalizedPolygon),\n Polygon.getHoleIndices(normalizedPolygon),\n {\n size: this.positionSize,\n maxLatitude: 86,\n edgeTypes: true\n }\n ) as CutPolygon[];\n }\n return normalizedPolygon;\n }\n // normalize is explicitly set to false, assume that user passed in already normalized polygons\n return polygon as NormalizedPolygonGeometry;\n }\n\n /** Implement base Tesselator interface */\n protected getGeometrySize(polygon: NormalizedPolygonGeometry | CutPolygon[]): number {\n if (isCut(polygon)) {\n let size = 0;\n for (const subPolygon of polygon) {\n size += this.getGeometrySize(subPolygon);\n }\n return size;\n }\n return Polygon.getPositions(polygon).length / this.positionSize;\n }\n\n /** Override base Tesselator method */\n protected getGeometryFromBuffer(buffer) {\n if (this.normalize || !this.buffers.indices) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization/tesselation\n return null;\n }\n\n /** Implement base Tesselator interface */\n protected updateGeometryAttributes(\n polygon: NormalizedPolygonGeometry | CutPolygon[] | null,\n context: GeometryUpdateContext\n ) {\n if (polygon && isCut(polygon)) {\n for (const subPolygon of polygon) {\n const geometrySize = this.getGeometrySize(subPolygon);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPolygon, context);\n context.vertexStart += geometrySize;\n context.indexStart = this.indexStarts[context.geometryIndex + 1];\n }\n } else {\n this._updateIndices(polygon, context);\n this._updatePositions(polygon, context);\n this._updateVertexValid(polygon, context);\n }\n }\n\n // Flatten the indices array\n private _updateIndices(\n polygon: NormalizedPolygonGeometry | null,\n {geometryIndex, vertexStart: offset, indexStart}: GeometryUpdateContext\n ) {\n const {attributes, indexStarts, typedArrayManager} = this;\n\n let target = attributes.indices;\n if (!target || !polygon) {\n return;\n }\n let i = indexStart;\n\n // 1. get triangulated indices for the internal areas\n const indices = Polygon.getSurfaceIndices(polygon, this.positionSize, this.opts.preproject);\n\n // make sure the buffer is large enough\n target = typedArrayManager.allocate(target, indexStart + indices.length, {\n copy: true\n });\n\n // 2. offset each index by the number of indices in previous polygons\n for (let j = 0; j < indices.length; j++) {\n target[i++] = indices[j] + offset;\n }\n\n indexStarts[geometryIndex + 1] = indexStart + indices.length;\n attributes.indices = target;\n }\n\n // Flatten out all the vertices of all the sub subPolygons\n private _updatePositions(\n polygon: NormalizedPolygonGeometry | null,\n {vertexStart, geometrySize}: GeometryUpdateContext\n ) {\n const {\n attributes: {positions},\n positionSize\n } = this;\n if (!positions || !polygon) {\n return;\n }\n const polygonPositions = Polygon.getPositions(polygon);\n\n for (let i = vertexStart, j = 0; j < geometrySize; i++, j++) {\n const x = polygonPositions[j * positionSize];\n const y = polygonPositions[j * positionSize + 1];\n const z = positionSize > 2 ? polygonPositions[j * positionSize + 2] : 0;\n\n positions[i * 3] = x;\n positions[i * 3 + 1] = y;\n positions[i * 3 + 2] = z;\n }\n }\n\n private _updateVertexValid(\n polygon: NormalizedPolygonGeometry | null,\n {vertexStart, geometrySize}: GeometryUpdateContext\n ) {\n const {positionSize} = this;\n const vertexValid = this.attributes.vertexValid as TypedArray;\n const holeIndices = polygon && Polygon.getHoleIndices(polygon);\n /* We are reusing the some buffer for `nextPositions` by offseting one vertex\n * to the left. As a result,\n * the last vertex of each ring overlaps with the first vertex of the next ring.\n * `vertexValid` is used to mark the end of each ring so we don't draw these\n * segments:\n positions A0 A1 A2 A3 A4 B0 B1 B2 C0 ...\n nextPositions A1 A2 A3 A4 B0 B1 B2 C0 C1 ...\n vertexValid 1 1 1 1 0 1 1 0 1 ...\n */\n if (polygon && (polygon as CutPolygon).edgeTypes) {\n vertexValid.set((polygon as CutPolygon).edgeTypes, vertexStart);\n } else {\n vertexValid.fill(1, vertexStart, vertexStart + geometrySize);\n }\n if (holeIndices) {\n for (let j = 0; j < holeIndices.length; j++) {\n vertexValid[vertexStart + holeIndices[j] / positionSize - 1] = 0;\n }\n }\n vertexValid[vertexStart + geometrySize - 1] = 0;\n }\n}\n\nfunction isCut(polygon: NormalizedPolygonGeometry | CutPolygon[]): polygon is CutPolygon[] {\n return Array.isArray(polygon) && polygon.length > 0 && !Number.isFinite(polygon[0]);\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n\nattribute vec2 vertexPositions;\nattribute float vertexValid;\n\nuniform bool extruded;\nuniform bool isWireframe;\nuniform float elevationScale;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nstruct PolygonProps {\n vec4 fillColors;\n vec4 lineColors;\n vec3 positions;\n vec3 nextPositions;\n vec3 pickingColors;\n vec3 positions64Low;\n vec3 nextPositions64Low;\n float elevations;\n};\n\nvec3 project_offset_normal(vec3 vector) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n // normals generated by the polygon tesselator are in lnglat offsets instead of meters\n return normalize(vector * project_uCommonUnitsPerWorldUnit);\n }\n return project_normal(vector);\n}\n\nvoid calculatePosition(PolygonProps props) {\n#ifdef IS_SIDE_VERTEX\n if(vertexValid < 0.5){\n gl_Position = vec4(0.);\n return;\n }\n#endif\n\n vec3 pos;\n vec3 pos64Low;\n vec3 normal;\n vec4 colors = isWireframe ? props.lineColors : props.fillColors;\n\n geometry.worldPosition = props.positions;\n geometry.worldPositionAlt = props.nextPositions;\n geometry.pickingColor = props.pickingColors;\n\n#ifdef IS_SIDE_VERTEX\n pos = mix(props.positions, props.nextPositions, vertexPositions.x);\n pos64Low = mix(props.positions64Low, props.nextPositions64Low, vertexPositions.x);\n#else\n pos = props.positions;\n pos64Low = props.positions64Low;\n#endif\n\n if (extruded) {\n pos.z += props.elevations * vertexPositions.y * elevationScale;\n }\n gl_Position = project_position_to_clipspace(pos, pos64Low, vec3(0.), geometry.position);\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n if (extruded) {\n #ifdef IS_SIDE_VERTEX\n normal = vec3(\n props.positions.y - props.nextPositions.y + (props.positions64Low.y - props.nextPositions64Low.y),\n props.nextPositions.x - props.positions.x + (props.nextPositions64Low.x - props.positions64Low.x),\n 0.0);\n normal = project_offset_normal(normal);\n #else\n normal = project_normal(vec3(0.0, 0.0, 1.0));\n #endif\n geometry.normal = normal;\n vec3 lightColor = lighting_getLightColor(colors.rgb, project_uCameraPosition, geometry.position.xyz, normal);\n vColor = vec4(lightColor, colors.a * opacity);\n } else {\n vColor = vec4(colors.rgb, colors.a * opacity);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport main from './solid-polygon-layer-vertex-main.glsl';\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 positions64Low;\nattribute float elevations;\nattribute vec4 fillColors;\nattribute vec4 lineColors;\nattribute vec3 pickingColors;\n\n${main}\n\nvoid main(void) {\n PolygonProps props;\n\n props.positions = positions;\n props.positions64Low = positions64Low;\n props.elevations = elevations;\n props.fillColors = fillColors;\n props.lineColors = lineColors;\n props.pickingColors = pickingColors;\n\n calculatePosition(props);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport main from './solid-polygon-layer-vertex-main.glsl';\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-vertex-shader-side\n#define IS_SIDE_VERTEX\n\n\nattribute vec3 instancePositions;\nattribute vec3 nextPositions;\nattribute vec3 instancePositions64Low;\nattribute vec3 nextPositions64Low;\nattribute float instanceElevations;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\n${main}\n\nvoid main(void) {\n PolygonProps props;\n\n #if RING_WINDING_ORDER_CW == 1\n props.positions = instancePositions;\n props.positions64Low = instancePositions64Low;\n props.nextPositions = nextPositions;\n props.nextPositions64Low = nextPositions64Low;\n #else\n props.positions = nextPositions;\n props.positions64Low = nextPositions64Low;\n props.nextPositions = instancePositions;\n props.nextPositions64Low = instancePositions64Low;\n #endif\n props.elevations = instanceElevations;\n props.fillColors = instanceFillColors;\n props.lineColors = instanceLineColors;\n props.pickingColors = instancePickingColors;\n\n calculatePosition(props);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, gouraudLighting, picking, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, hasFeatures, FEATURES} from '@luma.gl/core';\n\n// Polygon geometry generation is managed by the polygon tesselator\nimport PolygonTesselator from './polygon-tesselator';\n\nimport vsTop from './solid-polygon-layer-vertex-top.glsl';\nimport vsSide from './solid-polygon-layer-vertex-side.glsl';\nimport fs from './solid-polygon-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Color,\n Material,\n Accessor,\n AccessorFunction,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\nimport type {PolygonGeometry} from './polygon';\n\ntype _SolidPolygonLayerProps = {\n /** Whether to fill the polygons\n * @default true\n */\n filled?: boolean;\n /** Whether to extrude the polygons\n * @default false\n */\n extruded?: boolean;\n /** Whether to generate a line wireframe of the polygon.\n * @default false\n */\n wireframe?: boolean;\n /**\n * (Experimental) If `false`, will skip normalizing the coordinates returned by `getPolygon`.\n * @default true\n */\n _normalize?: boolean;\n /**\n * (Experimental) This prop is only effective with `_normalize: false`.\n * It specifies the winding order of rings in the polygon data, one of 'CW' (clockwise) and 'CCW' (counter-clockwise)\n */\n _windingOrder?: 'CW' | 'CCW';\n\n /** Elevation multiplier.\n * @default 1\n */\n elevationScale?: number;\n\n /** Polygon geometry accessor. */\n getPolygon?: AccessorFunction;\n /** Extrusion height accessor.\n * @default 1000\n */\n getElevation?: Accessor;\n /** Fill color accessor.\n * @default [0, 0, 0, 255]\n */\n getFillColor?: Accessor;\n /** Stroke color accessor.\n * @default [0, 0, 0, 255]\n */\n getLineColor?: Accessor;\n\n /**\n * Material settings for lighting effect. Applies if `extruded: true`\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting\n */\n material?: Material;\n};\n\n/** Render filled and/or extruded polygons. */\nexport type SolidPolygonLayerProps = _SolidPolygonLayerProps &\n LayerProps;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst defaultProps: DefaultProps = {\n filled: true,\n extruded: false,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n\n elevationScale: {type: 'number', min: 0, value: 1},\n\n getPolygon: {type: 'accessor', value: f => f.polygon},\n getElevation: {type: 'accessor', value: 1000},\n getFillColor: {type: 'accessor', value: DEFAULT_COLOR},\n getLineColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n material: true\n};\n\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\n\nexport default class SolidPolygonLayer extends Layer<\n ExtraPropsT & Required<_SolidPolygonLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'SolidPolygonLayer';\n\n state!: {\n topModel?: Model;\n sideModel?: Model;\n models?: Model[];\n numInstances: number;\n polygonTesselator: PolygonTesselator;\n };\n\n getShaders(type) {\n return super.getShaders({\n vs: type === 'top' ? vsTop : vsSide,\n fs,\n defines: {\n RING_WINDING_ORDER_CW: !this.props._normalize && this.props._windingOrder === 'CCW' ? 0 : 1\n },\n modules: [project32, gouraudLighting, picking]\n });\n }\n\n get wrapLongitude(): boolean {\n return false;\n }\n\n initializeState() {\n const {gl, viewport} = this.context;\n let {coordinateSystem} = this.props;\n if (viewport.isGeospatial && coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = COORDINATE_SYSTEM.LNGLAT;\n }\n\n this.setState({\n numInstances: 0,\n polygonTesselator: new PolygonTesselator({\n // Lnglat coordinates are usually projected non-linearly, which affects tesselation results\n // Provide a preproject function if the coordinates are in lnglat\n preproject:\n coordinateSystem === COORDINATE_SYSTEM.LNGLAT && viewport.projectFlat.bind(viewport),\n fp64: this.use64bitPositions(),\n IndexType: !gl || hasFeatures(gl, FEATURES.ELEMENT_INDEX_UINT32) ? Uint32Array : Uint16Array\n })\n });\n\n const attributeManager = this.getAttributeManager()!;\n const noAlloc = true;\n\n attributeManager.remove(['instancePickingColors']);\n\n /* eslint-disable max-len */\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateIndices,\n noAlloc\n },\n positions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPolygon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n positions: {\n vertexOffset: 0,\n divisor: 0\n },\n instancePositions: {\n vertexOffset: 0,\n divisor: 1\n },\n nextPositions: {\n vertexOffset: 1,\n divisor: 1\n }\n }\n },\n vertexValid: {\n size: 1,\n divisor: 1,\n type: GL.UNSIGNED_BYTE,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateVertexValid,\n noAlloc\n },\n elevations: {\n size: 1,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getElevation',\n shaderAttributes: {\n elevations: {\n divisor: 0\n },\n instanceElevations: {\n divisor: 1\n }\n }\n },\n fillColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR,\n shaderAttributes: {\n fillColors: {\n divisor: 0\n },\n instanceFillColors: {\n divisor: 1\n }\n }\n },\n lineColors: {\n size: this.props.colorFormat.length,\n type: GL.UNSIGNED_BYTE,\n normalized: true,\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR,\n shaderAttributes: {\n lineColors: {\n divisor: 0\n },\n instanceLineColors: {\n divisor: 1\n }\n }\n },\n pickingColors: {\n size: 3,\n type: GL.UNSIGNED_BYTE,\n accessor: (object, {index, target: value}) =>\n this.encodePickingColor(object && object.__source ? object.__source.index : index, value),\n shaderAttributes: {\n pickingColors: {\n divisor: 0\n },\n instancePickingColors: {\n divisor: 1\n }\n }\n }\n });\n /* eslint-enable max-len */\n }\n\n getPickingInfo(params: GetPickingInfoParams): PickingInfo {\n const info = super.getPickingInfo(params);\n const {index} = info;\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = (data as any[]).find(d => d.__source.index === index);\n }\n return info;\n }\n\n disablePickingIndex(objectIndex: number) {\n const {data} = this.props;\n\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < (data as any[]).length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n } else {\n this._disablePickingIndex(objectIndex);\n }\n }\n\n draw({uniforms}) {\n const {extruded, filled, wireframe, elevationScale} = this.props;\n const {topModel, sideModel, polygonTesselator} = this.state;\n\n const renderUniforms = {\n ...uniforms,\n extruded: Boolean(extruded),\n elevationScale\n };\n\n // Note: the order is important\n if (sideModel) {\n sideModel.setInstanceCount(polygonTesselator.instanceCount - 1);\n sideModel.setUniforms(renderUniforms);\n if (wireframe) {\n sideModel.setDrawMode(GL.LINE_STRIP);\n sideModel.setUniforms({isWireframe: true}).draw();\n }\n if (filled) {\n sideModel.setDrawMode(GL.TRIANGLE_FAN);\n sideModel.setUniforms({isWireframe: false}).draw();\n }\n }\n\n if (topModel) {\n topModel.setVertexCount(polygonTesselator.vertexCount);\n topModel.setUniforms(renderUniforms).draw();\n }\n }\n\n updateState(updateParams: UpdateParameters) {\n super.updateState(updateParams);\n\n this.updateGeometry(updateParams);\n\n const {props, oldProps, changeFlags} = updateParams;\n const attributeManager = this.getAttributeManager();\n\n const regenerateModels =\n changeFlags.extensionsChanged ||\n props.filled !== oldProps.filled ||\n props.extruded !== oldProps.extruded;\n\n if (regenerateModels) {\n this.state.models?.forEach(model => model.delete());\n\n this.setState(this._getModels(this.context.gl));\n attributeManager!.invalidateAll();\n }\n }\n\n protected updateGeometry({props, oldProps, changeFlags}: UpdateParameters) {\n const geometryConfigChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n\n // When the geometry config or the data is changed,\n // tessellator needs to be invoked\n if (geometryConfigChanged) {\n const {polygonTesselator} = this.state;\n const buffers = (props.data as any).attributes || {};\n polygonTesselator.updateGeometry({\n data: props.data,\n normalize: props._normalize,\n geometryBuffer: buffers.getPolygon,\n buffers,\n getGeometry: props.getPolygon,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n fp64: this.use64bitPositions(),\n dataChanged: changeFlags.dataChanged\n });\n\n this.setState({\n numInstances: polygonTesselator.instanceCount,\n startIndices: polygonTesselator.vertexStarts\n });\n\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n this.getAttributeManager()!.invalidateAll();\n }\n }\n }\n\n protected _getModels(gl: WebGLRenderingContext): Model {\n const {id, filled, extruded} = this.props;\n\n let topModel;\n let sideModel;\n\n if (filled) {\n const shaders = this.getShaders('top');\n shaders.defines.NON_INSTANCED_MODEL = 1;\n\n topModel = new Model(gl, {\n ...shaders,\n id: `${id}-top`,\n drawMode: GL.TRIANGLES,\n attributes: {\n vertexPositions: new Float32Array([0, 1])\n },\n uniforms: {\n isWireframe: false,\n isSideVertex: false\n },\n vertexCount: 0,\n isIndexed: true\n });\n }\n if (extruded) {\n sideModel = new Model(gl, {\n ...this.getShaders('side'),\n id: `${id}-side`,\n geometry: new Geometry({\n drawMode: GL.LINES,\n vertexCount: 4,\n attributes: {\n // top right - top left - bootom left - bottom right\n vertexPositions: {\n size: 2,\n value: new Float32Array([1, 0, 0, 0, 0, 1, 1, 1])\n }\n }\n }),\n instanceCount: 0,\n isInstanced: 1\n });\n\n sideModel.userData.excludeAttributes = {indices: true};\n }\n\n return {\n models: [sideModel, topModel].filter(Boolean),\n topModel,\n sideModel\n };\n }\n\n protected calculateIndices(attribute) {\n const {polygonTesselator} = this.state;\n attribute.startIndices = polygonTesselator.indexStarts;\n attribute.value = polygonTesselator.get('indices');\n }\n\n protected calculatePositions(attribute) {\n const {polygonTesselator} = this.state;\n attribute.startIndices = polygonTesselator.vertexStarts;\n attribute.value = polygonTesselator.get('positions');\n }\n\n protected calculateVertexValid(attribute) {\n attribute.value = this.state.polygonTesselator.get('vertexValid');\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME solid-polygon-layer-fragment-shader\n\nprecision highp float;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\n#define SHADER_NAME multi-icon-layer-fragment-shader\n\nprecision highp float;\n\nuniform float opacity;\nuniform sampler2D iconsTexture;\nuniform float gamma;\nuniform bool sdf;\nuniform float alphaCutoff;\nuniform float buffer;\nuniform float outlineBuffer;\nuniform vec4 outlineColor;\n\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\nvarying vec2 uv;\n\nvoid main(void) {\n geometry.uv = uv;\n\n if (!picking_uActive) {\n float alpha = texture2D(iconsTexture, vTextureCoords).a;\n vec4 color = vColor;\n\n // if enable sdf (signed distance fields)\n if (sdf) {\n float distance = alpha;\n alpha = smoothstep(buffer - gamma, buffer + gamma, distance);\n\n if (outlineBuffer > 0.0) {\n float inFill = alpha;\n float inBorder = smoothstep(outlineBuffer - gamma, outlineBuffer + gamma, distance);\n color = mix(outlineColor, vColor, inFill);\n alpha = inBorder;\n }\n }\n\n // Take the global opacity and the alpha from color into account for the alpha component\n float a = alpha * color.a;\n \n if (a < alphaCutoff) {\n discard;\n }\n\n gl_FragColor = vec4(color.rgb, a * opacity);\n }\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@deck.gl/core';\nimport IconLayer from '../../icon-layer/icon-layer';\n\nimport fs from './multi-icon-layer-fragment.glsl';\n\nimport type {IconLayerProps} from '../../icon-layer/icon-layer';\nimport type {Accessor, Color, UpdateParameters, DefaultProps} from '@deck.gl/core';\n\n// TODO expose as layer properties\nconst DEFAULT_BUFFER = 192.0 / 256;\nconst EMPTY_ARRAY = [];\n\ntype _MultiIconLayerProps = {\n getIconOffsets?: Accessor;\n sdf?: boolean;\n smoothing?: number;\n outlineWidth?: number;\n outlineColor?: Color;\n};\n\nexport type MultiIconLayerProps = _MultiIconLayerProps & IconLayerProps;\n\nconst defaultProps: DefaultProps = {\n getIconOffsets: {type: 'accessor', value: x => x.offsets},\n alphaCutoff: 0.001,\n smoothing: 0.1,\n outlineWidth: 0,\n outlineColor: {type: 'color', value: [0, 0, 0, 255]}\n};\n\nexport default class MultiIconLayer extends IconLayer<\n DataT,\n ExtraPropsT & Required<_MultiIconLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'MultiIconLayer';\n\n state!: IconLayer['state'] & {\n outlineColor: Color;\n };\n\n getShaders() {\n return {...super.getShaders(), fs};\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n instanceOffsets: {\n size: 2,\n accessor: 'getIconOffsets'\n },\n instancePickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n accessor: (object, {index, target: value}) => this.encodePickingColor(index, value)\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps} = params;\n let {outlineColor} = props;\n\n if (outlineColor !== oldProps.outlineColor) {\n outlineColor = outlineColor.map(x => x / 255) as Color;\n outlineColor[3] = Number.isFinite(outlineColor[3]) ? outlineColor[3] : 1;\n\n this.setState({\n outlineColor\n });\n }\n if (!props.sdf && props.outlineWidth) {\n log.warn(`${this.id}: fontSettings.sdf is required to render outline`)();\n }\n }\n\n draw(params) {\n const {sdf, smoothing, outlineWidth} = this.props;\n const {outlineColor} = this.state;\n\n params.uniforms = {\n ...params.uniforms,\n // Refer the following doc about gamma and buffer\n // https://blog.mapbox.com/drawing-text-with-signed-distance-fields-in-mapbox-gl-b0933af6f817\n buffer: DEFAULT_BUFFER,\n outlineBuffer: outlineWidth ? Math.max(smoothing, DEFAULT_BUFFER * (1 - outlineWidth)) : -1,\n gamma: smoothing,\n sdf: Boolean(sdf),\n outlineColor\n };\n super.draw(params);\n }\n\n protected getInstanceOffset(icons: string): number[] {\n return icons ? Array.from(icons).flatMap(icon => super.getInstanceOffset(icon)) : EMPTY_ARRAY;\n }\n\n getInstanceColorMode(icons: string): number {\n return 1; // mask\n }\n\n getInstanceIconFrame(icons: string): number[] {\n return icons\n ? Array.from(icons).flatMap(icon => super.getInstanceIconFrame(icon))\n : EMPTY_ARRAY;\n }\n}\n","export default `\\\n#define SHADER_NAME text-background-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instancePositions64Low;\nattribute vec4 instanceRects;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec2 instancePixelOffsets;\nattribute float instanceLineWidths;\nattribute vec4 instanceFillColors;\nattribute vec4 instanceLineColors;\nattribute vec3 instancePickingColors;\n\nuniform bool billboard;\nuniform float opacity;\nuniform float sizeScale;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform vec4 padding;\nuniform int sizeUnits;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying float vLineWidth;\nvarying vec2 uv;\nvarying vec2 dimensions;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = radians(angle);\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = positions;\n geometry.pickingColor = instancePickingColors;\n uv = positions;\n vLineWidth = instanceLineWidths;\n\n // convert size in meters to pixels, then scaled and clamp\n\n // project meters to pixels and clamp to limits\n float sizePixels = clamp(\n project_size_to_pixel(instanceSizes * sizeScale, sizeUnits),\n sizeMinPixels, sizeMaxPixels\n );\n\n dimensions = instanceRects.zw * sizePixels + padding.xy + padding.zw;\n\n vec2 pixelOffset = (positions * instanceRects.zw + instanceRects.xy) * sizePixels + mix(-padding.xy, padding.zw, positions);\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles);\n pixelOffset += instancePixelOffsets;\n pixelOffset.y *= -1.0;\n\n if (billboard) {\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n vec3 offset = vec3(pixelOffset, 0.0);\n DECKGL_FILTER_SIZE(offset, geometry);\n gl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n } else {\n vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\n DECKGL_FILTER_SIZE(offset_common, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n // Apply opacity to instance color, or return instance picking color\n vFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * opacity);\n DECKGL_FILTER_COLOR(vFillColor, geometry);\n vLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * opacity);\n DECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n","import {Layer, project32, picking, UNIT} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry} from '@luma.gl/core';\n\nimport vs from './text-background-layer-vertex.glsl';\nimport fs from './text-background-layer-fragment.glsl';\n\nimport type {\n LayerProps,\n Accessor,\n Unit,\n Position,\n Color,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\n\ntype _TextBackgroundLayerProps = {\n billboard?: boolean;\n sizeScale?: number;\n sizeUnits?: Unit;\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n\n padding?: [number, number] | [number, number, number, number];\n\n getPosition?: Accessor;\n getSize?: Accessor;\n getAngle?: Accessor;\n getPixelOffset?: Accessor;\n getBoundingRect?: Accessor;\n getFillColor?: Accessor;\n getLineColor?: Accessor;\n getLineWidth?: Accessor;\n};\n\nexport type TextBackgroundLayerProps = _TextBackgroundLayerProps &\n LayerProps;\n\nconst defaultProps: DefaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n\n padding: {type: 'array', value: [0, 0, 0, 0]},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getSize: {type: 'accessor', value: 1},\n getAngle: {type: 'accessor', value: 0},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n getBoundingRect: {type: 'accessor', value: [0, 0, 0, 0]},\n getFillColor: {type: 'accessor', value: [0, 0, 0, 255]},\n getLineColor: {type: 'accessor', value: [0, 0, 0, 255]},\n getLineWidth: {type: 'accessor', value: 1}\n};\n\nexport default class TextBackgroundLayer extends Layer<\n ExtraPropsT & Required<_TextBackgroundLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TextBackgroundLayer';\n\n state!: {\n model: Model;\n };\n\n getShaders() {\n return super.getShaders({vs, fs, modules: [project32, picking]});\n }\n\n initializeState() {\n this.getAttributeManager()!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instanceRects: {\n size: 4,\n accessor: 'getBoundingRect'\n },\n instancePixelOffsets: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n },\n instanceFillColors: {\n size: 4,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: 4,\n transition: true,\n normalized: true,\n type: GL.UNSIGNED_BYTE,\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {changeFlags} = params;\n if (changeFlags.extensionsChanged) {\n const {gl} = this.context;\n this.state.model?.delete();\n this.state.model = this._getModel(gl);\n this.getAttributeManager()!.invalidateAll();\n }\n }\n\n draw({uniforms}) {\n const {billboard, sizeScale, sizeUnits, sizeMinPixels, sizeMaxPixels, getLineWidth} =\n this.props;\n let {padding} = this.props;\n\n if (padding.length < 4) {\n padding = [padding[0], padding[1], padding[0], padding[1]];\n }\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n billboard,\n stroked: Boolean(getLineWidth),\n padding,\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeMinPixels,\n sizeMaxPixels\n })\n .draw();\n }\n\n protected _getModel(gl: WebGLRenderingContext): Model {\n // a square that minimally cover the unit circle\n const positions = [0, 0, 1, 0, 1, 1, 0, 1];\n\n return new Model(gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_FAN,\n vertexCount: 4,\n attributes: {\n positions: {size: 2, value: new Float32Array(positions)}\n }\n }),\n isInstanced: true\n });\n }\n}\n","export default `\\\n#define SHADER_NAME text-background-layer-fragment-shader\n\nprecision highp float;\n\nuniform bool stroked;\n\nvarying vec4 vFillColor;\nvarying vec4 vLineColor;\nvarying float vLineWidth;\nvarying vec2 uv;\nvarying vec2 dimensions;\n\nvoid main(void) {\n geometry.uv = uv;\n\n vec2 pixelPosition = uv * dimensions;\n if (stroked) {\n float distToEdge = min(\n min(pixelPosition.x, dimensions.x - pixelPosition.x),\n min(pixelPosition.y, dimensions.y - pixelPosition.y)\n );\n float isBorder = smoothedge(distToEdge, vLineWidth);\n gl_FragColor = mix(vFillColor, vLineColor, isBorder);\n } else {\n gl_FragColor = vFillColor;\n }\n\n DECKGL_FILTER_COLOR(gl_FragColor, geometry);\n}\n`;\n","/* eslint-disable max-statements, max-params, complexity, max-depth */\n// TODO merge with icon-layer/icon-manager\nimport {log} from '@deck.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\nconst MISSING_CHAR_WIDTH = 32;\nconst SINGLE_LINE = [];\n\nexport type Character = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type CharacterMapping = Record;\n\nexport function nextPowOfTwo(number: number): number {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n\n/**\n * Generate character mapping table or update from an existing mapping table\n */\nexport function buildMapping({\n characterSet,\n getFontWidth,\n fontHeight,\n buffer,\n maxCanvasWidth,\n mapping = {},\n xOffset = 0,\n yOffset = 0\n}: {\n /** list of characters */\n characterSet: Set;\n /** function to get width of each character */\n getFontWidth: (char: string) => number;\n /** height of font */\n fontHeight: number;\n /** bleeding buffer surround each character */\n buffer: number;\n /** max width of font atlas */\n maxCanvasWidth: number;\n /** cached mapping table */\n mapping?: CharacterMapping;\n /** x position of last character in the existing mapping table */\n xOffset?: number;\n /** y position of last character in the existing mapping table */\n yOffset?: number;\n}): {\n /** new mapping table */\n mapping: CharacterMapping;\n /** x position of last character in the new mapping table */\n xOffset: number;\n /** y position of last character in the new mapping table */\n yOffset: number;\n /** height of the font atlas canvas, power of 2 */\n canvasHeight: number;\n} {\n let row = 0;\n // continue from x position of last character in the old mapping\n let x = xOffset;\n\n for (const char of characterSet) {\n if (!mapping[char]) {\n // measure texts\n // TODO - use Advanced text metrics when they are adopted:\n // https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics\n const width = getFontWidth(char);\n\n if (x + width + buffer * 2 > maxCanvasWidth) {\n x = 0;\n row++;\n }\n mapping[char] = {\n x: x + buffer,\n y: yOffset + row * (fontHeight + buffer * 2) + buffer,\n width,\n height: fontHeight\n };\n x += width + buffer * 2;\n }\n }\n\n const rowHeight = fontHeight + buffer * 2;\n\n return {\n mapping,\n xOffset: x,\n yOffset: yOffset + row * rowHeight,\n canvasHeight: nextPowOfTwo(yOffset + (row + 1) * rowHeight)\n };\n}\n\nfunction getTextWidth(\n text: string[],\n startIndex: number,\n endIndex: number,\n mapping: CharacterMapping\n): number {\n let width = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const character = text[i];\n width += mapping[character]?.width || 0;\n }\n\n return width;\n}\n\nfunction breakAll(\n text: string[],\n startIndex: number,\n endIndex: number,\n maxWidth: number,\n iconMapping: CharacterMapping,\n target: number[]\n): number {\n let rowStartCharIndex = startIndex;\n let rowOffsetLeft = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n // 2. figure out where to break lines\n const textWidth = getTextWidth(text, i, i + 1, iconMapping);\n if (rowOffsetLeft + textWidth > maxWidth) {\n if (rowStartCharIndex < i) {\n target.push(i);\n }\n rowStartCharIndex = i;\n rowOffsetLeft = 0;\n }\n rowOffsetLeft += textWidth;\n }\n\n return rowOffsetLeft;\n}\n\nfunction breakWord(\n text: string[],\n startIndex: number,\n endIndex: number,\n maxWidth: number,\n iconMapping: CharacterMapping,\n target: number[]\n): number {\n let rowStartCharIndex = startIndex;\n let groupStartCharIndex = startIndex;\n let groupEndCharIndex = startIndex;\n let rowOffsetLeft = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n // 1. break text into word groups\n // - if current char is white space\n // - else if next char is white space\n // - else if reach last char\n if (text[i] === ' ') {\n groupEndCharIndex = i + 1;\n } else if (text[i + 1] === ' ' || i + 1 === endIndex) {\n groupEndCharIndex = i + 1;\n }\n\n if (groupEndCharIndex > groupStartCharIndex) {\n // 2. break text into next row at maxWidth\n let groupWidth = getTextWidth(text, groupStartCharIndex, groupEndCharIndex, iconMapping);\n if (rowOffsetLeft + groupWidth > maxWidth) {\n if (rowStartCharIndex < groupStartCharIndex) {\n target.push(groupStartCharIndex);\n rowStartCharIndex = groupStartCharIndex;\n rowOffsetLeft = 0;\n }\n\n // if a single text group is bigger than maxWidth, then `break-all`\n if (groupWidth > maxWidth) {\n groupWidth = breakAll(\n text,\n groupStartCharIndex,\n groupEndCharIndex,\n maxWidth,\n iconMapping,\n target\n );\n // move reference to last row\n rowStartCharIndex = target[target.length - 1];\n }\n }\n groupStartCharIndex = groupEndCharIndex;\n rowOffsetLeft += groupWidth;\n }\n }\n\n return rowOffsetLeft;\n}\n\n/**\n * Wrap the given text so that each line does not exceed the given max width.\n * Returns a list of indices where line breaks should be inserted.\n */\nexport function autoWrapping(\n text: string[],\n wordBreak: 'break-all' | 'break-word',\n maxWidth: number,\n iconMapping: CharacterMapping,\n startIndex: number = 0,\n endIndex: number\n): number[] {\n if (endIndex === undefined) {\n endIndex = text.length;\n }\n const result = [];\n if (wordBreak === 'break-all') {\n breakAll(text, startIndex, endIndex, maxWidth, iconMapping, result);\n } else {\n breakWord(text, startIndex, endIndex, maxWidth, iconMapping, result);\n }\n return result;\n}\n\nfunction transformRow(\n line: string[],\n startIndex: number,\n endIndex: number,\n iconMapping: CharacterMapping,\n leftOffsets: number[],\n rowSize: [number, number]\n) {\n let x = 0;\n let rowHeight = 0;\n\n for (let i = startIndex; i < endIndex; i++) {\n const character = line[i];\n const frame = iconMapping[character];\n if (frame) {\n if (!rowHeight) {\n // frame.height should be a constant\n rowHeight = frame.height;\n }\n leftOffsets[i] = x + frame.width / 2;\n x += frame.width;\n } else {\n log.warn(`Missing character: ${character} (${character.codePointAt(0)})`)();\n leftOffsets[i] = x;\n x += MISSING_CHAR_WIDTH;\n }\n }\n\n rowSize[0] = x;\n rowSize[1] = rowHeight;\n}\n\n/**\n * Transform a text paragraph to an array of characters, each character contains\n */\nexport function transformParagraph(\n paragraph: string,\n /** CSS line-height */\n lineHeight: number,\n /** CSS word-break option */\n wordBreak: 'break-word' | 'break-all',\n /** CSS max-width */\n maxWidth: number,\n /** character mapping table for retrieving a character from font atlas */\n iconMapping: CharacterMapping\n): {\n /** x position of each character */\n x: number[];\n /** y position of each character */\n y: number[];\n /** the current row width of each character */\n rowWidth: number[];\n /** the width and height of the paragraph */\n size: [number, number];\n} {\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const characters = Array.from(paragraph);\n const numCharacters = characters.length;\n const x = new Array(numCharacters) as number[];\n const y = new Array(numCharacters) as number[];\n const rowWidth = new Array(numCharacters) as number[];\n const autoWrappingEnabled =\n (wordBreak === 'break-word' || wordBreak === 'break-all') && isFinite(maxWidth) && maxWidth > 0;\n\n // maxWidth and height of the paragraph\n const size: [number, number] = [0, 0];\n const rowSize: [number, number] = [0, 0];\n let rowOffsetTop = 0;\n let lineStartIndex = 0;\n let lineEndIndex = 0;\n\n for (let i = 0; i <= numCharacters; i++) {\n const char = characters[i];\n if (char === '\\n' || i === numCharacters) {\n lineEndIndex = i;\n }\n\n if (lineEndIndex > lineStartIndex) {\n const rows = autoWrappingEnabled\n ? autoWrapping(characters, wordBreak, maxWidth, iconMapping, lineStartIndex, lineEndIndex)\n : SINGLE_LINE;\n\n for (let rowIndex = 0; rowIndex <= rows.length; rowIndex++) {\n const rowStart = rowIndex === 0 ? lineStartIndex : rows[rowIndex - 1];\n const rowEnd = rowIndex < rows.length ? rows[rowIndex] : lineEndIndex;\n transformRow(characters, rowStart, rowEnd, iconMapping, x, rowSize);\n for (let j = rowStart; j < rowEnd; j++) {\n y[j] = rowOffsetTop + rowSize[1] / 2;\n rowWidth[j] = rowSize[0];\n }\n\n rowOffsetTop = rowOffsetTop + rowSize[1] * lineHeight;\n size[0] = Math.max(size[0], rowSize[0]);\n }\n lineStartIndex = lineEndIndex;\n }\n\n if (char === '\\n') {\n // Make sure result.length matches paragraph.length\n x[lineStartIndex] = 0;\n y[lineStartIndex] = 0;\n rowWidth[lineStartIndex] = 0;\n lineStartIndex++;\n }\n }\n\n // last row\n size[1] = rowOffsetTop;\n return {x, y, rowWidth, size};\n}\n\nexport function getTextFromBuffer({\n value,\n length,\n stride,\n offset,\n startIndices,\n characterSet\n}: {\n value: Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array;\n length: number;\n stride?: number;\n offset?: number;\n startIndices: NumericArray;\n characterSet?: Set;\n}): {\n texts: string[];\n characterCount: number;\n} {\n const bytesPerElement = value.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : 1;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const characterCount =\n startIndices[length] || Math.ceil((value.length - elementOffset) / elementStride);\n const autoCharacterSet = characterSet && new Set();\n\n const texts = new Array(length);\n\n let codes = value;\n if (elementStride > 1 || elementOffset > 0) {\n const ArrayType = value.constructor as\n | Uint8ArrayConstructor\n | Uint8ClampedArrayConstructor\n | Uint16ArrayConstructor\n | Uint32ArrayConstructor;\n codes = new ArrayType(characterCount);\n for (let i = 0; i < characterCount; i++) {\n codes[i] = value[i * elementStride + elementOffset];\n }\n }\n\n for (let index = 0; index < length; index++) {\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || characterCount;\n const codesAtIndex = codes.subarray(startIndex, endIndex);\n // @ts-ignore TS wants the argument to be number[] but typed array works too\n texts[index] = String.fromCodePoint.apply(null, codesAtIndex);\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n codesAtIndex.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n }\n\n if (autoCharacterSet) {\n for (const charCode of autoCharacterSet) {\n characterSet.add(String.fromCodePoint(charCode));\n }\n }\n\n return {texts, characterCount};\n}\n","/**\n * LRU Cache class with limit\n *\n * Update order for each get/set operation\n * Delete oldest when reach given limit\n */\n\nexport default class LRUCache {\n private limit: number;\n private _cache: Record = {};\n /** access/update order, first item is oldest, last item is newest */\n private _order: string[] = [];\n\n constructor(limit: number = 5) {\n this.limit = limit;\n }\n\n get(key: string): ValueT {\n const value = this._cache[key];\n if (value) {\n // update order\n this._deleteOrder(key);\n this._appendOrder(key);\n }\n return value;\n }\n\n set(key: string, value: ValueT): void {\n if (!this._cache[key]) {\n // if reach limit, delete the oldest\n if (Object.keys(this._cache).length === this.limit) {\n this.delete(this._order[0]);\n }\n\n this._cache[key] = value;\n this._appendOrder(key);\n } else {\n // if found in cache, delete the old one, insert new one to the first of list\n this.delete(key);\n\n this._cache[key] = value;\n this._appendOrder(key);\n }\n }\n\n delete(key: string): void {\n const value = this._cache[key];\n if (value) {\n delete this._cache[key];\n this._deleteOrder(key);\n }\n }\n\n private _deleteOrder(key: string): void {\n const index = this._order.indexOf(key);\n if (index >= 0) {\n this._order.splice(index, 1);\n }\n }\n\n private _appendOrder(key: string): void {\n this._order.push(key);\n }\n}\n","/* global document */\nimport TinySDF from '@mapbox/tiny-sdf';\n\nimport {log} from '@deck.gl/core';\n\nimport {buildMapping, CharacterMapping} from './utils';\nimport LRUCache from './lru-cache';\n\nimport type {Texture} from '@deck.gl/core';\n\nfunction getDefaultCharacterSet() {\n const charSet: string[] = [];\n for (let i = 32; i < 128; i++) {\n charSet.push(String.fromCharCode(i));\n }\n return charSet;\n}\n\nexport type FontSettings = {\n /** CSS font family\n * @default 'Monaco, monospace'\n */\n fontFamily?: string;\n /** CSS font weight\n * @default 'normal'\n */\n fontWeight?: string | number;\n /** Specifies a list of characters to include in the font.\n * @default (ASCII characters 32-128)\n */\n characterSet?: Set | string[] | string;\n /** Font size in pixels. This option is only applied for generating `fontAtlas`, it does not impact the size of displayed text labels. Larger `fontSize` will give you a sharper look when rendering text labels with very large font sizes. But larger `fontSize` requires more time and space to generate the `fontAtlas`.\n * @default 64\n */\n fontSize?: number;\n /** Whitespace buffer around each side of the character. In general, bigger `fontSize` requires bigger `buffer`. Increase `buffer` will add more space between each character when layout `characterSet` in `fontAtlas`. This option could be tuned to provide sufficient space for drawing each character and avoiding overlapping of neighboring characters.\n * @default 4\n */\n buffer?: number;\n /** Flag to enable / disable `sdf`. [`sdf` (Signed Distance Fields)](http://cs.brown.edu/people/pfelzens/papers/dt-final.pdf) will provide a sharper look when rendering with very large or small font sizes. `TextLayer` integrates with [`TinySDF`](https://github.com/mapbox/tiny-sdf) which implements the `sdf` algorithm.\n * @default false\n */\n sdf?: boolean;\n /** How much of the radius (relative) is used for the inside part the glyph. Bigger `cutoff` makes character thinner. Smaller `cutoff` makes character look thicker. Only applies when `sdf: true`.\n * @default 0.25\n */\n cutoff?: number;\n /** How many pixels around the glyph shape to use for encoding distance. Bigger radius yields higher quality outcome. Only applies when `sdf: true`.\n * @default 12\n */\n radius?: number;\n /** How much smoothing to apply to the text edges. Only applies when `sdf: true`.\n * @default 0.1\n */\n smoothing?: number;\n};\n\nexport const DEFAULT_FONT_SETTINGS: Required = {\n fontFamily: 'Monaco, monospace',\n fontWeight: 'normal',\n characterSet: getDefaultCharacterSet(),\n fontSize: 64,\n buffer: 4,\n sdf: false,\n cutoff: 0.25,\n radius: 12,\n smoothing: 0.1\n};\n\nconst MAX_CANVAS_WIDTH = 1024;\n\nconst BASELINE_SCALE = 0.9;\nconst HEIGHT_SCALE = 1.2;\n\n// only preserve latest three fontAtlas\nconst CACHE_LIMIT = 3;\n\ntype FontAtlas = {\n /** x position of last character in mapping */\n xOffset: number;\n /** y position of last character in mapping */\n yOffset: number;\n /** bounding box of each character in the texture */\n mapping: CharacterMapping;\n /** packed texture */\n data: HTMLCanvasElement;\n /** texture width */\n width: number;\n /** texture height */\n height: number;\n};\n\nlet cache = new LRUCache(CACHE_LIMIT);\n\n/**\n * get all the chars not in cache\n * @returns chars not in cache\n */\nfunction getNewChars(cacheKey: string, characterSet: Set | string[] | string): Set {\n let newCharSet: Set;\n if (typeof characterSet === 'string') {\n newCharSet = new Set(Array.from(characterSet));\n } else {\n newCharSet = new Set(characterSet);\n }\n\n const cachedFontAtlas = cache.get(cacheKey);\n if (!cachedFontAtlas) {\n return newCharSet;\n }\n\n for (const char in cachedFontAtlas.mapping) {\n if (newCharSet.has(char)) {\n newCharSet.delete(char);\n }\n }\n return newCharSet;\n}\n\nfunction populateAlphaChannel(alphaChannel: number[], imageData: ImageData): void {\n // populate distance value from tinySDF to image alpha channel\n for (let i = 0; i < alphaChannel.length; i++) {\n imageData.data[4 * i + 3] = alphaChannel[i];\n }\n}\n\nfunction setTextStyle(\n ctx: CanvasRenderingContext2D,\n fontFamily: string,\n fontSize: number,\n fontWeight: string | number\n): void {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = '#000';\n ctx.textBaseline = 'alphabetic';\n ctx.textAlign = 'left';\n}\n\n/**\n * Sets the Font Atlas LRU Cache Limit\n * @param {number} limit LRU Cache limit\n */\nexport function setFontAtlasCacheLimit(limit: number): void {\n log.assert(Number.isFinite(limit) && limit >= CACHE_LIMIT, 'Invalid cache limit');\n\n cache = new LRUCache(limit);\n}\n\nexport default class FontAtlasManager {\n /** Font settings */\n props: Required = {...DEFAULT_FONT_SETTINGS};\n\n /** Cache key of the current font atlas */\n private _key?: string;\n /** The current font atlas */\n private _atlas?: FontAtlas;\n\n get texture(): Texture | undefined {\n return this._atlas;\n }\n\n get mapping(): CharacterMapping | undefined {\n return this._atlas && this._atlas.mapping;\n }\n\n get scale(): number {\n return HEIGHT_SCALE;\n }\n\n setProps(props: FontSettings = {}) {\n Object.assign(this.props, props);\n\n // update cache key\n const oldKey = this._key;\n this._key = this._getKey();\n\n const charSet = getNewChars(this._key, this.props.characterSet);\n const cachedFontAtlas = cache.get(this._key);\n\n // if a fontAtlas associated with the new settings is cached and\n // there are no new chars\n if (cachedFontAtlas && charSet.size === 0) {\n // update texture with cached fontAtlas\n if (this._key !== oldKey) {\n this._atlas = cachedFontAtlas;\n }\n return;\n }\n\n // update fontAtlas with new settings\n const fontAtlas = this._generateFontAtlas(this._key, charSet, cachedFontAtlas);\n this._atlas = fontAtlas;\n\n // update cache\n cache.set(this._key, fontAtlas);\n }\n\n private _generateFontAtlas(\n key: string,\n characterSet: Set,\n cachedFontAtlas?: FontAtlas\n ): FontAtlas {\n const {fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff} = this.props;\n let canvas = cachedFontAtlas && cachedFontAtlas.data;\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.width = MAX_CANVAS_WIDTH;\n }\n const ctx = canvas.getContext('2d')!;\n\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 1. build mapping\n const {mapping, canvasHeight, xOffset, yOffset} = buildMapping({\n getFontWidth: char => ctx.measureText(char).width,\n fontHeight: fontSize * HEIGHT_SCALE,\n buffer,\n characterSet,\n maxCanvasWidth: MAX_CANVAS_WIDTH,\n ...(cachedFontAtlas && {\n mapping: cachedFontAtlas.mapping,\n xOffset: cachedFontAtlas.xOffset,\n yOffset: cachedFontAtlas.yOffset\n })\n });\n\n // 2. update canvas\n // copy old canvas data to new canvas only when height changed\n if (canvas.height !== canvasHeight) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n canvas.height = canvasHeight;\n ctx.putImageData(imageData, 0, 0);\n }\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 3. layout characters\n if (sdf) {\n const tinySDF = new TinySDF(fontSize, buffer, radius, cutoff, fontFamily, fontWeight);\n // used to store distance values from tinySDF\n // tinySDF.size equals `fontSize + buffer * 2`\n const imageData = ctx.getImageData(0, 0, tinySDF.size, tinySDF.size);\n\n for (const char of characterSet) {\n populateAlphaChannel(tinySDF.draw(char), imageData);\n ctx.putImageData(imageData, mapping[char].x - buffer, mapping[char].y + buffer);\n }\n } else {\n for (const char of characterSet) {\n ctx.fillText(char, mapping[char].x, mapping[char].y + fontSize * BASELINE_SCALE);\n }\n }\n\n return {\n xOffset,\n yOffset,\n mapping,\n data: canvas,\n width: canvas.width,\n height: canvas.height\n };\n }\n\n private _getKey(): string {\n const {fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff} = this.props;\n if (sdf) {\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer} ${radius} ${cutoff}`;\n }\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer}`;\n }\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {CompositeLayer, createIterable} from '@deck.gl/core';\nimport MultiIconLayer from './multi-icon-layer/multi-icon-layer';\nimport FontAtlasManager, {\n DEFAULT_FONT_SETTINGS,\n setFontAtlasCacheLimit\n} from './font-atlas-manager';\nimport {transformParagraph, getTextFromBuffer} from './utils';\n\nimport TextBackgroundLayer from './text-background-layer/text-background-layer';\n\nimport type {FontSettings} from './font-atlas-manager';\nimport type {\n LayerProps,\n Accessor,\n AccessorFunction,\n Unit,\n Position,\n Color,\n UpdateParameters,\n GetPickingInfoParams,\n PickingInfo,\n DefaultProps\n} from '@deck.gl/core';\n\nconst TEXT_ANCHOR = {\n start: 1,\n middle: 0,\n end: -1\n} as const;\n\nconst ALIGNMENT_BASELINE = {\n top: 1,\n center: 0,\n bottom: -1\n} as const;\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\nconst DEFAULT_LINE_HEIGHT = 1.0;\n\ntype _TextLayerProps = {\n /** If `true`, the text always faces camera. Otherwise the text faces up (z).\n * @default true\n */\n billboard?: boolean;\n /**\n * Text size multiplier.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The units of the size, one of `'meters'`, `'common'`, and `'pixels'`.\n * @default 'pixels'\n */\n sizeUnits?: Unit;\n /**\n * The minimum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too small when zoomed out.\n * @default 0\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels. When using non-pixel `sizeUnits`, this prop can be used to prevent the icon from getting too big when zoomed in.\n * @default Number.MAX_SAFE_INTEGER\n */\n sizeMaxPixels?: number;\n\n /** Whether to render background for the text blocks.\n * @default false\n */\n background?: boolean;\n /** Background color accessor.\n * @default [255, 255, 255, 255]\n */\n getBackgroundColor?: Accessor;\n /** Border color accessor.\n * @default [0, 0, 0, 255]\n */\n getBorderColor?: Accessor;\n /** Border width accessor.\n * @default 0\n */\n getBorderWidth?: Accessor;\n /**\n * The padding of the background..\n * If an array of 2 is supplied, it is interpreted as `[padding_x, padding_y]` in pixels.\n * If an array of 4 is supplied, it is interpreted as `[padding_left, padding_top, padding_right, padding_bottom]` in pixels.\n * @default [0, 0, 0, 0]\n */\n backgroundPadding?: [number, number] | [number, number, number, number];\n /**\n * Specifies a list of characters to include in the font. If set to 'auto', will be automatically generated from the data set.\n * @default (ASCII characters 32-128)\n */\n characterSet?: FontSettings['characterSet'] | 'auto';\n /** CSS font family\n * @default 'Monaco, monospace'\n */\n fontFamily?: FontSettings['fontFamily'];\n /** CSS font weight\n * @default 'normal'\n */\n fontWeight?: FontSettings['fontWeight'];\n /** A unitless number that will be multiplied with the current font size to set the line height.\n * @default 'normal'\n */\n lineHeight?: number;\n /**\n * Width of outline around the text, relative to the font size. Only effective if `fontSettings.sdf` is `true`.\n * @default 0\n */\n outlineWidth?: number;\n /**\n * Color of outline around the text, in `[r, g, b, [a]]`. Each channel is a number between 0-255 and `a` is 255 if not supplied.\n * @default [0, 0, 0, 255]\n */\n outlineColor?: Color;\n /**\n * Advance options for fine tuning the appearance and performance of the generated shared `fontAtlas`.\n */\n fontSettings?: FontSettings;\n /**\n * Available options are `break-all` and `break-word`. A valid `maxWidth` has to be provided to use `wordBreak`.\n * @default 'break-word'\n */\n wordBreak?: 'break-word' | 'break-all';\n /**\n * `maxWidth` is used together with `break-word` for wrapping text. The value of `maxWidth` specifies the width limit to break the text into multiple lines.\n * @default -1\n */\n maxWidth?: number;\n /**\n * Label text accessor\n */\n getText?: AccessorFunction;\n /**\n * Anchor position accessor\n */\n getPosition?: Accessor;\n /**\n * Label color accessor\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Label size accessor\n * @default 32\n */\n getSize?: Accessor;\n /**\n * Label rotation accessor, in degrees\n * @default 0\n */\n getAngle?: Accessor;\n /**\n * Horizontal alignment accessor\n * @default 'middle'\n */\n getTextAnchor?: Accessor;\n /**\n * Vertical alignment accessor\n * @default 'center'\n */\n getAlignmentBaseline?: Accessor;\n /**\n * Label offset from the anchor position, [x, y] in pixels\n * @default [0, 0]\n */\n getPixelOffset?: Accessor;\n /**\n * @deprecated Use `background` and `getBackgroundColor` instead\n */\n backgroundColor?: Color;\n};\n\nexport type TextLayerProps = _TextLayerProps & LayerProps;\n\nconst defaultProps: DefaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n\n background: false,\n getBackgroundColor: {type: 'accessor', value: [255, 255, 255, 255]},\n getBorderColor: {type: 'accessor', value: DEFAULT_COLOR},\n getBorderWidth: {type: 'accessor', value: 0},\n backgroundPadding: {type: 'array', value: [0, 0, 0, 0]},\n\n characterSet: {type: 'object', value: DEFAULT_FONT_SETTINGS.characterSet},\n fontFamily: DEFAULT_FONT_SETTINGS.fontFamily,\n fontWeight: DEFAULT_FONT_SETTINGS.fontWeight,\n lineHeight: DEFAULT_LINE_HEIGHT,\n outlineWidth: {type: 'number', value: 0, min: 0},\n outlineColor: {type: 'color', value: DEFAULT_COLOR},\n fontSettings: {},\n\n // auto wrapping options\n wordBreak: 'break-word',\n maxWidth: {type: 'number', value: -1},\n\n getText: {type: 'accessor', value: x => x.text},\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n getSize: {type: 'accessor', value: 32},\n getAngle: {type: 'accessor', value: 0},\n getTextAnchor: {type: 'accessor', value: 'middle'},\n getAlignmentBaseline: {type: 'accessor', value: 'center'},\n getPixelOffset: {type: 'accessor', value: [0, 0]},\n\n // deprecated\n backgroundColor: {deprecatedFor: ['background', 'getBackgroundColor']}\n};\n\n/** Render text labels at given coordinates. */\nexport default class TextLayer extends CompositeLayer<\n ExtraPropsT & Required<_TextLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TextLayer';\n\n state!: {\n styleVersion: number;\n fontAtlasManager: FontAtlasManager;\n characterSet?: Set;\n startIndices?: number[];\n numInstances?: number;\n getText?: AccessorFunction;\n };\n\n initializeState() {\n this.state = {\n styleVersion: 0,\n fontAtlasManager: new FontAtlasManager()\n };\n }\n\n // eslint-disable-next-line complexity\n updateState(params: UpdateParameters) {\n const {props, oldProps, changeFlags} = params;\n const textChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getText));\n\n if (textChanged) {\n this._updateText();\n }\n\n const fontChanged = this._updateFontAtlas();\n\n const styleChanged =\n fontChanged ||\n props.lineHeight !== oldProps.lineHeight ||\n props.wordBreak !== oldProps.wordBreak ||\n props.maxWidth !== oldProps.maxWidth;\n\n if (styleChanged) {\n this.setState({\n styleVersion: this.state.styleVersion + 1\n });\n }\n }\n\n getPickingInfo({info}: GetPickingInfoParams): PickingInfo {\n // because `TextLayer` assign the same pickingInfoIndex for one text label,\n // here info.index refers the index of text label in props.data\n info.object = info.index >= 0 ? this.props.data[info.index] : null;\n return info;\n }\n\n /** Returns true if font has changed */\n private _updateFontAtlas(): boolean {\n const {fontSettings, fontFamily, fontWeight} = this.props;\n const {fontAtlasManager, characterSet} = this.state;\n\n const fontProps = {\n ...fontSettings,\n characterSet,\n fontFamily,\n fontWeight\n };\n\n if (!fontAtlasManager.mapping) {\n // This is the first update\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n\n for (const key in fontProps) {\n if (fontProps[key] !== fontAtlasManager.props[key]) {\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n }\n\n return false;\n }\n\n // Text strings are variable width objects\n // Count characters and start offsets\n private _updateText() {\n const {data, characterSet} = this.props;\n const textBuffer = (data as any).attributes?.getText;\n let {getText} = this.props;\n let startIndices: number[] = (data as any).startIndices;\n let numInstances: number;\n\n const autoCharacterSet = characterSet === 'auto' && new Set();\n\n if (textBuffer && startIndices) {\n const {texts, characterCount} = getTextFromBuffer({\n ...(ArrayBuffer.isView(textBuffer) ? {value: textBuffer} : textBuffer),\n // @ts-ignore if data.attribute is defined then length is expected\n length: data.length,\n startIndices,\n characterSet: autoCharacterSet\n });\n numInstances = characterCount;\n getText = (_, {index}) => texts[index];\n } else {\n const {iterable, objectInfo} = createIterable(data);\n startIndices = [0];\n numInstances = 0;\n\n for (const object of iterable) {\n objectInfo.index++;\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const text = Array.from(getText(object, objectInfo) || '');\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n text.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n numInstances += text.length;\n startIndices.push(numInstances);\n }\n }\n\n this.setState({\n getText,\n startIndices,\n numInstances,\n characterSet: autoCharacterSet || characterSet\n });\n }\n\n // Returns the x, y offsets of each character in a text string\n private getBoundingRect: AccessorFunction = (\n object,\n objectInfo\n ) => {\n const iconMapping = this.state.fontAtlasManager.mapping!;\n const getText = this.state.getText!;\n const {wordBreak, maxWidth, lineHeight, getTextAnchor, getAlignmentBaseline} = this.props;\n\n const paragraph = getText(object, objectInfo) || '';\n const {\n size: [width, height]\n } = transformParagraph(paragraph, lineHeight, wordBreak, maxWidth, iconMapping);\n const anchorX =\n TEXT_ANCHOR[\n typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor\n ];\n const anchorY =\n ALIGNMENT_BASELINE[\n typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline\n ];\n\n return [((anchorX - 1) * width) / 2, ((anchorY - 1) * height) / 2, width, height];\n };\n\n // Returns the x, y, w, h of each text object\n private getIconOffsets: AccessorFunction = (object, objectInfo) => {\n const iconMapping = this.state.fontAtlasManager.mapping!;\n const getText = this.state.getText!;\n const {wordBreak, maxWidth, lineHeight, getTextAnchor, getAlignmentBaseline} = this.props;\n\n const paragraph = getText(object, objectInfo) || '';\n const {\n x,\n y,\n rowWidth,\n size: [width, height]\n } = transformParagraph(paragraph, lineHeight, wordBreak, maxWidth, iconMapping);\n const anchorX =\n TEXT_ANCHOR[\n typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor\n ];\n const anchorY =\n ALIGNMENT_BASELINE[\n typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline\n ];\n\n const numCharacters = x.length;\n const offsets = new Array(numCharacters * 2);\n let index = 0;\n\n for (let i = 0; i < numCharacters; i++) {\n // For a multi-line object, offset in x-direction needs consider\n // the row offset in the paragraph and the object offset in the row\n const rowOffset = ((1 - anchorX) * (width - rowWidth[i])) / 2;\n offsets[index++] = ((anchorX - 1) * width) / 2 + rowOffset + x[i];\n offsets[index++] = ((anchorY - 1) * height) / 2 + y[i];\n }\n return offsets;\n };\n\n renderLayers() {\n const {\n startIndices,\n numInstances,\n getText,\n fontAtlasManager: {scale, texture, mapping},\n styleVersion\n } = this.state;\n\n const {\n data,\n _dataDiff,\n getPosition,\n getColor,\n getSize,\n getAngle,\n getPixelOffset,\n getBackgroundColor,\n getBorderColor,\n getBorderWidth,\n backgroundPadding,\n background,\n billboard,\n fontSettings,\n outlineWidth,\n outlineColor,\n sizeScale,\n sizeUnits,\n sizeMinPixels,\n sizeMaxPixels,\n transitions,\n updateTriggers\n } = this.props;\n\n const CharactersLayerClass = this.getSubLayerClass('characters', MultiIconLayer);\n const BackgroundLayerClass = this.getSubLayerClass('background', TextBackgroundLayer);\n\n return [\n background &&\n new BackgroundLayerClass(\n {\n // background props\n getFillColor: getBackgroundColor,\n getLineColor: getBorderColor,\n getLineWidth: getBorderWidth,\n padding: backgroundPadding,\n\n // props shared with characters layer\n getPosition,\n getSize,\n getAngle,\n getPixelOffset,\n billboard,\n sizeScale: sizeScale / this.state.fontAtlasManager.props.fontSize,\n sizeUnits,\n sizeMinPixels,\n sizeMaxPixels,\n\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getSize: transitions.getSize,\n getFillColor: transitions.getBackgroundColor,\n getLineColor: transitions.getBorderColor,\n getLineWidth: transitions.getBorderWidth,\n getPixelOffset: transitions.getPixelOffset\n }\n },\n this.getSubLayerProps({\n id: 'background',\n updateTriggers: {\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getSize: updateTriggers.getSize,\n getFillColor: updateTriggers.getBackgroundColor,\n getLineColor: updateTriggers.getBorderColor,\n getLineWidth: updateTriggers.getBorderWidth,\n getPixelOffset: updateTriggers.getPixelOffset,\n getBoundingRect: {\n getText: updateTriggers.getText,\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }),\n {\n data:\n // @ts-ignore (2339) attribute is not defined on all data types\n data.attributes && data.attributes.background\n ? // @ts-ignore (2339) attribute is not defined on all data types\n {length: data.length, attributes: data.attributes.background}\n : data,\n _dataDiff,\n // Maintain the same background behavior as <=8.3. Remove in v9?\n autoHighlight: false,\n getBoundingRect: this.getBoundingRect\n }\n ),\n new CharactersLayerClass(\n {\n sdf: fontSettings.sdf,\n smoothing: Number.isFinite(fontSettings.smoothing)\n ? fontSettings.smoothing\n : DEFAULT_FONT_SETTINGS.smoothing,\n outlineWidth,\n outlineColor,\n iconAtlas: texture,\n iconMapping: mapping,\n\n getPosition,\n getColor,\n getSize,\n getAngle,\n getPixelOffset,\n\n billboard,\n sizeScale: sizeScale * scale,\n sizeUnits,\n sizeMinPixels: sizeMinPixels * scale,\n sizeMaxPixels: sizeMaxPixels * scale,\n\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getColor: transitions.getColor,\n getSize: transitions.getSize,\n getPixelOffset: transitions.getPixelOffset\n }\n },\n this.getSubLayerProps({\n id: 'characters',\n updateTriggers: {\n getIcon: updateTriggers.getText,\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getColor: updateTriggers.getColor,\n getSize: updateTriggers.getSize,\n getPixelOffset: updateTriggers.getPixelOffset,\n getIconOffsets: {\n getText: updateTriggers.getText,\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }),\n {\n data,\n _dataDiff,\n startIndices,\n numInstances,\n getIconOffsets: this.getIconOffsets,\n getIcon: getText\n }\n )\n ];\n }\n\n static set fontAtlasCacheLimit(limit: number) {\n setFontAtlasCacheLimit(limit);\n }\n}\n","// Assume data array is sorted by \n// Replaces the specified range with a new subarray\n// Mutates the data array\n// Returns {startRow, endRow} of the inserted items\nexport function replaceInRange({\n data,\n getIndex,\n dataRange,\n replace\n}: {\n data: any[];\n getIndex: (d: any) => number;\n dataRange: {startRow?: number; endRow?: number};\n replace: any[];\n}): {startRow: Number; endRow: number} {\n const {startRow = 0, endRow = Infinity} = dataRange;\n const count = data.length;\n let replaceStart = count;\n let replaceEnd = count;\n for (let i = 0; i < count; i++) {\n const row = getIndex(data[i]);\n if (replaceStart > i && row >= startRow) {\n replaceStart = i;\n }\n if (row >= endRow) {\n replaceEnd = i;\n break;\n }\n }\n let index = replaceStart;\n const dataLengthChanged = replaceEnd - replaceStart !== replace.length;\n // Save the items after replaceEnd before we overwrite data\n const endChunk = dataLengthChanged ? data.slice(replaceEnd) : undefined;\n // Insert new items\n for (let i = 0; i < replace.length; i++) {\n data[index++] = replace[i];\n }\n if (endChunk) {\n // Append items after replaceEnd\n for (let i = 0; i < endChunk.length; i++) {\n data[index++] = endChunk[i];\n }\n // Trim additional items\n data.length = index;\n }\n\n return {\n startRow: replaceStart,\n endRow: replaceStart + replace.length\n };\n}\n","'use strict';\n\nmodule.exports = TinySDF;\nmodule.exports.default = TinySDF;\n\nvar INF = 1e20;\n\nfunction TinySDF(fontSize, buffer, radius, cutoff, fontFamily, fontWeight) {\n this.fontSize = fontSize || 24;\n this.buffer = buffer === undefined ? 3 : buffer;\n this.cutoff = cutoff || 0.25;\n this.fontFamily = fontFamily || 'sans-serif';\n this.fontWeight = fontWeight || 'normal';\n this.radius = radius || 8;\n\n // For backwards compatibility, we honor the implicit contract that the\n // size of the returned bitmap will be fontSize + buffer * 2\n var size = this.size = this.fontSize + this.buffer * 2;\n // Glyphs may be slightly larger than their fontSize. The canvas already\n // has buffer space, but create extra buffer space in the output grid for the\n // \"halo\" to extend into (if metric extraction is enabled)\n var gridSize = size + this.buffer * 2;\n\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.canvas.height = size;\n\n this.ctx = this.canvas.getContext('2d');\n this.ctx.font = this.fontWeight + ' ' + this.fontSize + 'px ' + this.fontFamily;\n\n this.ctx.textAlign = 'left'; // Necessary so that RTL text doesn't have different alignment\n this.ctx.fillStyle = 'black';\n\n // temporary arrays for the distance transform\n this.gridOuter = new Float64Array(gridSize * gridSize);\n this.gridInner = new Float64Array(gridSize * gridSize);\n this.f = new Float64Array(gridSize);\n this.z = new Float64Array(gridSize + 1);\n this.v = new Uint16Array(gridSize);\n\n this.useMetrics = this.ctx.measureText('A').actualBoundingBoxLeft !== undefined;\n\n // hack around https://bugzilla.mozilla.org/show_bug.cgi?id=737852\n this.middle = Math.round((size / 2) * (navigator.userAgent.indexOf('Gecko/') >= 0 ? 1.2 : 1));\n}\n\nfunction prepareGrids(imgData, width, height, glyphWidth, glyphHeight, gridOuter, gridInner) {\n // Initialize grids outside the glyph range to alpha 0\n gridOuter.fill(INF, 0, width * height);\n gridInner.fill(0, 0, width * height);\n\n var offset = (width - glyphWidth) / 2; // This is zero if we're not extracting metrics\n\n for (var y = 0; y < glyphHeight; y++) {\n for (var x = 0; x < glyphWidth; x++) {\n var j = (y + offset) * width + x + offset;\n var a = imgData.data[4 * (y * glyphWidth + x) + 3] / 255; // alpha value\n if (a === 1) {\n gridOuter[j] = 0;\n gridInner[j] = INF;\n } else if (a === 0) {\n gridOuter[j] = INF;\n gridInner[j] = 0;\n } else {\n var b = Math.max(0, 0.5 - a);\n var c = Math.max(0, a - 0.5);\n gridOuter[j] = b * b;\n gridInner[j] = c * c;\n }\n }\n }\n}\n\nfunction extractAlpha(alphaChannel, width, height, gridOuter, gridInner, radius, cutoff) {\n for (var i = 0; i < width * height; i++) {\n var d = Math.sqrt(gridOuter[i]) - Math.sqrt(gridInner[i]);\n alphaChannel[i] = Math.round(255 - 255 * (d / radius + cutoff));\n }\n}\n\nTinySDF.prototype._draw = function (char, getMetrics) {\n var textMetrics = this.ctx.measureText(char);\n // Older browsers only expose the glyph width\n // This is enough for basic layout with all glyphs using the same fixed size\n var advance = textMetrics.width;\n\n var doubleBuffer = 2 * this.buffer;\n var width, glyphWidth, height, glyphHeight, top;\n\n var imgTop, imgLeft, baselinePosition;\n // If the browser supports bounding box metrics, we can generate a smaller\n // SDF. This is a significant performance win.\n if (getMetrics && this.useMetrics) {\n // The integer/pixel part of the top alignment is encoded in metrics.top\n // The remainder is implicitly encoded in the rasterization\n top = Math.floor(textMetrics.actualBoundingBoxAscent);\n baselinePosition = this.buffer + Math.ceil(textMetrics.actualBoundingBoxAscent);\n imgTop = this.buffer;\n imgLeft = this.buffer;\n\n // If the glyph overflows the canvas size, it will be clipped at the\n // bottom/right\n glyphWidth = Math.min(this.size,\n Math.ceil(textMetrics.actualBoundingBoxRight - textMetrics.actualBoundingBoxLeft));\n glyphHeight = Math.min(this.size - imgTop,\n Math.ceil(textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent));\n\n width = glyphWidth + doubleBuffer;\n height = glyphHeight + doubleBuffer;\n this.ctx.textBaseline = 'alphabetic';\n } else {\n width = glyphWidth = this.size;\n height = glyphHeight = this.size;\n // 19 points is an approximation of the \"cap height\" ascent from alphabetic\n // baseline (even though actual drawing is from middle baseline, we can\n // use the approximation because every glyph fills the em box)\n top = 19 * this.fontSize / 24;\n imgTop = imgLeft = 0;\n baselinePosition = this.middle;\n this.ctx.textBaseline = 'middle';\n }\n\n var imgData;\n if (glyphWidth && glyphHeight) {\n this.ctx.clearRect(imgLeft, imgTop, glyphWidth, glyphHeight);\n this.ctx.fillText(char, this.buffer, baselinePosition);\n imgData = this.ctx.getImageData(imgLeft, imgTop, glyphWidth, glyphHeight);\n }\n\n var alphaChannel = new Uint8ClampedArray(width * height);\n\n prepareGrids(imgData, width, height, glyphWidth, glyphHeight, this.gridOuter, this.gridInner);\n\n edt(this.gridOuter, width, height, this.f, this.v, this.z);\n edt(this.gridInner, width, height, this.f, this.v, this.z);\n\n extractAlpha(alphaChannel, width, height, this.gridOuter, this.gridInner, this.radius, this.cutoff);\n\n return {\n data: alphaChannel,\n metrics: {\n width: glyphWidth,\n height: glyphHeight,\n sdfWidth: width,\n sdfHeight: height,\n top: top,\n left: 0,\n advance: advance\n }\n };\n};\n\nTinySDF.prototype.draw = function (char) {\n return this._draw(char, false).data;\n};\n\nTinySDF.prototype.drawWithMetrics = function (char) {\n return this._draw(char, true);\n};\n\n// 2D Euclidean squared distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/papers/dt-final.pdf\nfunction edt(data, width, height, f, v, z) {\n for (var x = 0; x < width; x++) edt1d(data, x, width, height, f, v, z);\n for (var y = 0; y < height; y++) edt1d(data, y * width, 1, width, f, v, z);\n}\n\n// 1D squared distance transform\nfunction edt1d(grid, offset, stride, length, f, v, z) {\n var q, k, s, r;\n v[0] = 0;\n z[0] = -INF;\n z[1] = INF;\n\n for (q = 0; q < length; q++) f[q] = grid[offset + q * stride];\n\n for (q = 1, k = 0, s = 0; q < length; q++) {\n do {\n r = v[k];\n s = (f[q] - f[r] + q * q - r * r) / (q - r) / 2;\n } while (s <= z[k] && --k > -1);\n\n k++;\n v[k] = q;\n z[k] = s;\n z[k + 1] = INF;\n }\n\n for (q = 0, k = 0; q < length; q++) {\n while (z[k + 1] < q) k++;\n r = v[k];\n grid[offset + q * stride] = f[r] + (q - r) * (q - r);\n }\n}\n","import {Vector3, Matrix4} from '@math.gl/core';\nimport {assert, uid} from '@luma.gl/webgl';\n\nexport default class ScenegraphNode {\n constructor(props = {}) {\n const {id} = props;\n\n this.id = id || uid(this.constructor.name);\n\n this.display = true; // whether to display the object at all\n this.position = new Vector3();\n this.rotation = new Vector3();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n this.userData = {};\n\n this.props = {};\n this._setScenegraphNodeProps(props);\n }\n\n delete() {}\n\n setProps(props) {\n this._setScenegraphNodeProps(props);\n return this;\n }\n\n toString() {\n return `{type: ScenegraphNode, id: ${this.id})}`;\n }\n\n setPosition(position) {\n assert(position.length === 3, 'setPosition requires vector argument');\n this.position = position;\n return this;\n }\n\n setRotation(rotation) {\n assert(rotation.length === 3, 'setRotation requires vector argument');\n this.rotation = rotation;\n return this;\n }\n\n setScale(scale) {\n assert(scale.length === 3, 'setScale requires vector argument');\n this.scale = scale;\n return this;\n }\n\n setMatrix(matrix, copyMatrix = true) {\n if (copyMatrix) {\n this.matrix.copy(matrix);\n } else {\n this.matrix = matrix;\n }\n }\n\n setMatrixComponents({position, rotation, scale, update = true}) {\n if (position) {\n this.setPosition(position);\n }\n if (rotation) {\n this.setRotation(rotation);\n }\n if (scale) {\n this.setScale(scale);\n }\n if (update) {\n this.updateMatrix();\n }\n return this;\n }\n\n updateMatrix() {\n const pos = this.position;\n const rot = this.rotation;\n const scale = this.scale;\n\n this.matrix.identity();\n this.matrix.translate(pos);\n this.matrix.rotateXYZ(rot);\n this.matrix.scale(scale);\n return this;\n }\n\n update(options = {}) {\n const {position, rotation, scale} = options;\n if (position) {\n this.setPosition(position);\n }\n if (rotation) {\n this.setRotation(rotation);\n }\n if (scale) {\n this.setScale(scale);\n }\n this.updateMatrix();\n return this;\n }\n\n getCoordinateUniforms(viewMatrix, modelMatrix) {\n // TODO - solve multiple class problem\n // assert(viewMatrix instanceof Matrix4);\n assert(viewMatrix);\n modelMatrix = modelMatrix || this.matrix;\n const worldMatrix = new Matrix4(viewMatrix).multiplyRight(modelMatrix);\n const worldInverse = worldMatrix.invert();\n const worldInverseTranspose = worldInverse.transpose();\n\n return {\n viewMatrix,\n modelMatrix,\n objectMatrix: modelMatrix,\n worldMatrix,\n worldInverseMatrix: worldInverse,\n worldInverseTransposeMatrix: worldInverseTranspose\n };\n }\n\n // TODO - copied code, not yet vetted\n /*\n transform() {\n if (!this.parent) {\n this.endPosition.set(this.position);\n this.endRotation.set(this.rotation);\n this.endScale.set(this.scale);\n } else {\n const parent = this.parent;\n this.endPosition.set(this.position.add(parent.endPosition));\n this.endRotation.set(this.rotation.add(parent.endRotation));\n this.endScale.set(this.scale.add(parent.endScale));\n }\n\n const ch = this.children;\n for (let i = 0; i < ch.length; ++i) {\n ch[i].transform();\n }\n\n return this;\n }\n */\n\n _setScenegraphNodeProps(props) {\n if ('display' in props) {\n this.display = props.display;\n }\n\n if ('position' in props) {\n this.setPosition(props.position);\n }\n if ('rotation' in props) {\n this.setRotation(props.rotation);\n }\n if ('scale' in props) {\n this.setScale(props.scale);\n }\n\n // Matrix overwrites other props\n if ('matrix' in props) {\n this.setMatrix(props.matrix);\n }\n\n Object.assign(this.props, props);\n }\n}\n","import {Matrix4} from '@math.gl/core';\nimport {log} from '@luma.gl/webgl';\nimport ScenegraphNode from './scenegraph-node';\n\nexport default class GroupNode extends ScenegraphNode {\n constructor(props = {}) {\n props = Array.isArray(props) ? {children: props} : props;\n const {children = []} = props;\n log.assert(\n children.every(child => child instanceof ScenegraphNode),\n 'every child must an instance of ScenegraphNode'\n );\n super(props);\n this.children = children;\n }\n\n // Unpacks arrays and nested arrays of children\n add(...children) {\n for (const child of children) {\n if (Array.isArray(child)) {\n this.add(...child);\n } else {\n this.children.push(child);\n }\n }\n return this;\n }\n\n remove(child) {\n const children = this.children;\n const indexOf = children.indexOf(child);\n if (indexOf > -1) {\n children.splice(indexOf, 1);\n }\n return this;\n }\n\n removeAll() {\n this.children = [];\n return this;\n }\n\n delete() {\n this.children.forEach(child => child.delete());\n this.removeAll();\n super.delete();\n }\n\n traverse(visitor, {worldMatrix = new Matrix4()} = {}) {\n const modelMatrix = new Matrix4(worldMatrix).multiplyRight(this.matrix);\n\n for (const child of this.children) {\n if (child instanceof GroupNode) {\n child.traverse(visitor, {worldMatrix: modelMatrix});\n } else {\n visitor(child, {worldMatrix: modelMatrix});\n }\n }\n }\n}\n","import {assert, log} from '@luma.gl/webgl';\nimport {Matrix4, Quaternion} from '@math.gl/core';\n\n// TODO: import from loaders.gl?\nexport const ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nexport const ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n//\n\nfunction accessorToJsArray(accessor) {\n if (!accessor._animation) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const length = components * accessor.count;\n const {buffer, byteOffset} = accessor.bufferView.data;\n\n const array = new ArrayType(buffer, byteOffset + (accessor.byteOffset || 0), length);\n\n if (components === 1) {\n accessor._animation = Array.from(array);\n } else {\n // Slice array\n const slicedArray = [];\n for (let i = 0; i < array.length; i += components) {\n slicedArray.push(Array.from(array.slice(i, i + components)));\n }\n accessor._animation = slicedArray;\n }\n }\n\n return accessor._animation;\n}\n\n// TODO: share with GLTFInstantiator\nconst helperMatrix = new Matrix4();\nfunction applyTranslationRotationScale(gltfNode, node) {\n node.matrix.identity();\n\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n\n if (gltfNode.rotation) {\n const rotationMatrix = helperMatrix.fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n}\n\nconst quaternion = new Quaternion();\nfunction linearInterpolate(target, path, start, stop, ratio) {\n if (path === 'rotation') {\n // SLERP when path is rotation\n quaternion.slerp({start, target: stop, ratio});\n for (let i = 0; i < quaternion.length; i++) {\n target[path][i] = quaternion[i];\n }\n } else {\n // regular interpolation\n for (let i = 0; i < start.length; i++) {\n target[path][i] = ratio * stop[i] + (1 - ratio) * start[i];\n }\n }\n}\n\nfunction cubicsplineInterpolate(target, path, {p0, outTangent0, inTangent1, p1, tDiff, ratio: t}) {\n // TODO: Quaternion might need normalization\n for (let i = 0; i < target[path].length; i++) {\n const m0 = outTangent0[i] * tDiff;\n const m1 = inTangent1[i] * tDiff;\n target[path][i] =\n (2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] +\n (Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 +\n (-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] +\n (Math.pow(t, 3) - Math.pow(t, 2)) * m1;\n }\n}\n\nfunction stepInterpolate(target, path, value) {\n for (let i = 0; i < value.length; i++) {\n target[path][i] = value[i];\n }\n}\n\nfunction interpolate(time, {input, interpolation, output}, target, path) {\n const maxTime = input[input.length - 1];\n const animationTime = time % maxTime;\n\n const nextIndex = input.findIndex(t => t >= animationTime);\n const previousIndex = Math.max(0, nextIndex - 1);\n\n if (!Array.isArray(target[path])) {\n switch (path) {\n case 'translation':\n target[path] = [0, 0, 0];\n break;\n\n case 'rotation':\n target[path] = [0, 0, 0, 1];\n break;\n\n case 'scale':\n target[path] = [1, 1, 1];\n break;\n\n default:\n log.warn(`Bad animation path ${path}`)();\n }\n }\n\n assert(target[path].length === output[previousIndex].length);\n const previousTime = input[previousIndex];\n const nextTime = input[nextIndex];\n\n switch (interpolation) {\n case 'STEP':\n stepInterpolate(target, path, output[previousIndex]);\n break;\n\n case 'LINEAR':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n linearInterpolate(target, path, output[previousIndex], output[nextIndex], ratio);\n }\n break;\n\n case 'CUBICSPLINE':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n const tDiff = nextTime - previousTime;\n\n const p0 = output[3 * previousIndex + 1];\n const outTangent0 = output[3 * previousIndex + 2];\n const inTangent1 = output[3 * nextIndex + 0];\n const p1 = output[3 * nextIndex + 1];\n\n cubicsplineInterpolate(target, path, {p0, outTangent0, inTangent1, p1, tDiff, ratio});\n }\n break;\n\n default:\n log.warn(`Interpolation ${interpolation} not supported`)();\n break;\n }\n}\n\nclass GLTFAnimation {\n constructor(props) {\n this.startTime = 0;\n this.playing = true;\n this.speed = 1;\n this.channels = [];\n\n Object.assign(this, props);\n }\n\n animate(timeMs) {\n if (!this.playing) {\n return;\n }\n\n const absTime = timeMs / 1000;\n const time = (absTime - this.startTime) * this.speed;\n\n this.channels.forEach(({sampler, target, path}) => {\n interpolate(time, sampler, target, path);\n applyTranslationRotationScale(target, target._node);\n });\n }\n}\n\nexport default class GLTFAnimator {\n constructor(gltf) {\n this.animations = gltf.animations.map((animation, index) => {\n const name = animation.name || `Animation-${index}`;\n const samplers = animation.samplers.map(({input, interpolation = 'LINEAR', output}) => ({\n input: accessorToJsArray(gltf.accessors[input]),\n interpolation,\n output: accessorToJsArray(gltf.accessors[output])\n }));\n const channels = animation.channels.map(({sampler, target}) => ({\n sampler: samplers[sampler],\n target: gltf.nodes[target.node],\n path: target.path\n }));\n return new GLTFAnimation({name, channels});\n });\n }\n\n // TODO(Tarek): This should be removed? (deck.gl is using this)\n animate(time) {\n this.setTime(time);\n }\n\n setTime(time) {\n this.animations.forEach(animation => animation.animate(time));\n }\n\n getAnimations() {\n return this.animations;\n }\n}\n","import {Model} from '@luma.gl/engine';\nimport ScenegraphNode from './scenegraph-node';\n\nexport default class ModelNode extends ScenegraphNode {\n constructor(gl, props = {}) {\n super(props);\n\n // pverride callbacks to make sure we call them with this\n this.onBeforeRender = null;\n this.AfterRender = null;\n\n // Create new Model or used supplied Model\n if (gl instanceof Model) {\n this.model = gl;\n this._setModelNodeProps(props);\n } else {\n this.model = new Model(gl, props);\n }\n\n this.managedResources = props.managedResources || [];\n }\n\n setProps(props) {\n super.setProps(props);\n this._setModelNodeProps(props);\n return this;\n }\n\n delete() {\n if (this.model) {\n this.model.delete();\n this.model = null;\n }\n\n this.managedResources.forEach(resource => resource.delete());\n this.managedResources = [];\n }\n\n // Forward node methods\n draw(...args) {\n // Return value indicates if something was actually drawn\n return this.model.draw(...args);\n }\n\n setUniforms(...args) {\n this.model.setUniforms(...args);\n return this;\n }\n\n setAttributes(...args) {\n this.model.setAttributes(...args);\n return this;\n }\n\n updateModuleSettings(...args) {\n this.model.updateModuleSettings(...args);\n return this;\n }\n\n // PRIVATE\n\n _setModelNodeProps(props) {\n this.model.setProps(props);\n }\n}\n","import {isWebGL2} from '@luma.gl/gltools';\nimport {log} from '@luma.gl/webgl';\nimport {pbr} from '@luma.gl/shadertools';\nimport ModelNode from '../scenegraph/model-node';\nimport GLTFMaterialParser from './gltf-material-parser';\n\nconst vs = `\n#if (__VERSION__ < 300)\n #define _attr attribute\n#else\n #define _attr in\n#endif\n\n _attr vec4 POSITION;\n\n #ifdef HAS_NORMALS\n _attr vec4 NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n _attr vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n _attr vec2 TEXCOORD_0;\n #endif\n\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = TEXCOORD_0;\n #endif\n\n pbr_setPositionNormalTangentUV(POSITION, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = u_MVPMatrix * POSITION;\n }\n`;\n\nconst fs = `\n#if (__VERSION__ < 300)\n #define fragmentColor gl_FragColor\n#else\n out vec4 fragmentColor;\n#endif\n\n void main(void) {\n fragmentColor = pbr_filterColor(vec4(0));\n }\n`;\n\nfunction addVersionToShader(gl, source) {\n if (isWebGL2(gl)) {\n return `#version 300 es\\n${source}`;\n }\n\n return source;\n}\n\nexport default function createGLTFModel(gl, options) {\n const {id, drawMode, vertexCount, attributes, modelOptions} = options;\n const materialParser = new GLTFMaterialParser(gl, options);\n\n log.info(4, 'createGLTFModel defines: ', materialParser.defines)();\n\n // Calculate managedResources\n // TODO: Implement resource management logic that will\n // not deallocate resources/textures/buffers that are shared\n const managedResources = [];\n managedResources.push(...materialParser.generatedTextures);\n managedResources.push(...Object.values(attributes).map(attribute => attribute.buffer));\n\n const model = new ModelNode(\n gl,\n Object.assign(\n {\n id,\n drawMode,\n vertexCount,\n modules: [pbr],\n defines: materialParser.defines,\n parameters: materialParser.parameters,\n vs: addVersionToShader(gl, vs),\n fs: addVersionToShader(gl, fs),\n managedResources\n },\n modelOptions\n )\n );\n\n model.setProps({attributes});\n model.setUniforms(materialParser.uniforms);\n\n return model;\n}\n","import {Matrix4} from '@math.gl/core';\nimport {Buffer, Accessor, log} from '@luma.gl/webgl';\nimport GroupNode from '../scenegraph/group-node';\n\nimport GLTFAnimator from './gltf-animator';\nimport createGLTFModel from './create-gltf-model';\n\n// TODO: import {ATTRIBUTE_TYPE_TO_COMPONENTS} from '@loaders.gl/gltf';\nconst ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst DEFAULT_OPTIONS = {\n modelOptions: {},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n};\n\n// GLTF instantiator for luma.gl\n// Walks the parsed and resolved glTF structure and builds a luma.gl scenegraph\nexport default class GLTFInstantiator {\n constructor(gl, options = {}) {\n this.gl = gl;\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n }\n\n instantiate(gltf) {\n this.gltf = gltf;\n const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));\n return scenes;\n }\n\n createAnimator() {\n if (Array.isArray(this.gltf.animations)) {\n return new GLTFAnimator(this.gltf);\n }\n\n return null;\n }\n\n createScene(gltfScene) {\n const gltfNodes = gltfScene.nodes || [];\n const nodes = gltfNodes.map(node => this.createNode(node));\n const scene = new GroupNode({\n id: gltfScene.name || gltfScene.id,\n children: nodes\n });\n return scene;\n }\n\n createNode(gltfNode) {\n if (!gltfNode._node) {\n const gltfChildren = gltfNode.children || [];\n const children = gltfChildren.map(child => this.createNode(child));\n\n // Node can have children nodes and meshes at the same time\n if (gltfNode.mesh) {\n children.push(this.createMesh(gltfNode.mesh));\n }\n\n const node = new GroupNode({\n id: gltfNode.name || gltfNode.id,\n children\n });\n\n if (gltfNode.matrix) {\n node.setMatrix(gltfNode.matrix);\n } else {\n node.matrix.identity();\n\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n\n if (gltfNode.rotation) {\n const rotationMatrix = new Matrix4().fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n }\n gltfNode._node = node;\n }\n\n return gltfNode._node;\n }\n\n createMesh(gltfMesh) {\n // TODO: avoid changing the gltf\n if (!gltfMesh._mesh) {\n const gltfPrimitives = gltfMesh.primitives || [];\n const primitives = gltfPrimitives.map((gltfPrimitive, i) =>\n this.createPrimitive(gltfPrimitive, i, gltfMesh)\n );\n const mesh = new GroupNode({\n id: gltfMesh.name || gltfMesh.id,\n children: primitives\n });\n gltfMesh._mesh = mesh;\n }\n\n return gltfMesh._mesh;\n }\n\n getVertexCount(attributes) {\n // TODO: implement this\n log.warn('getVertexCount() not found')();\n }\n\n createPrimitive(gltfPrimitive, i, gltfMesh) {\n return createGLTFModel(\n this.gl,\n Object.assign(\n {\n id: gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${i}`,\n drawMode: gltfPrimitive.mode || 4,\n vertexCount: gltfPrimitive.indices\n ? gltfPrimitive.indices.count\n : this.getVertexCount(gltfPrimitive.attributes),\n attributes: this.createAttributes(gltfPrimitive.attributes, gltfPrimitive.indices),\n material: gltfPrimitive.material\n },\n this.options\n )\n );\n }\n\n createAttributes(attributes, indices) {\n const loadedAttributes = {};\n\n Object.keys(attributes).forEach(attrName => {\n loadedAttributes[attrName] = this.createAccessor(\n attributes[attrName],\n this.createBuffer(attributes[attrName], this.gl.ARRAY_BUFFER)\n );\n });\n\n if (indices) {\n loadedAttributes.indices = this.createAccessor(\n indices,\n this.createBuffer(indices, this.gl.ELEMENT_ARRAY_BUFFER)\n );\n }\n\n log.info(4, 'glTF Attributes', {attributes, indices, generated: loadedAttributes})();\n\n return loadedAttributes;\n }\n\n createBuffer(attribute, target) {\n if (!attribute.bufferView) {\n // Draco decoded files do not have a bufferView\n attribute.bufferView = {};\n }\n\n const {bufferView} = attribute;\n if (!bufferView.lumaBuffers) {\n bufferView.lumaBuffers = {};\n }\n\n if (!bufferView.lumaBuffers[target]) {\n bufferView.lumaBuffers[target] = new Buffer(this.gl, {\n id: `from-${bufferView.id}`,\n // Draco decoded files have attribute.value\n data: bufferView.data || attribute.value,\n target\n });\n }\n\n return bufferView.lumaBuffers[target];\n }\n\n createAccessor(accessor, buffer) {\n return new Accessor({\n buffer,\n offset: accessor.byteOffset || 0,\n stride: accessor.bufferView.byteStride || 0,\n type: accessor.componentType,\n size: ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type]\n });\n }\n\n // TODO - create sampler in WebGL2\n createSampler(gltfSampler) {\n return gltfSampler;\n }\n\n // Helper methods (move to GLTFLoader.resolve...?)\n\n needsPOT() {\n // Has a wrapping mode (either wrapS or wrapT) equal to REPEAT or MIRRORED_REPEAT, or\n // Has a minification filter (minFilter) that uses mipmapping\n // (NEAREST_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR,\n // LINEAR_MIPMAP_NEAREST, or LINEAR_MIPMAP_LINEAR).\n return false;\n }\n}\n","/* global requestAnimationFrame */\nimport type {GroupNode, ModelNode} from '@luma.gl/experimental';\n\nexport async function waitForGLTFAssets(gltfObjects: {scenes: GroupNode[]}): Promise {\n const remaining: any[] = [];\n\n gltfObjects.scenes.forEach(scene => {\n scene.traverse((model: ModelNode) => {\n Object.values(model.model.getUniforms()).forEach((uniform: any) => {\n if (uniform.loaded === false) {\n remaining.push(uniform);\n }\n });\n });\n });\n\n return await waitWhileCondition(() => remaining.some(uniform => !uniform.loaded));\n}\n\nasync function waitWhileCondition(condition: () => boolean): Promise {\n while (condition()) {\n await new Promise(resolve => requestAnimationFrame(resolve));\n }\n}\n","export default `\\\n#version 300 es\n\n// Instance attributes\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\nin vec3 instanceTranslation;\n\n// Uniforms\nuniform float sizeScale;\nuniform float sizeMinPixels;\nuniform float sizeMaxPixels;\nuniform mat4 sceneModelMatrix;\nuniform bool composeModelMatrix;\n\n// Attributes\nin vec4 POSITION;\n\n#ifdef HAS_UV\n in vec2 TEXCOORD_0;\n#endif\n\n#ifdef MODULE_PBR\n #ifdef HAS_NORMALS\n in vec4 NORMAL;\n #endif\n#endif\n\n// Varying\nout vec4 vColor;\n\n// MODULE_PBR contains all the varying definitions needed\n#ifndef MODULE_PBR\n #ifdef HAS_UV\n out vec2 vTEXCOORD_0;\n #endif\n#endif\n\n// Main\nvoid main(void) {\n #if defined(HAS_UV) && !defined(MODULE_PBR)\n vTEXCOORD_0 = TEXCOORD_0;\n geometry.uv = vTEXCOORD_0;\n #endif\n\n geometry.worldPosition = instancePositions;\n geometry.pickingColor = instancePickingColors;\n\n vec3 normal = vec3(0.0, 0.0, 1.0);\n #ifdef MODULE_PBR\n #ifdef HAS_NORMALS\n normal = instanceModelMatrix * (sceneModelMatrix * vec4(NORMAL.xyz, 0.0)).xyz;\n #endif\n #endif\n\n float originalSize = project_size_to_pixel(sizeScale);\n float clampedSize = clamp(originalSize, sizeMinPixels, sizeMaxPixels);\n\n vec3 pos = (instanceModelMatrix * (sceneModelMatrix * POSITION).xyz) * sizeScale * (clampedSize / originalSize) + instanceTranslation;\n if(composeModelMatrix) {\n DECKGL_FILTER_SIZE(pos, geometry);\n // using instancePositions as world coordinates\n // when using globe mode, this branch does not re-orient the model to align with the surface of the earth\n // call project_normal before setting position to avoid rotation\n geometry.normal = project_normal(normal);\n gl_Position = project_position_to_clipspace(pos + instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\n }\n else {\n pos = project_size(pos);\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, pos, geometry.position);\n geometry.normal = project_normal(normal);\n }\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBR\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 = TEXCOORD_0;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n vColor = instanceColors;\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","// Copyright (c) 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {Layer, project32, picking, log} from '@deck.gl/core';\nimport {isWebGL2} from '@luma.gl/core';\nimport {pbr} from '@luma.gl/shadertools';\nimport {\n ScenegraphNode,\n GroupNode,\n GLTFAnimator,\n GLTFEnvironment,\n createGLTFObjects\n} from '@luma.gl/experimental';\nimport GL from '@luma.gl/constants';\nimport {GLTFLoader} from '@loaders.gl/gltf';\nimport {waitForGLTFAssets} from './gltf-utils';\n\nimport {MATRIX_ATTRIBUTES, shouldComposeModelMatrix} from '../utils/matrix';\n\nimport vs from './scenegraph-layer-vertex.glsl';\nimport fs from './scenegraph-layer-fragment.glsl';\n\nimport type {\n UpdateParameters,\n LayerContext,\n LayerProps,\n Position,\n Color,\n Accessor,\n DefaultProps\n} from '@deck.gl/core';\n\nconst DEFAULT_COLOR: [number, number, number, number] = [255, 255, 255, 255];\n\nexport type ScenegraphLayerProps = _ScenegraphLayerProps & LayerProps;\n\ntype _ScenegraphLayerProps = {\n // TODO - define in luma.gl\n /**\n * A url for a glTF model or scenegraph loaded via a [scenegraph loader](https://loaders.gl/docs/specifications/category-scenegraph)\n */\n scenegraph: any;\n /**\n * Create a luma.gl GroupNode from the resolved scenegraph prop\n */\n getScene?: (\n scenegraph: any,\n context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}\n ) => GroupNode;\n /**\n * Create a luma.gl GLTFAnimator from the resolved scenegraph prop\n */\n getAnimator?: (\n scenegraph: any,\n context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}\n ) => GLTFAnimator;\n /**\n * (Experimental) animation configurations. Requires `_animate` on deck object.\n */\n _animations?: {\n [name: number | string | '*']: {\n /** If the animation is playing */\n playing?: boolean;\n /** Start time of the animation, default `0` */\n startTime?: number;\n /** Speed multiplier of the animation, default `1` */\n speed?: number;\n };\n } | null;\n /**\n * (Experimental) lighting mode\n * @default 'flat'\n */\n _lighting?: 'flat' | 'pbr';\n /**\n * (Experimental) lighting environment. Requires `_lighting` to be `'pbr'`.\n */\n _imageBasedLightingEnvironment?:\n | null\n | GLTFEnvironment\n | ((context: {gl: WebGLRenderingContext; layer: ScenegraphLayer}) => GLTFEnvironment);\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Color value or accessor.\n * @default [255, 255, 255, 255]\n */\n getColor?: Accessor;\n /**\n * Orientation in [pitch, yaw, roll] in degrees.\n * @see https://en.wikipedia.org/wiki/Euler_angles\n * @default [0, 0, 0]\n */\n getOrientation?: Accessor;\n /**\n * Scaling factor of the model along each axis.\n * @default [1, 1, 1]\n */\n getScale?: Accessor;\n /**\n * Translation from the anchor point, [x, y, z] in meters.\n * @default [0, 0, 0]\n */\n getTranslation?: Accessor;\n /**\n * TransformMatrix. If specified, `getOrientation`, `getScale` and `getTranslation` are ignored.\n */\n getTransformMatrix?: Accessor;\n /**\n * Multiplier to scale each geometry by.\n * @default 1\n */\n sizeScale?: number;\n /**\n * The minimum size in pixels for one unit of the scene.\n * @default 0\n */\n sizeMinPixels?: number;\n /**\n * The maximum size in pixels for one unit of the scene.\n * @default Number.MAX_SAFE_INTEGER\n */\n sizeMaxPixels?: number;\n};\n\nconst defaultProps: DefaultProps = {\n scenegraph: {type: 'object', value: null, async: true},\n getScene: gltf => {\n if (gltf && gltf.scenes) {\n // gltf post processor replaces `gltf.scene` number with the scene `object`\n return typeof gltf.scene === 'object' ? gltf.scene : gltf.scenes[gltf.scene || 0];\n }\n return gltf;\n },\n getAnimator: scenegraph => scenegraph && scenegraph.animator,\n _animations: null,\n\n sizeScale: {type: 'number', value: 1, min: 0},\n sizeMinPixels: {type: 'number', min: 0, value: 0},\n sizeMaxPixels: {type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER},\n\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n // flat or pbr\n _lighting: 'flat',\n // _lighting must be pbr for this to work\n _imageBasedLightingEnvironment: null,\n\n // yaw, pitch and roll are in degrees\n // https://en.wikipedia.org/wiki/Euler_angles\n // [pitch, yaw, roll]\n getOrientation: {type: 'accessor', value: [0, 0, 0]},\n getScale: {type: 'accessor', value: [1, 1, 1]},\n getTranslation: {type: 'accessor', value: [0, 0, 0]},\n // 4x4 matrix\n getTransformMatrix: {type: 'accessor', value: []},\n\n loaders: [GLTFLoader]\n};\n\n/** Render a number of instances of a complete glTF scenegraph. */\nexport default class ScenegraphLayer extends Layer<\n ExtraPropsT & Required<_ScenegraphLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'ScenegraphLayer';\n\n state!: {\n scenegraph: GroupNode;\n animator: GLTFAnimator;\n attributesAvailable?: boolean;\n };\n\n getShaders() {\n const modules = [project32, picking];\n\n if (this.props._lighting === 'pbr') {\n modules.push(pbr);\n }\n\n return {vs, fs, modules};\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager();\n // attributeManager is always defined for primitive layers\n attributeManager!.addInstanced({\n instancePositions: {\n size: 3,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n accessor: 'getPosition',\n transition: true\n },\n instanceColors: {\n type: GL.UNSIGNED_BYTE,\n size: this.props.colorFormat.length,\n accessor: 'getColor',\n normalized: true,\n defaultValue: DEFAULT_COLOR,\n transition: true\n },\n instanceModelMatrix: MATRIX_ATTRIBUTES\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n const {props, oldProps} = params;\n\n if (props.scenegraph !== oldProps.scenegraph) {\n this._updateScenegraph();\n } else if (props._animations !== oldProps._animations) {\n this._applyAnimationsProp(this.state.scenegraph, this.state.animator, props._animations);\n }\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this._deleteScenegraph();\n }\n\n private _updateScenegraph(): void {\n const props = this.props;\n const {gl} = this.context;\n let scenegraphData: any = null;\n if (props.scenegraph instanceof ScenegraphNode) {\n // Signature 1: props.scenegraph is a proper luma.gl Scenegraph\n scenegraphData = {scenes: [props.scenegraph]};\n } else if (props.scenegraph && !props.scenegraph.gltf) {\n // Converts loaders.gl gltf to luma.gl scenegraph using the undocumented @luma.gl/experimental function\n const gltf = props.scenegraph;\n const gltfObjects = createGLTFObjects(gl, gltf, this._getModelOptions());\n scenegraphData = {gltf, ...gltfObjects};\n\n waitForGLTFAssets(gltfObjects).then(() => this.setNeedsRedraw()); // eslint-disable-line @typescript-eslint/no-floating-promises\n } else if (props.scenegraph) {\n // DEPRECATED PATH: Assumes this data was loaded through GLTFScenegraphLoader\n log.deprecated(\n 'ScenegraphLayer.props.scenegraph',\n 'Use GLTFLoader instead of GLTFScenegraphLoader'\n )();\n scenegraphData = props.scenegraph;\n }\n\n const options = {layer: this, gl};\n const scenegraph = props.getScene(scenegraphData, options);\n const animator = props.getAnimator(scenegraphData, options);\n\n if (scenegraph instanceof ScenegraphNode) {\n this._deleteScenegraph();\n this._applyAllAttributes(scenegraph);\n this._applyAnimationsProp(scenegraph, animator, props._animations);\n this.setState({scenegraph, animator});\n } else if (scenegraph !== null) {\n log.warn('invalid scenegraph:', scenegraph)();\n }\n }\n\n private _applyAllAttributes(scenegraph: GroupNode): void {\n if (this.state.attributesAvailable) {\n // attributeManager is always defined for primitive layers\n const allAttributes = this.getAttributeManager()!.getAttributes();\n scenegraph.traverse(model => {\n this._setModelAttributes(model.model, allAttributes);\n });\n }\n }\n\n private _applyAnimationsProp(\n scenegraph: GroupNode,\n animator: GLTFAnimator,\n animationsProp: any\n ): void {\n if (!scenegraph || !animator || !animationsProp) {\n return;\n }\n\n const animations = animator.getAnimations();\n\n // sort() to ensure '*' comes first so that other values can override\n Object.keys(animationsProp)\n .sort()\n .forEach(key => {\n // Key can be:\n // - number for index number\n // - name for animation name\n // - * to affect all animations\n const value = animationsProp[key];\n\n if (key === '*') {\n animations.forEach(animation => {\n Object.assign(animation, value);\n });\n } else if (Number.isFinite(Number(key))) {\n const number = Number(key);\n if (number >= 0 && number < animations.length) {\n Object.assign(animations[number], value);\n } else {\n log.warn(`animation ${key} not found`)();\n }\n } else {\n const findResult = animations.find(({name}) => name === key);\n if (findResult) {\n Object.assign(findResult, value);\n } else {\n log.warn(`animation ${key} not found`)();\n }\n }\n });\n }\n\n private _deleteScenegraph(): void {\n const {scenegraph} = this.state;\n if (scenegraph instanceof ScenegraphNode) {\n scenegraph.delete();\n }\n }\n\n private _getModelOptions(): any {\n const {_imageBasedLightingEnvironment} = this.props;\n\n let env: GLTFEnvironment | null = null;\n if (_imageBasedLightingEnvironment) {\n if (typeof _imageBasedLightingEnvironment === 'function') {\n env = _imageBasedLightingEnvironment({gl: this.context.gl, layer: this});\n } else {\n env = _imageBasedLightingEnvironment;\n }\n }\n\n return {\n gl: this.context.gl,\n waitForFullLoad: true,\n imageBasedLightingEnvironment: env,\n modelOptions: {\n isInstanced: true,\n transpileToGLSL100: !isWebGL2(this.context.gl),\n ...this.getShaders()\n },\n // tangents are not supported\n useTangents: false\n };\n }\n\n updateAttributes(changedAttributes) {\n this.setState({attributesAvailable: true});\n if (!this.state.scenegraph) return;\n\n this.state.scenegraph.traverse(model => {\n this._setModelAttributes(model.model, changedAttributes);\n });\n }\n\n draw({moduleParameters = null, parameters = {}, context}) {\n if (!this.state.scenegraph) return;\n\n if (this.props._animations && this.state.animator) {\n this.state.animator.animate(context.timeline.getTime());\n this.setNeedsRedraw();\n }\n\n const {viewport} = this.context;\n const {sizeScale, sizeMinPixels, sizeMaxPixels, opacity, coordinateSystem} = this.props;\n const numInstances = this.getNumInstances();\n this.state.scenegraph.traverse((model, {worldMatrix}) => {\n model.model.setInstanceCount(numInstances);\n model.updateModuleSettings(moduleParameters);\n model.draw({\n parameters,\n uniforms: {\n sizeScale,\n opacity,\n sizeMinPixels,\n sizeMaxPixels,\n composeModelMatrix: shouldComposeModelMatrix(viewport, coordinateSystem),\n sceneModelMatrix: worldMatrix,\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: model.model.getUniforms().project_uCameraPosition\n }\n });\n });\n }\n}\n","export default `\\\n#version 300 es\n\n// Uniforms\nuniform float opacity;\n\n// Varying\nin vec4 vColor;\n\nout vec4 fragmentColor;\n\n// MODULE_PBR contains all the varying definitions needed\n#ifndef MODULE_PBR\n #if defined(HAS_UV) && defined(HAS_BASECOLORMAP)\n in vec2 vTEXCOORD_0;\n uniform sampler2D u_BaseColorSampler;\n #endif\n#endif\n\nvoid main(void) {\n #ifdef MODULE_PBR\n fragmentColor = vColor * pbr_filterColor(vec4(0));\n geometry.uv = pbr_vUV;\n #else\n #if defined(HAS_UV) && defined(HAS_BASECOLORMAP)\n fragmentColor = vColor * texture2D(u_BaseColorSampler, vTEXCOORD_0);\n geometry.uv = vTEXCOORD_0;\n #else\n fragmentColor = vColor;\n #endif\n #endif\n\n fragmentColor.a *= opacity;\n DECKGL_FILTER_COLOR(fragmentColor, geometry);\n}\n`;\n","import GLTFInstantiator from './gltf-instantiator';\n\nexport default function createGLTFObjects(gl, gltf, options) {\n const instantiator = new GLTFInstantiator(gl, options);\n const scenes = instantiator.instantiate(gltf);\n const animator = instantiator.createAnimator();\n\n return {scenes, animator};\n}\n","// Note: This file will either be moved back to deck.gl or reformatted to web-monorepo standards\n// Disabling lint temporarily to facilitate copying code in and out of this repo\n/* eslint-disable */\n\n// Copyright (c) 2015 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport {\n Layer,\n project32,\n phongLighting,\n picking,\n DefaultProps,\n log,\n LayerContext,\n Material\n} from '@deck.gl/core';\nimport GL from '@luma.gl/constants';\nimport {Model, Geometry, Texture2D, isWebGL2} from '@luma.gl/core';\nimport {hasFeature, FEATURES} from '@luma.gl/webgl';\n\nimport {MATRIX_ATTRIBUTES, shouldComposeModelMatrix} from '../utils/matrix';\n\nimport vs from './simple-mesh-layer-vertex.glsl';\nimport fs from './simple-mesh-layer-fragment.glsl';\n\nimport type {LayerProps, UpdateParameters, Accessor, Position, Color, Texture} from '@deck.gl/core';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {Geometry as GeometryType} from '@luma.gl/engine';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\n\nfunction validateGeometryAttributes(attributes: Record, useMeshColors: boolean): void {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n const useColorAttribute = hasColorAttribute && useMeshColors;\n if (!useColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n log.assert(\n attributes.positions || attributes.POSITION,\n 'no \"postions\" or \"POSITION\" attribute in mesh'\n );\n}\n\n/*\n * Convert mesh data into geometry\n * @returns {Geometry} geometry\n */\nfunction getGeometry(data: Mesh, useMeshColors: boolean): Geometry {\n if ((data as any).attributes) {\n validateGeometryAttributes((data as any).attributes, useMeshColors);\n if (data instanceof Geometry) {\n return data;\n } else {\n return new Geometry(data);\n }\n } else if ((data as MeshAttributes).positions || (data as MeshAttributes).POSITION) {\n validateGeometryAttributes(data, useMeshColors);\n return new Geometry({\n attributes: data\n });\n }\n throw Error('Invalid mesh');\n}\n\nconst DEFAULT_COLOR: [number, number, number, number] = [0, 0, 0, 255];\n\ntype Mesh =\n | GeometryType\n | {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n }\n | MeshAttributes;\n\ntype _SimpleMeshLayerProps = {\n mesh: string | Mesh | Promise | null;\n texture?: string | Texture | Promise;\n /** Customize the [texture parameters](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter). */\n textureParameters?: Record | null;\n\n /** Anchor position accessor. */\n getPosition?: Accessor;\n /** Color value or accessor.\n * If `mesh` does not contain vertex colors, use this color to render each object.\n * If `mesh` contains vertex colors, then the two colors are mixed together.\n * Use `[255, 255, 255]` to use the original mesh colors.\n * If `texture` is assigned, then both colors will be ignored.\n * @default [0, 0, 0, 255]\n */\n getColor?: Accessor;\n /**\n * Orientation in [pitch, yaw, roll] in degrees.\n * @see https://en.wikipedia.org/wiki/Euler_angles\n * @default [0, 0, 0]\n */\n getOrientation?: Accessor;\n /**\n * Scaling factor of the model along each axis.\n * @default [1, 1, 1]\n */\n getScale?: Accessor;\n /**\n * Translation from the anchor point, [x, y, z] in meters.\n * @default [0, 0, 0]\n */\n getTranslation?: Accessor;\n /**\n * TransformMatrix. If specified, `getOrientation`, `getScale` and `getTranslation` are ignored.\n */\n getTransformMatrix?: Accessor;\n /**\n * Multiplier to scale each geometry by.\n * @default 1\n */\n sizeScale?: number;\n /**\n * @deprecated Whether to color pixels using vertex colors supplied in the mesh (the `COLOR_0` or `colors` attribute).\n * If set to `false` vertex colors will be ignored.\n * This prop will be removed and set to always true in the next major release.\n * @default false\n */\n _useMeshColors?: boolean;\n\n /**\n * (Experimental) If rendering only one instance of the mesh, set this to false to treat mesh positions\n * as deltas of the world coordinates of the anchor.\n * E.g. in LNGLAT coordinates, mesh positions are interpreted as meter offsets by default.\n * setting _instanced to false interpreted mesh positions as lnglat deltas.\n * @default true\n */\n _instanced?: true; // TODO - formalize API\n /**\n * Whether to render the mesh in wireframe mode.\n * @default false\n */\n wireframe?: false;\n /**\n * Material props for lighting effect.\n *\n * @default true\n * @see https://deck.gl/docs/developer-guide/using-lighting#constructing-a-material-instance\n */\n material?: Material;\n};\n\nexport type SimpleMeshLayerProps = _SimpleMeshLayerProps & LayerProps;\n\nconst defaultProps: DefaultProps = {\n mesh: {type: 'object', value: null, async: true},\n texture: {type: 'image', value: null, async: true},\n sizeScale: {type: 'number', value: 1, min: 0},\n // Whether the color attribute in a mesh will be used\n // This prop will be removed and set to true in next major release\n _useMeshColors: {type: 'boolean', value: false},\n\n // _instanced is a hack to use world position instead of meter offsets in mesh\n // TODO - formalize API\n _instanced: true,\n // NOTE(Tarek): Quick and dirty wireframe. Just draws\n // the same mesh with LINE_STRIPS. Won't follow edges\n // of the original mesh.\n wireframe: false,\n // Optional material for 'lighting' shader module\n material: true,\n getPosition: {type: 'accessor', value: x => x.position},\n getColor: {type: 'accessor', value: DEFAULT_COLOR},\n\n // yaw, pitch and roll are in degrees\n // https://en.wikipedia.org/wiki/Euler_angles\n // [pitch, yaw, roll]\n getOrientation: {type: 'accessor', value: [0, 0, 0]},\n getScale: {type: 'accessor', value: [1, 1, 1]},\n getTranslation: {type: 'accessor', value: [0, 0, 0]},\n // 4x4 matrix\n getTransformMatrix: {type: 'accessor', value: []}\n};\n\n/** Render a number of instances of an arbitrary 3D geometry. */\nexport default class SimpleMeshLayer extends Layer<\n ExtraPropsT & Required<_SimpleMeshLayerProps>\n> {\n static defaultProps = defaultProps;\n static layerName = 'SimpleMeshLayer';\n\n state!: {\n materialParser?: GLTFMaterialParser;\n model?: Model;\n emptyTexture: Texture2D;\n hasNormals?: boolean;\n };\n\n getShaders() {\n const transpileToGLSL100 = !isWebGL2(this.context.gl);\n\n const defines: any = {};\n\n if (hasFeature(this.context.gl, FEATURES.GLSL_DERIVATIVES)) {\n defines.DERIVATIVES_AVAILABLE = 1;\n }\n\n return super.getShaders({\n vs,\n fs,\n modules: [project32, phongLighting, picking],\n transpileToGLSL100,\n defines\n });\n }\n\n initializeState() {\n const attributeManager = this.getAttributeManager();\n // attributeManager is always defined in a primitive layer\n attributeManager!.addInstanced({\n instancePositions: {\n transition: true,\n type: GL.DOUBLE,\n fp64: this.use64bitPositions(),\n size: 3,\n accessor: 'getPosition'\n },\n instanceColors: {\n type: GL.UNSIGNED_BYTE,\n transition: true,\n size: this.props.colorFormat.length,\n normalized: true,\n accessor: 'getColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceModelMatrix: MATRIX_ATTRIBUTES\n });\n\n this.setState({\n // Avoid luma.gl's missing uniform warning\n // TODO - add feature to luma.gl to specify ignored uniforms?\n emptyTexture: new Texture2D(this.context.gl, {\n data: new Uint8Array(4),\n width: 1,\n height: 1\n })\n });\n }\n\n updateState(params: UpdateParameters) {\n super.updateState(params);\n\n const {props, oldProps, changeFlags} = params;\n if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged) {\n this.state.model?.delete();\n if (props.mesh) {\n this.state.model = this.getModel(props.mesh as Mesh);\n\n const attributes = (props.mesh as any).attributes || props.mesh;\n this.setState({\n hasNormals: Boolean(attributes.NORMAL || attributes.normals)\n });\n }\n // attributeManager is always defined in a primitive layer\n this.getAttributeManager()!.invalidateAll();\n }\n\n if (props.texture !== oldProps.texture) {\n this.setTexture(props.texture);\n }\n\n if (this.state.model) {\n this.state.model.setDrawMode(this.props.wireframe ? GL.LINE_STRIP : GL.TRIANGLES);\n }\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n\n this.state.emptyTexture.delete();\n }\n\n draw({uniforms}) {\n if (!this.state.model) {\n return;\n }\n\n const {viewport} = this.context;\n const {sizeScale, coordinateSystem, _instanced} = this.props;\n\n this.state.model\n .setUniforms(uniforms)\n .setUniforms({\n sizeScale,\n composeModelMatrix: !_instanced || shouldComposeModelMatrix(viewport, coordinateSystem),\n flatShading: !this.state.hasNormals\n })\n .draw();\n }\n\n protected getModel(mesh: Mesh): Model {\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id: this.props.id,\n geometry: getGeometry(mesh, this.props._useMeshColors),\n isInstanced: true\n });\n\n const {texture} = this.props;\n const {emptyTexture} = this.state;\n model.setUniforms({\n sampler: texture || emptyTexture,\n hasTexture: Boolean(texture)\n });\n\n return model;\n }\n\n private setTexture(texture: Texture2D): void {\n const {emptyTexture, model} = this.state;\n\n // props.mesh may not be ready at this time.\n // The sampler will be set when `getModel` is called\n if (model) {\n model.setUniforms({\n sampler: texture || emptyTexture,\n hasTexture: Boolean(texture)\n });\n }\n }\n}\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\n\n// Instance attributes\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\nin vec3 instanceTranslation;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvoid main(void) {\n geometry.worldPosition = instancePositions;\n geometry.uv = texCoords;\n geometry.pickingColor = instancePickingColors;\n\n vTexCoord = texCoords;\n cameraPosition = project_uCameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * sizeScale + instanceTranslation;\n\n if (composeModelMatrix) {\n DECKGL_FILTER_SIZE(pos, geometry);\n // using instancePositions as world coordinates\n // when using globe mode, this branch does not re-orient the model to align with the surface of the earth\n // call project_normal before setting position to avoid rotation\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n gl_Position = project_position_to_clipspace(pos + instancePositions, instancePositions64Low, vec3(0.0), position_commonspace);\n geometry.position = position_commonspace;\n }\n else {\n pos = project_size(pos);\n DECKGL_FILTER_SIZE(pos, geometry);\n gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, pos, position_commonspace);\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n }\n\n geometry.normal = normals_commonspace;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n","export default `#version 300 es\n#define SHADER_NAME simple-mesh-layer-fs\n\nprecision highp float;\n\nuniform bool hasTexture;\nuniform sampler2D sampler;\nuniform bool flatShading;\nuniform float opacity;\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 geometry.uv = vTexCoord;\n\n vec3 normal;\n if (flatShading) {\n\n// NOTE(Tarek): This is necessary because\n// headless.gl reports the extension as\n// available but does not support it in\n// the shader.\n#ifdef DERIVATIVES_AVAILABLE\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n#else\n normal = vec3(0.0, 0.0, 1.0);\n#endif\n } else {\n normal = normals_commonspace;\n }\n\n vec4 color = hasTexture ? texture(sampler, vTexCoord) : vColor;\n vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, color.a * opacity);\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n","import {COORDINATE_SYSTEM, createIterable} from '@deck.gl/core';\n\n/* eslint-disable max-statements, complexity, camelcase */\nconst RADIAN_PER_DEGREE = Math.PI / 180;\nconst modelMatrix = new Float32Array(16);\nconst valueArray = new Float32Array(12);\n\nfunction calculateTransformMatrix(targetMatrix, orientation, scale) {\n const pitch = orientation[0] * RADIAN_PER_DEGREE;\n const yaw = orientation[1] * RADIAN_PER_DEGREE;\n const roll = orientation[2] * RADIAN_PER_DEGREE;\n\n const sr = Math.sin(roll);\n const sp = Math.sin(pitch);\n const sw = Math.sin(yaw);\n\n const cr = Math.cos(roll);\n const cp = Math.cos(pitch);\n const cw = Math.cos(yaw);\n\n const scx = scale[0];\n const scy = scale[1];\n const scz = scale[2];\n\n targetMatrix[0] = scx * cw * cp; // 0,0\n targetMatrix[1] = scx * sw * cp; // 1,0\n targetMatrix[2] = scx * -sp; // 2,0\n targetMatrix[3] = scy * (-sw * cr + cw * sp * sr); // 0,1\n targetMatrix[4] = scy * (cw * cr + sw * sp * sr); // 1,1\n targetMatrix[5] = scy * cp * sr; // 2,1\n targetMatrix[6] = scz * (sw * sr + cw * sp * cr); // 0,2\n targetMatrix[7] = scz * (-cw * sr + sw * sp * cr); // 1,2\n targetMatrix[8] = scz * cp * cr; // 2,2\n}\n\nfunction getExtendedMat3FromMat4(mat4) {\n mat4[0] = mat4[0];\n mat4[1] = mat4[1];\n mat4[2] = mat4[2];\n mat4[3] = mat4[4];\n mat4[4] = mat4[5];\n mat4[5] = mat4[6];\n mat4[6] = mat4[8];\n mat4[7] = mat4[9];\n mat4[8] = mat4[10];\n mat4[9] = mat4[12];\n mat4[10] = mat4[13];\n mat4[11] = mat4[14];\n\n return mat4.subarray(0, 12);\n}\n\nexport const MATRIX_ATTRIBUTES = {\n size: 12,\n accessor: ['getOrientation', 'getScale', 'getTranslation', 'getTransformMatrix'],\n shaderAttributes: {\n instanceModelMatrix__LOCATION_0: {\n size: 3,\n elementOffset: 0\n },\n instanceModelMatrix__LOCATION_1: {\n size: 3,\n elementOffset: 3\n },\n instanceModelMatrix__LOCATION_2: {\n size: 3,\n elementOffset: 6\n },\n instanceTranslation: {\n size: 3,\n elementOffset: 9\n }\n } as const,\n\n update(attribute, {startRow, endRow}) {\n // @ts-expect-error: \"this\" will be bound to a layer when this function is called\n const {data, getOrientation, getScale, getTranslation, getTransformMatrix} = this.props;\n\n const arrayMatrix = Array.isArray(getTransformMatrix);\n const constantMatrix = arrayMatrix && getTransformMatrix.length === 16;\n const constantScale = Array.isArray(getScale);\n const constantOrientation = Array.isArray(getOrientation);\n const constantTranslation = Array.isArray(getTranslation);\n\n const hasMatrix = constantMatrix || (!arrayMatrix && Boolean(getTransformMatrix(data[0])));\n\n if (hasMatrix) {\n attribute.constant = constantMatrix;\n } else {\n attribute.constant = constantOrientation && constantScale && constantTranslation;\n }\n\n const instanceModelMatrixData = attribute.value;\n\n if (attribute.constant) {\n let matrix;\n\n if (hasMatrix) {\n modelMatrix.set(getTransformMatrix);\n matrix = getExtendedMat3FromMat4(modelMatrix);\n } else {\n matrix = valueArray;\n\n const orientation = getOrientation;\n const scale = getScale;\n\n calculateTransformMatrix(matrix, orientation, scale);\n matrix.set(getTranslation, 9);\n }\n\n attribute.value = new Float32Array(matrix);\n } else {\n let i = startRow * attribute.size;\n const {iterable, objectInfo} = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let matrix;\n\n if (hasMatrix) {\n modelMatrix.set(\n constantMatrix ? getTransformMatrix : getTransformMatrix(object, objectInfo)\n );\n matrix = getExtendedMat3FromMat4(modelMatrix);\n } else {\n matrix = valueArray;\n\n const orientation = constantOrientation\n ? getOrientation\n : getOrientation(object, objectInfo);\n const scale = constantScale ? getScale : getScale(object, objectInfo);\n\n calculateTransformMatrix(matrix, orientation, scale);\n matrix.set(constantTranslation ? getTranslation : getTranslation(object, objectInfo), 9);\n }\n\n instanceModelMatrixData[i++] = matrix[0];\n instanceModelMatrixData[i++] = matrix[1];\n instanceModelMatrixData[i++] = matrix[2];\n instanceModelMatrixData[i++] = matrix[3];\n instanceModelMatrixData[i++] = matrix[4];\n instanceModelMatrixData[i++] = matrix[5];\n instanceModelMatrixData[i++] = matrix[6];\n instanceModelMatrixData[i++] = matrix[7];\n instanceModelMatrixData[i++] = matrix[8];\n instanceModelMatrixData[i++] = matrix[9];\n instanceModelMatrixData[i++] = matrix[10];\n instanceModelMatrixData[i++] = matrix[11];\n }\n }\n }\n};\n\n// only apply composeModelMatrix when in cartesian or meter_offsets coordinate system\n// with `composeModelMatrix` enabled, the rotation part of the layer's modelMatrix will be composed to instance's transformations\n// since rotating latitude and longitude can not provide meaningful results, hence `composeModelMatrix` is disabled\n// when in LNGLAT and LNGLAT_OFFSET coordinates.\nexport function shouldComposeModelMatrix(viewport, coordinateSystem) {\n return (\n coordinateSystem === COORDINATE_SYSTEM.CARTESIAN ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS ||\n (coordinateSystem === COORDINATE_SYSTEM.DEFAULT && !viewport.isGeospatial)\n );\n}\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, COMMENT, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = element.parent === children[0]; // in nested rules comments become children of the \"auto-inserted\" rule\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? children[0].children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import { createElement, useContext, useRef, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-6a883da9.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-6a883da9.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport 'hoist-non-react-statics';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.10.5\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\texports: {\n\t\t\".\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./dist/emotion-react.worker.esm.js\",\n\t\t\t\tbrowser: \"./dist/emotion-react.browser.esm.js\",\n\t\t\t\t\"default\": \"./dist/emotion-react.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./dist/emotion-react.cjs.js\"\n\t\t},\n\t\t\"./jsx-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js\"\n\t\t},\n\t\t\"./_isolated-hnrs\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js\",\n\t\t\t\tbrowser: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js\",\n\t\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js\"\n\t\t},\n\t\t\"./jsx-dev-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\",\n\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\"./macro\": \"./macro.js\"\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"_isolated-hnrs\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.js\",\n\t\t\"macro.d.ts\",\n\t\t\"macro.js.flow\"\n\t],\n\tsideEffects: false,\n\tauthor: \"Emotion Contributors\",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.18.3\",\n\t\t\"@emotion/babel-plugin\": \"^11.10.5\",\n\t\t\"@emotion/cache\": \"^11.10.5\",\n\t\t\"@emotion/serialize\": \"^1.1.1\",\n\t\t\"@emotion/use-insertion-effect-with-fallbacks\": \"^1.0.0\",\n\t\t\"@emotion/utils\": \"^1.2.0\",\n\t\t\"@emotion/weak-memoize\": \"^0.3.0\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@babel/core\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@babel/core\": \"^7.18.5\",\n\t\t\"@definitelytyped/dtslint\": \"0.0.112\",\n\t\t\"@emotion/css\": \"11.10.5\",\n\t\t\"@emotion/css-prettifier\": \"1.1.1\",\n\t\t\"@emotion/server\": \"11.10.0\",\n\t\t\"@emotion/styled\": \"11.10.5\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\",\n\t\ttypescript: \"^4.5.5\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./_isolated-hnrs.js\"\n\t\t],\n\t\tumdName: \"emotionReact\",\n\t\texports: {\n\t\t\tenvConditions: [\n\t\t\t\t\"browser\",\n\t\t\t\t\"worker\"\n\t\t\t],\n\t\t\textra: {\n\t\t\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\t\t\"./macro\": \"./macro.js\"\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n var res = insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked\n\n var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined';\n\n if (isBrowser && !isTestEnv) {\n // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n var globalContext = // $FlowIgnore\n typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n : isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","import * as React from 'react';\nimport { useLayoutEffect } from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","import type {Readable} from 'stream';\n\n/** A DOM or Node readable stream */\nexport type ReadableStreamType = ReadableStream | Readable;\n\nconst isBoolean: (x: any) => boolean = (x) => typeof x === 'boolean';\nconst isFunction: (x: any) => boolean = (x) => typeof x === 'function';\n\nexport const isObject: (x: any) => boolean = (x) => x !== null && typeof x === 'object';\nexport const isPureObject: (x: any) => boolean = (x) =>\n isObject(x) && x.constructor === {}.constructor;\nexport const isPromise: (x: any) => boolean = (x) => isObject(x) && isFunction(x.then);\n\nexport const isIterable: (x: any) => boolean = (x) => x && typeof x[Symbol.iterator] === 'function';\nexport const isAsyncIterable: (x: any) => boolean = (x) =>\n x && typeof x[Symbol.asyncIterator] === 'function';\nexport const isIterator: (x: any) => boolean = (x) => x && isFunction(x.next);\n\nexport const isResponse: (x: any) => boolean = (x) =>\n (typeof Response !== 'undefined' && x instanceof Response) ||\n (x && x.arrayBuffer && x.text && x.json);\n\nexport const isFile: (x: any) => boolean = (x) => typeof File !== 'undefined' && x instanceof File;\nexport const isBlob: (x: any) => boolean = (x) => typeof Blob !== 'undefined' && x instanceof Blob;\n\n/** Check for Node.js `Buffer` without triggering bundler to include buffer polyfill */\nexport const isBuffer: (x: any) => boolean = (x) => x && typeof x === 'object' && x.isBuffer;\n\nexport const isWritableDOMStream: (x: any) => boolean = (x) =>\n isObject(x) && isFunction(x.abort) && isFunction(x.getWriter);\n\nexport const isReadableDOMStream: (x: any) => boolean = (x) =>\n (typeof ReadableStream !== 'undefined' && x instanceof ReadableStream) ||\n (isObject(x) && isFunction(x.tee) && isFunction(x.cancel) && isFunction(x.getReader));\n// Not implemented in Firefox: && isFunction(x.pipeTo)\n\nexport const isWritableNodeStream: (x: any) => boolean = (x) =>\n isObject(x) && isFunction(x.end) && isFunction(x.write) && isBoolean(x.writable);\nexport const isReadableNodeStream: (x: any) => boolean = (x) =>\n isObject(x) && isFunction(x.read) && isFunction(x.pipe) && isBoolean(x.readable);\nexport const isReadableStream: (x: any) => boolean = (x) =>\n isReadableDOMStream(x) || isReadableNodeStream(x);\nexport const isWritableStream: (x: any) => boolean = (x) =>\n isWritableDOMStream(x) || isWritableNodeStream(x);\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n\n// Change to `latest` on production branches\nconst DEFAULT_VERSION = 'latest';\ndeclare let __VERSION__: string;\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : DEFAULT_VERSION;\nif (typeof __VERSION__ === 'undefined') {\n // eslint-disable-next-line\n console.error(\n 'loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.'\n );\n}\n","// Browser fills for Node.js built-in `worker_threads` module.\n// These fills are non-functional, and just intended to ensure that\n// `import 'worker_threads` doesn't break browser builds.\n// The replacement is done in package.json browser field\nexport class Worker {}\n\nexport const parentPort = null;\n","import {assert} from '../env-utils/assert';\n\nconst workerURLCache = new Map();\n\n/**\n * Creates a loadable URL from worker source or URL\n * that can be used to create `Worker` instances.\n * Due to CORS issues it may be necessary to wrap a URL in a small importScripts\n * @param props\n * @param props.source Worker source\n * @param props.url Worker URL\n * @returns loadable url\n */\nexport function getLoadableWorkerURL(props: {source?: string; url?: string}) {\n assert((props.source && !props.url) || (!props.source && props.url)); // Either source or url must be defined\n\n let workerURL = workerURLCache.get(props.source || props.url);\n if (!workerURL) {\n // Differentiate worker urls from worker source code\n if (props.url) {\n workerURL = getLoadableWorkerURLFromURL(props.url);\n workerURLCache.set(props.url, workerURL);\n }\n\n if (props.source) {\n workerURL = getLoadableWorkerURLFromSource(props.source);\n workerURLCache.set(props.source, workerURL);\n }\n }\n\n assert(workerURL);\n return workerURL;\n}\n\n/**\n * Build a loadable worker URL from worker URL\n * @param url\n * @returns loadable URL\n */\nfunction getLoadableWorkerURLFromURL(url: string): string {\n // A local script url, we can use it to initialize a Worker directly\n if (!url.startsWith('http')) {\n return url;\n }\n\n // A remote script, we need to use `importScripts` to load from different origin\n const workerSource = buildScriptSource(url);\n return getLoadableWorkerURLFromSource(workerSource);\n}\n\n/**\n * Build a loadable worker URL from worker source\n * @param workerSource\n * @returns loadable url\n */\nfunction getLoadableWorkerURLFromSource(workerSource: string): string {\n const blob = new Blob([workerSource], {type: 'application/javascript'});\n return URL.createObjectURL(blob);\n}\n\n/**\n * Per spec, worker cannot be initialized with a script from a different origin\n * However a local worker script can still import scripts from other origins,\n * so we simply build a wrapper script.\n *\n * @param workerUrl\n * @returns source\n */\nfunction buildScriptSource(workerUrl: string): string {\n return `\\\ntry {\n importScripts('${workerUrl}');\n} catch (error) {\n console.error(error);\n throw error;\n}`;\n}\n","// NOTE - there is a copy of this function is both in core and loader-utils\n// core does not need all the utils in loader-utils, just this one.\n\n/**\n * Returns an array of Transferrable objects that can be used with postMessage\n * https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage\n * @param object data to be sent via postMessage\n * @param recursive - not for application use\n * @param transfers - not for application use\n * @returns a transfer list that can be passed to postMessage\n */\nexport function getTransferList(\n object: any,\n recursive: boolean = true,\n transfers?: Set\n): Transferable[] {\n // Make sure that items in the transfer list is unique\n const transfersSet = transfers || new Set();\n\n if (!object) {\n // ignore\n } else if (isTransferable(object)) {\n transfersSet.add(object);\n } else if (isTransferable(object.buffer)) {\n // Typed array\n transfersSet.add(object.buffer);\n } else if (ArrayBuffer.isView(object)) {\n // object is a TypeArray viewing into a SharedArrayBuffer (not transferable)\n // Do not iterate through the content in this case\n } else if (recursive && typeof object === 'object') {\n for (const key in object) {\n // Avoid perf hit - only go one level deep\n getTransferList(object[key], recursive, transfersSet);\n }\n }\n\n // If transfers is defined, is internal recursive call\n // Otherwise it's called by the user\n return transfers === undefined ? Array.from(transfersSet) : [];\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Transferable\nfunction isTransferable(object: unknown) {\n if (!object) {\n return false;\n }\n if (object instanceof ArrayBuffer) {\n return true;\n }\n if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {\n return true;\n }\n if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {\n return true;\n }\n // @ts-ignore\n if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {\n return true;\n }\n return false;\n}\n\n/**\n * Recursively drop non serializable values like functions and regexps.\n * @param object\n */\nexport function getTransferListForWriter(object: object | null): object {\n if (object === null) {\n return {};\n }\n const clone = Object.assign({}, object);\n\n Object.keys(clone).forEach((key) => {\n // Checking if it is an object and not a typed array.\n if (typeof object[key] === 'object' && !ArrayBuffer.isView(object[key])) {\n clone[key] = getTransferListForWriter(object[key]);\n } else if (typeof clone[key] === 'function' || clone[key] instanceof RegExp) {\n clone[key] = {};\n } else {\n clone[key] = object[key];\n }\n });\n\n return clone;\n}\n","import {Worker as NodeWorker} from '../node/worker_threads';\nimport {isBrowser} from '../env-utils/globals';\nimport {assert} from '../env-utils/assert';\nimport {getLoadableWorkerURL} from '../worker-utils/get-loadable-worker-url';\nimport {getTransferList} from '../worker-utils/get-transfer-list';\n\nconst NOOP = () => {};\n\nexport type WorkerThreadProps = {\n name: string;\n source?: string;\n url?: string;\n};\n\n/**\n * Represents one worker thread\n */\nexport default class WorkerThread {\n readonly name: string;\n readonly source: string | undefined;\n readonly url: string | undefined;\n terminated: boolean = false;\n worker: Worker | NodeWorker;\n onMessage: (message: any) => void;\n onError: (error: Error) => void;\n\n private _loadableURL: string = '';\n\n /** Checks if workers are supported on this platform */\n static isSupported(): boolean {\n return (\n (typeof Worker !== 'undefined' && isBrowser) ||\n (typeof NodeWorker !== 'undefined' && !isBrowser)\n );\n }\n\n constructor(props: WorkerThreadProps) {\n const {name, source, url} = props;\n assert(source || url); // Either source or url must be defined\n this.name = name;\n this.source = source;\n this.url = url;\n this.onMessage = NOOP;\n this.onError = (error) => console.log(error); // eslint-disable-line\n\n this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();\n }\n\n /**\n * Terminate this worker thread\n * @note Can free up significant memory\n */\n destroy(): void {\n this.onMessage = NOOP;\n this.onError = NOOP;\n this.worker.terminate(); // eslint-disable-line @typescript-eslint/no-floating-promises\n this.terminated = true;\n }\n\n get isRunning() {\n return Boolean(this.onMessage);\n }\n\n /**\n * Send a message to this worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n * @param transferList If not supplied, calculated automatically by traversing data\n */\n postMessage(data: any, transferList?: any[]): void {\n transferList = transferList || getTransferList(data);\n // @ts-ignore\n this.worker.postMessage(data, transferList);\n }\n\n // PRIVATE\n\n /**\n * Generate a standard Error from an ErrorEvent\n * @param event\n */\n _getErrorFromErrorEvent(event: ErrorEvent): Error {\n // Note Error object does not have the expected fields if loading failed completely\n // https://developer.mozilla.org/en-US/docs/Web/API/Worker#Event_handlers\n // https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n let message = 'Failed to load ';\n message += `worker ${this.name} from ${this.url}. `;\n if (event.message) {\n message += `${event.message} in `;\n }\n // const hasFilename = event.filename && !event.filename.startsWith('blob:');\n // message += hasFilename ? event.filename : this.source.slice(0, 100);\n if (event.lineno) {\n message += `:${event.lineno}:${event.colno}`;\n }\n return new Error(message);\n }\n\n /**\n * Creates a worker thread on the browser\n */\n _createBrowserWorker(): Worker {\n this._loadableURL = getLoadableWorkerURL({source: this.source, url: this.url});\n const worker = new Worker(this._loadableURL, {name: this.name});\n\n worker.onmessage = (event) => {\n if (!event.data) {\n this.onError(new Error('No data received'));\n } else {\n this.onMessage(event.data);\n }\n };\n // This callback represents an uncaught exception in the worker thread\n worker.onerror = (error: ErrorEvent): void => {\n this.onError(this._getErrorFromErrorEvent(error));\n this.terminated = true;\n };\n // TODO - not clear when this would be called, for now just log in case it happens\n worker.onmessageerror = (event) => console.error(event); // eslint-disable-line\n\n return worker;\n }\n\n /**\n * Creates a worker thread in node.js\n * @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool\n */\n _createNodeWorker(): NodeWorker {\n let worker: NodeWorker;\n if (this.url) {\n // Make sure relative URLs start with './'\n const absolute = this.url.includes(':/') || this.url.startsWith('/');\n const url = absolute ? this.url : `./${this.url}`;\n // console.log('Starting work from', url);\n worker = new NodeWorker(url, {eval: false});\n } else if (this.source) {\n worker = new NodeWorker(this.source, {eval: true});\n } else {\n throw new Error('no worker');\n }\n worker.on('message', (data) => {\n // console.error('message', data);\n this.onMessage(data);\n });\n worker.on('error', (error) => {\n // console.error('error', error);\n this.onError(error);\n });\n worker.on('exit', (code) => {\n // console.error('exit', code);\n });\n return worker;\n }\n}\n","import type {WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport WorkerThread from './worker-thread';\nimport {assert} from '../env-utils/assert';\n\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n readonly name: string;\n readonly workerThread: WorkerThread;\n isRunning: boolean = true;\n /** Promise that resolves when Job is done */\n readonly result: Promise;\n\n private _resolve: (value: any) => void = () => {};\n private _reject: (reason?: any) => void = () => {};\n\n constructor(jobName: string, workerThread: WorkerThread) {\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n /**\n * Send a message to the job's worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n */\n postMessage(type: WorkerMessageType, payload: WorkerMessagePayload): void {\n this.workerThread.postMessage({\n source: 'loaders.gl', // Lets worker ignore unrelated messages\n type,\n payload\n });\n }\n\n /**\n * Call to resolve the `result` Promise with the supplied value\n */\n done(value: any): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._resolve(value);\n }\n\n /**\n * Call to reject the `result` Promise with the supplied error\n */\n error(error: Error): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._reject(error);\n }\n}\n","import type {WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport {isMobile} from '../env-utils/globals';\nimport WorkerThread from './worker-thread';\nimport WorkerJob from './worker-job';\n\n/** WorkerPool onDebug Callback Parameters */\ntype OnDebugParameters = {\n message: string;\n worker: string;\n name: string;\n job: string;\n backlog: number;\n workerThread: WorkerThread;\n};\n\n/** WorkerPool Properties */\nexport type WorkerPoolProps = {\n name?: string;\n source?: string; // | Function;\n url?: string;\n maxConcurrency?: number;\n maxMobileConcurrency?: number;\n onDebug?: (options: OnDebugParameters) => any;\n reuseWorkers?: boolean;\n};\n\n/** Private helper types */\ntype OnMessage = (job: WorkerJob, type: WorkerMessageType, payload: WorkerMessagePayload) => void;\ntype OnError = (job: WorkerJob, error: Error) => void;\n\ntype QueuedJob = {\n name: string;\n onMessage: OnMessage;\n onError: OnError;\n onStart: (value: any) => void; // Resolve job start promise\n};\n\n/**\n * Process multiple data messages with small pool of identical workers\n */\nexport default class WorkerPool {\n name: string = 'unnamed';\n source?: string; // | Function;\n url?: string;\n maxConcurrency: number = 1;\n maxMobileConcurrency: number = 1;\n onDebug: (options: OnDebugParameters) => any = () => {};\n reuseWorkers: boolean = true;\n\n private props: WorkerPoolProps = {};\n private jobQueue: QueuedJob[] = [];\n private idleQueue: WorkerThread[] = [];\n private count = 0;\n private isDestroyed = false;\n\n /** Checks if workers are supported on this platform */\n static isSupported(): boolean {\n return WorkerThread.isSupported();\n }\n\n /**\n * @param processor - worker function\n * @param maxConcurrency - max count of workers\n */\n constructor(props: WorkerPoolProps) {\n this.source = props.source;\n this.url = props.url;\n this.setProps(props);\n }\n\n /**\n * Terminates all workers in the pool\n * @note Can free up significant memory\n */\n destroy(): void {\n // Destroy idle workers, active Workers will be destroyed on completion\n this.idleQueue.forEach((worker) => worker.destroy());\n this.isDestroyed = true;\n }\n\n setProps(props: WorkerPoolProps) {\n this.props = {...this.props, ...props};\n\n if (props.name !== undefined) {\n this.name = props.name;\n }\n if (props.maxConcurrency !== undefined) {\n this.maxConcurrency = props.maxConcurrency;\n }\n if (props.maxMobileConcurrency !== undefined) {\n this.maxMobileConcurrency = props.maxMobileConcurrency;\n }\n if (props.reuseWorkers !== undefined) {\n this.reuseWorkers = props.reuseWorkers;\n }\n if (props.onDebug !== undefined) {\n this.onDebug = props.onDebug;\n }\n }\n\n async startJob(\n name: string,\n onMessage: OnMessage = (job, type, data) => job.done(data),\n onError: OnError = (job, error) => job.error(error)\n ): Promise {\n // Promise resolves when thread starts working on this job\n const startPromise = new Promise((onStart) => {\n // Promise resolves when thread completes or fails working on this job\n this.jobQueue.push({name, onMessage, onError, onStart});\n return this;\n });\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n return await startPromise;\n }\n\n // PRIVATE\n\n /**\n * Starts first queued job if worker is available or can be created\n * Called when job is started and whenever a worker returns to the idleQueue\n */\n async _startQueuedJob(): Promise {\n if (!this.jobQueue.length) {\n return;\n }\n\n const workerThread = this._getAvailableWorker();\n if (!workerThread) {\n return;\n }\n\n // We have a worker, dequeue and start the job\n const queuedJob = this.jobQueue.shift();\n if (queuedJob) {\n // Emit a debug event\n // @ts-ignore\n this.onDebug({\n message: 'Starting job',\n name: queuedJob.name,\n workerThread,\n backlog: this.jobQueue.length\n });\n\n // Create a worker job to let the app access thread and manage job completion\n const job = new WorkerJob(queuedJob.name, workerThread);\n\n // Set the worker thread's message handlers\n workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);\n workerThread.onError = (error) => queuedJob.onError(job, error);\n\n // Resolve the start promise so that the app can start sending messages to worker\n queuedJob.onStart(job);\n\n // Wait for the app to signal that the job is complete, then return worker to queue\n try {\n await job.result;\n } finally {\n this.returnWorkerToQueue(workerThread);\n }\n }\n }\n\n /**\n * Returns a worker to the idle queue\n * Destroys the worker if\n * - pool is destroyed\n * - if this pool doesn't reuse workers\n * - if maxConcurrency has been lowered\n * @param worker\n */\n returnWorkerToQueue(worker: WorkerThread) {\n const shouldDestroyWorker =\n this.isDestroyed || !this.reuseWorkers || this.count > this._getMaxConcurrency();\n\n if (shouldDestroyWorker) {\n worker.destroy();\n this.count--;\n } else {\n this.idleQueue.push(worker);\n }\n\n if (!this.isDestroyed) {\n this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n\n /**\n * Returns idle worker or creates new worker if maxConcurrency has not been reached\n */\n _getAvailableWorker(): WorkerThread | null {\n // If a worker has completed and returned to the queue, it can be used\n if (this.idleQueue.length > 0) {\n return this.idleQueue.shift() || null;\n }\n\n // Create fresh worker if we haven't yet created the max amount of worker threads for this worker source\n if (this.count < this._getMaxConcurrency()) {\n this.count++;\n const name = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;\n return new WorkerThread({name, source: this.source, url: this.url});\n }\n\n // No worker available, have to wait\n return null;\n }\n\n _getMaxConcurrency() {\n return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;\n }\n}\n","import WorkerPool from './worker-pool';\nimport WorkerThread from './worker-thread';\n\n/**\n * @param maxConcurrency - max count of workers\n * @param maxMobileConcurrency - max count of workers on mobile\n * @param maxConcurrency - max count of workers\n * @param reuseWorkers - if false, destroys workers when task is completed\n * @param onDebug - callback intended to allow application to log worker pool activity\n */\nexport type WorkerFarmProps = {\n maxConcurrency?: number;\n maxMobileConcurrency?: number;\n reuseWorkers?: boolean;\n onDebug?: () => void;\n};\n\nconst DEFAULT_PROPS: Required = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => {}\n};\n\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n private props: WorkerFarmProps;\n private workerPools = new Map();\n // singleton\n private static _workerFarm?: WorkerFarm;\n\n /** Checks if workers are supported on this platform */\n static isSupported(): boolean {\n return WorkerThread.isSupported();\n }\n\n /** Get the singleton instance of the global worker farm */\n static getWorkerFarm(props: WorkerFarmProps = {}): WorkerFarm {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n WorkerFarm._workerFarm.setProps(props);\n return WorkerFarm._workerFarm;\n }\n\n /** get global instance with WorkerFarm.getWorkerFarm() */\n private constructor(props: WorkerFarmProps) {\n this.props = {...DEFAULT_PROPS};\n this.setProps(props);\n /** @type Map} */\n this.workerPools = new Map();\n }\n\n /**\n * Terminate all workers in the farm\n * @note Can free up significant memory\n */\n destroy(): void {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n this.workerPools = new Map();\n }\n\n /**\n * Set props used when initializing worker pools\n * @param props\n */\n setProps(props: WorkerFarmProps): void {\n this.props = {...this.props, ...props};\n // Update worker pool props\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n\n /**\n * Returns a worker pool for the specified worker\n * @param options - only used first time for a specific worker name\n * @param options.name - the name of the worker - used to identify worker pool\n * @param options.url -\n * @param options.source -\n * @example\n * const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n */\n getWorkerPool(options: {name: string; source?: string; url?: string}): WorkerPool {\n const {name, source, url} = options;\n let workerPool = this.workerPools.get(name);\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n return workerPool;\n }\n\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n}\n","import type {WorkerObject, WorkerOptions} from '../../types';\nimport {assert} from '../env-utils/assert';\nimport {VERSION as __VERSION__} from '../env-utils/version';\n\nconst NPM_TAG = 'latest'; // Change to 'latest' on release-branch\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : NPM_TAG;\n\n/**\n * Gets worker object's name (for debugging in Chrome thread inspector window)\n */\nexport function getWorkerName(worker: WorkerObject): string {\n const warning = worker.version !== VERSION ? ` (worker-utils@${VERSION})` : '';\n return `${worker.name}@${worker.version}${warning}`;\n}\n\n/**\n * Generate a worker URL based on worker object and options\n * @returns A URL to one of the following:\n * - a published worker on unpkg CDN\n * - a local test worker\n * - a URL provided by the user in options\n */\nexport function getWorkerURL(worker: WorkerObject, options: WorkerOptions = {}): string {\n const workerOptions = options[worker.id] || {};\n\n const workerFile = `${worker.id}-worker.js`;\n\n let url = workerOptions.workerUrl;\n\n // HACK: Allow for non-nested workerUrl for the CompressionWorker.\n // For the compression worker, workerOptions is currently not nested correctly. For most loaders,\n // you'd have options within an object, i.e. `{mvt: {coordinates: ...}}` but the CompressionWorker\n // puts options at the top level, not within a `compression` key (its `id`). For this reason, the\n // above `workerOptions` will always be a string (i.e. `'gzip'`) for the CompressionWorker. To not\n // break backwards compatibility, we allow the CompressionWorker to have options at the top level.\n if (!url && worker.id === 'compression') {\n url = options.workerUrl;\n }\n\n // If URL is test, generate local loaders.gl url\n // @ts-ignore _workerType\n if (options._workerType === 'test') {\n url = `modules/${worker.module}/dist/${workerFile}`;\n }\n\n // If url override is not provided, generate a URL to published version on npm CDN unpkg.com\n if (!url) {\n // GENERATE\n let version = worker.version;\n // On master we need to load npm alpha releases published with the `beta` tag\n if (version === 'latest') {\n // throw new Error('latest worker version specified');\n version = NPM_TAG;\n }\n const versionTag = version ? `@${version}` : '';\n url = `https://unpkg.com/@loaders.gl/${worker.module}${versionTag}/dist/${workerFile}`;\n }\n\n assert(url);\n\n // Allow user to override location\n return url;\n}\n","import {\n WorkerJob,\n WorkerMessageType,\n WorkerMessagePayload,\n isBrowser\n} from '@loaders.gl/worker-utils';\nimport type {Loader, LoaderOptions, LoaderContext} from '../../types';\nimport {WorkerFarm, getWorkerURL} from '@loaders.gl/worker-utils';\n\n/**\n * Determines if a loader can parse with worker\n * @param loader\n * @param options\n */\nexport function canParseWithWorker(loader: Loader, options?: LoaderOptions) {\n if (!WorkerFarm.isSupported()) {\n return false;\n }\n\n // Node workers are still experimental\n if (!isBrowser && !options?._nodeWorkers) {\n return false;\n }\n\n return loader.worker && options?.worker;\n}\n\n/**\n * this function expects that the worker function sends certain messages,\n * this can be automated if the worker is wrapper by a call to createLoaderWorker in @loaders.gl/loader-utils.\n */\nexport async function parseWithWorker(\n loader: Loader,\n data: any,\n options?: LoaderOptions,\n context?: LoaderContext,\n parseOnMainThread?: (arrayBuffer: ArrayBuffer, options: {[key: string]: any}) => Promise\n) {\n const name = loader.id; // TODO\n const url = getWorkerURL(loader, options);\n\n const workerFarm = WorkerFarm.getWorkerFarm(options);\n const workerPool = workerFarm.getWorkerPool({name, url});\n\n // options.log object contains functions which cannot be transferred\n // context.fetch & context.parse functions cannot be transferred\n // TODO - decide how to handle logging on workers\n options = JSON.parse(JSON.stringify(options));\n context = JSON.parse(JSON.stringify(context || {}));\n\n const job = await workerPool.startJob(\n 'process-on-worker',\n // @ts-expect-error\n onMessage.bind(null, parseOnMainThread) // eslint-disable-line @typescript-eslint/no-misused-promises\n );\n\n job.postMessage('process', {\n // @ts-ignore\n input: data,\n options,\n context\n });\n\n const result = await job.result;\n // TODO - what is going on here?\n return await result.result;\n}\n\n/**\n * Handle worker's responses to the main thread\n * @param job\n * @param type\n * @param payload\n */\nasync function onMessage(\n parseOnMainThread: (arrayBuffer: ArrayBuffer, options?: {[key: string]: any}) => Promise,\n job: WorkerJob,\n type: WorkerMessageType,\n payload: WorkerMessagePayload\n) {\n switch (type) {\n case 'done':\n job.done(payload);\n break;\n\n case 'error':\n job.error(new Error(payload.error));\n break;\n\n case 'process':\n // Worker is asking for main thread to parseO\n const {id, input, options} = payload;\n try {\n const result = await parseOnMainThread(input, options);\n job.postMessage('done', {id, result});\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown error';\n job.postMessage('error', {id, error: message});\n }\n break;\n\n default:\n // eslint-disable-next-line\n console.warn(`parse-with-worker unknown message ${type}`);\n }\n}\n","import type {IteratorOptions} from './make-iterator';\n\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n\n/**\n * Returns an iterator that breaks a big ArrayBuffer into chunks and yields them one-by-one\n * @param blob ArrayBuffer to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeArrayBufferIterator(\n arrayBuffer: ArrayBuffer,\n options: IteratorOptions = {}\n): Iterable {\n const {chunkSize = DEFAULT_CHUNK_SIZE} = options;\n\n let byteOffset = 0;\n\n while (byteOffset < arrayBuffer.byteLength) {\n // Create a chunk of the right size\n const chunkByteLength = Math.min(arrayBuffer.byteLength - byteOffset, chunkSize);\n const chunk = new ArrayBuffer(chunkByteLength);\n\n // Copy data from the big chunk\n const sourceArray = new Uint8Array(arrayBuffer, byteOffset, chunkByteLength);\n const chunkArray = new Uint8Array(chunk);\n chunkArray.set(sourceArray);\n\n // yield the chunk\n byteOffset += chunkByteLength;\n yield chunk;\n }\n}\n","import type {Readable} from 'stream';\nimport {isBrowser, toArrayBuffer} from '@loaders.gl/loader-utils';\n\nexport type StreamIteratorOptions = {\n _streamReadAhead?: boolean;\n};\n\n/**\n * Returns an async iterable that reads from a stream (works in both Node.js and browsers)\n * @param stream stream to iterator over\n */\nexport function makeStreamIterator(\n stream: ReadableStream | Readable,\n options?: StreamIteratorOptions\n): AsyncIterable {\n return isBrowser\n ? makeBrowserStreamIterator(stream as ReadableStream, options)\n : makeNodeStreamIterator(stream as Readable, options);\n}\n\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @see https://jakearchibald.com/2017/async-iterators-and-generators/#making-streams-iterate\n */\nasync function* makeBrowserStreamIterator(\n stream: ReadableStream,\n options?: StreamIteratorOptions\n): AsyncIterable {\n // WhatWG: stream is supposed to have a `getIterator` method\n // if (typeof stream.getIterator === 'function') {\n // return stream.getIterator();\n // }\n // if (typeof stream[Symbol.asyncIterator] === 'function') {\n // return makeToArrayBufferIterator(stream);\n // }\n\n // In the browser, we first need to get a lock on the stream\n const reader = stream.getReader();\n\n let nextBatchPromise: Promise<{done?: boolean; value?: Uint8Array}> | undefined;\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const currentBatchPromise = nextBatchPromise || reader.read();\n // Issue a read for an additional batch, while we await the next batch\n // Idea is to make fetching happen in parallel with processing / parsing\n if (options?._streamReadAhead) {\n nextBatchPromise = reader.read();\n }\n // Read from the stream\n // value is a Uint8Array\n const {done, value} = await currentBatchPromise;\n // Exit if we're done\n if (done) {\n return;\n }\n // Else yield the chunk\n yield toArrayBuffer(value);\n }\n } catch (error) {\n // TODO - examples makes it look like this should always be called,\n // but that generates exceptions so only call it if we do not reach the end\n reader.releaseLock();\n }\n}\n\n/**\n * Returns an async iterable that reads from a DOM (browser) stream\n * @param stream stream to iterate from\n * @note Requires Node.js >= 10\n */\nasync function* makeNodeStreamIterator(\n stream: Readable,\n options?: StreamIteratorOptions\n): AsyncIterable {\n // Hacky test for node version to ensure we don't call bad polyfills\n // NODE 10+: stream is an asyncIterator\n for await (const chunk of stream) {\n yield toArrayBuffer(chunk); // Coerce each chunk to ArrayBuffer\n }\n}\n/* TODO - remove NODE < 10\n * @see https://github.com/bustle/streaming-iterables, MIT license\n *\n if (typeof stream[Symbol.asyncIterator] === 'function') {\n return;\n }\n\n // TODO - check if is this ever used in Node 10+?\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const data = stream.read();\n if (data !== null) {\n yield toArrayBuffer(data);\n // eslint-disable-next-line no-continue\n continue;\n }\n if (stream._readableState?.ended) {\n return;\n }\n await onceReadable(stream);\n }\n\nasync function onceReadable(stream: Readable): Promise {\n return new Promise((resolve) => {\n stream.once('readable', resolve);\n });\n}\n */\n","import type {ReadStream} from 'fs';\n\nimport {makeStringIterator} from './make-string-iterator';\nimport {makeArrayBufferIterator} from './make-array-buffer-iterator';\nimport {makeBlobIterator} from './make-blob-iterator';\nimport type {StreamIteratorOptions} from './make-stream-iterator';\nimport {makeStreamIterator} from './make-stream-iterator';\nimport {isBlob, isReadableStream, isResponse} from '../../javascript-utils/is-type';\n\n/**\n * @param [options.chunkSize]\n */\nexport type IteratorOptions = StreamIteratorOptions & {\n chunkSize?: number;\n};\n\n/**\n * Returns an iterator that breaks its input into chunks and yields them one-by-one.\n * @param data\n * @param options\n * @returns\n * This function can e.g. be used to enable data sources that can only be read atomically\n * (such as `Blob` and `File` via `FileReader`) to still be parsed in batches.\n */\nexport function makeIterator(\n data: ArrayBuffer | string | Blob | Response | ReadableStream | ReadStream,\n options?: IteratorOptions\n): AsyncIterable | Iterable {\n if (typeof data === 'string') {\n // Note: Converts string chunks to binary\n return makeStringIterator(data, options);\n }\n if (data instanceof ArrayBuffer) {\n return makeArrayBufferIterator(data, options);\n }\n if (isBlob(data)) {\n return makeBlobIterator(data as Blob, options);\n }\n if (isReadableStream(data)) {\n return makeStreamIterator(data as ReadableStream, options);\n }\n if (isResponse(data)) {\n const response = data as Response;\n return makeStreamIterator(response.body as ReadableStream, options);\n }\n throw new Error('makeIterator');\n}\n","import type {IteratorOptions} from './make-iterator';\n\nconst DEFAULT_CHUNK_SIZE = 256 * 1024;\n\n/**\n * Returns an iterator that breaks a big string into chunks and yields them one-by-one as ArrayBuffers\n * @param blob string to iterate over\n * @param options\n * @param options.chunkSize\n */\nexport function* makeStringIterator(\n string: string,\n options?: IteratorOptions\n): Iterable {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n\n let offset = 0;\n const textEncoder = new TextEncoder();\n while (offset < string.length) {\n // Create a chunk of the right size\n const chunkLength = Math.min(string.length - offset, chunkSize);\n const chunk = string.slice(offset, offset + chunkLength);\n offset += chunkLength;\n\n // yield an ArrayBuffer chunk\n yield textEncoder.encode(chunk);\n }\n}\n","import type {IteratorOptions} from './make-iterator';\n\nconst DEFAULT_CHUNK_SIZE = 1024 * 1024; // 1MB — biggest value that keeps UI responsive\n\n/**\n * Returns an iterator that breaks a big Blob into chunks and yields them one-by-one\n * @param blob Blob or File object\n * @param options\n * @param options.chunkSize\n */\nexport async function* makeBlobIterator(\n blob: Blob,\n options?: IteratorOptions\n): AsyncIterable {\n const chunkSize = options?.chunkSize || DEFAULT_CHUNK_SIZE;\n\n let offset = 0;\n while (offset < blob.size) {\n const end = offset + chunkSize;\n\n const chunk = await blob.slice(offset, end).arrayBuffer();\n\n offset = end;\n yield chunk;\n }\n}\n","import type {\n DataType,\n SyncDataType,\n BatchableDataType,\n Loader,\n LoaderOptions\n} from '@loaders.gl/loader-utils';\nimport {concatenateArrayBuffersAsync} from '@loaders.gl/loader-utils';\nimport {\n isResponse,\n isReadableStream,\n isAsyncIterable,\n isIterable,\n isIterator,\n isBlob,\n isBuffer\n} from '../../javascript-utils/is-type';\nimport {makeIterator} from '../../iterators/make-iterator/make-iterator';\nimport {checkResponse, makeResponse} from '../utils/response-utils';\n\nconst ERR_DATA = 'Cannot convert supplied data type';\n\n// eslint-disable-next-line complexity\nexport function getArrayBufferOrStringFromDataSync(\n data: SyncDataType,\n loader: Loader,\n options: LoaderOptions\n): ArrayBuffer | string {\n if (loader.text && typeof data === 'string') {\n return data;\n }\n\n if (isBuffer(data)) {\n // @ts-ignore\n data = data.buffer;\n }\n\n if (data instanceof ArrayBuffer) {\n const arrayBuffer = data;\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(arrayBuffer);\n }\n return arrayBuffer;\n }\n\n // We may need to handle offsets\n if (ArrayBuffer.isView(data)) {\n // TextDecoder is invoked on typed arrays and will handle offsets\n if (loader.text && !loader.binary) {\n const textDecoder = new TextDecoder('utf8');\n return textDecoder.decode(data);\n }\n\n let arrayBuffer = data.buffer;\n\n // Since we are returning the underlying arrayBuffer, we must create a new copy\n // if this typed array / Buffer is a partial view into the ArryayBuffer\n // TODO - this is a potentially unnecessary copy\n const byteLength = data.byteLength || data.length;\n if (data.byteOffset !== 0 || byteLength !== arrayBuffer.byteLength) {\n // console.warn(`loaders.gl copying arraybuffer of length ${byteLength}`);\n arrayBuffer = arrayBuffer.slice(data.byteOffset, data.byteOffset + byteLength);\n }\n return arrayBuffer;\n }\n\n throw new Error(ERR_DATA);\n}\n\n// Convert async iterator to a promise\nexport async function getArrayBufferOrStringFromData(\n data: DataType,\n loader: Loader,\n options: LoaderOptions\n): Promise {\n const isArrayBuffer = data instanceof ArrayBuffer || ArrayBuffer.isView(data);\n if (typeof data === 'string' || isArrayBuffer) {\n return getArrayBufferOrStringFromDataSync(data as string | ArrayBuffer, loader, options);\n }\n\n // Blobs and files are FileReader compatible\n if (isBlob(data)) {\n data = await makeResponse(data);\n }\n\n if (isResponse(data)) {\n const response = data as Response;\n await checkResponse(response);\n return loader.binary ? await response.arrayBuffer() : await response.text();\n }\n\n if (isReadableStream(data)) {\n // @ts-expect-error TS2559 options type\n data = makeIterator(data as ReadableStream, options);\n }\n\n if (isIterable(data) || isAsyncIterable(data)) {\n // Assume arrayBuffer iterator - attempt to concatenate\n return concatenateArrayBuffersAsync(data as AsyncIterable);\n }\n\n throw new Error(ERR_DATA);\n}\n\nexport async function getAsyncIterableFromData(\n data: BatchableDataType,\n options: LoaderOptions\n): Promise | Iterable> {\n if (isIterator(data)) {\n return data as AsyncIterable;\n }\n\n if (isResponse(data)) {\n const response = data as Response;\n // Note Since this function is not async, we currently can't load error message, just status\n await checkResponse(response);\n // TODO - bug in polyfill, body can be a Promise under Node.js\n // eslint-disable-next-line @typescript-eslint/await-thenable\n const body = await response.body;\n // TODO - body can be null?\n return makeIterator(body as ReadableStream, options as any);\n }\n\n if (isBlob(data) || isReadableStream(data)) {\n return makeIterator(data as Blob | ReadableStream, options as any);\n }\n\n if (isAsyncIterable(data)) {\n return data[Symbol.asyncIterator]();\n }\n\n return getIterableFromData(data);\n}\n\nexport async function getReadableStream(data: BatchableDataType): Promise {\n if (isReadableStream(data)) {\n return data as ReadableStream;\n }\n if (isResponse(data)) {\n // @ts-ignore\n return data.body;\n }\n const response = await makeResponse(data);\n // @ts-ignore\n return response.body;\n}\n\n// HELPERS\n\nfunction getIterableFromData(data) {\n // generate an iterator that emits a single chunk\n if (ArrayBuffer.isView(data)) {\n return (function* oneChunk() {\n yield data.buffer;\n })();\n }\n\n if (data instanceof ArrayBuffer) {\n return (function* oneChunk() {\n yield data;\n })();\n }\n\n if (isIterator(data)) {\n return data;\n }\n\n if (isIterable(data)) {\n return data[Symbol.iterator]();\n }\n\n throw new Error(ERR_DATA);\n}\n","import {concatenateArrayBuffers} from '../binary-utils/array-buffer-utils';\n\n// GENERAL UTILITIES\n\n/**\n * Iterate over async iterator, without resetting iterator if end is not reached\n * - forEach intentionally does not reset iterator if exiting loop prematurely\n * so that iteration can continue in a second loop\n * - It is recommended to use a standard for-await as last loop to ensure\n * iterator gets properly reset\n *\n * TODO - optimize using sync iteration if argument is an Iterable?\n *\n * @param iterator\n * @param visitor\n */\nexport async function forEach(iterator, visitor) {\n // eslint-disable-next-line\n while (true) {\n const {done, value} = await iterator.next();\n if (done) {\n iterator.return();\n return;\n }\n const cancel = visitor(value);\n if (cancel) {\n return;\n }\n }\n}\n\n// Breaking big data into iterable chunks, concatenating iterable chunks into big data objects\n\n/**\n * Concatenates all data chunks yielded by an (async) iterator\n * This function can e.g. be used to enable atomic parsers to work on (async) iterator inputs\n */\n\nexport async function concatenateArrayBuffersAsync(\n asyncIterator: AsyncIterable | Iterable\n): Promise {\n const arrayBuffers: ArrayBuffer[] = [];\n for await (const chunk of asyncIterator) {\n arrayBuffers.push(chunk);\n }\n return concatenateArrayBuffers(...arrayBuffers);\n}\n\nexport async function concatenateStringsAsync(\n asyncIterator: AsyncIterable | Iterable\n): Promise {\n const strings: string[] = [];\n for await (const chunk of asyncIterator) {\n strings.push(chunk);\n }\n return strings.join('');\n}\n","// loaders.gl, MIT license\nimport {Log} from '@probe.gl/log';\n\nexport const log = new Log({id: 'loaders.gl'});\n","import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';\nimport {compareArrayBuffers, path} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {log} from '../utils/log';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {getRegisteredLoaders} from './register-loaders';\nimport {isBlob} from '../../javascript-utils/is-type';\n\nconst EXT_PATTERN = /\\.([^.]+)$/;\n\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, {...options, nothrow: true}, context);\n if (loader) {\n return loader;\n }\n\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await (data as Blob).slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Loader | null {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders: Loader[] = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/** Implements loaders selection logic */\n// eslint-disable-next-line complexity\nfunction selectLoaderInternal(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[],\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n const {url, type} = getResourceUrlAndType(data);\n\n const testUrl = url || context?.url;\n\n let loader: Loader | null = null;\n let reason: string = '';\n\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n reason = `match forced by supplied MIME type ${options?.mimeType}`;\n }\n\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? `matched url ${testUrl}` : '');\n\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? `matched MIME type ${type}` : '');\n\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n loader = loader || findLoaderByInitialBytes(loaders, data);\n reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n\n // Look up loader by fallback mime type\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n\n if (reason) {\n log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n }\n\n return loader;\n}\n\n/** Check HTTP Response */\nfunction validHTTPResponse(data: any): boolean {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data): string {\n const {url, type} = getResourceUrlAndType(data);\n\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n const firstCharacters: string = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders: Loader[]): void {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders: Loader[], url?: string): Loader | null {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders: Loader[], extension: string): Loader | null {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (mimeType === `application/x.${loader.id}`) {\n return loader;\n }\n }\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length: number = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n","import type {DataType, Loader, LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {assert, validateWorkerVersion} from '@loaders.gl/worker-utils';\nimport {parseWithWorker, canParseWithWorker} from '@loaders.gl/loader-utils';\nimport {isLoaderObject} from '../loader-utils/normalize-loader';\nimport {isResponse} from '../../javascript-utils/is-type';\nimport {normalizeOptions} from '../loader-utils/option-utils';\nimport {getArrayBufferOrStringFromData} from '../loader-utils/get-data';\nimport {getLoaderContext, getLoadersFromContext} from '../loader-utils/loader-context';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {selectLoader} from './select-loader';\n\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\nexport async function parse(\n data: DataType | Promise,\n loaders?: Loader | Loader[] | LoaderOptions,\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise {\n assert(!context || typeof context === 'object'); // parse no longer accepts final url\n\n // Signature: parse(data, options, context | url)\n // Uses registered loaders\n if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders as LoaderOptions;\n loaders = undefined;\n }\n\n data = await data; // Resolve any promise\n options = options || {};\n\n // Extract a url for auto detection\n const {url} = getResourceUrlAndType(data);\n\n // Chooses a loader (and normalizes it)\n // Also use any loaders in the context, new loaders take priority\n const typedLoaders = loaders as Loader | Loader[] | undefined;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n // todo hacky type cast\n const loader = await selectLoader(data as ArrayBuffer, candidateLoaders, options);\n // Note: if no loader was found, if so just return null\n if (!loader) {\n return null;\n }\n\n // Normalize options\n options = normalizeOptions(options, loader, candidateLoaders, url);\n\n // Get a context (if already present, will be unchanged)\n context = getLoaderContext({url, parse, loaders: candidateLoaders}, options, context);\n\n return await parseWithLoader(loader, data, options, context);\n}\n\n// TODO: support progress and abort\n// TODO - should accept loader.parseAsyncIterator and concatenate.\nasync function parseWithLoader(loader, data, options, context) {\n validateWorkerVersion(loader);\n\n if (isResponse(data)) {\n // Serialize to support passing the response to web worker\n const response = data as Response;\n const {ok, redirected, status, statusText, type, url} = response;\n const headers = Object.fromEntries(response.headers.entries());\n context.response = {headers, ok, redirected, status, statusText, type, url};\n }\n\n data = await getArrayBufferOrStringFromData(data, loader, options);\n\n // First check for synchronous text parser, wrap results in promises\n if (loader.parseTextSync && typeof data === 'string') {\n options.dataType = 'text';\n return loader.parseTextSync(data, options, context, loader);\n }\n\n // If we have a workerUrl and the loader can parse the given options efficiently in a worker\n if (canParseWithWorker(loader, options)) {\n return await parseWithWorker(loader, data, options, context, parse);\n }\n\n // Check for asynchronous parser\n if (loader.parseText && typeof data === 'string') {\n return await loader.parseText(data, options, context, loader);\n }\n\n if (loader.parse) {\n return await loader.parse(data, options, context, loader);\n }\n\n // This should not happen, all sync loaders should also offer `parse` function\n assert(!loader.parseSync);\n\n // TBD - If asynchronous parser not available, return null\n throw new Error(`${loader.id} loader - no parser found and worker is disabled`);\n}\n","import type {Loader, LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport {getFetchFunction} from './option-utils';\n\n/**\n * \"sub\" loaders invoked by other loaders get a \"context\" injected on `this`\n * The context will inject core methods like `parse` and contain information\n * about loaders and options passed in to the top-level `parse` call.\n *\n * @param context\n * @param options\n * @param previousContext\n */\nexport function getLoaderContext(\n context: Omit & Partial>,\n options?: LoaderOptions,\n previousContext: LoaderContext | null = null\n): LoaderContext {\n // For recursive calls, we already have a context\n // TODO - add any additional loaders to context?\n if (previousContext) {\n return previousContext;\n }\n\n const resolvedContext: LoaderContext = {\n fetch: getFetchFunction(options, context),\n ...context\n };\n\n // Recursive loading does not use single loader\n if (!Array.isArray(resolvedContext.loaders)) {\n resolvedContext.loaders = null;\n }\n\n return resolvedContext;\n}\n\n// eslint-disable-next-line complexity\nexport function getLoadersFromContext(\n loaders: Loader[] | Loader | undefined,\n context?: LoaderContext\n) {\n // A single non-array loader is force selected, but only on top-level (context === null)\n if (!context && loaders && !Array.isArray(loaders)) {\n return loaders;\n }\n\n // Create a merged list\n let candidateLoaders;\n if (loaders) {\n candidateLoaders = Array.isArray(loaders) ? loaders : [loaders];\n }\n if (context && context.loaders) {\n const contextLoaders = Array.isArray(context.loaders) ? context.loaders : [context.loaders];\n candidateLoaders = candidateLoaders ? [...candidateLoaders, ...contextLoaders] : contextLoaders;\n }\n // If no loaders, return null to look in globally registered loaders\n return candidateLoaders && candidateLoaders.length ? candidateLoaders : null;\n}\n","import type {WorkerObject} from '../../types';\nimport {assert} from '../env-utils/assert';\nimport {VERSION} from '../env-utils/version';\n\n/**\n * Check if worker is compatible with this library version\n * @param worker\n * @param libVersion\n * @returns `true` if the two versions are compatible\n */\nexport function validateWorkerVersion(\n worker: WorkerObject,\n coreVersion: string = VERSION\n): boolean {\n assert(worker, 'no worker provided');\n\n const workerVersion = worker.version;\n if (!coreVersion || !workerVersion) {\n return false;\n }\n\n // TODO enable when fix the __version__ injection\n // const coreVersions = parseVersion(coreVersion);\n // const workerVersions = parseVersion(workerVersion);\n // assert(\n // coreVersion.major === workerVersion.major && coreVersion.minor <= workerVersion.minor,\n // `worker: ${worker.name} is not compatible. ${coreVersion.major}.${\n // coreVersion.minor\n // }+ is required.`\n // );\n\n return true;\n}\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction parseVersion(version) {\n const parts = version.split('.').map(Number);\n return {major: parts[0], minor: parts[1]};\n}\n","import type {DataType, Loader, LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {isBlob} from '../../javascript-utils/is-type';\nimport {isLoaderObject} from '../loader-utils/normalize-loader';\nimport {getFetchFunction} from '../loader-utils/option-utils';\n\nimport {parse} from './parse';\n\n/**\n * Parses `data` using a specified loader\n * Note: Load does duplicate a lot of parse.\n * it can also call fetchFile on string urls, which `parse` won't do.\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\n// implementation signature\nexport async function load(\n url: string | DataType,\n loaders?: Loader | Loader[] | LoaderOptions,\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise {\n // Signature: load(url, options)\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders as LoaderOptions;\n loaders = undefined;\n }\n\n // Select fetch function\n const fetch = getFetchFunction(options);\n\n // at this point, `url` could be already loaded binary data\n let data = url;\n // url is a string, fetch the url\n if (typeof url === 'string') {\n data = await fetch(url);\n // URL is Blob or File, fetchFile handles it (alt: we could generate ObjectURL here)\n }\n\n if (isBlob(url)) {\n // The fetch response object will contain blob.name\n data = await fetch(url);\n }\n\n // Data is loaded (at least we have a `Response` object) so time to hand over to `parse`\n return await parse(data, loaders, options);\n}\n","import {Loader} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {getGlobalLoaderState} from '../loader-utils/option-utils';\n\n// Store global registered loaders on the global object to increase chances of cross loaders-version interoperability\n// This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\nconst getGlobalLoaderRegistry = () => {\n const state = getGlobalLoaderState();\n state.loaderRegistry = state.loaderRegistry || [];\n return state.loaderRegistry;\n};\n\n/** Register a list of global loaders */\nexport function registerLoaders(loaders: Loader[]) {\n const loaderRegistry = getGlobalLoaderRegistry();\n\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n\n for (const loader of loaders) {\n const normalizedLoader = normalizeLoader(loader);\n if (!loaderRegistry.find((registeredLoader) => normalizedLoader === registeredLoader)) {\n // add to the beginning of the loaderRegistry, so the last registeredLoader get picked\n loaderRegistry.unshift(normalizedLoader);\n }\n }\n}\n\nexport function getRegisteredLoaders(): Loader[] {\n return getGlobalLoaderRegistry();\n}\n\n/** @deprecated For testing only */\nexport function _unregisterLoaders() {\n const state = getGlobalLoaderState();\n state.loaderRegistry = [];\n}\n","// Simple file alias mechanisms for tests.\n\nlet pathPrefix = '';\nconst fileAliases: {[aliasPath: string]: string} = {};\n\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix: string): void {\n pathPrefix = prefix;\n}\n\n/*\n * Get the relative path prefix\n */\nexport function getPathPrefix(): string {\n return pathPrefix;\n}\n\n/**\n *\n * @param aliases\n *\n * Note: addAliases are an experimental export, they are only for testing of loaders.gl loaders\n * not intended as a generic aliasing mechanism\n */\nexport function addAliases(aliases: {[aliasPath: string]: string}): void {\n Object.assign(fileAliases, aliases);\n}\n\n/**\n * Resolves aliases and adds path-prefix to paths\n */\nexport function resolvePath(filename: string): string {\n for (const alias in fileAliases) {\n if (filename.startsWith(alias)) {\n const replacement = fileAliases[alias];\n filename = filename.replace(alias, replacement);\n }\n }\n if (!filename.startsWith('http://') && !filename.startsWith('https://')) {\n filename = `${pathPrefix}${filename}`;\n }\n return filename;\n}\n","import {resolvePath} from '@loaders.gl/loader-utils';\nimport {makeResponse} from '../utils/response-utils';\n// import {getErrorMessageFromResponse} from './fetch-error-message';\n\n/**\n * fetch compatible function\n * Reads file data from:\n * - http/http urls\n * - data urls\n * - File/Blob objects\n * Leverages `@loaders.gl/polyfills` for Node.js support\n * Respects pathPrefix and file aliases\n */\nexport async function fetchFile(\n url: string | Blob,\n options?: RequestInit & {fetch?: RequestInit | Function}\n): Promise {\n if (typeof url === 'string') {\n url = resolvePath(url);\n\n let fetchOptions: RequestInit = options as RequestInit;\n if (options?.fetch && typeof options?.fetch !== 'function') {\n fetchOptions = options.fetch;\n }\n\n return await fetch(url, fetchOptions);\n }\n\n return await makeResponse(url);\n}\n","import type {Loader} from '@loaders.gl/loader-utils';\nimport {assert} from '@loaders.gl/loader-utils';\n\nexport function isLoaderObject(loader?: any): boolean {\n if (!loader) {\n return false;\n }\n\n if (Array.isArray(loader)) {\n loader = loader[0];\n }\n\n const hasExtensions = Array.isArray(loader?.extensions);\n\n /* Now handled by types and worker loaders do not have these\n let hasParser =\n loader.parseTextSync ||\n loader.parseSync ||\n loader.parse ||\n loader.parseStream || // TODO Remove, Replace with parseInBatches\n loader.parseInBatches;\n */\n\n return hasExtensions;\n}\n\nexport function normalizeLoader(loader: Loader): Loader {\n // This error is fairly easy to trigger by mixing up import statements etc\n // So we make an exception and add a developer error message for this case\n // To help new users from getting stuck here\n assert(loader, 'null loader');\n assert(isLoaderObject(loader), 'invalid loader');\n\n // NORMALIZE [LOADER, OPTIONS] => LOADER\n\n // If [loader, options], create a new loaders object with options merged in\n let options;\n if (Array.isArray(loader)) {\n options = loader[1];\n loader = loader[0];\n loader = {\n ...loader,\n options: {...loader.options, ...options}\n };\n }\n\n // NORMALIZE text and binary flags\n // Ensure at least one of text/binary flags are properly set\n\n // @ts-expect-error\n if (loader?.parseTextSync || loader?.parseText) {\n loader.text = true;\n }\n\n if (!loader.text) {\n loader.binary = true;\n }\n\n return loader;\n}\n","// probe.gl Log compatible loggers\nimport {Log} from 'probe.gl';\n\nexport const probeLog = new Log({id: 'loaders.gl'});\n\n// Logs nothing\nexport class NullLog {\n log() {\n return () => {};\n }\n info() {\n return () => {};\n }\n warn() {\n return () => {};\n }\n error() {\n return () => {};\n }\n}\n\n// Logs to console\nexport class ConsoleLog {\n console;\n\n constructor() {\n this.console = console; // eslint-disable-line\n }\n log(...args) {\n return this.console.log.bind(this.console, ...args);\n }\n info(...args) {\n return this.console.info.bind(this.console, ...args);\n }\n warn(...args) {\n return this.console.warn.bind(this.console, ...args);\n }\n error(...args) {\n return this.console.error.bind(this.console, ...args);\n }\n}\n","import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {isBrowser} from '@loaders.gl/loader-utils';\nimport {ConsoleLog} from './loggers';\n\nexport const DEFAULT_LOADER_OPTIONS: LoaderOptions = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n _nodeWorkers: false, // By default do not support node workers\n _workerType: '', // 'test' to use locally generated workers\n\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\n\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n","import type {Loader, LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {isPureObject, isObject} from '../../javascript-utils/is-type';\nimport {fetchFile} from '../fetch/fetch-file';\nimport {probeLog, NullLog} from './loggers';\nimport {DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS} from './option-defaults';\n/**\n * Global state for loaders.gl. Stored on `global.loaders._state`\n */\ntype GlobalLoaderState = {\n loaderRegistry: Loader[];\n globalOptions: {[key: string]: any};\n};\n\n/**\n * Helper for safely accessing global loaders.gl variables\n * Wraps initialization of global variable in function to defeat overly aggressive tree-shakers\n */\nexport function getGlobalLoaderState(): GlobalLoaderState {\n // @ts-ignore\n globalThis.loaders = globalThis.loaders || {};\n // @ts-ignore\n const {loaders} = globalThis;\n\n // Add _state object to keep separate from modules added to globalThis.loaders\n loaders._state = loaders._state || {};\n return loaders._state;\n}\n\n/**\n * Store global loader options on the global object to increase chances of cross loaders-version interoperability\n * NOTE: This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\n * @returns global loader options merged with default loader options\n */\nexport const getGlobalLoaderOptions = () => {\n const state = getGlobalLoaderState();\n // Ensure all default loader options from this library are mentioned\n state.globalOptions = state.globalOptions || {...DEFAULT_LOADER_OPTIONS};\n return state.globalOptions;\n};\n\n/**\n * Set global loader options\n * @param options\n */\nexport function setGlobalOptions(options: object): void {\n const state = getGlobalLoaderState();\n const globalOptions = getGlobalLoaderOptions();\n state.globalOptions = normalizeOptionsInternal(globalOptions, options);\n}\n\n/**\n * Merges options with global opts and loader defaults, also injects baseUri\n * @param options\n * @param loader\n * @param loaders\n * @param url\n */\nexport function normalizeOptions(\n options: object,\n loader: Loader,\n loaders?: Loader[],\n url?: string\n): object {\n loaders = loaders || [];\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n\n validateOptions(options, loaders);\n return normalizeOptionsInternal(loader, options, url);\n}\n\n/**\n * Gets the current fetch function from options and context\n * @param options\n * @param context\n */\nexport function getFetchFunction(\n options?: LoaderOptions,\n context?: Omit & Partial>\n) {\n const globalOptions = getGlobalLoaderOptions();\n\n const fetchOptions = options || globalOptions;\n\n // options.fetch can be a function\n if (typeof fetchOptions.fetch === 'function') {\n return fetchOptions.fetch;\n }\n\n // options.fetch can be an options object\n if (isObject(fetchOptions.fetch)) {\n return (url) => fetchFile(url, fetchOptions);\n }\n\n // else refer to context (from parent loader) if available\n if (context?.fetch) {\n return context?.fetch;\n }\n\n // else return the default fetch function\n return fetchFile;\n}\n\n// VALIDATE OPTIONS\n\n/**\n * Warn for unsupported options\n * @param options\n * @param loaders\n */\nfunction validateOptions(options: LoaderOptions, loaders: Loader[]) {\n // Check top level options\n validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);\n for (const loader of loaders) {\n // Get the scoped, loader specific options from the user supplied options\n const idOptions = (options && options[loader.id]) || {};\n\n // Get scoped, loader specific default and deprecated options from the selected loader\n const loaderOptions = (loader.options && loader.options[loader.id]) || {};\n const deprecatedOptions =\n (loader.deprecatedOptions && loader.deprecatedOptions[loader.id]) || {};\n\n // Validate loader specific options\n validateOptionsObject(idOptions, loader.id, loaderOptions, deprecatedOptions, loaders);\n }\n}\n\n// eslint-disable-next-line max-params, complexity\nfunction validateOptionsObject(\n options,\n id: string | null,\n defaultOptions,\n deprecatedOptions,\n loaders: Loader[]\n) {\n const loaderName = id || 'Top level';\n const prefix = id ? `${id}.` : '';\n\n for (const key in options) {\n // If top level option value is an object it could options for a loader, so ignore\n const isSubOptions = !id && isObject(options[key]);\n const isBaseUriOption = key === 'baseUri' && !id;\n const isWorkerUrlOption = key === 'workerUrl' && id;\n // .workerUrl requires special handling as it is now auto-generated and no longer specified as a default option.\n if (!(key in defaultOptions) && !isBaseUriOption && !isWorkerUrlOption) {\n // Issue deprecation warnings\n if (key in deprecatedOptions) {\n probeLog.warn(\n `${loaderName} loader option \\'${prefix}${key}\\' no longer supported, use \\'${deprecatedOptions[key]}\\'`\n )();\n } else if (!isSubOptions) {\n const suggestion = findSimilarOption(key, loaders);\n probeLog.warn(\n `${loaderName} loader option \\'${prefix}${key}\\' not recognized. ${suggestion}`\n )();\n }\n }\n }\n}\n\nfunction findSimilarOption(optionKey, loaders) {\n const lowerCaseOptionKey = optionKey.toLowerCase();\n let bestSuggestion = '';\n for (const loader of loaders) {\n for (const key in loader.options) {\n if (optionKey === key) {\n return `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n const lowerCaseKey = key.toLowerCase();\n const isPartialMatch =\n lowerCaseOptionKey.startsWith(lowerCaseKey) || lowerCaseKey.startsWith(lowerCaseOptionKey);\n if (isPartialMatch) {\n bestSuggestion = bestSuggestion || `Did you mean \\'${loader.id}.${key}\\'?`;\n }\n }\n }\n return bestSuggestion;\n}\n\nfunction normalizeOptionsInternal(loader, options, url?: string) {\n const loaderDefaultOptions = loader.options || {};\n\n const mergedOptions = {...loaderDefaultOptions};\n\n addUrlOptions(mergedOptions, url);\n\n // LOGGING: options.log can be set to `null` to defeat logging\n if (mergedOptions.log === null) {\n mergedOptions.log = new NullLog();\n }\n\n mergeNestedFields(mergedOptions, getGlobalLoaderOptions());\n mergeNestedFields(mergedOptions, options);\n\n return mergedOptions;\n}\n\n// Merge nested options objects\nfunction mergeNestedFields(mergedOptions, options) {\n for (const key in options) {\n // Check for nested options\n // object in options => either no key in defaultOptions or object in defaultOptions\n if (key in options) {\n const value = options[key];\n if (isPureObject(value) && isPureObject(mergedOptions[key])) {\n mergedOptions[key] = {\n ...mergedOptions[key],\n ...options[key]\n };\n } else {\n mergedOptions[key] = options[key];\n }\n }\n // else: No need to merge nested opts, and the initial merge already copied over the nested options\n }\n}\n\n// Harvest information from the url\n// TODO - baseUri should be a directory, i.e. remove file component from baseUri\n// TODO - extract extension?\n// TODO - extract query parameters?\n// TODO - should these be injected on context instead of options?\nfunction addUrlOptions(options, url?: string) {\n if (url && !('baseUri' in options)) {\n options.baseUri = url;\n }\n}\n","// TODO - build/integrate proper MIME type parsing\n// https://mimesniff.spec.whatwg.org/\n\nconst DATA_URL_PATTERN = /^data:([-\\w.]+\\/[-\\w.+]+)(;|,)/;\nconst MIME_TYPE_PATTERN = /^([-\\w.]+\\/[-\\w.+]+)/;\n\n/**\n * Remove extra data like `charset` from MIME types\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMEType(mimeString: string): string {\n // If resource is a data url, extract any embedded mime type\n const matches = MIME_TYPE_PATTERN.exec(mimeString);\n if (matches) {\n return matches[1];\n }\n return mimeString;\n}\n\n/**\n * Extract MIME type from data URL\n *\n * @param mimeString\n * @returns A clean MIME type, or an empty string\n *\n * @todo - handle more advanced MIMETYpes, multiple types\n * @todo - extract charset etc\n */\nexport function parseMIMETypeFromURL(url: string): string {\n // If resource is a data URL, extract any embedded mime type\n const matches = DATA_URL_PATTERN.exec(url);\n if (matches) {\n return matches[1];\n }\n return '';\n}\n","import {isResponse, isBlob} from '../../javascript-utils/is-type';\nimport {parseMIMEType, parseMIMETypeFromURL} from './mime-type-utils';\n\nconst QUERY_STRING_PATTERN = /\\?.*/;\n\n/**\n * Returns an object with `url` and (MIME) `type` fields\n * If it cannot determine url or type, the corresponding value will be an empty string\n *\n * @param resource Any type, but only Responses, string URLs and data URLs are processed\n *\n * @todo string parameters are assumed to be URLs\n */\nexport function getResourceUrlAndType(resource: any): {url: string; type: string} {\n // If resource is a response, it contains the information directly\n if (isResponse(resource)) {\n const url = stripQueryString(resource.url || '');\n const contentTypeHeader = resource.headers.get('content-type') || '';\n return {\n url,\n type: parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(url)\n };\n }\n\n // If the resource is a Blob or a File (subclass of Blob)\n if (isBlob(resource)) {\n return {\n // File objects have a \"name\" property. Blob objects don't have any\n // url (name) information\n url: stripQueryString(resource.name || ''),\n type: resource.type || ''\n };\n }\n\n if (typeof resource === 'string') {\n return {\n // TODO this could mess up data URL but it doesn't matter as it is just used for inference\n url: stripQueryString(resource),\n // If a data url\n type: parseMIMETypeFromURL(resource)\n };\n }\n\n // Unknown\n return {\n url: '',\n type: ''\n };\n}\n\n/**\n * Returns (approximate) content length for a resource if it can be determined.\n * Returns -1 if content length cannot be determined.\n * @param resource\n\n * @note string parameters are NOT assumed to be URLs\n */\nexport function getResourceContentLength(resource: any): number {\n if (isResponse(resource)) {\n return resource.headers['content-length'] || -1;\n }\n if (isBlob(resource)) {\n return resource.size;\n }\n if (typeof resource === 'string') {\n // TODO - handle data URL?\n return resource.length;\n }\n if (resource instanceof ArrayBuffer) {\n return resource.byteLength;\n }\n if (ArrayBuffer.isView(resource)) {\n return resource.byteLength;\n }\n return -1;\n}\n\nfunction stripQueryString(url) {\n return url.replace(QUERY_STRING_PATTERN, '');\n}\n","import {isResponse} from '../../javascript-utils/is-type';\nimport {getResourceContentLength, getResourceUrlAndType} from './resource-utils';\n\n/**\n * Returns a Response object\n * Adds content-length header when possible\n *\n * @param resource\n */\nexport async function makeResponse(resource: any): Promise {\n if (isResponse(resource)) {\n return resource;\n }\n\n // Add content-length header if possible\n const headers: {[header: string]: string} = {};\n\n const contentLength = getResourceContentLength(resource);\n if (contentLength >= 0) {\n headers['content-length'] = String(contentLength);\n }\n\n // `new Response(File)` does not preserve content-type and URL\n // so we add them here\n const {url, type} = getResourceUrlAndType(resource);\n if (type) {\n headers['content-type'] = type;\n }\n\n // Add a custom header with initial bytes if available\n const initialDataUrl = await getInitialDataUrl(resource);\n if (initialDataUrl) {\n headers['x-first-bytes'] = initialDataUrl;\n }\n\n // TODO - is this the best way of handling strings?\n // Maybe package as data URL instead?\n if (typeof resource === 'string') {\n // Convert to ArrayBuffer to avoid Response treating it as a URL\n resource = new TextEncoder().encode(resource);\n }\n\n // Attempt to create a Response from the resource, adding headers and setting url\n const response = new Response(resource, {headers});\n // We can't control `Response.url` via constructor, use a property override to record URL.\n Object.defineProperty(response, 'url', {value: url});\n return response;\n}\n\n/**\n * Checks response status (async) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport async function checkResponse(response: Response): Promise {\n if (!response.ok) {\n const message = await getResponseError(response);\n throw new Error(message);\n }\n}\n\n/**\n * Checks response status (sync) and throws a helpful error message if status is not OK.\n * @param response\n */\nexport function checkResponseSync(response: Response): void {\n if (!response.ok) {\n let message = `${response.status} ${response.statusText}`;\n message = message.length > 60 ? `${message.slice(0, 60)}...` : message;\n throw new Error(message);\n }\n}\n\n// HELPERS\n\nasync function getResponseError(response): Promise {\n let message = `Failed to fetch resource ${response.url} (${response.status}): `;\n try {\n const contentType = response.headers.get('Content-Type');\n let text = response.statusText;\n if (contentType.includes('application/json')) {\n text += ` ${await response.text()}`;\n }\n message += text;\n message = message.length > 60 ? `${message.slice(0, 60)}...` : message;\n } catch (error) {\n // eslint forbids return in a finally statement, so we just catch here\n }\n return message;\n}\n\nasync function getInitialDataUrl(resource): Promise {\n const INITIAL_DATA_LENGTH = 5;\n if (typeof resource === 'string') {\n return `data:,${resource.slice(0, INITIAL_DATA_LENGTH)}`;\n }\n if (resource instanceof Blob) {\n const blobSlice = resource.slice(0, 5);\n return await new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event?.target?.result as string);\n reader.readAsDataURL(blobSlice);\n });\n }\n if (resource instanceof ArrayBuffer) {\n const slice = resource.slice(0, INITIAL_DATA_LENGTH);\n const base64 = arrayBufferToBase64(slice);\n return `data:base64,${base64}`;\n }\n return null;\n}\n\n// https://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\nfunction arrayBufferToBase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {DracoParseOptions} from './lib/draco-parser';\n// import type {DracoMeshData} from './types';\nimport {VERSION} from './lib/utils/version';\n\nexport type DracoLoaderOptions = LoaderOptions & {\n draco?: DracoParseOptions & {\n decoderType?: 'wasm' | 'js';\n libraryPath?: string;\n extraAttributes?;\n attributeNameEntry?: string;\n };\n};\n\nconst DEFAULT_DRACO_OPTIONS: DracoLoaderOptions = {\n draco: {\n decoderType: typeof WebAssembly === 'object' ? 'wasm' : 'js', // 'js' for IE11\n libraryPath: 'libs/',\n extraAttributes: {},\n attributeNameEntry: undefined\n }\n};\n\n/**\n * Worker loader for Draco3D compressed geometries\n */\nexport const DracoLoader = {\n name: 'Draco',\n id: 'draco',\n module: 'draco',\n shapes: ['mesh'],\n version: VERSION,\n worker: true,\n extensions: ['drc'],\n mimeTypes: ['application/octet-stream'],\n binary: true,\n tests: ['DRACO'],\n options: DEFAULT_DRACO_OPTIONS\n};\n\nexport const _TypecheckDracoLoader: Loader = DracoLoader;\n","import {DataType} from './type';\n\n/**\n * ArrowJS `Field` API-compatible class for row-based tables\n * https://loaders.gl/arrowjs/docs/api-reference/field\n * A field holds name, nullable, and metadata information about a table \"column\"\n * A Schema is essentially a list of fields\n */\nexport default class Field {\n name: string;\n type: DataType;\n nullable: boolean;\n metadata: Map;\n\n constructor(\n name: string,\n type: DataType,\n nullable = false,\n metadata: Map = new Map()\n ) {\n this.name = name;\n this.type = type;\n this.nullable = nullable;\n this.metadata = metadata;\n }\n\n get typeId(): number {\n return this.type && this.type.typeId;\n }\n\n clone(): Field {\n return new Field(this.name, this.type, this.nullable, this.metadata);\n }\n\n compareTo(other: this): boolean {\n return (\n this.name === other.name &&\n this.type === other.type &&\n this.nullable === other.nullable &&\n this.metadata === other.metadata\n );\n }\n\n toString(): string {\n return `${this.type}${this.nullable ? ', nullable' : ''}${\n this.metadata ? `, metadata: ${this.metadata}` : ''\n }`;\n }\n}\n","// This code is adapted from ArrowJS https://github.com/apache/arrow\n// under Apache license http://www.apache.org/licenses/LICENSE-2.0\n\n/**\n * Main data type enumeration.\n *\n * Data types in this library are all *logical*. They can be expressed as\n * either a primitive physical type (bytes or bits of some fixed size), a\n * nested type consisting of other data types, or another data type (e.g. a\n * timestamp encoded as an int64).\n *\n * **Note**: Only enum values 0-17 (NONE through Map) are written to an Arrow\n * IPC payload.\n *\n * The rest of the values are specified here so TypeScript can narrow the type\n * signatures further beyond the base Arrow Types. The Arrow DataTypes include\n * metadata like `bitWidth` that impact the type signatures of the values we\n * accept and return.\n *\n * For example, the `Int8Vector` reads 1-byte numbers from an `Int8Array`, an\n * `Int32Vector` reads a 4-byte number from an `Int32Array`, and an `Int64Vector`\n * reads a pair of 4-byte lo, hi 32-bit integers as a zero-copy slice from the\n * underlying `Int32Array`.\n *\n * Library consumers benefit by knowing the narrowest type, since we can ensure\n * the types across all public methods are propagated, and never bail to `any`.\n * These values are _never_ used at runtime, and they will _never_ be written\n * to the flatbuffers metadata of serialized Arrow IPC payloads.\n */\nexport enum Type {\n /** The default placeholder type */\n NONE = 0,\n /** A NULL type having no physical storage */\n Null = 1,\n /** Signed or unsigned 8, 16, 32, or 64-bit little-endian integer */\n Int = 2,\n /** 2, 4, or 8-byte floating point value */\n Float = 3,\n /** Variable-length bytes (no guarantee of UTF8-ness) */\n Binary = 4,\n /** UTF8 variable-length string as List */\n Utf8 = 5,\n /** Boolean as 1 bit, LSB bit-packed ordering */\n Bool = 6,\n /** Precision-and-scale-based decimal type. Storage type depends on the parameters. */\n Decimal = 7,\n /** int32_t days or int64_t milliseconds since the UNIX epoch */\n Date = 8,\n /** Time as signed 32 or 64-bit integer, representing either seconds, milliseconds, microseconds, or nanoseconds since midnight since midnight */\n Time = 9,\n /** Exact timestamp encoded with int64 since UNIX epoch (Default unit millisecond) */\n Timestamp = 10,\n /** YEAR_MONTH or DAY_TIME interval in SQL style */\n Interval = 11,\n /** A list of some logical data type */\n List = 12,\n /** Struct of logical types */\n Struct = 13,\n /** Union of logical types */\n Union = 14,\n /** Fixed-size binary. Each value occupies the same number of bytes */\n FixedSizeBinary = 15,\n /** Fixed-size list. Each value occupies the same number of bytes */\n FixedSizeList = 16,\n /** Map of named logical types */\n Map = 17,\n\n /** Dictionary aka Category type */\n Dictionary = -1,\n Int8 = -2,\n Int16 = -3,\n Int32 = -4,\n Int64 = -5,\n Uint8 = -6,\n Uint16 = -7,\n Uint32 = -8,\n Uint64 = -9,\n Float16 = -10,\n Float32 = -11,\n Float64 = -12,\n DateDay = -13,\n DateMillisecond = -14,\n TimestampSecond = -15,\n TimestampMillisecond = -16,\n TimestampMicrosecond = -17,\n TimestampNanosecond = -18,\n TimeSecond = -19,\n TimeMillisecond = -20,\n TimeMicrosecond = -21,\n TimeNanosecond = -22,\n DenseUnion = -23,\n SparseUnion = -24,\n IntervalDayTime = -25,\n IntervalYearMonth = -26\n}\n","// This code is adapted from ArrowJS https://github.com/apache/arrow\n// under Apache license http://www.apache.org/licenses/LICENSE-2.0\n\nimport {Type} from './enum';\n\nimport Field from './field';\n\nexport {Type} from './enum';\n\nexport type TypedIntArray =\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Int32Array\n | Uint32Array\n | Uint8ClampedArray;\n\nexport type TypedFloatArray = Float32Array | Float64Array;\n\nexport type TypedArray = TypedIntArray | TypedFloatArray;\n\nexport type AnyArrayType = Array | TypedIntArray | TypedFloatArray;\n\nexport class DataType {\n static isNull(x: any): boolean {\n return x && x.typeId === Type.Null;\n }\n static isInt(x: any): boolean {\n return x && x.typeId === Type.Int;\n }\n static isFloat(x: any): boolean {\n return x && x.typeId === Type.Float;\n }\n static isBinary(x: any): boolean {\n return x && x.typeId === Type.Binary;\n }\n static isUtf8(x: any): boolean {\n return x && x.typeId === Type.Utf8;\n }\n static isBool(x: any): boolean {\n return x && x.typeId === Type.Bool;\n }\n static isDecimal(x: any): boolean {\n return x && x.typeId === Type.Decimal;\n }\n static isDate(x: any): boolean {\n return x && x.typeId === Type.Date;\n }\n static isTime(x: any): boolean {\n return x && x.typeId === Type.Time;\n }\n static isTimestamp(x: any): boolean {\n return x && x.typeId === Type.Timestamp;\n }\n static isInterval(x: any): boolean {\n return x && x.typeId === Type.Interval;\n }\n static isList(x: any): boolean {\n return x && x.typeId === Type.List;\n }\n static isStruct(x: any): boolean {\n return x && x.typeId === Type.Struct;\n }\n static isUnion(x: any): boolean {\n return x && x.typeId === Type.Union;\n }\n static isFixedSizeBinary(x: any): boolean {\n return x && x.typeId === Type.FixedSizeBinary;\n }\n static isFixedSizeList(x: any): boolean {\n return x && x.typeId === Type.FixedSizeList;\n }\n static isMap(x: any): boolean {\n return x && x.typeId === Type.Map;\n }\n static isDictionary(x: any): boolean {\n return x && x.typeId === Type.Dictionary;\n }\n\n get typeId(): Type {\n return Type.NONE;\n }\n\n // get ArrayType(): AnyArrayType {\n // return Int8Array;\n // }\n\n // get ArrayType() { return Array; }\n compareTo(other: DataType): boolean {\n // TODO\n return this === other; // comparer.visit(this, other);\n }\n}\n\n// NULL\n\nexport class Null extends DataType {\n get typeId(): Type {\n return Type.Null;\n }\n get [Symbol.toStringTag](): string {\n return 'Null';\n }\n toString(): string {\n return 'Null';\n }\n}\n\n// BOOLEANS\n\nexport class Bool extends DataType {\n get typeId(): Type {\n return Type.Bool;\n }\n // get ArrayType() {\n // return Uint8Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Bool';\n }\n toString(): string {\n return 'Bool';\n }\n}\n\n// INTS\n\nexport class Int extends DataType {\n readonly isSigned: boolean;\n readonly bitWidth: number;\n constructor(isSigned, bitWidth) {\n super();\n this.isSigned = isSigned;\n this.bitWidth = bitWidth;\n }\n get typeId(): Type {\n return Type.Int;\n }\n // get ArrayType() {\n // switch (this.bitWidth) {\n // case 8:\n // return this.isSigned ? Int8Array : Uint8Array;\n // case 16:\n // return this.isSigned ? Int16Array : Uint16Array;\n // case 32:\n // return this.isSigned ? Int32Array : Uint32Array;\n // case 64:\n // return this.isSigned ? Int32Array : Uint32Array;\n // default:\n // throw new Error(`Unrecognized ${this[Symbol.toStringTag]} type`);\n // }\n // }\n get [Symbol.toStringTag](): string {\n return 'Int';\n }\n toString(): string {\n return `${this.isSigned ? 'I' : 'Ui'}nt${this.bitWidth}`;\n }\n}\n\nexport class Int8 extends Int {\n constructor() {\n super(true, 8);\n }\n}\nexport class Int16 extends Int {\n constructor() {\n super(true, 16);\n }\n}\nexport class Int32 extends Int {\n constructor() {\n super(true, 32);\n }\n}\nexport class Int64 extends Int {\n constructor() {\n super(true, 64);\n }\n}\nexport class Uint8 extends Int {\n constructor() {\n super(false, 8);\n }\n}\nexport class Uint16 extends Int {\n constructor() {\n super(false, 16);\n }\n}\nexport class Uint32 extends Int {\n constructor() {\n super(false, 32);\n }\n}\nexport class Uint64 extends Int {\n constructor() {\n super(false, 64);\n }\n}\n\n// FLOATS\n\nconst Precision = {\n HALF: 16,\n SINGLE: 32,\n DOUBLE: 64\n};\n\nexport class Float extends DataType {\n readonly precision: number;\n constructor(precision) {\n super();\n this.precision = precision;\n }\n get typeId(): Type {\n return Type.Float;\n }\n // get ArrayType() {\n // switch (this.precision) {\n // case Precision.HALF:\n // return Uint16Array;\n // case Precision.SINGLE:\n // return Float32Array;\n // case Precision.DOUBLE:\n // return Float64Array;\n // default:\n // throw new Error(`Unrecognized ${this[Symbol.toStringTag]} type`);\n // }\n // }\n get [Symbol.toStringTag](): string {\n return 'Float';\n }\n toString(): string {\n return `Float${this.precision}`;\n }\n}\n\nexport class Float16 extends Float {\n constructor() {\n super(Precision.HALF);\n }\n}\nexport class Float32 extends Float {\n constructor() {\n super(Precision.SINGLE);\n }\n}\nexport class Float64 extends Float {\n constructor() {\n super(Precision.DOUBLE);\n }\n}\n\nexport class Binary extends DataType {\n constructor() {\n super();\n }\n get typeId() {\n return Type.Binary;\n }\n toString() {\n return 'Binary';\n }\n get [Symbol.toStringTag]() {\n return 'Binary';\n }\n}\n\n// STRINGS\n\nexport class Utf8 extends DataType {\n get typeId(): Type {\n return Type.Utf8;\n }\n // get ArrayType() {\n // return Uint8Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Utf8';\n }\n toString(): string {\n return 'Utf8';\n }\n}\n\n// DATES, TIMES AND INTERVALS\n\nconst DateUnit = {\n DAY: 0,\n MILLISECOND: 1\n};\n\nexport class Date extends DataType {\n readonly unit: number;\n constructor(unit) {\n super();\n this.unit = unit;\n }\n get typeId(): Type {\n return Type.Date;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Date';\n }\n toString(): string {\n return `Date${(this.unit + 1) * 32}<${DateUnit[this.unit]}>`;\n }\n}\n\nexport class DateDay extends Date {\n constructor() {\n super(DateUnit.DAY);\n }\n}\nexport class DateMillisecond extends Date {\n constructor() {\n super(DateUnit.MILLISECOND);\n }\n}\n\nconst TimeUnit = {\n SECOND: 1,\n MILLISECOND: 1e3,\n MICROSECOND: 1e6,\n NANOSECOND: 1e9\n};\n\nexport class Time extends DataType {\n readonly unit: any;\n readonly bitWidth: number;\n\n constructor(unit: any, bitWidth: number) {\n super();\n this.unit = unit;\n this.bitWidth = bitWidth;\n }\n get typeId(): Type {\n return Type.Time;\n }\n toString(): string {\n return `Time${this.bitWidth}<${TimeUnit[this.unit]}>`;\n }\n get [Symbol.toStringTag](): string {\n return 'Time';\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n}\n\nexport class TimeSecond extends Time {\n constructor() {\n super(TimeUnit.SECOND, 32);\n }\n}\nexport class TimeMillisecond extends Time {\n constructor() {\n super(TimeUnit.MILLISECOND, 32);\n }\n}\n// export class TimeMicrosecond extends Time { constructor() { super(TimeUnit.MICROSECOND, 64); } }\n// export class TimeNanosecond extends Time { constructor() { super(TimeUnit.NANOSECOND, 64); } }\n\nexport class Timestamp extends DataType {\n readonly unit: any;\n readonly timezone: any;\n\n constructor(unit: any, timezone = null) {\n super();\n this.unit = unit;\n this.timezone = timezone;\n }\n get typeId(): Type {\n return Type.Timestamp;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Timestamp';\n }\n toString(): string {\n return `Timestamp<${TimeUnit[this.unit]}${this.timezone ? `, ${this.timezone}` : ''}>`;\n }\n}\n\nexport class TimestampSecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.SECOND, timezone);\n }\n}\nexport class TimestampMillisecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MILLISECOND, timezone);\n }\n}\nexport class TimestampMicrosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MICROSECOND, timezone);\n }\n}\nexport class TimestampNanosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.NANOSECOND, timezone);\n }\n}\n\nconst IntervalUnit = {\n DAY_TIME: 0,\n YEAR_MONTH: 1\n};\n\nexport class Interval extends DataType {\n readonly unit: number;\n constructor(unit: number) {\n super();\n this.unit = unit;\n }\n get typeId(): Type {\n return Type.Interval;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Interval';\n }\n toString(): string {\n return `Interval<${IntervalUnit[this.unit]}>`;\n }\n}\n\nexport class IntervalDayTime extends Interval {\n constructor() {\n super(IntervalUnit.DAY_TIME);\n }\n}\nexport class IntervalYearMonth extends Interval {\n constructor() {\n super(IntervalUnit.YEAR_MONTH);\n }\n}\n\nexport class FixedSizeList extends DataType {\n readonly listSize: number;\n readonly children: Field[];\n\n constructor(listSize: number, child: Field) {\n super();\n this.listSize = listSize;\n this.children = [child];\n }\n get typeId(): Type {\n return Type.FixedSizeList;\n }\n get valueType() {\n return this.children[0].type;\n }\n get valueField() {\n return this.children[0];\n }\n // get ArrayType() {\n // return this.valueType.ArrayType;\n // }\n get [Symbol.toStringTag](): string {\n return 'FixedSizeList';\n }\n toString(): string {\n return `FixedSizeList[${this.listSize}]<${this.valueType}>`;\n }\n}\n\nexport class Struct extends DataType {\n public readonly children: Field[];\n\n constructor(children: Field[]) {\n super();\n this.children = children;\n }\n\n public get typeId() {\n return Type.Struct;\n }\n public toString() {\n return `Struct<{${this.children.map((f) => `${f.name}:${f.type}`).join(', ')}}>`;\n }\n get [Symbol.toStringTag](): string {\n return 'Struct';\n }\n}\n","import {MeshAttribute, MeshAttributes} from './mesh-types';\nimport {Schema, Field, FixedSizeList} from '../../lib/schema/schema';\nimport {getArrowTypeFromTypedArray} from '../../lib/arrow/arrow-like-type-utils';\n\n/**\n * Create a schema for mesh attributes data\n * @param attributes\n * @param metadata\n * @returns\n */\nexport function deduceMeshSchema(\n attributes: MeshAttributes,\n metadata?: Map\n): Schema {\n const fields = deduceMeshFields(attributes);\n return new Schema(fields, metadata);\n}\n\n/**\n * Create arrow-like schema field for mesh attribute\n * @param attributeName\n * @param attribute\n * @param optionalMetadata\n * @returns\n */\nexport function deduceMeshField(\n attributeName: string,\n attribute: MeshAttribute,\n optionalMetadata?: Map\n): Field {\n const type = getArrowTypeFromTypedArray(attribute.value);\n const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);\n const field = new Field(\n attributeName,\n new FixedSizeList(attribute.size, new Field('value', type)),\n false,\n metadata\n );\n return field;\n}\n\n/**\n * Create fields array for mesh attributes\n * @param attributes\n * @returns\n */\nfunction deduceMeshFields(attributes: MeshAttributes): Field[] {\n const fields: Field[] = [];\n for (const attributeName in attributes) {\n const attribute: MeshAttribute = attributes[attributeName];\n fields.push(deduceMeshField(attributeName, attribute));\n }\n return fields;\n}\n\n/**\n * Make metadata by mesh attribute properties\n * @param attribute\n * @returns\n */\nexport function makeMeshAttributeMetadata(attribute: MeshAttribute): Map {\n const result = new Map();\n if ('byteOffset' in attribute) {\n result.set('byteOffset', attribute.byteOffset!.toString(10));\n }\n if ('byteStride' in attribute) {\n result.set('byteStride', attribute.byteStride!.toString(10));\n }\n if ('normalized' in attribute) {\n result.set('normalized', attribute.normalized!.toString());\n }\n return result;\n}\n","import type {TypedArray} from '../../types';\nimport {\n DataType,\n Float32,\n Float64,\n Int16,\n Int32,\n Int8,\n Uint16,\n Uint32,\n Uint8\n} from '../schema/schema';\n\nexport function getArrowTypeFromTypedArray(array: TypedArray): DataType {\n switch (array.constructor) {\n case Int8Array:\n return new Int8();\n case Uint8Array:\n return new Uint8();\n case Int16Array:\n return new Int16();\n case Uint16Array:\n return new Uint16();\n case Int32Array:\n return new Int32();\n case Uint32Array:\n return new Uint32();\n case Float32Array:\n return new Float32();\n case Float64Array:\n return new Float64();\n default:\n throw new Error('array type not supported');\n }\n}\n","import {assert} from '../../utils/assert';\nimport Field from './field';\n\nexport type SchemaMetadata = Map;\n\n/**\n * ArrowJS `Schema` API-compatible class for row-based tables (returned from `DataTable`)\n * https://loaders.gl/arrowjs/docs/api-reference/schema\n */\nexport default class Schema {\n fields: Field[];\n // TODO - Arrow just allows Map\n metadata: SchemaMetadata;\n\n constructor(fields: Field[], metadata?: SchemaMetadata) {\n assert(Array.isArray(fields));\n checkNames(fields);\n // For kepler fields, create arrow compatible `Fields` that have kepler fields as `metadata`\n this.fields = fields;\n this.metadata = metadata || new Map();\n }\n\n // TODO - arrow only seems to compare fields, not metadata\n compareTo(other: Schema): boolean {\n if (this.metadata !== other.metadata) {\n return false;\n }\n if (this.fields.length !== other.fields.length) {\n return false;\n }\n for (let i = 0; i < this.fields.length; ++i) {\n if (!this.fields[i].compareTo(other.fields[i])) {\n return false;\n }\n }\n return true;\n }\n\n select(...columnNames: string[]): Schema {\n // Ensure column names reference valid fields\n const nameMap = Object.create(null);\n for (const name of columnNames) {\n nameMap[name] = true;\n }\n const selectedFields = this.fields.filter((field) => nameMap[field.name]);\n return new Schema(selectedFields, this.metadata);\n }\n\n selectAt(...columnIndices: number[]): Schema {\n // Ensure column indices reference valid fields\n const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);\n return new Schema(selectedFields, this.metadata);\n }\n\n assign(schemaOrFields: Schema | Field[]): Schema {\n let fields: Field[];\n let metadata: SchemaMetadata = this.metadata;\n\n if (schemaOrFields instanceof Schema) {\n const otherSchema = schemaOrFields;\n fields = otherSchema.fields;\n metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);\n } else {\n fields = schemaOrFields;\n }\n\n // Create a merged list of fields, overwrite fields in place, new fields at end\n const fieldMap: {[key: string]: Field} = Object.create(null);\n\n for (const field of this.fields) {\n fieldMap[field.name] = field;\n }\n\n for (const field of fields) {\n fieldMap[field.name] = field;\n }\n\n const mergedFields = Object.values(fieldMap);\n\n return new Schema(mergedFields, metadata);\n }\n}\n\n// Warn if any duplicated field names\nfunction checkNames(fields: Field[]): void {\n const usedNames: Record = {};\n for (const field of fields) {\n if (usedNames[field.name]) {\n // eslint-disable-next-line\n console.warn('Schema: duplicated field name', field.name, field);\n }\n usedNames[field.name] = true;\n }\n}\n\nfunction mergeMaps(m1: T, m2: T): T {\n // @ts-ignore\n return new Map([...(m1 || new Map()), ...(m2 || new Map())]);\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: boolean, message?: string) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n","import {deduceMeshField, MeshAttribute} from '@loaders.gl/schema';\nimport {Schema, Field} from '@loaders.gl/schema';\nimport type {DracoAttribute, DracoLoaderData, DracoMetadataEntry} from '../draco-types';\n\n/** Extract an arrow-like schema from a Draco mesh */\nexport function getDracoSchema(\n attributes: {[attributeName: string]: MeshAttribute},\n loaderData: DracoLoaderData,\n indices?: MeshAttribute\n): Schema {\n const metadataMap = makeMetadata(loaderData.metadata);\n const fields: Field[] = [];\n const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const field = getArrowFieldFromAttribute(\n attributeName,\n attribute,\n namedLoaderDataAttributes[attributeName]\n );\n fields.push(field);\n }\n if (indices) {\n const indicesField = getArrowFieldFromAttribute('indices', indices);\n fields.push(indicesField);\n }\n return new Schema(fields, metadataMap);\n}\n\nfunction transformAttributesLoaderData(loaderData: {[key: number]: DracoAttribute}): {\n [attributeName: string]: DracoAttribute;\n} {\n const result: {[attributeName: string]: DracoAttribute} = {};\n for (const key in loaderData) {\n const dracoAttribute = loaderData[key];\n result[dracoAttribute.name || 'undefined'] = dracoAttribute;\n }\n return result;\n}\n\nfunction getArrowFieldFromAttribute(\n attributeName: string,\n attribute: MeshAttribute,\n loaderData?: DracoAttribute\n): Field {\n const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : undefined;\n const field = deduceMeshField(attributeName, attribute, metadataMap);\n return field;\n}\n\nfunction makeMetadata(metadata: {[key: string]: DracoMetadataEntry}): Map {\n const metadataMap = new Map();\n for (const key in metadata) {\n metadataMap.set(`${key}.string`, JSON.stringify(metadata[key]));\n }\n return metadataMap;\n}\n","/* eslint-disable camelcase */\n\nimport type {TypedArray, MeshAttribute, MeshGeometry} from '@loaders.gl/schema';\n\n// Draco types (input)\nimport type {\n Draco3D,\n Decoder,\n Mesh,\n PointCloud,\n PointAttribute,\n Metadata,\n MetadataQuerier,\n DracoInt32Array,\n draco_DataType\n} from '../draco3d/draco3d-types';\n\n// Parsed data types (output)\nimport type {\n DracoMesh,\n DracoLoaderData,\n DracoAttribute,\n DracoMetadataEntry,\n DracoQuantizationTransform,\n DracoOctahedronTransform\n} from './draco-types';\n\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport {getDracoSchema} from './utils/get-draco-schema';\n\n/**\n * @param topology - How triangle indices should be generated (mesh only)\n * @param attributeNameEntry\n * @param extraAttributes\n * @param quantizedAttributes\n * @param octahedronAttributes\n */\nexport type DracoParseOptions = {\n topology?: 'triangle-list' | 'triangle-strip';\n attributeNameEntry?: string;\n extraAttributes?: {[uniqueId: string]: number};\n quantizedAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n octahedronAttributes?: ('POSITION' | 'NORMAL' | 'COLOR' | 'TEX_COORD' | 'GENERIC')[];\n};\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst GEOMETRY_TYPE = {\n TRIANGULAR_MESH: 0,\n POINT_CLOUD: 1\n};\n\n// Native Draco attribute names to GLTF attribute names.\nconst DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {\n POSITION: 'POSITION',\n NORMAL: 'NORMAL',\n COLOR: 'COLOR_0',\n TEX_COORD: 'TEXCOORD_0'\n};\n\nconst DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {\n 1: Int8Array,\n 2: Uint8Array,\n 3: Int16Array,\n 4: Uint16Array,\n 5: Int32Array,\n 6: Uint32Array,\n 9: Float32Array\n};\n\nconst INDEX_ITEM_SIZE = 4;\n\nexport default class DracoParser {\n draco: Draco3D;\n decoder: Decoder;\n metadataQuerier: MetadataQuerier;\n\n // draco - the draco decoder, either import `draco3d` or load dynamically\n constructor(draco: Draco3D) {\n this.draco = draco;\n this.decoder = new this.draco.Decoder();\n this.metadataQuerier = new this.draco.MetadataQuerier();\n }\n\n /**\n * Destroy draco resources\n */\n destroy(): void {\n this.draco.destroy(this.decoder);\n this.draco.destroy(this.metadataQuerier);\n }\n\n /**\n * NOTE: caller must call `destroyGeometry` on the return value after using it\n * @param arrayBuffer\n * @param options\n */\n parseSync(arrayBuffer: ArrayBuffer, options: DracoParseOptions = {}): DracoMesh {\n const buffer = new this.draco.DecoderBuffer();\n buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);\n\n this._disableAttributeTransforms(options);\n\n const geometry_type = this.decoder.GetEncodedGeometryType(buffer);\n const dracoGeometry =\n geometry_type === this.draco.TRIANGULAR_MESH\n ? new this.draco.Mesh()\n : new this.draco.PointCloud();\n\n try {\n let dracoStatus;\n switch (geometry_type) {\n case this.draco.TRIANGULAR_MESH:\n dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry as Mesh);\n break;\n\n case this.draco.POINT_CLOUD:\n dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);\n break;\n\n default:\n throw new Error('DRACO: Unknown geometry type.');\n }\n\n if (!dracoStatus.ok() || !dracoGeometry.ptr) {\n const message = `DRACO decompression failed: ${dracoStatus.error_msg()}`;\n // console.error(message);\n throw new Error(message);\n }\n\n const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);\n\n const geometry = this._getMeshData(dracoGeometry, loaderData, options);\n\n const boundingBox = getMeshBoundingBox(geometry.attributes);\n\n const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);\n\n const data: DracoMesh = {\n loader: 'draco',\n loaderData,\n header: {\n vertexCount: dracoGeometry.num_points(),\n boundingBox\n },\n ...geometry,\n schema\n };\n return data;\n } finally {\n this.draco.destroy(buffer);\n if (dracoGeometry) {\n this.draco.destroy(dracoGeometry);\n }\n }\n }\n\n // Draco specific \"loader data\"\n\n /**\n * Extract\n * @param dracoGeometry\n * @param geometry_type\n * @param options\n * @returns\n */\n _getDracoLoaderData(\n dracoGeometry: Mesh | PointCloud,\n geometry_type,\n options: DracoParseOptions\n ): DracoLoaderData {\n const metadata = this._getTopLevelMetadata(dracoGeometry);\n const attributes = this._getDracoAttributes(dracoGeometry, options);\n\n return {\n geometry_type,\n num_attributes: dracoGeometry.num_attributes(),\n num_points: dracoGeometry.num_points(),\n num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,\n metadata,\n attributes\n };\n }\n\n /**\n * Extract all draco provided information and metadata for each attribute\n * @param dracoGeometry\n * @param options\n * @returns\n */\n _getDracoAttributes(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: DracoAttribute} {\n const dracoAttributes: {[unique_id: number]: DracoAttribute} = {};\n\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n // Note: Draco docs do not seem clear on `GetAttribute` ids just being a zero-based index,\n // but it does seems to work this way\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n\n const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);\n\n dracoAttributes[dracoAttribute.unique_id()] = {\n unique_id: dracoAttribute.unique_id(),\n attribute_type: dracoAttribute.attribute_type(),\n data_type: dracoAttribute.data_type(),\n num_components: dracoAttribute.num_components(),\n\n byte_offset: dracoAttribute.byte_offset(),\n byte_stride: dracoAttribute.byte_stride(),\n normalized: dracoAttribute.normalized(),\n attribute_index: attributeId,\n\n metadata\n };\n\n // Add transformation parameters for any attributes app wants untransformed\n const quantization = this._getQuantizationTransform(dracoAttribute, options);\n if (quantization) {\n dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;\n }\n\n const octahedron = this._getOctahedronTransform(dracoAttribute, options);\n if (octahedron) {\n dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;\n }\n }\n\n return dracoAttributes;\n }\n\n /**\n * Get standard loaders.gl mesh category data\n * Extracts the geometry from draco\n * @param dracoGeometry\n * @param options\n */\n _getMeshData(\n dracoGeometry: Mesh | PointCloud,\n loaderData: DracoLoaderData,\n options: DracoParseOptions\n ): MeshGeometry {\n const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);\n\n const positionAttribute = attributes.POSITION;\n if (!positionAttribute) {\n throw new Error('DRACO: No position attribute found.');\n }\n\n // For meshes, we need indices to define the faces.\n if (dracoGeometry instanceof this.draco.Mesh) {\n switch (options.topology) {\n case 'triangle-strip':\n return {\n topology: 'triangle-strip',\n mode: 4, // GL.TRIANGLES\n attributes,\n indices: {\n value: this._getTriangleStripIndices(dracoGeometry),\n size: 1\n }\n };\n case 'triangle-list':\n default:\n return {\n topology: 'triangle-list',\n mode: 5, // GL.TRIANGLE_STRIP\n attributes,\n indices: {\n value: this._getTriangleListIndices(dracoGeometry),\n size: 1\n }\n };\n }\n }\n\n // PointCloud - must come last as Mesh inherits from PointCloud\n return {\n topology: 'point-list',\n mode: 0, // GL.POINTS\n attributes\n };\n }\n\n _getMeshAttributes(\n loaderData: DracoLoaderData,\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[attributeName: string]: MeshAttribute} {\n const attributes: {[key: string]: MeshAttribute} = {};\n\n for (const loaderAttribute of Object.values(loaderData.attributes)) {\n const attributeName = this._deduceAttributeName(loaderAttribute, options);\n loaderAttribute.name = attributeName;\n const {value, size} = this._getAttributeValues(dracoGeometry, loaderAttribute);\n attributes[attributeName] = {\n value,\n size,\n byteOffset: loaderAttribute.byte_offset,\n byteStride: loaderAttribute.byte_stride,\n normalized: loaderAttribute.normalized\n };\n }\n\n return attributes;\n }\n\n // MESH INDICES EXTRACTION\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleListIndices(dracoGeometry: Mesh) {\n // Example on how to retrieve mesh and attributes.\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * INDEX_ITEM_SIZE;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();\n } finally {\n this.draco._free(ptr);\n }\n }\n\n /**\n * For meshes, we need indices to define the faces.\n * @param dracoGeometry\n */\n _getTriangleStripIndices(dracoGeometry: Mesh) {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n /* const numStrips = */ this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);\n return getUint32Array(dracoArray);\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n /**\n *\n * @param dracoGeometry\n * @param dracoAttribute\n * @param attributeName\n */\n _getAttributeValues(\n dracoGeometry: Mesh | PointCloud,\n attribute: DracoAttribute\n ): {value: TypedArray; size: number} {\n const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];\n const numComponents = attribute.num_components;\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n\n const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(this.draco, TypedArrayCtor);\n\n let value: TypedArray;\n\n const ptr = this.draco._malloc(byteLength);\n try {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);\n this.decoder.GetAttributeDataArrayForAllPoints(\n dracoGeometry,\n dracoAttribute,\n dataType,\n byteLength,\n ptr\n );\n value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();\n } finally {\n this.draco._free(ptr);\n }\n\n return {value, size: numComponents};\n }\n\n // Attribute names\n\n /** \n * DRACO does not store attribute names - We need to deduce an attribute name\n * for each attribute\n _getAttributeNames(\n dracoGeometry: Mesh | PointCloud,\n options: DracoParseOptions\n ): {[unique_id: number]: string} {\n const attributeNames: {[unique_id: number]: string} = {};\n for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {\n const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);\n const attributeName = this._deduceAttributeName(dracoAttribute, options);\n attributeNames[attributeName] = attributeName;\n }\n return attributeNames;\n }\n */\n\n /**\n * Deduce an attribute name.\n * @note DRACO does not save attribute names, just general type (POSITION, COLOR)\n * to help optimize compression. We generate GLTF compatible names for the Draco-recognized\n * types\n * @param attributeData\n */\n _deduceAttributeName(attribute: DracoAttribute, options: DracoParseOptions): string {\n // Deduce name based on application provided map\n const uniqueId = attribute.unique_id;\n for (const [attributeName, attributeUniqueId] of Object.entries(\n options.extraAttributes || {}\n )) {\n if (attributeUniqueId === uniqueId) {\n return attributeName;\n }\n }\n\n // Deduce name based on attribute type\n const thisAttributeType = attribute.attribute_type;\n for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {\n const attributeType = this.draco[dracoAttributeConstant];\n if (attributeType === thisAttributeType) {\n // TODO - Return unique names if there multiple attributes per type\n // (e.g. multiple TEX_COORDS or COLORS)\n return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];\n }\n }\n\n // Look up in metadata\n // TODO - shouldn't this have priority?\n const entryName = options.attributeNameEntry || 'name';\n if (attribute.metadata[entryName]) {\n return attribute.metadata[entryName].string;\n }\n\n // Attribute of \"GENERIC\" type, we need to assign some name\n return `CUSTOM_ATTRIBUTE_${uniqueId}`;\n }\n\n // METADATA EXTRACTION\n\n /** Get top level metadata */\n _getTopLevelMetadata(dracoGeometry: Mesh | PointCloud) {\n const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /** Get per attribute metadata */\n _getAttributeMetadata(dracoGeometry: Mesh | PointCloud, attributeId: number) {\n const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);\n return this._getDracoMetadata(dracoMetadata);\n }\n\n /**\n * Extract metadata field values\n * @param dracoMetadata\n * @returns\n */\n _getDracoMetadata(dracoMetadata: Metadata): {[entry: string]: DracoMetadataEntry} {\n // The not so wonderful world of undocumented Draco APIs :(\n if (!dracoMetadata || !dracoMetadata.ptr) {\n return {};\n }\n const result = {};\n const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);\n for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {\n const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);\n result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);\n }\n return result;\n }\n\n /**\n * Extracts possible values for one metadata entry by name\n * @param dracoMetadata\n * @param entryName\n */\n _getDracoMetadataField(dracoMetadata: Metadata, entryName: string): DracoMetadataEntry {\n const dracoArray = new this.draco.DracoInt32Array();\n try {\n // Draco metadata fields can hold int32 arrays\n this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);\n const intArray = getInt32Array(dracoArray);\n return {\n int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),\n string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),\n double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),\n intArray\n };\n } finally {\n this.draco.destroy(dracoArray);\n }\n }\n\n // QUANTIZED ATTRIBUTE SUPPORT (NO DECOMPRESSION)\n\n /** Skip transforms for specific attribute types */\n _disableAttributeTransforms(options: DracoParseOptions) {\n const {quantizedAttributes = [], octahedronAttributes = []} = options;\n const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];\n for (const dracoAttributeName of skipAttributes) {\n this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);\n }\n }\n\n /**\n * Extract (and apply?) Position Transform\n * @todo not used\n */\n _getQuantizationTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoQuantizationTransform | null {\n const {quantizedAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);\n if (skip) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits(),\n range: transform.range(),\n min_values: new Float32Array([1, 2, 3]).map((i) => transform.min_value(i))\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n _getOctahedronTransform(\n dracoAttribute: PointAttribute,\n options: DracoParseOptions\n ): DracoOctahedronTransform | null {\n const {octahedronAttributes = []} = options;\n const attribute_type = dracoAttribute.attribute_type();\n const octahedron = octahedronAttributes\n .map((type) => this.decoder[type])\n .includes(attribute_type);\n if (octahedron) {\n const transform = new this.draco.AttributeQuantizationTransform();\n try {\n if (transform.InitFromAttribute(dracoAttribute)) {\n return {\n quantization_bits: transform.quantization_bits()\n };\n }\n } finally {\n this.draco.destroy(transform);\n }\n }\n return null;\n }\n\n // HELPERS\n}\n\n/**\n * Get draco specific data type by TypedArray constructor type\n * @param attributeType\n * @returns draco specific data type\n */\nfunction getDracoDataType(draco: Draco3D, attributeType: any): draco_DataType {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n case Int8Array:\n return draco.DT_INT8;\n case Int16Array:\n return draco.DT_INT16;\n case Int32Array:\n return draco.DT_INT32;\n case Uint8Array:\n return draco.DT_UINT8;\n case Uint16Array:\n return draco.DT_UINT16;\n case Uint32Array:\n return draco.DT_UINT32;\n default:\n return draco.DT_INVALID;\n }\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getInt32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n\n/**\n * Copy a Draco int32 array into a JS typed array\n */\nfunction getUint32Array(dracoArray: DracoInt32Array): Int32Array {\n const numValues = dracoArray.size();\n const intArray = new Int32Array(numValues);\n for (let i = 0; i < numValues; i++) {\n intArray[i] = dracoArray.GetValue(i);\n }\n return intArray;\n}\n","// Mesh category utilities\n// TODO - move to mesh category module, or to math.gl/geometry module\nimport {TypedArray} from '../../types';\nimport {MeshAttributes} from './mesh-types';\n\ntype TypedArrays = {[key: string]: TypedArray};\n\n/**\n * Holds an axis aligned bounding box\n * TODO - make sure AxisAlignedBoundingBox in math.gl/culling understands this format (or change this format)\n */\ntype BoundingBox = [[number, number, number], [number, number, number]];\n\n/**\n * Get number of vertices in mesh\n * @param attributes\n */\nexport function getMeshSize(attributes: TypedArrays): number {\n let size = 0;\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n if (ArrayBuffer.isView(attribute)) {\n // @ts-ignore DataView doesn't have BYTES_PER_ELEMENT\n size += attribute.byteLength * attribute.BYTES_PER_ELEMENT;\n }\n }\n return size;\n}\n\n/**\n * Get the (axis aligned) bounding box of a mesh\n * @param attributes\n * @returns array of two vectors representing the axis aligned bounding box\n */\n// eslint-disable-next-line complexity\nexport function getMeshBoundingBox(attributes: MeshAttributes): BoundingBox {\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n\n const positions = attributes.POSITION ? attributes.POSITION.value : [];\n const len = positions && positions.length;\n\n for (let i = 0; i < len; i += 3) {\n const x = positions[i];\n const y = positions[i + 1];\n const z = positions[i + 2];\n\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n minZ = z < minZ ? z : minZ;\n\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n maxZ = z > maxZ ? z : maxZ;\n }\n return [\n [minX, minY, minZ],\n [maxX, maxY, maxZ]\n ];\n}\n","// Dynamic DRACO module loading inspired by THREE.DRACOLoader\n// https://github.com/mrdoob/three.js/blob/398c4f39ebdb8b23eefd4a7a5ec49ec0c96c7462/examples/jsm/loaders/DRACOLoader.js\n// by Don McCurdy / https://www.donmccurdy.com / MIT license\n\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst DRACO_VERSION = '1.4.1';\nconst DRACO_JS_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.js`;\nconst DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_wasm_wrapper.js`;\nconst DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;\n\nconst DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;\n\nlet loadDecoderPromise;\nlet loadEncoderPromise;\n\nexport async function loadDracoDecoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadDecoderPromise =\n loadDecoderPromise ||\n modules.draco3d.createDecoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);\n }\n return await loadDecoderPromise;\n}\n\nexport async function loadDracoEncoderModule(options) {\n const modules = options.modules || {};\n\n // Check if a bundled draco3d library has been supplied by application\n if (modules.draco3d) {\n loadEncoderPromise =\n loadEncoderPromise ||\n modules.draco3d.createEncoderModule({}).then((draco) => {\n return {draco};\n });\n } else {\n // If not, dynamically load the WASM script from our CDN\n loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);\n }\n return await loadEncoderPromise;\n}\n\n// DRACO DECODER LOADING\n\nasync function loadDracoDecoder(options) {\n let DracoDecoderModule;\n let wasmBinary;\n switch (options.draco && options.draco.decoderType) {\n case 'js':\n DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, 'draco', options);\n break;\n\n case 'wasm':\n default:\n [DracoDecoderModule, wasmBinary] = await Promise.all([\n await loadLibrary(DRACO_WASM_WRAPPER_URL, 'draco', options),\n await loadLibrary(DRACO_WASM_DECODER_URL, 'draco', options)\n ]);\n }\n // Depends on how import happened...\n // @ts-ignore\n DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;\n return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);\n}\n\nfunction initializeDracoDecoder(DracoDecoderModule, wasmBinary) {\n const options: {wasmBinary?: any} = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n DracoDecoderModule({\n ...options,\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n\n// ENCODER\n\nasync function loadDracoEncoder(options) {\n let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, 'draco', options);\n // @ts-ignore\n DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;\n\n return new Promise((resolve) => {\n DracoEncoderModule({\n onModuleLoaded: (draco) => resolve({draco}) // Module is Promise-like. Wrap in object to avoid loop.\n });\n });\n}\n","import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {DracoMesh, DracoLoaderData} from './lib/draco-types';\nimport type {DracoLoaderOptions} from './draco-loader';\nimport {DracoLoader as DracoWorkerLoader} from './draco-loader';\nimport DracoParser from './lib/draco-parser';\nimport {loadDracoDecoderModule} from './lib/draco-module-loader';\nimport {VERSION} from './lib/utils/version';\nimport {isBrowser} from '@loaders.gl/worker-utils';\n\n// Draco data types\n\nexport type {DracoMesh, DracoLoaderData};\n\n// Draco Writer\n\nexport type {DracoWriterOptions} from './draco-writer';\nexport {DracoWriter} from './draco-writer';\n\n/**\n * Browser worker doesn't work because of issue during \"draco_encoder.js\" loading.\n * Refused to execute script from 'https://raw.githubusercontent.com/google/draco/1.4.1/javascript/draco_encoder.js' because its MIME type ('') is not executable.\n */\nexport const DracoWriterWorker = {\n id: isBrowser ? 'draco-writer' : 'draco-writer-nodejs',\n name: 'Draco compressed geometry writer',\n module: 'draco',\n version: VERSION,\n worker: true,\n options: {\n draco: {},\n source: null\n }\n};\n\n// Draco Loader\n\nexport type {DracoLoaderOptions};\nexport {DracoWorkerLoader};\n\n/**\n * Loader for Draco3D compressed geometries\n */\nexport const DracoLoader = {\n ...DracoWorkerLoader,\n parse\n};\n\nasync function parse(arrayBuffer: ArrayBuffer, options?: DracoLoaderOptions): Promise {\n const {draco} = await loadDracoDecoderModule(options);\n const dracoParser = new DracoParser(draco);\n try {\n return dracoParser.parseSync(arrayBuffer, options?.draco);\n } finally {\n dracoParser.destroy();\n }\n}\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckDracoLoader: LoaderWithParser = DracoLoader;\n","// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';\n\n// @ts-nocheck\nimport {loadLibrary} from '@loaders.gl/worker-utils';\n\nconst BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.wasm`;\nconst BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.js`;\n\nlet loadBasisTranscoderPromise;\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTrascoderModule(options) {\n const modules = options.modules || {};\n if (modules.basis) {\n return modules.basis;\n }\n\n loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTrascoder(options);\n return await loadBasisTranscoderPromise;\n}\n\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTrascoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary('basis_transcoder.js', 'textures', options),\n await loadLibrary('basis_transcoder.wasm', 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTrascoderModule(BASIS, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTrascoderModule(BasisModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const {BasisFile, initializeBasis} = module;\n initializeBasis();\n resolve({BasisFile});\n });\n });\n}\n\nlet loadBasisEncoderPromise;\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_CDN_ENCODER_JS, 'textures', options),\n await loadLibrary(BASIS_CDN_ENCODER_WASM, 'textures', options)\n ]);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options: {wasmBinary?} = {};\n\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const {BasisFile, KTX2File, initializeBasis, BasisEncoder} = module;\n initializeBasis();\n resolve({BasisFile, KTX2File, BasisEncoder});\n });\n });\n}\n","/* eslint-disable camelcase */\nexport const GL_EXTENSIONS_CONSTANTS = {\n // WEBGL_compressed_texture_s3tc\n\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n\n // WEBGL_compressed_texture_es3\n\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n\n // WEBGL_compressed_texture_pvrtc\n\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n\n // WEBGL_compressed_texture_etc1\n\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n\n // WEBGL_compressed_texture_atc\n\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c93,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n\n // WEBGL_compressed_texture_astc\n\n COMPRESSED_RGBA_ASTC_4X4_KHR: 0x93b0,\n COMPRESSED_RGBA_ASTC_5X4_KHR: 0x93b1,\n COMPRESSED_RGBA_ASTC_5X5_KHR: 0x93b2,\n COMPRESSED_RGBA_ASTC_6X5_KHR: 0x93b3,\n COMPRESSED_RGBA_ASTC_6X6_KHR: 0x93b4,\n COMPRESSED_RGBA_ASTC_8X5_KHR: 0x93b5,\n COMPRESSED_RGBA_ASTC_8X6_KHR: 0x93b6,\n COMPRESSED_RGBA_ASTC_8X8_KHR: 0x93b7,\n COMPRESSED_RGBA_ASTC_10X5_KHR: 0x93b8,\n COMPRESSED_RGBA_ASTC_10X6_KHR: 0x93b9,\n COMPRESSED_RGBA_ASTC_10X8_KHR: 0x93ba,\n COMPRESSED_RGBA_ASTC_10X10_KHR: 0x93bb,\n COMPRESSED_RGBA_ASTC_12X10_KHR: 0x93bc,\n COMPRESSED_RGBA_ASTC_12X12_KHR: 0x93bd,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 0x93d0,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 0x93d1,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 0x93d2,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 0x93d3,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 0x93d4,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 0x93d5,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 0x93d6,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 0x93d7,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 0x93d8,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 0x93d9,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 0x93da,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 0x93db,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 0x93dc,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 0x93dd,\n\n // EXT_texture_compression_rgtc\n\n COMPRESSED_RED_RGTC1_EXT: 0x8dbb,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8dbc,\n COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8dbd,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8dbe,\n\n // WEBGL_compressed_texture_s3tc_srgb\n\n COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8c4c,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8c4d,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8c4e,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8c4f\n};\n","import type {GPUTextureFormat} from '@loaders.gl/schema';\n\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\n\nconst WEBGL_EXTENSIONS: {[key: string]: GPUTextureFormat} = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\n\nlet formats: Set | null = null;\n\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl?: WebGLRenderingContext): Set {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n\n formats = new Set();\n\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n\n return formats;\n}\n\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n } catch (error) {\n return null;\n }\n}\n","///////////////////////////////////////////////////\n// Common.\n///////////////////////////////////////////////////\n\n// Injected at compile time, from $npm_package_version.\ndeclare const PACKAGE_VERSION: string;\n\nexport const KTX_WRITER = `KTX-Parse v${PACKAGE_VERSION}`;\n\nexport const NUL = new Uint8Array([0x00]);\n\n\n///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\n\nexport const KTX2_ID = [\n\t// '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n\t0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n];\n\nexport const HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8\n\nexport enum KTX2SupercompressionScheme {\n\tNONE = 0,\n\tBASISLZ = 1,\n\tZSTD = 2,\n\tZLIB = 3,\n};\n\n\n///////////////////////////////////////////////////\n// Data Format Descriptor (DFD).\n///////////////////////////////////////////////////\n\nexport enum KTX2DataFormatType {\n BASICFORMAT = 0x00,\n};\n\nexport const KHR_DF_VENDORID_KHRONOS = 0;\n\nexport const KHR_DF_VERSION = 2;\n\nexport const KHR_DF_BLOCKSIZE = 40;\n\nexport const VK_FORMAT_UNDEFINED = 0;\n\nexport enum KTX2DataFormatModel {\n UNSPECIFIED = 0,\n\tETC1S = 163,\n\tUASTC = 166,\n};\n\nexport enum KTX2DataFormatPrimaries {\n UNSPECIFIED = 0,\n SRGB = 1,\n};\n\nexport enum KTX2DataFormatTransfer {\n UNSPECIFIED = 0,\n LINEAR = 1,\n SRGB = 2,\n ITU = 3,\n NTSC = 4,\n SLOG = 5,\n SLOG2 = 6,\n};\n\nexport enum KTX2DataFormatFlags {\n ALPHA_STRAIGHT = 0,\n ALPHA_PREMULTIPLIED = 1,\n};\n\nexport enum KTX2DataFormatChannelETC1S {\n RGB = 0,\n RRR = 3,\n GGG = 4,\n AAA = 15,\n};\n\nexport enum KTX2DataFormatChannelUASTC {\n RGB = 0,\n RGBA = 3,\n RRR = 4,\n RRRG = 5,\n};\n","import type {TextureLevel} from '@loaders.gl/schema';\nimport {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer): TextureLevel[] {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n","/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n","import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport parseBasis from './lib/parsers/parse-basis';\n\n/**\n * Worker loader for Basis super compressed textures\n */\nexport const BasisWorkerLoader = {\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto', // gl context doesn't exist on a worker thread\n libraryPath: 'libs/',\n containerFormat: 'auto', // 'basis' || 'ktx2' || 'auto'\n module: 'transcoder' // 'transcoder' || 'encoder'\n }\n }\n};\n\n/**\n * Loader for Basis super compressed textures\n */\nexport const BasisLoader = {\n ...BasisWorkerLoader,\n parse: parseBasis\n};\n\n// TYPE TESTS - TODO find a better way than exporting junk\nexport const _TypecheckBasisWorkerLoader: Loader = BasisWorkerLoader;\nexport const _TypecheckBasisLoader: LoaderWithParser = BasisLoader;\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// TODO: use 'latest' instead of 'beta' when 3.0.0 version is released as 'latest'\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","export function getFirstCharacters(data, length = 5): string {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nexport function getMagicString(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n length: number\n): string {\n if (arrayBuffer.byteLength <= byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n","import {getFirstCharacters} from '../binary-utils/get-first-characters';\n\n/**\n * Minimal JSON parser that throws more meaningful error messages\n */\nexport function parseJSON(string: string): any {\n try {\n return JSON.parse(string);\n } catch (_) {\n throw new Error(`Failed to parse JSON from data starting with \"${getFirstCharacters(string)}\"`);\n }\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(message || 'assert failed: gltf');\n }\n}\n","// Resolves a relative url against a baseUrl\n// If url is absolute, return it unchanged\nexport function resolveUrl(url, options) {\n // TODO: Use better logic to handle all protocols plus not delay on data\n const absolute = url.startsWith('data:') || url.startsWith('http:') || url.startsWith('https:');\n if (absolute) {\n return url;\n }\n const baseUrl = options.baseUri || options.uri;\n if (!baseUrl) {\n throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);\n }\n return baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1) + url;\n}\n","// TODO - GLTFScenegraph should use these\nimport {assert} from '../utils/assert';\n\n// accepts buffer view index or buffer view object\n// returns a `Uint8Array`\nexport function getTypedArrayForBufferView(json, buffers, bufferViewIndex) {\n const bufferView = json.bufferViews[bufferViewIndex];\n assert(bufferView);\n\n // Get hold of the arrayBuffer\n const bufferIndex = bufferView.buffer;\n const binChunk = buffers[bufferIndex];\n assert(binChunk);\n\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n}\n\n// accepts accessor index or accessor object\n// returns a `Uint8Array`\nexport function getTypedArrayForImageData(json, buffers, imageIndex) {\n const image = json.images[imageIndex];\n const bufferViewIndex = json.bufferViews[image.bufferView];\n return getTypedArrayForBufferView(json, buffers, bufferViewIndex);\n}\n\n/*\n// accepts accessor index or accessor object\n// returns a typed array with type that matches the types\nexport function getTypedArrayForAccessor(accessor) {\n accessor = this.getAccessor(accessor);\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n}\n*/\n","import {assert} from '../env-utils/assert';\n\n/**\n * Calculate new size of an arrayBuffer to be aligned to an n-byte boundary\n * This function increases `byteLength` by the minimum delta,\n * allowing the total length to be divided by `padding`\n * @param byteLength\n * @param padding\n */\nexport function padToNBytes(byteLength: number, padding: number): number {\n assert(byteLength >= 0); // `Incorrect 'byteLength' value: ${byteLength}`\n assert(padding > 0); // `Incorrect 'padding' value: ${padding}`\n return (byteLength + (padding - 1)) & ~(padding - 1);\n}\n\n/**\n * Creates a new Uint8Array based on two different ArrayBuffers\n * @param targetBuffer The first buffer.\n * @param sourceBuffer The second buffer.\n * @return The new ArrayBuffer created out of the two.\n */\nexport function copyArrayBuffer(\n targetBuffer: ArrayBuffer,\n sourceBuffer: ArrayBuffer,\n byteOffset: number,\n byteLength: number = sourceBuffer.byteLength\n): ArrayBuffer {\n const targetArray = new Uint8Array(targetBuffer, byteOffset, byteLength);\n const sourceArray = new Uint8Array(sourceBuffer);\n targetArray.set(sourceArray);\n return targetBuffer;\n}\n\n/**\n * Copy from source to target at the targetOffset\n *\n * @param source - The data to copy\n * @param target - The destination to copy data into\n * @param targetOffset - The start offset into target to place the copied data\n * @returns the new offset taking into account proper padding\n */\nexport function copyToArray(source: ArrayBuffer | any, target: any, targetOffset: number): number {\n let sourceArray;\n\n if (source instanceof ArrayBuffer) {\n sourceArray = new Uint8Array(source);\n } else {\n // Pack buffer onto the big target array\n //\n // 'source.data.buffer' could be a view onto a larger buffer.\n // We MUST use this constructor to ensure the byteOffset and byteLength is\n // set to correct values from 'source.data' and not the underlying\n // buffer for target.set() to work properly.\n const srcByteOffset = source.byteOffset;\n const srcByteLength = source.byteLength;\n // In gltf parser it is set as \"arrayBuffer\" instead of \"buffer\"\n // https://github.com/visgl/loaders.gl/blob/1e3a82a0a65d7b6a67b1e60633453e5edda2960a/modules/gltf/src/lib/parse-gltf.js#L85\n sourceArray = new Uint8Array(source.buffer || source.arrayBuffer, srcByteOffset, srcByteLength);\n }\n\n // Pack buffer onto the big target array\n target.set(sourceArray, targetOffset);\n\n return targetOffset + padToNBytes(sourceArray.byteLength, 4);\n}\n","import {assert} from '../utils/assert';\n\nconst TYPES = ['SCALAR', 'VEC2', 'VEC3', 'VEC4'];\n\ntype TypedArrayConstructor =\n | Int8ArrayConstructor\n | Uint8ArrayConstructor\n | Int16ArrayConstructor\n | Uint16ArrayConstructor\n | Int32ArrayConstructor\n | Uint32ArrayConstructor\n | Int32ArrayConstructor\n | Uint32ArrayConstructor\n | Float32ArrayConstructor\n | Float64ArrayConstructor;\n\nconst ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT: [TypedArrayConstructor, number][] = [\n [Int8Array, 5120],\n [Uint8Array, 5121],\n [Int16Array, 5122],\n [Uint16Array, 5123],\n [Uint32Array, 5125],\n [Float32Array, 5126],\n [Float64Array, 5130]\n];\nconst ARRAY_TO_COMPONENT_TYPE = new Map(\n ARRAY_CONSTRUCTOR_TO_WEBGL_CONSTANT\n);\n\nconst ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE = {\n 5120: 1,\n 5121: 1,\n 5122: 2,\n 5123: 2,\n 5125: 4,\n 5126: 4\n};\n\nconst ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\n\nexport function getAccessorTypeFromSize(size) {\n const type = TYPES[size - 1];\n return type || TYPES[0];\n}\n\nexport function getComponentTypeFromArray(typedArray) {\n const componentType = ARRAY_TO_COMPONENT_TYPE.get(typedArray.constructor);\n if (!componentType) {\n throw new Error('Illegal typed array');\n }\n return componentType;\n}\n\nexport function getAccessorArrayTypeAndLength(accessor, bufferView) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const bytesPerComponent = ATTRIBUTE_COMPONENT_TYPE_TO_BYTE_SIZE[accessor.componentType];\n const length = accessor.count * components;\n const byteLength = accessor.count * components * bytesPerComponent;\n assert(byteLength >= 0 && byteLength <= bufferView.byteLength);\n return {ArrayType, length, byteLength};\n}\n","import type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-types';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype GLTFWithBuffers = {\n json: GLTF;\n buffers: any[];\n binary?: ArrayBuffer;\n};\n\nconst DEFAULT_GLTF_JSON: GLTF = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\n\ntype Extension = {[key: string]: any};\n/**\n * Class for structured access to GLTF data\n */\nexport default class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // @ts-ignore\n this.gltf = gltf || {\n json: {...DEFAULT_GLTF_JSON},\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getObjectExtension(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n this.json.extras[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: object, extensionName: string, data: object): void {\n // @ts-ignore\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: object, extensionName: string): object {\n // @ts-ignore\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n","// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2021, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\n\n/* eslint-disable camelcase */\nconst isWebAssemblySupported = typeof WebAssembly !== 'object';\n\n// Built with clang version 11.0.0 (https://github.com/llvm/llvm-project.git 0160ad802e899c2922bc9b29564080c22eb0908c)\n// Built from meshoptimizer 0.16\nconst wasm_base =\n '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';\nconst wasm_simd =\n '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';\n\n// Uses bulk-memory and simd extensions\nconst detector = new Uint8Array([\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2,\n 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11\n]);\n\n// Used to unpack wasm\nconst wasmpack = new Uint8Array([\n 32, 0, 65, 253, 3, 1, 2, 34, 4, 106, 6, 5, 11, 8, 7, 20, 13, 33, 12, 16, 128, 9, 116, 64, 19, 113,\n 127, 15, 10, 21, 22, 14, 255, 66, 24, 54, 136, 107, 18, 23, 192, 26, 114, 118, 132, 17, 77, 101,\n 130, 144, 27, 87, 131, 44, 45, 74, 156, 154, 70, 167\n]);\n\nconst FILTERS = {\n // legacy index-based enums for glTF\n 0: '',\n 1: 'meshopt_decodeFilterOct',\n 2: 'meshopt_decodeFilterQuat',\n 3: 'meshopt_decodeFilterExp',\n // string-based enums for glTF\n NONE: '',\n OCTAHEDRAL: 'meshopt_decodeFilterOct',\n QUATERNION: 'meshopt_decodeFilterQuat',\n EXPONENTIAL: 'meshopt_decodeFilterExp'\n};\n\nconst DECODERS = {\n // legacy index-based enums for glTF\n 0: 'meshopt_decodeVertexBuffer',\n 1: 'meshopt_decodeIndexBuffer',\n 2: 'meshopt_decodeIndexSequence',\n // string-based enums for glTF\n ATTRIBUTES: 'meshopt_decodeVertexBuffer',\n TRIANGLES: 'meshopt_decodeIndexBuffer',\n INDICES: 'meshopt_decodeIndexSequence'\n};\n\nexport function isMeshoptSupported(): boolean {\n return isWebAssemblySupported;\n}\n\nexport async function meshoptDecodeVertexBuffer(\n target: Uint8Array,\n count: number,\n size: number,\n source: Uint8Array,\n filter: string | number = 'NONE'\n): Promise {\n const instance = await loadWasmInstance();\n decode(\n instance,\n instance.exports.meshopt_decodeVertexBuffer,\n target,\n count,\n size,\n source,\n instance.exports[FILTERS[filter]]\n );\n}\n\nexport async function meshoptDecodeIndexBuffer(\n target: Uint8Array,\n count: number,\n size: number,\n source: Uint8Array\n): Promise {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n}\n\nexport async function meshoptDecodeIndexSequence(\n target: Uint8Array,\n count: number,\n size: number,\n source: Uint8Array\n): Promise {\n const instance = await loadWasmInstance();\n decode(instance, instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n}\n\n// eslint-disable-next-line max-params\nexport async function meshoptDecodeGltfBuffer(\n target: Uint8Array,\n count: number,\n size: number,\n source: Uint8Array,\n mode: string,\n filter: string | number = 'NONE'\n): Promise {\n const instance = await loadWasmInstance();\n decode(\n instance,\n instance.exports[DECODERS[mode]],\n target,\n count,\n size,\n source,\n instance.exports[FILTERS[filter || 'NONE']]\n );\n}\n\nlet wasmPromise: Promise;\n\nasync function loadWasmInstance(): Promise {\n // eslint-disable-next-line\n if (!wasmPromise) {\n wasmPromise = loadWasmModule();\n }\n return wasmPromise;\n}\n\nasync function loadWasmModule(): Promise {\n let wasm = wasm_base;\n if (WebAssembly.validate(detector)) {\n wasm = wasm_simd;\n\n // eslint-disable-next-line no-console\n console.log('Warning: meshopt_decoder is using experimental SIMD support');\n }\n\n const result = await WebAssembly.instantiate(unpack(wasm), {});\n await (result.instance.exports as any).__wasm_call_ctors();\n return result.instance;\n}\n\nfunction unpack(data) {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; ++i) {\n const ch = data.charCodeAt(i);\n result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;\n }\n let write = 0;\n for (let i = 0; i < data.length; ++i) {\n result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n }\n return result.buffer.slice(0, write);\n}\n\n// eslint-disable-next-line max-params\nfunction decode(instance, fun, target, count, size, source, filter?) {\n const sbrk = instance.exports.sbrk;\n const count4 = (count + 3) & ~3; // pad for SIMD filter\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res === 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res !== 0) {\n throw new Error(`Malformed buffer data: ${res}`);\n }\n}\n","/* eslint-disable camelcase */\nimport type {GLTF, GLTFBufferView, GLTF_EXT_meshopt_compression} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\nimport {meshoptDecodeGltfBuffer} from '../../meshopt/meshopt-decoder';\n\n// @ts-ignore\n// eslint-disable-next-line\nconst DEFAULT_MESHOPT_OPTIONS = {\n byteOffset: 0,\n filter: 'NONE'\n};\n\n/** Extension name */\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\n\nexport const name = EXT_MESHOPT_COMPRESSION;\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions) {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const promises: Promise[] = [];\n for (const bufferViewIndex of gltfData.json.bufferViews || []) {\n promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);\n}\n\n/** Decode one meshopt buffer view */\nasync function decodeMeshoptBufferView(\n scenegraph: GLTFScenegraph,\n bufferView: GLTFBufferView\n): Promise {\n const meshoptExtension = scenegraph.getObjectExtension(\n bufferView,\n EXT_MESHOPT_COMPRESSION\n );\n if (meshoptExtension) {\n const {\n byteOffset = 0,\n byteLength = 0,\n byteStride,\n count,\n mode,\n filter = 'NONE',\n buffer: bufferIndex\n } = meshoptExtension;\n const buffer = scenegraph.gltf.buffers[bufferIndex];\n\n const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);\n const result = new Uint8Array(\n scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer,\n bufferView.byteOffset,\n bufferView.byteLength\n );\n await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);\n return result;\n }\n\n return null;\n}\n","import {isBrowser} from '@loaders.gl/loader-utils';\n\n// The following formats are supported by loaders.gl polyfills\nconst NODE_FORMAT_SUPPORT = ['image/png', 'image/jpeg', 'image/gif'];\n\n/** Cache values for speed */\nconst mimeTypeSupported: {[mimeType: string]: boolean} = {};\n\n/**\n * Check if image MIME type is supported. Result is cached.\n */\nexport function _isImageFormatSupported(mimeType: string): boolean {\n if (mimeTypeSupported[mimeType] === undefined) {\n mimeTypeSupported[mimeType] = checkFormatSupport(mimeType);\n }\n return mimeTypeSupported[mimeType];\n}\n\n/**\n * Check if image MIME type is supported.\n */\nfunction checkFormatSupport(mimeType: string): boolean {\n switch (mimeType) {\n case 'image/webp':\n return checkWebPSupport();\n case 'image/svg':\n return isBrowser;\n default:\n if (!isBrowser) {\n // @ts-ignore\n const {_parseImageNode} = globalThis;\n return Boolean(_parseImageNode) && NODE_FORMAT_SUPPORT.includes(mimeType);\n }\n return true;\n }\n}\n\n/** Check WebPSupport synchronously */\nfunction checkWebPSupport() {\n if (!isBrowser) {\n return false;\n }\n try {\n const element = document.createElement('canvas');\n return element.toDataURL('image/webp').indexOf('data:image/webp') === 0;\n } catch {\n // Probably Safari...\n return false;\n }\n}\n\n// Note: better test but asynchronous\n\n// Lossy test image. Support for lossy images doesn't guarantee support for all WebP images.\n// https://stackoverflow.com/questions/5573096/detecting-webp-support\n// const WEBP_TEST_IMAGE = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n// Check WebPSupport asynchronously\n// async function isWebPSupported() {\n// return new Promise( resolve => {\n// const image = new Image();\n// image.src = WEBP_TEST_IMAGE;\n// image.onload = image.onerror = function () {\n// resolve( image.height === 1 );\n// }\n// }\n","// GLTF EXTENSION: EXT_TEXTURE_WEBP\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_TEXTURE_WEBP\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_EXT_texture_webp} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {_isImageFormatSupported} from '@loaders.gl/images';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst EXT_TEXTURE_WEBP = 'EXT_texture_webp';\n\n/** Extension name */\nexport const name = EXT_TEXTURE_WEBP;\n\n/**\n * Replaces a texture source reference with the extension texture\n * Done in preprocess() to prevent load of default image\n */\nexport function preprocess(gltfData: {json: GLTF}, options: GLTFLoaderOptions): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!_isImageFormatSupported('image/webp')) {\n if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {\n throw new Error(`gltf: Required extension ${EXT_TEXTURE_WEBP} not supported by browser`);\n }\n return;\n }\n\n const {json} = scenegraph;\n\n for (const texture of json.textures || []) {\n const extension = scenegraph.getObjectExtension(\n texture,\n EXT_TEXTURE_WEBP\n );\n if (extension) {\n texture.source = extension.source;\n }\n scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);\n }\n\n // Remove the top-level extension\n scenegraph.removeExtension(EXT_TEXTURE_WEBP);\n}\n","// GLTF EXTENSION: KHR_texture_basisu\n// https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_basisu\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_KHR_texture_basisu} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst KHR_TEXTURE_BASISU = 'KHR_texture_basisu';\n\n/** Extension name */\nexport const name = KHR_TEXTURE_BASISU;\n\n/**\n * Replaces a texture source reference with the extension texture\n * Done in preprocess() to prevent load of default image\n */\nexport function preprocess(gltfData: {json: GLTF}, options: GLTFLoaderOptions): void {\n const scene = new GLTFScenegraph(gltfData);\n const {json} = scene;\n\n for (const texture of json.textures || []) {\n const extension = scene.getObjectExtension(\n texture,\n KHR_TEXTURE_BASISU\n );\n if (extension) {\n texture.source = extension.source;\n }\n scene.removeObjectExtension(texture, KHR_TEXTURE_BASISU);\n }\n\n // Remove the top-level extension\n scene.removeExtension(KHR_TEXTURE_BASISU);\n}\n","// import type {TypedArray} from '../types/loader-utils';\nimport type {GLTFAccessor} from '../types/gltf-types';\n// TODO - remove\nimport {getAccessorTypeFromSize, getComponentTypeFromArray} from './gltf-utils';\n\n// Returns a fresh attributes object with glTF-standardized attributes names\n// Attributes that cannot be identified will not be included\n// Removes `indices` if present, as it should be stored separately from the attributes\nexport function getGLTFAccessors(attributes): {[key: string]: GLTFAccessor} {\n const accessors = {};\n for (const name in attributes) {\n const attribute = attributes[name];\n if (name !== 'indices') {\n const glTFAccessor = getGLTFAccessor(attribute);\n accessors[name] = glTFAccessor;\n }\n }\n return accessors;\n}\n\n// Fix up a single accessor.\n// Input: typed array or a partial accessor object\n// Return: accessor object\nexport function getGLTFAccessor(attribute) {\n const {buffer, size, count} = getAccessorData(attribute);\n\n const glTFAccessor: GLTFAccessor = {\n // glTF Accessor values\n // TODO: Instead of a bufferView index we could have an actual buffer (typed array)\n // bufferView: null,\n // TODO: Deprecate `value` in favor of bufferView?\n // @ts-ignore\n value: buffer,\n size, // Decoded `type` (e.g. SCALAR)\n\n byteOffset: 0,\n count,\n type: getAccessorTypeFromSize(size),\n componentType: getComponentTypeFromArray(buffer)\n };\n\n return glTFAccessor;\n}\n\n// export function getGLTFAttribute(data, gltfAttributeName): GLTFAccessor {\n// return data.attributes[data.glTFAttributeMap[gltfAttributeName]];\n// }\n\nfunction getAccessorData(attribute) {\n let buffer = attribute;\n let size = 1;\n let count = 0;\n\n if (attribute && attribute.value) {\n buffer = attribute.value;\n size = attribute.size || 1;\n }\n\n if (buffer) {\n if (!ArrayBuffer.isView(buffer)) {\n buffer = toTypedArray(buffer, Float32Array);\n }\n count = buffer.length / size;\n }\n\n return {buffer, size, count};\n}\n\n// Convert non-typed arrays to arrays of specified format\nfunction toTypedArray(array, ArrayType, convertTypedArrays = false) {\n if (!array) {\n return null;\n }\n if (Array.isArray(array)) {\n return new ArrayType(array);\n }\n if (convertTypedArrays && !(array instanceof ArrayType)) {\n return new ArrayType(array);\n }\n return array;\n}\n","// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {default as Scenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new Scenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new Scenegraph(gltfData);\n const promises: Promise[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new Scenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: Scenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise {\n const dracoExtension = scenegraph.getObjectExtension(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n // delete primitive.extensions[KHR_DRACO_MESH_COMPRESSION];\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n","// GLTF EXTENSION: KHR_lights_punctual\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport {assert} from '../../utils/assert';\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\n\nexport const name = KHR_LIGHTS_PUNCTUAL;\n\nexport async function decode(gltfData: {json: GLTF}): Promise {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Move the light array out of the extension and remove the extension\n const extension = gltfScenegraph.getExtension(KHR_LIGHTS_PUNCTUAL);\n if (extension) {\n // @ts-ignore\n gltfScenegraph.json.lights = extension.lights;\n gltfScenegraph.removeExtension(KHR_LIGHTS_PUNCTUAL);\n }\n\n // Any nodes that have the extension, add lights field pointing to light object\n // and remove the extension\n for (const node of json.nodes || []) {\n const nodeExtension = gltfScenegraph.getObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n if (nodeExtension) {\n // @ts-ignore\n node.light = nodeExtension.light;\n }\n gltfScenegraph.removeObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n }\n}\n\n// Move the light ar ray out of the extension and remove the extension\nexport async function encode(gltfData): Promise {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // @ts-ignore\n if (json.lights) {\n const extension = gltfScenegraph.addExtension(KHR_LIGHTS_PUNCTUAL);\n // @ts-ignore\n assert(!extension.lights);\n // @ts-ignore\n extension.lights = json.lights;\n // @ts-ignore\n delete json.lights;\n }\n\n // Any nodes that have lights field pointing to light object\n // add the extension\n // @ts-ignore\n if (gltfScenegraph.json.lights) {\n // @ts-ignore\n for (const light of gltfScenegraph.json.lights) {\n const node = light.node;\n gltfScenegraph.addObjectExtension(node, KHR_LIGHTS_PUNCTUAL, light);\n }\n // @ts-ignore\n delete gltfScenegraph.json.lights;\n }\n}\n","// GLTF EXTENSION: KHR_materials_unlit\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\n\nexport const name = KHR_MATERIALS_UNLIT;\n\nexport async function decode(gltfData: {json: GLTF}): Promise {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Remove the top-level extension\n gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);\n\n // Any nodes that have the extension, add lights field pointing to light object\n // and remove the extension\n for (const material of json.materials || []) {\n const extension = material.extensions && material.extensions.KHR_materials_unlit;\n if (extension) {\n // @ts-ignore TODO\n material.unlit = true;\n }\n gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);\n }\n}\n\nexport function encode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Any nodes that have lights field pointing to light object\n // add the extension\n // @ts-ignore\n if (gltfScenegraph.materials) {\n for (const material of json.materials || []) {\n // @ts-ignore\n if (material.unlit) {\n // @ts-ignore\n delete material.unlit;\n gltfScenegraph.addObjectExtension(material, KHR_MATERIALS_UNLIT, {});\n gltfScenegraph.addExtension(KHR_MATERIALS_UNLIT);\n }\n }\n }\n}\n","// GLTF EXTENSION: KHR_techniques_webgl\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_techniques_webgl\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';\n\nexport const name = KHR_TECHNIQUES_WEBGL;\n\nexport async function decode(gltfData: {json: GLTF}): Promise {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);\n if (extension) {\n const techniques = resolveTechniques(extension, gltfScenegraph);\n\n for (const material of json.materials || []) {\n const materialExtension = gltfScenegraph.getObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n if (materialExtension) {\n // @ts-ignore TODO\n material.technique = Object.assign(\n {},\n materialExtension,\n // @ts-ignore\n techniques[materialExtension.technique]\n );\n // @ts-ignore TODO\n material.technique.values = resolveValues(material.technique, gltfScenegraph);\n }\n gltfScenegraph.removeObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n }\n\n gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);\n }\n}\n// eslint-disable-next-line\nexport async function encode(gltfData, options): Promise {\n // TODO\n}\n\nfunction resolveTechniques(\n techniquesExtension: {[key: string]: any},\n // programs: {[key: string]: any}[],\n // shaders: {[key: string]: any}[],\n // techniques: {[key: string]: any}[]\n gltfScenegraph\n) {\n const {programs = [], shaders = [], techniques = []} = techniquesExtension;\n const textDecoder = new TextDecoder();\n\n shaders.forEach((shader) => {\n if (Number.isFinite(shader.bufferView)) {\n shader.code = textDecoder.decode(\n gltfScenegraph.getTypedArrayForBufferView(shader.bufferView)\n );\n } else {\n // TODO: handle URI shader\n throw new Error('KHR_techniques_webgl: no shader code');\n }\n });\n\n programs.forEach((program) => {\n program.fragmentShader = shaders[program.fragmentShader];\n program.vertexShader = shaders[program.vertexShader];\n });\n\n techniques.forEach((technique) => {\n technique.program = programs[technique.program];\n });\n\n return techniques;\n}\n\nfunction resolveValues(technique, gltfScenegraph) {\n const values = Object.assign({}, technique.values);\n\n // merge values from uniforms\n Object.keys(technique.uniforms || {}).forEach((uniform) => {\n if (technique.uniforms[uniform].value && !(uniform in values)) {\n values[uniform] = technique.uniforms[uniform].value;\n }\n });\n\n // resolve textures\n Object.keys(values).forEach((uniform) => {\n if (typeof values[uniform] === 'object' && values[uniform].index !== undefined) {\n // Assume this is a texture\n // TODO: find if there are any other types that can be referenced\n values[uniform].texture = gltfScenegraph.getTexture(values[uniform].index);\n }\n });\n\n return values;\n}\n","/* eslint-disable camelcase */\nimport {GLTF} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\n// GLTF 1.0 extensions (decode only)\n// import * as KHR_binary_gltf from './KHR_draco_mesh_compression';\n\n// GLTF 2.0 Khronos extensions (decode/encode)\nimport * as EXT_meshopt_compression from '../extensions/EXT_meshopt_compression';\nimport * as EXT_texture_webp from '../extensions/EXT_texture_webp';\nimport * as KHR_texture_basisu from '../extensions/KHR_texture_basisu';\nimport * as KHR_draco_mesh_compression from '../extensions/KHR_draco_mesh_compression';\n\n// Deprecated. These should be handled by rendering library (e.g. luma.gl), not the loader.\nimport * as KHR_lights_punctual from '../extensions/deprecated/KHR_lights_punctual';\nimport * as KHR_materials_unlit from '../extensions/deprecated/KHR_materials_unlit';\nimport * as KHR_techniques_webgl from '../extensions/deprecated/KHR_techniques_webgl';\n\n// Vendor extensions\n\ntype GLTFExtensionPlugin = {\n name: string;\n preprocess?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => void;\n decode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions, context) => Promise;\n encode?: (gltfData: {json: GLTF}, options: GLTFLoaderOptions) => void;\n};\n\n/**\n * List of extensions processed by the GLTFLoader\n * Note that may extensions can only be handled on the rendering stage and are left out here\n * These are just extensions that can be handled fully or partially during loading.\n */\nexport const EXTENSIONS: GLTFExtensionPlugin[] = [\n // 1.0\n // KHR_binary_gltf is handled separately - must be processed before other parsing starts\n // KHR_binary_gltf,\n\n // 2.0\n EXT_meshopt_compression,\n EXT_texture_webp,\n // Basisu should come after webp, we want basisu to be preferred if both are provided\n KHR_texture_basisu,\n KHR_draco_mesh_compression,\n KHR_lights_punctual,\n KHR_materials_unlit,\n KHR_techniques_webgl\n];\n\n/** Call before any resource loading starts */\nexport function preprocessExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n extension.preprocess?.(gltf, options, context);\n }\n}\n\n/** Call after resource loading */\nexport async function decodeExtensions(gltf, options: GLTFLoaderOptions = {}, context?) {\n const extensions = EXTENSIONS.filter((extension) => useExtension(extension.name, options));\n for (const extension of extensions) {\n // Note: We decode async extensions sequentially, this might not be necessary\n // Currently we only have Draco, but when we add Basis we may revisit\n await extension.decode?.(gltf, options, context);\n }\n}\n\nfunction useExtension(extensionName: string, options: GLTFLoaderOptions) {\n const excludes = options?.gltf?.excludeExtensions || {};\n const exclude = extensionName in excludes && !excludes[extensionName];\n return !exclude;\n}\n","// GLTF 1.0 EXTENSION: KHR_binary_glTF\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/1.0/Khronos/KHR_binary_glTF\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_KHR_binary_glTF} from '../types/gltf-types';\n\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst KHR_BINARY_GLTF = 'KHR_binary_glTF';\n\n/** Extension name */\nexport const name = KHR_BINARY_GLTF;\n\nexport function preprocess(gltfData: {json: GLTF}): void {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Note: json.buffers.binary_glTF also needs to be replaced\n // This is currently done during gltf normalization\n\n // Image and shader nodes can have the extension\n // https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/schema/image.KHR_binary_glTF.schema.json\n for (const image of json.images || []) {\n const extension = gltfScenegraph.getObjectExtension(\n image,\n KHR_BINARY_GLTF\n );\n // The data in the extension is valid as glTF 2.0 data inside the object, so just copy it in\n if (extension) {\n Object.assign(image, extension);\n }\n gltfScenegraph.removeObjectExtension(image, KHR_BINARY_GLTF);\n }\n\n // TODO shaders - At least traverse and throw error if used?\n // https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/schema/shader.KHR_binary_glTF.schema.json\n\n // glTF v1 one files have a partially formed URI field that is not expected in (and causes problems in) 2.0\n if (json.buffers && json.buffers[0]) {\n delete json.buffers[0].uri;\n }\n\n // Remove the top-level extension as it has now been removed from all nodes\n gltfScenegraph.removeExtension(KHR_BINARY_GLTF);\n}\n\n// KHR_binary_gltf is a 1.0 extension that is supported natively by 2.0\n// export function encode() {\n// throw new Error(KHR_BINARY_GLTF);\n// }\n","/* eslint-disable camelcase */\nimport * as KHR_binary_glTF from '../extensions/KHR_binary_gltf';\n\n// Binary format changes (mainly implemented by GLBLoader)\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/1.0/Khronos/KHR_binary_glTF\n\n// JSON format changes:\n// https://github.com/khronosgroup/gltf/issues/605\n\n// - [x] Top-level JSON objects are arrays now\n// - [ ] Removed indirection from animation: sampler now refers directly to accessors, #712\n// - [ ] material.parameter.value and technique.parameter.value must be an array, #690\n// - [ ] Node can have only one mesh #821\n// - [ ] Added reqs on JSON encoding\n// - [ ] Added reqs on binary data alignment #802 (comment)\n\n// Additions:\n// - [ ] Added accessor.normalized, #691, #706\n// - [ ] Added glExtensionsUsed property and 5125 (UNSIGNED_INT) accessor.componentType value, #619\n// - [ ] Added extensionsRequired property, #720, #721\n// - [ ] Added \"STEP\" as valid animation.sampler.interpolation value, #712\n\n// Removals:\n// - [x] Removed buffer.type, #786, #629\n// - [ ] Removed revision number from profile.version, #709\n// - [ ] Removed technique.functions.scissor and removed 3089 (SCISSOR_TEST) as a valid value for technique.states.enable, #681\n// - [ ] Techniques, programs, and shaders were moved out to KHR_technique_webgl extension.\n\n// Other edits:\n// - [x] asset is now required, #642\n// - [ ] buffer.byteLength and bufferView.byteLength are now required, #560.\n// - [ ] accessor.min and accessor.max are now required, #593, and clarified that the JSON value and binary data must be the same, #628.\n// - [ ] Clarified animation.sampler and animation.channel restrictions, #712\n// - [ ] skin.inverseBindMatrices is now optional, #461.\n// - [ ] Attribute parameters can't have a value defined in the technique or parameter, #563 (comment).\n// - [ ] Only TEXCOORD and COLOR attribute semantics can be written in the form [semantic]_[set_index], #563 (comment).\n// - [ ] TEXCOORD and COLOR attribute semantics must be written in the form [semantic]_[set_index], e.g., just TEXCOORD should be TEXCOORD_0, and just COLOR should be COLOR_0, #649\n// - [ ] camera.perspective.aspectRatio and camera.perspective.yfov must now be > 0, not >= 0, #563 (comment).\n// - [ ] Application-specific parameter semantics must start with an underscore, e.g., _TEMPERATURE and _SIMULATION_TIME, #563 (comment).\n// - [ ] Properties in technique.parameters must be defined in technique.uniforms or technique.attributes,\n\n// #563 (comment).\n// - [ ] technique.parameter.count can only be defined when the semantic is JOINTMATRIX or an application-specific semantic is used. It can never be defined for attribute parameters; only uniforms, d2f6945\n// - [ ] technique.parameter.semantic is required when the parameter is an attribute, 28e113d\n// - [ ] Mesh-only models are allowed, e.g., without materials, #642\n// - [ ] Skeleton hierarchies (nodes containing jointName) must be separated from non-skeleton hierarchies., #647\n// - [ ] technique.states.functions.blendColor and technique.states.functions.depthRange parameters now must match WebGL function min/max, #707\n\nconst GLTF_ARRAYS = {\n accessors: 'accessor',\n animations: 'animation',\n buffers: 'buffer',\n bufferViews: 'bufferView',\n images: 'image',\n materials: 'material',\n meshes: 'mesh',\n nodes: 'node',\n samplers: 'sampler',\n scenes: 'scene',\n skins: 'skin',\n textures: 'texture'\n};\n\nconst GLTF_KEYS = {\n accessor: 'accessors',\n animations: 'animation',\n buffer: 'buffers',\n bufferView: 'bufferViews',\n image: 'images',\n material: 'materials',\n mesh: 'meshes',\n node: 'nodes',\n sampler: 'samplers',\n scene: 'scenes',\n skin: 'skins',\n texture: 'textures'\n};\n\n/**\n * Converts (normalizes) glTF v1 to v2\n */\nclass GLTFV1Normalizer {\n idToIndexMap = {\n animations: {},\n accessors: {},\n buffers: {},\n bufferViews: {},\n images: {},\n materials: {},\n meshes: {},\n nodes: {},\n samplers: {},\n scenes: {},\n skins: {},\n textures: {}\n };\n\n json;\n\n // constructor() {}\n\n /**\n * Convert (normalize) glTF < 2.0 to glTF 2.0\n * @param gltf - object with json and binChunks\n * @param options\n * @param options normalize Whether to actually normalize\n */\n normalize(gltf, options) {\n this.json = gltf.json;\n const json = gltf.json;\n\n // Check version\n switch (json.asset && json.asset.version) {\n // We are converting to v2 format. Return if there is nothing to do\n case '2.0':\n return;\n\n // This class is written to convert 1.0\n case undefined:\n case '1.0':\n break;\n\n default:\n // eslint-disable-next-line no-undef, no-console\n console.warn(`glTF: Unknown version ${json.asset.version}`);\n return;\n }\n\n if (!options.normalize) {\n // We are still missing a few conversion tricks, remove once addressed\n throw new Error('glTF v1 is not supported.');\n }\n\n // eslint-disable-next-line no-undef, no-console\n console.warn('Converting glTF v1 to glTF v2 format. This is experimental and may fail.');\n\n this._addAsset(json);\n\n // In glTF2 top-level fields are Arrays not Object maps\n this._convertTopLevelObjectsToArrays(json);\n\n // Extract bufferView indices for images\n // (this extension needs to be invoked early in the normalization process)\n // TODO can this be handled by standard extension processing instead of called explicitly?\n KHR_binary_glTF.preprocess(gltf);\n\n // Convert object references from ids to indices\n this._convertObjectIdsToArrayIndices(json);\n\n this._updateObjects(json);\n\n this._updateMaterial(json);\n }\n\n // asset is now required, #642 https://github.com/KhronosGroup/glTF/issues/639\n _addAsset(json) {\n json.asset = json.asset || {};\n // We are normalizing to glTF v2, so change version to \"2.0\"\n json.asset.version = '2.0';\n json.asset.generator = json.asset.generator || 'Normalized to glTF 2.0 by loaders.gl';\n }\n\n _convertTopLevelObjectsToArrays(json) {\n // TODO check that all arrays are covered\n for (const arrayName in GLTF_ARRAYS) {\n this._convertTopLevelObjectToArray(json, arrayName);\n }\n }\n\n /** Convert one top level object to array */\n _convertTopLevelObjectToArray(json, mapName) {\n const objectMap = json[mapName];\n if (!objectMap || Array.isArray(objectMap)) {\n return;\n }\n\n // Rewrite the top-level field as an array\n json[mapName] = [];\n // Copy the map key into object.id\n for (const id in objectMap) {\n const object = objectMap[id];\n object.id = object.id || id; // Mutates the loaded object\n const index = json[mapName].length;\n json[mapName].push(object);\n this.idToIndexMap[mapName][id] = index;\n }\n }\n\n /** Go through all objects in all top-level arrays and replace ids with indices */\n _convertObjectIdsToArrayIndices(json) {\n for (const arrayName in GLTF_ARRAYS) {\n this._convertIdsToIndices(json, arrayName);\n }\n if ('scene' in json) {\n json.scene = this._convertIdToIndex(json.scene, 'scene');\n }\n\n // Convert any index references that are not using array names\n\n // texture.source (image)\n for (const texture of json.textures) {\n this._convertTextureIds(texture);\n }\n for (const mesh of json.meshes) {\n this._convertMeshIds(mesh);\n }\n for (const node of json.nodes) {\n this._convertNodeIds(node);\n }\n for (const node of json.scenes) {\n this._convertSceneIds(node);\n }\n }\n\n _convertTextureIds(texture) {\n if (texture.source) {\n texture.source = this._convertIdToIndex(texture.source, 'image');\n }\n }\n\n _convertMeshIds(mesh) {\n for (const primitive of mesh.primitives) {\n const {attributes, indices, material} = primitive;\n for (const attributeName in attributes) {\n attributes[attributeName] = this._convertIdToIndex(attributes[attributeName], 'accessor');\n }\n if (indices) {\n primitive.indices = this._convertIdToIndex(indices, 'accessor');\n }\n if (material) {\n primitive.material = this._convertIdToIndex(material, 'material');\n }\n }\n }\n\n _convertNodeIds(node) {\n if (node.children) {\n node.children = node.children.map((child) => this._convertIdToIndex(child, 'node'));\n }\n if (node.meshes) {\n node.meshes = node.meshes.map((mesh) => this._convertIdToIndex(mesh, 'mesh'));\n }\n }\n\n _convertSceneIds(scene) {\n if (scene.nodes) {\n scene.nodes = scene.nodes.map((node) => this._convertIdToIndex(node, 'node'));\n }\n }\n\n /** Go through all objects in a top-level array and replace ids with indices */\n _convertIdsToIndices(json, topLevelArrayName) {\n if (!json[topLevelArrayName]) {\n console.warn(`gltf v1: json doesn't contain attribute ${topLevelArrayName}`); // eslint-disable-line no-console, no-undef\n json[topLevelArrayName] = [];\n }\n for (const object of json[topLevelArrayName]) {\n for (const key in object) {\n const id = object[key];\n const index = this._convertIdToIndex(id, key);\n object[key] = index;\n }\n }\n }\n\n _convertIdToIndex(id, key) {\n const arrayName = GLTF_KEYS[key];\n if (arrayName in this.idToIndexMap) {\n const index = this.idToIndexMap[arrayName][id];\n if (!Number.isFinite(index)) {\n throw new Error(`gltf v1: failed to resolve ${key} with id ${id}`);\n }\n return index;\n }\n return id;\n }\n\n /**\n *\n * @param {*} json\n */\n _updateObjects(json) {\n for (const buffer of this.json.buffers) {\n // - [x] Removed buffer.type, #786, #629\n delete buffer.type;\n }\n }\n\n /**\n * Update material (set pbrMetallicRoughness)\n * @param {*} json\n */\n _updateMaterial(json) {\n for (const material of json.materials) {\n material.pbrMetallicRoughness = {\n baseColorFactor: [1, 1, 1, 1],\n metallicFactor: 1,\n roughnessFactor: 1\n };\n\n const textureId =\n material.values?.tex || material.values?.texture2d_0 || material.values?.diffuseTex;\n const textureIndex = json.textures.findIndex((texture) => texture.id === textureId);\n if (textureIndex !== -1) {\n material.pbrMetallicRoughness.baseColorTexture = {index: textureIndex};\n }\n }\n }\n}\n\nexport function normalizeGLTFV1(gltf, options = {}) {\n return new GLTFV1Normalizer().normalize(gltf, options);\n}\n","import {assert} from '../utils/assert';\nimport {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';\nimport {BufferView} from '../types/gltf-json-schema';\nimport {BufferView as BufferViewPostprocessed} from '../types/gltf-postprocessed-schema';\n\n// This is a post processor for loaded glTF files\n// The goal is to make the loaded data easier to use in WebGL applications\n//\n// Functions:\n// * Resolve indexed arrays structure of glTF into a linked tree.\n// * Translate stringified enum keys and values into WebGL constants.\n// * Load images (optional)\n\n// ENUM LOOKUP\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\nconst GL_SAMPLER = {\n // Sampler parameters\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n\n // Sampler default values\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\n\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\n\n// When undefined, a sampler with repeat wrapping and auto filtering should be used.\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\nconst DEFAULT_SAMPLER = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT\n};\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n baseUri: string = '';\n json: Record = {};\n buffers: [] = [];\n images: [] = [];\n\n postProcess(gltf, options = {}) {\n const {json, buffers = [], images = [], baseUri = ''} = gltf;\n assert(json);\n\n this.baseUri = baseUri;\n this.json = json;\n this.buffers = buffers;\n this.images = images;\n\n this._resolveTree(this.json, options);\n\n return this.json;\n }\n\n // Convert indexed glTF structure into tree structure\n // cross-link index resolution, enum lookup, convenience calculations\n // eslint-disable-next-line complexity\n _resolveTree(json, options = {}) {\n if (json.bufferViews) {\n json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n if (json.images) {\n json.images = json.images.map((image, i) => this._resolveImage(image, i));\n }\n if (json.samplers) {\n json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n if (json.textures) {\n json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n if (json.accessors) {\n json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n if (json.materials) {\n json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n if (json.meshes) {\n json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n if (json.nodes) {\n json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));\n }\n if (json.skins) {\n json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n if (json.scenes) {\n json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n if (json.scene !== undefined) {\n json.scene = json.scenes[this.json.scene];\n }\n }\n\n getScene(index) {\n return this._get('scenes', index);\n }\n\n getNode(index) {\n return this._get('nodes', index);\n }\n\n getSkin(index) {\n return this._get('skins', index);\n }\n\n getMesh(index) {\n return this._get('meshes', index);\n }\n\n getMaterial(index) {\n return this._get('materials', index);\n }\n\n getAccessor(index) {\n return this._get('accessors', index);\n }\n\n getCamera(index) {\n return null; // TODO: fix this\n }\n\n getTexture(index) {\n return this._get('textures', index);\n }\n\n getSampler(index) {\n return this._get('samplers', index);\n }\n\n getImage(index) {\n return this._get('images', index);\n }\n\n getBufferView(index) {\n return this._get('bufferViews', index);\n }\n\n getBuffer(index) {\n return this._get('buffers', index);\n }\n\n _get(array, index) {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n // PARSING HELPERS\n\n _resolveScene(scene, index) {\n // scene = {...scene};\n scene.id = scene.id || `scene-${index}`;\n scene.nodes = (scene.nodes || []).map((node) => this.getNode(node));\n return scene;\n }\n\n _resolveNode(node, index) {\n // node = {...node};\n node.id = node.id || `node-${index}`;\n if (node.children) {\n node.children = node.children.map((child) => this.getNode(child));\n }\n if (node.mesh !== undefined) {\n node.mesh = this.getMesh(node.mesh);\n } else if (node.meshes !== undefined && node.meshes.length) {\n node.mesh = node.meshes.reduce(\n (accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n },\n {primitives: []}\n );\n }\n if (node.camera !== undefined) {\n node.camera = this.getCamera(node.camera);\n }\n if (node.skin !== undefined) {\n node.skin = this.getSkin(node.skin);\n }\n return node;\n }\n\n _resolveSkin(skin, index) {\n // skin = {...skin};\n skin.id = skin.id || `skin-${index}`;\n skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);\n return skin;\n }\n\n _resolveMesh(mesh, index) {\n // mesh = {...mesh};\n mesh.id = mesh.id || `mesh-${index}`;\n if (mesh.primitives) {\n mesh.primitives = mesh.primitives.map((primitive) => {\n primitive = {...primitive};\n const attributes = primitive.attributes;\n primitive.attributes = {};\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n if (primitive.indices !== undefined) {\n primitive.indices = this.getAccessor(primitive.indices);\n }\n if (primitive.material !== undefined) {\n primitive.material = this.getMaterial(primitive.material);\n }\n return primitive;\n });\n }\n return mesh;\n }\n\n _resolveMaterial(material, index) {\n // material = {...material};\n material.id = material.id || `material-${index}`;\n if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture};\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n if (material.occlusionTexture) {\n material.occlustionTexture = {...material.occlustionTexture};\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n if (material.emissiveTexture) {\n material.emmisiveTexture = {...material.emmisiveTexture};\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = {...material.pbrMetallicRoughness};\n const mr = material.pbrMetallicRoughness;\n if (mr.baseColorTexture) {\n mr.baseColorTexture = {...mr.baseColorTexture};\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = {...mr.metallicRoughnessTexture};\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n return material;\n }\n\n _resolveAccessor(accessor, index) {\n // accessor = {...accessor};\n accessor.id = accessor.id || `accessor-${index}`;\n if (accessor.bufferView !== undefined) {\n // Draco encoded meshes don't have bufferView\n accessor.bufferView = this.getBufferView(accessor.bufferView);\n }\n\n // Look up enums\n accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);\n accessor.components = getSizeFromAccessorType(accessor.type);\n accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;\n\n // Create TypedArray for the accessor\n // Note: The canonical way to instantiate is to ignore this array and create\n // WebGLBuffer's using the bufferViews.\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {ArrayType, byteLength} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset =\n (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n if (accessor.bufferView.byteStride) {\n cutBuffer = this._getValueFromInterleavedBuffer(\n buffer,\n byteOffset,\n accessor.bufferView.byteStride,\n accessor.bytesPerElement,\n accessor.count\n );\n }\n accessor.value = new ArrayType(cutBuffer);\n }\n\n return accessor;\n }\n\n /**\n * Take values of particular accessor from interleaved buffer\n * various parts of the buffer\n * @param buffer\n * @param byteOffset\n * @param byteStride\n * @param bytesPerElement\n * @param count\n * @returns\n */\n _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {\n const result = new Uint8Array(count * bytesPerElement);\n for (let i = 0; i < count; i++) {\n const elementOffset = byteOffset + i * byteStride;\n result.set(\n new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)),\n i * bytesPerElement\n );\n }\n return result.buffer;\n }\n\n _resolveTexture(texture, index) {\n // texture = {...texture};\n texture.id = texture.id || `texture-${index}`;\n texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;\n texture.source = this.getImage(texture.source);\n return texture;\n }\n\n _resolveSampler(sampler, index) {\n // sampler = {...sampler};\n sampler.id = sampler.id || `sampler-${index}`;\n // Map textual parameters to GL parameter values\n sampler.parameters = {};\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n return sampler;\n }\n\n _enumSamplerParameter(key) {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(image, index) {\n // image = {...image};\n image.id = image.id || `image-${index}`;\n if (image.bufferView !== undefined) {\n image.bufferView = this.getBufferView(image.bufferView);\n }\n\n // Check if image has been preloaded by the GLTFLoader\n // If so, link it into the JSON and drop the URI\n const preloadedImage = this.images[index];\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(bufferView: BufferView, index: number): BufferViewPostprocessed {\n // bufferView = {...bufferView};\n const bufferIndex = bufferView.buffer;\n const result: BufferViewPostprocessed = {\n id: `bufferView-${index}`,\n ...bufferView,\n buffer: this.buffers[bufferIndex]\n };\n\n // @ts-expect-error\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n // @ts-expect-error\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n\n if ('byteOffset' in bufferView) {\n byteOffset += bufferView.byteOffset;\n }\n\n result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n return result;\n }\n\n _resolveCamera(camera, index) {\n camera.id = camera.id || `camera-${index}`;\n // TODO - create 4x4 matrices\n if (camera.perspective) {\n // camera.matrix = createPerspectiveMatrix(camera.perspective);\n }\n if (camera.orthographic) {\n // camera.matrix = createOrthographicMatrix(camera.orthographic);\n }\n return camera;\n }\n}\n\nexport function postProcessGLTF(gltf, options?) {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n","/* eslint-disable camelcase, max-statements */\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/1.0/Khronos/KHR_binary_glTF\nimport type {GLB} from '../types/glb-types';\nimport {padToNBytes, assert} from '@loaders.gl/loader-utils';\n\nexport type GLBParseOptions = {\n magic?: number;\n strict?: boolean;\n};\n\nconst MAGIC_glTF = 0x676c5446; // glTF in Big-Endian ASCII\n\nconst GLB_FILE_HEADER_SIZE = 12;\nconst GLB_CHUNK_HEADER_SIZE = 8;\n\nconst GLB_CHUNK_TYPE_JSON = 0x4e4f534a;\nconst GLB_CHUNK_TYPE_BIN = 0x004e4942;\nconst GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED = 0; // DEPRECATED - Backward compatibility for old xviz files\nconst GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED = 1; // DEPRECATED - Backward compatibility for old xviz files\n\nconst GLB_V1_CONTENT_FORMAT_JSON = 0x0;\n\nconst LE = true; // Binary GLTF is little endian.\n\nfunction getMagicString(dataView, byteOffset = 0) {\n return `\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 0))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 1))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 2))}\\\n${String.fromCharCode(dataView.getUint8(byteOffset + 3))}`;\n}\n\n// Check if a data view is a GLB\nexport function isGLB(\n arrayBuffer: ArrayBuffer,\n byteOffset: number = 0,\n options: GLBParseOptions = {}\n): boolean {\n const dataView = new DataView(arrayBuffer);\n // Check that GLB Header starts with the magic number\n const {magic = MAGIC_glTF} = options;\n const magic1 = dataView.getUint32(byteOffset, false);\n return magic1 === magic || magic1 === MAGIC_glTF;\n}\n\nexport default function parseGLBSync(\n glb: GLB,\n arrayBuffer: ArrayBuffer,\n byteOffset: number = 0,\n options: GLBParseOptions = {}\n) {\n // Check that GLB Header starts with the magic number\n const dataView = new DataView(arrayBuffer);\n\n // Compare format with GLBLoader documentation\n const type = getMagicString(dataView, byteOffset + 0);\n const version = dataView.getUint32(byteOffset + 4, LE); // Version 2 of binary glTF container format\n const byteLength = dataView.getUint32(byteOffset + 8, LE); // Total byte length of binary file\n\n Object.assign(glb, {\n // Put less important stuff in a header, to avoid clutter\n header: {\n byteOffset, // Byte offset into the initial arrayBuffer\n byteLength,\n hasBinChunk: false\n },\n\n type,\n version,\n\n json: {},\n binChunks: []\n } as GLB);\n\n byteOffset += GLB_FILE_HEADER_SIZE;\n\n switch (glb.version) {\n case 1:\n // eslint-disable-next-line\n return parseGLBV1(glb, dataView, byteOffset);\n case 2:\n // eslint-disable-next-line\n return parseGLBV2(glb, dataView, byteOffset, (options = {}));\n default:\n throw new Error(`Invalid GLB version ${glb.version}. Only supports v1 and v2.`);\n }\n}\n\nfunction parseGLBV1(glb: GLB, dataView: DataView, byteOffset: number): number {\n // Sanity: ensure file is big enough to hold at least the headers\n assert(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);\n\n // Explanation of GLB structure:\n // https://cloud.githubusercontent.com/assets/3479527/22600725/36b87122-ea55-11e6-9d40-6fd42819fcab.png\n const contentLength = dataView.getUint32(byteOffset + 0, LE); // Byte length of chunk\n const contentFormat = dataView.getUint32(byteOffset + 4, LE); // Chunk format as uint32\n byteOffset += GLB_CHUNK_HEADER_SIZE;\n\n // GLB v1 only supports a single chunk type\n assert(contentFormat === GLB_V1_CONTENT_FORMAT_JSON);\n\n parseJSONChunk(glb, dataView, byteOffset, contentLength);\n // No need to call the function padToBytes() from parseJSONChunk()\n byteOffset += contentLength;\n byteOffset += parseBINChunk(glb, dataView, byteOffset, glb.header.byteLength);\n\n return byteOffset;\n}\n\nfunction parseGLBV2(\n glb: GLB,\n dataView: DataView,\n byteOffset: number,\n options: GLBParseOptions\n): number {\n // Sanity: ensure file is big enough to hold at least the first chunk header\n assert(glb.header.byteLength > GLB_FILE_HEADER_SIZE + GLB_CHUNK_HEADER_SIZE);\n\n parseGLBChunksSync(glb, dataView, byteOffset, options);\n\n return byteOffset + glb.header.byteLength;\n}\n\nfunction parseGLBChunksSync(\n glb: GLB,\n dataView: DataView,\n byteOffset: number,\n options: GLBParseOptions\n) {\n // Per spec we must iterate over chunks, ignoring all except JSON and BIN\n // Iterate as long as there is space left for another chunk header\n while (byteOffset + 8 <= glb.header.byteLength) {\n const chunkLength = dataView.getUint32(byteOffset + 0, LE); // Byte length of chunk\n const chunkFormat = dataView.getUint32(byteOffset + 4, LE); // Chunk format as uint32\n byteOffset += GLB_CHUNK_HEADER_SIZE;\n\n // Per spec we must iterate over chunks, ignoring all except JSON and BIN\n switch (chunkFormat) {\n case GLB_CHUNK_TYPE_JSON:\n parseJSONChunk(glb, dataView, byteOffset, chunkLength);\n break;\n case GLB_CHUNK_TYPE_BIN:\n parseBINChunk(glb, dataView, byteOffset, chunkLength);\n break;\n\n // Backward compatibility for very old xviz files\n case GLB_CHUNK_TYPE_JSON_XVIZ_DEPRECATED:\n if (!options.strict) {\n parseJSONChunk(glb, dataView, byteOffset, chunkLength);\n }\n break;\n case GLB_CHUNK_TYPE_BIX_XVIZ_DEPRECATED:\n if (!options.strict) {\n parseBINChunk(glb, dataView, byteOffset, chunkLength);\n }\n break;\n\n default:\n // Ignore, per spec\n // console.warn(`Unknown GLB chunk type`); // eslint-disable-line\n break;\n }\n\n byteOffset += padToNBytes(chunkLength, 4);\n }\n\n return byteOffset;\n}\n\n// Parse a GLB JSON chunk\nfunction parseJSONChunk(glb: GLB, dataView: DataView, byteOffset: number, chunkLength: number) {\n // 1. Create a \"view\" of the binary encoded JSON data inside the GLB\n const jsonChunk = new Uint8Array(dataView.buffer, byteOffset, chunkLength);\n\n // 2. Decode the JSON binary array into clear text\n const textDecoder = new TextDecoder('utf8');\n const jsonText = textDecoder.decode(jsonChunk);\n\n // 3. Parse the JSON text into a JavaScript data structure\n glb.json = JSON.parse(jsonText);\n\n return padToNBytes(chunkLength, 4);\n}\n\n// Parse a GLB BIN chunk\nfunction parseBINChunk(glb: GLB, dataView, byteOffset, chunkLength) {\n // Note: BIN chunk can be optional\n glb.header.hasBinChunk = true;\n glb.binChunks.push({\n byteOffset,\n byteLength: chunkLength,\n arrayBuffer: dataView.buffer\n // TODO - copy, or create typed array view?\n });\n\n return padToNBytes(chunkLength, 4);\n}\n","/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLB} from '../types/glb-types';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {preprocessExtensions, decodeExtensions} from '../api/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n postProcess?: boolean;\n excludeExtensions?: string[];\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf: GLTFWithBuffers,\n arrayBufferOrString,\n byteOffset = 0,\n options: GLTFLoaderOptions,\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\n\n const promises: Promise[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n/** Asynchronously fetch and parse buffers, store in buffers array outside of json\n * TODO - traverse gltf and determine which buffers are actually needed\n */\nasync function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n // TODO\n const buffers = gltf.json.buffers || [];\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\n }\n }\n}\n\n/**\n * Loads all images\n * TODO - traverse gltf and determine which images are actually needed\n * @param gltf\n * @param options\n * @param context\n * @returns\n */\nasync function loadImages(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n const imageIndices = getReferencesImageIndices(gltf);\n\n const images = gltf.json.images || [];\n\n const promises: Promise[] = [];\n for (const imageIndex of imageIndices) {\n promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n/** Make sure we only load images that are actually referenced by textures */\nfunction getReferencesImageIndices(gltf: GLTFWithBuffers): number[] {\n const imageIndices = new Set();\n\n const textures = gltf.json.textures || [];\n for (const texture of textures) {\n if (texture.source !== undefined) {\n imageIndices.add(texture.source);\n }\n }\n\n return Array.from(imageIndices).sort();\n}\n\n/** Asynchronously fetches and parses one image, store in images array outside of json */\nasync function loadImage(\n gltf: GLTFWithBuffers,\n image,\n index: number,\n options,\n context: LoaderContext\n) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n let parsedImage = await parse(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {mimeType: image.mimeType, basis: options.basis || {format: selectSupportedBasisFormat()}},\n context\n );\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n // Store the loaded image\n gltf.images = gltf.images || [];\n gltf.images[index] = parsedImage;\n}\n","import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {DracoLoaderOptions} from '@loaders.gl/draco';\nimport {VERSION} from './lib/utils/version';\nimport type {ImageLoaderOptions} from '@loaders.gl/images';\nimport type {TextureLoaderOptions} from '@loaders.gl/textures';\nimport type {GLTFParseOptions} from './lib/parsers/parse-gltf';\nimport type {GLTFWithBuffers} from './lib/types/gltf-types';\nimport {parseGLTF} from './lib/parsers/parse-gltf';\nimport {GLBLoaderOptions} from './glb-loader';\n\n/**\n * GLTF loader options\n */\nexport type GLTFLoaderOptions = LoaderOptions &\n ImageLoaderOptions &\n TextureLoaderOptions &\n GLBLoaderOptions &\n DracoLoaderOptions & {\n gltf?: GLTFParseOptions;\n };\n\n/**\n * GLTF loader\n */\nexport const GLTFLoader: LoaderWithParser = {\n name: 'glTF',\n id: 'gltf',\n module: 'gltf',\n version: VERSION,\n extensions: ['gltf', 'glb'],\n mimeTypes: ['model/gltf+json', 'model/gltf-binary'],\n\n text: true,\n binary: true,\n tests: ['glTF'],\n parse,\n\n options: {\n gltf: {\n normalize: true, // Normalize glTF v1 to glTF v2 format (not yet stable)\n loadBuffers: true, // Fetch any linked .BIN buffers, decode base64\n loadImages: true, // Create image objects\n decompressMeshes: true, // Decompress Draco encoded meshes\n postProcess: true // Postprocess glTF and return json structure directly\n },\n\n // common?\n log: console // eslint-disable-line\n },\n deprecatedOptions: {\n fetchImages: 'gltf.loadImages',\n createImages: 'gltf.loadImages',\n decompress: 'gltf.decompressMeshes',\n postProcess: 'gltf.postProcess',\n gltf: {\n decompress: 'gltf.decompressMeshes'\n }\n }\n};\n\nexport async function parse(arrayBuffer, options: GLTFLoaderOptions = {}, context) {\n // Apps can call the parse method directly, we so apply default options here\n options = {...GLTFLoader.options, ...options};\n // @ts-ignore\n options.gltf = {...GLTFLoader.options.gltf, ...options.gltf};\n\n const {byteOffset = 0} = options;\n const gltf = {};\n return await parseGLTF(gltf as GLTFWithBuffers, arrayBuffer, byteOffset, options, context);\n}\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","import {isBrowser} from '@loaders.gl/loader-utils';\nimport type {ImageTypeEnum} from '../../types';\n\n// @ts-ignore TS2339: Property does not exist on type\nconst {_parseImageNode} = globalThis;\n\nconst IMAGE_SUPPORTED = typeof Image !== 'undefined'; // NOTE: \"false\" positives if jsdom is installed\nconst IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== 'undefined';\nconst NODE_IMAGE_SUPPORTED = Boolean(_parseImageNode);\nconst DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;\n\n/**\n * Checks if a loaders.gl image type is supported\n * @param type image type string\n */\nexport function isImageTypeSupported(type: string): boolean {\n switch (type) {\n case 'auto':\n // Should only ever be false in Node.js, if polyfills have not been installed...\n return IMAGE_BITMAP_SUPPORTED || IMAGE_SUPPORTED || DATA_SUPPORTED;\n\n case 'imagebitmap':\n return IMAGE_BITMAP_SUPPORTED;\n case 'image':\n return IMAGE_SUPPORTED;\n case 'data':\n return DATA_SUPPORTED;\n\n default:\n throw new Error(`@loaders.gl/images: image ${type} not supported in this environment`);\n }\n}\n\n/**\n * Returns the \"most performant\" supported image type on this platform\n * @returns image type string\n */\nexport function getDefaultImageType(): ImageTypeEnum {\n if (IMAGE_BITMAP_SUPPORTED) {\n return 'imagebitmap';\n }\n if (IMAGE_SUPPORTED) {\n return 'image';\n }\n if (DATA_SUPPORTED) {\n return 'data';\n }\n\n // This should only happen in Node.js\n throw new Error('Install \\'@loaders.gl/polyfills\\' to parse images under Node.js');\n}\n","import type {ImageType, ImageTypeEnum, ImageDataType} from '../../types';\n\nexport function isImage(image: ImageType): boolean {\n return Boolean(getImageTypeOrNull(image));\n}\n\nexport function deleteImage(image: ImageType): void {\n switch (getImageType(image)) {\n case 'imagebitmap':\n (image as ImageBitmap).close();\n break;\n default:\n // Nothing to do for images and image data objects\n }\n}\n\nexport function getImageType(image: ImageType): ImageTypeEnum {\n const format = getImageTypeOrNull(image);\n if (!format) {\n throw new Error('Not an image');\n }\n return format;\n}\n\nexport function getImageSize(image: ImageType): {width: number; height: number} {\n return getImageData(image);\n}\n\nexport function getImageData(image: ImageType): ImageDataType | ImageData {\n switch (getImageType(image)) {\n case 'data':\n return image as unknown as ImageData;\n\n case 'image':\n case 'imagebitmap':\n // Extract the image data from the image via a canvas\n const canvas = document.createElement('canvas');\n // TODO - reuse the canvas?\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('getImageData');\n }\n // @ts-ignore\n canvas.width = image.width;\n // @ts-ignore\n canvas.height = image.height;\n // @ts-ignore\n context.drawImage(image, 0, 0);\n // @ts-ignore\n return context.getImageData(0, 0, image.width, image.height);\n\n default:\n throw new Error('getImageData');\n }\n}\n\n// PRIVATE\n\n// eslint-disable-next-line complexity\nfunction getImageTypeOrNull(image) {\n if (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {\n return 'imagebitmap';\n }\n if (typeof Image !== 'undefined' && image instanceof Image) {\n return 'image';\n }\n if (image && typeof image === 'object' && image.data && image.width && image.height) {\n return 'data';\n }\n return null;\n}\n","// SVG parsing has limitations, e.g:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=606319\n\nconst SVG_DATA_URL_PATTERN = /^data:image\\/svg\\+xml/;\nconst SVG_URL_PATTERN = /\\.svg((\\?|#).*)?$/;\n\nexport function isSVG(url) {\n return url && (SVG_DATA_URL_PATTERN.test(url) || SVG_URL_PATTERN.test(url));\n}\n\nexport function getBlobOrSVGDataUrl(arrayBuffer: ArrayBuffer, url?: string): Blob | string {\n if (isSVG(url)) {\n // Prepare a properly tagged data URL, and load using normal mechanism\n const textDecoder = new TextDecoder();\n let xmlText = textDecoder.decode(arrayBuffer);\n // TODO Escape in browser to support e.g. Chinese characters\n try {\n if (typeof unescape === 'function' && typeof encodeURIComponent === 'function') {\n xmlText = unescape(encodeURIComponent(xmlText));\n }\n } catch (error) {\n throw new Error((error as Error).message);\n }\n // base64 encoding is safer. utf-8 fails in some browsers\n const src = `data:image/svg+xml;base64,${btoa(xmlText)}`;\n return src;\n }\n return getBlob(arrayBuffer, url);\n}\n\nexport function getBlob(arrayBuffer: ArrayBuffer, url?: string): Blob {\n if (isSVG(url)) {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606319\n // return new Blob([new Uint8Array(arrayBuffer)], {type: 'image/svg+xml'});\n throw new Error('SVG cannot be parsed directly to imagebitmap');\n }\n // TODO - how to determine mime type? Param? Sniff here?\n return new Blob([new Uint8Array(arrayBuffer)]); // MIME type not needed?\n}\n","import type {ImageLoaderOptions} from '../../image-loader';\nimport {getBlobOrSVGDataUrl} from './svg-utils';\n\n// Parses html image from array buffer\nexport default async function parseToImage(\n arrayBuffer: ArrayBuffer,\n options: ImageLoaderOptions,\n url?: string\n): Promise {\n // Note: image parsing requires conversion to Blob (for createObjectURL).\n // Potentially inefficient for not using `response.blob()` (and for File / Blob inputs)...\n // But presumably not worth adding 'blob' flag to loader objects?\n\n const blobOrDataUrl = getBlobOrSVGDataUrl(arrayBuffer, url);\n const URL = self.URL || self.webkitURL;\n const objectUrl = typeof blobOrDataUrl !== 'string' && URL.createObjectURL(blobOrDataUrl);\n try {\n return await loadToImage(objectUrl || blobOrDataUrl, options);\n } finally {\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n }\n}\n\nexport async function loadToImage(url, options): Promise {\n const image = new Image();\n image.src = url;\n\n // The `image.onload()` callback does not guarantee that the image has been decoded\n // so a main thread \"freeze\" can be incurred when using the image for the first time.\n // `Image.decode()` returns a promise that completes when image is decoded.\n\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode\n // Note: When calling `img.decode()`, we do not need to wait for `img.onload()`\n // Note: `HTMLImageElement.decode()` is not available in Edge and IE11\n if (options.image && options.image.decode && image.decode) {\n await image.decode();\n return image;\n }\n\n // Create a promise that tracks onload/onerror callbacks\n return await new Promise((resolve, reject) => {\n try {\n image.onload = () => resolve(image);\n image.onerror = (err) => reject(new Error(`Could not load image ${url}: ${err}`));\n } catch (error) {\n reject(error);\n }\n });\n}\n","import type {ImageLoaderOptions} from '../../image-loader';\nimport {isSVG, getBlob} from './svg-utils';\nimport parseToImage from './parse-to-image';\n\nconst EMPTY_OBJECT = {};\n\nlet imagebitmapOptionsSupported = true;\n\n/**\n * Asynchronously parses an array buffer into an ImageBitmap - this contains the decoded data\n * ImageBitmaps are supported on worker threads, but not supported on Edge, IE11 and Safari\n * https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap#Browser_compatibility\n *\n * TODO - createImageBitmap supports source rect (5 param overload), pass through?\n */\nexport default async function parseToImageBitmap(\n arrayBuffer: ArrayBuffer,\n options: ImageLoaderOptions,\n url?: string\n): Promise {\n let blob;\n\n // Cannot parse SVG directly to ImageBitmap, parse to Image first\n if (isSVG(url)) {\n // Note: this only works on main thread\n const image = await parseToImage(arrayBuffer, options, url);\n blob = image;\n } else {\n // Create blob from the array buffer\n blob = getBlob(arrayBuffer, url);\n }\n\n const imagebitmapOptions = options && options.imagebitmap;\n\n return await safeCreateImageBitmap(blob, imagebitmapOptions);\n}\n\n/**\n * Safely creates an imageBitmap with options\n * *\n * Firefox crashes if imagebitmapOptions is supplied\n * Avoid supplying if not provided or supported, remember if not supported\n */\nasync function safeCreateImageBitmap(\n blob: Blob,\n imagebitmapOptions: ImageBitmapOptions | null = null\n): Promise {\n if (isEmptyObject(imagebitmapOptions) || !imagebitmapOptionsSupported) {\n imagebitmapOptions = null;\n }\n\n if (imagebitmapOptions) {\n try {\n // @ts-ignore Options\n return await createImageBitmap(blob, imagebitmapOptions);\n } catch (error) {\n console.warn(error); // eslint-disable-line\n imagebitmapOptionsSupported = false;\n }\n }\n\n return await createImageBitmap(blob);\n}\n\nfunction isEmptyObject(object) {\n // @ts-ignore\n for (const key in object || EMPTY_OBJECT) {\n return false;\n }\n return true;\n}\n","import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport parseImage from './lib/parsers/parse-image';\nimport {getBinaryImageMetadata} from './lib/category-api/binary-image-api';\n\nconst EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'svg'];\nconst MIME_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/bmp',\n 'image/vnd.microsoft.icon',\n 'image/svg+xml'\n];\n\nexport type ImageLoaderOptions = LoaderOptions & {\n image?: {\n type?: 'auto' | 'data' | 'imagebitmap' | 'image';\n decode?: boolean;\n };\n imagebitmap?: ImageBitmapOptions;\n};\n\nconst DEFAULT_IMAGE_LOADER_OPTIONS: ImageLoaderOptions = {\n image: {\n type: 'auto',\n decode: true // if format is HTML\n }\n // imagebitmap: {} - passes (platform dependent) parameters to ImageBitmap constructor\n};\n\n/**\n * Loads a platform-specific image type\n * Note: This type can be used as input data to WebGL texture creation\n */\nexport const ImageLoader = {\n id: 'image',\n module: 'images',\n name: 'Images',\n version: VERSION,\n mimeTypes: MIME_TYPES,\n extensions: EXTENSIONS,\n parse: parseImage,\n // TODO: byteOffset, byteLength;\n tests: [(arrayBuffer) => Boolean(getBinaryImageMetadata(new DataView(arrayBuffer)))],\n options: DEFAULT_IMAGE_LOADER_OPTIONS\n};\n\nexport const _typecheckImageLoader: LoaderWithParser = ImageLoader;\n","// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n","import type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {assert} from '@loaders.gl/loader-utils';\nimport type {ImageType} from '../../types';\nimport type {ImageLoaderOptions} from '../../image-loader';\nimport {isImageTypeSupported, getDefaultImageType} from '../category-api/image-type';\nimport {getImageData} from '../category-api/parsed-image-api';\nimport parseToImage from './parse-to-image';\nimport parseToImageBitmap from './parse-to-image-bitmap';\nimport parseToNodeImage from './parse-to-node-image';\n\n// Parse to platform defined image type (data on node, ImageBitmap or HTMLImage on browser)\n// eslint-disable-next-line complexity\nexport default async function parseImage(\n arrayBuffer: ArrayBuffer,\n options?: ImageLoaderOptions,\n context?: LoaderContext\n): Promise {\n options = options || {};\n const imageOptions = options.image || {};\n\n // The user can request a specific output format via `options.image.type`\n const imageType = imageOptions.type || 'auto';\n\n const {url} = context || {};\n\n // Note: For options.image.type === `data`, we may still need to load as `image` or `imagebitmap`\n const loadType = getLoadableImageType(imageType);\n\n let image;\n switch (loadType) {\n case 'imagebitmap':\n image = await parseToImageBitmap(arrayBuffer, options, url);\n break;\n case 'image':\n image = await parseToImage(arrayBuffer, options, url);\n break;\n case 'data':\n // Node.js loads imagedata directly\n image = await parseToNodeImage(arrayBuffer, options);\n break;\n default:\n assert(false);\n }\n\n // Browser: if options.image.type === 'data', we can now extract data from the loaded image\n if (imageType === 'data') {\n image = getImageData(image);\n }\n\n return image;\n}\n\n// Get a loadable image type from image type\nfunction getLoadableImageType(type) {\n switch (type) {\n case 'auto':\n case 'data':\n // Browser: For image data we need still need to load using an image format\n // Node: the default image type is `data`.\n return getDefaultImageType();\n default:\n // Throw an error if not supported\n isImageTypeSupported(type);\n return type;\n }\n}\n","import type {ImageLoaderOptions} from '../../image-loader';\nimport type {ImageDataType} from '../../types';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getBinaryImageMetadata} from '../category-api/binary-image-api';\n\n// Note: These types should be consistent with loaders.gl/polyfills\n\ntype NDArray = {\n shape: number[];\n data: Uint8Array;\n width: number;\n height: number;\n components: number;\n layers: number[];\n};\n\ntype ParseImageNode = (arrayBuffer: ArrayBuffer, mimeType: string) => Promise;\n\n// Use polyfills if installed to parsed image using get-pixels\nexport default async function parseToNodeImage(\n arrayBuffer: ArrayBuffer,\n options: ImageLoaderOptions\n): Promise {\n const {mimeType} = getBinaryImageMetadata(arrayBuffer) || {};\n\n // @ts-ignore\n const _parseImageNode: ParseImageNode = globalThis._parseImageNode;\n assert(_parseImageNode); // '@loaders.gl/polyfills not installed'\n\n // @ts-expect-error TODO should we throw error in this case?\n return await _parseImageNode(arrayBuffer, mimeType);\n}\n","// Attributions\n// * Based on binary-gltf-utils under MIT license: Copyright (c) 2016-17 Karl Cheng\n\n// TODO: make these functions work for Node.js buffers?\n// Quarantine references to Buffer to prevent bundler from adding big polyfills\n// import {bufferToArrayBuffer} from '../node/buffer-to-array-buffer';\n// TODO - this should be handled in @loaders.gl/polyfills\n\n/** MIME type, width and height extracted from binary compressed image data */\nexport type BinaryImageMetadata = {\n mimeType: string;\n width: number;\n height: number;\n};\n\nconst BIG_ENDIAN = false;\nconst LITTLE_ENDIAN = true;\n\n/**\n * Extracts `{mimeType, width and height}` from a memory buffer containing a known image format\n * Currently supports `image/png`, `image/jpeg`, `image/bmp` and `image/gif`.\n * @param binaryData image file memory to parse\n * @returns metadata or null if memory is not a valid image file format layout.\n */\nexport function getBinaryImageMetadata(\n binaryData: DataView | ArrayBuffer\n): BinaryImageMetadata | null {\n const dataView = toDataView(binaryData);\n return (\n getPngMetadata(dataView) ||\n getJpegMetadata(dataView) ||\n getGifMetadata(dataView) ||\n getBmpMetadata(dataView)\n );\n}\n\n// PNG\n\nfunction getPngMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check file contains the first 4 bytes of the PNG signature.\n const isPng = dataView.byteLength >= 24 && dataView.getUint32(0, BIG_ENDIAN) === 0x89504e47;\n if (!isPng) {\n return null;\n }\n\n // Extract size from a binary PNG file\n return {\n mimeType: 'image/png',\n width: dataView.getUint32(16, BIG_ENDIAN),\n height: dataView.getUint32(20, BIG_ENDIAN)\n };\n}\n\n// GIF\n\n// Extract size from a binary GIF file\n// TODO: GIF is not this simple\nfunction getGifMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check first 4 bytes of the GIF signature (\"GIF8\").\n const isGif = dataView.byteLength >= 10 && dataView.getUint32(0, BIG_ENDIAN) === 0x47494638;\n if (!isGif) {\n return null;\n }\n\n // GIF is little endian.\n return {\n mimeType: 'image/gif',\n width: dataView.getUint16(6, LITTLE_ENDIAN),\n height: dataView.getUint16(8, LITTLE_ENDIAN)\n };\n}\n\n// BMP\n\n// TODO: BMP is not this simple\nexport function getBmpMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check magic number is valid (first 2 characters should be \"BM\").\n // The mandatory bitmap file header is 14 bytes long.\n const isBmp =\n dataView.byteLength >= 14 &&\n dataView.getUint16(0, BIG_ENDIAN) === 0x424d &&\n dataView.getUint32(2, LITTLE_ENDIAN) === dataView.byteLength;\n\n if (!isBmp) {\n return null;\n }\n\n // BMP is little endian.\n return {\n mimeType: 'image/bmp',\n width: dataView.getUint32(18, LITTLE_ENDIAN),\n height: dataView.getUint32(22, LITTLE_ENDIAN)\n };\n}\n\n// JPEG\n\n// Extract width and height from a binary JPEG file\nfunction getJpegMetadata(binaryData) {\n const dataView = toDataView(binaryData);\n // Check file contains the JPEG \"start of image\" (SOI) marker\n // followed by another marker.\n const isJpeg =\n dataView.byteLength >= 3 &&\n dataView.getUint16(0, BIG_ENDIAN) === 0xffd8 &&\n dataView.getUint8(2) === 0xff;\n\n if (!isJpeg) {\n return null;\n }\n\n const {tableMarkers, sofMarkers} = getJpegMarkers();\n\n // Exclude the two byte SOI marker.\n let i = 2;\n while (i + 9 < dataView.byteLength) {\n const marker = dataView.getUint16(i, BIG_ENDIAN);\n\n // The frame that contains the width and height of the JPEG image.\n if (sofMarkers.has(marker)) {\n return {\n mimeType: 'image/jpeg',\n height: dataView.getUint16(i + 5, BIG_ENDIAN), // Number of lines\n width: dataView.getUint16(i + 7, BIG_ENDIAN) // Number of pixels per line\n };\n }\n\n // Miscellaneous tables/data preceding the frame header.\n if (!tableMarkers.has(marker)) {\n return null;\n }\n\n // Length includes size of length parameter but not the two byte header.\n i += 2;\n i += dataView.getUint16(i, BIG_ENDIAN);\n }\n\n return null;\n}\n\nfunction getJpegMarkers() {\n // Tables/misc header markers.\n // DQT, DHT, DAC, DRI, COM, APP_n\n const tableMarkers = new Set([0xffdb, 0xffc4, 0xffcc, 0xffdd, 0xfffe]);\n for (let i = 0xffe0; i < 0xfff0; ++i) {\n tableMarkers.add(i);\n }\n\n // SOF markers and DHP marker.\n // These markers are after tables/misc data.\n const sofMarkers = new Set([\n 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc9, 0xffca, 0xffcb, 0xffcd, 0xffce,\n 0xffcf, 0xffde\n ]);\n\n return {tableMarkers, sofMarkers};\n}\n\n// TODO - move into image module?\nfunction toDataView(data) {\n if (data instanceof DataView) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new DataView(data.buffer);\n }\n\n // TODO: make these functions work for Node.js buffers?\n // if (bufferToArrayBuffer) {\n // data = bufferToArrayBuffer(data);\n // }\n\n // Careful - Node Buffers will look like ArrayBuffers (keep after isBuffer)\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n }\n throw new Error('toDataView');\n}\n","import * as node from '../node/buffer';\n\n/**\n * Check for Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n */\nexport function isBuffer(value: any): boolean {\n return value && typeof value === 'object' && value.isBuffer;\n}\n\n/**\n * Converts to Node.js `Buffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function toBuffer(data: any): Buffer {\n return node.toBuffer ? node.toBuffer(data) : data;\n}\n\n/**\n * Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)\n * @todo better data type\n */\nexport function bufferToArrayBuffer(buffer: any): ArrayBuffer {\n if (isBuffer(buffer)) {\n const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);\n return typedArray.slice().buffer;\n }\n return buffer;\n}\n","import {TypedArray} from '../../types';\nimport {isBuffer, bufferToArrayBuffer} from './buffer-utils';\n\n/**\n * Convert an object to an array buffer\n */\nexport function toArrayBuffer(data: any): ArrayBuffer {\n // Note: Should be called first, Buffers can trigger other detections below\n if (isBuffer(data)) {\n return bufferToArrayBuffer(data);\n }\n\n if (data instanceof ArrayBuffer) {\n return data;\n }\n\n // Careful - Node Buffers look like Uint8Arrays (keep after isBuffer)\n if (ArrayBuffer.isView(data)) {\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n }\n\n if (typeof data === 'string') {\n const text = data;\n const uint8Array = new TextEncoder().encode(text);\n return uint8Array.buffer;\n }\n\n // HACK to support Blob polyfill\n if (data && typeof data === 'object' && data._toArrayBuffer) {\n return data._toArrayBuffer();\n }\n\n throw new Error('toArrayBuffer');\n}\n\n/**\n * compare two binary arrays for equality\n * @param {ArrayBuffer} a\n * @param {ArrayBuffer} b\n * @param {number} byteLength\n */\nexport function compareArrayBuffers(\n arrayBuffer1: ArrayBuffer,\n arrayBuffer2: ArrayBuffer,\n byteLength?: number\n): boolean {\n byteLength = byteLength || arrayBuffer1.byteLength;\n if (arrayBuffer1.byteLength < byteLength || arrayBuffer2.byteLength < byteLength) {\n return false;\n }\n const array1 = new Uint8Array(arrayBuffer1);\n const array2 = new Uint8Array(arrayBuffer2);\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Concatenate a sequence of ArrayBuffers\n * @return A concatenated ArrayBuffer\n */\nexport function concatenateArrayBuffers(...sources: (ArrayBuffer | Uint8Array)[]): ArrayBuffer {\n // Make sure all inputs are wrapped in typed arrays\n const sourceArrays = sources.map((source2) =>\n source2 instanceof ArrayBuffer ? new Uint8Array(source2) : source2\n );\n\n // Get length of all inputs\n const byteLength = sourceArrays.reduce((length, typedArray) => length + typedArray.byteLength, 0);\n\n // Allocate array with space for all inputs\n const result = new Uint8Array(byteLength);\n\n // Copy the subarrays\n let offset = 0;\n for (const sourceArray of sourceArrays) {\n result.set(sourceArray, offset);\n offset += sourceArray.byteLength;\n }\n\n // We work with ArrayBuffers, discard the typed array wrapper\n return result.buffer;\n}\n\n/**\n * Concatenate arbitrary count of typed arrays\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays\n * @param {...*} arrays - list of arrays. All arrays should be the same type\n * @return A concatenated TypedArray\n */\nexport function concatenateTypedArrays(...typedArrays: T[]): T {\n // @ts-ignore\n const arrays = typedArrays as TypedArray[];\n // @ts-ignore\n const TypedArrayConstructor = (arrays && arrays.length > 1 && arrays[0].constructor) || null;\n if (!TypedArrayConstructor) {\n throw new Error(\n '\"concatenateTypedArrays\" - incorrect quantity of arguments or arguments have incompatible data types'\n );\n }\n\n const sumLength = arrays.reduce((acc, value) => acc + value.length, 0);\n // @ts-ignore typescript does not like dynamic constructors\n const result = new TypedArrayConstructor(sumLength);\n let offset = 0;\n for (const array of arrays) {\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n}\n\n/**\n * Copy a view of an ArrayBuffer into new ArrayBuffer with byteOffset = 0\n * @param arrayBuffer\n * @param byteOffset\n * @param byteLength\n */\nexport function sliceArrayBuffer(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n byteLength?: number\n): ArrayBuffer {\n const subArray =\n byteLength !== undefined\n ? new Uint8Array(arrayBuffer).subarray(byteOffset, byteOffset + byteLength)\n : new Uint8Array(arrayBuffer).subarray(byteOffset);\n const arrayCopy = new Uint8Array(subArray);\n return arrayCopy.buffer;\n}\n","/**\n * Throws an `Error` with the optional `message` if `condition` is falsy\n * @note Replacement for the external assert method to reduce bundle size\n */\nexport function assert(condition: any, message?: string): void {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n","// Purpose: include this in your module to avoid\n// dependencies on micro modules like 'global' and 'is-browser';\n\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\n\ntype obj = {[key: string]: any};\nconst self_: obj = globals.self || globals.window || globals.global || {};\nconst window_: obj = globals.window || globals.self || globals.global || {};\nconst global_: obj = globals.global || globals.self || globals.window || {};\nconst document_: obj = globals.document || {};\n\nexport {self_ as self, window_ as window, global_ as global, document_ as document};\n\n/** true if running in a browser */\nexport const isBrowser: boolean =\n // @ts-ignore process does not exist on browser\n Boolean(typeof process !== 'object' || String(process) !== '[object process]' || process.browser);\n\n/** true if running in a worker thread */\nexport const isWorker: boolean = typeof importScripts === 'function';\n\n// Extract node major version\nconst matches =\n typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n/** Major Node version (as a number) */\nexport const nodeVersion: number = (matches && parseFloat(matches[1])) || 0;\n","// Beginning of a minimal implementation of the Node.js path API, that doesn't pull in big polyfills.\n\n/**\n * Replacement for Node.js path.filename\n * @param url\n */\nexport function filename(url: string): string {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr((slashIndex as number) + 1) : '';\n}\n\n/**\n * Replacement for Node.js path.dirname\n * @param url\n */\nexport function dirname(url: string): string {\n const slashIndex = url && url.lastIndexOf('/');\n return slashIndex >= 0 ? url.substr(0, slashIndex as number) : '';\n}\n\n/**\n * Replacement for Node.js path.join\n * @param parts\n */\nexport function join(...parts: string[]): string {\n const separator = '/';\n parts = parts.map((part, index) => {\n if (index) {\n part = part.replace(new RegExp(`^${separator}`), '');\n }\n if (index !== parts.length - 1) {\n part = part.replace(new RegExp(`${separator}$`), '');\n }\n return part;\n });\n return parts.join(separator);\n}\n","import {Stats} from '@probe.gl/stats';\n\ntype Handle = any;\ntype DoneFunction = () => any;\ntype GetPriorityFunction = () => number;\ntype RequestResult = {\n done: DoneFunction;\n} | null;\n\n/** RequestScheduler Options */\nexport type RequestSchedulerProps = {\n id?: string;\n throttleRequests?: boolean;\n maxRequests?: number;\n};\n\nconst STAT_QUEUED_REQUESTS = 'Queued Requests';\nconst STAT_ACTIVE_REQUESTS = 'Active Requests';\nconst STAT_CANCELLED_REQUESTS = 'Cancelled Requests';\nconst STAT_QUEUED_REQUESTS_EVER = 'Queued Requests Ever';\nconst STAT_ACTIVE_REQUESTS_EVER = 'Active Requests Ever';\n\nconst DEFAULT_PROPS: Required = {\n id: 'request-scheduler',\n // Specifies if the request scheduler should throttle incoming requests, mainly for comparative testing\n throttleRequests: true,\n // The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit.\n maxRequests: 6\n};\n\n/** Tracks one request */\ntype Request = {\n handle: Handle;\n priority: number;\n getPriority: GetPriorityFunction;\n resolve?: (value: any) => any;\n};\n\n/**\n * Used to issue a request, without having them \"deeply queued\" by the browser.\n * @todo - Track requests globally, across multiple servers\n */\nexport default class RequestScheduler {\n readonly props: Required;\n readonly stats: Stats;\n activeRequestCount: number = 0;\n\n /** Tracks the number of active requests and prioritizes/cancels queued requests. */\n private requestQueue: Request[] = [];\n private requestMap: Map> = new Map();\n private deferredUpdate: any = null;\n\n constructor(props: RequestSchedulerProps = {}) {\n this.props = {...DEFAULT_PROPS, ...props};\n\n // Returns the statistics used by the request scheduler.\n this.stats = new Stats({id: this.props.id});\n this.stats.get(STAT_QUEUED_REQUESTS);\n this.stats.get(STAT_ACTIVE_REQUESTS);\n this.stats.get(STAT_CANCELLED_REQUESTS);\n this.stats.get(STAT_QUEUED_REQUESTS_EVER);\n this.stats.get(STAT_ACTIVE_REQUESTS_EVER);\n }\n\n /**\n * Called by an application that wants to issue a request, without having it deeply queued by the browser\n *\n * When the returned promise resolved, it is OK for the application to issue a request.\n * The promise resolves to an object that contains a `done` method.\n * When the application's request has completed (or failed), the application must call the `done` function\n *\n * @param handle\n * @param getPriority will be called when request \"slots\" open up,\n * allowing the caller to update priority or cancel the request\n * Highest priority executes first, priority < 0 cancels the request\n * @returns a promise\n * - resolves to a object (with a `done` field) when the request can be issued without queueing,\n * - resolves to `null` if the request has been cancelled (by the callback return < 0).\n * In this case the application should not issue the request\n */\n scheduleRequest(\n handle: Handle,\n getPriority: GetPriorityFunction = () => 0\n ): Promise {\n // Allows throttling to be disabled\n if (!this.props.throttleRequests) {\n return Promise.resolve({done: () => {}});\n }\n\n // dedupe\n if (this.requestMap.has(handle)) {\n return this.requestMap.get(handle) as Promise;\n }\n\n const request: Request = {handle, priority: 0, getPriority};\n const promise = new Promise((resolve) => {\n // @ts-ignore\n request.resolve = resolve;\n return request;\n });\n\n this.requestQueue.push(request);\n this.requestMap.set(handle, promise);\n this._issueNewRequests();\n return promise;\n }\n\n // PRIVATE\n\n _issueRequest(request: Request): Promise {\n const {handle, resolve} = request;\n let isDone = false;\n\n const done = () => {\n // can only be called once\n if (!isDone) {\n isDone = true;\n\n // Stop tracking a request - it has completed, failed, cancelled etc\n this.requestMap.delete(handle);\n this.activeRequestCount--;\n // A slot just freed up, see if any queued requests are waiting\n this._issueNewRequests();\n }\n };\n\n // Track this request\n this.activeRequestCount++;\n\n return resolve ? resolve({done}) : Promise.resolve({done});\n }\n\n /** We check requests asynchronously, to prevent multiple updates */\n _issueNewRequests(): void {\n if (!this.deferredUpdate) {\n this.deferredUpdate = setTimeout(() => this._issueNewRequestsAsync(), 0);\n }\n }\n\n /** Refresh all requests */\n _issueNewRequestsAsync() {\n // TODO - shouldn't we clear the timeout?\n this.deferredUpdate = null;\n\n const freeSlots = Math.max(this.props.maxRequests - this.activeRequestCount, 0);\n\n if (freeSlots === 0) {\n return;\n }\n\n this._updateAllRequests();\n\n // Resolve pending promises for the top-priority requests\n for (let i = 0; i < freeSlots; ++i) {\n const request = this.requestQueue.shift();\n if (request) {\n this._issueRequest(request); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n }\n\n // Uncomment to debug\n // console.log(`${freeSlots} free slots, ${this.requestQueue.length} queued requests`);\n }\n\n /** Ensure all requests have updated priorities, and that no longer valid requests are cancelled */\n _updateAllRequests() {\n const requestQueue = this.requestQueue;\n for (let i = 0; i < requestQueue.length; ++i) {\n const request = requestQueue[i];\n if (!this._updateRequest(request)) {\n // Remove the element and make sure to adjust the counter to account for shortened array\n requestQueue.splice(i, 1);\n this.requestMap.delete(request.handle);\n i--;\n }\n }\n\n // Sort the remaining requests based on priority\n requestQueue.sort((a, b) => a.priority - b.priority);\n }\n\n /** Update a single request by calling the callback */\n _updateRequest(request) {\n request.priority = request.getPriority(request.handle); // eslint-disable-line callback-return\n\n // by returning a negative priority, the callback cancels the request\n if (request.priority < 0) {\n request.resolve(null);\n return false;\n }\n return true;\n }\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\n\n/** Throws an `Error` with the optional `message` if `condition` is falsy */\nexport function assert(condition: any, message?: string): void {\n if (!condition) {\n throw new Error(message || 'loaders.gl assertion failed.');\n }\n}\n","// Purpose: include this in your module to avoids adding dependencies on\n// micro modules like 'global' and 'is-browser';\n\n/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document\n};\n\nconst self_: {[key: string]: any} = globals.self || globals.window || globals.global || {};\nconst window_: {[key: string]: any} = globals.window || globals.self || globals.global || {};\nconst global_: {[key: string]: any} = globals.global || globals.self || globals.window || {};\nconst document_: {[key: string]: any} = globals.document || {};\n\nexport {self_ as self, window_ as window, global_ as global, document_ as document};\n\n/** true if running in the browser, false if running in Node.js */\nexport const isBrowser: boolean =\n // @ts-ignore process.browser\n typeof process !== 'object' || String(process) !== '[object process]' || process.browser;\n\n/** true if running on a worker thread */\nexport const isWorker: boolean = typeof importScripts === 'function';\n\n/** true if running on a mobile device */\nexport const isMobile: boolean =\n typeof window !== 'undefined' && typeof window.orientation !== 'undefined';\n\n// Extract node major version\nconst matches =\n typeof process !== 'undefined' && process.version && /v([0-9]*)/.exec(process.version);\n\n/** Version of Node.js if running under Node, otherwise 0 */\nexport const nodeVersion: number = (matches && parseFloat(matches[1])) || 0;\n","/* global importScripts */\nimport {global, isBrowser, isWorker} from '../env-utils/globals';\nimport * as node from '../node/require-utils.node';\nimport {assert} from '../env-utils/assert';\nimport {VERSION as __VERSION__} from '../env-utils/version';\n\n// TODO - unpkg.com doesn't seem to have a `latest` specifier for alpha releases...\nconst LATEST = 'latest';\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : LATEST;\n\nconst loadLibraryPromises: Record> = {}; // promises\n\n/**\n * Dynamically loads a library (\"module\")\n *\n * - wasm library: Array buffer is returned\n * - js library: Parse JS is returned\n *\n * Method depends on environment\n * - browser - script element is created and installed on document\n * - worker - eval is called on global context\n * - node - file is required\n *\n * @param libraryUrl\n * @param moduleName\n * @param options\n */\nexport async function loadLibrary(\n libraryUrl: string,\n moduleName: string | null = null,\n options: object = {}\n): Promise {\n if (moduleName) {\n libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);\n }\n\n // Ensure libraries are only loaded once\n\n loadLibraryPromises[libraryUrl] =\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);\n return await loadLibraryPromises[libraryUrl];\n}\n\n// TODO - sort out how to resolve paths for main/worker and dev/prod\nexport function getLibraryUrl(library: string, moduleName?: string, options?: any): string {\n // Check if already a URL\n if (library.startsWith('http')) {\n return library;\n }\n\n // Allow application to import and supply libraries through `options.modules`\n const modules = options.modules || {};\n if (modules[library]) {\n return modules[library];\n }\n\n // Load from local files, not from CDN scripts in Node.js\n // TODO - needs to locate the modules directory when installed!\n if (!isBrowser) {\n return `modules/${moduleName}/dist/libs/${library}`;\n }\n\n // In browser, load from external scripts\n if (options.CDN) {\n assert(options.CDN.startsWith('http'));\n return `${options.CDN}/${moduleName}@${VERSION}/dist/libs/${library}`;\n }\n\n // TODO - loading inside workers requires paths relative to worker script location...\n if (isWorker) {\n return `../src/libs/${library}`;\n }\n\n return `modules/${moduleName}/src/libs/${library}`;\n}\n\nasync function loadLibraryFromFile(libraryUrl: string): Promise {\n if (libraryUrl.endsWith('wasm')) {\n const response = await fetch(libraryUrl);\n return await response.arrayBuffer();\n }\n\n if (!isBrowser) {\n try {\n return node && node.requireFromFile && (await node.requireFromFile(libraryUrl));\n } catch {\n return null;\n }\n }\n if (isWorker) {\n return importScripts(libraryUrl);\n }\n // TODO - fix - should be more secure than string parsing since observes CORS\n // if (isBrowser) {\n // return await loadScriptFromFile(libraryUrl);\n // }\n\n const response = await fetch(libraryUrl);\n const scriptSource = await response.text();\n return loadLibraryFromString(scriptSource, libraryUrl);\n}\n\n/*\nasync function loadScriptFromFile(libraryUrl) {\n const script = document.createElement('script');\n script.src = libraryUrl;\n return await new Promise((resolve, reject) => {\n script.onload = data => {\n resolve(data);\n };\n script.onerror = reject;\n });\n}\n*/\n\n// TODO - Needs security audit...\n// - Raw eval call\n// - Potentially bypasses CORS\n// Upside is that this separates fetching and parsing\n// we could create a`LibraryLoader` or`ModuleLoader`\nfunction loadLibraryFromString(scriptSource: string, id: string): null | any {\n if (!isBrowser) {\n return node.requireFromString && node.requireFromString(scriptSource, id);\n }\n\n if (isWorker) {\n // Use lvalue trick to make eval run in global scope\n eval.call(global, scriptSource); // eslint-disable-line no-eval\n // https://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript\n // http://perfectionkills.com/global-eval-what-are-the-options/\n return null;\n }\n\n const script = document.createElement('script');\n script.id = id;\n // most browsers like a separate text node but some throw an error. The second method covers those.\n try {\n script.appendChild(document.createTextNode(scriptSource));\n } catch (e) {\n script.text = scriptSource;\n }\n document.body.appendChild(script);\n return null;\n}\n\n// TODO - technique for module injection into worker, from THREE.DracoLoader...\n/*\nfunction combineWorkerWithLibrary(worker, jsContent) {\n var fn = wWorker.toString();\n var body = [\n '// injected',\n jsContent,\n '',\n '// worker',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}'))\n ].join('\\n');\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n}\n*/\n","// GL constants, copied from Mozilla documentation\n// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants\n\n// Standard WebGL 1 constants\n// These constants are defined on the WebGLRenderingContext interface.\n\n/* eslint-disable key-spacing, max-len, no-inline-comments, camelcase */\n// eslint-disable-next-line\nexport default {\n // Clearing buffers\n // Constants passed to clear() to clear buffer masks.\n\n DEPTH_BUFFER_BIT: 0x00000100,\n STENCIL_BUFFER_BIT: 0x00000400,\n COLOR_BUFFER_BIT: 0x00004000,\n\n // Rendering primitives\n // Constants passed to drawElements() or drawArrays() to specify what kind of primitive to render.\n\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006,\n\n // Blending modes\n // Constants passed to blendFunc() or blendFuncSeparate() to specify the blending mode (for both, RBG and alpha, or separately).\n\n ZERO: 0,\n ONE: 1,\n SRC_COLOR: 0x0300,\n ONE_MINUS_SRC_COLOR: 0x0301,\n SRC_ALPHA: 0x0302,\n ONE_MINUS_SRC_ALPHA: 0x0303,\n DST_ALPHA: 0x0304,\n ONE_MINUS_DST_ALPHA: 0x0305,\n DST_COLOR: 0x0306,\n ONE_MINUS_DST_COLOR: 0x0307,\n SRC_ALPHA_SATURATE: 0x0308,\n CONSTANT_COLOR: 0x8001,\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n CONSTANT_ALPHA: 0x8003,\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n\n // Blending equations\n // Constants passed to blendEquation() or blendEquationSeparate() to control\n // how the blending is calculated (for both, RBG and alpha, or separately).\n\n FUNC_ADD: 0x8006,\n FUNC_SUBTRACT: 0x800a,\n FUNC_REVERSE_SUBTRACT: 0x800b,\n\n // Getting GL parameter information\n // Constants passed to getParameter() to specify what information to return.\n\n BLEND_EQUATION: 0x8009,\n BLEND_EQUATION_RGB: 0x8009,\n BLEND_EQUATION_ALPHA: 0x883d,\n BLEND_DST_RGB: 0x80c8,\n BLEND_SRC_RGB: 0x80c9,\n BLEND_DST_ALPHA: 0x80ca,\n BLEND_SRC_ALPHA: 0x80cb,\n BLEND_COLOR: 0x8005,\n ARRAY_BUFFER_BINDING: 0x8894,\n ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\n LINE_WIDTH: 0x0b21,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n CULL_FACE_MODE: 0x0b45,\n FRONT_FACE: 0x0b46,\n DEPTH_RANGE: 0x0b70,\n DEPTH_WRITEMASK: 0x0b72,\n DEPTH_CLEAR_VALUE: 0x0b73,\n DEPTH_FUNC: 0x0b74,\n STENCIL_CLEAR_VALUE: 0x0b91,\n STENCIL_FUNC: 0x0b92,\n STENCIL_FAIL: 0x0b94,\n STENCIL_PASS_DEPTH_FAIL: 0x0b95,\n STENCIL_PASS_DEPTH_PASS: 0x0b96,\n STENCIL_REF: 0x0b97,\n STENCIL_VALUE_MASK: 0x0b93,\n STENCIL_WRITEMASK: 0x0b98,\n STENCIL_BACK_FUNC: 0x8800,\n STENCIL_BACK_FAIL: 0x8801,\n STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,\n STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,\n STENCIL_BACK_REF: 0x8ca3,\n STENCIL_BACK_VALUE_MASK: 0x8ca4,\n STENCIL_BACK_WRITEMASK: 0x8ca5,\n VIEWPORT: 0x0ba2,\n SCISSOR_BOX: 0x0c10,\n COLOR_CLEAR_VALUE: 0x0c22,\n COLOR_WRITEMASK: 0x0c23,\n UNPACK_ALIGNMENT: 0x0cf5,\n PACK_ALIGNMENT: 0x0d05,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n SUBPIXEL_BITS: 0x0d50,\n RED_BITS: 0x0d52,\n GREEN_BITS: 0x0d53,\n BLUE_BITS: 0x0d54,\n ALPHA_BITS: 0x0d55,\n DEPTH_BITS: 0x0d56,\n STENCIL_BITS: 0x0d57,\n POLYGON_OFFSET_UNITS: 0x2a00,\n POLYGON_OFFSET_FACTOR: 0x8038,\n TEXTURE_BINDING_2D: 0x8069,\n SAMPLE_BUFFERS: 0x80a8,\n SAMPLES: 0x80a9,\n SAMPLE_COVERAGE_VALUE: 0x80aa,\n SAMPLE_COVERAGE_INVERT: 0x80ab,\n COMPRESSED_TEXTURE_FORMATS: 0x86a3,\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\n IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\n BROWSER_DEFAULT_WEBGL: 0x9244,\n\n // Buffers\n // Constants passed to bufferData(), bufferSubData(), bindBuffer(), or\n // getBufferParameter().\n\n STATIC_DRAW: 0x88e4,\n STREAM_DRAW: 0x88e0,\n DYNAMIC_DRAW: 0x88e8,\n ARRAY_BUFFER: 0x8892,\n ELEMENT_ARRAY_BUFFER: 0x8893,\n BUFFER_SIZE: 0x8764,\n BUFFER_USAGE: 0x8765,\n\n // Vertex attributes\n // Constants passed to getVertexAttrib().\n\n CURRENT_VERTEX_ATTRIB: 0x8626,\n VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,\n VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,\n VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,\n VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,\n VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,\n VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,\n\n // Culling\n // Constants passed to cullFace().\n\n CULL_FACE: 0x0b44,\n FRONT: 0x0404,\n BACK: 0x0405,\n FRONT_AND_BACK: 0x0408,\n\n // Enabling and disabling\n // Constants passed to enable() or disable().\n\n BLEND: 0x0be2,\n DEPTH_TEST: 0x0b71,\n DITHER: 0x0bd0,\n POLYGON_OFFSET_FILL: 0x8037,\n SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\n SAMPLE_COVERAGE: 0x80a0,\n SCISSOR_TEST: 0x0c11,\n STENCIL_TEST: 0x0b90,\n\n // Errors\n // Constants returned from getError().\n\n NO_ERROR: 0,\n INVALID_ENUM: 0x0500,\n INVALID_VALUE: 0x0501,\n INVALID_OPERATION: 0x0502,\n OUT_OF_MEMORY: 0x0505,\n CONTEXT_LOST_WEBGL: 0x9242,\n\n // Front face directions\n // Constants passed to frontFace().\n\n CW: 0x0900,\n CCW: 0x0901,\n\n // Hints\n // Constants passed to hint()\n\n DONT_CARE: 0x1100,\n FASTEST: 0x1101,\n NICEST: 0x1102,\n GENERATE_MIPMAP_HINT: 0x8192,\n\n // Data types\n\n BYTE: 0x1400,\n UNSIGNED_BYTE: 0x1401,\n SHORT: 0x1402,\n UNSIGNED_SHORT: 0x1403,\n INT: 0x1404,\n UNSIGNED_INT: 0x1405,\n FLOAT: 0x1406,\n DOUBLE: 0x140a,\n\n // Pixel formats\n\n DEPTH_COMPONENT: 0x1902,\n ALPHA: 0x1906,\n RGB: 0x1907,\n RGBA: 0x1908,\n LUMINANCE: 0x1909,\n LUMINANCE_ALPHA: 0x190a,\n\n // Pixel types\n\n // UNSIGNED_BYTE: 0x1401,\n UNSIGNED_SHORT_4_4_4_4: 0x8033,\n UNSIGNED_SHORT_5_5_5_1: 0x8034,\n UNSIGNED_SHORT_5_6_5: 0x8363,\n\n // Shaders\n // Constants passed to createShader() or getShaderParameter()\n\n FRAGMENT_SHADER: 0x8b30,\n VERTEX_SHADER: 0x8b31,\n COMPILE_STATUS: 0x8b81,\n DELETE_STATUS: 0x8b80,\n LINK_STATUS: 0x8b82,\n VALIDATE_STATUS: 0x8b83,\n ATTACHED_SHADERS: 0x8b85,\n ACTIVE_ATTRIBUTES: 0x8b89,\n ACTIVE_UNIFORMS: 0x8b86,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n SHADER_TYPE: 0x8b4f,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n CURRENT_PROGRAM: 0x8b8d,\n\n // Depth or stencil tests\n // Constants passed to depthFunc() or stencilFunc().\n\n NEVER: 0x0200,\n ALWAYS: 0x0207,\n LESS: 0x0201,\n EQUAL: 0x0202,\n LEQUAL: 0x0203,\n GREATER: 0x0204,\n GEQUAL: 0x0206,\n NOTEQUAL: 0x0205,\n\n // Stencil actions\n // Constants passed to stencilOp().\n\n KEEP: 0x1e00,\n REPLACE: 0x1e01,\n INCR: 0x1e02,\n DECR: 0x1e03,\n INVERT: 0x150a,\n INCR_WRAP: 0x8507,\n DECR_WRAP: 0x8508,\n\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n\n NEAREST: 0x2600,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_NEAREST: 0x2700,\n LINEAR_MIPMAP_NEAREST: 0x2701,\n NEAREST_MIPMAP_LINEAR: 0x2702,\n LINEAR_MIPMAP_LINEAR: 0x2703,\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n TEXTURE_2D: 0x0de1,\n TEXTURE: 0x1702,\n TEXTURE_CUBE_MAP: 0x8513,\n TEXTURE_BINDING_CUBE_MAP: 0x8514,\n TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\n TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\n TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\n TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\n MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\n // TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.\n TEXTURE0: 0x84c0,\n ACTIVE_TEXTURE: 0x84e0,\n REPEAT: 0x2901,\n CLAMP_TO_EDGE: 0x812f,\n MIRRORED_REPEAT: 0x8370,\n\n // Emulation\n TEXTURE_WIDTH: 0x1000,\n TEXTURE_HEIGHT: 0x1001,\n\n // Uniform types\n\n FLOAT_VEC2: 0x8b50,\n FLOAT_VEC3: 0x8b51,\n FLOAT_VEC4: 0x8b52,\n INT_VEC2: 0x8b53,\n INT_VEC3: 0x8b54,\n INT_VEC4: 0x8b55,\n BOOL: 0x8b56,\n BOOL_VEC2: 0x8b57,\n BOOL_VEC3: 0x8b58,\n BOOL_VEC4: 0x8b59,\n FLOAT_MAT2: 0x8b5a,\n FLOAT_MAT3: 0x8b5b,\n FLOAT_MAT4: 0x8b5c,\n SAMPLER_2D: 0x8b5e,\n SAMPLER_CUBE: 0x8b60,\n\n // Shader precision-specified types\n\n LOW_FLOAT: 0x8df0,\n MEDIUM_FLOAT: 0x8df1,\n HIGH_FLOAT: 0x8df2,\n LOW_INT: 0x8df3,\n MEDIUM_INT: 0x8df4,\n HIGH_INT: 0x8df5,\n\n // Framebuffers and renderbuffers\n\n FRAMEBUFFER: 0x8d40,\n RENDERBUFFER: 0x8d41,\n RGBA4: 0x8056,\n RGB5_A1: 0x8057,\n RGB565: 0x8d62,\n DEPTH_COMPONENT16: 0x81a5,\n STENCIL_INDEX: 0x1901,\n STENCIL_INDEX8: 0x8d48,\n DEPTH_STENCIL: 0x84f9,\n RENDERBUFFER_WIDTH: 0x8d42,\n RENDERBUFFER_HEIGHT: 0x8d43,\n RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\n RENDERBUFFER_RED_SIZE: 0x8d50,\n RENDERBUFFER_GREEN_SIZE: 0x8d51,\n RENDERBUFFER_BLUE_SIZE: 0x8d52,\n RENDERBUFFER_ALPHA_SIZE: 0x8d53,\n RENDERBUFFER_DEPTH_SIZE: 0x8d54,\n RENDERBUFFER_STENCIL_SIZE: 0x8d55,\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\n COLOR_ATTACHMENT0: 0x8ce0,\n DEPTH_ATTACHMENT: 0x8d00,\n STENCIL_ATTACHMENT: 0x8d20,\n DEPTH_STENCIL_ATTACHMENT: 0x821a,\n NONE: 0,\n FRAMEBUFFER_COMPLETE: 0x8cd5,\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\n FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\n FRAMEBUFFER_BINDING: 0x8ca6,\n RENDERBUFFER_BINDING: 0x8ca7,\n READ_FRAMEBUFFER: 0x8ca8,\n DRAW_FRAMEBUFFER: 0x8ca9,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n INVALID_FRAMEBUFFER_OPERATION: 0x0506,\n\n // Pixel storage modes\n // Constants passed to pixelStorei().\n\n UNPACK_FLIP_Y_WEBGL: 0x9240,\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\n UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\n\n // /////////////////////////////////////////////////////\n // Additional constants defined WebGL 2\n // These constants are defined on the WebGL2RenderingContext interface.\n // All WebGL 1 constants are also available in a WebGL 2 context.\n // /////////////////////////////////////////////////////\n\n // Getting GL parameter information\n // Constants passed to getParameter()\n // to specify what information to return.\n\n READ_BUFFER: 0x0c02,\n UNPACK_ROW_LENGTH: 0x0cf2,\n UNPACK_SKIP_ROWS: 0x0cf3,\n UNPACK_SKIP_PIXELS: 0x0cf4,\n PACK_ROW_LENGTH: 0x0d02,\n PACK_SKIP_ROWS: 0x0d03,\n PACK_SKIP_PIXELS: 0x0d04,\n TEXTURE_BINDING_3D: 0x806a,\n UNPACK_SKIP_IMAGES: 0x806d,\n UNPACK_IMAGE_HEIGHT: 0x806e,\n MAX_3D_TEXTURE_SIZE: 0x8073,\n MAX_ELEMENTS_VERTICES: 0x80e8,\n MAX_ELEMENTS_INDICES: 0x80e9,\n MAX_TEXTURE_LOD_BIAS: 0x84fd,\n MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\n MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\n MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\n MAX_VARYING_COMPONENTS: 0x8b4b,\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n RASTERIZER_DISCARD: 0x8c89,\n VERTEX_ARRAY_BINDING: 0x85b5,\n MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,\n MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,\n MAX_SERVER_WAIT_TIMEOUT: 0x9111,\n MAX_ELEMENT_INDEX: 0x8d6b,\n\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n\n RED: 0x1903,\n RGB8: 0x8051,\n RGBA8: 0x8058,\n RGB10_A2: 0x8059,\n TEXTURE_3D: 0x806f,\n TEXTURE_WRAP_R: 0x8072,\n TEXTURE_MIN_LOD: 0x813a,\n TEXTURE_MAX_LOD: 0x813b,\n TEXTURE_BASE_LEVEL: 0x813c,\n TEXTURE_MAX_LEVEL: 0x813d,\n TEXTURE_COMPARE_MODE: 0x884c,\n TEXTURE_COMPARE_FUNC: 0x884d,\n SRGB: 0x8c40,\n SRGB8: 0x8c41,\n SRGB8_ALPHA8: 0x8c43,\n COMPARE_REF_TO_TEXTURE: 0x884e,\n RGBA32F: 0x8814,\n RGB32F: 0x8815,\n RGBA16F: 0x881a,\n RGB16F: 0x881b,\n TEXTURE_2D_ARRAY: 0x8c1a,\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n R11F_G11F_B10F: 0x8c3a,\n RGB9_E5: 0x8c3d,\n RGBA32UI: 0x8d70,\n RGB32UI: 0x8d71,\n RGBA16UI: 0x8d76,\n RGB16UI: 0x8d77,\n RGBA8UI: 0x8d7c,\n RGB8UI: 0x8d7d,\n RGBA32I: 0x8d82,\n RGB32I: 0x8d83,\n RGBA16I: 0x8d88,\n RGB16I: 0x8d89,\n RGBA8I: 0x8d8e,\n RGB8I: 0x8d8f,\n RED_INTEGER: 0x8d94,\n RGB_INTEGER: 0x8d98,\n RGBA_INTEGER: 0x8d99,\n R8: 0x8229,\n RG8: 0x822b,\n R16F: 0x822d,\n R32F: 0x822e,\n RG16F: 0x822f,\n RG32F: 0x8230,\n R8I: 0x8231,\n R8UI: 0x8232,\n R16I: 0x8233,\n R16UI: 0x8234,\n R32I: 0x8235,\n R32UI: 0x8236,\n RG8I: 0x8237,\n RG8UI: 0x8238,\n RG16I: 0x8239,\n RG16UI: 0x823a,\n RG32I: 0x823b,\n RG32UI: 0x823c,\n R8_SNORM: 0x8f94,\n RG8_SNORM: 0x8f95,\n RGB8_SNORM: 0x8f96,\n RGBA8_SNORM: 0x8f97,\n RGB10_A2UI: 0x906f,\n\n /* covered by extension\n COMPRESSED_R11_EAC : 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC : 0x9273,\n COMPRESSED_RGB8_ETC2 : 0x9274,\n COMPRESSED_SRGB8_ETC2: 0x9275,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 : 0x9276,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC : 0x9277,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9278,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : 0x9279,\n */\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n\n // Pixel types\n\n UNSIGNED_INT_2_10_10_10_REV: 0x8368,\n UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,\n UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,\n FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,\n UNSIGNED_INT_24_8: 0x84fa,\n HALF_FLOAT: 0x140b,\n RG: 0x8227,\n RG_INTEGER: 0x8228,\n INT_2_10_10_10_REV: 0x8d9f,\n\n // Queries\n\n CURRENT_QUERY: 0x8865,\n QUERY_RESULT: 0x8866,\n QUERY_RESULT_AVAILABLE: 0x8867,\n ANY_SAMPLES_PASSED: 0x8c2f,\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n\n // Draw buffers\n\n MAX_DRAW_BUFFERS: 0x8824,\n DRAW_BUFFER0: 0x8825,\n DRAW_BUFFER1: 0x8826,\n DRAW_BUFFER2: 0x8827,\n DRAW_BUFFER3: 0x8828,\n DRAW_BUFFER4: 0x8829,\n DRAW_BUFFER5: 0x882a,\n DRAW_BUFFER6: 0x882b,\n DRAW_BUFFER7: 0x882c,\n DRAW_BUFFER8: 0x882d,\n DRAW_BUFFER9: 0x882e,\n DRAW_BUFFER10: 0x882f,\n DRAW_BUFFER11: 0x8830,\n DRAW_BUFFER12: 0x8831,\n DRAW_BUFFER13: 0x8832,\n DRAW_BUFFER14: 0x8833,\n DRAW_BUFFER15: 0x8834,\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\n COLOR_ATTACHMENT1: 0x8ce1,\n COLOR_ATTACHMENT2: 0x8ce2,\n COLOR_ATTACHMENT3: 0x8ce3,\n COLOR_ATTACHMENT4: 0x8ce4,\n COLOR_ATTACHMENT5: 0x8ce5,\n COLOR_ATTACHMENT6: 0x8ce6,\n COLOR_ATTACHMENT7: 0x8ce7,\n COLOR_ATTACHMENT8: 0x8ce8,\n COLOR_ATTACHMENT9: 0x8ce9,\n COLOR_ATTACHMENT10: 0x8cea,\n COLOR_ATTACHMENT11: 0x8ceb,\n COLOR_ATTACHMENT12: 0x8cec,\n COLOR_ATTACHMENT13: 0x8ced,\n COLOR_ATTACHMENT14: 0x8cee,\n COLOR_ATTACHMENT15: 0x8cef,\n\n // Samplers\n\n SAMPLER_3D: 0x8b5f,\n SAMPLER_2D_SHADOW: 0x8b62,\n SAMPLER_2D_ARRAY: 0x8dc1,\n SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,\n SAMPLER_CUBE_SHADOW: 0x8dc5,\n INT_SAMPLER_2D: 0x8dca,\n INT_SAMPLER_3D: 0x8dcb,\n INT_SAMPLER_CUBE: 0x8dcc,\n INT_SAMPLER_2D_ARRAY: 0x8dcf,\n UNSIGNED_INT_SAMPLER_2D: 0x8dd2,\n UNSIGNED_INT_SAMPLER_3D: 0x8dd3,\n UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,\n MAX_SAMPLES: 0x8d57,\n SAMPLER_BINDING: 0x8919,\n\n // Buffers\n\n PIXEL_PACK_BUFFER: 0x88eb,\n PIXEL_UNPACK_BUFFER: 0x88ec,\n PIXEL_PACK_BUFFER_BINDING: 0x88ed,\n PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,\n COPY_READ_BUFFER: 0x8f36,\n COPY_WRITE_BUFFER: 0x8f37,\n COPY_READ_BUFFER_BINDING: 0x8f36,\n COPY_WRITE_BUFFER_BINDING: 0x8f37,\n\n // Data types\n\n FLOAT_MAT2x3: 0x8b65,\n FLOAT_MAT2x4: 0x8b66,\n FLOAT_MAT3x2: 0x8b67,\n FLOAT_MAT3x4: 0x8b68,\n FLOAT_MAT4x2: 0x8b69,\n FLOAT_MAT4x3: 0x8b6a,\n UNSIGNED_INT_VEC2: 0x8dc6,\n UNSIGNED_INT_VEC3: 0x8dc7,\n UNSIGNED_INT_VEC4: 0x8dc8,\n UNSIGNED_NORMALIZED: 0x8c17,\n SIGNED_NORMALIZED: 0x8f9c,\n\n // Vertex attributes\n\n VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n\n // Transform feedback\n\n TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,\n TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,\n INTERLEAVED_ATTRIBS: 0x8c8c,\n SEPARATE_ATTRIBS: 0x8c8d,\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n TRANSFORM_FEEDBACK: 0x8e22,\n TRANSFORM_FEEDBACK_PAUSED: 0x8e23,\n TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,\n TRANSFORM_FEEDBACK_BINDING: 0x8e25,\n\n // Framebuffers and renderbuffers\n\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,\n FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,\n FRAMEBUFFER_DEFAULT: 0x8218,\n // DEPTH_STENCIL_ATTACHMENT : 0x821A,\n // DEPTH_STENCIL: 0x84F9,\n DEPTH24_STENCIL8: 0x88f0,\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6,\n READ_FRAMEBUFFER_BINDING: 0x8caa,\n RENDERBUFFER_SAMPLES: 0x8cab,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,\n\n // Uniforms\n\n UNIFORM_BUFFER: 0x8a11,\n UNIFORM_BUFFER_BINDING: 0x8a28,\n UNIFORM_BUFFER_START: 0x8a29,\n UNIFORM_BUFFER_SIZE: 0x8a2a,\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n UNIFORM_TYPE: 0x8a37,\n UNIFORM_SIZE: 0x8a38,\n UNIFORM_BLOCK_INDEX: 0x8a3a,\n UNIFORM_OFFSET: 0x8a3b,\n UNIFORM_ARRAY_STRIDE: 0x8a3c,\n UNIFORM_MATRIX_STRIDE: 0x8a3d,\n UNIFORM_IS_ROW_MAJOR: 0x8a3e,\n UNIFORM_BLOCK_BINDING: 0x8a3f,\n UNIFORM_BLOCK_DATA_SIZE: 0x8a40,\n UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,\n\n // Sync objects\n\n OBJECT_TYPE: 0x9112,\n SYNC_CONDITION: 0x9113,\n SYNC_STATUS: 0x9114,\n SYNC_FLAGS: 0x9115,\n SYNC_FENCE: 0x9116,\n SYNC_GPU_COMMANDS_COMPLETE: 0x9117,\n UNSIGNALED: 0x9118,\n SIGNALED: 0x9119,\n ALREADY_SIGNALED: 0x911a,\n TIMEOUT_EXPIRED: 0x911b,\n CONDITION_SATISFIED: 0x911c,\n WAIT_FAILED: 0x911d,\n SYNC_FLUSH_COMMANDS_BIT: 0x00000001,\n\n // Miscellaneous constants\n\n COLOR: 0x1800,\n DEPTH: 0x1801,\n STENCIL: 0x1802,\n MIN: 0x8007,\n MAX: 0x8008,\n DEPTH_COMPONENT24: 0x81a6,\n STREAM_READ: 0x88e1,\n STREAM_COPY: 0x88e2,\n STATIC_READ: 0x88e5,\n STATIC_COPY: 0x88e6,\n DYNAMIC_READ: 0x88e9,\n DYNAMIC_COPY: 0x88ea,\n DEPTH_COMPONENT32F: 0x8cac,\n DEPTH32F_STENCIL8: 0x8cad,\n INVALID_INDEX: 0xffffffff,\n TIMEOUT_IGNORED: -1,\n MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247,\n\n // Constants defined in WebGL extensions\n\n // ANGLE_instanced_arrays\n\n VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,\n\n // WEBGL_debug_renderer_info\n\n UNMASKED_VENDOR_WEBGL: 0x9245,\n UNMASKED_RENDERER_WEBGL: 0x9246,\n\n // EXT_texture_filter_anisotropic\n\n MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\n TEXTURE_MAX_ANISOTROPY_EXT: 0x84fe,\n\n // WEBGL_compressed_texture_s3tc\n\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n\n // WEBGL_compressed_texture_es3\n\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n\n // WEBGL_compressed_texture_pvrtc\n\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n\n // WEBGL_compressed_texture_etc1\n\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n\n // WEBGL_compressed_texture_atc\n\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n\n // WEBGL_depth_texture\n\n UNSIGNED_INT_24_8_WEBGL: 0x84fa,\n\n // OES_texture_half_float\n\n HALF_FLOAT_OES: 0x8d61,\n\n // WEBGL_color_buffer_float\n\n RGBA32F_EXT: 0x8814,\n RGB32F_EXT: 0x8815,\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211,\n UNSIGNED_NORMALIZED_EXT: 0x8c17,\n\n // EXT_blend_minmax\n\n MIN_EXT: 0x8007,\n MAX_EXT: 0x8008,\n\n // EXT_sRGB\n\n SRGB_EXT: 0x8c40,\n SRGB_ALPHA_EXT: 0x8c42,\n SRGB8_ALPHA8_EXT: 0x8c43,\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210,\n\n // OES_standard_derivatives\n\n FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8b8b,\n\n // WEBGL_draw_buffers\n\n COLOR_ATTACHMENT0_WEBGL: 0x8ce0,\n COLOR_ATTACHMENT1_WEBGL: 0x8ce1,\n COLOR_ATTACHMENT2_WEBGL: 0x8ce2,\n COLOR_ATTACHMENT3_WEBGL: 0x8ce3,\n COLOR_ATTACHMENT4_WEBGL: 0x8ce4,\n COLOR_ATTACHMENT5_WEBGL: 0x8ce5,\n COLOR_ATTACHMENT6_WEBGL: 0x8ce6,\n COLOR_ATTACHMENT7_WEBGL: 0x8ce7,\n COLOR_ATTACHMENT8_WEBGL: 0x8ce8,\n COLOR_ATTACHMENT9_WEBGL: 0x8ce9,\n COLOR_ATTACHMENT10_WEBGL: 0x8cea,\n COLOR_ATTACHMENT11_WEBGL: 0x8ceb,\n COLOR_ATTACHMENT12_WEBGL: 0x8cec,\n COLOR_ATTACHMENT13_WEBGL: 0x8ced,\n COLOR_ATTACHMENT14_WEBGL: 0x8cee,\n COLOR_ATTACHMENT15_WEBGL: 0x8cef,\n DRAW_BUFFER0_WEBGL: 0x8825,\n DRAW_BUFFER1_WEBGL: 0x8826,\n DRAW_BUFFER2_WEBGL: 0x8827,\n DRAW_BUFFER3_WEBGL: 0x8828,\n DRAW_BUFFER4_WEBGL: 0x8829,\n DRAW_BUFFER5_WEBGL: 0x882a,\n DRAW_BUFFER6_WEBGL: 0x882b,\n DRAW_BUFFER7_WEBGL: 0x882c,\n DRAW_BUFFER8_WEBGL: 0x882d,\n DRAW_BUFFER9_WEBGL: 0x882e,\n DRAW_BUFFER10_WEBGL: 0x882f,\n DRAW_BUFFER11_WEBGL: 0x8830,\n DRAW_BUFFER12_WEBGL: 0x8831,\n DRAW_BUFFER13_WEBGL: 0x8832,\n DRAW_BUFFER14_WEBGL: 0x8833,\n DRAW_BUFFER15_WEBGL: 0x8834,\n MAX_COLOR_ATTACHMENTS_WEBGL: 0x8cdf,\n MAX_DRAW_BUFFERS_WEBGL: 0x8824,\n\n // OES_vertex_array_object\n\n VERTEX_ARRAY_BINDING_OES: 0x85b5,\n\n // EXT_disjoint_timer_query\n\n QUERY_COUNTER_BITS_EXT: 0x8864,\n CURRENT_QUERY_EXT: 0x8865,\n QUERY_RESULT_EXT: 0x8866,\n QUERY_RESULT_AVAILABLE_EXT: 0x8867,\n TIME_ELAPSED_EXT: 0x88bf,\n TIMESTAMP_EXT: 0x8e28,\n GPU_DISJOINT_EXT: 0x8fbb // A Boolean indicating whether or not the GPU performed any disjoint operation.\n};\n","import Geometry from '../geometry/geometry';\nimport {uid} from '@luma.gl/webgl';\n\nconst INDEX_OFFSETS = {\n x: [2, 0, 1],\n y: [0, 1, 2],\n z: [1, 2, 0]\n};\n\nexport default class TruncatedConeGeometry extends Geometry {\n constructor(props = {}) {\n const {id = uid('truncated-code-geometry')} = props;\n const {indices, attributes} = tesselateTruncatedCone(props);\n super({\n ...props,\n id,\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\n/* eslint-disable max-statements, complexity */\nfunction tesselateTruncatedCone(props) {\n const {\n bottomRadius = 0,\n topRadius = 0,\n height = 1,\n nradial = 10,\n nvertical = 10,\n verticalAxis = 'y',\n topCap = false,\n bottomCap = false\n } = props;\n\n const extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);\n const numVertices = (nradial + 1) * (nvertical + 1 + extra);\n\n const slant = Math.atan2(bottomRadius - topRadius, height);\n const msin = Math.sin;\n const mcos = Math.cos;\n const mpi = Math.PI;\n const cosSlant = mcos(slant);\n const sinSlant = msin(slant);\n const start = topCap ? -2 : 0;\n const end = nvertical + (bottomCap ? 2 : 0);\n const vertsAroundEdge = nradial + 1;\n\n const indices = new Uint16Array(nradial * (nvertical + extra) * 6);\n const indexOffset = INDEX_OFFSETS[verticalAxis];\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n let i3 = 0;\n let i2 = 0;\n for (let i = start; i <= end; i++) {\n let v = i / nvertical;\n let y = height * v;\n let ringRadius;\n\n if (i < 0) {\n y = 0;\n v = 1;\n ringRadius = bottomRadius;\n } else if (i > nvertical) {\n y = height;\n v = 1;\n ringRadius = topRadius;\n } else {\n ringRadius = bottomRadius + (topRadius - bottomRadius) * (i / nvertical);\n }\n if (i === -2 || i === nvertical + 2) {\n ringRadius = 0;\n v = 0;\n }\n y -= height / 2;\n for (let j = 0; j < vertsAroundEdge; j++) {\n const sin = msin((j * mpi * 2) / nradial);\n const cos = mcos((j * mpi * 2) / nradial);\n\n positions[i3 + indexOffset[0]] = sin * ringRadius;\n positions[i3 + indexOffset[1]] = y;\n positions[i3 + indexOffset[2]] = cos * ringRadius;\n\n normals[i3 + indexOffset[0]] = i < 0 || i > nvertical ? 0 : sin * cosSlant;\n normals[i3 + indexOffset[1]] = i < 0 ? -1 : i > nvertical ? 1 : sinSlant;\n normals[i3 + indexOffset[2]] = i < 0 || i > nvertical ? 0 : cos * cosSlant;\n\n texCoords[i2 + 0] = j / nradial;\n texCoords[i2 + 1] = v;\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n for (let i = 0; i < nvertical + extra; i++) {\n for (let j = 0; j < nradial; j++) {\n const index = (i * nradial + j) * 6;\n indices[index + 0] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 1] = vertsAroundEdge * (i + 0) + 1 + j;\n indices[index + 2] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 3] = vertsAroundEdge * (i + 0) + 0 + j;\n indices[index + 4] = vertsAroundEdge * (i + 1) + 1 + j;\n indices[index + 5] = vertsAroundEdge * (i + 1) + 0 + j;\n }\n }\n\n return {\n indices,\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n}\n","import TruncatedConeGeometry from './truncated-cone-geometry';\nimport {uid} from '@luma.gl/webgl';\n\nexport default class ConeGeometry extends TruncatedConeGeometry {\n constructor(props = {}) {\n const {id = uid('cone-geometry'), radius = 1, cap = true} = props;\n super({\n ...props,\n id,\n topRadius: 0,\n topCap: Boolean(cap),\n bottomCap: Boolean(cap),\n bottomRadius: radius\n });\n }\n}\n","import TruncatedConeGeometry from './truncated-cone-geometry';\nimport {uid} from '@luma.gl/webgl';\n\nexport default class CylinderGeometry extends TruncatedConeGeometry {\n constructor(props = {}) {\n const {id = uid('cylinder-geometry'), radius = 1} = props;\n super({\n ...props,\n id,\n bottomRadius: radius,\n topRadius: radius\n });\n }\n}\n","import {Vector3} from '@math.gl/core';\nimport Geometry from '../geometry/geometry';\nimport {uid} from '@luma.gl/webgl';\n\n/* eslint-disable comma-spacing, max-statements, complexity */\n\nconst ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];\nconst ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];\n\nexport default class IcoSphereGeometry extends Geometry {\n constructor(props = {}) {\n const {id = uid('ico-sphere-geometry')} = props;\n const {indices, attributes} = tesselateIcosaHedron(props);\n super({\n ...props,\n id,\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\nfunction tesselateIcosaHedron(props) {\n const {iterations = 0} = props;\n\n const PI = Math.PI;\n const PI2 = PI * 2;\n\n const positions = [...ICO_POSITIONS];\n let indices = [...ICO_INDICES];\n\n positions.push();\n indices.push();\n\n const getMiddlePoint = (() => {\n const pointMemo = {};\n\n return (i1, i2) => {\n i1 *= 3;\n i2 *= 3;\n const mini = i1 < i2 ? i1 : i2;\n const maxi = i1 > i2 ? i1 : i2;\n const key = `${mini}|${maxi}`;\n\n if (key in pointMemo) {\n return pointMemo[key];\n }\n\n const x1 = positions[i1];\n const y1 = positions[i1 + 1];\n const z1 = positions[i1 + 2];\n const x2 = positions[i2];\n const y2 = positions[i2 + 1];\n const z2 = positions[i2 + 2];\n let xm = (x1 + x2) / 2;\n let ym = (y1 + y2) / 2;\n let zm = (z1 + z2) / 2;\n const len = Math.sqrt(xm * xm + ym * ym + zm * zm);\n\n xm /= len;\n ym /= len;\n zm /= len;\n\n positions.push(xm, ym, zm);\n\n return (pointMemo[key] = positions.length / 3 - 1);\n };\n })();\n\n for (let i = 0; i < iterations; i++) {\n const indices2 = [];\n for (let j = 0; j < indices.length; j += 3) {\n const a = getMiddlePoint(indices[j + 0], indices[j + 1]);\n const b = getMiddlePoint(indices[j + 1], indices[j + 2]);\n const c = getMiddlePoint(indices[j + 2], indices[j + 0]);\n\n indices2.push(c, indices[j + 0], a, a, indices[j + 1], b, b, indices[j + 2], c, a, b, c);\n }\n indices = indices2;\n }\n\n // Calculate texCoords and normals\n const normals = new Array(positions.length);\n const texCoords = new Array((positions.length / 3) * 2);\n\n const l = indices.length;\n for (let i = l - 3; i >= 0; i -= 3) {\n const i1 = indices[i + 0];\n const i2 = indices[i + 1];\n const i3 = indices[i + 2];\n const in1 = i1 * 3;\n const in2 = i2 * 3;\n const in3 = i3 * 3;\n const iu1 = i1 * 2;\n const iu2 = i2 * 2;\n const iu3 = i3 * 2;\n const x1 = positions[in1 + 0];\n const y1 = positions[in1 + 1];\n const z1 = positions[in1 + 2];\n const theta1 = Math.acos(z1 / Math.sqrt(x1 * x1 + y1 * y1 + z1 * z1));\n const phi1 = Math.atan2(y1, x1) + PI;\n const v1 = theta1 / PI;\n const u1 = 1 - phi1 / PI2;\n const x2 = positions[in2 + 0];\n const y2 = positions[in2 + 1];\n const z2 = positions[in2 + 2];\n const theta2 = Math.acos(z2 / Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2));\n const phi2 = Math.atan2(y2, x2) + PI;\n const v2 = theta2 / PI;\n const u2 = 1 - phi2 / PI2;\n const x3 = positions[in3 + 0];\n const y3 = positions[in3 + 1];\n const z3 = positions[in3 + 2];\n const theta3 = Math.acos(z3 / Math.sqrt(x3 * x3 + y3 * y3 + z3 * z3));\n const phi3 = Math.atan2(y3, x3) + PI;\n const v3 = theta3 / PI;\n const u3 = 1 - phi3 / PI2;\n const vec1 = [x3 - x2, y3 - y2, z3 - z2];\n const vec2 = [x1 - x2, y1 - y2, z1 - z2];\n const normal = new Vector3(vec1).cross(vec2).normalize();\n let newIndex;\n\n if (\n (u1 === 0 || u2 === 0 || u3 === 0) &&\n (u1 === 0 || u1 > 0.5) &&\n (u2 === 0 || u2 > 0.5) &&\n (u3 === 0 || u3 > 0.5)\n ) {\n positions.push(positions[in1 + 0], positions[in1 + 1], positions[in1 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v1;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in2 + 0], positions[in2 + 1], positions[in2 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v2;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n\n positions.push(positions[in3 + 0], positions[in3 + 1], positions[in3 + 2]);\n newIndex = positions.length / 3 - 1;\n indices.push(newIndex);\n texCoords[newIndex * 2 + 0] = 1;\n texCoords[newIndex * 2 + 1] = v3;\n normals[newIndex * 3 + 0] = normal.x;\n normals[newIndex * 3 + 1] = normal.y;\n normals[newIndex * 3 + 2] = normal.z;\n }\n\n normals[in1 + 0] = normals[in2 + 0] = normals[in3 + 0] = normal.x;\n normals[in1 + 1] = normals[in2 + 1] = normals[in3 + 1] = normal.y;\n normals[in1 + 2] = normals[in2 + 2] = normals[in3 + 2] = normal.z;\n\n texCoords[iu1 + 0] = u1;\n texCoords[iu1 + 1] = v1;\n\n texCoords[iu2 + 0] = u2;\n texCoords[iu2 + 1] = v2;\n\n texCoords[iu3 + 0] = u3;\n texCoords[iu3 + 1] = v3;\n }\n\n return {\n indices: {size: 1, value: new Uint16Array(indices)},\n attributes: {\n POSITION: {size: 3, value: new Float32Array(positions)},\n NORMAL: {size: 3, value: new Float32Array(normals)},\n TEXCOORD_0: {size: 2, value: new Float32Array(texCoords)}\n }\n };\n}\n","import Geometry from '../geometry/geometry';\nimport {unpackIndexedGeometry} from '../geometry/geometry-utils';\nimport {uid} from '@luma.gl/webgl';\n\nexport default class PlaneGeometry extends Geometry {\n constructor(props = {}) {\n const {id = uid('plane-geometry')} = props;\n\n const {indices, attributes} = tesselatePlane(props);\n super({\n ...props,\n id,\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\n/* eslint-disable max-statements, complexity */\n/* eslint-disable complexity, max-statements */\nfunction tesselatePlane(props) {\n const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;\n\n const coords = type.split(',');\n // width, height\n let c1len = props[`${coords[0]}len`] || 1;\n const c2len = props[`${coords[1]}len`] || 1;\n // subdivisionsWidth, subdivisionsDepth\n const subdivisions1 = props[`n${coords[0]}`] || 1;\n const subdivisions2 = props[`n${coords[1]}`] || 1;\n const numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n if (flipCull) {\n c1len = -c1len;\n }\n\n let i2 = 0;\n let i3 = 0;\n for (let z = 0; z <= subdivisions2; z++) {\n for (let x = 0; x <= subdivisions1; x++) {\n const u = x / subdivisions1;\n const v = z / subdivisions2;\n texCoords[i2 + 0] = flipCull ? 1 - u : u;\n texCoords[i2 + 1] = v;\n\n switch (type) {\n case 'x,y':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = c2len * v - c2len * 0.5;\n positions[i3 + 2] = offset;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = flipCull ? 1 : -1;\n break;\n\n case 'x,z':\n positions[i3 + 0] = c1len * u - c1len * 0.5;\n positions[i3 + 1] = offset;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = 0;\n normals[i3 + 1] = flipCull ? 1 : -1;\n normals[i3 + 2] = 0;\n break;\n\n case 'y,z':\n positions[i3 + 0] = offset;\n positions[i3 + 1] = c1len * u - c1len * 0.5;\n positions[i3 + 2] = c2len * v - c2len * 0.5;\n\n normals[i3 + 0] = flipCull ? 1 : -1;\n normals[i3 + 1] = 0;\n normals[i3 + 2] = 0;\n break;\n\n default:\n throw new Error('PlaneGeometry: unknown type');\n }\n\n i2 += 2;\n i3 += 3;\n }\n }\n\n const numVertsAcross = subdivisions1 + 1;\n const indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);\n\n for (let z = 0; z < subdivisions2; z++) {\n for (let x = 0; x < subdivisions1; x++) {\n const index = (z * subdivisions1 + x) * 6;\n // Make triangle 1 of quad.\n indices[index + 0] = (z + 0) * numVertsAcross + x;\n indices[index + 1] = (z + 1) * numVertsAcross + x;\n indices[index + 2] = (z + 0) * numVertsAcross + x + 1;\n\n // Make triangle 2 of quad.\n indices[index + 3] = (z + 1) * numVertsAcross + x;\n indices[index + 4] = (z + 1) * numVertsAcross + x + 1;\n indices[index + 5] = (z + 0) * numVertsAcross + x + 1;\n }\n }\n\n const geometry = {\n indices: {size: 1, value: indices},\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n\n // Optionally, unpack indexed geometry\n return unpack ? unpackIndexedGeometry(geometry) : geometry;\n}\n","export function unpackIndexedGeometry(geometry) {\n const {indices, attributes} = geometry;\n if (!indices) {\n return geometry;\n }\n\n const vertexCount = indices.value.length;\n const unpackedAttributes = {};\n\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {constant, value, size} = attribute;\n if (constant || !size) {\n continue; // eslint-disable-line\n }\n const unpackedValue = new value.constructor(vertexCount * size);\n for (let x = 0; x < vertexCount; ++x) {\n const index = indices.value[x];\n for (let i = 0; i < size; i++) {\n unpackedValue[x * size + i] = value[index * size + i];\n }\n }\n unpackedAttributes[attributeName] = {size, value: unpackedValue};\n }\n\n return {\n attributes: Object.assign({}, attributes, unpackedAttributes)\n };\n}\n","import Geometry from '../geometry/geometry';\nimport {uid} from '@luma.gl/webgl';\n\nexport default class SphereGeometry extends Geometry {\n constructor(props = {}) {\n const {id = uid('sphere-geometry')} = props;\n const {indices, attributes} = tesselateSphere(props);\n super({\n ...props,\n id,\n indices,\n attributes: {...attributes, ...props.attributes}\n });\n }\n}\n\n// Primitives inspired by TDL http://code.google.com/p/webglsamples/,\n// copyright 2011 Google Inc. new BSD License\n// (http://www.opensource.org/licenses/bsd-license.php).\n/* eslint-disable max-statements, complexity */\nfunction tesselateSphere(props) {\n const {nlat = 10, nlong = 10} = props;\n let {radius = 1} = props;\n\n const startLat = 0;\n const endLat = Math.PI;\n const latRange = endLat - startLat;\n const startLong = 0;\n const endLong = 2 * Math.PI;\n const longRange = endLong - startLong;\n const numVertices = (nlat + 1) * (nlong + 1);\n\n if (typeof radius === 'number') {\n const value = radius;\n radius = (n1, n2, n3, u, v) => value;\n }\n\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const texCoords = new Float32Array(numVertices * 2);\n\n const IndexType = numVertices > 0xffff ? Uint32Array : Uint16Array;\n const indices = new IndexType(nlat * nlong * 6);\n\n // Create positions, normals and texCoords\n for (let y = 0; y <= nlat; y++) {\n for (let x = 0; x <= nlong; x++) {\n const u = x / nlong;\n const v = y / nlat;\n\n const index = x + y * (nlong + 1);\n const i2 = index * 2;\n const i3 = index * 3;\n\n const theta = longRange * u;\n const phi = latRange * v;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n const ux = cosTheta * sinPhi;\n const uy = cosPhi;\n const uz = sinTheta * sinPhi;\n\n const r = radius(ux, uy, uz, u, v);\n\n positions[i3 + 0] = r * ux;\n positions[i3 + 1] = r * uy;\n positions[i3 + 2] = r * uz;\n\n normals[i3 + 0] = ux;\n normals[i3 + 1] = uy;\n normals[i3 + 2] = uz;\n\n texCoords[i2 + 0] = u;\n texCoords[i2 + 1] = 1 - v;\n }\n }\n\n // Create indices\n const numVertsAround = nlong + 1;\n for (let x = 0; x < nlong; x++) {\n for (let y = 0; y < nlat; y++) {\n const index = (x * nlat + y) * 6;\n\n indices[index + 0] = y * numVertsAround + x;\n indices[index + 1] = y * numVertsAround + x + 1;\n indices[index + 2] = (y + 1) * numVertsAround + x;\n\n indices[index + 3] = (y + 1) * numVertsAround + x;\n indices[index + 4] = y * numVertsAround + x + 1;\n indices[index + 5] = (y + 1) * numVertsAround + x + 1;\n }\n }\n\n return {\n indices: {size: 1, value: indices},\n attributes: {\n POSITION: {size: 3, value: positions},\n NORMAL: {size: 3, value: normals},\n TEXCOORD_0: {size: 2, value: texCoords}\n }\n };\n}\n","/** @typedef {import('./fp64-utils')} types */\n\n/**\n * Calculate WebGL 64 bit float\n * @type {types['fp64ify']}\n */\nexport function fp64ify(a, out = [], startIndex = 0) {\n const hiPart = Math.fround(a);\n const loPart = a - hiPart;\n out[startIndex] = hiPart;\n out[startIndex + 1] = loPart;\n return out;\n}\n\n/** @type {types['fp64LowPart']} */\nexport function fp64LowPart(a) {\n return a - Math.fround(a);\n}\n\n/**\n * Calculate WebGL 64 bit matrix (transposed \"Float64Array\")\n * @type {types['fp64ifyMatrix4']}\n * */\nexport function fp64ifyMatrix4(matrix) {\n // Transpose the projection matrix to column major for GLSL.\n const matrixFP64 = new Float32Array(32);\n for (let i = 0; i < 4; ++i) {\n for (let j = 0; j < 4; ++j) {\n const index = i * 4 + j;\n fp64ify(matrix[j * 4 + i], matrixFP64, index * 2);\n }\n }\n return matrixFP64;\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\nuniform float ONE;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' from.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * ONE - (t - a);\n float a_lo = a * ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * ONE;\n float err = b - (sum - a) * ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n`;\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {fp64ify, fp64LowPart, fp64ifyMatrix4} from './fp64-utils';\n\nimport fp64arithmeticShader from './fp64-arithmetic.glsl';\nimport fp64functionShader from './fp64-functions.glsl';\n\nconst CONST_UNIFORMS = {\n // Used in LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n ONE: 1.0\n};\nexport {fp64ify, fp64LowPart, fp64ifyMatrix4};\n\nfunction getUniforms() {\n return CONST_UNIFORMS;\n}\n\n// Arithmetic only\nexport const fp64arithmetic = {\n name: 'fp64-arithmetic',\n vs: fp64arithmeticShader,\n fs: null,\n getUniforms,\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\n\n// Full fp64 shader\nexport const fp64 = {\n name: 'fp64',\n vs: fp64functionShader,\n fs: null,\n dependencies: [fp64arithmetic],\n fp64ify,\n fp64LowPart,\n fp64ifyMatrix4\n};\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default `\\\nconst vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);\nconst vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);\nconst vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);\nconst vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);\nconst vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);\nconst vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);\nconst vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);\nconst vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);\nconst vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);\nconst vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);\n\nconst vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);\nconst vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);\nconst vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);\nconst vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);\n\nconst vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);\nconst vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);\nconst vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);\nconst vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);\n\nconst vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09); // 1/3!\nconst vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09); // 1/4!\nconst vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10); // 1/5!\nconst vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11); // 1/6!\nconst vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12); // 1/7!\nconst vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13); // 1/8!\nconst vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14); // 1/9!\nconst vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!\n\nfloat nint(float d) {\n if (d == floor(d)) return d;\n return floor(d + 0.5);\n}\n\nvec2 nint_fp64(vec2 a) {\n float hi = nint(a.x);\n float lo;\n vec2 tmp;\n if (hi == a.x) {\n lo = nint(a.y);\n tmp = quickTwoSum(hi, lo);\n } else {\n lo = 0.0;\n if (abs(hi - a.x) == 0.5 && a.y < 0.0) {\n hi -= 1.0;\n }\n tmp = vec2(hi, lo);\n }\n return tmp;\n}\n\n/* k_power controls how much range reduction we would like to have\nRange reduction uses the following method:\nassume a = k_power * r + m * log(2), k and m being integers.\nSet k_power = 4 (we can choose other k to trade accuracy with performance.\nwe only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;\n*/\n\nvec2 exp_fp64(vec2 a) {\n // We need to make sure these two numbers match\n // as bit-wise shift is not available in GLSL 1.0\n const int k_power = 4;\n const float k = 16.0;\n\n const float inv_k = 1.0 / k;\n\n if (a.x <= -88.0) return vec2(0.0, 0.0);\n if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);\n if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);\n if (a.x == 1.0 && a.y == 0.0) return E_FP64;\n\n float m = floor(a.x / LOG2_FP64.x + 0.5);\n vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;\n vec2 s, t, p;\n\n p = mul_fp64(r, r);\n s = sum_fp64(r, p * 0.5);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);\n\n // s = sum_fp64(s, t);\n // p = mul_fp64(p, r);\n // t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);\n\n // s = sum_fp64(s, t);\n // p = mul_fp64(p, r);\n // t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);\n\n s = sum_fp64(s, t);\n\n\n // At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.\n for (int i = 0; i < k_power; i++) {\n s = sum_fp64(s * 2.0, mul_fp64(s, s));\n }\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = sum_fp64(s, vec2(ONE, 0.0));\n#else\n s = sum_fp64(s, vec2(1.0, 0.0));\n#endif\n\n return s * pow(2.0, m);\n// return r;\n}\n\nvec2 log_fp64(vec2 a)\n{\n if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n vec2 x = vec2(log(a.x), 0.0);\n vec2 s;\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = vec2(ONE, 0.0);\n#else\n s = vec2(1.0, 0.0);\n#endif\n\n x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);\n return x;\n}\n\nvec2 sin_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n s = a;\n r = a;\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);\n s = sum_fp64(s, t);\n\n /* keep the following commented code in case we need them\n for extra accuracy from the Taylor expansion*/\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);\n // s = sum_fp64(s, t);\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);\n // s = sum_fp64(s, t);\n\n return s;\n}\n\nvec2 cos_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n r = x;\n s = sum_fp64(vec2(1.0, 0.0), r * 0.5);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);\n s = sum_fp64(s, t);\n\n /* keep the following commented code in case we need them\n for extra accuracy from the Taylor expansion*/\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);\n // s = sum_fp64(s, t);\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);\n // s = sum_fp64(s, t);\n\n return s;\n}\n\nvoid sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {\n if (a.x == 0.0 && a.y == 0.0) {\n sin_t = vec2(0.0, 0.0);\n cos_t = vec2(1.0, 0.0);\n }\n\n sin_t = sin_taylor_fp64(a);\n cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));\n}\n\nvec2 sin_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return sin_taylor_fp64(t);\n } else if (j == 1) {\n return cos_taylor_fp64(t);\n } else if (j == -1) {\n return -cos_taylor_fp64(t);\n } else {\n return -sin_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n }\n } else {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 cos_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return cos_taylor_fp64(t);\n } else if (j == 1) {\n return -sin_taylor_fp64(t);\n } else if (j == -1) {\n return sin_taylor_fp64(t);\n } else {\n return -cos_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 tan_fp64(vec2 a) {\n vec2 sin_a;\n vec2 cos_a;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n // We just can't get PI/16 * 3.0 very accurately.\n // so let's just store it\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n vec2 sin_t, cos_t;\n vec2 s, c;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n if (k > 0) {\n s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return div_fp64(sin_a, cos_a);\n}\n\nvec2 radians_fp64(vec2 degree) {\n return mul_fp64(degree, PI_180_FP64);\n}\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\n// Vector functions\n// vec2 functions\nvoid vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sum_fp64(a[0], b[0]);\n out_val[1] = sum_fp64(a[1], b[1]);\n}\n\nvoid vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sub_fp64(a[0], b[0]);\n out_val[1] = sub_fp64(a[1], b[1]);\n}\n\nvoid vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = mul_fp64(a[0], b[0]);\n out_val[1] = mul_fp64(a[1], b[1]);\n}\n\nvoid vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = div_fp64(a[0], b[0]);\n out_val[1] = div_fp64(a[1], b[1]);\n}\n\nvoid vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {\n vec2 range[2];\n vec2_sub_fp64(y, x, range);\n vec2 portion[2];\n portion[0] = range[0] * a;\n portion[1] = range[1] * a;\n vec2_sum_fp64(x, portion, out_val);\n}\n\nvec2 vec2_length_fp64(vec2 x[2]) {\n return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));\n}\n\nvoid vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {\n vec2 length = vec2_length_fp64(x);\n vec2 length_vec2[2];\n length_vec2[0] = length;\n length_vec2[1] = length;\n\n vec2_div_fp64(x, length_vec2, out_val);\n}\n\nvec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {\n vec2 diff[2];\n vec2_sub_fp64(x, y, diff);\n return vec2_length_fp64(diff);\n}\n\nvec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {\n vec2 v[2];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n\n return sum_fp64(v[0], v[1]);\n}\n\n// vec3 functions\nvoid vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvec2 vec3_length_fp64(vec2 x[3]) {\n return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),\n mul_fp64(x[2], x[2])));\n}\n\nvec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {\n vec2 diff[3];\n vec3_sub_fp64(x, y, diff);\n return vec3_length_fp64(diff);\n}\n\n// vec4 functions\nvoid vec4_fp64(vec4 a, out vec2 out_val[4]) {\n out_val[0].x = a[0];\n out_val[0].y = 0.0;\n\n out_val[1].x = a[1];\n out_val[1].y = 0.0;\n\n out_val[2].x = a[2];\n out_val[2].y = 0.0;\n\n out_val[3].x = a[3];\n out_val[3].y = 0.0;\n}\n\nvoid vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {\n out_val[0] = mul_fp64(a[0], b);\n out_val[1] = mul_fp64(a[1], b);\n out_val[2] = mul_fp64(a[2], b);\n out_val[3] = mul_fp64(a[3], b);\n}\n\nvoid vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {\n for (int i = 0; i < 4; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {\n vec2 v[4];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n v[2] = mul_fp64(a[2], b[2]);\n v[3] = mul_fp64(a[3], b[3]);\n\n out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));\n}\n\nvoid mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {\n vec2 tmp[4];\n\n for (int i = 0; i < 4; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n tmp[j] = b[j + i * 4];\n }\n vec4_dot_fp64(a, tmp, out_val[i]);\n }\n}\n`;\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {Matrix4} from '@math.gl/core';\n\nconst IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\nconst DEFAULT_MODULE_OPTIONS = {\n modelMatrix: IDENTITY_MATRIX,\n viewMatrix: IDENTITY_MATRIX,\n projectionMatrix: IDENTITY_MATRIX,\n cameraPositionWorld: [0, 0, 0]\n};\n\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS, prevUniforms = {}) {\n // const viewProjectionInverse = viewProjection.invert();\n // viewInverseMatrix: view.invert(),\n // viewProjectionInverseMatrix: viewProjectionInverse\n\n const uniforms = {};\n if (opts.modelMatrix !== undefined) {\n uniforms.modelMatrix = opts.modelMatrix;\n }\n if (opts.viewMatrix !== undefined) {\n uniforms.viewMatrix = opts.viewMatrix;\n }\n if (opts.projectionMatrix !== undefined) {\n uniforms.projectionMatrix = opts.projectionMatrix;\n }\n if (opts.cameraPositionWorld !== undefined) {\n uniforms.cameraPositionWorld = opts.cameraPositionWorld;\n }\n\n // COMPOSITE UNIFORMS\n if (opts.projectionMatrix !== undefined || opts.viewMatrix !== undefined) {\n uniforms.viewProjectionMatrix = new Matrix4(opts.projectionMatrix).multiplyRight(\n opts.viewMatrix\n );\n }\n\n return uniforms;\n}\n\nconst common = `\\\nvarying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\nvec4 project_getPosition_World() {\n return project_vPositionWorld;\n}\n\nvec3 project_getNormal_World() {\n return project_vNormalWorld;\n}\n`;\n\nconst vs = `\\\n${common}\n\n// Unprefixed uniforms\nuniform mat4 modelMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewProjectionMatrix;\nuniform vec3 cameraPositionWorld;\n\nstruct World {\n vec3 position;\n vec3 normal;\n};\n\nWorld world;\n\nvoid project_setPosition(vec4 position) {\n project_vPositionWorld = position;\n}\n\nvoid project_setNormal(vec3 normal) {\n project_vNormalWorld = normal;\n}\n\nvoid project_setPositionAndNormal_World(vec3 position, vec3 normal) {\n world.position = position;\n world.normal = normal;\n}\n\nvoid project_setPositionAndNormal_Model(vec3 position, vec3 normal) {\n world.position = (modelMatrix * vec4(position, 1.)).xyz;\n world.normal = mat3(modelMatrix) * normal;\n}\n\nvec4 project_model_to_clipspace(vec4 position) {\n return viewProjectionMatrix * modelMatrix * position;\n}\n\nvec4 project_model_to_clipspace(vec3 position) {\n return viewProjectionMatrix * modelMatrix * vec4(position, 1.);\n}\n\nvec4 project_world_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_view_to_clipspace(vec3 position) {\n return projectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n`;\n\nconst fs = `\n${common}\\\n`;\n\n/** @type {ShaderModule} */\nexport const project = {\n name: 'project',\n getUniforms,\n vs,\n fs\n};\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\n// Cheap lighting - single directional light, single dot product, one uniform\n\nimport {project} from '../project/project';\n\n/* eslint-disable camelcase */\nconst DEFAULT_LIGHT_DIRECTION = new Float32Array([1, 1, 2]);\n\nconst DEFAULT_MODULE_OPTIONS = {\n lightDirection: DEFAULT_LIGHT_DIRECTION\n};\n\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS) {\n const uniforms = {};\n if (opts.lightDirection) {\n uniforms.dirlight_uLightDirection = opts.lightDirection;\n }\n return uniforms;\n}\n\n// TODO - reuse normal from geometry module\nconst vs = null;\n\nconst fs = `\\\nuniform vec3 dirlight_uLightDirection;\n\n/*\n * Returns color attenuated by angle from light source\n */\nvec4 dirlight_filterColor(vec4 color) {\n vec3 normal = project_getNormal_World();\n float d = abs(dot(normalize(normal), normalize(dirlight_uLightDirection)));\n return vec4(color.rgb * d, color.a);\n}\n`;\n\nexport const dirlight = {\n name: 'dirlight',\n vs,\n fs,\n getUniforms,\n dependencies: [project]\n};\n","let channelHandles = 1;\nlet animationHandles = 1;\n\nexport class Timeline {\n constructor() {\n this.time = 0;\n this.channels = new Map();\n this.animations = new Map();\n this.playing = false;\n this.lastEngineTime = -1;\n }\n\n addChannel(props) {\n const {delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1} = props;\n\n const handle = channelHandles++;\n const channel = {\n time: 0,\n delay,\n duration,\n rate,\n repeat\n };\n this._setChannelTime(channel, this.time);\n this.channels.set(handle, channel);\n\n return handle;\n }\n\n removeChannel(handle) {\n this.channels.delete(handle);\n\n for (const [animationHandle, animation] of this.animations) {\n if (animation.channel === handle) {\n this.detachAnimation(animationHandle);\n }\n }\n }\n\n isFinished(handle) {\n const channel = this.channels.get(handle);\n if (channel === undefined) {\n return false;\n }\n\n return this.time >= channel.delay + channel.duration * channel.repeat;\n }\n\n getTime(handle) {\n if (handle === undefined) {\n return this.time;\n }\n\n const channel = this.channels.get(handle);\n\n if (channel === undefined) {\n return -1;\n }\n\n return channel.time;\n }\n\n setTime(time) {\n this.time = Math.max(0, time);\n\n const channels = this.channels.values();\n for (const channel of channels) {\n this._setChannelTime(channel, this.time);\n }\n\n const animations = this.animations.values();\n for (const animationData of animations) {\n const {animation, channel} = animationData;\n animation.setTime(this.getTime(channel));\n }\n }\n\n play() {\n this.playing = true;\n }\n\n pause() {\n this.playing = false;\n this.lastEngineTime = -1;\n }\n\n reset() {\n this.setTime(0);\n }\n\n attachAnimation(animation, channelHandle) {\n const animationHandle = animationHandles++;\n\n this.animations.set(animationHandle, {\n animation,\n channel: channelHandle\n });\n\n animation.setTime(this.getTime(channelHandle));\n\n return animationHandle;\n }\n\n detachAnimation(handle) {\n this.animations.delete(handle);\n }\n\n update(engineTime) {\n if (this.playing) {\n if (this.lastEngineTime === -1) {\n this.lastEngineTime = engineTime;\n }\n this.setTime(this.time + (engineTime - this.lastEngineTime));\n this.lastEngineTime = engineTime;\n }\n }\n\n _setChannelTime(channel, time) {\n const offsetTime = time - channel.delay;\n const totalDuration = channel.duration * channel.repeat;\n // Note(Tarek): Don't loop on final repeat.\n if (offsetTime >= totalDuration) {\n channel.time = channel.duration * channel.rate;\n } else {\n channel.time = Math.max(0, offsetTime) % channel.duration;\n channel.time *= channel.rate;\n }\n }\n}\n","import Geometry from '../geometry/geometry';\nimport {uid} from '@luma.gl/webgl';\n\n// prettier-ignore\nconst CUBE_INDICES = new Uint16Array([\n 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13,\n 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23\n]);\n\n// prettier-ignore\nconst CUBE_POSITIONS = new Float32Array([\n -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1,\n -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1,\n -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1,\n -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1,\n 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1,\n -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1\n]);\n\n// TODO - could be Uint8\n// prettier-ignore\nconst CUBE_NORMALS = new Float32Array([\n // Front face\n 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,\n // Back face\n 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1,\n // Top face\n 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,\n // Bottom face\n 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0,\n // Right face\n 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,\n // Left face\n -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0\n]);\n\n// prettier-ignore\nconst CUBE_TEX_COORDS = new Float32Array([\n // Front face\n 0, 0, 1, 0, 1, 1, 0, 1,\n // Back face\n 1, 0, 1, 1, 0, 1, 0, 0,\n // Top face\n 0, 1, 0, 0, 1, 0, 1, 1,\n // Bottom face\n 1, 1, 0, 1, 0, 0, 1, 0,\n // Right face\n 1, 0, 1, 1, 0, 1, 0, 0,\n // Left face\n 0, 0, 1, 0, 1, 1, 0, 1\n]);\n\nconst ATTRIBUTES = {\n POSITION: {size: 3, value: new Float32Array(CUBE_POSITIONS)},\n NORMAL: {size: 3, value: new Float32Array(CUBE_NORMALS)},\n TEXCOORD_0: {size: 2, value: new Float32Array(CUBE_TEX_COORDS)}\n};\n\nexport default class CubeGeometry extends Geometry {\n constructor(props = {}) {\n const {id = uid('cube-geometry')} = props;\n super({\n ...props,\n id,\n indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},\n attributes: {...ATTRIBUTES, ...props.attributes}\n });\n }\n}\n","import {uid, assert} from '@luma.gl/webgl';\n\n// Rendering primitives - specify how to extract primitives from vertices.\n// NOTE: These are numerically identical to the corresponding WebGL/OpenGL constants\nexport const DRAW_MODE = {\n POINTS: 0x0000, // draw single points.\n LINES: 0x0001, // draw lines. Each vertex connects to the one after it.\n LINE_LOOP: 0x0002, // draw lines. Each set of two vertices is treated as a separate line segment.\n LINE_STRIP: 0x0003, // draw a connected group of line segments from the first vertex to the last\n TRIANGLES: 0x0004, // draw triangles. Each set of three vertices creates a separate triangle.\n TRIANGLE_STRIP: 0x0005, // draw a connected group of triangles.\n TRIANGLE_FAN: 0x0006 // draw a connected group of triangles.\n // Each vertex connects to the previous and the first vertex in the fan.\n};\n\nexport default class Geometry {\n static get DRAW_MODE() {\n return DRAW_MODE;\n }\n\n constructor(props = {}) {\n const {\n id = uid('geometry'),\n drawMode = DRAW_MODE.TRIANGLES,\n attributes = {},\n indices = null,\n vertexCount = null\n } = props;\n\n this.id = id;\n this.drawMode = drawMode | 0;\n this.attributes = {};\n this.userData = {};\n\n this._setAttributes(attributes, indices);\n\n this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);\n\n // stubRemovedMethods(this, [\n // 'setNeedsRedraw', 'needsRedraw', 'setAttributes'\n // ], 'Immutable');\n\n // stubRemovedMethods(this, [\n // 'hasAttribute', 'getAttribute', 'getArray'\n // ], 'Use geometry.attributes and geometry.indices');\n\n // deprecateMethods(this, ['getAttributes'])\n }\n\n get mode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n // Return an object with all attributes plus indices added as a field.\n getAttributes() {\n return this.indices ? {indices: this.indices, ...this.attributes} : this.attributes;\n }\n\n // PRIVATE\n\n _print(attributeName) {\n return `Geometry ${this.id} attribute ${attributeName}`;\n }\n\n // Attribute\n // value: typed array\n // type: indices, vertices, uvs\n // size: elements per vertex\n // target: WebGL buffer type (string or constant)\n _setAttributes(attributes, indices) {\n if (indices) {\n this.indices = ArrayBuffer.isView(indices) ? {value: indices, size: 1} : indices;\n }\n\n for (const attributeName in attributes) {\n let attribute = attributes[attributeName];\n\n // Wrap \"unwrapped\" arrays and try to autodetect their type\n attribute = ArrayBuffer.isView(attribute) ? {value: attribute} : attribute;\n\n assert(\n ArrayBuffer.isView(attribute.value),\n `${this._print(attributeName)}: must be typed array or object with value as typed array`\n );\n\n if ((attributeName === 'POSITION' || attributeName === 'positions') && !attribute.size) {\n attribute.size = 3;\n }\n\n // Move indices to separate field\n if (attributeName === 'indices') {\n assert(!this.indices);\n this.indices = attribute;\n } else {\n this.attributes[attributeName] = attribute;\n }\n }\n\n if (this.indices && this.indices.isIndexed !== undefined) {\n this.indices = Object.assign({}, this.indices);\n delete this.indices.isIndexed;\n }\n\n return this;\n }\n\n _calculateVertexCount(attributes, indices) {\n if (indices) {\n return indices.value.length;\n }\n let vertexCount = Infinity;\n for (const attributeName in attributes) {\n const attribute = attributes[attributeName];\n const {value, size, constant} = attribute;\n if (!constant && value && size >= 1) {\n vertexCount = Math.min(vertexCount, value.length / size);\n }\n }\n\n assert(Number.isFinite(vertexCount));\n return vertexCount;\n }\n}\n","// WebGL2 Query (also handles disjoint timer extensions)\nimport Resource from './resource';\nimport {FEATURES, hasFeatures} from '../features';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\nconst GL_QUERY_RESULT = 0x8866; // Returns a GLuint containing the query result.\nconst GL_QUERY_RESULT_AVAILABLE = 0x8867; // whether query result is available.\n\nconst GL_TIME_ELAPSED_EXT = 0x88bf; // Elapsed time (in nanoseconds).\nconst GL_GPU_DISJOINT_EXT = 0x8fbb; // Whether GPU performed any disjoint operation.\n\nconst GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88; // #primitives written to feedback buffers\nconst GL_ANY_SAMPLES_PASSED = 0x8c2f; // Occlusion query (if drawing passed depth test)\nconst GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a; // Occlusion query less accurate/faster version\n\nexport default class Query extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Query';\n }\n // Returns true if Query is supported by the WebGL implementation\n // Can also check whether timestamp queries are available.\n static isSupported(gl, opts = []) {\n const webgl2 = isWebGL2(gl);\n\n // Initial value\n const hasTimerQuery = hasFeatures(gl, FEATURES.TIMER_QUERY);\n let supported = webgl2 || hasTimerQuery;\n\n for (const key of opts) {\n switch (key) {\n case 'queries':\n supported = supported && webgl2;\n break;\n case 'timers':\n supported = supported && hasTimerQuery;\n break;\n default:\n assert(false);\n }\n }\n\n return supported;\n }\n\n // Create a query class\n constructor(gl, opts = {}) {\n super(gl, opts);\n\n this.target = null;\n this._queryPending = false;\n this._pollingPromise = null;\n\n Object.seal(this);\n }\n\n // Shortcut for timer query (dependent on extension in both WebGL1 and 2)\n // Measures GPU time delta between this call and a matching `end` call in the\n // GPU instruction stream.\n beginTimeElapsedQuery() {\n return this.begin(GL_TIME_ELAPSED_EXT);\n }\n\n // Shortcut for occlusion queries\n beginOcclusionQuery({conservative = false} = {}) {\n return this.begin(conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);\n }\n\n // Shortcut for transformFeedbackQuery\n beginTransformFeedbackQuery() {\n return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);\n }\n\n // Due to OpenGL API limitations, after calling `begin()` on one Query\n // instance, `end()` must be called on that same instance before\n // calling `begin()` on another query. While there can be multiple\n // outstanding queries representing disjoint `begin()`/`end()` intervals.\n // It is not possible to interleave or overlap `begin` and `end` calls.\n begin(target) {\n // Don't start a new query if one is already active.\n if (this._queryPending) {\n return this;\n }\n\n this.target = target;\n this.gl2.beginQuery(this.target, this.handle);\n\n return this;\n }\n\n // ends the current query\n end() {\n // Can't end a new query if the last one hasn't been resolved.\n if (this._queryPending) {\n return this;\n }\n\n if (this.target) {\n this.gl2.endQuery(this.target);\n this.target = null;\n this._queryPending = true;\n }\n return this;\n }\n\n // Returns true if the query result is available\n isResultAvailable() {\n if (!this._queryPending) {\n return false;\n }\n\n const resultAvailable = this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);\n if (resultAvailable) {\n this._queryPending = false;\n }\n return resultAvailable;\n }\n\n // Timing query is disjoint, i.e. results are invalid\n isTimerDisjoint() {\n return this.gl2.getParameter(GL_GPU_DISJOINT_EXT);\n }\n\n // Returns query result.\n getResult() {\n return this.gl2.getQueryParameter(this.handle, GL_QUERY_RESULT);\n }\n\n // Returns the query result, converted to milliseconds to match JavaScript conventions.\n getTimerMilliseconds() {\n return this.getResult() / 1e6;\n }\n\n // Polls the query\n createPoll(limit = Number.POSITIVE_INFINITY) {\n if (this._pollingPromise) {\n return this._pollingPromise;\n }\n\n let counter = 0;\n\n this._pollingPromise = new Promise((resolve, reject) => {\n const poll = () => {\n if (this.isResultAvailable()) {\n resolve(this.getResult());\n this._pollingPromise = null;\n } else if (counter++ > limit) {\n reject('Timed out');\n this._pollingPromise = null;\n } else {\n requestAnimationFrame(poll);\n }\n };\n\n requestAnimationFrame(poll);\n });\n\n return this._pollingPromise;\n }\n\n _createHandle() {\n return Query.isSupported(this.gl) ? this.gl2.createQuery() : null;\n }\n\n _deleteHandle() {\n this.gl2.deleteQuery(this.handle);\n }\n}\n","import {\n isWebGL,\n createGLContext,\n instrumentGLContext,\n resizeGLContext,\n resetParameters\n} from '@luma.gl/gltools';\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer,\n log,\n assert\n} from '@luma.gl/webgl';\n\nimport {isBrowser} from '@probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\nexport default class AnimationLoop {\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props = {}) {\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n\n gl = null,\n glOptions = {},\n debug = false,\n\n createFramebuffer = false,\n\n // view parameters\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(`animation-loop-${statIdCounter++}`)\n } = props;\n\n let {useDevicePixels = true} = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-ignore\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n\n // state\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n\n this.setProps({\n autoResizeViewport,\n autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._pageLoadPromise = null;\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n\n // Starts a render loop if not already running\n // @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)\n start(opts = {}) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n const startPromise = this._getPageLoadPromise()\n .then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n // Create the WebGL context\n this._createWebGLContext(opts);\n this._createFramebuffer();\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n\n this._initialized = true;\n\n // Note: onIntialize can return a promise (in case it needs to load resources)\n return this.onInitialize(this.animationProps);\n })\n .then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n // Redraw now\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n // Chrome's offscreen canvas does not require gl.commit\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame(this._animationFrameId);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n\n await this.waitForRender();\n\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost() {\n return this.gl.isContextLost();\n }\n\n onCreateContext(...args) {\n return this.props.onCreateContext(...args);\n }\n\n onInitialize(...args) {\n return this.props.onInitialize(...args);\n }\n\n onRender(...args) {\n return this.props.onRender(...args);\n }\n\n onFinalize(...args) {\n return this.props.onFinalize(...args);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-ignore Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // Update parameters\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n // PRIVATE METHODS\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n // PRIVATE METHODS\n\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _cancelAnimationFrame(animationFrameId) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n return undefined;\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(...args) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(...args);\n return;\n }\n\n // call callback\n this.onRender(...args);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n this.animationProps = {\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n\n // Initial values\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null // Event props\n };\n }\n\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n\n // experimental\n this.animationProps._offScreen = this.offScreen;\n }\n\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n\n // Add application's data to the app context object\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n // Either uses supplied or existing context, or calls provided callback to create one\n _createWebGLContext(opts) {\n this.offScreen =\n opts.canvas &&\n typeof OffscreenCanvas !== 'undefined' &&\n opts.canvas instanceof OffscreenCanvas;\n\n // Create the WebGL context if necessary\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n // Reset the WebGL context.\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const {canvas} = this.gl;\n\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n // Default viewport setup\n _resizeViewport() {\n if (this.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n // Resize the render buffer of the canvas to match canvas client size\n // Optionally multiplying with devicePixel ratio\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});\n }\n }\n\n // TBD - deprecated?\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n if (\n this._gpuTimeQuery &&\n this._gpuTimeQuery.isResultAvailable() &&\n !this._gpuTimeQuery.isTimerDisjoint()\n ) {\n this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n }\n\n if (this._gpuTimeQuery) {\n // GPU time query start\n this._gpuTimeQuery.beginTimeElapsedQuery();\n }\n\n this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n if (this._gpuTimeQuery) {\n // GPU time query end. Results will be available on next frame.\n this._gpuTimeQuery.end();\n }\n }\n\n // Event handling\n\n _startEventHandling() {\n const {canvas} = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n}\n","// Node.js polyfills for requestAnimationFrame and cancelAnimationFrame\n\nexport function requestAnimationFrame(callback) {\n return typeof window !== 'undefined' && window.requestAnimationFrame\n ? window.requestAnimationFrame(callback)\n : setTimeout(callback, 1000 / 60);\n}\n\nexport function cancelAnimationFrame(timerId) {\n return typeof window !== 'undefined' && window.cancelAnimationFrame\n ? window.cancelAnimationFrame(timerId)\n : clearTimeout(timerId);\n}\n","let arrayBuffer = null;\n\nexport function getScratchArrayBuffer(byteLength) {\n if (!arrayBuffer || arrayBuffer.byteLength < byteLength) {\n arrayBuffer = new ArrayBuffer(byteLength);\n }\n return arrayBuffer;\n}\n\nexport function getScratchArray(Type, length) {\n const scratchArrayBuffer = getScratchArrayBuffer(Type.BYTES_PER_ELEMENT * length);\n return new Type(scratchArrayBuffer, 0, length); // arrayBuffer, byteOffset, length (in elements)\n}\n\n// Uses copyWithin to significantly speed up typed array value filling\nexport function fillArray({target, source, start = 0, count = 1}) {\n const length = source.length;\n const total = count * length;\n let copied = 0;\n for (let i = start; copied < length; copied++) {\n target[i++] = source[copied];\n }\n\n while (copied < total) {\n // If we have copied less than half, copy everything we got\n // else copy remaining in one operation\n if (copied < total - copied) {\n target.copyWithin(start + copied, start, start + copied);\n copied *= 2;\n } else {\n target.copyWithin(start + copied, start, start + total - copied);\n copied = total;\n }\n }\n\n return target;\n}\n\n/*\n\n// Creates a new Uint8Array based on two different ArrayBuffers\n// @private\n// @param {ArrayBuffers} buffer1 The first buffer.\n// @param {ArrayBuffers} buffer2 The second buffer.\n// @return {ArrayBuffers} The new ArrayBuffer created out of the two.\n//\nexport function copyArrayBuffer(\n targetBuffer, sourceBuffer, byteOffset, byteLength = sourceBuffer.byteLength\n) {\n const targetArray = new Uint8Array(targetBuffer, byteOffset, byteLength);\n const sourceArray = new Uint8Array(sourceBuffer);\n targetArray.set(sourceArray);\n return targetBuffer;\n}\n\n*/\n","import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from '@probe.gl/env';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexArrayObject';\n }\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n","import GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\nimport Accessor from './accessor';\nimport Buffer from './buffer';\nimport VertexArrayObject from './vertex-array-object';\nimport {assert} from '../utils/assert';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_ATTRIBUTE_TYPE =\n 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\n\n// This is done to support mat type attributes.\n// See section \"Notes about setting mat type attributes\"\n// in vertex-array.md\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\n\nconst DEPRECATIONS_V6 = [\n 'setBuffers',\n 'setGeneric',\n 'clearBindings',\n 'setLocations',\n 'setGenericValues',\n 'setDivisor',\n 'enable',\n 'disable'\n];\n\nexport default class VertexArray {\n constructor(gl, opts = {}) {\n // Use program's id if program is supplied but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n // super(gl, Object.assign({}, opts, {id}));\n\n this.id = id;\n this.gl = gl;\n this.configuration = null;\n\n // Extracted information\n this.elements = null;\n this.elementsAccessor = null;\n this.values = null;\n this.accessors = null;\n this.unused = null;\n this.drawParams = null;\n this.buffer = null; // For attribute 0 on desktops, and created when unbinding buffers\n\n this.attributes = {};\n\n this.vertexArrayObject = new VertexArrayObject(gl);\n\n // Issue errors when using removed methods\n stubRemovedMethods(this, 'VertexArray', 'v6.0', DEPRECATIONS_V6);\n\n this.initialize(opts);\n Object.seal(this);\n }\n\n delete() {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize(props = {}) {\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props);\n }\n\n // Resets all attributes (to default valued constants)\n reset() {\n // this.vertexArrayObject.reset();\n\n this.elements = null;\n this.elementsAccessor = null;\n const {MAX_ATTRIBUTES} = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n\n // Auto detects draw params\n this.drawParams = null;\n\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n return this;\n }\n\n // Automatically called if buffers changed through VertexArray API\n clearDrawParams() {\n this.drawParams = null;\n }\n\n getDrawParams() {\n // Auto deduced draw parameters\n this.drawParams = this.drawParams || this._updateDrawParams();\n\n return this.drawParams;\n }\n\n // Set (bind) an array or map of vertex array buffers, either in numbered or named locations.\n // For names that are not present in `location`, the supplied buffers will be ignored.\n // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements\n // Signatures:\n // {attributeName: buffer}\n // {attributeName: [buffer, accessor]}\n // {attributeName: (typed) array} => constant\n setAttributes(attributes) {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n this._setAttribute(locationOrName, value);\n }\n // Make sure we don't leave any bindings\n this.gl.bindBuffer(GL.ARRAY_BUFFER, null);\n });\n\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, accessor = {}) {\n this.elements = elementBuffer; // Save value for debugging\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n\n return this;\n }\n\n // Set a location in vertex attributes array to a buffer\n setBuffer(locationOrName, buffer, appAccessor = {}) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, appAccessor);\n }\n\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n buffer,\n buffer.accessor,\n appAccessor\n );\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n // Set attribute to constant value (small typed array corresponding to one vertex' worth of data)\n setConstant(locationOrName, arrayValue, appAccessor = {}) {\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n arrayValue,\n // Ensure that size isn't taken from program for multi-column\n // attributes\n Object.assign({size: arrayValue.length}, appAccessor)\n );\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n\n // NOTE: We set the actual constant value later on bind. We can't set the value now since\n // constants are global and affect all other VertexArrays that have disabled attributes\n // in the same location.\n // We do disable the attribute which makes it use the global constant value at that location\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, unbind temporarily to avoid conflicting with TransformFeedback\n unbindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n // Chrome does not like buffers that are bound to several binding points,\n // so we need to offer and unbind facility\n // WebGL offers disabling, but no clear way to set a VertexArray buffer to `null`\n // So we just bind all the attributes to the dummy \"attribute zero\" buffer\n this.buffer = this.buffer || new Buffer(this.gl, {accessor: {size: 4}});\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, rebind rebind after temporary unbind\n bindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n // Bind for use\n // When a vertex array is about to be used, we must:\n // - Set constant attributes (since these are stored on the context and reset on bind)\n // - Check if we need to initialize the buffer\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n\n this.vertexArrayObject.bind(() => {\n // Make sure that any constant attributes are updated (stored on the context, not the VAO)\n // Also handles attribute 0\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n\n return value;\n }\n\n // PRIVATE\n\n // Resolve locations and accessors\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {location, name} = this._getAttributeIndex(locationOrName);\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => `unused value ${locationOrName} in ${this.id}`)();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n // Attribute location wasn't directly found.\n // Likely due to multi-location attributes (e.g. matrix)\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n // Resolve the partial accessors into a final accessor\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(\n accessInfo.accessor,\n currentAccessor,\n valueAccessor,\n appAccessor\n );\n\n const {size, type} = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n\n return {location, accessor};\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return {location};\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {location: -1};\n }\n\n _setAttribute(locationOrName, value) {\n if (value instanceof Buffer) {\n // Signature: {attributeName: Buffer}\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n // Signature: {attributeName: [buffer, accessor]}\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n // Signature: {attributeName: constant}, constant == short (typed) array\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n // luma.gl v7: Support accessor objects with 'buffer' field\n // for interleaved data\n // Signature: {attributeName: {...accessor, buffer}}\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n // Updates all constant attribute values (constants are used when vertex attributes are disabled).\n // This needs to be done repeatedly since in contrast to buffer bindings,\n // constants are stored on the WebGL context, not the VAO\n _setConstantAttributes(vertexCount, instanceCount) {\n // TODO - use accessor to determine what length to use\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount) {\n if (VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true})) {\n this._setConstantAttribute(0, constant);\n return;\n }\n\n // Get a dummy buffer populated with repeated constants\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n\n // Set the buffer on location 0\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant) {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n // Walks the buffers and updates draw parameters\n _updateDrawParams() {\n const drawParams = {\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n // indexing is autodetected - buffer with target GL.ELEMENT_ARRAY_BUFFER\n // index type is saved for drawElement calls\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n // Post-calculation checks\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams, location) {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n // Check if instanced (whether buffer or constant)\n const {divisor} = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n // instance attribute\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n // normal attribute\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n // DEPRECATED in v6.x - but not warnings not properly implemented\n\n setElements(elementBuffer = null, accessor = {}) {\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n}\n","// TODO / DEPRECATED - delete when confident that probe.gl logging implements all opts\n/* eslint-disable no-console */\nfunction formatArrayValue(v, opts) {\n const {maxElts = 16, size = 1} = opts;\n let string = '[';\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += `,${i % size === 0 ? ' ' : ''}`;\n }\n string += formatValue(v[i], opts);\n }\n const terminator = v.length > maxElts ? '...' : ']';\n return `${string}${terminator}`;\n}\n\nexport function formatValue(v, opts = {}) {\n const EPSILON = 1e-16;\n const {isInteger = false} = opts;\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, opts);\n }\n if (!Number.isFinite(v)) {\n return String(v);\n }\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n if (isInteger) {\n return v.toFixed(0);\n }\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n return v.toFixed(0);\n }\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n","import Buffer from '../classes/buffer';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {getCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {formatValue} from '../utils/format-value';\n\n// Creates object suitable as input for console.table\nexport function getDebugTableForVertexArray({vertexArray, header = 'Attributes'}) {\n if (!vertexArray.configuration) {\n return {};\n }\n\n const table = {}; // {[header]: {}};\n\n // Add index (elements) if available\n if (vertexArray.elements) {\n // const elements = Object.assign({size: 1}, vertexArray.elements);\n table.ELEMENT_ARRAY_BUFFER = getDebugTableRow(vertexArray, vertexArray.elements, null, header);\n }\n\n // Add used attributes\n const attributes = vertexArray.values;\n\n for (const attributeLocation in attributes) {\n const info = vertexArray._getAttributeInfo(attributeLocation);\n if (info) {\n let rowHeader = `${attributeLocation}: ${info.name}`;\n const accessor = vertexArray.accessors[info.location];\n if (accessor) {\n rowHeader = `${attributeLocation}: ${getGLSLDeclaration(info.name, accessor)}`;\n }\n table[rowHeader] = getDebugTableRow(\n vertexArray,\n attributes[attributeLocation],\n accessor,\n header\n );\n }\n }\n\n return table;\n}\n\n/* eslint-disable max-statements */\nfunction getDebugTableRow(vertexArray, attribute, accessor, header) {\n const {gl} = vertexArray;\n\n if (!attribute) {\n return {\n [header]: 'null',\n 'Format ': 'N/A'\n };\n }\n\n let type = 'NOT PROVIDED';\n let size = 1;\n let verts = 0;\n let bytes = 0;\n\n let isInteger;\n let marker;\n let value;\n\n if (accessor) {\n type = accessor.type;\n size = accessor.size;\n\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(type).replace('Array', '');\n\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n }\n\n if (attribute instanceof Buffer) {\n const buffer = attribute;\n\n const {data, changed} = buffer.getDebugData();\n marker = changed ? '*' : '';\n\n value = data;\n // @ts-ignore\n bytes = buffer.byteLength;\n // @ts-ignore\n verts = bytes / data.BYTES_PER_ELEMENT / size;\n\n let format;\n\n if (accessor) {\n const instanced = accessor.divisor > 0;\n format = `${instanced ? 'I ' : 'P '} ${verts} (x${size}=${bytes} bytes ${getKey(gl, type)})`;\n } else {\n // element buffer\n isInteger = true;\n format = `${bytes} bytes`;\n }\n\n return {\n [header]: `${marker}${formatValue(value, {size, isInteger})}`,\n 'Format ': format\n };\n }\n\n // CONSTANT VALUE\n value = attribute;\n size = attribute.length;\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(attribute.constructor.name).replace('Array', '');\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n\n return {\n [header]: `${formatValue(value, {size, isInteger})} (constant)`,\n 'Format ': `${size}x${type} (constant)`\n };\n}\n/* eslint-ensable max-statements */\n\nfunction getGLSLDeclaration(name, accessor) {\n const {type, size} = accessor;\n const typeAndName = getCompositeGLType(type, size);\n return typeAndName ? `${name} (${typeAndName.name})` : name;\n}\n","import {assert} from '../utils/assert';\nimport {formatValue} from '../utils/format-value';\n\n// Prepares a table suitable for console.table\n/* eslint-disable max-statements, complexity */\nexport function getDebugTableForUniforms({\n header = 'Uniforms',\n program,\n uniforms,\n undefinedOnly = false\n}) {\n assert(program);\n\n const SHADER_MODULE_UNIFORM_REGEXP = '.*_.*';\n const PROJECT_MODULE_UNIFORM_REGEXP = '.*Matrix'; // TODO - Use explicit list\n\n const uniformLocations = program._uniformSetters;\n const table = {}; // {[header]: {}};\n\n // Add program's provided uniforms (in alphabetical order)\n const uniformNames = Object.keys(uniformLocations).sort();\n\n let count = 0;\n\n // First add non-underscored uniforms (assumed not coming from shader modules)\n for (const uniformName of uniformNames) {\n if (\n !uniformName.match(SHADER_MODULE_UNIFORM_REGEXP) &&\n !uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)\n ) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // add underscored uniforms (assumed from shader modules)\n for (const uniformName of uniformNames) {\n if (uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n for (const uniformName of uniformNames) {\n if (!table[uniformName]) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // Create a table of unused uniforms\n let unusedCount = 0;\n const unusedTable = {};\n if (!undefinedOnly) {\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n if (!table[uniformName]) {\n unusedCount++;\n unusedTable[uniformName] = {\n Type: `NOT USED: ${uniform}`,\n [header]: formatValue(uniform)\n };\n }\n }\n }\n\n return {table, count, unusedTable, unusedCount};\n}\n\n// Helper\nfunction addUniformToTable({table, header, uniforms, uniformName, undefinedOnly}) {\n const value = uniforms[uniformName];\n const isDefined = isUniformDefined(value);\n if (!undefinedOnly || !isDefined) {\n table[uniformName] = {\n // Add program's unprovided uniforms\n [header]: isDefined ? formatValue(value) : 'N/A',\n 'Uniform Type': isDefined ? value : 'NOT PROVIDED'\n };\n return true;\n }\n return false;\n}\n\nfunction isUniformDefined(value) {\n return value !== undefined && value !== null;\n}\n","import {getCompositeGLType} from '../webgl-utils/attribute-utils';\n\nexport function getDebugTableForProgramConfiguration(config) {\n const table = {};\n\n const header = `Accessors for ${config.id}`;\n\n for (const attributeInfo of config.attributeInfos) {\n if (attributeInfo) {\n const glslDeclaration = getGLSLDeclaration(attributeInfo);\n table[`in ${glslDeclaration}`] = {[header]: JSON.stringify(attributeInfo.accessor)};\n }\n }\n\n for (const varyingInfo of config.varyingInfos) {\n if (varyingInfo) {\n const glslDeclaration = getGLSLDeclaration(varyingInfo);\n table[`out ${glslDeclaration}`] = {[header]: JSON.stringify(varyingInfo.accessor)};\n }\n }\n\n return table;\n}\n\nfunction getGLSLDeclaration(attributeInfo) {\n const {type, size} = attributeInfo.accessor;\n const typeAndName = getCompositeGLType(type, size);\n if (typeAndName) {\n return `${typeAndName.name} ${attributeInfo.name}`;\n }\n return attributeInfo.name;\n}\n","import GL from '@luma.gl/constants';\nimport {Buffer, assert} from '@luma.gl/webgl';\n\n// Support for mapping new geometries with glTF attribute names to \"classic\" luma.gl shader names\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\n\nexport function getBuffersFromGeometry(gl, geometry, options) {\n const buffers = {};\n let indices = geometry.indices;\n\n for (const name in geometry.attributes) {\n const attribute = geometry.attributes[name];\n const remappedName = mapAttributeName(name, options);\n\n if (name === 'indices') {\n indices = attribute;\n } else if (attribute.constant) {\n buffers[remappedName] = attribute.value;\n } else {\n const typedArray = attribute.value;\n // Create accessor by copying the attribute and removing `value``\n const accessor = {...attribute};\n delete accessor.value;\n buffers[remappedName] = [new Buffer(gl, typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n\n if (indices) {\n const data = indices.value || indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n const accessor = {\n size: 1,\n isIndexed: indices.isIndexed === undefined ? true : indices.isIndexed\n };\n buffers.indices = [\n new Buffer(gl, {\n data,\n target: GL.ELEMENT_ARRAY_BUFFER\n }),\n accessor\n ];\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name, options) {\n const {attributeMap = GLTF_TO_LUMA_ATTRIBUTE_MAP} = options || {};\n return (attributeMap && attributeMap[name]) || name;\n}\n\n// Check for well known attribute names\n// eslint-disable-next-line complexity\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n default:\n }\n\n // Check for categorys\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n default:\n }\n\n assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);\n}\n","/* eslint-disable complexity */\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL} from '@luma.gl/gltools';\nimport ProgramManager from './program-manager';\nimport {\n Program,\n VertexArray,\n clear,\n TransformFeedback,\n Buffer,\n log,\n isObjectEmpty,\n uid,\n assert\n} from '@luma.gl/webgl';\nimport {\n getDebugTableForUniforms,\n getDebugTableForVertexArray,\n getDebugTableForProgramConfiguration\n} from '@luma.gl/webgl';\nimport {getBuffersFromGeometry} from './model-utils';\n\nconst LOG_DRAW_PRIORITY = 2;\nconst LOG_DRAW_TIMEOUT = 10000;\n\nconst ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';\n\nconst NOOP = () => {};\nconst DRAW_PARAMS = {};\n\nexport default class Model {\n constructor(gl, props = {}) {\n // Deduce a helpful id\n const {id = uid('model')} = props;\n assert(isWebGL(gl));\n this.id = id;\n this.gl = gl;\n this.id = props.id || uid('Model');\n this.lastLogTime = 0; // TODO - move to probe.gl\n this.animated = false;\n this.initialize(props);\n }\n\n initialize(props) {\n this.props = {};\n\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);\n this._programManagerState = -1;\n this._managedProgram = false;\n\n const {\n program = null,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this.program = null;\n this.vertexArray = null;\n this._programDirty = true;\n\n // Initialize state\n this.userData = {};\n this.needsRedraw = true;\n\n // Attributes and buffers\n // Model manages auto Buffer creation from typed arrays\n this._attributes = {}; // All attributes\n this.attributes = {}; // User defined attributes\n\n // Model manages uniform animation\n this.uniforms = {};\n\n // picking options\n this.pickable = true;\n\n this._checkProgram();\n\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms(props.moduleSettings) // Get unforms for supplied parameters\n )\n );\n\n this.drawMode = props.drawMode !== undefined ? props.drawMode : GL.TRIANGLES;\n this.vertexCount = props.vertexCount || 0;\n\n // Track buffers created by setGeometry\n this.geometryBuffers = {};\n\n // geometry might have set drawMode and vertexCount\n this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;\n\n this._setModelProps(props);\n\n // TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated\n this.geometry = {};\n\n // assert(program || program instanceof Program);\n assert(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);\n }\n\n setProps(props) {\n this._setModelProps(props);\n }\n\n delete() {\n // delete all attributes created by this model\n // TODO - should buffer deletes be handled by vertex array?\n for (const key in this._attributes) {\n if (this._attributes[key] !== this.attributes[key]) {\n this._attributes[key].delete();\n }\n }\n\n if (this._managedProgram) {\n this.programManager.release(this.program);\n this._managedProgram = false;\n }\n\n this.vertexArray.delete();\n\n this._deleteGeometryBuffers();\n }\n\n // GETTERS\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getInstanceCount() {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram() {\n return this.program;\n }\n\n setProgram(props) {\n const {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this._programDirty = true;\n }\n\n getUniforms() {\n return this.uniforms;\n }\n\n // SETTERS\n\n setDrawMode(drawMode) {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount) {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount) {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry) {\n this.drawMode = geometry.drawMode;\n this.vertexCount = geometry.getVertexCount();\n\n this._deleteGeometryBuffers();\n\n this.geometryBuffers = getBuffersFromGeometry(this.gl, geometry);\n this.vertexArray.setAttributes(this.geometryBuffers);\n return this;\n }\n\n setAttributes(attributes = {}) {\n // Avoid setting needsRedraw if no attributes\n if (isObjectEmpty(attributes)) {\n return this;\n }\n\n const normalizedAttributes = {};\n for (const name in attributes) {\n const attribute = attributes[name];\n // The `getValue` call provides support for deck.gl `Attribute` class\n // TODO - remove once deck refactoring completes\n normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;\n }\n\n this.vertexArray.setAttributes(normalizedAttributes);\n return this;\n }\n\n // TODO - should actually set the uniforms\n setUniforms(uniforms = {}) {\n Object.assign(this.uniforms, uniforms);\n\n return this;\n }\n\n getModuleUniforms(opts) {\n this._checkProgram();\n\n const getUniforms = this.programManager.getUniforms(this.program);\n\n if (getUniforms) {\n return getUniforms(opts);\n }\n\n return {};\n }\n\n updateModuleSettings(opts) {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n // DRAW CALLS\n\n clear(opts) {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw(opts = {}) {\n // Lazy update program and vertex array\n this._checkProgram();\n\n const {\n moduleSettings = null,\n framebuffer,\n uniforms = {},\n attributes = {},\n transformFeedback = this.transformFeedback,\n parameters = {},\n vertexArray = this.vertexArray\n } = opts;\n\n // Update model with any just provided attributes, settings or uniforms\n this.setAttributes(attributes);\n this.updateModuleSettings(moduleSettings);\n this.setUniforms(uniforms);\n\n let logPriority;\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);\n }\n\n const drawParams = this.vertexArray.getDrawParams();\n const {\n isIndexed = drawParams.isIndexed,\n indexType = drawParams.indexType,\n indexOffset = drawParams.indexOffset,\n vertexArrayInstanced = drawParams.isInstanced\n } = this.props;\n\n if (vertexArrayInstanced && !this.isInstanced) {\n log.warn('Found instanced attributes on non-instanced model', this.id)();\n }\n\n const {isInstanced, instanceCount} = this;\n\n const {onBeforeRender = NOOP, onAfterRender = NOOP} = this.props;\n\n onBeforeRender();\n\n this.program.setUniforms(this.uniforms);\n\n const didDraw = this.program.draw(\n Object.assign(DRAW_PARAMS, opts, {\n logPriority,\n uniforms: null, // Already set (may contain \"function values\" not understood by Program)\n framebuffer,\n parameters,\n drawMode: this.getDrawMode(),\n vertexCount: this.getVertexCount(),\n vertexArray,\n transformFeedback,\n isIndexed,\n indexType,\n isInstanced,\n instanceCount,\n offset: isIndexed ? indexOffset : 0\n })\n );\n\n onAfterRender();\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n this._logDrawCallEnd(logPriority, vertexArray, framebuffer);\n }\n\n return didDraw;\n }\n\n // Draw call for transform feedback\n transform(opts = {}) {\n const {discard = true, feedbackBuffers, unbindModels = []} = opts;\n\n let {parameters} = opts;\n\n if (feedbackBuffers) {\n this._setFeedbackBuffers(feedbackBuffers);\n }\n\n if (discard) {\n parameters = Object.assign({}, parameters, {[GL.RASTERIZER_DISCARD]: discard});\n }\n\n unbindModels.forEach(model => model.vertexArray.unbindBuffers());\n try {\n this.draw(Object.assign({}, opts, {parameters}));\n } finally {\n unbindModels.forEach(model => model.vertexArray.bindBuffers());\n }\n\n return this;\n }\n\n // DEPRECATED METHODS\n\n render(uniforms = {}) {\n log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();\n return this.setUniforms(uniforms).draw();\n }\n\n // PRIVATE METHODS\n\n _setModelProps(props) {\n Object.assign(this.props, props);\n\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n\n if ('pickable' in props) {\n this.pickable = props.pickable;\n }\n\n if ('instanceCount' in props) {\n this.instanceCount = props.instanceCount;\n }\n if ('geometry' in props) {\n this.setGeometry(props.geometry);\n }\n\n // webgl settings\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('_feedbackBuffers' in props) {\n this._setFeedbackBuffers(props._feedbackBuffers);\n }\n }\n\n _checkProgram() {\n const needsUpdate =\n this._programDirty || this.programManager.stateHash !== this._programManagerState;\n\n if (!needsUpdate) {\n return;\n }\n\n let {program} = this.programProps;\n\n if (program) {\n this._managedProgram = false;\n } else {\n const {\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = this.programProps;\n program = this.programManager.get({\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n });\n if (this.program && this._managedProgram) {\n this.programManager.release(this.program);\n }\n this._programManagerState = this.programManager.stateHash;\n this._managedProgram = true;\n }\n\n assert(program instanceof Program, 'Model needs a program');\n\n this._programDirty = false;\n\n if (program === this.program) {\n return;\n }\n\n this.program = program;\n\n if (this.vertexArray) {\n // @ts-ignore TODO\n this.vertexArray.setProps({program: this.program, attributes: this.vertexArray.attributes});\n } else {\n this.vertexArray = new VertexArray(this.gl, {program: this.program});\n }\n\n // Make sure we have some reasonable default uniforms in place\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms() // Get all default uniforms,\n )\n );\n }\n\n _deleteGeometryBuffers() {\n for (const name in this.geometryBuffers) {\n // Buffer is raw value (for indices) or first element of [buffer, accessor] pair\n const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];\n if (buffer instanceof Buffer) {\n buffer.delete();\n }\n }\n }\n\n // Updates (evaluates) all function valued uniforms based on a new set of animationProps\n // experimental\n _setAnimationProps(animationProps) {\n if (this.animated) {\n assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');\n // const animatedUniforms = this._evaluateAnimateUniforms(animationProps);\n // Object.assign(this.uniforms, animatedUniforms);\n }\n }\n\n // Transform Feedback\n\n _setFeedbackBuffers(feedbackBuffers = {}) {\n // Avoid setting needsRedraw if no feedbackBuffers\n if (isObjectEmpty(feedbackBuffers)) {\n return this;\n }\n\n const {gl} = this.program;\n this.transformFeedback =\n this.transformFeedback ||\n new TransformFeedback(gl, {\n program: this.program\n });\n\n this.transformFeedback.setBuffers(feedbackBuffers);\n return this;\n }\n\n _logDrawCallStart(logLevel) {\n const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;\n if (Date.now() - this.lastLogTime < logDrawTimeout) {\n return undefined;\n }\n\n this.lastLogTime = Date.now();\n\n log.group(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`, {collapsed: log.level <= 2})();\n\n return logLevel;\n }\n\n _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {\n // HACK: logLevel === undefined means logDrawCallStart didn't run\n if (logLevel === undefined) {\n return;\n }\n\n const attributeTable = getDebugTableForVertexArray({\n vertexArray,\n header: `${this.id} attributes`,\n // @ts-ignore\n attributes: this._attributes\n });\n\n const {table: uniformTable, unusedTable, unusedCount} = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms)\n });\n\n // log missing uniforms\n const {table: missingTable, count: missingCount} = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms),\n undefinedOnly: true\n });\n\n if (missingCount > 0) {\n log.log('MISSING UNIFORMS', Object.keys(missingTable))();\n // log.table(logLevel, missingTable)();\n }\n if (unusedCount > 0) {\n log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();\n // log.log(logLevel, 'Unused uniforms ', unusedTable)();\n }\n\n const configTable = getDebugTableForProgramConfiguration(this.vertexArray.configuration);\n\n log.table(logLevel, attributeTable)();\n\n log.table(logLevel, uniformTable)();\n\n log.table(logLevel + 1, configTable)();\n\n if (framebuffer) {\n framebuffer.log({logLevel: LOG_DRAW_PRIORITY, message: `Rendered to ${framebuffer.id}`});\n }\n\n log.groupEnd(LOG_DRAW_PRIORITY)();\n }\n}\n","import ShaderModule from './shader-module';\nimport {assert} from '../utils';\n\n// Instantiate shader modules and any dependencies resolve dependencies\nexport function resolveModules(modules) {\n return getShaderDependencies(instantiateModules(modules));\n}\n\n/**\n * Takes a list of shader module names and returns a new list of\n * shader module names that includes all dependencies, sorted so\n * that modules that are dependencies of other modules come first.\n *\n * If the shader glsl code from the returned modules is concatenated\n * in the reverse order, it is guaranteed that all functions be resolved and\n * that all function and variable definitions come before use.\n *\n * @param {String[]} modules - Array of modules (inline modules or module names)\n * @return {String[]} - Array of modules\n */\nfunction getShaderDependencies(modules) {\n const moduleMap = {};\n const moduleDepth = {};\n getDependencyGraph({modules, level: 0, moduleMap, moduleDepth});\n\n // Return a reverse sort so that dependencies come before the modules that use them\n return Object.keys(moduleDepth)\n .sort((a, b) => moduleDepth[b] - moduleDepth[a])\n .map(name => moduleMap[name]);\n}\n\n/**\n * Recursively checks module dpendencies to calculate dependency\n * level of each module.\n *\n * @param {object} options\n * @param {object[]} options.modules - Array of modules\n * @param {number} options.level - Current level\n * @param {object} options.moduleMap -\n * @param {object} options.moduleDepth - Current level\n * @return {object} - Map of module name to its level\n */\n// Adds another level of dependencies to the result map\nfunction getDependencyGraph({modules, level, moduleMap, moduleDepth}) {\n if (level >= 5) {\n throw new Error('Possible loop in shader dependency graph');\n }\n\n // Update level on all current modules\n for (const module of modules) {\n moduleMap[module.name] = module;\n if (moduleDepth[module.name] === undefined || moduleDepth[module.name] < level) {\n moduleDepth[module.name] = level;\n }\n }\n\n // Recurse\n for (const module of modules) {\n if (module.dependencies) {\n getDependencyGraph({modules: module.dependencies, level: level + 1, moduleMap, moduleDepth});\n }\n }\n}\n\nfunction instantiateModules(modules, seen) {\n return modules.map(module => {\n if (module instanceof ShaderModule) {\n return module;\n }\n\n assert(\n typeof module !== 'string',\n `Shader module use by name is deprecated. Import shader module '${module}' and use it directly.`\n );\n assert(module.name, 'shader module has no name');\n\n module = new ShaderModule(module);\n module.dependencies = instantiateModules(module.dependencies);\n\n return module;\n });\n}\n\nexport const TEST_EXPORTS = {\n getShaderDependencies,\n getDependencyGraph\n};\n","// opts allows user agent to be overridden for testing\nexport default function isOldIE(opts = {}) {\n const navigator = typeof window !== 'undefined' ? window.navigator || {} : {};\n // @ts-ignore\n const userAgent = opts.userAgent || navigator.userAgent || '';\n // We only care about older versions of IE (IE 11 and below). Newer versions of IE (Edge)\n // have much better web standards support.\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n return isMSIE || isTrident;\n}\n","// Feature detection for WebGL\n//\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\n/* eslint-disable no-inline-comments, max-len */\nimport isOldIE from './is-old-ie';\nimport assert from './assert';\n\nconst GL_VENDOR = 0x1f00;\nconst GL_RENDERER = 0x1f01;\nconst GL_VERSION = 0x1f02;\nconst GL_SHADING_LANGUAGE_VERSION = 0x8b8c;\n\n// Defines luma.gl \"feature\" names and semantics\nconst WEBGL_FEATURES = {\n // GLSL extensions\n GLSL_FRAG_DATA: ['WEBGL_draw_buffers', true], // TODO - name makes no sense in GLSL 3.00\n GLSL_FRAG_DEPTH: ['EXT_frag_depth', true],\n GLSL_DERIVATIVES: ['OES_standard_derivatives', true],\n GLSL_TEXTURE_LOD: ['EXT_shader_texture_lod', true]\n};\n\n// Create a key-mirrored FEATURES array\nconst FEATURES = {};\nObject.keys(WEBGL_FEATURES).forEach(key => {\n FEATURES[key] = key;\n});\n\nexport {FEATURES};\n\nfunction isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n return Boolean(gl && gl._version === 2);\n}\n\nexport function getContextInfo(gl) {\n const info = gl.getExtension('WEBGL_debug_renderer_info');\n const vendor = gl.getParameter((info && info.UNMASKED_VENDOR_WEBGL) || GL_VENDOR);\n const renderer = gl.getParameter((info && info.UNMASKED_RENDERER_WEBGL) || GL_RENDERER);\n const gpuVendor = identifyGPUVendor(vendor, renderer);\n const gpuInfo = {\n gpuVendor,\n vendor,\n renderer,\n version: gl.getParameter(GL_VERSION),\n shadingLanguageVersion: gl.getParameter(GL_SHADING_LANGUAGE_VERSION)\n };\n return gpuInfo;\n}\n\nfunction identifyGPUVendor(vendor, renderer) {\n if (vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i)) {\n return 'NVIDIA';\n }\n if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {\n return 'INTEL';\n }\n if (\n vendor.match(/AMD/i) ||\n renderer.match(/AMD/i) ||\n vendor.match(/ATI/i) ||\n renderer.match(/ATI/i)\n ) {\n return 'AMD';\n }\n return 'UNKNOWN GPU';\n}\n\nconst compiledGlslExtensions = {};\n\n// Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n// but fail to compile when the extension is enabled in the shader. Specifically,\n// the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included\n// in the list of supported extensions.\n// opts allows user agent to be overridden for testing\n/*\n* Inputs :\n* gl : WebGL context\n* cap : Key of WEBGL_FEATURES object identifying the extension\n* opts :\n* behavior : behavior of extension to be tested, by defualt `enable` is used\n* Returns : true, if shader is compiled successfully, false otherwise\n*/\nexport function canCompileGLGSExtension(gl, cap, opts = {}) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n if (!isOldIE(opts)) {\n return true;\n }\n\n if (cap in compiledGlslExtensions) {\n return compiledGlslExtensions[cap];\n }\n\n const extensionName = feature[0];\n const behavior = opts.behavior || 'enable';\n const source = `#extension GL_${extensionName} : ${behavior}\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGlslExtensions[cap] = canCompile;\n return canCompile;\n}\n\n// TODO - cache the value\nfunction getFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n // Get extension name from table\n const extensionName = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n // Check if the value is dependent on checking an extension\n const value =\n typeof extensionName === 'string' ? Boolean(gl.getExtension(extensionName)) : extensionName;\n\n assert(value === false || value === true);\n\n return value;\n}\n\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => getFeature(gl, feature));\n}\n","// TRANSPILATION TABLES\n\nfunction testVariable(qualifier) {\n /*\n should match:\n in float weight;\n out vec4 positions[2];\n should not match:\n void f(out float a, in float b) {}\n */\n return new RegExp(`\\\\b${qualifier}[ \\\\t]+(\\\\w+[ \\\\t]+\\\\w+(\\\\[\\\\w+\\\\])?;)`, 'g');\n}\n\n/** Simple regex replacements for GLSL ES 1.00 syntax that has changed in GLSL ES 3.00 */\nconst ES300_REPLACEMENTS = [\n // Fix poorly formatted version directive\n [/^(#version[ \\t]+(100|300[ \\t]+es))?[ \\t]*\\n/, '#version 300 es\\n'],\n // The individual `texture...()` functions were replaced with `texture()` overloads\n [/\\btexture(2D|2DProj|Cube)Lod(EXT)?\\(/g, 'textureLod('],\n [/\\btexture(2D|2DProj|Cube)(EXT)?\\(/g, 'texture(']\n];\n\nconst ES300_VERTEX_REPLACEMENTS = [\n ...ES300_REPLACEMENTS,\n // `attribute` keyword replaced with `in`\n [testVariable('attribute'), 'in $1'],\n // `varying` keyword replaced with `out`\n [testVariable('varying'), 'out $1']\n];\n\n/** Simple regex replacements for GLSL ES 1.00 syntax that has changed in GLSL ES 3.00 */\nconst ES300_FRAGMENT_REPLACEMENTS = [\n ...ES300_REPLACEMENTS,\n // `varying` keyword replaced with `in`\n [testVariable('varying'), 'in $1']\n];\n\nconst ES100_REPLACEMENTS = [\n [/^#version[ \\t]+300[ \\t]+es/, '#version 100'],\n\n // In GLSL 1.00 ES these functions are provided by an extension\n [/\\btexture(2D|2DProj|Cube)Lod\\(/g, 'texture$1LodEXT('],\n\n // Overloads in GLSL 3.00 map to individual functions. Note that we cannot\n // differentiate 2D,2DProj,Cube without type analysis so we choose the most common variant.\n [/\\btexture\\(/g, 'texture2D('],\n [/\\btextureLod\\(/g, 'texture2DLodEXT(']\n];\n\nconst ES100_VERTEX_REPLACEMENTS = [\n ...ES100_REPLACEMENTS,\n [testVariable('in'), 'attribute $1'],\n [testVariable('out'), 'varying $1']\n];\n\nconst ES100_FRAGMENT_REPLACEMENTS = [\n ...ES100_REPLACEMENTS,\n // Replace `in` with `varying`\n [testVariable('in'), 'varying $1']\n];\n\nconst ES100_FRAGMENT_OUTPUT_NAME = 'gl_FragColor';\nconst ES300_FRAGMENT_OUTPUT_REGEX = /\\bout[ \\t]+vec4[ \\t]+(\\w+)[ \\t]*;\\n?/;\n\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\n\n// Transpiles shader source code to target GLSL version\n// Note: We always run transpiler even if same version e.g. 3.00 => 3.00\n// RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/portable-glsl-300-rfc.md\nexport default function transpileShader(source, targetGLSLVersion, isVertex) {\n switch (targetGLSLVersion) {\n case 300:\n return isVertex\n ? convertShader(source, ES300_VERTEX_REPLACEMENTS)\n : convertFragmentShaderTo300(source);\n case 100:\n return isVertex\n ? convertShader(source, ES100_VERTEX_REPLACEMENTS)\n : convertFragmentShaderTo100(source);\n default:\n throw new Error(`unknown GLSL version ${targetGLSLVersion}`);\n }\n}\n\nfunction convertShader(source, replacements) {\n for (const [pattern, replacement] of replacements) {\n source = source.replace(pattern, replacement);\n }\n return source;\n}\n\nfunction convertFragmentShaderTo300(source) {\n source = convertShader(source, ES300_FRAGMENT_REPLACEMENTS);\n\n const outputMatch = source.match(ES300_FRAGMENT_OUTPUT_REGEX);\n if (outputMatch) {\n const outputName = outputMatch[1];\n source = source.replace(new RegExp(`\\\\b${ES100_FRAGMENT_OUTPUT_NAME}\\\\b`, 'g'), outputName);\n } else {\n const outputName = 'fragmentColor';\n source = source\n .replace(REGEX_START_OF_MAIN, match => `out vec4 ${outputName};\\n${match}`)\n .replace(new RegExp(`\\\\b${ES100_FRAGMENT_OUTPUT_NAME}\\\\b`, 'g'), outputName);\n }\n\n return source;\n}\n\nfunction convertFragmentShaderTo100(source) {\n source = convertShader(source, ES100_FRAGMENT_REPLACEMENTS);\n\n const outputMatch = source.match(ES300_FRAGMENT_OUTPUT_REGEX);\n if (outputMatch) {\n const outputName = outputMatch[1];\n source = source\n .replace(ES300_FRAGMENT_OUTPUT_REGEX, '')\n .replace(new RegExp(`\\\\b${outputName}\\\\b`, 'g'), ES100_FRAGMENT_OUTPUT_NAME);\n }\n\n return source;\n}\n","import {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {resolveModules} from './resolve-modules';\nimport {getPlatformShaderDefines, getVersionDefines} from './platform-defines';\nimport injectShader, {DECLARATION_INJECT_MARKER} from './inject-shader';\nimport transpileShader from './transpile-shader';\nimport {assert} from '../utils';\n\nconst INJECT_SHADER_DECLARATIONS = `\\n\\n${DECLARATION_INJECT_MARKER}\\n\\n`;\n\nconst SHADER_TYPE = {\n [VERTEX_SHADER]: 'vertex',\n [FRAGMENT_SHADER]: 'fragment'\n};\n\n// Precision prologue to inject before functions are injected in shader\n// TODO - extract any existing prologue in the fragment source and move it up...\nconst FRAGMENT_SHADER_PROLOGUE = `\\\nprecision highp float;\n\n`;\n\n// Inject a list of modules\nexport function assembleShaders(gl, opts) {\n const {vs, fs} = opts;\n const modules = resolveModules(opts.modules || []);\n return {\n gl,\n vs: assembleShader(gl, Object.assign({}, opts, {source: vs, type: VERTEX_SHADER, modules})),\n fs: assembleShader(gl, Object.assign({}, opts, {source: fs, type: FRAGMENT_SHADER, modules})),\n getUniforms: assembleGetUniforms(modules)\n };\n}\n\n// Pulls together complete source code for either a vertex or a fragment shader\n// adding prologues, requested module chunks, and any final injections.\nfunction assembleShader(\n gl,\n {\n id,\n source,\n type,\n modules,\n defines = {},\n hookFunctions = [],\n inject = {},\n transpileToGLSL100 = false,\n prologue = true,\n log\n }\n) {\n assert(typeof source === 'string', 'shader source must be a string');\n\n const isVertex = type === VERTEX_SHADER;\n\n const sourceLines = source.split('\\n');\n let glslVersion = 100;\n let versionLine = '';\n let coreSource = source;\n // Extract any version directive string from source.\n // TODO : keep all pre-processor statements at the begining of the shader.\n if (sourceLines[0].indexOf('#version ') === 0) {\n glslVersion = 300; // TODO - regexp that matches actual version number\n versionLine = sourceLines[0];\n coreSource = sourceLines.slice(1).join('\\n');\n } else {\n versionLine = `#version ${glslVersion}`;\n }\n\n // Combine Module and Application Defines\n const allDefines = {};\n modules.forEach(module => {\n Object.assign(allDefines, module.getDefines());\n });\n Object.assign(allDefines, defines);\n\n // Add platform defines (use these to work around platform-specific bugs and limitations)\n // Add common defines (GLSL version compatibility, feature detection)\n // Add precision declaration for fragment shaders\n let assembledSource = prologue\n ? `\\\n${versionLine}\n${getShaderName({id, source, type})}\n${getShaderType({type})}\n${getPlatformShaderDefines(gl)}\n${getVersionDefines(gl, glslVersion, !isVertex)}\n${getApplicationDefines(allDefines)}\n${isVertex ? '' : FRAGMENT_SHADER_PROLOGUE}\n`\n : `${versionLine}\n`;\n\n const hookFunctionMap = normalizeHookFunctions(hookFunctions);\n\n // Add source of dependent modules in resolved order\n const hookInjections = {};\n const declInjections = {};\n const mainInjections = {};\n\n for (const key in inject) {\n const injection =\n typeof inject[key] === 'string' ? {injection: inject[key], order: 0} : inject[key];\n const match = key.match(/^(v|f)s:(#)?([\\w-]+)$/);\n if (match) {\n const hash = match[2];\n const name = match[3];\n if (hash) {\n if (name === 'decl') {\n declInjections[key] = [injection];\n } else {\n mainInjections[key] = [injection];\n }\n } else {\n hookInjections[key] = [injection];\n }\n } else {\n // Regex injection\n mainInjections[key] = [injection];\n }\n }\n\n for (const module of modules) {\n if (log) {\n module.checkDeprecations(coreSource, log);\n }\n const moduleSource = module.getModuleSource(type, glslVersion);\n // Add the module source, and a #define that declares it presence\n assembledSource += moduleSource;\n\n const injections = module.injections[type];\n for (const key in injections) {\n const match = key.match(/^(v|f)s:#([\\w-]+)$/);\n if (match) {\n const name = match[2];\n const injectionType = name === 'decl' ? declInjections : mainInjections;\n injectionType[key] = injectionType[key] || [];\n injectionType[key].push(injections[key]);\n } else {\n hookInjections[key] = hookInjections[key] || [];\n hookInjections[key].push(injections[key]);\n }\n }\n }\n\n // For injectShader\n assembledSource += INJECT_SHADER_DECLARATIONS;\n\n assembledSource = injectShader(assembledSource, type, declInjections);\n\n assembledSource += getHookFunctions(hookFunctionMap[type], hookInjections);\n\n // Add the version directive and actual source of this shader\n assembledSource += coreSource;\n\n // Apply any requested shader injections\n assembledSource = injectShader(assembledSource, type, mainInjections);\n\n assembledSource = transpileShader(\n assembledSource,\n transpileToGLSL100 ? 100 : glslVersion,\n isVertex\n );\n\n return assembledSource;\n}\n\n// Returns a combined `getUniforms` covering the options for all the modules,\n// the created function will pass on options to the inidividual `getUniforms`\n// function of each shader module and combine the results into one object that\n// can be passed to setUniforms.\nfunction assembleGetUniforms(modules) {\n return function getUniforms(opts) {\n const uniforms = {};\n for (const module of modules) {\n // `modules` is already sorted by dependency level. This guarantees that\n // modules have access to the uniforms that are generated by their dependencies.\n const moduleUniforms = module.getUniforms(opts, uniforms);\n Object.assign(uniforms, moduleUniforms);\n }\n return uniforms;\n };\n}\n\nfunction getShaderType({type}) {\n return `\n#define SHADER_TYPE_${SHADER_TYPE[type].toUpperCase()}\n`;\n}\n\n// Generate \"glslify-compatible\" SHADER_NAME defines\n// These are understood by the GLSL error parsing function\n// If id is provided and no SHADER_NAME constant is present in source, create one\nfunction getShaderName({id, source, type}) {\n const injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;\n return injectShaderName\n ? `\n#define SHADER_NAME ${id}_${SHADER_TYPE[type]}\n\n`\n : '';\n}\n\n// Generates application defines from an object\nfunction getApplicationDefines(defines = {}) {\n let count = 0;\n let sourceText = '';\n for (const define in defines) {\n if (count === 0) {\n sourceText += '\\n// APPLICATION DEFINES\\n';\n }\n count++;\n\n const value = defines[define];\n if (value || Number.isFinite(value)) {\n sourceText += `#define ${define.toUpperCase()} ${defines[define]}\\n`;\n }\n }\n if (count === 0) {\n sourceText += '\\n';\n }\n return sourceText;\n}\n\nfunction getHookFunctions(hookFunctions, hookInjections) {\n let result = '';\n for (const hookName in hookFunctions) {\n const hookFunction = hookFunctions[hookName];\n result += `void ${hookFunction.signature} {\\n`;\n if (hookFunction.header) {\n result += ` ${hookFunction.header}`;\n }\n if (hookInjections[hookName]) {\n const injections = hookInjections[hookName];\n injections.sort((a, b) => a.order - b.order);\n for (const injection of injections) {\n result += ` ${injection.injection}\\n`;\n }\n }\n if (hookFunction.footer) {\n result += ` ${hookFunction.footer}`;\n }\n result += '}\\n';\n }\n\n return result;\n}\n\nfunction normalizeHookFunctions(hookFunctions) {\n const result = {\n vs: {},\n fs: {}\n };\n\n hookFunctions.forEach(hook => {\n let opts;\n if (typeof hook !== 'string') {\n opts = hook;\n hook = opts.hook;\n } else {\n opts = {};\n }\n hook = hook.trim();\n const [stage, signature] = hook.split(':');\n const name = hook.replace(/\\(.+/, '');\n result[stage][name] = Object.assign(opts, {signature});\n });\n\n return result;\n}\n","import {getContextInfo, hasFeatures, canCompileGLGSExtension, FEATURES} from '../utils/webgl-info';\n\nexport function getPlatformShaderDefines(gl) {\n const debugInfo = getContextInfo(gl);\n\n switch (debugInfo.gpuVendor.toLowerCase()) {\n case 'nvidia':\n return `\\\n#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n`;\n\n case 'intel':\n return `\\\n#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n\n case 'amd':\n // AMD Does not eliminate fp64 code\n return `\\\n#define AMD_GPU\n`;\n\n default:\n // We don't know what GPU it is, could be that the GPU driver or\n // browser is not implementing UNMASKED_RENDERER constant and not\n // reporting a correct name\n return `\\\n#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n`;\n }\n}\n\nexport function getVersionDefines(gl, glslVersion, isFragment) {\n // Add shadertools defines to let shaders portably v1/v3 check for features\n let versionDefines = `\\\n#if (__VERSION__ > 120)\n\n# define FEATURE_GLSL_DERIVATIVES\n# define FEATURE_GLSL_DRAW_BUFFERS\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FEATURE_GLSL_TEXTURE_LOD\n\n// DEPRECATED FLAGS, remove in v9\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n\n#endif // __VERSION\n`;\n\n if (hasFeatures(gl, FEATURES.GLSL_FRAG_DEPTH)) {\n versionDefines += `\\\n\n// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FEATURE_GLSL_FRAG_DEPTH\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_DERIVATIVES) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_DERIVATIVES)\n ) {\n versionDefines += `\\\n\n// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define FEATURE_GLSL_DERIVATIVES\n# define DERIVATIVES\n#endif\n`;\n }\n if (\n hasFeatures(gl, FEATURES.GLSL_FRAG_DATA) &&\n canCompileGLGSExtension(gl, FEATURES.GLSL_FRAG_DATA, {behavior: 'require'})\n ) {\n versionDefines += `\\\n\n// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define FEATURE_GLSL_DRAW_BUFFERS\n#define DRAW_BUFFERS\n#endif\n`;\n }\n if (hasFeatures(gl, FEATURES.GLSL_TEXTURE_LOD)) {\n versionDefines += `\\\n// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n\n# define FEATURE_GLSL_TEXTURE_LOD\n# define TEXTURE_LOD\n\n#endif\n`;\n }\n return versionDefines;\n}\n","import {assembleShaders} from '@luma.gl/shadertools';\nimport {Program} from '@luma.gl/webgl';\n\nexport default class ProgramManager {\n static getDefaultProgramManager(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);\n\n return gl.luma.defaultProgramManager;\n }\n\n constructor(gl) {\n this.gl = gl;\n\n this._programCache = {};\n this._getUniforms = {};\n this._registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n this._hookFunctions = [];\n this._defaultModules = [];\n\n this._hashes = {};\n this._hashCounter = 0;\n this.stateHash = 0; // Used change hashing if hooks are modified\n this._useCounts = {};\n }\n\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === module.name)) {\n this._defaultModules.push(module);\n }\n\n this.stateHash++;\n }\n\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n\n this._hookFunctions.push(hook);\n\n this.stateHash++;\n }\n\n get(props = {}) {\n const {\n vs = '',\n fs = '',\n defines = {},\n inject = {},\n varyings = [],\n bufferMode = 0x8c8d,\n transpileToGLSL100 = false\n } = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const vsHash = this._getHash(vs);\n const fsHash = this._getHash(fs);\n const moduleHashes = modules.map(m => this._getHash(m.name)).sort();\n const varyingHashes = varyings.map(v => this._getHash(v));\n\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(defines[key]));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${\n transpileToGLSL100 ? 'T' : ''\n }`;\n\n if (!this._programCache[hash]) {\n const assembled = assembleShaders(this.gl, {\n vs,\n fs,\n modules,\n inject,\n defines,\n hookFunctions: this._hookFunctions,\n transpileToGLSL100\n });\n\n this._programCache[hash] = new Program(this.gl, {\n hash,\n vs: assembled.vs,\n fs: assembled.fs,\n varyings,\n bufferMode\n });\n\n this._getUniforms[hash] = assembled.getUniforms || (x => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return this._programCache[hash];\n }\n\n getUniforms(program) {\n return this._getUniforms[program.hash] || null;\n }\n\n release(program) {\n const hash = program.hash;\n this._useCounts[hash]--;\n\n if (this._useCounts[hash] === 0) {\n this._programCache[hash].delete();\n delete this._programCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n\n return this._hashes[key];\n }\n\n // Dedup and combine with default modules\n _getModuleList(appModules = []) {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n","import {assert} from '../utils';\nconst FS100 = `void main() {gl_FragColor = vec4(0);}`;\nconst FS_GLES = `\\\nout vec4 transform_output;\nvoid main() {\n transform_output = vec4(0);\n}`;\nconst FS300 = `#version 300 es\\n${FS_GLES}`;\n\n// Prase given glsl line and return qualifier details or null\nexport function getQualifierDetails(line, qualifiers) {\n qualifiers = Array.isArray(qualifiers) ? qualifiers : [qualifiers];\n const words = line.replace(/^\\s+/, '').split(/\\s+/);\n // TODO add support for precession qualifiers (highp, mediump and lowp)\n const [qualifier, type, definition] = words;\n if (!qualifiers.includes(qualifier) || !type || !definition) {\n return null;\n }\n const name = definition.split(';')[0];\n return {qualifier, type, name};\n}\n\n// Given the shader version, input and output variable names,\n// builds and return a pass through fragment shader.\nexport function getPassthroughFS(options = {}) {\n const {version = 100, input, inputType, output} = options;\n if (!input) {\n if (version === 300) {\n // Fast-path for WebGL 2.0\n return FS300;\n } else if (version > 300) {\n // Use the supplied version for OpenGL/ES 3.2+\n return `#version ${version}\\n${FS_GLES}`;\n }\n // Fast-path for WebGL 1.0\n return FS100;\n }\n const outputValue = convertToVec4(input, inputType);\n if (version >= 300) {\n // If version is 300, assume WebGL 2.0\n return `\\\n#version ${version} ${version === 300 ? 'es' : ''}\nin ${inputType} ${input};\nout vec4 ${output};\nvoid main() {\n ${output} = ${outputValue};\n}`;\n }\n // WebGL 1.0\n return `\\\nvarying ${inputType} ${input};\nvoid main() {\n gl_FragColor = ${outputValue};\n}`;\n}\n\n// convert glsl type to suffix\nexport function typeToChannelSuffix(type) {\n switch (type) {\n case 'float':\n return 'x';\n case 'vec2':\n return 'xy';\n case 'vec3':\n return 'xyz';\n case 'vec4':\n return 'xyzw';\n default:\n assert(false);\n return null;\n }\n}\n\n// convert glsl type to channel count\nexport function typeToChannelCount(type) {\n switch (type) {\n case 'float':\n return 1;\n case 'vec2':\n return 2;\n case 'vec3':\n return 3;\n case 'vec4':\n return 4;\n default:\n assert(false);\n return null;\n }\n}\n\n// Returns glsl instruction for converting to vec4\nexport function convertToVec4(variable, type) {\n switch (type) {\n case 'float':\n return `vec4(${variable}, 0.0, 0.0, 1.0)`;\n case 'vec2':\n return `vec4(${variable}, 0.0, 1.0)`;\n case 'vec3':\n return `vec4(${variable}, 1.0)`;\n case 'vec4':\n return variable;\n default:\n assert(false);\n return null;\n }\n}\n","import {isWebGL2} from '@luma.gl/gltools';\nimport {Buffer, TransformFeedback} from '@luma.gl/webgl';\nimport {assert} from '@luma.gl/webgl';\n\nexport default class BufferTransform {\n constructor(gl, props = {}) {\n this.gl = gl;\n this.currentIndex = 0;\n this.feedbackMap = {};\n this.varyings = null; // varyings array\n this.bindings = []; // each element is an object : {sourceBuffers, feedbackBuffers, transformFeedback}\n\n this.resources = {}; // resources to be deleted\n\n this._initialize(props);\n Object.seal(this);\n }\n\n setupResources(opts) {\n for (const binding of this.bindings) {\n this._setupTransformFeedback(binding, opts);\n }\n }\n\n updateModelProps(props = {}) {\n const {varyings} = this;\n if (varyings.length > 0) {\n props = Object.assign({}, props, {varyings});\n }\n return props;\n }\n\n getDrawOptions(opts = {}) {\n const binding = this.bindings[this.currentIndex];\n const {sourceBuffers, transformFeedback} = binding;\n const attributes = Object.assign({}, sourceBuffers, opts.attributes);\n\n return {attributes, transformFeedback};\n }\n\n swap() {\n if (this.feedbackMap) {\n this.currentIndex = this._getNextIndex();\n return true;\n }\n return false;\n }\n\n // update source and/or feedbackBuffers\n update(opts = {}) {\n this._setupBuffers(opts);\n }\n\n // returns current feedbackBuffer of given name\n getBuffer(varyingName) {\n const {feedbackBuffers} = this.bindings[this.currentIndex];\n const bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;\n if (!bufferOrParams) {\n return null;\n }\n return bufferOrParams instanceof Buffer ? bufferOrParams : bufferOrParams.buffer;\n }\n\n getData(options = {}) {\n const {varyingName} = options;\n const buffer = this.getBuffer(varyingName);\n if (buffer) {\n return buffer.getData();\n }\n return null;\n }\n\n // Delete owned resources.\n delete() {\n for (const name in this.resources) {\n this.resources[name].delete();\n }\n }\n\n // Private\n\n _initialize(props = {}) {\n this._setupBuffers(props);\n this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);\n if (this.varyings.length > 0) {\n // if writting to buffers make sure it is WebGL2\n assert(isWebGL2(this.gl));\n }\n }\n\n // auto create feedback buffers if requested\n _getFeedbackBuffers(props) {\n const {sourceBuffers = {}} = props;\n const feedbackBuffers = {};\n if (this.bindings[this.currentIndex]) {\n // this gurantees a partial feedback buffer set doesn't update\n // previously set buffers during auto creation mode.\n Object.assign(feedbackBuffers, this.bindings[this.currentIndex].feedbackBuffers);\n }\n if (this.feedbackMap) {\n // feedbackMap is defined as sourceBuffer as key and feedbackBuffer name as object\n for (const sourceName in this.feedbackMap) {\n const feedbackName = this.feedbackMap[sourceName];\n if (sourceName in sourceBuffers) {\n feedbackBuffers[feedbackName] = sourceName;\n }\n }\n }\n Object.assign(feedbackBuffers, props.feedbackBuffers);\n for (const bufferName in feedbackBuffers) {\n const bufferOrRef = feedbackBuffers[bufferName];\n if (typeof bufferOrRef === 'string') {\n // Create new buffer with same layout and settings as source buffer\n const sourceBuffer = sourceBuffers[bufferOrRef];\n const {byteLength, usage, accessor} = sourceBuffer;\n feedbackBuffers[bufferName] = this._createNewBuffer(bufferName, {\n byteLength,\n usage,\n accessor\n });\n }\n }\n\n return feedbackBuffers;\n }\n\n _setupBuffers(props = {}) {\n const {sourceBuffers = null} = props;\n Object.assign(this.feedbackMap, props.feedbackMap);\n const feedbackBuffers = this._getFeedbackBuffers(props);\n this._updateBindings({sourceBuffers, feedbackBuffers});\n }\n\n _setupTransformFeedback(binding, {model}) {\n const {program} = model;\n binding.transformFeedback = new TransformFeedback(this.gl, {\n program,\n buffers: binding.feedbackBuffers\n });\n }\n\n _updateBindings(opts) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);\n if (this.feedbackMap) {\n const {sourceBuffers, feedbackBuffers} = this._swapBuffers(this.bindings[this.currentIndex]);\n const nextIndex = this._getNextIndex();\n this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {\n sourceBuffers,\n feedbackBuffers\n });\n }\n }\n\n _updateBinding(binding, opts) {\n if (!binding) {\n return {\n sourceBuffers: Object.assign({}, opts.sourceBuffers),\n feedbackBuffers: Object.assign({}, opts.feedbackBuffers)\n };\n }\n Object.assign(binding.sourceBuffers, opts.sourceBuffers);\n Object.assign(binding.feedbackBuffers, opts.feedbackBuffers);\n if (binding.transformFeedback) {\n binding.transformFeedback.setBuffers(binding.feedbackBuffers);\n }\n return binding;\n }\n\n _swapBuffers(opts) {\n if (!this.feedbackMap) {\n return null;\n }\n const sourceBuffers = Object.assign({}, opts.sourceBuffers);\n const feedbackBuffers = Object.assign({}, opts.feedbackBuffers);\n for (const srcName in this.feedbackMap) {\n const dstName = this.feedbackMap[srcName];\n sourceBuffers[srcName] = opts.feedbackBuffers[dstName];\n feedbackBuffers[dstName] = opts.sourceBuffers[srcName];\n\n // make sure the new destination buffer is a Buffer object\n assert(feedbackBuffers[dstName] instanceof Buffer);\n }\n return {sourceBuffers, feedbackBuffers};\n }\n\n // Create a buffer and add to list of buffers to be deleted.\n _createNewBuffer(name, opts) {\n const buffer = new Buffer(this.gl, opts);\n if (this.resources[name]) {\n this.resources[name].delete();\n }\n this.resources[name] = buffer;\n return buffer;\n }\n\n _getNextIndex() {\n return (this.currentIndex + 1) % 2;\n }\n}\n","// returns GLSL shader version of given shader string\nexport default function getShaderVersion(source) {\n let version = 100;\n const words = source.match(/[^\\s]+/g);\n if (words.length >= 2 && words[0] === '#version') {\n const v = parseInt(words[1], 10);\n if (Number.isFinite(v)) {\n version = v;\n }\n }\n return version;\n}\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst vs = `\\\nattribute float transform_elementID;\n\n// returns half of pixel size, used to move the pixel position to center of the pixel.\nvec2 transform_getPixelSizeHalf(vec2 size) {\n return vec2(1.) / (2. * size);\n}\n\n// returns current elements pixel indeces [x, y],\n// where x ranges in [0 to texSize-1] and y ranges in [0 to texSize-1]\nvec2 transform_getPixelIndices(vec2 texSize, vec2 pixelSizeHalf) {\n // Add safe offset (half of pixel height) before doing floor\n float yIndex = floor((transform_elementID / texSize[0]) + pixelSizeHalf[1]);\n float xIndex = transform_elementID - (yIndex * texSize[0]);\n return vec2(xIndex, yIndex);\n}\n\n// returns current elementID's texture co-ordianate\nvec2 transform_getTexCoord(vec2 size) {\n vec2 pixelSizeHalf = transform_getPixelSizeHalf(size);\n vec2 indices = transform_getPixelIndices(size, pixelSizeHalf);\n vec2 coord = indices / size + pixelSizeHalf;\n return coord;\n}\n\n// returns current elementID's position\nvec2 transform_getPos(vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n // Change from [0 1] range to [-1 1]\n vec2 pos = (texCoord * (2.0, 2.0)) - (1., 1.);\n return pos;\n}\n\n// returns current elementID's pixel value\nvec4 transform_getInput(sampler2D texSampler, vec2 size) {\n vec2 texCoord = transform_getTexCoord(size);\n vec4 textureColor = texture2D(texSampler, texCoord);\n return textureColor;\n}\n`;\n\n/** @type {ShaderModule} */\nexport const transform = {\n name: 'transform',\n vs,\n fs: null\n};\n","import {assert} from '@luma.gl/webgl';\nimport {combineInjects, getQualifierDetails, typeToChannelSuffix} from '@luma.gl/shadertools';\n\nconst SAMPLER_UNIFORM_PREFIX = 'transform_uSampler_';\nconst SIZE_UNIFORM_PREFIX = 'transform_uSize_';\nconst VS_POS_VARIABLE = 'transform_position';\n\n// Scan provided vertex shader\n// for each texture attribute, inject sampler instructions and build uniforms for sampler\n// for texture target, get varying type and inject position instruction\nexport function updateForTextures({vs, sourceTextureMap, targetTextureVarying, targetTexture}) {\n const texAttributeNames = Object.keys(sourceTextureMap);\n let sourceCount = texAttributeNames.length;\n let targetTextureType = null;\n const samplerTextureMap = {};\n let updatedVs = vs;\n let finalInject = {};\n\n if (sourceCount > 0 || targetTextureVarying) {\n const vsLines = updatedVs.split('\\n');\n const updateVsLines = vsLines.slice();\n vsLines.forEach((line, index, lines) => {\n // TODO add early exit\n if (sourceCount > 0) {\n const updated = processAttributeDefinition(line, sourceTextureMap);\n if (updated) {\n const {updatedLine, inject} = updated;\n updateVsLines[index] = updatedLine;\n // sampleInstructions.push(sampleInstruction);\n finalInject = combineInjects([finalInject, inject]);\n Object.assign(samplerTextureMap, updated.samplerTextureMap);\n sourceCount--;\n }\n }\n if (targetTextureVarying && !targetTextureType) {\n targetTextureType = getVaryingType(line, targetTextureVarying);\n }\n });\n\n if (targetTextureVarying) {\n assert(targetTexture);\n const sizeName = `${SIZE_UNIFORM_PREFIX}${targetTextureVarying}`;\n\n const uniformDeclaration = `uniform vec2 ${sizeName};\\n`;\n const posInstructions = `\\\n vec2 ${VS_POS_VARIABLE} = transform_getPos(${sizeName});\n gl_Position = vec4(${VS_POS_VARIABLE}, 0, 1.);\\n`;\n const inject = {\n 'vs:#decl': uniformDeclaration,\n 'vs:#main-start': posInstructions\n };\n finalInject = combineInjects([finalInject, inject]);\n }\n updatedVs = updateVsLines.join('\\n');\n }\n return {\n // updated vertex shader (commented texture attribute definition)\n vs: updatedVs,\n // type (float, vec2, vec3 of vec4) target texture varying\n targetTextureType,\n // required vertex and fragment shader injects\n inject: finalInject,\n // map of sampler name to texture name, can be used to set attributes\n // usefull when swapping textures, as source and destination texture change when swap is called.\n samplerTextureMap\n };\n}\n\n// builds and returns an object contaning size uniform for each texture\nexport function getSizeUniforms({sourceTextureMap, targetTextureVarying, targetTexture}) {\n const uniforms = {};\n let width;\n let height;\n if (targetTextureVarying) {\n ({width, height} = targetTexture);\n uniforms[`${SIZE_UNIFORM_PREFIX}${targetTextureVarying}`] = [width, height];\n }\n for (const textureName in sourceTextureMap) {\n ({width, height} = sourceTextureMap[textureName]);\n uniforms[`${SIZE_UNIFORM_PREFIX}${textureName}`] = [width, height];\n }\n return uniforms;\n}\n\n// Checks if provided line is defining an attribute, if so returns details otherwise null\nfunction getAttributeDefinition(line) {\n return getQualifierDetails(line, ['attribute', 'in']);\n}\n\nfunction getSamplerDeclerations(textureName) {\n const samplerName = `${SAMPLER_UNIFORM_PREFIX}${textureName}`;\n const sizeName = `${SIZE_UNIFORM_PREFIX}${textureName}`;\n const uniformDeclerations = `\\\n uniform sampler2D ${samplerName};\n uniform vec2 ${sizeName};`;\n return {samplerName, sizeName, uniformDeclerations};\n}\n\n// Return size (float, vec2 etc) of a given varying, null if doens't exist.\nexport function getVaryingType(line, varying) {\n const qualaiferDetails = getQualifierDetails(line, ['varying', 'out']);\n if (!qualaiferDetails) {\n return null;\n }\n return qualaiferDetails.name === varying ? qualaiferDetails.type : null;\n}\n\n// build required definitions, sample instructions for each texture attribute\nexport function processAttributeDefinition(line, textureMap) {\n const samplerTextureMap = {};\n const attributeData = getAttributeDefinition(line);\n if (!attributeData) {\n return null;\n }\n const {type, name} = attributeData;\n if (name && textureMap[name]) {\n // eslint-disable-next-line no-useless-escape\n const updatedLine = `\\// ${line} => Replaced by Transform with a sampler`;\n const {samplerName, sizeName, uniformDeclerations} = getSamplerDeclerations(name);\n\n const channels = typeToChannelSuffix(type);\n const sampleInstruction = ` ${type} ${name} = transform_getInput(${samplerName}, ${sizeName}).${channels};\\n`;\n\n samplerTextureMap[samplerName] = name;\n const inject = {\n 'vs:#decl': uniformDeclerations,\n 'vs:#main-start': sampleInstruction\n };\n\n // samplerNameMap\n return {\n // update vertex shader line.\n updatedLine,\n // inject object with sampler instructions.\n inject,\n // sampler name to texture name map\n samplerTextureMap\n };\n }\n return null;\n}\n","/** @typedef {import('./transform').TransformProps} TransformProps */\nimport GL from '@luma.gl/constants';\n\nimport {\n cloneTextureFrom,\n readPixelsToArray,\n getShaderVersion,\n Buffer,\n Texture2D,\n Framebuffer\n} from '@luma.gl/webgl';\n\nimport {\n _transform as transformModule,\n getPassthroughFS,\n typeToChannelCount,\n combineInjects\n} from '@luma.gl/shadertools';\n\nimport {updateForTextures, getSizeUniforms} from './transform-shader-utils';\n\n// TODO: move these constants to transform-shader-utils\n// Texture parameters needed so sample can precisely pick pixel for given element id.\nconst SRC_TEX_PARAMETER_OVERRIDES = {\n [GL.TEXTURE_MIN_FILTER]: GL.NEAREST,\n [GL.TEXTURE_MAG_FILTER]: GL.NEAREST,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n};\nconst FS_OUTPUT_VARIABLE = 'transform_output';\n\nexport default class TextureTransform {\n constructor(gl, props = {}) {\n this.gl = gl;\n this.id = this.currentIndex = 0;\n this._swapTexture = null;\n this.targetTextureVarying = null;\n this.targetTextureType = null;\n this.samplerTextureMap = null;\n this.bindings = []; // each element is an object : {sourceTextures, targetTexture, framebuffer}\n\n this.resources = {}; // resources to be deleted\n\n this._initialize(props);\n Object.seal(this);\n }\n\n updateModelProps(props = {}) {\n const updatedModelProps = this._processVertexShader(props);\n return Object.assign({}, props, updatedModelProps);\n }\n\n getDrawOptions(opts = {}) {\n const {sourceBuffers, sourceTextures, framebuffer, targetTexture} = this.bindings[\n this.currentIndex\n ];\n\n const attributes = Object.assign({}, sourceBuffers, opts.attributes);\n const uniforms = Object.assign({}, opts.uniforms);\n const parameters = Object.assign({}, opts.parameters);\n let discard = opts.discard;\n\n if (this.hasSourceTextures || this.hasTargetTexture) {\n attributes.transform_elementID = this.elementIDBuffer;\n\n for (const sampler in this.samplerTextureMap) {\n const textureName = this.samplerTextureMap[sampler];\n uniforms[sampler] = sourceTextures[textureName];\n }\n this._setSourceTextureParameters();\n // get texture size uniforms\n const sizeUniforms = getSizeUniforms({\n sourceTextureMap: sourceTextures,\n targetTextureVarying: this.targetTextureVarying,\n targetTexture\n });\n Object.assign(uniforms, sizeUniforms);\n }\n\n if (this.hasTargetTexture) {\n discard = false;\n parameters.viewport = [0, 0, framebuffer.width, framebuffer.height];\n }\n\n return {attributes, framebuffer, uniforms, discard, parameters};\n }\n\n swap() {\n if (this._swapTexture) {\n this.currentIndex = this._getNextIndex();\n return true;\n }\n return false;\n }\n\n // update source and/or feedbackBuffers\n update(opts = {}) {\n this._setupTextures(opts);\n }\n\n // returns current target texture\n getTargetTexture() {\n const {targetTexture} = this.bindings[this.currentIndex];\n return targetTexture;\n }\n\n getData({packed = false} = {}) {\n const {framebuffer} = this.bindings[this.currentIndex];\n const pixels = readPixelsToArray(framebuffer);\n\n if (!packed) {\n return pixels;\n }\n\n // readPixels returns 4 elements for each pixel, pack the elements when requested\n const ArrayType = pixels.constructor;\n const channelCount = typeToChannelCount(this.targetTextureType);\n // @ts-ignore\n const packedPixels = new ArrayType((pixels.length * channelCount) / 4);\n let packCount = 0;\n for (let i = 0; i < pixels.length; i += 4) {\n for (let j = 0; j < channelCount; j++) {\n packedPixels[packCount++] = pixels[i + j];\n }\n }\n return packedPixels;\n }\n\n // returns current framebuffer object that is being used.\n getFramebuffer() {\n const currentResources = this.bindings[this.currentIndex];\n return currentResources.framebuffer;\n }\n\n // Delete owned resources.\n delete() {\n if (this.ownTexture) {\n this.ownTexture.delete();\n }\n if (this.elementIDBuffer) {\n this.elementIDBuffer.delete();\n }\n }\n\n // Private\n\n _initialize(props = {}) {\n const {_targetTextureVarying, _swapTexture} = props;\n this._swapTexture = _swapTexture;\n this.targetTextureVarying = _targetTextureVarying;\n this.hasTargetTexture = _targetTextureVarying;\n this._setupTextures(props);\n }\n\n // auto create target texture if requested\n _createTargetTexture(props) {\n const {sourceTextures, textureOrReference} = props;\n if (textureOrReference instanceof Texture2D) {\n return textureOrReference;\n }\n // 'targetTexture' is a reference souce texture.\n const refTexture = sourceTextures[textureOrReference];\n if (!refTexture) {\n return null;\n }\n\n // save reference texture name, when corresponding source texture is updated\n // we also update target texture.\n this._targetRefTexName = textureOrReference;\n\n return this._createNewTexture(refTexture);\n }\n\n /** @param {TransformProps} props */\n _setupTextures(props = {}) {\n const {sourceBuffers, _sourceTextures = {}, _targetTexture} = props;\n const targetTexture = this._createTargetTexture({\n sourceTextures: _sourceTextures,\n textureOrReference: _targetTexture\n });\n this.hasSourceTextures =\n this.hasSourceTextures || (_sourceTextures && Object.keys(_sourceTextures).length > 0);\n this._updateBindings({sourceBuffers, sourceTextures: _sourceTextures, targetTexture});\n if ('elementCount' in props) {\n this._updateElementIDBuffer(props.elementCount);\n }\n }\n\n _updateElementIDBuffer(elementCount) {\n if (typeof elementCount !== 'number' || this.elementCount >= elementCount) {\n return;\n }\n // NOTE: using float so this will work with GLSL 1.0 shaders.\n const elementIds = new Float32Array(elementCount);\n elementIds.forEach((_, index, array) => {\n array[index] = index;\n });\n if (!this.elementIDBuffer) {\n this.elementIDBuffer = new Buffer(this.gl, {\n data: elementIds,\n accessor: {size: 1}\n });\n } else {\n this.elementIDBuffer.setData({data: elementIds});\n }\n this.elementCount = elementCount;\n }\n\n _updateBindings(opts) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);\n if (this._swapTexture) {\n const {sourceTextures, targetTexture} = this._swapTextures(this.bindings[this.currentIndex]);\n const nextIndex = this._getNextIndex();\n this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {\n sourceTextures,\n targetTexture\n });\n }\n }\n\n _updateBinding(binding, opts) {\n const {sourceBuffers, sourceTextures, targetTexture} = opts;\n if (!binding) {\n binding = {\n sourceBuffers: {},\n sourceTextures: {},\n targetTexture: null\n };\n }\n Object.assign(binding.sourceTextures, sourceTextures);\n Object.assign(binding.sourceBuffers, sourceBuffers);\n if (targetTexture) {\n binding.targetTexture = targetTexture;\n\n const {width, height} = targetTexture;\n const {framebuffer} = binding;\n if (framebuffer) {\n // First update texture without re-sizing attachments\n framebuffer.update({\n attachments: {[GL.COLOR_ATTACHMENT0]: targetTexture},\n resizeAttachments: false\n });\n // Resize to new taget texture size\n framebuffer.resize({width, height});\n } else {\n binding.framebuffer = new Framebuffer(this.gl, {\n id: `transform-framebuffer`,\n width,\n height,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: targetTexture\n }\n });\n }\n }\n return binding;\n }\n\n // set texture filtering parameters on source textures.\n _setSourceTextureParameters() {\n const index = this.currentIndex;\n const {sourceTextures} = this.bindings[index];\n for (const name in sourceTextures) {\n sourceTextures[name].setParameters(SRC_TEX_PARAMETER_OVERRIDES);\n }\n }\n\n _swapTextures(opts) {\n if (!this._swapTexture) {\n return null;\n }\n const sourceTextures = Object.assign({}, opts.sourceTextures);\n sourceTextures[this._swapTexture] = opts.targetTexture;\n\n const targetTexture = opts.sourceTextures[this._swapTexture];\n\n return {sourceTextures, targetTexture};\n }\n\n // Create a buffer and add to list of buffers to be deleted.\n _createNewTexture(refTexture) {\n const texture = cloneTextureFrom(refTexture, {\n parameters: {\n [GL.TEXTURE_MIN_FILTER]: GL.NEAREST,\n [GL.TEXTURE_MAG_FILTER]: GL.NEAREST,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n },\n pixelStore: {\n [GL.UNPACK_FLIP_Y_WEBGL]: false\n }\n });\n\n // thre can only be one target texture\n if (this.ownTexture) {\n this.ownTexture.delete();\n }\n this.ownTexture = texture;\n\n return texture;\n }\n\n _getNextIndex() {\n return (this.currentIndex + 1) % 2;\n }\n\n // build and return shader releated parameters\n _processVertexShader(props = {}) {\n const {sourceTextures, targetTexture} = this.bindings[this.currentIndex];\n // @ts-ignore TODO - uniforms is not present\n const {vs, uniforms, targetTextureType, inject, samplerTextureMap} = updateForTextures({\n vs: props.vs,\n sourceTextureMap: sourceTextures,\n targetTextureVarying: this.targetTextureVarying,\n targetTexture\n });\n const combinedInject = combineInjects([props.inject || {}, inject]);\n this.targetTextureType = targetTextureType;\n this.samplerTextureMap = samplerTextureMap;\n const fs =\n props._fs ||\n getPassthroughFS({\n version: getShaderVersion(vs),\n input: this.targetTextureVarying,\n inputType: targetTextureType,\n output: FS_OUTPUT_VARIABLE\n });\n const modules =\n this.hasSourceTextures || this.targetTextureVarying\n ? [transformModule].concat(props.modules || [])\n : props.modules;\n return {vs, fs, modules, uniforms, inject: combinedInject};\n }\n}\n","import GL from '@luma.gl/constants';\nimport {getPassthroughFS} from '@luma.gl/shadertools';\nimport BufferTransform from './buffer-transform';\nimport TextureTransform from './texture-transform';\n\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {assert, isObjectEmpty, getShaderVersion} from '@luma.gl/webgl';\nimport Model from '../lib/model';\n\n// takes source and target buffers/textures and setsup the pipeline\nexport default class Transform {\n static isSupported(gl) {\n // TODO : differentiate writting to buffer vs not\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n this.gl = gl;\n this.model = null;\n this.elementCount = 0;\n this.bufferTransform = null;\n this.textureTransform = null;\n this.elementIDBuffer = null;\n this._initialize(props);\n Object.seal(this);\n }\n\n // Delete owned resources.\n delete() {\n const {model, bufferTransform, textureTransform} = this;\n if (model) {\n model.delete();\n }\n if (bufferTransform) {\n bufferTransform.delete();\n }\n if (textureTransform) {\n textureTransform.delete();\n }\n }\n\n // Run one transform loop.\n run(opts = {}) {\n const {clearRenderTarget = true} = opts;\n\n const updatedOpts = this._updateDrawOptions(opts);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n updatedOpts.framebuffer.clear({color: true});\n }\n\n this.model.transform(updatedOpts);\n }\n\n // swap resources if a map is provided\n swap() {\n let swapped = false;\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n swapped = swapped || resourceTransform.swap();\n }\n assert(swapped, 'Nothing to swap');\n }\n\n // Return Buffer object for given varying name.\n getBuffer(varyingName = null) {\n return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n }\n\n // Return data either from Buffer or from Texture\n getData(opts = {}) {\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n // @ts-ignore\n const data = resourceTransform.getData(opts);\n if (data) {\n return data;\n }\n }\n return null;\n }\n\n // Return framebuffer object if rendering to textures\n getFramebuffer() {\n return this.textureTransform && this.textureTransform.getFramebuffer();\n }\n\n // Update some or all buffer/texture bindings.\n update(opts = {}) {\n if ('elementCount' in opts) {\n // @ts-ignore TODO\n this.model.setVertexCount(opts.elementCount);\n }\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n resourceTransform.update(opts);\n }\n }\n\n // Private\n\n _initialize(props = {}) {\n const {gl} = this;\n this._buildResourceTransforms(gl, props);\n\n props = this._updateModelProps(props);\n this.model = new Model(\n gl,\n Object.assign({}, props, {\n fs: props.fs || getPassthroughFS({version: getShaderVersion(props.vs)}),\n id: props.id || 'transform-model',\n drawMode: props.drawMode || GL.POINTS,\n vertexCount: props.elementCount\n })\n );\n\n /* eslint-disable no-unused-expressions */\n this.bufferTransform && this.bufferTransform.setupResources({model: this.model});\n /* eslint-enable no-unused-expressions */\n }\n\n _updateModelProps(props) {\n let updatedProps = Object.assign({}, props);\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedProps = resourceTransform.updateModelProps(updatedProps);\n }\n return updatedProps;\n }\n\n _buildResourceTransforms(gl, props) {\n if (canCreateBufferTransform(props)) {\n this.bufferTransform = new BufferTransform(gl, props);\n }\n if (canCreateTextureTransform(props)) {\n this.textureTransform = new TextureTransform(gl, props);\n }\n assert(\n this.bufferTransform || this.textureTransform,\n 'must provide source/feedback buffers or source/target textures'\n );\n }\n\n _updateDrawOptions(opts) {\n let updatedOpts = Object.assign({}, opts);\n const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n for (const resourceTransform of resourceTransforms) {\n updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n }\n return updatedOpts;\n }\n}\n\n// Helper Methods\n\nfunction canCreateBufferTransform(props) {\n if (\n !isObjectEmpty(props.feedbackBuffers) ||\n !isObjectEmpty(props.feedbackMap) ||\n (props.varyings && props.varyings.length > 0)\n ) {\n return true;\n }\n return false;\n}\n\nfunction canCreateTextureTransform(props) {\n if (\n !isObjectEmpty(props._sourceTextures) ||\n props._targetTexture ||\n props._targetTextureVarying\n ) {\n return true;\n }\n\n return false;\n}\n","// ClipSpace\nimport GL from '@luma.gl/constants';\nimport Model from '../lib/model';\nimport Geometry from '../geometry/geometry';\n\nconst CLIPSPACE_VERTEX_SHADER = `\\\nattribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n`;\n\n/* eslint-disable indent, no-multi-spaces */\nconst POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];\n\nexport default class ClipSpace extends Model {\n constructor(gl, opts) {\n const TEX_COORDS = POSITIONS.map(coord => (coord === -1 ? 0 : coord));\n\n super(\n gl,\n Object.assign({}, opts, {\n vs: CLIPSPACE_VERTEX_SHADER,\n geometry: new Geometry({\n drawMode: GL.TRIANGLE_STRIP,\n vertexCount: 4,\n attributes: {\n aClipSpacePosition: {size: 2, value: new Float32Array(POSITIONS)},\n aTexCoord: {size: 2, value: new Float32Array(TEX_COORDS)},\n aCoordinate: {size: 2, value: new Float32Array(TEX_COORDS)}\n }\n })\n })\n );\n this.setVertexCount(4);\n }\n}\n","import {Texture2D, hasFeature, FEATURES, log} from '@luma.gl/webgl';\n\nexport default class GLTFMaterialParser {\n constructor(\n gl,\n {attributes, material, pbrDebug, imageBasedLightingEnvironment, lights, useTangents}\n ) {\n this.gl = gl;\n\n this.defines = {\n // TODO: Use EXT_sRGB if available (Standard in WebGL 2.0)\n MANUAL_SRGB: 1,\n SRGB_FAST_APPROXIMATION: 1\n };\n\n if (hasFeature(gl, FEATURES.GLSL_TEXTURE_LOD)) {\n this.defines.USE_TEX_LOD = 1;\n }\n\n this.uniforms = {\n // TODO: find better values?\n u_Camera: [0, 0, 0], // Model should override\n\n u_MetallicRoughnessValues: [1, 1] // Default is 1 and 1\n };\n\n this.parameters = {};\n this.generatedTextures = [];\n\n if (imageBasedLightingEnvironment) {\n this.uniforms.u_DiffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();\n this.uniforms.u_SpecularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();\n this.uniforms.u_brdfLUT = imageBasedLightingEnvironment.getBrdfTexture();\n this.uniforms.u_ScaleIBLAmbient = [1, 1];\n }\n\n if (pbrDebug) {\n // Override final color for reference app visualization\n // of various parameters in the lighting equation.\n this.uniforms.u_ScaleDiffBaseMR = [0, 0, 0, 0];\n this.uniforms.u_ScaleFGDSpec = [0, 0, 0, 0];\n }\n\n this.defineIfPresent(attributes.NORMAL, 'HAS_NORMALS');\n this.defineIfPresent(attributes.TANGENT && useTangents, 'HAS_TANGENTS');\n this.defineIfPresent(attributes.TEXCOORD_0, 'HAS_UV');\n\n this.defineIfPresent(imageBasedLightingEnvironment, 'USE_IBL');\n this.defineIfPresent(lights, 'USE_LIGHTS');\n this.defineIfPresent(pbrDebug, 'PBR_DEBUG');\n\n if (material) {\n this.parseMaterial(material);\n }\n }\n\n defineIfPresent(value, name) {\n if (value) {\n this.defines[name] = 1;\n }\n }\n\n parseTexture(gltfTexture, name, define = null) {\n const parameters =\n (gltfTexture.texture &&\n gltfTexture.texture.sampler &&\n gltfTexture.texture.sampler.parameters) ||\n {};\n\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [this.gl.TEXTURE_MIN_FILTER]:\n image.data.length > 1 ? this.gl.LINEAR_MIPMAP_NEAREST : this.gl.LINEAR\n };\n } else {\n // Texture2D accepts a promise that returns an image as data (Async Textures)\n textureOptions = {data: image};\n }\n\n const texture = new Texture2D(this.gl, {\n id: gltfTexture.name || gltfTexture.id,\n parameters: {\n ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [this.gl.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n this.uniforms[name] = texture;\n this.defineIfPresent(define, define);\n this.generatedTextures.push(texture);\n }\n\n parsePbrMetallicRoughness(pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorTexture) {\n this.parseTexture(\n pbrMetallicRoughness.baseColorTexture,\n 'u_BaseColorSampler',\n 'HAS_BASECOLORMAP'\n );\n }\n this.uniforms.u_BaseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n this.parseTexture(\n pbrMetallicRoughness.metallicRoughnessTexture,\n 'u_MetallicRoughnessSampler',\n 'HAS_METALROUGHNESSMAP'\n );\n }\n const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;\n this.uniforms.u_MetallicRoughnessValues = [metallicFactor, roughnessFactor];\n }\n\n parseMaterial(material) {\n this.uniforms.pbr_uUnlit = Boolean(material.unlit);\n\n if (material.pbrMetallicRoughness) {\n this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);\n }\n if (material.normalTexture) {\n this.parseTexture(material.normalTexture, 'u_NormalSampler', 'HAS_NORMALMAP');\n\n const {scale = 1} = material.normalTexture;\n this.uniforms.u_NormalScale = scale;\n }\n if (material.occlusionTexture) {\n this.parseTexture(material.occlusionTexture, 'u_OcclusionSampler', 'HAS_OCCLUSIONMAP');\n\n const {strength = 1} = material.occlusionTexture;\n this.uniforms.u_OcclusionStrength = strength;\n }\n if (material.emissiveTexture) {\n this.parseTexture(material.emissiveTexture, 'u_EmissiveSampler', 'HAS_EMISSIVEMAP');\n this.uniforms.u_EmissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n if (material.alphaMode === 'MASK') {\n const {alphaCutoff = 0.5} = material;\n this.defines.ALPHA_CUTOFF = 1;\n this.uniforms.u_AlphaCutoff = alphaCutoff;\n } else if (material.alphaMode === 'BLEND') {\n log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();\n Object.assign(this.parameters, {\n blend: true,\n blendEquation: this.gl.FUNC_ADD,\n blendFunc: [\n this.gl.SRC_ALPHA,\n this.gl.ONE_MINUS_SRC_ALPHA,\n this.gl.ONE,\n this.gl.ONE_MINUS_SRC_ALPHA\n ]\n });\n }\n }\n\n /**\n * Destroy all generated resources to release memory.\n */\n delete() {\n this.generatedTextures.forEach(texture => texture.delete());\n }\n}\n","import {Log} from '@probe.gl/log';\n\nexport const log = new Log({id: 'luma.gl'});\n","// Avoid bundling assert polyfill module\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'luma.gl: assertion failed.');\n }\n}\n","import {assert} from './assert';\n\nconst ERR_CONTEXT = 'Invalid WebGLRenderingContext';\nexport const ERR_WEBGL = ERR_CONTEXT;\nexport const ERR_WEBGL2 = 'Requires WebGL2';\n\nexport function isWebGL(gl) {\n if (typeof WebGLRenderingContext !== 'undefined' && gl instanceof WebGLRenderingContext) {\n return true;\n }\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n // Look for debug contexts, headless gl etc\n return Boolean(gl && Number.isFinite(gl._version));\n}\n\nexport function isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n // Look for debug contexts, headless gl etc\n return Boolean(gl && gl._version === 2);\n}\n\nexport function getWebGL2Context(gl) {\n return isWebGL2(gl) ? gl : null;\n}\n\nexport function assertWebGLContext(gl) {\n assert(isWebGL(gl), ERR_CONTEXT);\n return gl;\n}\n\nexport function assertWebGL2Context(gl) {\n assert(isWebGL2(gl), ERR_WEBGL2);\n return gl;\n}\n","/*\n** Copyright (c) 2015 The Khronos Group Inc.\n**\n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n**\n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n**\n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n\n// Modified to use ES6 and polyfill a provided context rather than\n// the global class.\n\n// @ts-nocheck external code\n\nconst glErrorShadow = {};\n\nfunction error(msg) {\n if (globalThis.console && globalThis.console.error) {\n globalThis.console.error(msg);\n }\n}\n\nfunction log(msg) {\n if (globalThis.console && globalThis.console.log) {\n globalThis.console.log(msg);\n }\n}\n\nfunction synthesizeGLError(err, opt_msg) {\n glErrorShadow[err] = true;\n if (opt_msg !== undefined) {\n error(opt_msg);\n }\n}\n\nfunction wrapGLError(gl) {\n const f = gl.getError;\n gl.getError = function getError() {\n let err;\n do {\n err = f.apply(gl);\n if (err !== gl.NO_ERROR) {\n glErrorShadow[err] = true;\n }\n } while (err !== gl.NO_ERROR);\n\n for (err in glErrorShadow) {\n if (glErrorShadow[err]) {\n delete glErrorShadow[err];\n return parseInt(err, 10);\n }\n }\n\n return gl.NO_ERROR;\n };\n}\n\nconst WebGLVertexArrayObjectOES = function WebGLVertexArrayObjectOES(ext) {\n const gl = ext.gl;\n\n this.ext = ext;\n this.isAlive = true;\n this.hasBeenBound = false;\n\n this.elementArrayBuffer = null;\n this.attribs = new Array(ext.maxVertexAttribs);\n for (let n = 0; n < this.attribs.length; n++) {\n const attrib = new WebGLVertexArrayObjectOES.VertexAttrib(gl);\n this.attribs[n] = attrib;\n }\n\n this.maxAttrib = 0;\n};\n\nWebGLVertexArrayObjectOES.VertexAttrib = function VertexAttrib(gl) {\n this.enabled = false;\n this.buffer = null;\n this.size = 4;\n this.type = gl.FLOAT;\n this.normalized = false;\n this.stride = 16;\n this.offset = 0;\n\n this.cached = '';\n this.recache();\n};\nWebGLVertexArrayObjectOES.VertexAttrib.prototype.recache = function recache() {\n this.cached = [this.size, this.type, this.normalized, this.stride, this.offset].join(':');\n};\n\nconst OESVertexArrayObject = function OESVertexArrayObject(gl) {\n const self = this;\n this.gl = gl;\n\n wrapGLError(gl);\n\n const original = (this.original = {\n getParameter: gl.getParameter,\n enableVertexAttribArray: gl.enableVertexAttribArray,\n disableVertexAttribArray: gl.disableVertexAttribArray,\n bindBuffer: gl.bindBuffer,\n getVertexAttrib: gl.getVertexAttrib,\n vertexAttribPointer: gl.vertexAttribPointer\n });\n\n gl.getParameter = function getParameter(pname) {\n if (pname === self.VERTEX_ARRAY_BINDING_OES) {\n if (self.currentVertexArrayObject === self.defaultVertexArrayObject) {\n return null;\n }\n return self.currentVertexArrayObject;\n }\n return original.getParameter.apply(this, arguments);\n };\n\n gl.enableVertexAttribArray = function enableVertexAttribArray(index) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, index);\n const attrib = vao.attribs[index];\n attrib.enabled = true;\n return original.enableVertexAttribArray.apply(this, arguments);\n };\n gl.disableVertexAttribArray = function disableVertexAttribArray(index) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, index);\n const attrib = vao.attribs[index];\n attrib.enabled = false;\n return original.disableVertexAttribArray.apply(this, arguments);\n };\n\n gl.bindBuffer = function bindBuffer(target, buffer) {\n switch (target) {\n case gl.ARRAY_BUFFER:\n self.currentArrayBuffer = buffer;\n break;\n case gl.ELEMENT_ARRAY_BUFFER:\n self.currentVertexArrayObject.elementArrayBuffer = buffer;\n break;\n default:\n }\n return original.bindBuffer.apply(this, arguments);\n };\n\n gl.getVertexAttrib = function getVertexAttrib(index, pname) {\n const vao = self.currentVertexArrayObject;\n const attrib = vao.attribs[index];\n switch (pname) {\n case gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:\n return attrib.buffer;\n case gl.VERTEX_ATTRIB_ARRAY_ENABLED:\n return attrib.enabled;\n case gl.VERTEX_ATTRIB_ARRAY_SIZE:\n return attrib.size;\n case gl.VERTEX_ATTRIB_ARRAY_STRIDE:\n return attrib.stride;\n case gl.VERTEX_ATTRIB_ARRAY_TYPE:\n return attrib.type;\n case gl.VERTEX_ATTRIB_ARRAY_NORMALIZED:\n return attrib.normalized;\n default:\n return original.getVertexAttrib.apply(this, arguments);\n }\n };\n\n gl.vertexAttribPointer = function vertexAttribPointer(\n indx,\n size,\n type,\n normalized,\n stride,\n offset\n ) {\n const vao = self.currentVertexArrayObject;\n vao.maxAttrib = Math.max(vao.maxAttrib, indx);\n const attrib = vao.attribs[indx];\n attrib.buffer = self.currentArrayBuffer;\n attrib.size = size;\n attrib.type = type;\n attrib.normalized = normalized;\n attrib.stride = stride;\n attrib.offset = offset;\n attrib.recache();\n return original.vertexAttribPointer.apply(this, arguments);\n };\n\n if (gl.instrumentExtension) {\n gl.instrumentExtension(this, 'OES_vertex_array_object');\n }\n\n // undefined for headless gl\n if (gl.canvas) {\n gl.canvas.addEventListener(\n 'webglcontextrestored',\n () => {\n log('OESVertexArrayObject emulation library context restored');\n self.reset_();\n },\n true\n );\n }\n\n this.reset_();\n};\n\nOESVertexArrayObject.prototype.VERTEX_ARRAY_BINDING_OES = 0x85b5;\n\nOESVertexArrayObject.prototype.reset_ = function reset_() {\n const contextWasLost = this.vertexArrayObjects !== undefined;\n if (contextWasLost) {\n for (let ii = 0; ii < this.vertexArrayObjects.length; ++ii) {\n this.vertexArrayObjects.isAlive = false;\n }\n }\n const gl = this.gl;\n this.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n\n this.defaultVertexArrayObject = new WebGLVertexArrayObjectOES(this);\n this.currentVertexArrayObject = null;\n this.currentArrayBuffer = null;\n this.vertexArrayObjects = [this.defaultVertexArrayObject];\n\n this.bindVertexArrayOES(null);\n};\n\nOESVertexArrayObject.prototype.createVertexArrayOES = function createVertexArrayOES() {\n const arrayObject = new WebGLVertexArrayObjectOES(this);\n this.vertexArrayObjects.push(arrayObject);\n return arrayObject;\n};\n\nOESVertexArrayObject.prototype.deleteVertexArrayOES = function deleteVertexArrayOES(arrayObject) {\n arrayObject.isAlive = false;\n this.vertexArrayObjects.splice(this.vertexArrayObjects.indexOf(arrayObject), 1);\n if (this.currentVertexArrayObject === arrayObject) {\n this.bindVertexArrayOES(null);\n }\n};\n\nOESVertexArrayObject.prototype.isVertexArrayOES = function isVertexArrayOES(arrayObject) {\n if (arrayObject && arrayObject instanceof WebGLVertexArrayObjectOES) {\n if (arrayObject.hasBeenBound && arrayObject.ext === this) {\n return true;\n }\n }\n return false;\n};\n\nOESVertexArrayObject.prototype.bindVertexArrayOES = function bindVertexArrayOES(arrayObject) {\n const gl = this.gl;\n if (arrayObject && !arrayObject.isAlive) {\n synthesizeGLError(\n gl.INVALID_OPERATION,\n 'bindVertexArrayOES: attempt to bind deleted arrayObject'\n );\n return;\n }\n const original = this.original;\n\n const oldVAO = this.currentVertexArrayObject;\n this.currentVertexArrayObject = arrayObject || this.defaultVertexArrayObject;\n this.currentVertexArrayObject.hasBeenBound = true;\n const newVAO = this.currentVertexArrayObject;\n\n if (oldVAO === newVAO) {\n return;\n }\n\n if (!oldVAO || newVAO.elementArrayBuffer !== oldVAO.elementArrayBuffer) {\n original.bindBuffer.call(gl, gl.ELEMENT_ARRAY_BUFFER, newVAO.elementArrayBuffer);\n }\n\n let currentBinding = this.currentArrayBuffer;\n const maxAttrib = Math.max(oldVAO ? oldVAO.maxAttrib : 0, newVAO.maxAttrib);\n for (let n = 0; n <= maxAttrib; n++) {\n const attrib = newVAO.attribs[n];\n const oldAttrib = oldVAO ? oldVAO.attribs[n] : null;\n\n if (!oldVAO || attrib.enabled !== oldAttrib.enabled) {\n if (attrib.enabled) {\n original.enableVertexAttribArray.call(gl, n);\n } else {\n original.disableVertexAttribArray.call(gl, n);\n }\n }\n\n if (attrib.enabled) {\n let bufferChanged = false;\n if (!oldVAO || attrib.buffer !== oldAttrib.buffer) {\n if (currentBinding !== attrib.buffer) {\n original.bindBuffer.call(gl, gl.ARRAY_BUFFER, attrib.buffer);\n currentBinding = attrib.buffer;\n }\n bufferChanged = true;\n }\n\n if (bufferChanged || attrib.cached !== oldAttrib.cached) {\n original.vertexAttribPointer.call(\n gl,\n n,\n attrib.size,\n attrib.type,\n attrib.normalized,\n attrib.stride,\n attrib.offset\n );\n }\n }\n }\n\n if (this.currentArrayBuffer !== currentBinding) {\n original.bindBuffer.call(gl, gl.ARRAY_BUFFER, this.currentArrayBuffer);\n }\n};\n\nexport function polyfillVertexArrayObject(gl) {\n if (typeof gl.createVertexArray === 'function') {\n // VAOs directly supported on object (i.e. WebGL 2 context)\n return;\n }\n\n const original_getSupportedExtensions = gl.getSupportedExtensions;\n gl.getSupportedExtensions = function getSupportedExtensions() {\n const list = original_getSupportedExtensions.call(this) || [];\n if (list.indexOf('OES_vertex_array_object') < 0) {\n list.push('OES_vertex_array_object');\n }\n return list;\n };\n\n const original_getExtension = gl.getExtension;\n gl.getExtension = function getExtension(name) {\n const ext = original_getExtension.call(this, name);\n if (ext) {\n return ext;\n }\n if (name !== 'OES_vertex_array_object') {\n return null;\n }\n\n if (!gl.__OESVertexArrayObject) {\n this.__OESVertexArrayObject = new OESVertexArrayObject(this);\n }\n return this.__OESVertexArrayObject;\n };\n}\n","/* eslint-disable no-inline-comments, max-len, camelcase */\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../utils/webgl-checks';\n\nconst OES_element_index = 'OES_element_index';\nconst WEBGL_draw_buffers = 'WEBGL_draw_buffers';\nconst EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';\nconst EXT_disjoint_timer_query_webgl2 = 'EXT_disjoint_timer_query_webgl2';\nconst EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';\nconst WEBGL_debug_renderer_info = 'WEBGL_debug_renderer_info';\n\nconst GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b;\nconst GL_DONT_CARE = 0x1100;\nconst GL_GPU_DISJOINT_EXT = 0x8fbb;\nconst GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84ff;\nconst GL_UNMASKED_VENDOR_WEBGL = 0x9245; // vendor string of the graphics driver.\nconst GL_UNMASKED_RENDERER_WEBGL = 0x9246; // renderer string of the graphics driver.\n\nconst getWebGL2ValueOrZero = gl => (!isWebGL2(gl) ? 0 : undefined);\n\n// if a function returns undefined in this table,\n// the original getParameter will be called, defeating the override\nconst WEBGL_PARAMETERS = {\n [GL.READ_BUFFER]: gl => (!isWebGL2(gl) ? GL.COLOR_ATTACHMENT0 : undefined),\n\n // WebGL2 context parameters\n [GL_FRAGMENT_SHADER_DERIVATIVE_HINT]: gl => (!isWebGL2(gl) ? GL_DONT_CARE : undefined),\n\n [GL.RASTERIZER_DISCARD]: getWebGL2ValueOrZero,\n\n [GL.SAMPLES]: getWebGL2ValueOrZero,\n\n // WebGL2 extension context parameters\n [GL_GPU_DISJOINT_EXT]: (gl, getParameter) => {\n const ext = isWebGL2(gl)\n ? gl.getExtension(EXT_disjoint_timer_query_webgl2)\n : gl.getExtension(EXT_disjoint_timer_query);\n return ext && ext.GPU_DISJOINT_EXT ? getParameter(ext.GPU_DISJOINT_EXT) : 0;\n },\n\n // Extension fixed values\n [GL_UNMASKED_VENDOR_WEBGL]: (gl, getParameter) => {\n const ext = gl.getExtension(WEBGL_debug_renderer_info);\n return getParameter((ext && ext.UNMASKED_VENDOR_WEBGL) || GL.VENDOR);\n },\n\n [GL_UNMASKED_RENDERER_WEBGL]: (gl, getParameter) => {\n const ext = gl.getExtension(WEBGL_debug_renderer_info);\n return getParameter((ext && ext.UNMASKED_RENDERER_WEBGL) || GL.RENDERER);\n },\n\n // Extension LIMITS\n [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl, getParameter) => {\n const ext = gl.luma.extensions[EXT_texture_filter_anisotropic];\n return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;\n },\n\n // WebGL2 Limits\n [GL.MAX_3D_TEXTURE_SIZE]: getWebGL2ValueOrZero,\n [GL.MAX_ARRAY_TEXTURE_LAYERS]: getWebGL2ValueOrZero,\n [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: getWebGL2ValueOrZero,\n [GL.MAX_COLOR_ATTACHMENTS]: (gl, getParameter) => {\n if (!isWebGL2(gl)) {\n const ext = gl.getExtension(WEBGL_draw_buffers);\n return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;\n }\n return undefined;\n },\n [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_COMBINED_UNIFORM_BLOCKS]: getWebGL2ValueOrZero,\n [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_DRAW_BUFFERS]: gl => {\n if (!isWebGL2(gl)) {\n const ext = gl.getExtension(WEBGL_draw_buffers);\n return ext ? ext.MAX_DRAW_BUFFERS_WEBGL : 0;\n }\n return undefined;\n },\n [GL.MAX_ELEMENT_INDEX]:\n // Guess: per webglstats.com 99.6% of webgl2 supports 2147483647\n gl => (gl.getExtension(OES_element_index) ? 2147483647 : 65535),\n [GL.MAX_ELEMENTS_INDICES]:\n // Guess: \"Reasonably safe\" per webglstats.com - could be higher/lower (on some mobile devices)\n gl => (gl.getExtension(OES_element_index) ? 16777216 : 65535),\n [GL.MAX_ELEMENTS_VERTICES]:\n // Guess: \"Reasonably safe\" per webglstats.com - could be higher/lower (on some mobile devices)\n gl => 16777216,\n [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: getWebGL2ValueOrZero,\n [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_SAMPLES]: getWebGL2ValueOrZero,\n [GL.MAX_SERVER_WAIT_TIMEOUT]: getWebGL2ValueOrZero,\n [GL.MAX_TEXTURE_LOD_BIAS]: getWebGL2ValueOrZero,\n [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: getWebGL2ValueOrZero,\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_UNIFORM_BLOCK_SIZE]: getWebGL2ValueOrZero,\n [GL.MAX_UNIFORM_BUFFER_BINDINGS]: getWebGL2ValueOrZero,\n [GL.MAX_VARYING_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MAX_VERTEX_UNIFORM_BLOCKS]: getWebGL2ValueOrZero,\n [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: getWebGL2ValueOrZero,\n [GL.MIN_PROGRAM_TEXEL_OFFSET]: getWebGL2ValueOrZero,\n [GL.MAX_PROGRAM_TEXEL_OFFSET]: getWebGL2ValueOrZero,\n [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: getWebGL2ValueOrZero\n};\n\n// A \"replacement\" gl.getParameter that accepts \"enums\" from extensions and WebGL2\n// and returns reasonably safe defaults\nexport function getParameterPolyfill(gl, originalGetParameter, pname) {\n // Return mock limits (usually 0) for WebGL2 constants to ensure these\n // can be queries without error\n const limit = WEBGL_PARAMETERS[pname];\n // @ts-ignore TODO pname parameter not declared\n const value = typeof limit === 'function' ? limit(gl, originalGetParameter, pname) : limit;\n const result = value !== undefined ? value : originalGetParameter(pname);\n return result;\n}\n","import GL from '@luma.gl/constants';\nimport {assert} from '../utils/assert';\nimport {isWebGL2} from '../utils/webgl-checks';\n\nimport {getParameterPolyfill} from './get-parameter-polyfill';\n\nconst OES_vertex_array_object = 'OES_vertex_array_object';\nconst ANGLE_instanced_arrays = 'ANGLE_instanced_arrays';\nconst WEBGL_draw_buffers = 'WEBGL_draw_buffers';\nconst EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';\nconst EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';\n\nconst ERR_VAO_NOT_SUPPORTED = 'VertexArray requires WebGL2 or OES_vertex_array_object extension';\n\n// Return object with webgl2 flag and an extension\nfunction getExtensionData(gl, extension) {\n return {\n webgl2: isWebGL2(gl),\n ext: gl.getExtension(extension)\n };\n}\n\n// function mapExtensionConstant(gl, constant) {\n// switch (constant) {\n// case ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES: return GL.FRAGMENT_SHADER_DERIVATIVE_HINT;\n// }\n// }\n\nexport const WEBGL2_CONTEXT_POLYFILLS = {\n // POLYFILL TABLE\n [OES_vertex_array_object]: {\n meta: {suffix: 'OES'},\n // NEW METHODS\n createVertexArray: () => {\n assert(false, ERR_VAO_NOT_SUPPORTED);\n },\n deleteVertexArray: () => {},\n bindVertexArray: () => {},\n isVertexArray: () => false\n },\n [ANGLE_instanced_arrays]: {\n meta: {\n suffix: 'ANGLE'\n // constants: {\n // VERTEX_ATTRIB_ARRAY_DIVISOR: 'VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE'\n // }\n },\n vertexAttribDivisor(location, divisor) {\n // Accept divisor 0 even if instancing is not supported (0 = no instancing)\n assert(divisor === 0, 'WebGL instanced rendering not supported');\n },\n drawElementsInstanced: () => {},\n drawArraysInstanced: () => {}\n },\n [WEBGL_draw_buffers]: {\n meta: {\n suffix: 'WEBGL'\n },\n drawBuffers: () => {\n assert(false);\n }\n },\n [EXT_disjoint_timer_query]: {\n meta: {suffix: 'EXT'},\n // WebGL1: Polyfills the WebGL2 Query API\n createQuery: () => {\n assert(false);\n },\n deleteQuery: () => {\n assert(false);\n },\n beginQuery: () => {\n assert(false);\n },\n endQuery: () => {},\n getQuery(handle, pname) {\n // @ts-ignore\n return this.getQueryObject(handle, pname);\n },\n // The WebGL1 extension uses getQueryObject rather then getQueryParameter\n getQueryParameter(handle, pname) {\n // @ts-ignore\n return this.getQueryObject(handle, pname);\n },\n getQueryObject: () => {}\n }\n};\n\nexport const WEBGL2_CONTEXT_OVERRIDES = {\n // Ensure readBuffer is a no-op\n readBuffer: (gl, originalFunc, attachment) => {\n if (isWebGL2(gl)) {\n originalFunc(attachment);\n } else {\n // assert(attachment !== GL_COLOR_ATTACHMENT0 && attachment !== GL_FRONT);\n }\n },\n // Override for getVertexAttrib that returns sane values for non-WebGL1 constants\n getVertexAttrib: (gl, originalFunc, location, pname) => {\n // const gl = this; // eslint-disable-line\n const {webgl2, ext} = getExtensionData(gl, ANGLE_instanced_arrays);\n\n let result;\n switch (pname) {\n // WebGL1 attributes will never be integer\n case GL.VERTEX_ATTRIB_ARRAY_INTEGER:\n result = !webgl2 ? false : undefined;\n break;\n // if instancing is not available, return 0 meaning divisor has not been set\n case GL.VERTEX_ATTRIB_ARRAY_DIVISOR:\n result = !webgl2 && !ext ? 0 : undefined;\n break;\n default:\n }\n\n return result !== undefined ? result : originalFunc(location, pname);\n },\n // Handle transform feedback and uniform block queries in WebGL1\n getProgramParameter: (gl, originalFunc, program, pname) => {\n if (!isWebGL2(gl)) {\n switch (pname) {\n case GL.TRANSFORM_FEEDBACK_BUFFER_MODE:\n return GL.SEPARATE_ATTRIBS;\n case GL.TRANSFORM_FEEDBACK_VARYINGS:\n return 0;\n case GL.ACTIVE_UNIFORM_BLOCKS:\n return 0;\n default:\n }\n }\n return originalFunc(program, pname);\n },\n getInternalformatParameter: (gl, originalFunc, target, format, pname) => {\n if (!isWebGL2(gl)) {\n switch (pname) {\n case GL.SAMPLES:\n return new Int32Array([0]);\n default:\n }\n }\n return gl.getInternalformatParameter(target, format, pname);\n },\n getTexParameter(gl, originalFunc, target, pname) {\n switch (pname) {\n case GL.TEXTURE_MAX_ANISOTROPY_EXT:\n const {extensions} = gl.luma;\n const ext = extensions[EXT_texture_filter_anisotropic];\n pname = (ext && ext.TEXTURE_MAX_ANISOTROPY_EXT) || GL.TEXTURE_MAX_ANISOTROPY_EXT;\n break;\n default:\n }\n return originalFunc(target, pname);\n },\n getParameter: getParameterPolyfill,\n hint(gl, originalFunc, pname, value) {\n // TODO - handle GL.FRAGMENT_SHADER_DERIVATIVE_HINT:\n // switch (pname) {\n // case GL.FRAGMENT_SHADER_DERIVATIVE_HINT:\n // }\n return originalFunc(pname, value);\n }\n};\n","// WebGL1/WebGL2 extension polyfill support\n//\n// Provides a function that creates polyfills for WebGL2 functions based\n// on available extensions and installs them on a supplied target (could be\n// the WebGLContext or its prototype, or a separate object).\n//\n// This is intended to be a stand-alone file with minimal dependencies,\n// easy to reuse or repurpose in other projects.\n\n/** @typedef {import('./polyfill-context')} types */\n\nimport {polyfillVertexArrayObject} from './polyfill-vertex-array-object';\nimport {assert} from '../utils/assert';\n\nimport {WEBGL2_CONTEXT_POLYFILLS, WEBGL2_CONTEXT_OVERRIDES} from './polyfill-table';\n\n/** @type {types['polyfillContext']} */\nexport function polyfillContext(gl) {\n // @ts-ignore\n gl.luma = gl.luma || {};\n // @ts-ignore\n const {luma} = gl;\n\n if (!luma.polyfilled) {\n polyfillVertexArrayObject(gl);\n initializeExtensions(gl);\n installPolyfills(gl, WEBGL2_CONTEXT_POLYFILLS);\n installOverrides(gl, {target: luma, target2: gl});\n luma.polyfilled = true;\n }\n\n // TODO - only supporting a few members\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n return gl;\n}\n\n// TODO - is this still required?\n// @ts-ignore\nglobalThis.polyfillContext = polyfillContext;\n\nfunction initializeExtensions(gl) {\n gl.luma.extensions = {};\n // `getSupportedExtensions` can return null when context is lost.\n const EXTENSIONS = gl.getSupportedExtensions() || [];\n for (const extension of EXTENSIONS) {\n gl.luma[extension] = gl.getExtension(extension);\n }\n}\n\n// Install simple overrides (mostly get* functions)\nfunction installOverrides(gl, {target, target2}) {\n Object.keys(WEBGL2_CONTEXT_OVERRIDES).forEach(key => {\n if (typeof WEBGL2_CONTEXT_OVERRIDES[key] === 'function') {\n // install an override, if no implementation was detected\n const originalFunc = gl[key] ? gl[key].bind(gl) : () => {};\n const polyfill = WEBGL2_CONTEXT_OVERRIDES[key].bind(null, gl, originalFunc);\n target[key] = polyfill;\n target2[key] = polyfill;\n }\n });\n}\n\nfunction installPolyfills(gl, polyfills) {\n for (const extension of Object.getOwnPropertyNames(polyfills)) {\n if (extension !== 'overrides') {\n polyfillExtension(gl, {extension, target: gl.luma, target2: gl});\n }\n }\n}\n\n// Polyfills a single WebGL extension into the `target` object\nfunction polyfillExtension(gl, {extension, target, target2}) {\n const defaults = WEBGL2_CONTEXT_POLYFILLS[extension];\n assert(defaults);\n\n const {meta = {}} = defaults;\n const {suffix = ''} = meta;\n\n const ext = gl.getExtension(extension);\n\n for (const key of Object.keys(defaults)) {\n const extKey = `${key}${suffix}`;\n\n let polyfill = null;\n if (key === 'meta') {\n // ignore\n } else if (typeof gl[key] === 'function') {\n // WebGL2 implementation is already\n } else if (ext && typeof ext[extKey] === 'function') {\n // pick extension implemenentation,if available\n polyfill = (...args) => ext[extKey](...args);\n } else if (typeof defaults[key] === 'function') {\n // pick the mock implementation, if no implementation was detected\n polyfill = defaults[key].bind(target);\n }\n\n if (polyfill) {\n target[key] = polyfill;\n target2[key] = polyfill;\n }\n }\n}\n","// Tables describing WebGL parameters\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../utils/webgl-checks';\n\n// DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS\n\n/* eslint-disable no-shadow */\n\nexport const GL_PARAMETER_DEFAULTS = {\n [GL.BLEND]: false,\n [GL.BLEND_COLOR]: new Float32Array([0, 0, 0, 0]),\n [GL.BLEND_EQUATION_RGB]: GL.FUNC_ADD,\n [GL.BLEND_EQUATION_ALPHA]: GL.FUNC_ADD,\n [GL.BLEND_SRC_RGB]: GL.ONE,\n [GL.BLEND_DST_RGB]: GL.ZERO,\n [GL.BLEND_SRC_ALPHA]: GL.ONE,\n [GL.BLEND_DST_ALPHA]: GL.ZERO,\n [GL.COLOR_CLEAR_VALUE]: new Float32Array([0, 0, 0, 0]), // TBD\n [GL.COLOR_WRITEMASK]: [true, true, true, true],\n [GL.CULL_FACE]: false,\n [GL.CULL_FACE_MODE]: GL.BACK,\n [GL.DEPTH_TEST]: false,\n [GL.DEPTH_CLEAR_VALUE]: 1,\n [GL.DEPTH_FUNC]: GL.LESS,\n [GL.DEPTH_RANGE]: new Float32Array([0, 1]), // TBD\n [GL.DEPTH_WRITEMASK]: true,\n [GL.DITHER]: true,\n // FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.\n [GL.FRAMEBUFFER_BINDING]: null,\n [GL.FRONT_FACE]: GL.CCW,\n [GL.GENERATE_MIPMAP_HINT]: GL.DONT_CARE,\n [GL.LINE_WIDTH]: 1,\n [GL.POLYGON_OFFSET_FILL]: false,\n [GL.POLYGON_OFFSET_FACTOR]: 0,\n [GL.POLYGON_OFFSET_UNITS]: 0,\n [GL.SAMPLE_COVERAGE_VALUE]: 1.0,\n [GL.SAMPLE_COVERAGE_INVERT]: false,\n [GL.SCISSOR_TEST]: false,\n // Note: Dynamic value. If scissor test enabled we expect users to set correct scissor box\n [GL.SCISSOR_BOX]: new Int32Array([0, 0, 1024, 1024]),\n [GL.STENCIL_TEST]: false,\n [GL.STENCIL_CLEAR_VALUE]: 0,\n [GL.STENCIL_WRITEMASK]: 0xffffffff,\n [GL.STENCIL_BACK_WRITEMASK]: 0xffffffff,\n [GL.STENCIL_FUNC]: GL.ALWAYS,\n [GL.STENCIL_REF]: 0,\n [GL.STENCIL_VALUE_MASK]: 0xffffffff,\n [GL.STENCIL_BACK_FUNC]: GL.ALWAYS,\n [GL.STENCIL_BACK_REF]: 0,\n [GL.STENCIL_BACK_VALUE_MASK]: 0xffffffff,\n [GL.STENCIL_FAIL]: GL.KEEP,\n [GL.STENCIL_PASS_DEPTH_FAIL]: GL.KEEP,\n [GL.STENCIL_PASS_DEPTH_PASS]: GL.KEEP,\n [GL.STENCIL_BACK_FAIL]: GL.KEEP,\n [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: GL.KEEP,\n [GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,\n // Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.\n [GL.VIEWPORT]: [0, 0, 1024, 1024],\n // WEBGL1 PIXEL PACK/UNPACK MODES\n [GL.PACK_ALIGNMENT]: 4,\n [GL.UNPACK_ALIGNMENT]: 4,\n [GL.UNPACK_FLIP_Y_WEBGL]: false,\n [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,\n [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,\n\n // WEBGL2 / EXTENSIONS\n // gl1: 'OES_standard_derivatives'\n [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,\n [GL.READ_FRAMEBUFFER_BINDING]: null,\n [GL.RASTERIZER_DISCARD]: false,\n [GL.PACK_ROW_LENGTH]: 0,\n [GL.PACK_SKIP_PIXELS]: 0,\n [GL.PACK_SKIP_ROWS]: 0,\n [GL.UNPACK_ROW_LENGTH]: 0,\n [GL.UNPACK_IMAGE_HEIGHT]: 0,\n [GL.UNPACK_SKIP_PIXELS]: 0,\n [GL.UNPACK_SKIP_ROWS]: 0,\n [GL.UNPACK_SKIP_IMAGES]: 0\n};\n\n// SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API\n\nconst enable = (gl, value, key) => (value ? gl.enable(key) : gl.disable(key));\nconst hint = (gl, value, key) => gl.hint(key, value);\nconst pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);\n\nconst drawFramebuffer = (gl, value) => {\n const target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;\n return gl.bindFramebuffer(target, value);\n};\nconst readFramebuffer = (gl, value) => {\n return gl.bindFramebuffer(GL.READ_FRAMEBUFFER, value);\n};\n\n// Utility\nfunction isArray(array) {\n return Array.isArray(array) || ArrayBuffer.isView(array);\n}\n\n// Map from WebGL parameter names to corresponding WebGL setter functions\n// WegGL constants are read by parameter names, but set by function names\n// NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'\nexport const GL_PARAMETER_SETTERS = {\n [GL.BLEND]: enable,\n [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),\n [GL.BLEND_EQUATION_RGB]: 'blendEquation',\n [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',\n [GL.BLEND_SRC_RGB]: 'blendFunc',\n [GL.BLEND_DST_RGB]: 'blendFunc',\n [GL.BLEND_SRC_ALPHA]: 'blendFunc',\n [GL.BLEND_DST_ALPHA]: 'blendFunc',\n [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),\n [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),\n [GL.CULL_FACE]: enable,\n [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),\n [GL.DEPTH_TEST]: enable,\n [GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),\n [GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),\n [GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),\n [GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),\n [GL.DITHER]: enable,\n [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,\n // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.\n [GL.FRAMEBUFFER_BINDING]: drawFramebuffer,\n [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),\n [GL.GENERATE_MIPMAP_HINT]: hint,\n [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),\n [GL.POLYGON_OFFSET_FILL]: enable,\n [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',\n [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',\n [GL.RASTERIZER_DISCARD]: enable,\n [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',\n [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',\n [GL.SCISSOR_TEST]: enable,\n [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),\n [GL.STENCIL_TEST]: enable,\n [GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),\n [GL.STENCIL_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.FRONT, value),\n [GL.STENCIL_BACK_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.BACK, value),\n [GL.STENCIL_FUNC]: 'stencilFuncFront',\n [GL.STENCIL_REF]: 'stencilFuncFront',\n [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',\n [GL.STENCIL_BACK_FUNC]: 'stencilFuncBack',\n [GL.STENCIL_BACK_REF]: 'stencilFuncBack',\n [GL.STENCIL_BACK_VALUE_MASK]: 'stencilFuncBack',\n [GL.STENCIL_FAIL]: 'stencilOpFront',\n [GL.STENCIL_PASS_DEPTH_FAIL]: 'stencilOpFront',\n [GL.STENCIL_PASS_DEPTH_PASS]: 'stencilOpFront',\n [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',\n [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',\n [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',\n [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),\n\n // WEBGL1 PIXEL PACK/UNPACK MODES\n [GL.PACK_ALIGNMENT]: pixelStorei,\n [GL.UNPACK_ALIGNMENT]: pixelStorei,\n [GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,\n [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,\n [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,\n\n // WEBGL2 PIXEL PACK/UNPACK MODES\n // RASTERIZER_DISCARD ...\n [GL.PACK_ROW_LENGTH]: pixelStorei,\n [GL.PACK_SKIP_PIXELS]: pixelStorei,\n [GL.PACK_SKIP_ROWS]: pixelStorei,\n [GL.READ_FRAMEBUFFER_BINDING]: readFramebuffer,\n [GL.UNPACK_ROW_LENGTH]: pixelStorei,\n [GL.UNPACK_IMAGE_HEIGHT]: pixelStorei,\n [GL.UNPACK_SKIP_PIXELS]: pixelStorei,\n [GL.UNPACK_SKIP_ROWS]: pixelStorei,\n [GL.UNPACK_SKIP_IMAGES]: pixelStorei,\n\n // Function-style setters\n framebuffer: (gl, framebuffer) => {\n // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class\n // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.\n const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;\n return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n },\n blend: (gl, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),\n blendColor: (gl, value) => gl.blendColor(...value),\n blendEquation: (gl, args) => {\n args = isArray(args) ? args : [args, args];\n gl.blendEquationSeparate(...args);\n },\n blendFunc: (gl, args) => {\n args = isArray(args) && args.length === 2 ? [...args, ...args] : args;\n gl.blendFuncSeparate(...args);\n },\n\n clearColor: (gl, value) => gl.clearColor(...value),\n clearDepth: (gl, value) => gl.clearDepth(value),\n clearStencil: (gl, value) => gl.clearStencil(value),\n\n colorMask: (gl, value) => gl.colorMask(...value),\n\n cull: (gl, value) => (value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE)),\n cullFace: (gl, value) => gl.cullFace(value),\n\n depthTest: (gl, value) => (value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST)),\n depthFunc: (gl, value) => gl.depthFunc(value),\n depthMask: (gl, value) => gl.depthMask(value),\n depthRange: (gl, value) => gl.depthRange(...value),\n\n dither: (gl, value) => (value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER)),\n\n derivativeHint: (gl, value) => {\n // gl1: 'OES_standard_derivatives'\n gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);\n },\n\n frontFace: (gl, value) => gl.frontFace(value),\n\n mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),\n\n lineWidth: (gl, value) => gl.lineWidth(value),\n\n polygonOffsetFill: (gl, value) =>\n value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),\n polygonOffset: (gl, value) => gl.polygonOffset(...value),\n\n sampleCoverage: (gl, value) => gl.sampleCoverage(...value),\n\n scissorTest: (gl, value) => (value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST)),\n scissor: (gl, value) => gl.scissor(...value),\n\n stencilTest: (gl, value) => (value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST)),\n stencilMask: (gl, value) => {\n value = isArray(value) ? value : [value, value];\n const [mask, backMask] = value;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, backMask);\n },\n stencilFunc: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [func, ref, mask, backFunc, backRef, backMask] = args;\n gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);\n gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);\n },\n stencilOp: (gl, args) => {\n args = isArray(args) && args.length === 3 ? [...args, ...args] : args;\n const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);\n },\n\n viewport: (gl, value) => gl.viewport(...value)\n};\n\nfunction getValue(glEnum, values, cache) {\n return values[glEnum] !== undefined ? values[glEnum] : cache[glEnum];\n}\n\n// COMPOSITE_WEBGL_PARAMETER_\nexport const GL_COMPOSITE_PARAMETER_SETTERS = {\n blendEquation: (gl, values, cache) =>\n gl.blendEquationSeparate(\n getValue(GL.BLEND_EQUATION_RGB, values, cache),\n getValue(GL.BLEND_EQUATION_ALPHA, values, cache)\n ),\n blendFunc: (gl, values, cache) =>\n gl.blendFuncSeparate(\n getValue(GL.BLEND_SRC_RGB, values, cache),\n getValue(GL.BLEND_DST_RGB, values, cache),\n getValue(GL.BLEND_SRC_ALPHA, values, cache),\n getValue(GL.BLEND_DST_ALPHA, values, cache)\n ),\n polygonOffset: (gl, values, cache) =>\n gl.polygonOffset(\n getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),\n getValue(GL.POLYGON_OFFSET_UNITS, values, cache)\n ),\n sampleCoverage: (gl, values, cache) =>\n gl.sampleCoverage(\n getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),\n getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)\n ),\n stencilFuncFront: (gl, values, cache) =>\n gl.stencilFuncSeparate(\n GL.FRONT,\n getValue(GL.STENCIL_FUNC, values, cache),\n getValue(GL.STENCIL_REF, values, cache),\n getValue(GL.STENCIL_VALUE_MASK, values, cache)\n ),\n stencilFuncBack: (gl, values, cache) =>\n gl.stencilFuncSeparate(\n GL.BACK,\n getValue(GL.STENCIL_BACK_FUNC, values, cache),\n getValue(GL.STENCIL_BACK_REF, values, cache),\n getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)\n ),\n stencilOpFront: (gl, values, cache) =>\n gl.stencilOpSeparate(\n GL.FRONT,\n getValue(GL.STENCIL_FAIL, values, cache),\n getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),\n getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)\n ),\n stencilOpBack: (gl, values, cache) =>\n gl.stencilOpSeparate(\n GL.BACK,\n getValue(GL.STENCIL_BACK_FAIL, values, cache),\n getValue(GL.STENCIL_BACK_PASS_DEPTH_FAIL, values, cache),\n getValue(GL.STENCIL_BACK_PASS_DEPTH_PASS, values, cache)\n )\n};\n\n// Setter functions intercepted for cache updates\nexport const GL_HOOKED_SETTERS = {\n // GENERIC SETTERS\n\n enable: (update, capability) =>\n update({\n [capability]: true\n }),\n disable: (update, capability) =>\n update({\n [capability]: false\n }),\n pixelStorei: (update, pname, value) =>\n update({\n [pname]: value\n }),\n hint: (update, pname, hint) =>\n update({\n [pname]: hint\n }),\n\n // SPECIFIC SETTERS\n\n bindFramebuffer: (update, target, framebuffer) => {\n switch (target) {\n case GL.FRAMEBUFFER:\n return update({\n [GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer,\n [GL.READ_FRAMEBUFFER_BINDING]: framebuffer\n });\n case GL.DRAW_FRAMEBUFFER:\n return update({[GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer});\n case GL.READ_FRAMEBUFFER:\n return update({[GL.READ_FRAMEBUFFER_BINDING]: framebuffer});\n default:\n return null;\n }\n },\n blendColor: (update, r, g, b, a) =>\n update({\n [GL.BLEND_COLOR]: new Float32Array([r, g, b, a])\n }),\n\n blendEquation: (update, mode) =>\n update({\n [GL.BLEND_EQUATION_RGB]: mode,\n [GL.BLEND_EQUATION_ALPHA]: mode\n }),\n\n blendEquationSeparate: (update, modeRGB, modeAlpha) =>\n update({\n [GL.BLEND_EQUATION_RGB]: modeRGB,\n [GL.BLEND_EQUATION_ALPHA]: modeAlpha\n }),\n\n blendFunc: (update, src, dst) =>\n update({\n [GL.BLEND_SRC_RGB]: src,\n [GL.BLEND_DST_RGB]: dst,\n [GL.BLEND_SRC_ALPHA]: src,\n [GL.BLEND_DST_ALPHA]: dst\n }),\n\n blendFuncSeparate: (update, srcRGB, dstRGB, srcAlpha, dstAlpha) =>\n update({\n [GL.BLEND_SRC_RGB]: srcRGB,\n [GL.BLEND_DST_RGB]: dstRGB,\n [GL.BLEND_SRC_ALPHA]: srcAlpha,\n [GL.BLEND_DST_ALPHA]: dstAlpha\n }),\n\n clearColor: (update, r, g, b, a) =>\n update({\n [GL.COLOR_CLEAR_VALUE]: new Float32Array([r, g, b, a])\n }),\n\n clearDepth: (update, depth) =>\n update({\n [GL.DEPTH_CLEAR_VALUE]: depth\n }),\n\n clearStencil: (update, s) =>\n update({\n [GL.STENCIL_CLEAR_VALUE]: s\n }),\n\n colorMask: (update, r, g, b, a) =>\n update({\n [GL.COLOR_WRITEMASK]: [r, g, b, a]\n }),\n\n cullFace: (update, mode) =>\n update({\n [GL.CULL_FACE_MODE]: mode\n }),\n\n depthFunc: (update, func) =>\n update({\n [GL.DEPTH_FUNC]: func\n }),\n\n depthRange: (update, zNear, zFar) =>\n update({\n [GL.DEPTH_RANGE]: new Float32Array([zNear, zFar])\n }),\n\n depthMask: (update, mask) =>\n update({\n [GL.DEPTH_WRITEMASK]: mask\n }),\n\n frontFace: (update, face) =>\n update({\n [GL.FRONT_FACE]: face\n }),\n\n lineWidth: (update, width) =>\n update({\n [GL.LINE_WIDTH]: width\n }),\n\n polygonOffset: (update, factor, units) =>\n update({\n [GL.POLYGON_OFFSET_FACTOR]: factor,\n [GL.POLYGON_OFFSET_UNITS]: units\n }),\n\n sampleCoverage: (update, value, invert) =>\n update({\n [GL.SAMPLE_COVERAGE_VALUE]: value,\n [GL.SAMPLE_COVERAGE_INVERT]: invert\n }),\n\n scissor: (update, x, y, width, height) =>\n update({\n [GL.SCISSOR_BOX]: new Int32Array([x, y, width, height])\n }),\n\n stencilMask: (update, mask) =>\n update({\n [GL.STENCIL_WRITEMASK]: mask,\n [GL.STENCIL_BACK_WRITEMASK]: mask\n }),\n\n stencilMaskSeparate: (update, face, mask) =>\n update({\n [face === GL.FRONT ? GL.STENCIL_WRITEMASK : GL.STENCIL_BACK_WRITEMASK]: mask\n }),\n\n stencilFunc: (update, func, ref, mask) =>\n update({\n [GL.STENCIL_FUNC]: func,\n [GL.STENCIL_REF]: ref,\n [GL.STENCIL_VALUE_MASK]: mask,\n [GL.STENCIL_BACK_FUNC]: func,\n [GL.STENCIL_BACK_REF]: ref,\n [GL.STENCIL_BACK_VALUE_MASK]: mask\n }),\n\n stencilFuncSeparate: (update, face, func, ref, mask) =>\n update({\n [face === GL.FRONT ? GL.STENCIL_FUNC : GL.STENCIL_BACK_FUNC]: func,\n [face === GL.FRONT ? GL.STENCIL_REF : GL.STENCIL_BACK_REF]: ref,\n [face === GL.FRONT ? GL.STENCIL_VALUE_MASK : GL.STENCIL_BACK_VALUE_MASK]: mask\n }),\n\n stencilOp: (update, fail, zfail, zpass) =>\n update({\n [GL.STENCIL_FAIL]: fail,\n [GL.STENCIL_PASS_DEPTH_FAIL]: zfail,\n [GL.STENCIL_PASS_DEPTH_PASS]: zpass,\n [GL.STENCIL_BACK_FAIL]: fail,\n [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,\n [GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass\n }),\n\n stencilOpSeparate: (update, face, fail, zfail, zpass) =>\n update({\n [face === GL.FRONT ? GL.STENCIL_FAIL : GL.STENCIL_BACK_FAIL]: fail,\n [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_FAIL : GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,\n [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_PASS : GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass\n }),\n\n viewport: (update, x, y, width, height) =>\n update({\n [GL.VIEWPORT]: [x, y, width, height]\n })\n};\n\n// GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT\n\nconst isEnabled = (gl, key) => gl.isEnabled(key);\n\n// Exceptions for any keys that cannot be queried by gl.getParameters\nexport const GL_PARAMETER_GETTERS = {\n [GL.BLEND]: isEnabled,\n [GL.CULL_FACE]: isEnabled,\n [GL.DEPTH_TEST]: isEnabled,\n [GL.DITHER]: isEnabled,\n [GL.POLYGON_OFFSET_FILL]: isEnabled,\n [GL.SAMPLE_ALPHA_TO_COVERAGE]: isEnabled,\n [GL.SAMPLE_COVERAGE]: isEnabled,\n [GL.SCISSOR_TEST]: isEnabled,\n [GL.STENCIL_TEST]: isEnabled,\n\n // WebGL 2\n [GL.RASTERIZER_DISCARD]: isEnabled\n};\n","// Returns true if given object is empty, false otherwise.\nexport function isObjectEmpty(object) {\n for (const key in object) {\n return false;\n }\n return true;\n}\n\nexport function deepArrayEqual(x, y) {\n if (x === y) {\n return true;\n }\n const isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);\n const isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);\n\n // @ts-expect-error DataView...\n if (isArrayX && isArrayY && x.length === y.length) {\n // @ts-expect-error DataView...\n for (let i = 0; i < x.length; ++i) {\n if (x[i] !== y[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","// Support for listening to context state changes and intercepting state queries\n// NOTE: this system does not handle buffer bindings\n/** @typedef {import('./track-context-state')} types */\n\nimport {GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS} from './webgl-parameter-tables';\nimport {setParameters, getParameters} from './unified-parameter-api';\nimport {assert} from '../utils/assert';\nimport {deepArrayEqual} from '../utils/utils';\n\n// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT\n\n// Overrides a WebGLRenderingContext state \"getter\" function\n// to return values directly from cache\nfunction installGetterOverride(gl, functionName) {\n // Get the original function from the WebGLRenderingContext\n const originalGetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function get(...params) {\n const pname = params[0];\n\n // WebGL limits are not prepopulated in the cache, it's neither undefined in GL_PARAMETER_DEFAULTS\n // nor intercepted by GL_HOOKED_SETTERS. Query the original getter.\n if (!(pname in gl.state.cache)) {\n return originalGetterFunc(...params);\n }\n\n // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n return gl.state.enable\n ? // Call the getter the params so that it can e.g. serve from a cache\n gl.state.cache[pname]\n : // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n originalGetterFunc(...params);\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-from-cache`,\n configurable: false\n });\n}\n\n// Overrides a WebGLRenderingContext state \"setter\" function\n// to call a setter spy before the actual setter. Allows us to keep a cache\n// updated with a copy of the WebGL context state.\nfunction installSetterSpy(gl, functionName, setter) {\n // Get the original function from the WebGLRenderingContext\n const originalSetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function set(...params) {\n // Update the value\n // Call the setter with the state cache and the params so that it can store the parameters\n const {valueChanged, oldValue} = setter(gl.state._updateCache, ...params);\n\n // Call the original WebGLRenderingContext func to make sure the context actually gets updated\n if (valueChanged) {\n originalSetterFunc(...params);\n }\n\n // Note: if the original function fails to set the value, our state cache will be bad\n // No solution for this at the moment, but assuming that this is unlikely to be a real problem\n // We could call the setter after the originalSetterFunc. Concern is that this would\n // cause different behavior in debug mode, where originalSetterFunc can throw exceptions\n\n return oldValue;\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-to-cache`,\n configurable: false\n });\n}\n\nfunction installProgramSpy(gl) {\n const originalUseProgram = gl.useProgram.bind(gl);\n\n gl.useProgram = function useProgramLuma(handle) {\n if (gl.state.program !== handle) {\n originalUseProgram(handle);\n gl.state.program = handle;\n }\n };\n}\n\n// HELPER CLASS - GLState\n\n/* eslint-disable no-shadow */\nclass GLState {\n constructor(\n gl,\n {\n copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)\n log = () => {} // Logging function, called when gl parameter change calls are actually issued\n } = {}\n ) {\n this.gl = gl;\n this.program = null;\n this.stateStack = [];\n this.enable = true;\n this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);\n this.log = log;\n\n this._updateCache = this._updateCache.bind(this);\n Object.seal(this);\n }\n\n push(values = {}) {\n this.stateStack.push({});\n }\n\n pop() {\n assert(this.stateStack.length > 0);\n // Use the saved values in the state stack to restore parameters\n const oldValues = this.stateStack[this.stateStack.length - 1];\n setParameters(this.gl, oldValues);\n // Don't pop until we have reset parameters (to make sure other \"stack frames\" are not affected)\n this.stateStack.pop();\n }\n\n // interceptor for context set functions - update our cache and our stack\n // values (Object) - the key values for this setter\n _updateCache(values) {\n let valueChanged = false;\n let oldValue; // = undefined\n\n const oldValues = this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1];\n\n for (const key in values) {\n assert(key !== undefined);\n const value = values[key];\n const cached = this.cache[key];\n // Check that value hasn't already been shadowed\n if (!deepArrayEqual(value, cached)) {\n valueChanged = true;\n oldValue = cached;\n\n // First, save current value being shadowed\n // If a state stack frame is active, save the current parameter values for pop\n // but first check that value hasn't already been shadowed and saved\n if (oldValues && !(key in oldValues)) {\n oldValues[key] = cached;\n }\n\n // Save current value being shadowed\n this.cache[key] = value;\n }\n }\n\n return {valueChanged, oldValue};\n }\n}\n\n// PUBLIC API\n\n/**\n * Initialize WebGL state caching on a context\n * @type {types['trackContextState']}\n */\n// After calling this function, context state will be cached\n// gl.state.push() and gl.state.pop() will be available for saving,\n// temporarily modifying, and then restoring state.\nexport function trackContextState(gl, options = {}) {\n const {enable = true, copyState} = options;\n assert(copyState !== undefined);\n // @ts-ignore\n if (!gl.state) {\n // @ts-ignore\n const {polyfillContext} = globalThis;\n if (polyfillContext) {\n polyfillContext(gl);\n }\n\n // Create a state cache\n // @ts-ignore\n gl.state = new GLState(gl, {copyState});\n\n installProgramSpy(gl);\n\n // intercept all setter functions in the table\n for (const key in GL_HOOKED_SETTERS) {\n const setter = GL_HOOKED_SETTERS[key];\n installSetterSpy(gl, key, setter);\n }\n\n // intercept all getter functions in the table\n installGetterOverride(gl, 'getParameter');\n installGetterOverride(gl, 'isEnabled');\n }\n\n // @ts-ignore\n gl.state.enable = enable;\n\n return gl;\n}\n\n/**\n * Initialize WebGL state caching on a context\n * @type {types['pushContextState']}\n */\nexport function pushContextState(gl) {\n // @ts-ignore\n if (!gl.state) {\n trackContextState(gl, {copyState: false});\n }\n // @ts-ignore\n gl.state.push();\n}\n\n/**\n * Initialize WebGL state caching on a context\n * @type {types['popContextState']}\n */\nexport function popContextState(gl) {\n // @ts-ignore\n assert(gl.state);\n // @ts-ignore\n gl.state.pop();\n}\n","// Provides a unified API for getting and setting any WebGL parameter\n// Also knows default values of all parameters, enabling fast cache initialization\n// Provides base functionality for the state caching.\nimport {\n GL_PARAMETER_DEFAULTS,\n GL_PARAMETER_SETTERS,\n GL_COMPOSITE_PARAMETER_SETTERS,\n GL_PARAMETER_GETTERS\n} from './webgl-parameter-tables';\n\nimport {pushContextState, popContextState} from './track-context-state';\nimport {assert} from '../utils/assert';\nimport {isWebGL} from '../utils/webgl-checks';\nimport {isObjectEmpty} from '../utils/utils';\n\n// Sets any GL parameter regardless of function (gl.blendMode, ...)\n// Note: requires a `cache` object to be set on the context (gl.state.cache)\n// This object is used to fill in any missing values for composite setter functions\nexport function setParameters(gl, values) {\n assert(isWebGL(gl), 'setParameters requires a WebGL context');\n\n if (isObjectEmpty(values)) {\n return;\n }\n\n const compositeSetters = {};\n\n // HANDLE PRIMITIVE SETTERS (and make note of any composite setters)\n\n for (const key in values) {\n const glConstant = Number(key);\n const setter = GL_PARAMETER_SETTERS[key];\n if (setter) {\n // Composite setters should only be called once, so save them\n if (typeof setter === 'string') {\n compositeSetters[setter] = true;\n } else {\n // if (gl[glConstant] !== undefined) {\n // TODO - added above check since this is being called on WebGL2 values in WebGL1...\n // TODO - deep equal on values? only call setter if value has changed?\n // NOTE - the setter will automatically update this.state\n setter(gl, values[key], glConstant);\n }\n }\n }\n\n // HANDLE COMPOSITE SETTERS\n\n // NOTE: any non-provided values needed by composite setters are filled in from state cache\n // The cache parameter is automatically retrieved from the context\n // This depends on `trackContextState`, which is technically a \"circular\" dependency.\n // But it is too inconvenient to always require a cache parameter here.\n // This is the ONLY external dependency in this module/\n const cache = gl.state && gl.state.cache;\n if (cache) {\n for (const key in compositeSetters) {\n // TODO - avoid calling composite setters if values have not changed.\n const compositeSetter = GL_COMPOSITE_PARAMETER_SETTERS[key];\n // Note - if `trackContextState` has been called,\n // the setter will automatically update this.state.cache\n compositeSetter(gl, values, cache);\n }\n }\n\n // Add a log for the else case?\n}\n\n// Copies the state from a context (gl.getParameter should not be overriden)\n// Reads the entire WebGL state from a context\n// Caveat: This generates a huge amount of synchronous driver roundtrips and should be\n// considered a very slow operation, to be used only if/when a context already manipulated\n// by external code needs to be synchronized for the first time\n// @return {Object} - a newly created map, with values keyed by GL parameters\nexport function getParameters(gl, parameters) {\n // default to querying all parameters\n parameters = parameters || GL_PARAMETER_DEFAULTS;\n // support both arrays of parameters and objects (keys represent parameters)\n\n if (typeof parameters === 'number') {\n // single GL enum\n const key = parameters;\n const getter = GL_PARAMETER_GETTERS[key];\n return getter ? getter(gl, key) : gl.getParameter(key);\n }\n\n const parameterKeys = Array.isArray(parameters) ? parameters : Object.keys(parameters);\n\n const state = {};\n for (const key of parameterKeys) {\n const getter = GL_PARAMETER_GETTERS[key];\n state[key] = getter ? getter(gl, Number(key)) : gl.getParameter(Number(key));\n }\n return state;\n}\n\n// Reset all parameters to a (almost) pure context state\n// NOTE: viewport and scissor will be set to the values in GL_PARAMETER_DEFAULTS,\n// NOT the canvas size dimensions, so they will have to be properly set after\n// calling this function.\nexport function resetParameters(gl) {\n setParameters(gl, GL_PARAMETER_DEFAULTS);\n}\n\n// Stores current \"global\" WebGL context settings, changes selected parameters,\n// executes function, restores parameters\nexport function withParameters(gl, parameters, func) {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(gl);\n }\n\n const {nocatch = true} = parameters;\n\n pushContextState(gl);\n setParameters(gl, parameters);\n\n // Setup is done, call the function\n let value;\n\n if (nocatch) {\n // Avoid try catch to minimize stack size impact for safe execution paths\n value = func(gl);\n popContextState(gl);\n } else {\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n try {\n value = func(gl);\n } finally {\n popContextState(gl);\n }\n }\n\n return value;\n}\n","/** @typedef {import('./device-pixels')} types */\n\n/**\n * Returns multiplier need to convert CSS size to Device size\n * @type {types['cssToDeviceRatio']}\n */\nexport function cssToDeviceRatio(gl) {\n // @ts-ignore\n const {luma} = gl;\n\n if (gl.canvas && luma) {\n // For headless gl we might have used custom width and height\n // hence use cached clientWidth\n const {clientWidth} = luma.canvasSizeInfo;\n return clientWidth ? gl.drawingBufferWidth / clientWidth : 1;\n }\n // use default device pixel ratio\n return 1;\n}\n\n/**\n * Maps CSS pixel position to device pixel position\n * @type {types['cssToDevicePixels']}\n */\nexport function cssToDevicePixels(gl, cssPixel, yInvert = true) {\n const ratio = cssToDeviceRatio(gl);\n const width = gl.drawingBufferWidth;\n const height = gl.drawingBufferHeight;\n return scalePixels(cssPixel, ratio, width, height, yInvert);\n}\n\n// HELPER METHOD\n\n/**\n * Calulates device pixel ratio, used during context creation\n * @type {types['getDevicePixelRatio']}\n */\nexport function getDevicePixelRatio(useDevicePixels) {\n const windowRatio = typeof window === 'undefined' ? 1 : window.devicePixelRatio || 1;\n if (Number.isFinite(useDevicePixels)) {\n // @ts-ignore Can no longer be boolean after previous line\n return useDevicePixels <= 0 ? 1 : useDevicePixels;\n }\n return useDevicePixels ? windowRatio : 1;\n}\n\n// PRIVATE\n\nfunction scalePixels(pixel, ratio, width, height, yInvert) {\n const x = scaleX(pixel[0], ratio, width);\n let y = scaleY(pixel[1], ratio, height, yInvert);\n\n // Find boundaries of next pixel to provide valid range of device pixel locaitons\n\n let t = scaleX(pixel[0] + 1, ratio, width);\n // If next pixel's position is clamped to boundary, use it as is, otherwise subtract 1 for current pixel boundary\n const xHigh = t === width - 1 ? t : t - 1;\n\n t = scaleY(pixel[1] + 1, ratio, height, yInvert);\n let yHigh;\n if (yInvert) {\n // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range\n t = t === 0 ? t : t + 1;\n // swap y and yHigh\n yHigh = y;\n y = t;\n } else {\n // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range\n yHigh = t === height - 1 ? t : t - 1;\n // y remains same\n }\n return {\n x,\n y,\n // when ratio < 1, current css pixel and next css pixel may point to same device pixel, set width/height to 1 in those cases.\n width: Math.max(xHigh - x + 1, 1),\n height: Math.max(yHigh - y + 1, 1)\n };\n}\n\nfunction scaleX(x, ratio, width) {\n // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit\n const r = Math.min(Math.round(x * ratio), width - 1);\n return r;\n}\n\nfunction scaleY(y, ratio, height, yInvert) {\n // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit\n return yInvert\n ? Math.max(0, height - 1 - Math.round(y * ratio))\n : Math.min(Math.round(y * ratio), height - 1);\n}\n","// WebGLRenderingContext related methods\n\n/** @typedef {import('./context')} types */\n\n/* eslint-disable quotes */\nimport GL from '@luma.gl/constants';\nimport {isBrowser as getIsBrowser} from '@probe.gl/env';\nimport {trackContextState} from '../state-tracker/track-context-state';\n\nimport {log} from '../utils/log';\nimport {assert} from '../utils/assert';\nimport {getDevicePixelRatio} from '../utils/device-pixels';\nimport {isWebGL2} from '../utils/webgl-checks';\n\nconst isBrowser = getIsBrowser();\nconst isPage = isBrowser && typeof document !== 'undefined';\n\nconst CONTEXT_DEFAULTS = {\n // COMMON CONTEXT PARAMETERS\n // Attempt to allocate WebGL2 context\n webgl2: true, // Attempt to create a WebGL2 context (false to force webgl1)\n webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)\n throwOnError: true,\n manageState: true,\n // BROWSER CONTEXT PARAMETERS\n canvas: null, // A canvas element or a canvas string id\n debug: false, // Instrument context (at the expense of performance)\n // HEADLESS CONTEXT PARAMETERS\n width: 800, // width are height are only used by headless gl\n height: 600\n // WEBGL/HEADLESS CONTEXT PARAMETERS\n // Remaining options are passed through to context creator\n};\n\n/**\n * Creates a context giving access to the WebGL API\n * @type {types['createGLContext']}\n */\n/* eslint-disable complexity, max-statements */\nexport function createGLContext(options = {}) {\n assert(\n isBrowser,\n \"createGLContext only available in the browser.\\nCreate your own headless context or use 'createHeadlessContext' from @luma.gl/test-utils\"\n );\n\n options = Object.assign({}, CONTEXT_DEFAULTS, options);\n const {width, height} = options;\n\n // Error reporting function, enables exceptions to be disabled\n function onError(message) {\n if (options.throwOnError) {\n throw new Error(message);\n }\n // eslint-disable-next-line\n console.error(message);\n return null;\n }\n options.onError = onError;\n\n let gl;\n // Get or create a canvas\n const {canvas} = options;\n const targetCanvas = getCanvas({canvas, width, height, onError});\n // Create a WebGL context in the canvas\n gl = createBrowserContext(targetCanvas, options);\n\n if (!gl) {\n return null;\n }\n\n gl = instrumentGLContext(gl, options);\n\n // Log some debug info about the newly created context\n logInfo(gl);\n\n // Add to seer integration\n return gl;\n}\n\n/**\n * Creates a context giving access to the WebGL API\n * @type {types['instrumentGLContext']}\n */\nexport function instrumentGLContext(gl, options = {}) {\n // Avoid multiple instrumentations\n // @ts-ignore\n if (!gl || gl._instrumented) {\n return gl;\n }\n\n // @ts-ignore\n gl._version = gl._version || getVersion(gl);\n\n // Cache canvas size information to avoid setting it on every frame.\n // @ts-ignore\n gl.luma = gl.luma || {};\n // @ts-ignore\n gl.luma.canvasSizeInfo = gl.luma.canvasSizeInfo || {};\n\n options = Object.assign({}, CONTEXT_DEFAULTS, options);\n const {manageState, debug} = options;\n\n // Install context state tracking\n if (manageState) {\n trackContextState(gl, {\n copyState: false,\n log: (...args) => log.log(1, ...args)()\n });\n }\n\n // Add debug instrumentation to the context\n if (isBrowser && debug) {\n // @ts-ignore\n if (!globalThis.makeDebugContext) {\n log.warn('WebGL debug mode not activated. import \"@luma.gl/debug\" to enable.')();\n } else {\n // @ts-ignore\n gl = globalThis.makeDebugContext(gl, options);\n // Debug forces log level to at least 1\n log.level = Math.max(log.level, 1);\n }\n }\n\n // @ts-ignore\n gl._instrumented = true;\n\n return gl;\n}\n\n/**\n * Provides strings identifying the GPU vendor and driver.\n * @type {types['getContextDebugInfo']}\n */\nexport function getContextDebugInfo(gl) {\n const vendorMasked = gl.getParameter(GL.VENDOR);\n const rendererMasked = gl.getParameter(GL.RENDERER);\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n const vendorUnmasked = ext && gl.getParameter(ext.UNMASKED_VENDOR_WEBGL || GL.VENDOR);\n const rendererUnmasked = ext && gl.getParameter(ext.UNMASKED_RENDERER_WEBGL || GL.RENDERER);\n return {\n vendor: vendorUnmasked || vendorMasked,\n renderer: rendererUnmasked || rendererMasked,\n vendorMasked,\n rendererMasked,\n version: gl.getParameter(GL.VERSION),\n shadingLanguageVersion: gl.getParameter(GL.SHADING_LANGUAGE_VERSION)\n };\n}\n\n/**\n * Resize the canvas' drawing buffer.\n * @type {types['resizeGLContext']}\n */\nexport function resizeGLContext(gl, options = {}) {\n // Resize browser context\n if (gl.canvas) {\n const devicePixelRatio = getDevicePixelRatio(options.useDevicePixels);\n setDevicePixelRatio(gl, devicePixelRatio, options);\n return;\n }\n\n // Resize headless gl context\n const ext = gl.getExtension('STACKGL_resize_drawingbuffer');\n if (ext && `width` in options && `height` in options) {\n ext.resize(options.width, options.height);\n }\n}\n\n// HELPER METHODS\n\n/**\n * Create a WebGL context for a canvas\n * Note calling this multiple time on the same canvas does return the same context\n */\n\nfunction createBrowserContext(canvas, options) {\n const {onError} = options;\n\n // Try to extract any extra information about why context creation failed\n let errorMessage = null;\n const onCreateError = error => (errorMessage = error.statusMessage || errorMessage);\n canvas.addEventListener('webglcontextcreationerror', onCreateError, false);\n\n const {webgl1 = true, webgl2 = true} = options;\n let gl = null;\n // Prefer webgl2 over webgl1, prefer conformant over experimental\n if (webgl2) {\n gl = gl || canvas.getContext('webgl2', options);\n gl = gl || canvas.getContext('experimental-webgl2', options);\n }\n if (webgl1) {\n gl = gl || canvas.getContext('webgl', options);\n gl = gl || canvas.getContext('experimental-webgl', options);\n }\n\n canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);\n\n if (!gl) {\n return onError(\n `Failed to create ${webgl2 && !webgl1 ? 'WebGL2' : 'WebGL'} context: ${errorMessage ||\n 'Unknown error'}`\n );\n }\n\n if (options.onContextLost) {\n canvas.addEventListener('webglcontextlost', options.onContextLost, false);\n }\n\n if (options.onContextRestored) {\n canvas.addEventListener('webglcontextrestored', options.onContextRestored, false);\n }\n\n return gl;\n}\n\nfunction getCanvas({canvas, width = 800, height = 600, onError}) {\n let targetCanvas;\n if (typeof canvas === 'string') {\n const isPageLoaded = isPage && document.readyState === 'complete';\n if (!isPageLoaded) {\n onError(`createGLContext called on canvas '${canvas}' before page was loaded`);\n }\n targetCanvas = document.getElementById(canvas);\n } else if (canvas) {\n targetCanvas = canvas;\n } else {\n targetCanvas = document.createElement('canvas');\n targetCanvas.id = 'lumagl-canvas';\n targetCanvas.style.width = Number.isFinite(width) ? `${width}px` : '100%';\n targetCanvas.style.height = Number.isFinite(height) ? `${height}px` : '100%';\n document.body.insertBefore(targetCanvas, document.body.firstChild);\n }\n\n return targetCanvas;\n}\n\nfunction logInfo(gl) {\n const webGL = isWebGL2(gl) ? 'WebGL2' : 'WebGL1';\n const info = getContextDebugInfo(gl);\n const driver = info ? `(${info.vendor},${info.renderer})` : '';\n const debug = gl.debug ? ' debug' : '';\n log.info(1, `${webGL}${debug} context ${driver}`)();\n}\n\nfunction getVersion(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n // WebGL2 context.\n return 2;\n }\n // Must be a WebGL1 context.\n return 1;\n}\n\n// use devicePixelRatio to set canvas width and height\nfunction setDevicePixelRatio(gl, devicePixelRatio, options) {\n // NOTE: if options.width and options.height not used remove in v8\n let clientWidth = 'width' in options ? options.width : gl.canvas.clientWidth;\n let clientHeight = 'height' in options ? options.height : gl.canvas.clientHeight;\n\n if (!clientWidth || !clientHeight) {\n log.log(1, 'Canvas clientWidth/clientHeight is 0')();\n // by forcing devicePixel ratio to 1, we do not scale gl.canvas.width and height in each frame.\n devicePixelRatio = 1;\n clientWidth = gl.canvas.width || 1;\n clientHeight = gl.canvas.height || 1;\n }\n\n gl.luma = gl.luma || {};\n gl.luma.canvasSizeInfo = gl.luma.canvasSizeInfo || {};\n const cachedSize = gl.luma.canvasSizeInfo;\n // Check if canvas needs to be resized\n if (\n cachedSize.clientWidth !== clientWidth ||\n cachedSize.clientHeight !== clientHeight ||\n cachedSize.devicePixelRatio !== devicePixelRatio\n ) {\n let clampedPixelRatio = devicePixelRatio;\n\n const canvasWidth = Math.floor(clientWidth * clampedPixelRatio);\n const canvasHeight = Math.floor(clientHeight * clampedPixelRatio);\n gl.canvas.width = canvasWidth;\n gl.canvas.height = canvasHeight;\n\n // Note: when devicePixelRatio is too high, it is possible we might hit system limit for\n // drawing buffer width and hight, in those cases they get clamped and resulting aspect ration may not be maintained\n // for those cases, reduce devicePixelRatio.\n if (gl.drawingBufferWidth !== canvasWidth || gl.drawingBufferHeight !== canvasHeight) {\n log.warn(`Device pixel ratio clamped`)();\n clampedPixelRatio = Math.min(\n gl.drawingBufferWidth / clientWidth,\n gl.drawingBufferHeight / clientHeight\n );\n\n gl.canvas.width = Math.floor(clientWidth * clampedPixelRatio);\n gl.canvas.height = Math.floor(clientHeight * clampedPixelRatio);\n }\n\n Object.assign(gl.luma.canvasSizeInfo, {clientWidth, clientHeight, devicePixelRatio});\n }\n}\n","export const VERTEX_SHADER = 'vs';\nexport const FRAGMENT_SHADER = 'fs';\n","import {MODULE_INJECTORS_VS, MODULE_INJECTORS_FS} from '../modules/module-injectors';\nimport {VERTEX_SHADER, FRAGMENT_SHADER} from './constants';\nimport {assert} from '../utils';\n\n// TODO - experimental\nconst MODULE_INJECTORS = {\n [VERTEX_SHADER]: MODULE_INJECTORS_VS,\n [FRAGMENT_SHADER]: MODULE_INJECTORS_FS\n};\n\nexport const DECLARATION_INJECT_MARKER = '__LUMA_INJECT_DECLARATIONS__'; // Uniform/attribute declarations\n\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\nconst REGEX_END_OF_MAIN = /}\\n?[^{}]*$/; // End of main, assumes main is last function\nconst fragments = [];\n\n// A minimal shader injection/templating system.\n// RFC: https://github.com/visgl/luma.gl/blob/7.0-release/dev-docs/RFCs/v6.0/shader-injection-rfc.md\n/* eslint-disable complexity */\nexport default function injectShader(source, type, inject, injectStandardStubs = false) {\n const isVertex = type === VERTEX_SHADER;\n\n for (const key in inject) {\n const fragmentData = inject[key];\n fragmentData.sort((a, b) => a.order - b.order);\n fragments.length = fragmentData.length;\n for (let i = 0, len = fragmentData.length; i < len; ++i) {\n fragments[i] = fragmentData[i].injection;\n }\n const fragmentString = `${fragments.join('\\n')}\\n`;\n switch (key) {\n // declarations are injected before the main function\n case 'vs:#decl':\n if (isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'vs:#main-start':\n if (isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'vs:#main-end':\n if (isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n // declarations are injected before the main function\n case 'fs:#decl':\n if (!isVertex) {\n source = source.replace(DECLARATION_INJECT_MARKER, fragmentString);\n }\n break;\n // inject code at the beginning of the main function\n case 'fs:#main-start':\n if (!isVertex) {\n source = source.replace(REGEX_START_OF_MAIN, match => match + fragmentString);\n }\n break;\n // inject code at the end of main function\n case 'fs:#main-end':\n if (!isVertex) {\n source = source.replace(REGEX_END_OF_MAIN, match => fragmentString + match);\n }\n break;\n\n default:\n // TODO(Tarek): I think this usage should be deprecated.\n\n // inject code after key, leaving key in place\n source = source.replace(key, match => match + fragmentString);\n }\n }\n\n // Remove if it hasn't already been replaced\n source = source.replace(DECLARATION_INJECT_MARKER, '');\n\n // Finally, if requested, insert an automatic module injector chunk\n if (injectStandardStubs) {\n source = source.replace(/\\}\\s*$/, match => match + MODULE_INJECTORS[type]);\n }\n\n return source;\n}\n\n/* eslint-enable complexity */\n\n// Takes an array of inject objects and combines them into one\nexport function combineInjects(injects) {\n const result = {};\n assert(Array.isArray(injects) && injects.length > 1);\n injects.forEach(inject => {\n for (const key in inject) {\n result[key] = result[key] ? `${result[key]}\\n${inject[key]}` : inject[key];\n }\n });\n return result;\n}\n","export const MODULE_INJECTORS_VS = `\\\n#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n`;\n\nexport const MODULE_INJECTORS_FS = `\\\n#ifdef MODULE_MATERIAL\n gl_FragColor = material_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n gl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_FOG\n gl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_PICKING\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n`;\n","const TYPE_DEFINITIONS = {\n number: {\n validate(value, propType) {\n return (\n Number.isFinite(value) &&\n (!('max' in propType) || value <= propType.max) &&\n (!('min' in propType) || value >= propType.min)\n );\n }\n },\n array: {\n validate(value, propType) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n }\n }\n};\n\nexport function parsePropTypes(propDefs) {\n const propTypes = {};\n for (const propName in propDefs) {\n const propDef = propDefs[propName];\n const propType = parsePropType(propDef);\n propTypes[propName] = propType;\n }\n return propTypes;\n}\n\n// Parses one property definition entry. Either contains:\n// * a valid prop type object ({type, ...})\n// * or just a default value, in which case type and name inference is used\nfunction parsePropType(propDef) {\n let type = getTypeOf(propDef);\n if (type === 'object') {\n if (!propDef) {\n return {type: 'object', value: null};\n }\n if ('type' in propDef) {\n return Object.assign({}, propDef, TYPE_DEFINITIONS[propDef.type]);\n }\n if (!('value' in propDef)) {\n // If no type and value this object is likely the value\n return {type: 'object', value: propDef};\n }\n type = getTypeOf(propDef.value);\n return Object.assign({type}, propDef, TYPE_DEFINITIONS[type]);\n }\n return Object.assign({type, value: propDef}, TYPE_DEFINITIONS[type]);\n}\n\n// improved version of javascript typeof that can distinguish arrays and null values\nfunction getTypeOf(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return 'array';\n }\n return typeof value;\n}\n","import {assert} from '../utils';\nimport {parsePropTypes} from './filters/prop-types';\n\nconst VERTEX_SHADER = 'vs';\nconst FRAGMENT_SHADER = 'fs';\n\nexport default class ShaderModule {\n constructor({\n name,\n vs,\n fs,\n dependencies = [],\n uniforms,\n getUniforms,\n deprecations = [],\n defines = {},\n inject = {},\n // DEPRECATED\n vertexShader,\n fragmentShader\n }) {\n assert(typeof name === 'string');\n this.name = name;\n this.vs = vs || vertexShader;\n this.fs = fs || fragmentShader;\n this.getModuleUniforms = getUniforms;\n this.dependencies = dependencies;\n this.deprecations = this._parseDeprecationDefinitions(deprecations);\n this.defines = defines;\n this.injections = normalizeInjections(inject);\n\n if (uniforms) {\n this.uniforms = parsePropTypes(uniforms);\n }\n }\n\n // Extracts the source code chunk for the specified shader type from the named shader module\n getModuleSource(type) {\n let moduleSource;\n switch (type) {\n case VERTEX_SHADER:\n moduleSource = this.vs || '';\n break;\n case FRAGMENT_SHADER:\n moduleSource = this.fs || '';\n break;\n default:\n assert(false);\n }\n\n return `\\\n#define MODULE_${this.name.toUpperCase().replace(/[^0-9a-z]/gi, '_')}\n${moduleSource}\\\n// END MODULE_${this.name}\n\n`;\n }\n\n getUniforms(opts, uniforms) {\n if (this.getModuleUniforms) {\n return this.getModuleUniforms(opts, uniforms);\n }\n // Build uniforms from the uniforms array\n if (this.uniforms) {\n return this._defaultGetUniforms(opts);\n }\n return {};\n }\n\n getDefines() {\n return this.defines;\n }\n\n // Warn about deprecated uniforms or functions\n checkDeprecations(shaderSource, log) {\n this.deprecations.forEach(def => {\n if (def.regex.test(shaderSource)) {\n if (def.deprecated) {\n log.deprecated(def.old, def.new)();\n } else {\n log.removed(def.old, def.new)();\n }\n }\n });\n }\n\n _parseDeprecationDefinitions(deprecations) {\n deprecations.forEach(def => {\n switch (def.type) {\n case 'function':\n def.regex = new RegExp(`\\\\b${def.old}\\\\(`);\n break;\n default:\n def.regex = new RegExp(`${def.type} ${def.old};`);\n }\n });\n\n return deprecations;\n }\n\n _defaultGetUniforms(opts = {}) {\n const uniforms = {};\n const propTypes = this.uniforms;\n\n for (const key in propTypes) {\n const propDef = propTypes[key];\n if (key in opts && !propDef.private) {\n if (propDef.validate) {\n assert(propDef.validate(opts[key], propDef), `${this.name}: invalid ${key}`);\n }\n uniforms[key] = opts[key];\n } else {\n uniforms[key] = propDef.value;\n }\n }\n\n return uniforms;\n }\n}\n\n// This utility mutates the original module\n// Keeping for backward compatibility\n// TODO - remove in v8\nexport function normalizeShaderModule(module) {\n if (!module.normalized) {\n module.normalized = true;\n if (module.uniforms && !module.getUniforms) {\n const shaderModule = new ShaderModule(module);\n module.getUniforms = shaderModule.getUniforms.bind(shaderModule);\n }\n }\n return module;\n}\n\nfunction normalizeInjections(injections) {\n const result = {\n vs: {},\n fs: {}\n };\n\n for (const hook in injections) {\n let injection = injections[hook];\n const stage = hook.slice(0, 2);\n\n if (typeof injection === 'string') {\n injection = {\n order: 0,\n injection\n };\n }\n\n result[stage][hook] = injection;\n }\n\n return result;\n}\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst fp32shader = `\\\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n\n// All these functions are for substituting tan() function from Intel GPU only\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n // 2pi range reduction\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 1.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 1.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n`;\n\nexport const fp32 = {\n name: 'fp32',\n vs: fp32shader,\n fs: null\n};\n","export default `\\\n#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))\n\nstruct AmbientLight {\n vec3 color;\n};\n\nstruct PointLight {\n vec3 color;\n vec3 position;\n\n // Constant-Linear-Exponential\n vec3 attenuation;\n};\n\nstruct DirectionalLight {\n vec3 color;\n vec3 direction;\n};\n\nuniform AmbientLight lighting_uAmbientLight;\nuniform PointLight lighting_uPointLight[MAX_LIGHTS];\nuniform DirectionalLight lighting_uDirectionalLight[MAX_LIGHTS];\nuniform int lighting_uPointLightCount;\nuniform int lighting_uDirectionalLightCount;\n\nuniform bool lighting_uEnabled;\n\nfloat getPointLightAttenuation(PointLight pointLight, float distance) {\n return pointLight.attenuation.x\n + pointLight.attenuation.y * distance\n + pointLight.attenuation.z * distance * distance;\n}\n\n#endif\n`;\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport lightingShader from './lights.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {\n lightSources: {}\n};\n\n// Take color 0-255 and intensity as input and output 0.0-1.0 range\nfunction convertColor({color = [0, 0, 0], intensity = 1.0} = {}) {\n return color.map(component => (component * intensity) / 255.0);\n}\n\nfunction getLightSourceUniforms({ambientLight, pointLights = [], directionalLights = []}) {\n const lightSourceUniforms = {};\n\n if (ambientLight) {\n lightSourceUniforms['lighting_uAmbientLight.color'] = convertColor(ambientLight);\n } else {\n lightSourceUniforms['lighting_uAmbientLight.color'] = [0, 0, 0];\n }\n\n pointLights.forEach((pointLight, index) => {\n lightSourceUniforms[`lighting_uPointLight[${index}].color`] = convertColor(pointLight);\n lightSourceUniforms[`lighting_uPointLight[${index}].position`] = pointLight.position;\n lightSourceUniforms[`lighting_uPointLight[${index}].attenuation`] = pointLight.attenuation || [\n 1,\n 0,\n 0\n ];\n });\n lightSourceUniforms.lighting_uPointLightCount = pointLights.length;\n\n directionalLights.forEach((directionalLight, index) => {\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].color`] = convertColor(\n directionalLight\n );\n lightSourceUniforms[`lighting_uDirectionalLight[${index}].direction`] =\n directionalLight.direction;\n });\n lightSourceUniforms.lighting_uDirectionalLightCount = directionalLights.length;\n\n return lightSourceUniforms;\n}\n\n// eslint-disable-next-line complexity\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n // Specify lights separately\n if ('lightSources' in opts) {\n const {ambientLight, pointLights, directionalLights} = opts.lightSources || {};\n const hasLights =\n ambientLight ||\n (pointLights && pointLights.length > 0) ||\n (directionalLights && directionalLights.length > 0);\n\n if (!hasLights) {\n return {lighting_uEnabled: false};\n }\n\n return Object.assign(\n {},\n getLightSourceUniforms({ambientLight, pointLights, directionalLights}),\n {\n lighting_uEnabled: true\n }\n );\n }\n\n // Support for array of lights. Type of light is detected by type field\n if ('lights' in opts) {\n const lightSources = {pointLights: [], directionalLights: []};\n // @ts-ignore\n for (const light of opts.lights || []) {\n switch (light.type) {\n case 'ambient':\n // Note: Only uses last ambient light\n // TODO - add ambient light sources on CPU?\n lightSources.ambientLight = light;\n break;\n case 'directional':\n lightSources.directionalLights.push(light);\n break;\n case 'point':\n lightSources.pointLights.push(light);\n break;\n default:\n // eslint-disable-next-line\n // console.warn(light.type);\n }\n }\n\n // Call the `opts.lightSources`` version\n return getUniforms({lightSources});\n }\n\n return {};\n}\n\n/** @type {ShaderModule} */\nexport const lights = {\n name: 'lights',\n vs: lightingShader,\n fs: lightingShader,\n getUniforms,\n defines: {\n MAX_LIGHTS: 3\n }\n};\n","export default `\\\nuniform mat4 u_MVPMatrix;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_NormalMatrix;\n\nvarying vec3 pbr_vPosition;\nvarying vec2 pbr_vUV;\n\n#ifdef HAS_NORMALS\n# ifdef HAS_TANGENTS\nvarying mat3 pbr_vTBN;\n# else\nvarying vec3 pbr_vNormal;\n# endif\n#endif\n\nvoid pbr_setPositionNormalTangentUV(vec4 position, vec4 normal, vec4 tangent, vec2 uv)\n{\n vec4 pos = u_ModelMatrix * position;\n pbr_vPosition = vec3(pos.xyz) / pos.w;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\n vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(normal.xyz, 0.0)));\n vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent.xyz, 0.0)));\n vec3 bitangentW = cross(normalW, tangentW) * tangent.w;\n pbr_vTBN = mat3(tangentW, bitangentW, normalW);\n#else // HAS_TANGENTS != 1\n pbr_vNormal = normalize(vec3(u_ModelMatrix * vec4(normal.xyz, 0.0)));\n#endif\n#endif\n\n#ifdef HAS_UV\n pbr_vUV = uv;\n#else\n pbr_vUV = vec2(0.,0.);\n#endif\n}\n`;\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {lights} from '../lights/lights';\n\nimport vs from './pbr-vertex.glsl';\nimport fs from './pbr-fragment.glsl';\n\n/**\n * @type {ShaderModule}\n * PBR lighting shader module\n */\nexport const pbr = {\n name: 'pbr',\n vs,\n fs,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n dependencies: [lights]\n};\n","// This fragment shader defines a reference implementation for Physically Based Shading of\n// a microfacet surface material defined by a glTF model.\n//\n// Attribution:\n// MIT license, Copyright (c) 2016-2017 Mohamad Moneimne and Contributors\n\n// TODO - better do the checks outside of shader\nexport default `\\\n#if defined(USE_TEX_LOD) && !defined(FEATURE_GLSL_TEXTURE_LOD)\n# error PBR fragment shader: Texture LOD is not available\n#endif\n\n#if !defined(HAS_TANGENTS) && !defined(FEATURE_GLSL_DERIVATIVES)\n# error PBR fragment shader: Derivatives are not available\n#endif\n\n// WebGL 1.0 does not support non-constant in for loops\n// This provides an easy way to handle these cases\n// and still take advantage of WebGL 2.0\n#if (__VERSION__ < 300)\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL1COND; INCR)\n#else\n #define SMART_FOR(INIT, WEBGL1COND, WEBGL2COND, INCR) for (INIT; WEBGL2COND; INCR)\n#endif\n\nprecision highp float;\n\nuniform bool pbr_uUnlit;\n\n#ifdef USE_IBL\nuniform samplerCube u_DiffuseEnvSampler;\nuniform samplerCube u_SpecularEnvSampler;\nuniform sampler2D u_brdfLUT;\nuniform vec2 u_ScaleIBLAmbient;\n#endif\n\n#ifdef HAS_BASECOLORMAP\nuniform sampler2D u_BaseColorSampler;\n#endif\n#ifdef HAS_NORMALMAP\nuniform sampler2D u_NormalSampler;\nuniform float u_NormalScale;\n#endif\n#ifdef HAS_EMISSIVEMAP\nuniform sampler2D u_EmissiveSampler;\nuniform vec3 u_EmissiveFactor;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\nuniform sampler2D u_MetallicRoughnessSampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\nuniform sampler2D u_OcclusionSampler;\nuniform float u_OcclusionStrength;\n#endif\n\n#ifdef ALPHA_CUTOFF\nuniform float u_AlphaCutoff;\n#endif\n\nuniform vec2 u_MetallicRoughnessValues;\nuniform vec4 u_BaseColorFactor;\n\nuniform vec3 u_Camera;\n\n// debugging flags used for shader output of intermediate PBR variables\n#ifdef PBR_DEBUG\nuniform vec4 u_ScaleDiffBaseMR;\nuniform vec4 u_ScaleFGDSpec;\n#endif\n\nvarying vec3 pbr_vPosition;\n\nvarying vec2 pbr_vUV;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nvarying mat3 pbr_vTBN;\n#else\nvarying vec3 pbr_vNormal;\n#endif\n#endif\n\n// Encapsulate the various inputs used by the various functions in the shading equation\n// We store values in this struct to simplify the integration of alternative implementations\n// of the shading terms, outlined in the Readme.MD Appendix.\nstruct PBRInfo\n{\n float NdotL; // cos angle between normal and light direction\n float NdotV; // cos angle between normal and view direction\n float NdotH; // cos angle between normal and half vector\n float LdotH; // cos angle between light direction and half vector\n float VdotH; // cos angle between view direction and half vector\n float perceptualRoughness; // roughness value, as authored by the model creator (input to shader)\n float metalness; // metallic value at the surface\n vec3 reflectance0; // full reflectance color (normal incidence angle)\n vec3 reflectance90; // reflectance color at grazing angle\n float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2])\n vec3 diffuseColor; // color contribution from diffuse lighting\n vec3 specularColor; // color contribution from specular lighting\n vec3 n; // normal at surface point\n vec3 v; // vector from surface point to camera\n};\n\nconst float M_PI = 3.141592653589793;\nconst float c_MinRoughness = 0.04;\n\nvec4 SRGBtoLINEAR(vec4 srgbIn)\n{\n#ifdef MANUAL_SRGB\n#ifdef SRGB_FAST_APPROXIMATION\n vec3 linOut = pow(srgbIn.xyz,vec3(2.2));\n#else //SRGB_FAST_APPROXIMATION\n vec3 bLess = step(vec3(0.04045),srgbIn.xyz);\n vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );\n#endif //SRGB_FAST_APPROXIMATION\n return vec4(linOut,srgbIn.w);;\n#else //MANUAL_SRGB\n return srgbIn;\n#endif //MANUAL_SRGB\n}\n\n// Find the normal for this fragment, pulling either from a predefined normal map\n// or from the interpolated mesh normal and tangent attributes.\nvec3 getNormal()\n{\n // Retrieve the tangent space matrix\n#ifndef HAS_TANGENTS\n vec3 pos_dx = dFdx(pbr_vPosition);\n vec3 pos_dy = dFdy(pbr_vPosition);\n vec3 tex_dx = dFdx(vec3(pbr_vUV, 0.0));\n vec3 tex_dy = dFdy(vec3(pbr_vUV, 0.0));\n vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n\n#ifdef HAS_NORMALS\n vec3 ng = normalize(pbr_vNormal);\n#else\n vec3 ng = cross(pos_dx, pos_dy);\n#endif\n\n t = normalize(t - ng * dot(ng, t));\n vec3 b = normalize(cross(ng, t));\n mat3 tbn = mat3(t, b, ng);\n#else // HAS_TANGENTS\n mat3 tbn = pbr_vTBN;\n#endif\n\n#ifdef HAS_NORMALMAP\n vec3 n = texture2D(u_NormalSampler, pbr_vUV).rgb;\n n = normalize(tbn * ((2.0 * n - 1.0) * vec3(u_NormalScale, u_NormalScale, 1.0)));\n#else\n // The tbn matrix is linearly interpolated, so we need to re-normalize\n vec3 n = normalize(tbn[2].xyz);\n#endif\n\n return n;\n}\n\n// Calculation of the lighting contribution from an optional Image Based Light source.\n// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].\n// See our README.md on Environment Maps [3] for additional discussion.\n#ifdef USE_IBL\nvec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)\n{\n float mipCount = 9.0; // resolution of 512x512\n float lod = (pbrInputs.perceptualRoughness * mipCount);\n // retrieve a scale and bias to F0. See [1], Figure 3\n vec3 brdf = SRGBtoLINEAR(texture2D(u_brdfLUT,\n vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;\n vec3 diffuseLight = SRGBtoLINEAR(textureCube(u_DiffuseEnvSampler, n)).rgb;\n\n#ifdef USE_TEX_LOD\n vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;\n#else\n vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;\n#endif\n\n vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;\n vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);\n\n // For presentation, this allows us to disable IBL terms\n diffuse *= u_ScaleIBLAmbient.x;\n specular *= u_ScaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n// Basic Lambertian diffuse\n// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog\n// See also [1], Equation 1\nvec3 diffuse(PBRInfo pbrInputs)\n{\n return pbrInputs.diffuseColor / M_PI;\n}\n\n// The following equation models the Fresnel reflectance term of the spec equation (aka F())\n// Implementation of fresnel from [4], Equation 15\nvec3 specularReflection(PBRInfo pbrInputs)\n{\n return pbrInputs.reflectance0 +\n (pbrInputs.reflectance90 - pbrInputs.reflectance0) *\n pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);\n}\n\n// This calculates the specular geometric attenuation (aka G()),\n// where rougher material will reflect less light back to the viewer.\n// This implementation is based on [1] Equation 4, and we adopt their modifications to\n// alphaRoughness as input as originally proposed in [2].\nfloat geometricOcclusion(PBRInfo pbrInputs)\n{\n float NdotL = pbrInputs.NdotL;\n float NdotV = pbrInputs.NdotV;\n float r = pbrInputs.alphaRoughness;\n\n float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n// The following equation(s) model the distribution of microfacet normals across\n// the area being drawn (aka D())\n// Implementation from \"Average Irregularity Representation of a Roughened Surface\n// for Ray Reflection\" by T. S. Trowbridge, and K. P. Reitz\n// Follows the distribution function recommended in the SIGGRAPH 2013 course notes\n// from EPIC Games [1], Equation 3.\nfloat microfacetDistribution(PBRInfo pbrInputs)\n{\n float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;\n float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nvoid PBRInfo_setAmbientLight(inout PBRInfo pbrInputs) {\n pbrInputs.NdotL = 1.0;\n pbrInputs.NdotH = 0.0;\n pbrInputs.LdotH = 0.0;\n pbrInputs.VdotH = 1.0;\n}\n\nvoid PBRInfo_setDirectionalLight(inout PBRInfo pbrInputs, vec3 lightDirection) {\n vec3 n = pbrInputs.n;\n vec3 v = pbrInputs.v;\n vec3 l = normalize(lightDirection); // Vector from surface point to light\n vec3 h = normalize(l+v); // Half vector between both l and v\n\n pbrInputs.NdotL = clamp(dot(n, l), 0.001, 1.0);\n pbrInputs.NdotH = clamp(dot(n, h), 0.0, 1.0);\n pbrInputs.LdotH = clamp(dot(l, h), 0.0, 1.0);\n pbrInputs.VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nvoid PBRInfo_setPointLight(inout PBRInfo pbrInputs, PointLight pointLight) {\n vec3 light_direction = normalize(pointLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInputs, light_direction);\n}\n\nvec3 calculateFinalColor(PBRInfo pbrInputs, vec3 lightColor) {\n // Calculate the shading terms for the microfacet specular shading model\n vec3 F = specularReflection(pbrInputs);\n float G = geometricOcclusion(pbrInputs);\n float D = microfacetDistribution(pbrInputs);\n\n // Calculation of analytical lighting contribution\n vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);\n vec3 specContrib = F * G * D / (4.0 * pbrInputs.NdotL * pbrInputs.NdotV);\n // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)\n return pbrInputs.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nvec4 pbr_filterColor(vec4 colorUnused)\n{\n // The albedo may be defined from a base texture or a flat color\n#ifdef HAS_BASECOLORMAP\n vec4 baseColor = SRGBtoLINEAR(texture2D(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;\n#else\n vec4 baseColor = u_BaseColorFactor;\n#endif\n\n#ifdef ALPHA_CUTOFF\n if (baseColor.a < u_AlphaCutoff) {\n discard;\n }\n#endif\n\n vec3 color = vec3(0, 0, 0);\n\n if(pbr_uUnlit){\n color.rgb = baseColor.rgb;\n }\n else{\n // Metallic and Roughness material properties are packed together\n // In glTF, these factors can be specified by fixed scalar values\n // or from a metallic-roughness map\n float perceptualRoughness = u_MetallicRoughnessValues.y;\n float metallic = u_MetallicRoughnessValues.x;\n#ifdef HAS_METALROUGHNESSMAP\n // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.\n // This layout intentionally reserves the 'r' channel for (optional) occlusion map data\n vec4 mrSample = texture2D(u_MetallicRoughnessSampler, pbr_vUV);\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n#endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n // Roughness is authored as perceptual roughness; as is convention,\n // convert to material roughness by squaring the perceptual roughness [2].\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n vec3 f0 = vec3(0.04);\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n vec3 specularColor = mix(f0, baseColor.rgb, metallic);\n\n // Compute reflectance.\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n // For typical incident reflectance range (between 4% to 100%) set the grazing\n // reflectance to 100% for typical fresnel effect.\n // For very low reflectance range on highly diffuse objects (below 4%),\n // incrementally reduce grazing reflecance to 0%.\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n\n vec3 n = getNormal(); // normal at surface point\n vec3 v = normalize(u_Camera - pbr_vPosition); // Vector from surface point to camera\n\n float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInputs = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n#ifdef USE_LIGHTS\n // Apply ambient light\n PBRInfo_setAmbientLight(pbrInputs);\n color += calculateFinalColor(pbrInputs, lighting_uAmbientLight.color);\n\n // Apply directional light\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uDirectionalLightCount, i++) {\n if (i < lighting_uDirectionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInputs, lighting_uDirectionalLight[i].direction);\n color += calculateFinalColor(pbrInputs, lighting_uDirectionalLight[i].color);\n }\n }\n\n // Apply point light\n SMART_FOR(int i = 0, i < MAX_LIGHTS, i < lighting_uPointLightCount, i++) {\n if (i < lighting_uPointLightCount) {\n PBRInfo_setPointLight(pbrInputs, lighting_uPointLight[i]);\n float attenuation = getPointLightAttenuation(lighting_uPointLight[i], distance(lighting_uPointLight[i].position, pbr_vPosition));\n color += calculateFinalColor(pbrInputs, lighting_uPointLight[i].color / attenuation);\n }\n }\n#endif\n\n // Calculate lighting contribution from image based lighting source (IBL)\n#ifdef USE_IBL\n color += getIBLContribution(pbrInputs, n, reflection);\n#endif\n\n // Apply optional PBR terms for additional (optional) shading\n#ifdef HAS_OCCLUSIONMAP\n float ao = texture2D(u_OcclusionSampler, pbr_vUV).r;\n color = mix(color, color * ao, u_OcclusionStrength);\n#endif\n\n#ifdef HAS_EMISSIVEMAP\n vec3 emissive = SRGBtoLINEAR(texture2D(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;\n color += emissive;\n#endif\n\n // This section uses mix to override final color for reference app visualization\n // of various parameters in the lighting equation.\n#ifdef PBR_DEBUG\n // TODO: Figure out how to debug multiple lights\n\n // color = mix(color, F, u_ScaleFGDSpec.x);\n // color = mix(color, vec3(G), u_ScaleFGDSpec.y);\n // color = mix(color, vec3(D), u_ScaleFGDSpec.z);\n // color = mix(color, specContrib, u_ScaleFGDSpec.w);\n\n // color = mix(color, diffuseContrib, u_ScaleDiffBaseMR.x);\n color = mix(color, baseColor.rgb, u_ScaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), u_ScaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), u_ScaleDiffBaseMR.w);\n#endif\n\n }\n\n return vec4(pow(color,vec3(1.0/2.2)), baseColor.a);\n}\n`;\n","export default `\\\n\nuniform float lighting_uAmbient;\nuniform float lighting_uDiffuse;\nuniform float lighting_uShininess;\nuniform vec3 lighting_uSpecularColor;\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {\n vec3 halfway_direction = normalize(light_direction + view_direction);\n float lambertian = dot(light_direction, normal_worldspace);\n float specular = 0.0;\n if (lambertian > 0.0) {\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, lighting_uShininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * lighting_uDiffuse * surfaceColor + specular * lighting_uSpecularColor) * color;\n}\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = surfaceColor;\n\n if (lighting_uEnabled) {\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n lightColor = lighting_uAmbient * surfaceColor * lighting_uAmbientLight.color;\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uPointLightCount) {\n break;\n }\n PointLight pointLight = lighting_uPointLight[i];\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uDirectionalLightCount) {\n break;\n }\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n }\n return lightColor;\n}\n\nvec3 lighting_getSpecularLightColor(vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = vec3(0, 0, 0);\n vec3 surfaceColor = vec3(0, 0, 0);\n\n if (lighting_uEnabled) {\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uPointLightCount) {\n break;\n }\n PointLight pointLight = lighting_uPointLight[i];\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color);\n }\n\n for (int i = 0; i < MAX_LIGHTS; i++) {\n if (i >= lighting_uDirectionalLightCount) {\n break;\n }\n DirectionalLight directionalLight = lighting_uDirectionalLight[i];\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n }\n return lightColor;\n}\n`;\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nimport {lights} from '../lights/lights';\nimport lightingShader from './phong-lighting.glsl';\n\nconst INITIAL_MODULE_OPTIONS = {};\n\nfunction getMaterialUniforms(material) {\n const {ambient = 0.35, diffuse = 0.6, shininess = 32, specularColor = [30, 30, 30]} = material;\n\n return {\n lighting_uAmbient: ambient,\n lighting_uDiffuse: diffuse,\n lighting_uShininess: shininess,\n lighting_uSpecularColor: specularColor.map(x => x / 255)\n };\n}\n\nfunction getUniforms(opts = INITIAL_MODULE_OPTIONS) {\n if (!('material' in opts)) {\n return {};\n }\n\n const {material} = opts;\n\n if (!material) {\n return {lighting_uEnabled: false};\n }\n\n return getMaterialUniforms(material);\n}\n\n/** @type {ShaderModule} */\nexport const gouraudLighting = {\n name: 'gouraud-lighting',\n dependencies: [lights],\n vs: lightingShader,\n defines: {\n LIGHTING_VERTEX: 1\n },\n getUniforms\n};\n\n/** @type {ShaderModule} */\nexport const phongLighting = {\n name: 'phong-lighting',\n dependencies: [lights],\n fs: lightingShader,\n defines: {\n LIGHTING_FRAGMENT: 1\n },\n getUniforms\n};\n","/** @typedef {import('../../types').ShaderModule} ShaderModule */\n\nconst DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);\n\nconst DEFAULT_MODULE_OPTIONS = {\n pickingSelectedColor: null, // Set to a picking color to visually highlight that item\n pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR, // Color of visual highlight of \"selected\" item\n pickingActive: false, // Set to true when rendering to off-screen \"picking\" buffer\n pickingAttribute: false // Set to true when picking an attribute value instead of object index\n};\n\n/* eslint-disable camelcase */\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS) {\n const uniforms = {};\n if (opts.pickingSelectedColor !== undefined) {\n if (!opts.pickingSelectedColor) {\n uniforms.picking_uSelectedColorValid = 0;\n } else {\n const selectedColor = opts.pickingSelectedColor.slice(0, 3);\n uniforms.picking_uSelectedColorValid = 1;\n uniforms.picking_uSelectedColor = selectedColor;\n }\n }\n if (opts.pickingHighlightColor) {\n const color = Array.from(opts.pickingHighlightColor, x => x / 255);\n if (!Number.isFinite(color[3])) {\n color[3] = 1;\n }\n uniforms.picking_uHighlightColor = color;\n }\n if (opts.pickingActive !== undefined) {\n uniforms.picking_uActive = Boolean(opts.pickingActive);\n uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);\n }\n return uniforms;\n}\n\nconst vs = `\\\nuniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n`;\n\nconst fs = `\\\nuniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n if (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (picking_uActive) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n`;\n\n/** @type {ShaderModule} */\nexport const picking = {\n name: 'picking',\n vs,\n fs,\n getUniforms\n};\n","// Recommendation is to ignore message but current test suite checks agains the\n// message so keep it for now.\nexport default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'shadertools: assertion failed.');\n }\n}\n","import GL from '@luma.gl/constants';\nimport {getTypedArrayFromGLType} from '../webgl-utils/typed-array-utils';\nimport {assert} from '../utils/assert';\nimport {checkProps} from '../utils/check-props';\n\nconst DEFAULT_ACCESSOR_VALUES = {\n offset: 0,\n stride: 0,\n type: GL.FLOAT,\n size: 1,\n divisor: 0,\n normalized: false,\n integer: false\n};\n\nconst PROP_CHECKS = {\n deprecatedProps: {\n instanced: 'divisor',\n isInstanced: 'divisor'\n }\n};\n\nexport default class Accessor {\n static getBytesPerElement(accessor) {\n // TODO: using `FLOAT` when type is not specified,\n // ensure this assumption is valid or force API to specify type.\n const ArrayType = getTypedArrayFromGLType(accessor.type || GL.FLOAT);\n return ArrayType.BYTES_PER_ELEMENT;\n }\n\n static getBytesPerVertex(accessor) {\n assert(accessor.size);\n // TODO: using `FLOAT` when type is not specified,\n // ensure this assumption is valid or force API to specify type.\n const ArrayType = getTypedArrayFromGLType(accessor.type || GL.FLOAT);\n return ArrayType.BYTES_PER_ELEMENT * accessor.size;\n }\n\n // Combines (merges) a list of accessors. On top of default values\n // Usually [programAccessor, bufferAccessor, appAccessor]\n // All props will be set in the returned object.\n // TODO check for conflicts between values in the supplied accessors\n static resolve(...accessors) {\n return new Accessor(...[DEFAULT_ACCESSOR_VALUES, ...accessors]); // Default values\n }\n\n constructor(...accessors) {\n accessors.forEach(accessor => this._assign(accessor)); // Merge in sequence\n Object.freeze(this);\n }\n\n toString() {\n return JSON.stringify(this);\n }\n\n // ACCESSORS\n\n // TODO - remove>\n get BYTES_PER_ELEMENT() {\n return Accessor.getBytesPerElement(this);\n }\n\n get BYTES_PER_VERTEX() {\n return Accessor.getBytesPerVertex(this);\n }\n\n // PRIVATE\n\n // eslint-disable-next-line complexity, max-statements\n _assign(props = {}) {\n props = checkProps('Accessor', props, PROP_CHECKS);\n\n if (props.type !== undefined) {\n this.type = props.type;\n\n // Auto-deduce integer type?\n if (props.type === GL.INT || props.type === GL.UNSIGNED_INT) {\n this.integer = true;\n }\n }\n if (props.size !== undefined) {\n this.size = props.size;\n }\n if (props.offset !== undefined) {\n this.offset = props.offset;\n }\n if (props.stride !== undefined) {\n this.stride = props.stride;\n }\n if (props.normalized !== undefined) {\n this.normalized = props.normalized;\n }\n if (props.integer !== undefined) {\n this.integer = props.integer;\n }\n\n // INSTANCE DIVISOR\n if (props.divisor !== undefined) {\n this.divisor = props.divisor;\n }\n\n // Buffer is optional\n if (props.buffer !== undefined) {\n this.buffer = props.buffer;\n }\n\n // The binding index (for binding e.g. Transform feedbacks and Uniform buffers)\n // TODO - should this be part of accessor?\n if (props.index !== undefined) {\n if (typeof props.index === 'boolean') {\n this.index = props.index ? 1 : 0;\n } else {\n this.index = props.index;\n }\n }\n\n // DEPRECATED\n if (props.instanced !== undefined) {\n this.divisor = props.instanced ? 1 : 0;\n }\n if (props.isInstanced !== undefined) {\n this.divisor = props.isInstanced ? 1 : 0;\n }\n\n return this;\n }\n}\n\n// TEST EXPORTS\nexport {DEFAULT_ACCESSOR_VALUES};\n","import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Accessor from './accessor';\nimport {getGLTypeFromTypedArray, getTypedArrayFromGLType} from '../webgl-utils/typed-array-utils';\nimport {assertWebGL2Context, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\nimport {checkProps} from '../utils/check-props';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n// Shared prop checks for constructor and setProps\nconst DEPRECATED_PROPS = {\n offset: 'accessor.offset',\n stride: 'accessor.stride',\n type: 'accessor.type',\n size: 'accessor.size',\n divisor: 'accessor.divisor',\n normalized: 'accessor.normalized',\n integer: 'accessor.integer',\n instanced: 'accessor.divisor',\n isInstanced: 'accessor.divisor'\n};\n\n// Prop checks for constructor\nconst PROP_CHECKS_INITIALIZE = {\n removedProps: {},\n replacedProps: {\n bytes: 'byteLength'\n },\n // new Buffer() with individual accessor props is still used in apps, emit warnings\n deprecatedProps: DEPRECATED_PROPS\n};\n\n// Prop checks for setProps\nconst PROP_CHECKS_SET_PROPS = {\n // Buffer.setProps() with individual accessor props is rare => emit errors\n removedProps: DEPRECATED_PROPS\n};\n\nexport default class Buffer extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Buffer';\n }\n constructor(gl, props = {}) {\n super(gl, props);\n\n this.stubRemovedMethods('Buffer', 'v6.0', ['layout', 'setLayout', 'getIndexedParameter']);\n // this.stubRemovedMethods('Buffer', 'v7.0', ['updateAccessor']);\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n this.target = props.target || (this.gl.webgl2 ? GL.COPY_READ_BUFFER : GL.ARRAY_BUFFER);\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n // returns number of elements in the buffer (assuming that the full buffer is used)\n getElementCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));\n }\n\n // returns number of vertices in the buffer (assuming that the full buffer is used)\n getVertexCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));\n }\n\n // Creates and initializes the buffer object's data store.\n // Signature: `new Buffer(gl, {data: new Float32Array(...)})`\n // Signature: `new Buffer(gl, new Float32Array(...))`\n // Signature: `new Buffer(gl, 100)`\n initialize(props = {}) {\n // Signature `new Buffer(gl, new Float32Array(...)`\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n // Signature: `new Buffer(gl, 100)`\n if (Number.isFinite(props)) {\n props = {byteLength: props};\n }\n\n props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);\n\n // Initialize member fields\n this.usage = props.usage || GL.STATIC_DRAW;\n this.debugData = null;\n\n // Deprecated: Merge main props and accessor\n this.setAccessor(Object.assign({}, props, props.accessor));\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._setData(props.data, props.offset, props.byteLength);\n } else {\n this._setByteLength(props.byteLength || 0);\n }\n\n return this;\n }\n\n setProps(props) {\n props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);\n\n if ('accessor' in props) {\n this.setAccessor(props.accessor);\n }\n\n return this;\n }\n\n // Optionally stores an accessor with the buffer, makes it easier to use it as an attribute later\n // {type, size = 1, offset = 0, stride = 0, normalized = false, integer = false, divisor = 0}\n setAccessor(accessor) {\n // NOTE: From luma.gl v7.0, Accessors have an optional `buffer `field\n // (mainly to support \"interleaving\")\n // To avoid confusion, ensure `buffer.accessor` does not have a `buffer.accessor.buffer` field:\n accessor = Object.assign({}, accessor);\n delete accessor.buffer;\n\n // This new statement ensures that an \"accessor object\" is re-packaged as an Accessor instance\n this.accessor = new Accessor(accessor);\n return this;\n }\n\n // Allocate a bigger GPU buffer (if the current buffer is not big enough).\n // If a reallocation is triggered it clears the buffer\n // Returns:\n // `true`: buffer was reallocated, data was cleared\n // `false`: buffer was big enough, data is intact\n reallocate(byteLength) {\n if (byteLength > this.byteLength) {\n this._setByteLength(byteLength);\n return true;\n }\n this.bytesUsed = byteLength;\n return false;\n }\n\n // Update with new data. Reinitializes the buffer\n setData(props) {\n return this.initialize(props);\n }\n\n // Updates a subset of a buffer object's data store.\n // Data (Typed Array or ArrayBuffer), length is inferred unless provided\n // Offset into buffer\n // WebGL2 only: Offset into srcData\n // WebGL2 only: Number of bytes to be copied\n subData(props) {\n // Signature: buffer.subData(new Float32Array([...]))\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n const {data, offset = 0, srcOffset = 0} = props;\n const byteLength = props.byteLength || props.length;\n\n assert(data);\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const target = this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n assertWebGL2Context(this.gl);\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, offset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n this.debugData = null;\n\n this._inferType(data);\n\n return this;\n }\n\n // WEBGL2 ONLY: Copies part of the data of another buffer into this buffer\n copyData({sourceBuffer, readOffset = 0, writeOffset = 0, size}) {\n const {gl} = this;\n assertWebGL2Context(gl);\n\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);\n gl.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);\n gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n this.debugData = null;\n\n return this;\n }\n\n // WEBGL2 ONLY: Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.\n getData({dstData = null, srcByteOffset = 0, dstOffset = 0, length = 0} = {}) {\n assertWebGL2Context(this.gl);\n\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);\n\n const dstElementOffset = dstOffset;\n\n let dstAvailableElementCount;\n let dstElementCount;\n if (dstData) {\n dstElementCount = dstData.length;\n dstAvailableElementCount = dstElementCount - dstElementOffset;\n } else {\n // Allocate ArrayBufferView with enough size to copy all eligible data.\n dstAvailableElementCount = Math.min(\n sourceAvailableElementCount,\n length || sourceAvailableElementCount\n );\n dstElementCount = dstElementOffset + dstAvailableElementCount;\n }\n\n const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);\n length = length || copyElementCount;\n assert(length <= copyElementCount);\n dstData = dstData || new ArrayType(dstElementCount);\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n return dstData;\n }\n\n /**\n * Binds a buffer to a given binding point (target).\n * GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER take an index, and optionally a range.\n * - GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER need an index to affect state\n * - GL.UNIFORM_BUFFER: `offset` must be aligned to GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT.\n * - GL.UNIFORM_BUFFER: `size` must be a minimum of GL.UNIFORM_BLOCK_SIZE_DATA.\n */\n bind({\n target = this.target, // target for the bind operation\n index = this.accessor && this.accessor.index, // index = index of target (indexed bind point)\n offset = 0,\n size\n } = {}) {\n // NOTE: While GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER could\n // be used as direct binding points, they will not affect transform feedback or\n // uniform buffer state. Instead indexed bindings need to be made.\n if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {\n if (size !== undefined) {\n this.gl.bindBufferRange(target, index, this.handle, offset, size);\n } else {\n assert(offset === 0); // Make sure offset wasn't supplied\n this.gl.bindBufferBase(target, index, this.handle);\n }\n } else {\n this.gl.bindBuffer(target, this.handle);\n }\n\n return this;\n }\n\n unbind({target = this.target, index = this.accessor && this.accessor.index} = {}) {\n const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;\n if (isIndexedBuffer) {\n this.gl.bindBufferBase(target, index, null);\n } else {\n this.gl.bindBuffer(target, null);\n }\n return this;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n // Returns a short initial data array\n getDebugData() {\n if (!this.debugData) {\n this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});\n return {data: this.debugData, changed: true};\n }\n return {data: this.debugData, changed: false};\n }\n\n invalidateDebugData() {\n this.debugData = null;\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _setData(data, offset = 0, byteLength = data.byteLength + offset) {\n assert(ArrayBuffer.isView(data));\n\n this._trackDeallocatedMemory();\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.usage);\n this.gl.bufferSubData(target, offset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n // infer GL type from supplied typed array\n const type = getGLTypeFromTypedArray(data);\n assert(type);\n this.setAccessor(new Accessor(this.accessor, {type}));\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _setByteLength(byteLength, usage = this.usage) {\n assert(byteLength >= 0);\n\n this._trackDeallocatedMemory();\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n data = new Float32Array(0);\n }\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, usage);\n this.gl.bindBuffer(target, null);\n\n this.usage = usage;\n this.debugData = null;\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n _getTarget() {\n return this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getAvailableElementCount(srcByteOffset) {\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;\n return this.getElementCount() - sourceElementOffset;\n }\n\n // Automatically infers type from typed array passed to setData\n // Note: No longer that useful, since type is now autodeduced from the compiled shaders\n _inferType(data) {\n if (!this.accessor.type) {\n this.setAccessor(new Accessor(this.accessor, {type: getGLTypeFromTypedArray(data)}));\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createBuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteBuffer(this.handle);\n this._trackDeallocatedMemory();\n }\n\n _getParameter(pname) {\n this.gl.bindBuffer(this.target, this.handle);\n const value = this.gl.getBufferParameter(this.target, pname);\n this.gl.bindBuffer(this.target, null);\n return value;\n }\n\n // DEPRECATIONS - v7.0\n get type() {\n log.deprecated('Buffer.type', 'Buffer.accessor.type')();\n return this.accessor.type;\n }\n\n get bytes() {\n log.deprecated('Buffer.bytes', 'Buffer.byteLength')();\n return this.byteLength;\n }\n\n // DEPRECATIONS - v6.0\n // Deprecated in v6.x, but not warnings not properly implemented\n setByteLength(byteLength) {\n log.deprecated('setByteLength', 'reallocate')();\n return this.reallocate(byteLength);\n }\n\n // Deprecated in v6.x, but not warnings not properly implemented\n updateAccessor(opts) {\n log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();\n this.accessor = new Accessor(this.accessor, opts);\n return this;\n }\n}\n","import {assertWebGL2Context, withParameters} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\n// Should collapse during minification\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\n\nconst GL_COLOR = 0x1800;\nconst GL_DEPTH = 0x1801;\nconst GL_STENCIL = 0x1802;\nconst GL_DEPTH_STENCIL = 0x84f9;\n\n// Should disappear if asserts are removed\nconst ERR_ARGUMENTS = 'clear: bad arguments';\n\n// Optionally clears depth, color and stencil buffers\n/** @type {import('./clear').clear} */\nexport function clear(gl, {framebuffer = null, color = null, depth = null, stencil = null} = {}) {\n const parameters = {};\n\n if (framebuffer) {\n parameters.framebuffer = framebuffer;\n }\n\n let clearFlags = 0;\n\n if (color) {\n clearFlags |= GL_COLOR_BUFFER_BIT;\n if (color !== true) {\n parameters.clearColor = color;\n }\n }\n\n if (depth) {\n clearFlags |= GL_DEPTH_BUFFER_BIT;\n if (depth !== true) {\n parameters.clearDepth = depth;\n }\n }\n\n if (stencil) {\n clearFlags |= GL_STENCIL_BUFFER_BIT;\n if (depth !== true) {\n parameters.clearStencil = depth;\n }\n }\n\n assert(clearFlags !== 0, ERR_ARGUMENTS);\n\n // Temporarily set any clear \"colors\" and call clear\n withParameters(gl, parameters, () => {\n gl.clear(clearFlags);\n });\n}\n\n// WebGL2 - clear a specific drawing buffer\n/** @type {import('./clear').clearBuffer} */\nexport function clearBuffer(\n gl,\n {framebuffer = null, buffer = GL_COLOR, drawBuffer = 0, value = [0, 0, 0, 0]} = {}\n) {\n assertWebGL2Context(gl);\n\n withParameters(gl, {framebuffer}, () => {\n // Method selection per OpenGL ES 3 docs\n switch (buffer) {\n case GL_COLOR:\n switch (value.constructor) {\n case Int32Array:\n gl.clearBufferiv(buffer, drawBuffer, value);\n break;\n case Uint32Array:\n gl.clearBufferuiv(buffer, drawBuffer, value);\n break;\n case Float32Array:\n default:\n gl.clearBufferfv(buffer, drawBuffer, value);\n }\n break;\n\n case GL_DEPTH:\n gl.clearBufferfv(GL_DEPTH, 0, [value]);\n break;\n\n case GL_STENCIL:\n gl.clearBufferiv(GL_STENCIL, 0, [value]);\n break;\n\n case GL_DEPTH_STENCIL:\n const [depth, stencil] = value;\n gl.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n break;\n\n default:\n assert(false, ERR_ARGUMENTS);\n }\n });\n}\n","import GL from '@luma.gl/constants';\nimport {assert} from '../utils/assert';\n\n// Returns number of components in a specific readPixels WebGL format\nexport function glFormatToComponents(format) {\n switch (format) {\n case GL.ALPHA:\n case GL.R32F:\n case GL.RED:\n return 1;\n case GL.RG32F:\n case GL.RG:\n return 2;\n case GL.RGB:\n case GL.RGB32F:\n return 3;\n case GL.RGBA:\n case GL.RGBA32F:\n return 4;\n // TODO: Add support for additional WebGL2 formats\n default:\n assert(false);\n return 0;\n }\n}\n\n// Return byte count for given readPixels WebGL type\nexport function glTypeToBytes(type) {\n switch (type) {\n case GL.UNSIGNED_BYTE:\n return 1;\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return 2;\n case GL.FLOAT:\n return 4;\n // TODO: Add support for additional WebGL2 types\n default:\n assert(false);\n return 0;\n }\n}\n","import GL from '@luma.gl/constants';\nimport Buffer from './buffer';\nimport Framebuffer from './framebuffer';\nimport Texture from './texture';\nimport {assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\nimport {flipRows, scalePixels} from '../webgl-utils/typed-array-utils';\nimport {getTypedArrayFromGLType, getGLTypeFromTypedArray} from '../webgl-utils/typed-array-utils';\nimport {glFormatToComponents, glTypeToBytes} from '../webgl-utils/format-utils';\nimport {toFramebuffer} from '../webgl-utils/texture-utils';\nimport {assert} from '../utils/assert';\n\n// NOTE: Slow requires roundtrip to GPU\n// Copies data from a Framebuffer or a Texture object into ArrayBuffer object.\n// App can provide targetPixelArray or have it auto allocated by this method\n// @returns {Uint8Array|Uint16Array|FloatArray} - pixel array,\n// newly allocated by this method unless provided by app.\nexport function readPixelsToArray(source, options = {}) {\n const {sourceX = 0, sourceY = 0, sourceFormat = GL.RGBA} = options;\n let {\n sourceAttachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer\n target = null,\n // following parameters are auto deduced if not provided\n sourceWidth,\n sourceHeight,\n sourceType\n } = options;\n\n const {framebuffer, deleteFramebuffer} = getFramebuffer(source);\n assert(framebuffer);\n const {gl, handle, attachments} = framebuffer;\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n\n // TODO - Set and unset gl.readBuffer\n if (sourceAttachment === GL.COLOR_ATTACHMENT0 && handle === null) {\n sourceAttachment = GL.FRONT;\n }\n\n assert(attachments[sourceAttachment]);\n\n // Deduce the type from color attachment if not provided.\n sourceType = sourceType || attachments[sourceAttachment].type;\n\n // Deduce type and allocated pixelArray if needed\n target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight);\n\n // Pixel array available, if necessary, deduce type from it.\n sourceType = sourceType || getGLTypeFromTypedArray(target);\n\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n return target;\n}\n\n// NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.\n// Copies data from a Framebuffer or a Texture object into a Buffer object.\nexport function readPixelsToBuffer(\n source,\n {\n sourceX = 0,\n sourceY = 0,\n sourceFormat = GL.RGBA,\n target = null, // A new Buffer object is created when not provided.\n targetByteOffset = 0, // byte offset in buffer object\n // following parameters are auto deduced if not provided\n sourceWidth,\n sourceHeight,\n sourceType\n }\n) {\n const {framebuffer, deleteFramebuffer} = getFramebuffer(source);\n assert(framebuffer);\n sourceWidth = sourceWidth || framebuffer.width;\n sourceHeight = sourceHeight || framebuffer.height;\n\n // Asynchronus read (PIXEL_PACK_BUFFER) is WebGL2 only feature\n const gl2 = assertWebGL2Context(framebuffer.gl);\n\n // deduce type if not available.\n sourceType = sourceType || (target ? target.type : GL.UNSIGNED_BYTE);\n\n if (!target) {\n // Create new buffer with enough size\n const components = glFormatToComponents(sourceFormat);\n const byteCount = glTypeToBytes(sourceType);\n const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;\n target = new Buffer(gl2, {byteLength, accessor: {type: sourceType, size: components}});\n }\n\n target.bind({target: GL.PIXEL_PACK_BUFFER});\n withParameters(gl2, {framebuffer}, () => {\n gl2.readPixels(\n sourceX,\n sourceY,\n sourceWidth,\n sourceHeight,\n sourceFormat,\n sourceType,\n targetByteOffset\n );\n });\n target.unbind({target: GL.PIXEL_PACK_BUFFER});\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n\n return target;\n}\n\n// Reads pixels from a Framebuffer or Texture object to a dataUrl\nexport function copyToDataUrl(\n source,\n {\n sourceAttachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer\n targetMaxHeight = Number.MAX_SAFE_INTEGER\n } = {}\n) {\n let data = readPixelsToArray(source, {sourceAttachment});\n\n // Scale down\n let {width, height} = source;\n while (height > targetMaxHeight) {\n ({data, width, height} = scalePixels({data, width, height}));\n }\n\n // Flip to top down coordinate system\n flipRows({data, width, height});\n\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n\n // Copy the pixels to a 2D canvas\n const imageData = context.createImageData(width, height);\n imageData.data.set(data);\n context.putImageData(imageData, 0, 0);\n\n return canvas.toDataURL();\n}\n\n// Reads pixels from a Framebuffer or Texture object into an HTML Image\nexport function copyToImage(\n source,\n {\n sourceAttachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer\n targetImage = null\n } = {}\n) {\n const dataUrl = copyToDataUrl(source, {sourceAttachment});\n targetImage = targetImage || new Image();\n targetImage.src = dataUrl;\n return targetImage;\n}\n\n// Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)\n// eslint-disable-next-line complexity, max-statements\nexport function copyToTexture(source, target, options = {}) {\n const {\n sourceX = 0,\n sourceY = 0,\n // attachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer\n targetMipmaplevel = 0,\n targetInternalFormat = GL.RGBA\n } = options;\n let {\n targetX,\n targetY,\n targetZ,\n width, // defaults to target width\n height // defaults to target height\n } = options;\n\n const {framebuffer, deleteFramebuffer} = getFramebuffer(source);\n assert(framebuffer);\n const {gl, handle} = framebuffer;\n const isSubCopy =\n typeof targetX !== 'undefined' ||\n typeof targetY !== 'undefined' ||\n typeof targetZ !== 'undefined';\n targetX = targetX || 0;\n targetY = targetY || 0;\n targetZ = targetZ || 0;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n // TODO - support gl.readBuffer (WebGL2 only)\n // const prevBuffer = gl.readBuffer(attachment);\n assert(target);\n let texture = null;\n if (target instanceof Texture) {\n texture = target;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n target = texture.target;\n }\n\n if (!isSubCopy) {\n gl.copyTexImage2D(\n target,\n targetMipmaplevel,\n targetInternalFormat,\n sourceX,\n sourceY,\n width,\n height,\n 0 /* border must be 0 */\n );\n } else {\n switch (target) {\n case GL.TEXTURE_2D:\n case GL.TEXTURE_CUBE_MAP:\n gl.copyTexSubImage2D(\n target,\n targetMipmaplevel,\n targetX,\n targetY,\n sourceX,\n sourceY,\n width,\n height\n );\n break;\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n const gl2 = assertWebGL2Context(gl);\n gl2.copyTexSubImage3D(\n target,\n targetMipmaplevel,\n targetX,\n targetY,\n targetZ,\n sourceX,\n sourceY,\n width,\n height\n );\n break;\n default:\n }\n }\n if (texture) {\n texture.unbind();\n }\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (deleteFramebuffer) {\n framebuffer.delete();\n }\n return texture;\n}\n\n// NOTE: WEBLG2 only\n// Copies a rectangle of pixels between Framebuffer or Texture objects\n// eslint-disable-next-line max-statements, complexity\nexport function blit(source, target, options = {}) {\n const {\n sourceX0 = 0,\n sourceY0 = 0,\n targetX0 = 0,\n targetY0 = 0,\n color = true,\n depth = false,\n stencil = false,\n filter = GL.NEAREST\n } = options;\n\n let {\n sourceX1,\n sourceY1,\n targetX1,\n targetY1,\n sourceAttachment = GL.COLOR_ATTACHMENT0,\n mask = 0\n } = options;\n\n const {framebuffer: srcFramebuffer, deleteFramebuffer: deleteSrcFramebuffer} = getFramebuffer(\n source\n );\n const {framebuffer: dstFramebuffer, deleteFramebuffer: deleteDstFramebuffer} = getFramebuffer(\n target\n );\n\n assert(srcFramebuffer);\n assert(dstFramebuffer);\n // @ts-ignore\n const {gl, handle, width, height, readBuffer} = dstFramebuffer;\n const gl2 = assertWebGL2Context(gl);\n\n if (!srcFramebuffer.handle && sourceAttachment === GL.COLOR_ATTACHMENT0) {\n sourceAttachment = GL.FRONT;\n }\n\n if (color) {\n mask |= GL.COLOR_BUFFER_BIT;\n }\n if (depth) {\n mask |= GL.DEPTH_BUFFER_BIT;\n }\n if (stencil) {\n mask |= GL.STENCIL_BUFFER_BIT;\n }\n\n if (deleteSrcFramebuffer || deleteDstFramebuffer) {\n // Either source or destiantion was a texture object, which is wrapped in a Framebuffer objecgt as color attachment.\n // Overwrite the mask to `COLOR_BUFFER_BIT`\n if (mask & (GL.DEPTH_BUFFER_BIT | GL.STENCIL_BUFFER_BIT)) {\n mask = GL.COLOR_BUFFER_BIT;\n log.warn('Blitting from or into a Texture object, forcing mask to GL.COLOR_BUFFER_BIT')();\n }\n }\n assert(mask);\n\n sourceX1 = sourceX1 === undefined ? srcFramebuffer.width : sourceX1;\n sourceY1 = sourceY1 === undefined ? srcFramebuffer.height : sourceY1;\n targetX1 = targetX1 === undefined ? width : targetX1;\n targetY1 = targetY1 === undefined ? height : targetY1;\n\n const prevDrawHandle = gl.bindFramebuffer(GL.DRAW_FRAMEBUFFER, handle);\n const prevReadHandle = gl.bindFramebuffer(GL.READ_FRAMEBUFFER, srcFramebuffer.handle);\n gl2.readBuffer(sourceAttachment);\n gl2.blitFramebuffer(\n sourceX0,\n sourceY0,\n sourceX1,\n sourceY1,\n targetX0,\n targetY0,\n targetX1,\n targetY1,\n mask,\n filter\n );\n gl2.readBuffer(readBuffer);\n // @ts-ignore\n gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, prevReadHandle || null);\n // @ts-ignore\n gl2.bindFramebuffer(GL.DRAW_FRAMEBUFFER, prevDrawHandle || null);\n if (deleteSrcFramebuffer) {\n srcFramebuffer.delete();\n }\n if (deleteDstFramebuffer) {\n dstFramebuffer.delete();\n }\n\n return dstFramebuffer;\n}\n\n// Helper methods\n\nfunction getFramebuffer(source) {\n if (!(source instanceof Framebuffer)) {\n return {framebuffer: toFramebuffer(source), deleteFramebuffer: true};\n }\n return {framebuffer: source, deleteFramebuffer: false};\n}\n\nfunction getPixelArray(pixelArray, type, format, width, height) {\n if (pixelArray) {\n return pixelArray;\n }\n // Allocate pixel array if not already available, using supplied type\n type = type || GL.UNSIGNED_BYTE;\n const ArrayType = getTypedArrayFromGLType(type, {clamped: false});\n const components = glFormatToComponents(format);\n // TODO - check for composite type (components = 1).\n return new ArrayType(width * height * components);\n}\n","import GL from '@luma.gl/constants';\nimport {getWebGL2Context, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Texture2D from './texture-2d';\nimport Renderbuffer from './renderbuffer';\nimport {clear, clearBuffer} from './clear';\nimport {copyToDataUrl} from './copy-and-blit.js';\n\nimport {getFeatures} from '../features';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {assert} from '../utils/assert';\n\nconst ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';\n\nexport default class Framebuffer extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Framebuffer';\n }\n static isSupported(gl, options = {}) {\n const {\n colorBufferFloat, // Whether floating point textures can be rendered and read\n colorBufferHalfFloat // Whether half float textures can be rendered and read\n } = options;\n let supported = true;\n\n if (colorBufferFloat) {\n supported = Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1, not exposed on all platforms\n gl.getExtension('WEBGL_color_buffer_float') ||\n // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n gl.getExtension('OES_texture_float')\n );\n }\n\n if (colorBufferHalfFloat) {\n supported =\n supported &&\n Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('EXT_color_buffer_half_float')\n );\n }\n\n return supported;\n }\n\n // Create a Framebuffer wrapper for the default framebuffer (target === null)\n static getDefaultFramebuffer(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultFramebuffer =\n gl.luma.defaultFramebuffer ||\n new Framebuffer(gl, {\n id: 'default-framebuffer',\n handle: null,\n attachments: {}\n });\n // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?\n return gl.luma.defaultFramebuffer;\n }\n\n get MAX_COLOR_ATTACHMENTS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n }\n\n get MAX_DRAW_BUFFERS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n }\n\n constructor(gl, opts = {}) {\n super(gl, opts);\n\n // Public members\n this.width = null;\n this.height = null;\n this.attachments = {};\n this.readBuffer = GL.COLOR_ATTACHMENT0;\n this.drawBuffers = [GL.COLOR_ATTACHMENT0];\n this.ownResources = [];\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n get color() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get texture() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get depth() {\n return (\n this.attachments[GL.DEPTH_ATTACHMENT] || this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] || null\n );\n }\n\n get stencil() {\n return (\n this.attachments[GL.STENCIL_ATTACHMENT] ||\n this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] ||\n null\n );\n }\n\n initialize({\n width = 1,\n height = 1,\n attachments = null,\n color = true,\n depth = true,\n stencil = false,\n check = true,\n readBuffer = undefined,\n drawBuffers = undefined\n }) {\n assert(width >= 0 && height >= 0, 'Width and height need to be integers');\n\n // Store actual width and height for diffing\n this.width = width;\n this.height = height;\n\n // Resize any provided attachments - note that resize only resizes if needed\n // Note: A framebuffer has no separate size, it is defined by its attachments (which must agree)\n if (attachments) {\n for (const attachment in attachments) {\n const target = attachments[attachment];\n const object = Array.isArray(target) ? target[0] : target;\n object.resize({width, height});\n }\n } else {\n // Create any requested default attachments\n attachments = this._createDefaultAttachments(color, depth, stencil, width, height);\n }\n\n this.update({clearAttachments: true, attachments, readBuffer, drawBuffers});\n\n // Checks that framebuffer was properly set up, if not, throws an explanatory error\n if (attachments && check) {\n this.checkStatus();\n }\n }\n\n delete() {\n for (const resource of this.ownResources) {\n resource.delete();\n }\n super.delete();\n return this;\n }\n\n update({\n attachments = {},\n readBuffer,\n drawBuffers,\n clearAttachments = false,\n resizeAttachments = true\n }) {\n this.attach(attachments, {clearAttachments, resizeAttachments});\n\n const {gl} = this;\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n }\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // Attachment resize is expected to be a noop if size is same\n resize(options = {}) {\n let {width, height} = options;\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n for (const attachmentPoint in this.attachments) {\n this.attachments[attachmentPoint].resize({width, height});\n }\n this.width = width;\n this.height = height;\n return this;\n }\n\n // Attach from a map of attachments\n attach(attachments, {clearAttachments = false, resizeAttachments = true} = {}) {\n const newAttachments = {};\n\n // Any current attachments need to be removed, add null values to map\n if (clearAttachments) {\n Object.keys(this.attachments).forEach(key => {\n newAttachments[key] = null;\n });\n }\n\n // Overlay the new attachments\n Object.assign(newAttachments, attachments);\n\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in newAttachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n\n const attachment = Number(key);\n\n const descriptor = newAttachments[attachment];\n let object = descriptor;\n if (!object) {\n this._unattach(attachment);\n } else if (object instanceof Renderbuffer) {\n this._attachRenderbuffer({attachment, renderbuffer: object});\n } else if (Array.isArray(descriptor)) {\n const [texture, layer = 0, level = 0] = descriptor;\n object = texture;\n this._attachTexture({attachment, texture, layer, level});\n } else {\n this._attachTexture({attachment, texture: object, layer: 0, level: 0});\n }\n\n // Resize objects\n if (resizeAttachments && object) {\n object.resize({width: this.width, height: this.height});\n }\n }\n\n // @ts-ignore\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // Assign to attachments and remove any nulls to get a clean attachment map\n Object.assign(this.attachments, attachments);\n Object.keys(this.attachments)\n .filter(key => !this.attachments[key])\n .forEach(key => {\n delete this.attachments[key];\n });\n }\n\n checkStatus() {\n const {gl} = this;\n const status = this.getStatus();\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(_getFrameBufferStatus(status));\n }\n return this;\n }\n\n getStatus() {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n return status;\n }\n\n clear(options = {}) {\n const {color, depth, stencil, drawBuffers = []} = options;\n\n // Bind framebuffer and delegate to global clear functions\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n if (color || depth || stencil) {\n clear(this.gl, {color, depth, stencil});\n }\n\n drawBuffers.forEach((value, drawBuffer) => {\n clearBuffer(this.gl, {drawBuffer, value});\n });\n\n // @ts-ignore\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // NOTE: Slow requires roundtrip to GPU\n // App can provide pixelArray or have it auto allocated by this method\n // @returns {Uint8Array|Uint16Array|FloatArray} - pixel array,\n // newly allocated by this method unless provided by app.\n readPixels(opts = {}) {\n log.error(\n 'Framebuffer.readPixels() is no logner supported, use readPixelsToArray(framebuffer)'\n )();\n return null;\n }\n\n // Reads data into provided buffer object asynchronously\n // This function doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.\n readPixelsToBuffer(opts = {}) {\n log.error(\n 'Framebuffer.readPixelsToBuffer()is no logner supported, use readPixelsToBuffer(framebuffer)'\n )();\n return null;\n }\n\n // Reads pixels as a dataUrl\n copyToDataUrl(opts = {}) {\n log.error(\n 'Framebuffer.copyToDataUrl() is no logner supported, use copyToDataUrl(framebuffer)'\n )();\n return null;\n }\n\n // Reads pixels into an HTML Image\n copyToImage(opts = {}) {\n log.error('Framebuffer.copyToImage() is no logner supported, use copyToImage(framebuffer)')();\n return null;\n }\n\n // copyToFramebuffer({width, height}) {\n // const scaleX = width / this.width;\n // const scaleY = height / this.height;\n // const scale = Math.min(scaleX, scaleY);\n // width = width * scale;\n // height = height * scale;\n // const scaledFramebuffer = new Framebuffer(this.gl, {width, height});\n // this.blit();\n // }\n\n // Copy a rectangle from a framebuffer attachment into a texture (at an offset)\n // NOTE: assumes texture has enough storage allocated\n // eslint-disable-next-line complexity\n copyToTexture(opts = {}) {\n log.error(\n 'Framebuffer.copyToTexture({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n // WEBGL2 INTERFACE\n\n // Copies a rectangle of pixels between framebuffers\n // eslint-disable-next-line complexity\n blit(opts = {}) {\n log.error('Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)')();\n return null;\n }\n\n // signals to the GL that it need not preserve all pixels of a specified region of the framebuffer\n invalidate({attachments = [], x = 0, y = 0, width, height}) {\n const gl2 = assertWebGL2Context(this.gl);\n const prevHandle = gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, this.handle);\n const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;\n if (invalidateAll) {\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments);\n } else {\n // TODO - why does type checking fail on this line\n // @ts-ignore\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments, x, y, width, height);\n }\n // @ts-ignore\n gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, prevHandle);\n return this;\n }\n\n // Return the value for `pname` of the specified attachment.\n // The type returned is the type of the requested pname\n getAttachmentParameter(attachment, pname, keys) {\n let value = this._getAttachmentParameterFallback(pname);\n if (value === null) {\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n value = this.gl.getFramebufferAttachmentParameter(GL.FRAMEBUFFER, attachment, pname);\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n if (keys && value > 1000) {\n // @ts-ignore\n value = getKey(this.gl, value);\n }\n return value;\n }\n\n getAttachmentParameters(\n attachment = GL.COLOR_ATTACHMENT0,\n keys,\n // @ts-ignore\n parameters = this.constructor.ATTACHMENT_PARAMETERS || []\n ) {\n const values = {};\n for (const pname of parameters) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getAttachmentParameter(attachment, pname, keys);\n }\n return values;\n }\n\n getParameters(keys = true) {\n const attachments = Object.keys(this.attachments);\n // if (this === this.gl.luma.defaultFramebuffer) {\n // attachments = [GL.COLOR_ATTACHMENT0, GL.DEPTH_STENCIL_ATTACHMENT];\n // }\n const parameters = {};\n for (const attachmentName of attachments) {\n const attachment = Number(attachmentName);\n const key = keys ? getKey(this.gl, attachment) : attachment;\n parameters[key] = this.getAttachmentParameters(attachment, keys);\n }\n return parameters;\n }\n\n // DEBUG\n\n // Note: Will only work when called in an event handler\n show() {\n if (typeof window !== 'undefined') {\n window.open(copyToDataUrl(this), 'luma-debug-texture');\n }\n return this;\n }\n\n log(logLevel = 0, message = '') {\n if (logLevel > log.level || typeof window === 'undefined') {\n return this;\n }\n message = message || `Framebuffer ${this.id}`;\n const image = copyToDataUrl(this, {targetMaxHeight: 100});\n // @ts-expect-error\n log.image({logLevel, message, image}, message)();\n return this;\n }\n\n // WEBGL INTERFACE\n bind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, this.handle);\n return this;\n }\n\n unbind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _createDefaultAttachments(color, depth, stencil, width, height) {\n let defaultAttachments = null;\n\n // Add a color buffer if requested and not supplied\n if (color) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.COLOR_ATTACHMENT0] = new Texture2D(this.gl, {\n id: `${this.id}-color0`,\n pixels: null, // reserves texture memory, but texels are undefined\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n parameters: {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n }\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.COLOR_ATTACHMENT0]);\n }\n\n if (depth && stencil) {\n // TODO - handle separate stencil\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth-stencil`,\n format: GL.DEPTH24_STENCIL8,\n width,\n height: 111\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT]);\n // TODO - optional texture\n // new Texture2D(this.gl, {\n // id: `${this.id}-depth-stencil`,\n // format: GL.DEPTH24_STENCIL8,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n // width,\n // height,\n // mipmaps: false\n // });\n } else if (depth) {\n // Add a depth buffer if requested and not supplied\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth`,\n format: GL.DEPTH_COMPONENT16,\n width,\n height\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_ATTACHMENT]);\n } else if (stencil) {\n // TODO - handle separate stencil\n assert(false);\n }\n\n return defaultAttachments;\n }\n\n _unattach(attachment) {\n const oldAttachment = this.attachments[attachment];\n if (!oldAttachment) {\n return;\n }\n if (oldAttachment instanceof Renderbuffer) {\n // render buffer\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, null);\n } else {\n // Must be a texture attachment\n this.gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, null, 0);\n }\n delete this.attachments[attachment];\n }\n\n _attachRenderbuffer({attachment = GL.COLOR_ATTACHMENT0, renderbuffer}) {\n const {gl} = this;\n // TODO - is the bind needed?\n // gl.bindRenderbuffer(GL.RENDERBUFFER, renderbuffer.handle);\n gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);\n // TODO - is the unbind needed?\n // gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n\n this.attachments[attachment] = renderbuffer;\n }\n\n // layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`\n // level = 0 - mipmapLevel (must be 0 in WebGL1)\n _attachTexture({attachment = GL.COLOR_ATTACHMENT0, texture, layer, level}) {\n const {gl} = this;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n const gl2 = assertWebGL2Context(gl);\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n this.attachments[attachment] = texture;\n }\n\n // Expects framebuffer to be bound\n _setReadBuffer(readBuffer) {\n const gl2 = getWebGL2Context(this.gl);\n if (gl2) {\n gl2.readBuffer(readBuffer);\n } else {\n // Setting to color attachment 0 is a noop, so allow it in WebGL1\n assert(\n readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n this.readBuffer = readBuffer;\n }\n\n // Expects framebuffer to be bound\n _setDrawBuffers(drawBuffers) {\n const {gl} = this;\n const gl2 = assertWebGL2Context(gl);\n if (gl2) {\n gl2.drawBuffers(drawBuffers);\n } else {\n // TODO - is this not handled by polyfills?\n const ext = gl.getExtension('WEBGL_draw_buffers');\n if (ext) {\n ext.drawBuffersWEBGL(drawBuffers);\n } else {\n // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1\n assert(\n drawBuffers.length === 1 &&\n (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n this.drawBuffers = drawBuffers;\n }\n\n // Attempt to provide workable defaults for WebGL2 symbols under WebGL1\n // null means OK to query\n // TODO - move to webgl1 polyfills\n /* eslint-disable complexity */\n _getAttachmentParameterFallback(pname) {\n const caps = getFeatures(this.gl);\n\n switch (pname) {\n case GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: // GLint\n return !caps.WEBGL2 ? 0 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: // GLint\n return !caps.WEBGL2 ? 8 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: // GLenum\n return !caps.WEBGL2 ? GL.UNSIGNED_INT : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:\n return !caps.WEBGL2 && !caps.EXT_sRGB ? GL.LINEAR : null;\n default:\n return null;\n }\n }\n /* eslint-enable complexity */\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createFramebuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteFramebuffer(this.handle);\n }\n\n _bindHandle(handle) {\n return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n }\n}\n\n// PUBLIC METHODS\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n // Use error mapping if installed\n // @ts-ignore\n const STATUS = Framebuffer.STATUS || {};\n return STATUS[status] || `Framebuffer error ${status}`;\n}\n\nexport const FRAMEBUFFER_ATTACHMENT_PARAMETERS = [\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint\n // EXT_sRGB or WebGL2\n GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG\n // WebGL2\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint\n // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\n // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.\n];\n\nFramebuffer.ATTACHMENT_PARAMETERS = FRAMEBUFFER_ATTACHMENT_PARAMETERS;\n","/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils/assert';\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n} // Returns a Magic Uniform Setter\n\n// PUBLIC API\n\n/** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\n/** @type {types['parseUniformName']} */\nexport function parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n} // To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/** @type {types['checkUniformValues']} */\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n/** @type {types['copyUniform']} */\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n","// Contains metadata describing attribute configurations for a program's shaders\n// Much of this is automatically extracted from shaders after program linking\nimport Accessor from './accessor';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';\n\nexport default class ProgramConfiguration {\n constructor(program) {\n this.id = program.id;\n this.attributeInfos = [];\n this.attributeInfosByName = {};\n\n // Locations may not be contiguous the case of matrix attributes\n // so keep a separate location->attribute map.\n this.attributeInfosByLocation = [];\n this.varyingInfos = [];\n this.varyingInfosByName = {};\n Object.seal(this);\n this._readAttributesFromProgram(program);\n this._readVaryingsFromProgram(program);\n }\n\n getAttributeInfo(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.attributeInfosByLocation[location];\n }\n return this.attributeInfosByName[locationOrName] || null;\n }\n\n // Resolves an attribute name or index to an index\n getAttributeLocation(locationOrName) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.location : -1;\n }\n\n getAttributeAccessor(locationOrName) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.accessor : null;\n }\n\n getVaryingInfo(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.varyingInfos[location];\n }\n return this.varyingInfosByName[locationOrName] || null;\n }\n\n getVaryingIndex(locationOrName) {\n const varying = this.getVaryingInfo();\n return varying ? varying.location : -1;\n }\n\n getVaryingAccessor(locationOrName) {\n const varying = this.getVaryingInfo();\n return varying ? varying.accessor : null;\n }\n\n // PRIVATE METHODS\n\n // linkProgram needs to have been called, although linking does not need to have been successful\n _readAttributesFromProgram(program) {\n const {gl} = program;\n const count = gl.getProgramParameter(program.handle, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const {name, type, size} = gl.getActiveAttrib(program.handle, index);\n const location = gl.getAttribLocation(program.handle, name);\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location >= 0) {\n this._addAttribute(location, name, type, size);\n }\n }\n\n this.attributeInfos.sort((a, b) => a.location - b.location);\n }\n\n // linkProgram needs to have been called, although linking does not need to have been successful\n _readVaryingsFromProgram(program) {\n const {gl} = program;\n if (!isWebGL2(gl)) {\n return;\n }\n\n const count = gl.getProgramParameter(program.handle, gl.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const {name, type, size} = gl.getTransformFeedbackVarying(program.handle, location);\n this._addVarying(location, name, type, size);\n }\n\n this.varyingInfos.sort((a, b) => a.location - b.location);\n }\n\n _addAttribute(location, name, compositeType, size) {\n const {type, components} = decomposeCompositeGLType(compositeType);\n const accessor = {type, size: size * components};\n this._inferProperties(location, name, accessor);\n\n const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values\n this.attributeInfos.push(attributeInfo);\n this.attributeInfosByLocation[location] = attributeInfo; // For quick location based lookup\n this.attributeInfosByName[attributeInfo.name] = attributeInfo; // For quick name based lookup\n }\n\n // Extract additional attribute metadata from shader names (based on attribute naming conventions)\n _inferProperties(location, name, accessor) {\n if (/instance/i.test(name)) {\n // Any attribute containing the word \"instance\" will be assumed to be instanced\n accessor.divisor = 1;\n }\n }\n\n _addVarying(location, name, compositeType, size) {\n const {type, components} = decomposeCompositeGLType(compositeType);\n const accessor = new Accessor({type, size: size * components});\n\n const varying = {location, name, accessor}; // Base values\n this.varyingInfos.push(varying);\n this.varyingInfosByName[varying.name] = varying; // For quick name based lookup\n }\n}\n","import GL from '@luma.gl/constants';\n\nimport Resource from './resource';\nimport Texture from './texture';\nimport Framebuffer from './framebuffer';\nimport {parseUniformName, getUniformSetter} from './uniforms';\nimport {VertexShader, FragmentShader} from './shader';\nimport ProgramConfiguration from './program-configuration';\nimport {copyUniform, checkUniformValues} from './uniforms';\n\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {getPrimitiveDrawMode} from '../webgl-utils/attribute-utils';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\nconst GL_SEPARATE_ATTRIBS = 0x8c8d;\n\nconst V6_DEPRECATED_METHODS = [\n 'setVertexArray',\n 'setAttributes',\n 'setBuffers',\n 'unsetBuffers',\n\n 'use',\n 'getUniformCount',\n 'getUniformInfo',\n 'getUniformLocation',\n 'getUniformValue',\n\n 'getVarying',\n 'getFragDataLocation',\n 'getAttachedShaders',\n 'getAttributeCount',\n 'getAttributeLocation',\n 'getAttributeInfo'\n];\n\nexport default class Program extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Program';\n }\n constructor(gl, props = {}) {\n super(gl, props);\n\n this.stubRemovedMethods('Program', 'v6.0', V6_DEPRECATED_METHODS);\n\n // Experimental flag to avoid deleting Program object while it is cached\n this._isCached = false;\n\n this.initialize(props);\n\n Object.seal(this);\n\n this._setId(props.id);\n }\n\n initialize(props = {}) {\n const {hash, vs, fs, varyings, bufferMode = GL_SEPARATE_ATTRIBS} = props;\n\n this.hash = hash || ''; // Used by ProgramManager\n\n // Create shaders if needed\n this.vs =\n typeof vs === 'string' ? new VertexShader(this.gl, {id: `${props.id}-vs`, source: vs}) : vs;\n this.fs =\n typeof fs === 'string' ? new FragmentShader(this.gl, {id: `${props.id}-fs`, source: fs}) : fs;\n assert(this.vs instanceof VertexShader);\n assert(this.fs instanceof FragmentShader);\n\n // uniforms\n this.uniforms = {};\n\n this._textureUniforms = {};\n\n // Setup varyings if supplied\n if (varyings && varyings.length > 0) {\n assertWebGL2Context(this.gl);\n this.varyings = varyings;\n this.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n this._readUniformLocationsFromLinkedProgram();\n this.configuration = new ProgramConfiguration(this);\n\n return this.setProps(props);\n }\n\n delete(options = {}) {\n if (this._isCached) {\n // This object is cached, do not delete\n return this;\n }\n return super.delete(options);\n }\n\n setProps(props) {\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n return this;\n }\n\n // A good thing about the WebGL API is that there are so many ways to draw things ;)\n // This function unifies those ways into a single call using common parameters with sane defaults\n draw({\n logPriority, // Probe log priority, enables Model to do more integrated logging\n\n drawMode = GL.TRIANGLES,\n vertexCount,\n offset = 0,\n start,\n end,\n isIndexed = false,\n indexType = GL.UNSIGNED_SHORT,\n instanceCount = 0,\n isInstanced = instanceCount > 0,\n\n vertexArray = null,\n transformFeedback,\n framebuffer,\n parameters = {},\n\n // Deprecated\n uniforms,\n samplers\n }) {\n if (uniforms || samplers) {\n // DEPRECATED: v7.0 (deprecated earlier but warning not properly implemented)\n log.deprecated('Program.draw({uniforms})', 'Program.setUniforms(uniforms)')();\n this.setUniforms(uniforms || {});\n }\n\n if (log.priority >= logPriority) {\n const fb = framebuffer ? framebuffer.id : 'default';\n const message =\n `mode=${getKey(this.gl, drawMode)} verts=${vertexCount} ` +\n `instances=${instanceCount} indexType=${getKey(this.gl, indexType)} ` +\n `isInstanced=${isInstanced} isIndexed=${isIndexed} ` +\n `Framebuffer=${fb}`;\n log.log(logPriority, message)();\n }\n\n // TODO - move vertex array binding and transform feedback binding to withParameters?\n assert(vertexArray);\n\n this.gl.useProgram(this.handle);\n\n if (\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n !this._areTexturesRenderable() ||\n // Avoid WebGL draw call when not rendering any data\n vertexCount === 0 ||\n (isInstanced && instanceCount === 0)\n ) {\n return false;\n }\n\n vertexArray.bindForDraw(vertexCount, instanceCount, () => {\n if (framebuffer !== undefined) {\n parameters = Object.assign({}, parameters, {framebuffer});\n }\n\n if (transformFeedback) {\n const primitiveMode = getPrimitiveDrawMode(drawMode);\n transformFeedback.begin(primitiveMode);\n }\n\n this._bindTextures();\n\n withParameters(this.gl, parameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n this.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);\n } else if (isIndexed && isWebGL2(this.gl) && !isNaN(start) && !isNaN(end)) {\n this.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.gl.drawElements(drawMode, vertexCount, indexType, offset);\n } else if (isInstanced) {\n this.gl2.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);\n } else {\n this.gl.drawArrays(drawMode, offset, vertexCount);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n\n return true;\n }\n\n setUniforms(uniforms = {}) {\n if (log.priority >= 2) {\n checkUniformValues(uniforms, this.id, this._uniformSetters);\n }\n\n this.gl.useProgram(this.handle);\n\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n const uniformSetter = this._uniformSetters[uniformName];\n\n if (uniformSetter) {\n let value = uniform;\n let textureUpdate = false;\n\n if (value instanceof Framebuffer) {\n value = value.texture;\n }\n if (value instanceof Texture) {\n textureUpdate = this.uniforms[uniformName] !== uniform;\n\n if (textureUpdate) {\n // eslint-disable-next-line max-depth\n if (uniformSetter.textureIndex === undefined) {\n uniformSetter.textureIndex = this._textureIndexCounter++;\n }\n\n // Bind texture to index\n const texture = value;\n const {textureIndex} = uniformSetter;\n\n texture.bind(textureIndex);\n value = textureIndex;\n\n this._textureUniforms[uniformName] = texture;\n } else {\n value = uniformSetter.textureIndex;\n }\n } else if (this._textureUniforms[uniformName]) {\n delete this._textureUniforms[uniformName];\n }\n\n // NOTE(Tarek): uniformSetter returns whether\n // value had to be updated or not.\n if (uniformSetter(value) || textureUpdate) {\n copyUniform(this.uniforms, uniformName, uniform);\n }\n }\n }\n\n return this;\n }\n\n // PRIVATE METHODS\n\n // Checks if all texture-values uniforms are renderable (i.e. loaded)\n // Update a texture if needed (e.g. from video)\n // Note: This is currently done before every draw call\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const uniformName in this._textureUniforms) {\n const texture = this._textureUniforms[uniformName];\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n return texturesRenderable;\n }\n\n // Binds textures\n // Note: This is currently done before every draw call\n _bindTextures() {\n for (const uniformName in this._textureUniforms) {\n const textureIndex = this._uniformSetters[uniformName].textureIndex;\n this._textureUniforms[uniformName].bind(textureIndex);\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createProgram();\n }\n\n _deleteHandle() {\n this.gl.deleteProgram(this.handle);\n }\n\n // Extract opts needed to initialize a `Program` from an independently created WebGLProgram handle\n _getOptionsFromHandle(handle) {\n const shaderHandles = this.gl.getAttachedShaders(handle);\n const opts = {};\n for (const shaderHandle of shaderHandles) {\n const type = this.gl.getShaderParameter(this.handle, GL.SHADER_TYPE);\n switch (type) {\n case GL.VERTEX_SHADER:\n // @ts-ignore\n opts.vs = new VertexShader({handle: shaderHandle});\n break;\n case GL.FRAGMENT_SHADER:\n // @ts-ignore\n opts.fs = new FragmentShader({handle: shaderHandle});\n break;\n default:\n }\n }\n return opts;\n }\n\n _getParameter(pname) {\n return this.gl.getProgramParameter(this.handle, pname);\n }\n\n // If program is not named, name it after shader names\n // TODO - this.id will already have been initialized\n _setId(id) {\n if (!id) {\n const programName = this._getName();\n this.id = uid(programName);\n }\n }\n\n // Generate a default name for the program based on names of the shaders\n _getName() {\n let programName = this.vs.getName() || this.fs.getName();\n programName = programName.replace(/shader/i, '');\n programName = programName ? `${programName}-program` : 'program';\n return programName;\n }\n\n _compileAndLink() {\n const {gl} = this;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this._getName()}`)();\n\n // Avoid checking program linking error in production\n // @ts-ignore\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // query uniform locations and build name to setter map.\n // TODO - This overlaps with ProgramConfiguration?\n _readUniformLocationsFromLinkedProgram() {\n const {gl} = this;\n this._uniformSetters = {};\n this._uniformCount = this._getParameter(GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < this._uniformCount; i++) {\n const info = this.gl.getActiveUniform(this.handle, i);\n const {name} = parseUniformName(info.name);\n let location = gl.getUniformLocation(this.handle, name);\n this._uniformSetters[name] = getUniformSetter(gl, location, info);\n if (info.size > 1) {\n for (let l = 0; l < info.size; l++) {\n location = gl.getUniformLocation(this.handle, `${name}[${l}]`);\n this._uniformSetters[`${name}[${l}]`] = getUniformSetter(gl, location, info);\n }\n }\n }\n this._textureIndexCounter = 0;\n }\n\n // TO BE REMOVED in v7?\n\n // Rretrieves information about active uniforms identifed by their indices (`uniformIndices`)\n // https://\n // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniforms\n getActiveUniforms(uniformIndices, pname) {\n return this.gl2.getActiveUniforms(this.handle, uniformIndices, pname);\n }\n\n // Retrieves the index of a uniform block\n getUniformBlockIndex(blockName) {\n return this.gl2.getUniformBlockIndex(this.handle, blockName);\n }\n\n // Retrieves information about an active uniform block (`blockIndex`)\n // https://\n // developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getActiveUniformBlockParameter\n getActiveUniformBlockParameter(blockIndex, pname) {\n return this.gl2.getActiveUniformBlockParameter(this.handle, blockIndex, pname);\n }\n\n // Binds a uniform block (`blockIndex`) to a specific binding point (`blockBinding`)\n uniformBlockBinding(blockIndex, blockBinding) {\n this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n }\n}\n","import GL from '@luma.gl/constants';\n\n// Define local extension strings to optimize minification\n// const SRGB = 'EXT_sRGB';\n// const EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_WEBGL2 = 'EXT_color_buffer_float';\n// const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';\n\n// NOTE(Tarek): bpp === \"bytes per pixel\", used for\n// memory usage calculations.\nexport default {\n [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.\n [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},\n [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},\n\n [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.\n\n [GL.DEPTH_STENCIL]: {bpp: 4},\n [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},\n [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},\n\n // When using a WebGL 1 context, color renderbuffer formats are limited\n [GL.RGBA4]: {bpp: 2},\n [GL.RGB565]: {bpp: 2},\n [GL.RGB5_A1]: {bpp: 2},\n\n // When using a WebGL 2 context, the following values are available additionally:\n [GL.R8]: {gl2: true, bpp: 1},\n [GL.R8UI]: {gl2: true, bpp: 1},\n [GL.R8I]: {gl2: true, bpp: 1},\n [GL.R16UI]: {gl2: true, bpp: 2},\n [GL.R16I]: {gl2: true, bpp: 2},\n [GL.R32UI]: {gl2: true, bpp: 4},\n [GL.R32I]: {gl2: true, bpp: 4},\n [GL.RG8]: {gl2: true, bpp: 2},\n [GL.RG8UI]: {gl2: true, bpp: 2},\n [GL.RG8I]: {gl2: true, bpp: 2},\n [GL.RG16UI]: {gl2: true, bpp: 4},\n [GL.RG16I]: {gl2: true, bpp: 4},\n [GL.RG32UI]: {gl2: true, bpp: 8},\n [GL.RG32I]: {gl2: true, bpp: 8},\n [GL.RGB8]: {gl2: true, bpp: 3},\n [GL.RGBA8]: {gl2: true, bpp: 4},\n // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension\n [GL.RGB10_A2]: {gl2: true, bpp: 4},\n [GL.RGBA8UI]: {gl2: true, bpp: 4},\n [GL.RGBA8I]: {gl2: true, bpp: 4},\n [GL.RGB10_A2UI]: {gl2: true, bpp: 4},\n [GL.RGBA16UI]: {gl2: true, bpp: 8},\n [GL.RGBA16I]: {gl2: true, bpp: 8},\n [GL.RGBA32I]: {gl2: true, bpp: 16},\n [GL.RGBA32UI]: {gl2: true, bpp: 16},\n\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n [GL.R16F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 2},\n [GL.RG16F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RGBA16F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 8},\n [GL.R32F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RG32F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 8},\n // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers\n [GL.RGBA32F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 16},\n // [GL.RGBA32F]: {gl2: EXT_FLOAT_WEBGL2, gl1: EXT_FLOAT_WEBGL1},\n [GL.R11F_G11F_B10F]: {gl2: EXT_FLOAT_WEBGL2, bpp: 4}\n};\n","/* eslint-disable no-inline-comments */\nimport GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport RENDERBUFFER_FORMATS from './renderbuffer-formats';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\nfunction isFormatSupported(gl, format, formats) {\n const info = formats[format];\n if (!info) {\n return false;\n }\n const value = isWebGL2(gl) ? info.gl2 || info.gl1 : info.gl1;\n if (typeof value === 'string') {\n return gl.getExtension(value);\n }\n return value;\n}\n\nexport default class Renderbuffer extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Renderbuffer';\n }\n static isSupported(gl, {format} = {format: null}) {\n return !format || isFormatSupported(gl, format, RENDERBUFFER_FORMATS);\n }\n\n static getSamplesForFormat(gl, {format}) {\n // Polyfilled to return [0] under WebGL1\n return gl.getInternalformatParameter(GL.RENDERBUFFER, format, GL.SAMPLES);\n }\n\n constructor(gl, opts = {}) {\n super(gl, opts);\n\n // @ts-ignore\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n // Creates and initializes a renderbuffer object's data store\n initialize({format, width = 1, height = 1, samples = 0}) {\n assert(format, 'Needs format');\n\n this._trackDeallocatedMemory();\n\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, this.handle);\n\n if (samples !== 0 && isWebGL2(this.gl)) {\n // @ts-ignore\n this.gl.renderbufferStorageMultisample(GL.RENDERBUFFER, samples, format, width, height);\n } else {\n this.gl.renderbufferStorage(GL.RENDERBUFFER, format, width, height);\n }\n\n // this.gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n\n this.format = format;\n this.width = width;\n this.height = height;\n this.samples = samples;\n\n this._trackAllocatedMemory(\n this.width * this.height * (this.samples || 1) * RENDERBUFFER_FORMATS[this.format].bpp\n );\n\n return this;\n }\n\n resize({width, height}) {\n // Don't resize if width/height haven't changed\n if (width !== this.width || height !== this.height) {\n return this.initialize({width, height, format: this.format, samples: this.samples});\n }\n return this;\n }\n\n // PRIVATE METHODS\n _createHandle() {\n return this.gl.createRenderbuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteRenderbuffer(this.handle);\n this._trackDeallocatedMemory();\n }\n\n _bindHandle(handle) {\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, handle);\n }\n\n _syncHandle(handle) {\n this.format = this.getParameter(GL.RENDERBUFFER_INTERNAL_FORMAT);\n this.width = this.getParameter(GL.RENDERBUFFER_WIDTH);\n this.height = this.getParameter(GL.RENDERBUFFER_HEIGHT);\n this.samples = this.getParameter(GL.RENDERBUFFER_SAMPLES);\n }\n\n // @param {Boolean} opt.autobind=true - method call will bind/unbind object\n // @returns {GLenum|GLint} - depends on pname\n _getParameter(pname) {\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, this.handle);\n const value = this.gl.getRenderbufferParameter(GL.RENDERBUFFER, pname);\n // this.gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n return value;\n }\n}\n","import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {lumaStats} from '../init';\nimport {getKey, getKeyValue} from '../webgl-utils/constants-to-keys';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\n\n// TODO - Handle context loss\n// function glGetContextLossCount(gl) {\n// return (gl.luma && gl.luma.glCount) || 0;\n// }\n\nexport default class Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Resource';\n }\n constructor(gl, opts = {}) {\n assertWebGLContext(gl);\n\n const {id, userData = {}} = opts;\n this.gl = gl;\n // @ts-ignore\n this.gl2 = gl;\n // this.ext = polyfillContext(gl);\n this.id = id || uid(this[Symbol.toStringTag]);\n this.userData = userData;\n this._bound = false;\n\n // Set the handle\n // If handle was provided, use it, otherwise create a new handle\n\n // TODO - Stores the handle with context loss information\n // this.glCount = glGetContextLossCount(this.gl);\n\n // Default VertexArray needs to be created with null handle, so compare against undefined\n this._handle = opts.handle;\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n // Only meaningful for resources that allocate GPU memory\n this.byteLength = 0;\n\n this._addStats();\n }\n\n toString() {\n return `${this[Symbol.toStringTag] || this.constructor.name}(${this.id})`;\n }\n\n get handle() {\n // TODO - Add context loss handling\n // Will regenerate and reinitialize the handle if necessary\n // const glCount = glGetContextLossCount(this.gl);\n // if (this.glCount !== glCount) {\n // this._handle = this._createHandle(this.opts);\n // this._glCount = glCount;\n // // Reinitialize object\n // this.initialize(this.opts);\n // }\n return this._handle;\n }\n\n delete({deleteChildren = false} = {}) {\n // Delete this object, and get refs to any children\n // @ts-ignore\n const children = this._handle && this._deleteHandle(this._handle);\n if (this._handle) {\n this._removeStats();\n }\n this._handle = null;\n\n // Optionally, recursively delete the children\n // @ts-ignore\n if (children && deleteChildren) {\n // @ts-ignore\n children.filter(Boolean).forEach(child => child.delete());\n }\n\n return this;\n }\n\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n this._bound = true;\n\n value = funcOrHandle();\n\n this._bound = false;\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n /**\n * Query a Resource parameter\n *\n * @param {GLenum} pname\n * @return {GLint|GLfloat|GLenum} param\n */\n getParameter(pname, opts = {}) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n // Use parameter definitions to handle unsupported parameters\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if we can query for this parameter\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // Attempt to query for it and let WebGL report errors\n return this._getParameter(pname, opts);\n }\n\n // Many resources support a getParameter call -\n // getParameters will get all parameters - slow but useful for debugging\n // eslint-disable-next-line complexity\n getParameters(options = {}) {\n const {parameters, keys} = options;\n\n // Get parameter definitions for this Resource\n // @ts-ignore\n const PARAMETERS = this.constructor.PARAMETERS || {};\n\n const isWebgl2 = isWebGL2(this.gl);\n\n const values = {};\n\n // Query all parameters if no list provided\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n // WEBGL limits\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n parameter &&\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getParameter(pname, options);\n if (keys && parameter.type === 'GLenum') {\n values[key] = getKey(this.gl, values[key]);\n }\n }\n }\n\n return values;\n }\n\n /**\n * Update a Resource setting\n *\n * @todo - cache parameter to avoid issuing WebGL calls?\n *\n * @param {string} pname - parameter (GL constant, value or key)\n * @param {GLint|GLfloat|GLenum} value\n * @return {Resource} returns self to enable chaining\n */\n setParameter(pname, value) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n // Handle string keys\n if (parameter.type === 'GLenum') {\n value = getKeyValue(value);\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // attempt to set it and let WebGL report errors\n this._setParameter(pname, value);\n return this;\n }\n\n /*\n * Batch update resource parameters\n * Assumes the subclass supports a setParameter call\n */\n setParameters(parameters) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n return this;\n }\n\n // Install stubs for removed methods\n stubRemovedMethods(className, version, methodNames) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n // PUBLIC VIRTUAL METHODS\n initialize(opts) {}\n\n // PROTECTED METHODS - These must be overridden by subclass\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n /** @returns {number} */\n _getParameter(pname, opts) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname, value) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n // PRIVATE METHODS\n\n _context() {\n this.gl.luma = this.gl.luma || {};\n return this.gl.luma;\n }\n\n _addStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n\n _removeStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n\n stats.get(`${name}s Active`).decrementCount();\n }\n\n /**\n * Track common allocated memory and memory based on particular gl context.\n * @param {number} bytes\n * @param {string} name\n */\n _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {\n this._trackAllocatedMemoryForContext(bytes, name);\n this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = bytes;\n }\n\n _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n }\n\n /**\n * Deallocate memory for common statistic and for each gl context as well.\n * @param {string} name\n */\n _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {\n this._trackDeallocatedMemoryForContext(name);\n this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = 0;\n }\n\n _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n }\n}\n","// Supports GLSLIFY style naming of shaders\n// #define SHADER_NAME ...\nexport default function getShaderName(shader, defaultName = 'unnamed') {\n const SHADER_NAME_REGEXP = /#define[\\s*]SHADER_NAME[\\s*]([A-Za-z0-9_-]+)[\\s*]/;\n const match = shader.match(SHADER_NAME_REGEXP);\n return match ? match[1] : defaultName;\n}\n","// TODO - formatGLSLCompilerError should not depend on this\nimport getShaderName from './get-shader-name';\nimport getShaderTypeName from './get-shader-type-name';\n\n// Formats GLSL compiler error log into single string\nexport default function formatGLSLCompilerError(errLog, src, shaderType) {\n const {shaderName, errors, warnings} = parseGLSLCompilerError(errLog, src, shaderType);\n return `GLSL compilation error in ${shaderName}\\n\\n${errors}\\n${warnings}`;\n}\n\n/**\n * Parse a GLSL compiler error log into a string showing the source code around each error.\n * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)\n */\n/* eslint-disable no-continue, max-statements */\nexport function parseGLSLCompilerError(errLog, src, shaderType, shaderName) {\n const errorStrings = errLog.split(/\\r?\\n/);\n const errors = {};\n const warnings = {};\n\n // Patch the shader name\n const name = shaderName || getShaderName(src) || '(unnamed)';\n const shaderDescription = `${getShaderTypeName(shaderType)} shader ${name}`;\n\n // Parse the error - note: browser and driver dependent\n for (let i = 0; i < errorStrings.length; i++) {\n const errorString = errorStrings[i];\n if (errorString.length <= 1) {\n continue;\n }\n const segments = errorString.split(':');\n const type = segments[0];\n const line = parseInt(segments[2], 10);\n if (isNaN(line)) {\n throw new Error(`GLSL compilation error in ${shaderDescription}: ${errLog}`);\n }\n if (type !== 'WARNING') {\n errors[line] = errorString;\n } else {\n warnings[line] = errorString;\n }\n }\n\n // Format the error inline with the code\n const lines = addLineNumbers(src);\n\n return {\n shaderName: shaderDescription,\n errors: formatErrors(errors, lines),\n warnings: formatErrors(warnings, lines)\n };\n}\n\n// helper function, outputs annotated errors or warnings\nfunction formatErrors(errors, lines) {\n let message = '';\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!errors[i + 3] && !errors[i + 2] && !errors[i + 1]) {\n continue;\n }\n message += `${line}\\n`;\n if (errors[i + 1]) {\n const error = errors[i + 1];\n const segments = error.split(':', 3);\n const type = segments[0];\n const column = parseInt(segments[1], 10) || 0;\n const err = error.substring(segments.join(':').length + 1).trim();\n message += padLeft(`^^^ ${type}: ${err}\\n\\n`, column);\n }\n }\n return message;\n}\n\n/**\n * Prepends line numbers to each line of a string.\n * The line numbers will be left-padded with spaces to ensure an\n * aligned layout when rendered using monospace fonts.\n * @param {String} string - multi-line string to add line numbers to\n * @param {Number} start=1 - number of spaces to add\n * @param {String} delim =': ' - injected between line number and original line\n * @return {String[]} strings - array of string, one per line, with line numbers added\n */\nfunction addLineNumbers(string, start = 1, delim = ': ') {\n const lines = string.split(/\\r?\\n/);\n const maxDigits = String(lines.length + start - 1).length;\n return lines.map((line, i) => {\n const lineNumber = String(i + start);\n const digits = lineNumber.length;\n const prefix = padLeft(lineNumber, maxDigits - digits);\n return prefix + delim + line;\n });\n}\n\n/**\n * Pads a string with a number of spaces (space characters) to the left\n * @param {String} string - string to pad\n * @param {Number} digits - number of spaces to add\n * @return {String} string - The padded string\n */\nfunction padLeft(string, digits) {\n let result = '';\n for (let i = 0; i < digits; ++i) {\n result += ' ';\n }\n return `${result}${string}`;\n}\n","const GL_FRAGMENT_SHADER = 0x8b30;\nconst GL_VERTEX_SHADER = 0x8b31;\n\nexport default function getShaderTypeName(type) {\n switch (type) {\n case GL_FRAGMENT_SHADER:\n return 'fragment';\n case GL_VERTEX_SHADER:\n return 'vertex';\n default:\n return 'unknown type';\n }\n}\n","import GL from '@luma.gl/constants';\nimport {assertWebGLContext, log} from '@luma.gl/gltools';\nimport {parseGLSLCompilerError, getShaderName} from '../glsl-utils';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\nimport Resource from './resource';\n\nconst ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';\n\n// For now this is an internal class\nexport class Shader extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Shader';\n }\n\n static getTypeName(shaderType) {\n switch (shaderType) {\n case GL.VERTEX_SHADER:\n return 'vertex-shader';\n case GL.FRAGMENT_SHADER:\n return 'fragment-shader';\n default:\n assert(false);\n return 'unknown';\n }\n }\n\n /* eslint-disable max-statements */\n constructor(gl, props) {\n assertWebGLContext(gl);\n\n // Validate arguments\n assert(typeof props.source === 'string', ERR_SOURCE);\n\n // Deduce an id, from shader source, or supplied id, or shader type\n const id =\n getShaderName(props.source, null) ||\n props.id ||\n uid(`unnamed ${Shader.getTypeName(props.shaderType)}`);\n\n super(gl, {id});\n\n this.shaderType = props.shaderType;\n this.source = props.source;\n\n this.initialize(props);\n }\n\n initialize({source}) {\n const shaderName = getShaderName(source, null);\n if (shaderName) {\n this.id = uid(shaderName);\n }\n this._compile(source);\n }\n\n // Accessors\n\n getParameter(pname) {\n return this.gl.getShaderParameter(this.handle, pname);\n }\n\n toString() {\n return `${Shader.getTypeName(this.shaderType)}:${this.id}`;\n }\n\n getName() {\n return getShaderName(this.source) || 'unnamed-shader';\n }\n\n getSource() {\n return this.gl.getShaderSource(this.handle);\n }\n\n // Debug method - Returns translated source if available\n getTranslatedSource() {\n const extension = this.gl.getExtension('WEBGL_debug_shaders');\n return extension\n ? extension.getTranslatedShaderSource(this.handle)\n : 'No translated source available. WEBGL_debug_shaders not implemented';\n }\n\n // PRIVATE METHODS\n _compile(source = this.source) {\n if (!source.startsWith('#version ')) {\n source = `#version 100\\n${source}`;\n }\n this.source = source;\n this.gl.shaderSource(this.handle, this.source);\n this.gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = this.getParameter(GL.COMPILE_STATUS);\n if (!compileStatus) {\n const infoLog = this.gl.getShaderInfoLog(this.handle);\n const {shaderName, errors, warnings} = parseGLSLCompilerError(\n infoLog,\n this.source,\n this.shaderType,\n this.id\n );\n log.error(`GLSL compilation errors in ${shaderName}\\n${errors}`)();\n log.warn(`GLSL compilation warnings in ${shaderName}\\n${warnings}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n\n _deleteHandle() {\n this.gl.deleteShader(this.handle);\n }\n\n _getOptsFromHandle() {\n return {\n type: this.getParameter(GL.SHADER_TYPE),\n source: this.getSource()\n };\n }\n}\n\nexport class VertexShader extends Shader {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexShader';\n }\n\n constructor(gl, props) {\n // Signature: new VertexShader(gl, source)\n if (typeof props === 'string') {\n props = {source: props};\n }\n super(gl, Object.assign({}, props, {shaderType: GL.VERTEX_SHADER}));\n }\n\n // PRIVATE METHODS\n _createHandle() {\n return this.gl.createShader(GL.VERTEX_SHADER);\n }\n}\n\nexport class FragmentShader extends Shader {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'FragmentShader';\n }\n constructor(gl, props) {\n // Signature: new FragmentShader(gl, source)\n if (typeof props === 'string') {\n props = {source: props};\n }\n\n super(gl, Object.assign({}, props, {shaderType: GL.FRAGMENT_SHADER}));\n }\n\n // PRIVATE METHODS\n _createHandle() {\n return this.gl.createShader(GL.FRAGMENT_SHADER);\n }\n}\n","import {assert} from '../utils/assert';\n\nlet pathPrefix = '';\n\n/*\n * Set a relative path prefix\n */\nexport function setPathPrefix(prefix) {\n pathPrefix = prefix;\n}\n\n// Reads raw file data from:\nexport function loadFile(url, options = {}) {\n assert(typeof url === 'string');\n url = pathPrefix + url;\n const dataType = options.dataType || 'text';\n return fetch(url, options).then(res => res[dataType]());\n}\n\n/*\n * Loads images asynchronously\n * image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'\n * returns a promise tracking the load\n */\nexport function loadImage(url, opts) {\n assert(typeof url === 'string');\n url = pathPrefix + url;\n return new Promise((resolve, reject) => {\n try {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error(`Could not load image ${url}.`));\n image.crossOrigin = (opts && opts.crossOrigin) || 'anonymous';\n image.src = url;\n } catch (error) {\n reject(error);\n }\n });\n}\n","import GL from '@luma.gl/constants';\nimport {assertWebGLContext} from '@luma.gl/gltools';\nimport Texture from './texture';\nimport {loadImage} from '../utils/load-file';\n\nexport default class Texture2D extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture2D';\n }\n\n static isSupported(gl, opts) {\n return Texture.isSupported(gl, opts);\n }\n\n constructor(gl, props = {}) {\n assertWebGLContext(gl);\n\n // Signature: new Texture2D(gl, url | Promise)\n if (props instanceof Promise || typeof props === 'string') {\n props = {data: props};\n }\n\n // Signature: new Texture2D(gl, {data: url})\n if (typeof props.data === 'string') {\n props = Object.assign({}, props, {data: loadImage(props.data)});\n }\n\n super(gl, Object.assign({}, props, {target: GL.TEXTURE_2D}));\n\n this.initialize(props);\n\n Object.seal(this);\n }\n}\n","import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters} from '@luma.gl/gltools';\nimport Texture from './texture';\nimport {DATA_FORMAT_CHANNELS, TYPE_SIZES} from './texture-formats';\nimport Buffer from './buffer';\n\nexport default class Texture3D extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture3D';\n }\n\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n props = Object.assign({depth: 1}, props, {target: GL.TEXTURE_3D, unpackFlipY: false});\n super(gl, props);\n this.initialize(props);\n\n Object.seal(this);\n }\n\n // Image 3D copies from Typed Array or WebGLBuffer\n setImageData({\n level = 0,\n dataFormat = GL.RGBA,\n width,\n height,\n depth = 1,\n border = 0,\n format,\n type = GL.UNSIGNED_BYTE,\n offset = 0,\n data,\n parameters = {}\n }) {\n this._trackDeallocatedMemory('Texture');\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n if (ArrayBuffer.isView(data)) {\n // @ts-ignore\n this.gl.texImage3D(\n this.target,\n level,\n dataFormat,\n width,\n height,\n depth,\n border,\n format,\n type,\n data\n );\n }\n\n if (data instanceof Buffer) {\n this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);\n // @ts-ignore\n this.gl.texImage3D(\n this.target,\n level,\n dataFormat,\n width,\n height,\n depth,\n border,\n format,\n type,\n offset\n );\n }\n });\n\n if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n // @ts-ignore\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n // @ts-ignore\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(\n this.width * this.height * this.depth * channels * channelSize,\n 'Texture'\n );\n }\n\n this.loaded = true;\n\n return this;\n }\n}\n","import GL from '@luma.gl/constants';\nimport {log, assertWebGLContext} from '@luma.gl/gltools';\nimport Texture from './texture';\n\nconst FACES = [\n GL.TEXTURE_CUBE_MAP_POSITIVE_X,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_X,\n GL.TEXTURE_CUBE_MAP_POSITIVE_Y,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n GL.TEXTURE_CUBE_MAP_POSITIVE_Z,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_Z\n];\n\nexport default class TextureCube extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TextureCube';\n }\n\n constructor(gl, props = {}) {\n assertWebGLContext(gl);\n\n super(gl, Object.assign({}, props, {target: GL.TEXTURE_CUBE_MAP}));\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n initialize(props = {}) {\n const {mipmaps = true, parameters = {}} = props;\n\n // Store props for accessors\n this.opts = props;\n\n // @ts-ignore\n this.setCubeMapImageData(props).then(() => {\n this.loaded = true;\n\n // TODO - should genMipmap() be called on the cubemap or on the faces?\n // TODO - without generateMipmap() cube textures do not work at all!!! Why?\n if (mipmaps) {\n this.generateMipmap(props);\n }\n\n this.setParameters(parameters);\n });\n return this;\n }\n\n subImage({face, data, x = 0, y = 0, mipmapLevel = 0}) {\n // @ts-ignore TODO - is this a bug?\n return this._subImage({target: face, data, x, y, mipmapLevel});\n }\n\n /* eslint-disable max-statements, max-len */\n async setCubeMapImageData({\n width,\n height,\n pixels,\n data,\n border = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE\n }) {\n const {gl} = this;\n const imageDataMap = pixels || data;\n\n // pixel data (imageDataMap) is an Object from Face to Image or Promise.\n // For example:\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : Image-or-Promise,\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : Image-or-Promise,\n // ... }\n // To provide multiple level-of-details (LODs) this can be Face to Array\n // of Image or Promise, like this\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // ... }\n\n const resolvedFaces = await Promise.all(\n FACES.map(face => {\n const facePixels = imageDataMap[face];\n return Promise.all(Array.isArray(facePixels) ? facePixels : [facePixels]);\n })\n );\n\n this.bind();\n\n FACES.forEach((face, index) => {\n if (resolvedFaces[index].length > 1 && this.opts.mipmaps !== false) {\n // If the user provides multiple LODs, then automatic mipmap\n // generation generateMipmap() should be disabled to avoid overwritting them.\n log.warn(`${this.id} has mipmap and multiple LODs.`)();\n }\n resolvedFaces[index].forEach((image, lodLevel) => {\n // TODO: adjust width & height for LOD!\n if (width && height) {\n gl.texImage2D(face, lodLevel, format, width, height, border, format, type, image);\n } else {\n gl.texImage2D(face, lodLevel, format, format, type, image);\n }\n });\n });\n\n this.unbind();\n }\n\n // TODO: update this method to accept LODs\n setImageDataForFace(options) {\n const {\n face,\n width,\n height,\n pixels,\n data,\n border = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE\n // generateMipmap = false // TODO\n } = options;\n\n const {gl} = this;\n\n const imageData = pixels || data;\n\n this.bind();\n if (imageData instanceof Promise) {\n imageData.then(resolvedImageData =>\n this.setImageDataForFace(\n Object.assign({}, options, {\n face,\n data: resolvedImageData,\n pixels: resolvedImageData\n })\n )\n );\n } else if (this.width || this.height) {\n gl.texImage2D(face, 0, format, width, height, border, format, type, imageData);\n } else {\n gl.texImage2D(face, 0, format, format, type, imageData);\n }\n\n return this;\n }\n}\n\nTextureCube.FACES = FACES;\n","import GL from '@luma.gl/constants';\nimport {isWebGL2} from '@luma.gl/gltools';\n\n// const S3TC = 'WEBGL_compressed_texture_s3tc';\n// const PVRTC = 'WEBGL_compressed_texture_pvrtc';\n// const ES3 = 'WEBGL_compressed_texture_es3';\n// const ETC1 = 'WEBGL_compressed_texture_etc1';\n// const SRGB = 'EXT_sRGB';\n// const DEPTH = 'WEBGL_depth_texture';\n\n// Legal combinations for internalFormat, format and type\nexport const TEXTURE_FORMATS = {\n // Unsized texture format - more performance\n [GL.RGB]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n // TODO: format: GL.RGBA type: GL.FLOAT is supported in WebGL1 when 'OES_texure_float' is suported\n // we need to update this table structure to specify extensions (gl1: 'OES_texure_float', gl2: false) for each type.\n [GL.RGBA]: {\n dataFormat: GL.RGBA,\n types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]\n },\n [GL.ALPHA]: {dataFormat: GL.ALPHA, types: [GL.UNSIGNED_BYTE]},\n [GL.LUMINANCE]: {dataFormat: GL.LUMINANCE, types: [GL.UNSIGNED_BYTE]},\n [GL.LUMINANCE_ALPHA]: {dataFormat: GL.LUMINANCE_ALPHA, types: [GL.UNSIGNED_BYTE]},\n\n // 32 bit floats\n [GL.R32F]: {dataFormat: GL.RED, types: [GL.FLOAT], gl2: true},\n [GL.RG32F]: {dataFormat: GL.RG, types: [GL.FLOAT], gl2: true},\n [GL.RGB32F]: {dataFormat: GL.RGB, types: [GL.FLOAT], gl2: true},\n [GL.RGBA32F]: {dataFormat: GL.RGBA, types: [GL.FLOAT], gl2: true}\n\n // [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1: DEPTH},\n // [GL.DEPTH_STENCIL]: {gl1: DEPTH},\n\n // Sized texture format - more performance\n // R\n // [GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n // [GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n // [GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n // // RG\n // [GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n // [GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n // [GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n // // RGB\n // [GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},\n // [GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},\n // [GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n // [GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n // [GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1: 'WEBGL_color_buffer_half_float'},\n // [GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1: 'WEBGL_color_buffer_float'},\n // [GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n // // RGBA\n // [GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},\n // [GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},\n // [GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n // [GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n // [GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n // [GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n\n // Compressed formats\n\n // WEBGL_compressed_texture_s3tc\n\n // [GL.COMPRESSED_RGB_S3TC_DXT1_EXT]: {compressed: true, gl1: S3TC},\n // [GL.COMPRESSED_RGBA_S3TC_DXT1_EXT]: {compressed: true, gl1: S3TC},\n // [GL.COMPRESSED_RGBA_S3TC_DXT3_EXT]: {compressed: true, gl1: S3TC},\n // [GL.COMPRESSED_RGBA_S3TC_DXT5_EXT]: {compressed: true, gl1: S3TC},\n\n // WEBGL_compressed_texture_es3\n\n // [GL.COMPRESSED_R11_EAC]: {compressed: true, gl1: ES3}, // RED\n // [GL.COMPRESSED_SIGNED_R11_EAC]: {compressed: true, gl1: ES3}, // RED\n // [GL.COMPRESSED_RG11_EAC]: {compressed: true, gl1: ES3}, // RG\n // [GL.COMPRESSED_SIGNED_RG11_EAC]: {compressed: true, gl1: ES3}, // RG\n // [GL.COMPRESSED_RGB8_ETC2]: {compressed: true, gl1: ES3}, // RGB\n // [GL.COMPRESSED_RGBA8_ETC2_EAC]: {compressed: true, gl1: ES3}, // RBG\n // [GL.COMPRESSED_SRGB8_ETC2]: {compressed: true, gl1: ES3}, // RGB\n // [GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]: {compressed: true, gl1: ES3}, // RGBA\n // [GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]: {compressed: true, gl1: ES3}, // RGBA\n // [GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]: {compressed: true, gl1: ES3}, // RGBA\n /* WebGL2 guaranteed availability compressed formats?\n COMPRESSED_R11_EAC RED\n COMPRESSED_SIGNED_R11_EAC RED\n COMPRESSED_RG11_EAC RG\n COMPRESSED_SIGNED_RG11_EAC RG\n COMPRESSED_RGB8_ETC2 RGB\n COMPRESSED_SRGB8_ETC2 RGB\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 RGBA\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 RGBA\n COMPRESSED_RGBA8_ETC2_EAC RGBA\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n */\n\n // WEBGL_compressed_texture_pvrtc\n\n // [GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG]: {compressed: true, gl1: PVRTC},\n // [GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]: {compressed: true, gl1: PVRTC},\n // [GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG]: {compressed: true, gl1: PVRTC},\n // [GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]: {compressed: true, gl1: PVRTC},\n\n // WEBGL_compressed_texture_etc1\n\n // [GL.COMPRESSED_RGB_ETC1_WEBGL]: {compressed: true, gl1: ETC1},\n\n // WEBGL_compressed_texture_atc\n\n // [GL.COMPRESSED_RGB_ATC_WEBGL]: {compressed: true, gl1: ETC1},\n // [GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]: {compressed: true, gl1: ETC1},\n // [GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]: {compressed: true, gl1: ETC1}\n};\n\nexport const DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\nexport const TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\nexport function isFormatSupported(gl, format) {\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n if (info.gl1 === undefined && info.gl2 === undefined) {\n // No info - always supported\n return true;\n }\n const value = isWebGL2(gl) ? info.gl2 || info.gl1 : info.gl1;\n return typeof value === 'string' ? gl.getExtension(value) : value;\n}\n\nexport function isLinearFilteringSupported(gl, format) {\n const info = TEXTURE_FORMATS[format];\n switch (info && info.types[0]) {\n // Both WebGL1 and WebGL2?\n case GL.FLOAT:\n return gl.getExtension('OES_texture_float_linear');\n // Not in WebGL2?\n case GL.HALF_FLOAT:\n return gl.getExtension('OES_texture_half_float_linear');\n default:\n return true;\n }\n}\n","import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\n\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {\n TEXTURE_FORMATS,\n DATA_FORMAT_CHANNELS,\n TYPE_SIZES,\n isFormatSupported,\n isLinearFilteringSupported\n} from './texture-formats';\nimport {assert} from '../utils/assert';\nimport {uid, isPowerOfTwo} from '../utils/utils';\n\n// Supported min filters for NPOT texture.\nconst NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];\n\n// Polyfill\n// Note (Tarek): Do we really need to support this API?\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n static isSupported(gl, opts = {}) {\n const {format, linearFiltering} = opts;\n let supported = true;\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n return supported;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n // , magFilter, minFilter, wrapS, wrapT\n } = props;\n\n super(gl, {id, handle});\n\n this.target = target;\n this.textureUnit = undefined;\n\n // Program.draw() checks the loaded flag of all textures to avoid\n // Textures that are still loading from promises\n // Set to true as soon as texture has been initialized with valid data\n this.loaded = false;\n\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n\n /* eslint-disable max-len, max-statements */\n initialize(props = {}) {\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData =>\n this.initialize(\n Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })\n )\n );\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-ignore\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = GL.RGBA,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n\n let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;\n const {depth = 0} = props;\n\n // Deduce width and height\n ({width, height, compressed, dataFormat, type} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n // Store opts for accessors\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n // Set texture sampler parameters\n this.setParameters(parameters);\n\n // TODO - Store data to enable auto recreate on context loss\n if (recreate) {\n this.data = data;\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-ignore\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {video, parameters, lastTime} = this._video;\n // @ts-ignore\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n\n // If size has changed, reinitializes with current format\n // note clears image and mipmaps\n resize({height, width, mipmaps = false}) {\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n return this;\n }\n\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n if (this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n return this;\n }\n\n this.mipmaps = true;\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} width -\n * @param {GLint} height -\n * @param {GLint} mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n /* eslint-disable max-len, max-statements, complexity */\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n const {gl} = this;\n gl.bindTexture(this.target, this.handle);\n\n let dataType = null;\n ({data, dataType} = this._getDataType({data, compressed}));\n\n let gl2;\n\n let compressedTextureSize = 0;\n\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n case 'typed-array':\n // Looks like this assert is not necessary, as offset is ignored under WebGL1\n // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');\n // @ts-ignore\n gl.texImage2D(\n target,\n level,\n format,\n width,\n height,\n border,\n dataFormat,\n type,\n data,\n // @ts-ignore\n offset\n );\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n break;\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(\n target,\n levelIndex,\n levelData.format,\n levelData.width,\n levelData.height,\n border,\n levelData.data\n );\n compressedTextureSize += levelData.levelSize;\n }\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (dataType === 'compressed') {\n this._trackAllocatedMemory(compressedTextureSize, 'Texture');\n } else if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n\n return this;\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n */\n /*\n * Redefines an area of an existing texture\n * @param {*} pixels, data -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} x - xOffset from where texture to be updated\n * @param {GLint} y - yOffset from where texture to be updated\n * @param {GLint} width - width of the sub image to be updated\n * @param {GLint} height - height of the sub image to be updated\n * @param {GLint} level - mip level to be updated\n * @param {GLenum} format - internal format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer or ArrayBufferView\n * @param {GLenum} dataFormat - format of image data.\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n setSubImageData({\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n }) {\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n // Support buffers\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n // const gl2 = assertWebGL2Context(this.gl);\n // @ts-ignore last offset parameter is ignored under WebGL1\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n const gl2 = assertWebGL2Context(this.gl);\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n } else if (isWebGL2(this.gl)) {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n\n this.gl.bindTexture(this.target, null);\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error(\n 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n\n bind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n // PRIVATE METHODS\n\n _getDataType({data, compressed = false}) {\n if (compressed) {\n return {data, dataType: 'compressed'};\n }\n if (data === null) {\n return {data, dataType: 'null'};\n }\n if (ArrayBuffer.isView(data)) {\n return {data, dataType: 'typed-array'};\n }\n if (data instanceof Buffer) {\n return {data: data.handle, dataType: 'buffer'};\n }\n if (data instanceof WebGLBuffer) {\n return {data, dataType: 'buffer'};\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return {data, dataType: 'browser-object'};\n }\n\n /* Copied from texture-2d.js\n // WebGL2\n setPixels(opts = {}) {\n const {\n buffer,\n width = null,\n height = null,\n mipmapLevel = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n\n // This signature of texImage2D uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);\n // And as always, we must also bind the texture itself\n this.bind();\n\n gl.texImage2D(gl.TEXTURE_2D,\n mipmapLevel, format, width, height, border, format, type, buffer.target);\n\n this.unbind();\n gl.bindBuffer(GL.GL.PIXEL_UNPACK_BUFFER, null);\n return this;\n }\n\n setImageDataFromCompressedBuffer(opts) {\n const {\n buffer,\n // offset = 0,\n width = null,\n height = null,\n mipmapLevel = 0,\n internalFormat = GL.RGBA,\n // format = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n gl.compressedTexImage2D(this.target,\n mipmapLevel, internalFormat, width, height, border, buffer);\n // gl.compressedTexSubImage2D(target,\n // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);\n return this;\n }\n\n copySubImage(opts) {\n const {\n // pixels,\n // offset = 0,\n // x,\n // y,\n // width,\n // height,\n // mipmapLevel = 0,\n // internalFormat = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n // border = 0\n } = opts;\n\n // if (pixels instanceof ArrayBufferView) {\n // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);\n // }\n // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);\n // // Additional signature in a WebGL 2 context:\n // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);\n }\n */\n\n // HELPER METHODS\n\n _deduceParameters(opts) {\n const {format, data} = opts;\n let {width, height, dataFormat, type, compressed} = opts;\n\n // Deduce format and type from format\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || (textureFormat && textureFormat.dataFormat);\n type = type || (textureFormat && textureFormat.types[0]);\n\n // Deduce compression from format\n compressed = compressed || (textureFormat && textureFormat.compressed);\n\n ({width, height} = this._deduceImageSize(data, width, height));\n\n return {dataFormat, type, compressed, width, height, format, data};\n }\n\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {width: data.naturalWidth, height: data.naturalHeight};\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {width: data.width, height: data.height};\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {width: data.videoWidth, height: data.videoHeight};\n } else if (!data) {\n size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};\n } else {\n size = {width, height};\n }\n\n assert(size, 'Could not deduced texture size');\n assert(\n width === undefined || size.width === width,\n 'Deduced texture width does not match supplied width'\n );\n assert(\n height === undefined || size.height === height,\n 'Deduced texture height does not match supplied height'\n );\n\n return size;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case GL.TEXTURE_WIDTH:\n return this.width;\n case GL.TEXTURE_HEIGHT:\n return this.height;\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n\n // NOTE: Apply NPOT workaround\n param = this._getNPOTParam(pname, param);\n\n // Apparently there are some integer/float conversion rules that made\n // the WebGL committe expose two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (pname) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case GL.TEXTURE_WIDTH:\n case GL.TEXTURE_HEIGHT:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n // Width and height not available, consider it is not NPOT texture\n if (!this.width || !this.height) {\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n // Update default settings which are not supported by NPOT textures.\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case GL.TEXTURE_MIN_FILTER:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n param = GL.LINEAR;\n }\n break;\n case GL.TEXTURE_WRAP_S:\n case GL.TEXTURE_WRAP_T:\n if (param !== GL.CLAMP_TO_EDGE) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)();\n param = GL.CLAMP_TO_EDGE;\n }\n break;\n default:\n break;\n }\n }\n return param;\n }\n}\n","import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(`${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n","// Feature detection for WebGL\n//\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport WEBGL_FEATURES from './webgl-features-table';\nimport {isWebGL2, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\nconst LOG_UNSUPPORTED_FEATURE = 2;\n\n// Check one feature\nexport function hasFeature(gl, feature) {\n return hasFeatures(gl, feature);\n}\n\n// Check one or more features\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => {\n return isFeatureSupported(gl, feature);\n });\n}\n\n// Return a list of supported features\nexport function getFeatures(gl) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n for (const cap in WEBGL_FEATURES) {\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = isFeatureSupported(gl, cap);\n }\n }\n return gl.luma.caps;\n}\n\n// TODO - cache the value\nfunction isFeatureSupported(gl, cap) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = queryFeature(gl, cap);\n }\n\n if (!gl.luma.caps[cap]) {\n log.log(LOG_UNSUPPORTED_FEATURE, `Feature: ${cap} not supported`)();\n }\n\n return gl.luma.caps[cap];\n}\n\nfunction queryFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n let isSupported;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'function') {\n isSupported = featureDefinition(gl);\n } else if (Array.isArray(featureDefinition)) {\n isSupported = true;\n for (const extension of featureDefinition) {\n isSupported = isSupported && Boolean(gl.getExtension(extension));\n }\n } else if (typeof featureDefinition === 'string') {\n isSupported = Boolean(gl.getExtension(featureDefinition));\n } else if (typeof featureDefinition === 'boolean') {\n isSupported = featureDefinition;\n } else {\n assert(false);\n }\n\n return isSupported;\n}\n","import Framebuffer from '../classes/framebuffer';\nimport Texture2D from '../classes/texture-2d';\n// TODO - this should be the default export, test cases need updating\nexport const FEATURES = {\n WEBGL2: 'WEBGL2',\n\n // API SUPPORT\n VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',\n TIMER_QUERY: 'TIMER_QUERY',\n INSTANCED_RENDERING: 'INSTANCED_RENDERING',\n MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',\n\n // FEATURES\n ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',\n\n // BLENDING\n BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',\n FLOAT_BLEND: 'FLOAT_BLEND',\n\n // TEXTURES: '// TEXTURES', RENDERBUFFERS\n COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',\n\n // TEXTURES\n TEXTURE_DEPTH: 'TEXTURE_DEPTH',\n TEXTURE_FLOAT: 'TEXTURE_FLOAT',\n TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',\n\n TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',\n TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',\n TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',\n\n // FRAMEBUFFERS: '// FRAMEBUFFERS', TEXTURES AND RENDERBUFFERS\n COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',\n COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',\n COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',\n\n // GLSL extensions\n GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',\n GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',\n GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',\n GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'\n};\n\n// function to test if Float 32 bit format texture can be bound as color attachment\nfunction checkFloat32ColorAttachment(gl) {\n const testTexture = new Texture2D(gl, {\n format: gl.RGBA,\n type: gl.FLOAT,\n dataFormat: gl.RGBA\n });\n const testFb = new Framebuffer(gl, {\n id: `test-framebuffer`,\n check: false,\n attachments: {\n [gl.COLOR_ATTACHMENT0]: testTexture\n }\n });\n const status = testFb.getStatus();\n testTexture.delete();\n testFb.delete();\n return status === gl.FRAMEBUFFER_COMPLETE;\n}\n\n// Defines luma.gl \"feature\" names and semantics\n// Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension\nexport default {\n [FEATURES.WEBGL2]: [false, true],\n\n // API SUPPORT\n [FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],\n [FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n [FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],\n [FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],\n\n // FEATURES\n [FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],\n\n // BLENDING\n [FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],\n [FEATURES.FLOAT_BLEND]: ['EXT_float_blend'],\n\n // TEXTURES, RENDERBUFFERS\n [FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],\n\n // TEXTURES\n [FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],\n [FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],\n [FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],\n\n [FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear'],\n [FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear'],\n [FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic'],\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n [FEATURES.COLOR_ATTACHMENT_RGBA32F]: [checkFloat32ColorAttachment, 'EXT_color_buffer_float'],\n [FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],\n [FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float'],\n\n // GLSL extensions\n [FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],\n [FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],\n [FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],\n [FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]\n};\n","import {log} from '@luma.gl/gltools';\nimport {Stats} from '@probe.gl/stats';\nimport {isBrowser} from '@probe.gl/env';\n\n// Version detection using babel plugin\n/* global __VERSION__ */\n// @ts-ignore\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n// Assign luma.log.level in console to control logging: \\\n// 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n// luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n\nexport class StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({id: name}));\n }\n\n return this.stats.get(name);\n }\n}\n\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `luma.gl ${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats,\n\n // Keep some luma globals in a sub-object\n // This allows us to dynamically detect if certain modules have been\n // included (such as IO and headless) and enable related functionality,\n // without unconditionally requiring and thus bundling big dependencies\n // into the app.\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport {lumaStats};\nexport default globalThis.luma;\n","// Recommendation is to ignore message but current test suite checks agains the\n// message so keep it for now.\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'luma.gl: assertion failed.');\n }\n}\n","/* Use as\nimport {checkProps} from '../util/check-props;'\n\nconst PROP_CHECKS = {\n // Removed props no longer supported, print error and link to upgrade guide\n removedProps: {\n },\n // Deprecated props\n deprecatedProps: {\n offset: 'accessor',\n stride: 'accessor',\n type: 'accessor',\n size: 'accessor',\n divisor: 'accessor',\n normalized: 'accessor',\n integer: 'accessor'\n },\n // Deprecated props that can be autosubstituted, print warning and return updated props object\n replacedProps: {\n bytes: 'byteLength'\n }\n}\n\nclass Buffer {\n setProps(props) {\n checkProps('Buffer', props, PROP_CHECKS);\n }\n}\n*/\nimport {log} from '@luma.gl/gltools';\n\nexport function checkProps(className, props, propChecks) {\n const {removedProps = {}, deprecatedProps = {}, replacedProps = {}} = propChecks;\n\n // removedProps: Removed props no longer supported\n // print error and link to upgrade guide\n for (const propName in removedProps) {\n if (propName in props) {\n const replacementProp = removedProps[propName];\n const replacement = replacementProp ? `${className}.${removedProps[propName]}` : 'N/A';\n log.removed(`${className}.${propName}`, replacement)();\n }\n }\n\n // deprecatedProps: Deprecated props that can not be autosubstituted\n // print warning and rely on caller to substitute\n for (const propName in deprecatedProps) {\n if (propName in props) {\n const replacementProp = deprecatedProps[propName];\n log.deprecated(`${className}.${propName}`, `${className}.${replacementProp}`)();\n }\n }\n\n // replacedProps: Deprecated props that can be autosubstituted\n // print warning and return updated props object\n let newProps = null;\n for (const propName in replacedProps) {\n if (propName in props) {\n const replacementProp = replacedProps[propName];\n log.deprecated(`${className}.${propName}`, `${className}.${replacementProp}`)();\n newProps = newProps || Object.assign({}, props);\n newProps[replacementProp] = props[propName];\n delete newProps[propName];\n }\n }\n\n return newProps || props;\n}\n","import {log} from '@luma.gl/gltools';\n\n// Install stubs for removed methods\nexport function stubRemovedMethods(instance, className, version, methodNames) {\n const upgradeMessage = `See luma.gl ${version} Upgrade Guide at \\\nhttps://luma.gl/docs/upgrade-guide`;\n\n const prototype = Object.getPrototypeOf(instance);\n\n methodNames.forEach(methodName => {\n if (prototype.methodName) {\n return;\n }\n\n prototype[methodName] = () => {\n log.removed(`Calling removed method ${className}.${methodName}: `, upgradeMessage)();\n throw new Error(methodName);\n };\n });\n}\n","import {assert} from './assert';\n\nconst uidCounters = {};\n\n/**\n * Returns a UID.\n * @param {string} id= - Identifier base name\n * @return {string} uid\n **/\nexport function uid(id = 'id') {\n uidCounters[id] = uidCounters[id] || 1;\n const count = uidCounters[id]++;\n return `${id}-${count}`;\n}\n\n/**\n * Verifies if a given number is power of two or not.\n * @param {object} n - The number to check.\n * @return {boolean} Returns true if the given number is power of 2, false otherwise.\n **/\nexport function isPowerOfTwo(n) {\n assert(typeof n === 'number', 'Input must be a number');\n return n && (n & (n - 1)) === 0;\n}\n\n// Returns true if given object is empty, false otherwise.\nexport function isObjectEmpty(obj) {\n let isEmpty = true;\n /* eslint-disable no-unused-vars */\n for (const key in obj) {\n isEmpty = false;\n break;\n }\n /* eslint-enable no-unused-vars */\n return isEmpty;\n}\n","/* eslint-disable camelcase */\nimport {assert} from '../utils/assert';\n\nconst GL_BYTE = 0x1400;\nconst GL_UNSIGNED_BYTE = 0x1401;\nconst GL_SHORT = 0x1402;\nconst GL_UNSIGNED_SHORT = 0x1403;\n\nconst GL_POINTS = 0x0;\nconst GL_LINES = 0x1;\nconst GL_LINE_LOOP = 0x2;\nconst GL_LINE_STRIP = 0x3;\nconst GL_TRIANGLES = 0x4;\nconst GL_TRIANGLE_STRIP = 0x5;\nconst GL_TRIANGLE_FAN = 0x6;\n\n// Local constants - these will \"collapse\" during minification\nconst GL_FLOAT = 0x1406;\nconst GL_FLOAT_VEC2 = 0x8b50;\nconst GL_FLOAT_VEC3 = 0x8b51;\nconst GL_FLOAT_VEC4 = 0x8b52;\n\nconst GL_INT = 0x1404;\nconst GL_INT_VEC2 = 0x8b53;\nconst GL_INT_VEC3 = 0x8b54;\nconst GL_INT_VEC4 = 0x8b55;\n\nconst GL_UNSIGNED_INT = 0x1405;\nconst GL_UNSIGNED_INT_VEC2 = 0x8dc6;\nconst GL_UNSIGNED_INT_VEC3 = 0x8dc7;\nconst GL_UNSIGNED_INT_VEC4 = 0x8dc8;\n\nconst GL_BOOL = 0x8b56;\nconst GL_BOOL_VEC2 = 0x8b57;\nconst GL_BOOL_VEC3 = 0x8b58;\nconst GL_BOOL_VEC4 = 0x8b59;\n\nconst GL_FLOAT_MAT2 = 0x8b5a;\nconst GL_FLOAT_MAT3 = 0x8b5b;\nconst GL_FLOAT_MAT4 = 0x8b5c;\n\nconst GL_FLOAT_MAT2x3 = 0x8b65;\nconst GL_FLOAT_MAT2x4 = 0x8b66;\nconst GL_FLOAT_MAT3x2 = 0x8b67;\nconst GL_FLOAT_MAT3x4 = 0x8b68;\nconst GL_FLOAT_MAT4x2 = 0x8b69;\nconst GL_FLOAT_MAT4x3 = 0x8b6a;\n\n// Composite types table\nconst COMPOSITE_GL_TYPES = {\n [GL_FLOAT]: [GL_FLOAT, 1, 'float'],\n [GL_FLOAT_VEC2]: [GL_FLOAT, 2, 'vec2'],\n [GL_FLOAT_VEC3]: [GL_FLOAT, 3, 'vec3'],\n [GL_FLOAT_VEC4]: [GL_FLOAT, 4, 'vec4'],\n\n [GL_INT]: [GL_INT, 1, 'int'],\n [GL_INT_VEC2]: [GL_INT, 2, 'ivec2'],\n [GL_INT_VEC3]: [GL_INT, 3, 'ivec3'],\n [GL_INT_VEC4]: [GL_INT, 4, 'ivec4'],\n\n [GL_UNSIGNED_INT]: [GL_UNSIGNED_INT, 1, 'uint'],\n [GL_UNSIGNED_INT_VEC2]: [GL_UNSIGNED_INT, 2, 'uvec2'],\n [GL_UNSIGNED_INT_VEC3]: [GL_UNSIGNED_INT, 3, 'uvec3'],\n [GL_UNSIGNED_INT_VEC4]: [GL_UNSIGNED_INT, 4, 'uvec4'],\n\n [GL_BOOL]: [GL_FLOAT, 1, 'bool'],\n [GL_BOOL_VEC2]: [GL_FLOAT, 2, 'bvec2'],\n [GL_BOOL_VEC3]: [GL_FLOAT, 3, 'bvec3'],\n [GL_BOOL_VEC4]: [GL_FLOAT, 4, 'bvec4'],\n\n [GL_FLOAT_MAT2]: [GL_FLOAT, 8, 'mat2'], // 4\n [GL_FLOAT_MAT2x3]: [GL_FLOAT, 8, 'mat2x3'], // 6\n [GL_FLOAT_MAT2x4]: [GL_FLOAT, 8, 'mat2x4'], // 8\n\n [GL_FLOAT_MAT3]: [GL_FLOAT, 12, 'mat3'], // 9\n [GL_FLOAT_MAT3x2]: [GL_FLOAT, 12, 'mat3x2'], // 6\n [GL_FLOAT_MAT3x4]: [GL_FLOAT, 12, 'mat3x4'], // 12\n\n [GL_FLOAT_MAT4]: [GL_FLOAT, 16, 'mat4'], // 16\n [GL_FLOAT_MAT4x2]: [GL_FLOAT, 16, 'mat4x2'], // 8\n [GL_FLOAT_MAT4x3]: [GL_FLOAT, 16, 'mat4x3'] // 12\n};\n\n// Counts the number of complete primitives given a number of vertices and a drawMode\nexport function getPrimitiveDrawMode(drawMode) {\n switch (drawMode) {\n case GL_POINTS:\n return GL_POINTS;\n case GL_LINES:\n return GL_LINES;\n case GL_LINE_STRIP:\n return GL_LINES;\n case GL_LINE_LOOP:\n return GL_LINES;\n case GL_TRIANGLES:\n return GL_TRIANGLES;\n case GL_TRIANGLE_STRIP:\n return GL_TRIANGLES;\n case GL_TRIANGLE_FAN:\n return GL_TRIANGLES;\n default:\n assert(false);\n return 0;\n }\n}\n\n// Counts the number of complete \"primitives\" given a number of vertices and a drawMode\nexport function getPrimitiveCount({drawMode, vertexCount}) {\n switch (drawMode) {\n case GL_POINTS:\n case GL_LINE_LOOP:\n return vertexCount;\n case GL_LINES:\n return vertexCount / 2;\n case GL_LINE_STRIP:\n return vertexCount - 1;\n case GL_TRIANGLES:\n return vertexCount / 3;\n case GL_TRIANGLE_STRIP:\n case GL_TRIANGLE_FAN:\n return vertexCount - 2;\n default:\n assert(false);\n return 0;\n }\n}\n\n// Counts the number of vertices after splitting the vertex stream into separate \"primitives\"\nexport function getVertexCount({drawMode, vertexCount}) {\n const primitiveCount = getPrimitiveCount({drawMode, vertexCount});\n switch (getPrimitiveDrawMode(drawMode)) {\n case GL_POINTS:\n return primitiveCount;\n case GL_LINES:\n return primitiveCount * 2;\n case GL_TRIANGLES:\n return primitiveCount * 3;\n default:\n assert(false);\n return 0;\n }\n}\n\n// Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3)\nexport function decomposeCompositeGLType(compositeGLType) {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLType(type, components) {\n switch (type) {\n case GL_BYTE:\n case GL_UNSIGNED_BYTE:\n case GL_SHORT:\n case GL_UNSIGNED_SHORT:\n type = GL_FLOAT;\n break;\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return {glType, name};\n }\n }\n return null;\n}\n","import {assert} from '../utils/assert';\n\n// Resolve a WebGL enumeration name (returns itself if already a number)\nexport function getKeyValue(gl, name) {\n // If not a string, return (assume number)\n if (typeof name !== 'string') {\n return name;\n }\n\n // If string converts to number, return number\n const number = Number(name);\n if (!isNaN(number)) {\n return number;\n }\n\n // Look up string, after removing any 'GL.' or 'gl.' prefix\n name = name.replace(/^.*\\./, '');\n const value = gl[name];\n assert(value !== undefined, `Accessing undefined constant GL.${name}`);\n return value;\n}\n\nexport function getKey(gl, value) {\n value = Number(value);\n for (const key in gl) {\n if (gl[key] === value) {\n return `GL.${key}`;\n }\n }\n return String(value);\n}\n\nexport function getKeyType(gl, value) {\n assert(value !== undefined, 'undefined key');\n value = Number(value);\n for (const key in gl) {\n if (gl[key] === value) {\n return `GL.${key}`;\n }\n }\n return String(value);\n}\n","// TODO: Two subdirectories must not depend on each other (classes vs utils)!\nimport Texture2D from '../classes/texture-2d';\nimport TextureCube from '../classes/texture-cube';\nimport Texture3D from '../classes/texture-3d';\nimport Framebuffer from '../classes/framebuffer';\nimport GL from '@luma.gl/constants';\nimport {assert} from '../utils/assert';\n\n// Clone a new texture object from a reference texture object.\n/** @type {import('./texture-utils').cloneTextureFrom} */\nexport function cloneTextureFrom(refTexture, overrides) {\n assert(\n refTexture instanceof Texture2D ||\n refTexture instanceof TextureCube ||\n refTexture instanceof Texture3D\n );\n\n const TextureType = refTexture.constructor;\n\n // @ts-expect-error\n const {gl, width, height, format, type, dataFormat, border, mipmaps} = refTexture;\n\n const textureOptions = Object.assign(\n {\n width,\n height,\n format,\n type,\n dataFormat,\n border,\n mipmaps\n },\n overrides\n );\n\n // TODO: move this to `Texture` class as instance method and use this.constructor\n // @ts-expect-error\n return new TextureType(gl, textureOptions);\n}\n\n// Wraps a given texture into a framebuffer object, that can be further used\n// to read data from the texture object.\n/** @type {import('./texture-utils').toFramebuffer} */\nexport function toFramebuffer(texture, opts) {\n const {gl, width, height, id} = texture;\n const framebuffer = new Framebuffer(\n gl,\n Object.assign({}, opts, {\n id: `framebuffer-for-${id}`,\n width,\n height,\n attachments: {\n [GL.COLOR_ATTACHMENT0]: texture\n }\n })\n );\n return framebuffer;\n}\n","import GL from '@luma.gl/constants';\n\nconst ERR_TYPE_DEDUCTION = 'Failed to deduce GL constant from typed array';\n\n// Converts TYPED ARRAYS to corresponding GL constant\n// Used to auto deduce gl parameter types\nexport function getGLTypeFromTypedArray(arrayOrType) {\n // If typed array, look up constructor\n const type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;\n switch (type) {\n case Float32Array:\n return GL.FLOAT;\n case Uint16Array:\n return GL.UNSIGNED_SHORT;\n case Uint32Array:\n return GL.UNSIGNED_INT;\n case Uint8Array:\n return GL.UNSIGNED_BYTE;\n case Uint8ClampedArray:\n return GL.UNSIGNED_BYTE;\n case Int8Array:\n return GL.BYTE;\n case Int16Array:\n return GL.SHORT;\n case Int32Array:\n return GL.INT;\n default:\n throw new Error(ERR_TYPE_DEDUCTION);\n }\n}\n\n// Converts GL constant to corresponding TYPED ARRAY\n// Used to auto deduce gl parameter types\n\n/* eslint-disable complexity */\nexport function getTypedArrayFromGLType(glType, {clamped = true} = {}) {\n // Sorted in some order of likelihood to reduce amount of comparisons\n switch (glType) {\n case GL.FLOAT:\n return Float32Array;\n case GL.UNSIGNED_SHORT:\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return Uint16Array;\n case GL.UNSIGNED_INT:\n return Uint32Array;\n case GL.UNSIGNED_BYTE:\n return clamped ? Uint8ClampedArray : Uint8Array;\n case GL.BYTE:\n return Int8Array;\n case GL.SHORT:\n return Int16Array;\n case GL.INT:\n return Int32Array;\n default:\n throw new Error('Failed to deduce typed array type from GL constant');\n }\n}\n/* eslint-enable complexity */\n\n// Flip rows (can be used on arrays returned from `Framebuffer.readPixels`)\n// https://stackoverflow.com/questions/41969562/\n// how-can-i-flip-the-result-of-webglrenderingcontext-readpixels\nexport function flipRows({data, width, height, bytesPerPixel = 4, temp}) {\n const bytesPerRow = width * bytesPerPixel;\n\n // make a temp buffer to hold one row\n temp = temp || new Uint8Array(bytesPerRow);\n for (let y = 0; y < height / 2; ++y) {\n const topOffset = y * bytesPerRow;\n const bottomOffset = (height - y - 1) * bytesPerRow;\n // make copy of a row on the top half\n temp.set(data.subarray(topOffset, topOffset + bytesPerRow));\n // copy a row from the bottom half to the top\n data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);\n // copy the copy of the top half row to the bottom half\n data.set(temp, bottomOffset);\n }\n}\n\nexport function scalePixels({data, width, height}) {\n const newWidth = Math.round(width / 2);\n const newHeight = Math.round(height / 2);\n const newData = new Uint8Array(newWidth * newHeight * 4);\n for (let y = 0; y < newHeight; y++) {\n for (let x = 0; x < newWidth; x++) {\n for (let c = 0; c < 4; c++) {\n newData[(y * newWidth + x) * 4 + c] = data[(y * 2 * width + x * 2) * 4 + c];\n }\n }\n }\n return {data: newData, width: newWidth, height: newHeight};\n}\n","// math.gl, MIT License\nimport {NumericArray} from '@math.gl/types';\nimport {ConfigurationOptions, config, formatValue, equals, isArray} from '../../lib/common';\n\n/** Base class for vectors and matrices */\nexport default abstract class MathArray extends Array {\n /** Number of elements (values) in this array */\n abstract get ELEMENTS(): number;\n\n abstract copy(vector: Readonly): this;\n\n abstract fromObject(object: object): this;\n\n // Common methods\n\n /**\n * Clone the current object\n * @returns a new copy of this object\n */\n clone(): this {\n // @ts-expect-error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.\n return new this.constructor().copy(this); // eslint-disable-line\n }\n\n fromArray(array: Readonly, offset: number = 0): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = array[i + offset];\n }\n return this.check();\n }\n\n toArray(targetArray: TypedArray, offset?: number): TypedArray;\n toArray(targetArray?: number[], offset?: number): NumericArray;\n\n toArray(targetArray: NumericArray = [], offset: number = 0): NumericArray {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n targetArray[offset + i] = this[i];\n }\n return targetArray;\n }\n\n from(arrayOrObject: Readonly | object): this {\n return Array.isArray(arrayOrObject) ? this.copy(arrayOrObject) : this.fromObject(arrayOrObject);\n }\n\n to(arrayOrObject: T): T {\n // @ts-ignore\n if (arrayOrObject === this) {\n return this;\n }\n // @ts-expect-error TS2339: Property 'toObject' does not exist on type 'MathArray'.\n return isArray(arrayOrObject) ? this.toArray(arrayOrObject) : this.toObject(arrayOrObject);\n }\n\n toTarget(target: this): this {\n return target ? this.to(target) : this;\n }\n\n /** @deprecated */\n toFloat32Array(): Float32Array {\n return new Float32Array(this);\n }\n\n toString(): string {\n return this.formatString(config);\n }\n\n /** Formats string according to options */\n formatString(opts: ConfigurationOptions): string {\n let string = '';\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += (i > 0 ? ', ' : '') + formatValue(this[i], opts);\n }\n return `${opts.printTypes ? this.constructor.name : ''}[${string}]`;\n }\n\n equals(array: Readonly): boolean {\n if (!array || this.length !== array.length) {\n return false;\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (!equals(this[i], array[i])) {\n return false;\n }\n }\n return true;\n }\n\n exactEquals(array: Readonly): boolean {\n if (!array || this.length !== array.length) {\n return false;\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n if (this[i] !== array[i]) {\n return false;\n }\n }\n return true;\n }\n\n // Modifiers\n\n /** Negates all values in this object */\n negate(): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = -this[i];\n }\n return this.check();\n }\n\n /** Linearly interpolates between two values */\n lerp(a: Readonly, t: number): this;\n lerp(a: Readonly, b: Readonly, t: number): this;\n\n lerp(a: Readonly, b: Readonly | number, t?: number): this {\n if (t === undefined) {\n return this.lerp(this, a, b as number);\n }\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const ai = a[i];\n this[i] = ai + t * (b[i] - ai);\n }\n return this.check();\n }\n\n /** Minimal */\n min(vector: Readonly): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(vector[i], this[i]);\n }\n return this.check();\n }\n\n /** Maximal */\n max(vector: Readonly): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.max(vector[i], this[i]);\n }\n return this.check();\n }\n\n clamp(minVector: Readonly, maxVector: Readonly): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], minVector[i]), maxVector[i]);\n }\n return this.check();\n }\n\n add(...vectors: Readonly[]): this {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += vector[i];\n }\n }\n return this.check();\n }\n\n subtract(...vectors: Readonly[]): this {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] -= vector[i];\n }\n }\n return this.check();\n }\n\n scale(scale: number | Readonly): this {\n if (typeof scale === 'number') {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scale;\n }\n } else {\n for (let i = 0; i < this.ELEMENTS && i < scale.length; ++i) {\n this[i] *= scale[i];\n }\n }\n return this.check();\n }\n\n /**\n * Multiplies all elements by `scale`\n * Note: `Matrix4.multiplyByScalar` only scales its 3x3 \"minor\"\n */\n multiplyByScalar(scalar: number): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n return this.check();\n }\n\n // Debug checks\n\n /** Throws an error if array length is incorrect or contains illegal values */\n check(): this {\n if (config.debug && !this.validate()) {\n throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);\n }\n return this;\n }\n\n /** Returns false if the array length is incorrect or contains illegal values */\n validate(): boolean {\n let valid = this.length === this.ELEMENTS;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n valid = valid && Number.isFinite(this[i]);\n }\n return valid;\n }\n\n // three.js compatibility\n\n /** @deprecated */\n sub(a: Readonly): this {\n return this.subtract(a);\n }\n\n /** @deprecated */\n setScalar(a: number): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = a;\n }\n return this.check();\n }\n\n /** @deprecated */\n addScalar(a: number): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] += a;\n }\n return this.check();\n }\n\n /** @deprecated */\n subScalar(a: number): this {\n return this.addScalar(-a);\n }\n\n /** @deprecated */\n multiplyScalar(scalar: number): this {\n // Multiplies all elements\n // `Matrix4.scale` only scales its 3x3 \"minor\"\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= scalar;\n }\n return this.check();\n }\n\n /** @deprecated */\n divideScalar(a: number): this {\n return this.multiplyByScalar(1 / a);\n }\n\n /** @deprecated */\n clampScalar(min: number, max: number): this {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] = Math.min(Math.max(this[i], min), max);\n }\n return this.check();\n }\n\n /** @deprecated */\n get elements(): NumericArray {\n return this;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport {NumericArray} from '@math.gl/types';\nimport MathArray from './math-array';\nimport {checkNumber} from '../../lib/validators';\nimport {config} from '../../lib/common';\n\n/** Base class for matrices */\nexport default abstract class Matrix extends MathArray {\n abstract get RANK(): number;\n\n // fromObject(object) {\n // const array = object.elements;\n // return this.fromRowMajor(array);\n // }\n // toObject(object) {\n // const array = object.elements;\n // this.toRowMajor(array);\n // return object;\n // }\n\n // TODO better override formatString?\n toString(): string {\n let string = '[';\n if (config.printRowMajor) {\n string += 'row-major:';\n for (let row = 0; row < this.RANK; ++row) {\n for (let col = 0; col < this.RANK; ++col) {\n string += ` ${this[col * this.RANK + row]}`;\n }\n }\n } else {\n string += 'column-major:';\n for (let i = 0; i < this.ELEMENTS; ++i) {\n string += ` ${this[i]}`;\n }\n }\n string += ']';\n return string;\n }\n\n getElementIndex(row: number, col: number): number {\n return col * this.RANK + row;\n }\n\n // By default assumes row major indices\n getElement(row: number, col: number): number {\n return this[col * this.RANK + row];\n }\n\n // By default assumes row major indices\n setElement(row: number, col: number, value: number): this {\n this[col * this.RANK + row] = checkNumber(value);\n return this;\n }\n getColumn(columnIndex: number, result: NumArrayT): NumArrayT;\n getColumn(columnIndex: number): number[];\n\n getColumn(columnIndex: number, result: number[] = new Array(this.RANK).fill(-0)): number[] {\n const firstIndex = columnIndex * this.RANK;\n for (let i = 0; i < this.RANK; ++i) {\n result[i] = this[firstIndex + i];\n }\n return result;\n }\n\n setColumn(columnIndex: number, columnVector: Readonly): this {\n const firstIndex = columnIndex * this.RANK;\n for (let i = 0; i < this.RANK; ++i) {\n this[firstIndex + i] = columnVector[i];\n }\n return this;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport {NumericArray} from '@math.gl/types';\nimport MathArray from './math-array';\nimport {checkNumber} from '../../lib/validators';\nimport assert from '../../lib/assert';\n\n/** Base class for vectors with at least 2 elements */\nexport default abstract class Vector extends MathArray {\n // ACCESSORS\n\n get x(): number {\n return this[0];\n }\n\n set x(value: number) {\n this[0] = checkNumber(value);\n }\n\n get y(): number {\n return this[1];\n }\n\n set y(value: number) {\n this[1] = checkNumber(value);\n }\n\n /**\n * Returns the length of the vector from the origin to the point described by this vector\n *\n * @note `length` is a reserved word for Arrays, so `v.length()` will return number of elements\n * Instead we provide `len` and `magnitude`\n */\n len(): number {\n return Math.sqrt(this.lengthSquared());\n }\n\n /**\n * Returns the length of the vector from the origin to the point described by this vector\n */\n magnitude(): number {\n return this.len();\n }\n\n /**\n * Returns the squared length of the vector from the origin to the point described by this vector\n */\n lengthSquared(): number {\n let length = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n length += this[i] * this[i];\n }\n return length;\n }\n\n /**\n * Returns the squared length of the vector from the origin to the point described by this vector\n */\n magnitudeSquared(): number {\n return this.lengthSquared();\n }\n\n distance(mathArray: Readonly): number {\n return Math.sqrt(this.distanceSquared(mathArray));\n }\n\n distanceSquared(mathArray: Readonly): number {\n let length = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n const dist = this[i] - mathArray[i];\n length += dist * dist;\n }\n return checkNumber(length);\n }\n\n dot(mathArray: Readonly): number {\n let product = 0;\n for (let i = 0; i < this.ELEMENTS; ++i) {\n product += this[i] * mathArray[i];\n }\n return checkNumber(product);\n }\n\n // MODIFIERS\n\n normalize(): this {\n const length = this.magnitude();\n if (length !== 0) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= length;\n }\n }\n return this.check();\n }\n\n multiply(...vectors: Readonly[]): this {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] *= vector[i];\n }\n }\n return this.check();\n }\n\n divide(...vectors: Readonly[]): this {\n for (const vector of vectors) {\n for (let i = 0; i < this.ELEMENTS; ++i) {\n this[i] /= vector[i];\n }\n }\n return this.check();\n }\n\n // THREE.js compatibility\n\n lengthSq(): number {\n return this.lengthSquared();\n }\n distanceTo(vector: Readonly): number {\n return this.distance(vector);\n }\n distanceToSquared(vector: Readonly): number {\n return this.distanceSquared(vector);\n }\n\n getComponent(i: number): number {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n return checkNumber(this[i]);\n }\n\n setComponent(i: number, value: number): this {\n assert(i >= 0 && i < this.ELEMENTS, 'index is out of range');\n this[i] = value;\n return this.check();\n }\n\n addVectors(a: Readonly, b: Readonly): this {\n return this.copy(a).add(b);\n }\n\n subVectors(a: Readonly, b: Readonly): this {\n return this.copy(a).subtract(b);\n }\n\n multiplyVectors(a: Readonly, b: Readonly): this {\n return this.copy(a).multiply(b);\n }\n\n addScaledVector(a: Readonly, b: number): this {\n // @ts-expect-error error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.\n return this.add(new this.constructor(a).multiplyScalar(b));\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport Matrix from './base/matrix';\nimport {checkVector} from '../lib/validators';\n/* eslint-disable camelcase */\nimport {vec4_transformMat3} from '../lib/gl-matrix-extras';\nimport * as mat3 from 'gl-matrix/mat3';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport {NumericArray} from '@math.gl/types';\n\nenum INDICES {\n COL0ROW0 = 0,\n COL0ROW1 = 1,\n COL0ROW2 = 2,\n COL1ROW0 = 3,\n COL1ROW1 = 4,\n COL1ROW2 = 5,\n COL2ROW0 = 6,\n COL2ROW1 = 7,\n COL2ROW2 = 8\n}\n\nconst IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 1, 0, 0, 0, 1]);\n\nexport default class Matrix3 extends Matrix {\n static get IDENTITY(): Readonly {\n return getIdentityMatrix();\n }\n\n static get ZERO(): Readonly {\n return getZeroMatrix();\n }\n\n get ELEMENTS(): number {\n return 9;\n }\n\n get RANK(): number {\n return 3;\n }\n\n get INDICES(): typeof INDICES {\n return INDICES;\n }\n\n constructor(array?: Readonly);\n /** @deprecated */\n constructor(...args: number[]);\n\n constructor(array?: number | Readonly, ...args: number[]) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0, -0, -0, -0, -0, -0, -0);\n if (arguments.length === 1 && Array.isArray(array)) {\n this.copy(array);\n } else if (args.length > 0) {\n this.copy([array as number, ...args]);\n } else {\n this.identity();\n }\n }\n\n copy(array: Readonly): this {\n // Element wise copy for performance\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n this[4] = array[4];\n this[5] = array[5];\n this[6] = array[6];\n this[7] = array[7];\n this[8] = array[8];\n return this.check();\n }\n\n // Constructors\n\n identity(): this {\n return this.copy(IDENTITY_MATRIX);\n }\n\n /**\n *\n * @param object\n * @returns self\n */\n fromObject(object: {[key: string]: any}): this {\n return this.check();\n }\n\n // Calculates a 3x3 matrix from the given quaternion\n // q quat Quaternion to create matrix from\n fromQuaternion(q: Readonly): this {\n mat3.fromQuat(this, q);\n return this.check();\n }\n\n /**\n * accepts column major order, stores in column major order\n */\n // eslint-disable-next-line max-params\n set(\n m00: number,\n m10: number,\n m20: number,\n m01: number,\n m11: number,\n m21: number,\n m02: number,\n m12: number,\n m22: number\n ): this {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m01;\n this[4] = m11;\n this[5] = m21;\n this[6] = m02;\n this[7] = m12;\n this[8] = m22;\n return this.check();\n }\n\n /**\n * accepts row major order, stores as column major\n */\n // eslint-disable-next-line max-params\n setRowMajor(\n m00: number,\n m01: number,\n m02: number,\n m10: number,\n m11: number,\n m12: number,\n m20: number,\n m21: number,\n m22: number\n ): this {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m01;\n this[4] = m11;\n this[5] = m21;\n this[6] = m02;\n this[7] = m12;\n this[8] = m22;\n return this.check();\n }\n\n // Accessors\n\n determinant(): number {\n return mat3.determinant(this);\n }\n\n // Modifiers\n transpose(): this {\n mat3.transpose(this, this);\n return this.check();\n }\n\n /** Invert a matrix. Note that this can fail if the matrix is not invertible */\n invert(): this {\n mat3.invert(this, this);\n return this.check();\n }\n\n // Operations\n multiplyLeft(a: NumericArray): this {\n mat3.multiply(this, a, this);\n return this.check();\n }\n\n multiplyRight(a: NumericArray): this {\n mat3.multiply(this, this, a);\n return this.check();\n }\n\n rotate(radians: number): NumericArray {\n mat3.rotate(this, this, radians);\n return this.check();\n }\n\n scale(factor: NumericArray | number): this {\n if (Array.isArray(factor)) {\n mat3.scale(this, this, factor);\n } else {\n mat3.scale(this, this, [factor as number, factor as number]);\n }\n return this.check();\n }\n\n translate(vec: NumericArray): this {\n mat3.translate(this, this, vec);\n return this.check();\n }\n\n // Transforms\n transform(vector: Readonly, result?: NumericArray): NumericArray {\n let out: NumericArray;\n switch (vector.length) {\n case 2:\n out = vec2.transformMat3(result || [-0, -0], vector, this);\n break;\n case 3:\n out = vec3.transformMat3(result || [-0, -0, -0], vector, this);\n break;\n case 4:\n out = vec4_transformMat3(result || [-0, -0, -0, -0], vector, this);\n break;\n default:\n throw new Error('Illegal vector');\n }\n checkVector(out, vector.length);\n return out;\n }\n\n /** @deprecated */\n transformVector(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transform(vector, result);\n }\n\n /** @deprecated */\n transformVector2(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transform(vector, result);\n }\n\n /** @deprecated */\n transformVector3(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transform(vector, result);\n }\n}\n\nlet ZERO_MATRIX3;\nlet IDENTITY_MATRIX3;\n\nfunction getZeroMatrix(): Readonly {\n if (!ZERO_MATRIX3) {\n ZERO_MATRIX3 = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n Object.freeze(ZERO_MATRIX3);\n }\n return ZERO_MATRIX3;\n}\n\nfunction getIdentityMatrix(): Matrix3 {\n if (!IDENTITY_MATRIX3) {\n IDENTITY_MATRIX3 = new Matrix3();\n Object.freeze(IDENTITY_MATRIX3);\n }\n return IDENTITY_MATRIX3;\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport Matrix from './base/matrix';\nimport {NumericArray} from '@math.gl/types';\nimport {checkVector} from '../lib/validators';\n\n/* eslint-disable camelcase */\nimport {vec2_transformMat4AsVector, vec3_transformMat4AsVector} from '../lib/gl-matrix-extras';\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport * as vec4 from 'gl-matrix/vec4';\n\nenum INDICES {\n COL0ROW0 = 0,\n COL0ROW1 = 1,\n COL0ROW2 = 2,\n COL0ROW3 = 3,\n COL1ROW0 = 4,\n COL1ROW1 = 5,\n COL1ROW2 = 6,\n COL1ROW3 = 7,\n COL2ROW0 = 8,\n COL2ROW1 = 9,\n COL2ROW2 = 10,\n COL2ROW3 = 11,\n COL3ROW0 = 12,\n COL3ROW1 = 13,\n COL3ROW2 = 14,\n COL3ROW3 = 15\n}\n\nconst DEFAULT_FOVY = (45 * Math.PI) / 180;\nconst DEFAULT_ASPECT = 1;\nconst DEFAULT_NEAR = 0.1;\nconst DEFAULT_FAR = 500;\n\nconst IDENTITY_MATRIX = Object.freeze([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n\n/** 4x4 matrix */\nexport default class Matrix4 extends Matrix {\n static get IDENTITY(): Readonly {\n return getIdentityMatrix();\n }\n\n static get ZERO(): Readonly {\n return getZeroMatrix();\n }\n\n get ELEMENTS(): number {\n return 16;\n }\n\n get RANK(): number {\n return 4;\n }\n\n get INDICES(): typeof INDICES {\n return INDICES;\n }\n\n constructor(array?: Readonly) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0);\n if (arguments.length === 1 && Array.isArray(array)) {\n this.copy(array);\n } else {\n this.identity();\n }\n }\n\n copy(array: Readonly): this {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n this[4] = array[4];\n this[5] = array[5];\n this[6] = array[6];\n this[7] = array[7];\n this[8] = array[8];\n this[9] = array[9];\n this[10] = array[10];\n this[11] = array[11];\n this[12] = array[12];\n this[13] = array[13];\n this[14] = array[14];\n this[15] = array[15];\n return this.check();\n }\n\n // eslint-disable-next-line max-params\n set(\n m00: number,\n m10: number,\n m20: number,\n m30: number,\n m01: number,\n m11: number,\n m21: number,\n m31: number,\n m02: number,\n m12: number,\n m22: number,\n m32: number,\n m03: number,\n m13: number,\n m23: number,\n m33: number\n ): this {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n\n // accepts row major order, stores as column major\n // eslint-disable-next-line max-params\n setRowMajor(\n m00: number,\n m01: number,\n m02: number,\n m03: number,\n m10: number,\n m11: number,\n m12: number,\n m13: number,\n m20: number,\n m21: number,\n m22: number,\n m23: number,\n m30: number,\n m31: number,\n m32: number,\n m33: number\n ): this {\n this[0] = m00;\n this[1] = m10;\n this[2] = m20;\n this[3] = m30;\n this[4] = m01;\n this[5] = m11;\n this[6] = m21;\n this[7] = m31;\n this[8] = m02;\n this[9] = m12;\n this[10] = m22;\n this[11] = m32;\n this[12] = m03;\n this[13] = m13;\n this[14] = m23;\n this[15] = m33;\n return this.check();\n }\n\n toRowMajor(result: NumericArray): NumericArray {\n result[0] = this[0];\n result[1] = this[4];\n result[2] = this[8];\n result[3] = this[12];\n result[4] = this[1];\n result[5] = this[5];\n result[6] = this[9];\n result[7] = this[13];\n result[8] = this[2];\n result[9] = this[6];\n result[10] = this[10];\n result[11] = this[14];\n result[12] = this[3];\n result[13] = this[7];\n result[14] = this[11];\n result[15] = this[15];\n return result;\n }\n\n // Constructors\n\n /** Set to identity matrix */\n identity(): this {\n return this.copy(IDENTITY_MATRIX);\n }\n\n /**\n *\n * @param object\n * @returns self\n */\n fromObject(object: {[key: string]: any}): this {\n return this.check();\n }\n\n /**\n * Calculates a 4x4 matrix from the given quaternion\n * @param quaternion Quaternion to create matrix from\n * @returns self\n */\n fromQuaternion(quaternion: Readonly): this {\n mat4.fromQuat(this, quaternion);\n return this.check();\n }\n\n /**\n * Generates a frustum matrix with the given bounds\n * @param view.left - Left bound of the frustum\n * @param view.right - Right bound of the frustum\n * @param view.bottom - Bottom bound of the frustum\n * @param view.top - Top bound of the frustum\n * @param view.near - Near bound of the frustum\n * @param view.far - Far bound of the frustum. Can be set to Infinity.\n * @returns self\n */\n frustum(view: {\n left: number;\n right: number;\n bottom: number;\n top: number;\n near: number;\n far?: number;\n }): this {\n const {left, right, bottom, top, near = DEFAULT_NEAR, far = DEFAULT_FAR} = view;\n if (far === Infinity) {\n computeInfinitePerspectiveOffCenter(this, left, right, bottom, top, near);\n } else {\n mat4.frustum(this, left, right, bottom, top, near, far);\n }\n return this.check();\n }\n\n /**\n * Generates a look-at matrix with the given eye position, focal point,\n * and up axis\n * @param view.eye - (vector) Position of the viewer\n * @param view.center - (vector) Point the viewer is looking at\n * @param view.up - (vector) Up axis\n * @returns self\n */\n lookAt(view: {\n eye: Readonly;\n center?: Readonly;\n up?: Readonly;\n }): this {\n const {eye, center = [0, 0, 0], up = [0, 1, 0]} = view;\n mat4.lookAt(this, eye, center, up);\n return this.check();\n }\n\n /**\n * Generates a orthogonal projection matrix with the given bounds\n * from \"traditional\" view space parameters\n * @param view.left - Left bound of the frustum\n * @param view.right number Right bound of the frustum\n * @param view.bottom - Bottom bound of the frustum\n * @param view.top number Top bound of the frustum\n * @param view.near - Near bound of the frustum\n * @param view.far number Far bound of the frustum\n * @returns self\n */\n ortho(view: {\n left: number;\n right: number;\n bottom: number;\n top: number;\n near?: number;\n far?: number;\n }): this {\n const {left, right, bottom, top, near = DEFAULT_NEAR, far = DEFAULT_FAR} = view;\n mat4.ortho(this, left, right, bottom, top, near, far);\n return this.check();\n }\n\n /**\n * Generates an orthogonal projection matrix with the same parameters\n * as a perspective matrix (plus focalDistance)\n * @param view.fovy Vertical field of view in radians\n * @param view.aspect Aspect ratio. Typically viewport width / viewport height\n * @param view.focalDistance Distance in the view frustum used for extent calculations\n * @param view.near Near bound of the frustum\n * @param view.far Far bound of the frustum\n * @returns self\n */\n orthographic(view: {\n fovy?: number;\n aspect?: number;\n focalDistance?: number;\n near?: number;\n far?: number;\n }): this {\n const {\n fovy = DEFAULT_FOVY,\n aspect = DEFAULT_ASPECT,\n focalDistance = 1,\n near = DEFAULT_NEAR,\n far = DEFAULT_FAR\n } = view;\n\n checkRadians(fovy);\n\n const halfY = fovy / 2;\n const top = focalDistance * Math.tan(halfY); // focus_plane is the distance from the camera\n const right = top * aspect;\n\n return this.ortho({\n left: -right,\n right,\n bottom: -top,\n top,\n near,\n far\n });\n }\n\n /**\n * Generates a perspective projection matrix with the given bounds\n * @param view.fovy Vertical field of view in radians\n * @param view.aspect Aspect ratio. typically viewport width/height\n * @param view.near Near bound of the frustum\n * @param view.far Far bound of the frustum\n * @returns self\n */\n perspective(view: {fovy: number; aspect?: number; near?: number; far?: number}): this {\n const {fovy = (45 * Math.PI) / 180, aspect = 1, near = 0.1, far = 500} = view;\n checkRadians(fovy);\n mat4.perspective(this, fovy, aspect, near, far);\n return this.check();\n }\n\n // Accessors\n\n determinant(): number {\n return mat4.determinant(this);\n }\n\n /**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n * The scales are the \"lengths\" of the column vectors in the upper-left 3x3 matrix.\n * @param result\n * @returns self\n */\n getScale(result: NumericArray = [-0, -0, -0]): NumericArray {\n // explicit is faster than hypot...\n result[0] = Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);\n result[1] = Math.sqrt(this[4] * this[4] + this[5] * this[5] + this[6] * this[6]);\n result[2] = Math.sqrt(this[8] * this[8] + this[9] * this[9] + this[10] * this[10]);\n // result[0] = Math.hypot(this[0], this[1], this[2]);\n // result[1] = Math.hypot(this[4], this[5], this[6]);\n // result[2] = Math.hypot(this[8], this[9], this[10]);\n return result;\n }\n\n /**\n * Gets the translation portion, assuming the matrix is a affine transformation matrix.\n * @param result\n * @returns self\n */\n getTranslation(result: NumericArray = [-0, -0, -0]): NumericArray {\n result[0] = this[12];\n result[1] = this[13];\n result[2] = this[14];\n return result;\n }\n\n /**\n * Gets upper left 3x3 pure rotation matrix (non-scaling), assume affine transformation matrix\n * @param result\n * @param scaleResult\n * @returns self\n */\n getRotation(result?: NumericArray, scaleResult?: NumericArray): NumericArray {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = 0;\n result[4] = this[4] * inverseScale0;\n result[5] = this[5] * inverseScale1;\n result[6] = this[6] * inverseScale2;\n result[7] = 0;\n result[8] = this[8] * inverseScale0;\n result[9] = this[9] * inverseScale1;\n result[10] = this[10] * inverseScale2;\n result[11] = 0;\n result[12] = 0;\n result[13] = 0;\n result[14] = 0;\n result[15] = 1;\n return result;\n }\n\n /**\n *\n * @param result\n * @param scaleResult\n * @returns self\n */\n getRotationMatrix3(result?: NumericArray, scaleResult?: NumericArray): NumericArray {\n result = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0];\n scaleResult = scaleResult || [-0, -0, -0];\n const scale = this.getScale(scaleResult);\n const inverseScale0 = 1 / scale[0];\n const inverseScale1 = 1 / scale[1];\n const inverseScale2 = 1 / scale[2];\n result[0] = this[0] * inverseScale0;\n result[1] = this[1] * inverseScale1;\n result[2] = this[2] * inverseScale2;\n result[3] = this[4] * inverseScale0;\n result[4] = this[5] * inverseScale1;\n result[5] = this[6] * inverseScale2;\n result[6] = this[8] * inverseScale0;\n result[7] = this[9] * inverseScale1;\n result[8] = this[10] * inverseScale2;\n return result;\n }\n\n // Modifiers\n\n transpose(): this {\n mat4.transpose(this, this);\n return this.check();\n }\n\n invert(): this {\n mat4.invert(this, this);\n return this.check();\n }\n\n // Operations\n\n multiplyLeft(a: Readonly): this {\n mat4.multiply(this, a, this);\n return this.check();\n }\n\n multiplyRight(a: Readonly): this {\n mat4.multiply(this, this, a);\n return this.check();\n }\n\n // Rotates a matrix by the given angle around the X axis\n rotateX(radians: number): this {\n mat4.rotateX(this, this, radians);\n // mat4.rotate(this, this, radians, [1, 0, 0]);\n return this.check();\n }\n\n // Rotates a matrix by the given angle around the Y axis.\n rotateY(radians: number): this {\n mat4.rotateY(this, this, radians);\n // mat4.rotate(this, this, radians, [0, 1, 0]);\n return this.check();\n }\n\n /**\n * Rotates a matrix by the given angle around the Z axis.\n * @param radians\n * @returns self\n */\n rotateZ(radians: number): this {\n mat4.rotateZ(this, this, radians);\n // mat4.rotate(this, this, radians, [0, 0, 1]);\n return this.check();\n }\n\n /**\n *\n * @param param0\n * @returns self\n */\n rotateXYZ(angleXYZ: Readonly): this {\n return this.rotateX(angleXYZ[0]).rotateY(angleXYZ[1]).rotateZ(angleXYZ[2]);\n }\n\n /**\n *\n * @param radians\n * @param axis\n * @returns self\n */\n rotateAxis(radians: number, axis: Readonly): this {\n mat4.rotate(this, this, radians, axis);\n return this.check();\n }\n\n /**\n *\n * @param factor\n * @returns self\n */\n scale(factor: number | Readonly): this {\n mat4.scale(this, this, Array.isArray(factor) ? factor : [factor, factor, factor]);\n return this.check();\n }\n\n /**\n *\n * @param vec\n * @returns self\n */\n translate(vector: Readonly): this {\n mat4.translate(this, this, vector);\n return this.check();\n }\n\n // Transforms\n\n /**\n * Transforms any 2, 3 or 4 element vector. 2 and 3 elements are treated as points\n * @param vector\n * @param result\n * @returns self\n */\n transform(vector: Readonly, result?: NumericArray): NumericArray {\n if (vector.length === 4) {\n result = vec4.transformMat4(result || [-0, -0, -0, -0], vector, this);\n checkVector(result, 4);\n return result;\n }\n return this.transformAsPoint(vector, result);\n }\n\n /**\n * Transforms any 2 or 3 element array as point (w implicitly 1)\n * @param vector\n * @param result\n * @returns self\n */\n transformAsPoint(vector: Readonly, result?: NumericArray): NumericArray {\n const {length} = vector;\n let out: NumericArray;\n switch (length) {\n case 2:\n out = vec2.transformMat4(result || [-0, -0], vector, this);\n break;\n case 3:\n out = vec3.transformMat4(result || [-0, -0, -0], vector, this);\n break;\n default:\n throw new Error('Illegal vector');\n }\n checkVector(out, vector.length);\n return out;\n }\n\n /**\n * Transforms any 2 or 3 element array as vector (w implicitly 0)\n * @param vector\n * @param result\n * @returns self\n */\n transformAsVector(vector: Readonly, result?: NumericArray): NumericArray {\n let out: NumericArray;\n switch (vector.length) {\n case 2:\n out = vec2_transformMat4AsVector(result || [-0, -0], vector, this);\n break;\n case 3:\n out = vec3_transformMat4AsVector(result || [-0, -0, -0], vector, this);\n break;\n default:\n throw new Error('Illegal vector');\n }\n checkVector(out, vector.length);\n return out;\n }\n\n /** @deprecated */\n transformPoint(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transformAsPoint(vector, result);\n }\n\n /** @deprecated */\n transformVector(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transformAsPoint(vector, result);\n }\n\n /** @deprecated */\n transformDirection(vector: Readonly, result?: NumericArray): NumericArray {\n return this.transformAsVector(vector, result);\n }\n\n // three.js math API compatibility\n\n makeRotationX(radians: number): this {\n return this.identity().rotateX(radians);\n }\n\n makeTranslation(x: number, y: number, z: number): this {\n return this.identity().translate([x, y, z]);\n }\n}\n\n// TODO initializing static members directly is an option, but make sure no tree-shaking issues\nlet ZERO: Matrix4;\nlet IDENTITY: Matrix4;\n\nfunction getZeroMatrix(): Readonly {\n if (!ZERO) {\n ZERO = new Matrix4([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n Object.freeze(ZERO);\n }\n return ZERO;\n}\n\nfunction getIdentityMatrix(): Matrix4 {\n if (!IDENTITY) {\n IDENTITY = new Matrix4();\n Object.freeze(IDENTITY);\n }\n return IDENTITY;\n}\n\n// HELPER FUNCTIONS\n\nfunction checkRadians(possiblyDegrees: number) {\n if (possiblyDegrees > Math.PI * 2) {\n throw Error('expected radians');\n }\n}\n\n// eslint-disable-next-line max-params\nfunction computeInfinitePerspectiveOffCenter(\n result: NumericArray,\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number\n): NumericArray {\n const column0Row0 = (2 * near) / (right - left);\n const column1Row1 = (2 * near) / (top - bottom);\n const column2Row0 = (right + left) / (right - left);\n const column2Row1 = (top + bottom) / (top - bottom);\n const column2Row2 = -1;\n const column2Row3 = -1;\n const column3Row2 = -2 * near;\n result[0] = column0Row0;\n result[1] = 0;\n result[2] = 0;\n result[3] = 0;\n result[4] = 0;\n result[5] = column1Row1;\n result[6] = 0;\n result[7] = 0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = 0;\n result[13] = 0;\n result[14] = column3Row2;\n result[15] = 0;\n return result;\n}\n","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport MathArray from './base/math-array';\nimport {checkNumber, checkVector} from '../lib/validators';\nimport Vector4 from './vector4';\nimport * as quat from 'gl-matrix/quat';\nimport * as vec4 from 'gl-matrix/vec4';\nimport {NumericArray} from '@math.gl/types';\n\nconst IDENTITY_QUATERNION = [0, 0, 0, 1] as const;\n\nexport default class Quaternion extends MathArray {\n constructor(x: number | Readonly = 0, y = 0, z = 0, w = 1) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0, -0);\n // eslint-disable-next-line prefer-rest-params\n if (Array.isArray(x) && arguments.length === 1) {\n this.copy(x);\n } else {\n this.set(x as number, y, z, w);\n }\n }\n\n copy(array: Readonly): this {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n return this.check();\n }\n\n set(x: number, y: number, z: number, w: number): this {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n return this.check();\n }\n\n fromObject(object: {x: number; y: number; z: number; w: number}): this {\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n this[3] = object.w;\n return this.check();\n }\n\n /**\n * Creates a quaternion from the given 3x3 rotation matrix.\n * NOTE: The resultant quaternion is not normalized, so you should\n * be sure to renormalize the quaternion yourself where necessary.\n * @param m\n * @returns\n */\n fromMatrix3(m: Readonly): this {\n quat.fromMat3(this, m);\n return this.check();\n }\n\n fromAxisRotation(axis: Readonly, rad: number): this {\n quat.setAxisAngle(this, axis, rad);\n return this.check();\n }\n\n /** Set a quat to the identity quaternion */\n identity(): this {\n quat.identity(this);\n return this.check();\n }\n\n // Set the components of a quat to the given values\n // set(i, j, k, l) {\n // quat.set(this, i, j, k, l);\n // return this.check();\n // }\n\n // Sets a quat from the given angle and rotation axis, then returns it.\n setAxisAngle(axis: Readonly, rad: number): this {\n return this.fromAxisRotation(axis, rad);\n }\n\n // Getters/setters\n get ELEMENTS(): number {\n return 4;\n }\n\n get x(): number {\n return this[0];\n }\n set x(value: number) {\n this[0] = checkNumber(value);\n }\n\n get y(): number {\n return this[1];\n }\n set y(value: number) {\n this[1] = checkNumber(value);\n }\n\n get z(): number {\n return this[2];\n }\n set z(value: number) {\n this[2] = checkNumber(value);\n }\n\n get w(): number {\n return this[3];\n }\n set w(value: number) {\n this[3] = checkNumber(value);\n }\n\n // Calculates the length of a quat\n len(): number {\n return quat.length(this);\n }\n\n // Calculates the squared length of a quat\n lengthSquared(): number {\n return quat.squaredLength(this);\n }\n\n // Calculates the dot product of two quat's\n // @return {Number}\n dot(a: Readonly): number {\n return quat.dot(this, a);\n }\n\n // Gets the rotation axis and angle for a given quaternion.\n // If a quaternion is created with setAxisAngle, this method will\n // return the same values as providied in the original parameter\n // list OR functionally equivalent values.\n // Example: The quaternion formed by axis [0, 0, 1] and angle -90\n // is the same as the quaternion formed by [0, 0, 1] and 270.\n // This method favors the latter.\n // @return {{[x,y,z], Number}}\n // getAxisAngle() {\n // const axis = [];\n // const angle = quat.getAxisAngle(axis, this);\n // return {axis, angle};\n // }\n // MODIFIERS\n // Sets a quaternion to represent the shortest rotation from one vector\n // to another. Both vectors are assumed to be unit length.\n rotationTo(vectorA: NumericArray, vectorB: NumericArray): this {\n quat.rotationTo(this, vectorA, vectorB);\n return this.check();\n }\n\n // Sets the specified quaternion with values corresponding to the given axes.\n // Each axis is a vec3 and is expected to be unit length and perpendicular\n // to all other specified axes.\n // setAxes() {\n // Number\n // }\n // Performs a spherical linear interpolation with two control points\n // sqlerp() {\n // Number;\n // }\n // Adds two quat's\n add(a: Readonly): this {\n quat.add(this, this, a);\n return this.check();\n }\n\n // Calculates the W component of a quat from the X, Y, and Z components.\n // Any existing W component will be ignored.\n calculateW(): this {\n quat.calculateW(this, this);\n return this.check();\n }\n\n // Calculates the conjugate of a quat If the quaternion is normalized,\n // this function is faster than quat.inverse and produces the same result.\n conjugate(): this {\n quat.conjugate(this, this);\n return this.check();\n }\n\n // Calculates the inverse of a quat\n invert(): this {\n quat.invert(this, this);\n return this.check();\n }\n\n // Performs a linear interpolation between two quat's\n lerp(a: Readonly, b: Readonly | number, t?: number): this {\n if (t === undefined) {\n return this.lerp(this, a, b as number);\n }\n quat.lerp(this, a, b as NumericArray, t);\n return this.check();\n }\n\n // Multiplies two quat's\n multiplyRight(a: Readonly): this {\n quat.multiply(this, this, a);\n return this.check();\n }\n\n multiplyLeft(a: Readonly): this {\n quat.multiply(this, a, this);\n return this.check();\n }\n\n // Normalize a quat\n normalize(): this {\n // Handle 0 case\n const length = this.len();\n const l = length > 0 ? 1 / length : 0;\n this[0] = this[0] * l;\n this[1] = this[1] * l;\n this[2] = this[2] * l;\n this[3] = this[3] * l;\n // Set to [0, 0, 0, 1] if length is 0\n if (length === 0) {\n this[3] = 1;\n }\n return this.check();\n }\n\n // Rotates a quaternion by the given angle about the X axis\n rotateX(rad: number): this {\n quat.rotateX(this, this, rad);\n return this.check();\n }\n\n // Rotates a quaternion by the given angle about the Y axis\n rotateY(rad: number): this {\n quat.rotateY(this, this, rad);\n return this.check();\n }\n\n // Rotates a quaternion by the given angle about the Z axis\n rotateZ(rad: number): this {\n quat.rotateZ(this, this, rad);\n return this.check();\n }\n\n // Scales a quat by a scalar number\n scale(b: number): this {\n quat.scale(this, this, b);\n return this.check();\n }\n\n slerp(target: Readonly, ratio: number): this;\n slerp(start: Readonly, target: Readonly, ratio: number): this;\n slerp(params: {\n start: Readonly;\n target: Readonly;\n ratio: number;\n }): this;\n\n // Performs a spherical linear interpolation between two quat\n slerp(\n arg0:\n | Readonly\n | {\n start: Readonly;\n target: Readonly;\n ratio: number;\n },\n arg1?: Readonly | number,\n arg2?: number\n ): this {\n let start: Readonly;\n let target: Readonly;\n let ratio: number;\n // eslint-disable-next-line prefer-rest-params\n switch (arguments.length) {\n case 1: // Deprecated signature ({start, target, ratio})\n // eslint-disable-next-line prefer-rest-params\n ({\n start = IDENTITY_QUATERNION,\n target,\n ratio\n } = arg0 as {\n start: Readonly;\n target: Readonly;\n ratio: number;\n });\n break;\n case 2: // THREE.js compatibility signature (target, ration)\n start = this; // eslint-disable-line\n target = arg0 as Readonly;\n ratio = arg1 as number;\n break;\n default:\n // Default signature: (start, target, ratio)\n start = arg0 as Readonly;\n target = arg1 as Readonly;\n ratio = arg2;\n }\n quat.slerp(this, start, target, ratio);\n return this.check();\n }\n\n transformVector4(\n vector: Readonly,\n result: NumericArray = new Vector4()\n ): NumericArray {\n vec4.transformQuat(result, vector, this);\n return checkVector(result, 4);\n }\n\n // THREE.js Math API compatibility\n lengthSq(): number {\n return this.lengthSquared();\n }\n\n setFromAxisAngle(axis: Readonly, rad: number): this {\n return this.setAxisAngle(axis, rad);\n }\n\n premultiply(a: Readonly): this {\n return this.multiplyLeft(a);\n }\n\n multiply(a: Readonly): this {\n return this.multiplyRight(a);\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\n// Adaptation of THREE.js Spherical class, under MIT license\nimport Vector3 from './vector3';\nimport {formatValue, equals, config} from '../lib/common';\nimport {degrees, radians, clamp} from '../lib/common';\nimport * as vec3 from 'gl-matrix/vec3';\nimport {NumericArray} from '@math.gl/types';\n\ntype SphericalCoordinatesOptions = {\n phi?: number;\n theta?: number;\n radius?: number;\n bearing?: number;\n pitch?: number;\n altitude?: number;\n radiusScale?: number;\n};\n\ntype FormatOptions = {\n printTypes?: boolean;\n};\n\n// TODO - import epsilon\nconst EPSILON = 0.000001;\nconst EARTH_RADIUS_METERS = 6371000;\n\n/**\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n * @link https://en.wikipedia.org/wiki/Spherical_coordinate_system\n */\nexport default class SphericalCoordinates {\n phi: number;\n theta: number;\n radius: number;\n radiusScale: number;\n // bearing: number;\n // pitch: number;\n // altitude: number;\n\n // lnglatZ coordinates\n // longitude: number;\n // latitude: number;\n // lng: number;\n // lat: number;\n // z: number;\n\n /**\n * Creates a new SphericalCoordinates object\n * @param options\n * @param [options.phi] =0 - rotation around X (latitude)\n * @param [options.theta] =0 - rotation around Y (longitude)\n * @param [options.radius] =1 - Distance from center\n * @param [options.bearing]\n * @param [options.pitch]\n * @param [options.altitude]\n * @param [options.radiusScale] =1\n */\n // eslint-disable-next-line complexity\n constructor({\n phi = 0,\n theta = 0,\n radius = 1,\n bearing,\n pitch,\n altitude,\n radiusScale = EARTH_RADIUS_METERS\n }: SphericalCoordinatesOptions = {}) {\n this.phi = phi;\n this.theta = theta;\n // TODO - silently accepts illegal 0\n this.radius = radius || altitude || 1; // radial distance from center\n this.radiusScale = radiusScale || 1; // Used by lngLatZ\n if (bearing !== undefined) {\n this.bearing = bearing; // up / down towards top and bottom pole\n }\n if (pitch !== undefined) {\n this.pitch = pitch; // around the equator of the sphere\n }\n this.check();\n }\n\n toString(): string {\n return this.formatString(config);\n }\n\n formatString({printTypes = false}: FormatOptions): string {\n const f = formatValue;\n return `${printTypes ? 'Spherical' : ''}\\\n[rho:${f(this.radius)},theta:${f(this.theta)},phi:${f(this.phi)}]`;\n }\n\n equals(other: SphericalCoordinates): boolean {\n return (\n equals(this.radius, other.radius) &&\n equals(this.theta, other.theta) &&\n equals(this.phi, other.phi)\n );\n }\n\n exactEquals(other: SphericalCoordinates): boolean {\n return this.radius === other.radius && this.theta === other.theta && this.phi === other.phi;\n }\n\n /* eslint-disable brace-style */\n // Cartographic (bearing 0 north, pitch 0 look from above)\n get bearing(): number {\n return 180 - degrees(this.phi);\n }\n\n set bearing(v: number) {\n this.phi = Math.PI - radians(v);\n }\n\n get pitch(): number {\n return degrees(this.theta);\n }\n\n set pitch(v: number) {\n this.theta = radians(v);\n }\n\n // get pitch() { return 90 - degrees(this.phi); }\n // set pitch(v) { this.phi = radians(v) + Math.PI / 2; }\n // get altitude() { return this.radius - 1; } // relative altitude\n // lnglatZ coordinates\n get longitude(): number {\n return degrees(this.phi);\n }\n\n get latitude(): number {\n return degrees(this.theta);\n }\n\n get lng(): number {\n return degrees(this.phi);\n }\n\n get lat(): number {\n return degrees(this.theta);\n }\n\n get z(): number {\n return (this.radius - 1) * this.radiusScale;\n }\n\n /* eslint-enable brace-style */\n set(radius: number, phi: number, theta: number): this {\n this.radius = radius;\n this.phi = phi;\n this.theta = theta;\n return this.check();\n }\n\n clone(): SphericalCoordinates {\n return new SphericalCoordinates().copy(this);\n }\n\n copy(other: SphericalCoordinates): this {\n this.radius = other.radius;\n this.phi = other.phi;\n this.theta = other.theta;\n return this.check();\n }\n\n fromLngLatZ([lng, lat, z]: [number, number, number]): this {\n this.radius = 1 + z / this.radiusScale;\n this.phi = radians(lat);\n this.theta = radians(lng);\n return this.check();\n }\n\n fromVector3(v: Readonly): this {\n this.radius = vec3.length(v);\n if (this.radius > 0) {\n this.theta = Math.atan2(v[0], v[1]); // equator angle around y-up axis\n this.phi = Math.acos(clamp(v[2] / this.radius, -1, 1)); // polar angle\n }\n return this.check();\n }\n\n toVector3(): Vector3 {\n return new Vector3(0, 0, this.radius)\n .rotateX({radians: this.theta})\n .rotateZ({radians: this.phi});\n }\n\n // restrict phi to be betwee EPS and PI-EPS\n makeSafe(): this {\n this.phi = Math.max(EPSILON, Math.min(Math.PI - EPSILON, this.phi));\n return this;\n }\n\n check(): this {\n // this.makeSafe();\n if (!Number.isFinite(this.phi) || !Number.isFinite(this.theta) || !(this.radius > 0)) {\n throw new Error('SphericalCoordinates: some fields set to invalid numbers');\n }\n return this;\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport Vector from './base/vector';\nimport {config, isArray} from '../lib/common';\nimport {checkNumber} from '../lib/validators';\nimport * as vec2 from 'gl-matrix/vec2';\n/* eslint-disable camelcase */\nimport {vec2_transformMat4AsVector} from '../lib/gl-matrix-extras';\nimport {NumericArray} from '@math.gl/types';\n\n/**\n * Two-element vector class.\n * Subclass of Array\n */\nexport default class Vector2 extends Vector {\n // Creates a new, empty vec2\n constructor(x: number | Readonly = 0, y: number = 0) {\n // PERF NOTE: initialize elements as double precision numbers\n super(2); // -0, -0);\n if (isArray(x) && arguments.length === 1) {\n this.copy(x as Readonly);\n } else {\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n }\n this[0] = x as number;\n this[1] = y;\n }\n }\n\n set(x: number, y: number): this {\n this[0] = x;\n this[1] = y;\n return this.check();\n }\n\n copy(array: Readonly): this {\n this[0] = array[0];\n this[1] = array[1];\n return this.check();\n }\n\n fromObject(object: {x: number; y: number}): this {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n }\n this[0] = object.x;\n this[1] = object.y;\n return this.check();\n }\n\n toObject(object: {x?: number; y?: number}): {x: number; y: number} {\n object.x = this[0];\n object.y = this[1];\n return object as {x: number; y: number};\n }\n\n // Getters/setters\n\n get ELEMENTS(): number {\n return 2;\n }\n\n /**\n * Returns angle from x axis\n * @returns\n */\n horizontalAngle(): number {\n return Math.atan2(this.y, this.x);\n }\n\n /**\n * Returns angle from y axis\n * @returns\n */\n verticalAngle(): number {\n return Math.atan2(this.x, this.y);\n }\n\n // Transforms\n\n /**\n * Transforms as point\n * @param matrix4\n * @returns\n */\n transform(matrix4: Readonly): this {\n return this.transformAsPoint(matrix4);\n }\n\n /**\n * transforms as point (4th component is implicitly 1)\n * @param matrix4\n * @returns\n */\n transformAsPoint(matrix4: Readonly): this {\n vec2.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n /**\n * transforms as vector (4th component is implicitly 0, ignores translation. slightly faster)\n * @param matrix4\n * @returns\n */\n transformAsVector(matrix4: Readonly): this {\n vec2_transformMat4AsVector(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3: Readonly): this {\n vec2.transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2x3(matrix2x3: Readonly): this {\n vec2.transformMat2d(this, this, matrix2x3);\n return this.check();\n }\n\n transformByMatrix2(matrix2: Readonly): this {\n vec2.transformMat2(this, this, matrix2);\n return this.check();\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport {NumericArray} from '@math.gl/types';\nimport Vector from './base/vector';\nimport {config, isArray} from '../lib/common';\nimport {checkNumber} from '../lib/validators';\nimport * as vec3 from 'gl-matrix/vec3';\n/* eslint-disable camelcase */\nimport {vec3_transformMat2, vec3_transformMat4AsVector} from '../lib/gl-matrix-extras';\n\nconst ORIGIN = [0, 0, 0];\n\nlet ZERO: Vector3;\n\n/**\n * Three-element vector class.\n * Subclass of Array\n */\nexport default class Vector3 extends Vector {\n static get ZERO(): Vector3 {\n if (!ZERO) {\n ZERO = new Vector3(0, 0, 0);\n Object.freeze(ZERO);\n }\n return ZERO;\n }\n\n /**\n * @class\n * @param x\n * @param y\n * @param z\n */\n constructor(x: number | Readonly = 0, y: number = 0, z: number = 0) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0);\n if (arguments.length === 1 && isArray(x)) {\n this.copy(x as NumericArray);\n } else {\n // this.set(x, y, z);\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n checkNumber(z);\n }\n // @ts-expect-error TS2412: Property '0' of type 'number | [number, number, number]' is not assignable to numeric index type 'number'\n this[0] = x;\n this[1] = y;\n this[2] = z;\n }\n }\n\n set(x: number, y: number, z: number): this {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n return this.check();\n }\n\n copy(array: Readonly): this {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n return this.check();\n }\n\n fromObject(object: {x: number; y: number; z: number}): this {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n checkNumber(object.z);\n }\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n return this.check();\n }\n\n toObject(object: {x?: number; y?: number; z?: number}): {x: number; y: number; z: number} {\n object.x = this[0];\n object.y = this[1];\n object.z = this[2];\n return object as {x: number; y: number; z: number};\n }\n\n // Getters/setters\n\n get ELEMENTS(): number {\n return 3;\n }\n get z(): number {\n return this[2];\n }\n set z(value: number) {\n this[2] = checkNumber(value);\n }\n\n // ACCESSORS\n\n angle(vector: Readonly): number {\n return vec3.angle(this, vector);\n }\n\n // MODIFIERS\n\n cross(vector: Readonly): this {\n vec3.cross(this, this, vector);\n return this.check();\n }\n\n rotateX({radians, origin = ORIGIN}: {radians: number; origin?: Readonly}): this {\n vec3.rotateX(this, this, origin, radians);\n return this.check();\n }\n\n rotateY({radians, origin = ORIGIN}: {radians: number; origin?: Readonly}): this {\n vec3.rotateY(this, this, origin, radians);\n return this.check();\n }\n\n rotateZ({radians, origin = ORIGIN}: {radians: number; origin?: Readonly}): this {\n vec3.rotateZ(this, this, origin, radians);\n return this.check();\n }\n\n // Transforms\n\n // transforms as point (4th component is implicitly 1)\n transform(matrix4: Readonly): this {\n return this.transformAsPoint(matrix4);\n }\n\n // transforms as point (4th component is implicitly 1)\n transformAsPoint(matrix4: Readonly): this {\n vec3.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n // transforms as vector (4th component is implicitly 0, ignores translation. slightly faster)\n transformAsVector(matrix4: Readonly): this {\n vec3_transformMat4AsVector(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3: Readonly): this {\n vec3.transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2(matrix2: Readonly): this {\n vec3_transformMat2(this, this, matrix2);\n return this.check();\n }\n\n transformByQuaternion(quaternion: Readonly): this {\n vec3.transformQuat(this, this, quaternion);\n return this.check();\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\n\nimport Vector from './base/vector';\nimport {config, isArray} from '../lib/common';\nimport {checkNumber} from '../lib/validators';\nimport * as vec4 from 'gl-matrix/vec3';\n/* eslint-disable camelcase */\nimport {vec4_transformMat2, vec4_transformMat3} from '../lib/gl-matrix-extras';\nimport {NumericArray} from '@math.gl/types';\n\nimport type Matrix4 from './matrix4';\n\nlet ZERO: Vector4;\n\n/**\n * Four-element vector class.\n * Subclass of Array\n */\nexport default class Vector4 extends Vector {\n static get ZERO(): Vector4 {\n if (!ZERO) {\n ZERO = new Vector4(0, 0, 0, 0);\n Object.freeze(ZERO);\n }\n return ZERO;\n }\n\n constructor(x: number | Readonly = 0, y: number = 0, z: number = 0, w: number = 0) {\n // PERF NOTE: initialize elements as double precision numbers\n super(-0, -0, -0, -0);\n if (isArray(x) && arguments.length === 1) {\n this.copy(x as Readonly);\n } else {\n // this.set(x, y, z, w);\n if (config.debug) {\n checkNumber(x);\n checkNumber(y);\n checkNumber(z);\n checkNumber(w);\n }\n this[0] = x as number;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n }\n }\n\n set(x: number, y: number, z: number, w: number): this {\n this[0] = x;\n this[1] = y;\n this[2] = z;\n this[3] = w;\n return this.check();\n }\n\n copy(array: Readonly): this {\n this[0] = array[0];\n this[1] = array[1];\n this[2] = array[2];\n this[3] = array[3];\n return this.check();\n }\n\n fromObject(object: {x: number; y: number; z: number; w: number}): this {\n if (config.debug) {\n checkNumber(object.x);\n checkNumber(object.y);\n checkNumber(object.z);\n checkNumber(object.w);\n }\n this[0] = object.x;\n this[1] = object.y;\n this[2] = object.z;\n this[3] = object.w;\n return this;\n }\n\n toObject(object: {x?: number; y?: number; z?: number; w?: number}): {\n x: number;\n y: number;\n z: number;\n w: number;\n } {\n object.x = this[0];\n object.y = this[1];\n object.z = this[2];\n object.w = this[3];\n return object as {\n x: number;\n y: number;\n z: number;\n w: number;\n };\n }\n\n // Getters/setters\n /* eslint-disable no-multi-spaces, brace-style, no-return-assign */\n get ELEMENTS(): number {\n return 4;\n }\n\n get z(): number {\n return this[2];\n }\n set z(value: number) {\n this[2] = checkNumber(value);\n }\n get w(): number {\n return this[3];\n }\n set w(value: number) {\n this[3] = checkNumber(value);\n }\n\n transform(matrix4: Readonly): this {\n vec4.transformMat4(this, this, matrix4);\n return this.check();\n }\n\n transformByMatrix3(matrix3: Readonly): this {\n vec4_transformMat3(this, this, matrix3);\n return this.check();\n }\n\n transformByMatrix2(matrix2: Readonly): this {\n vec4_transformMat2(this, this, matrix2);\n return this.check();\n }\n\n transformByQuaternion(quaternion: Readonly): this {\n vec4.transformQuat(this, this, quaternion);\n return this.check();\n }\n\n // three.js compatibility\n applyMatrix4(m: Matrix4): this {\n m.transform(this, this);\n return this;\n }\n}\n","export default function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(`math.gl assertion ${message}`);\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n// MIT License\nimport {NumericArray} from '@math.gl/types';\nimport assert from './assert';\n\nimport type MathArray from '../classes/base/math-array';\n\nexport type ConfigurationOptions = {\n EPSILON: number;\n debug?: boolean;\n precision: number;\n printTypes?: boolean;\n printDegrees?: boolean;\n printRowMajor?: boolean;\n _cartographicRadians?: boolean;\n};\n\nconst RADIANS_TO_DEGREES = (1 / Math.PI) * 180;\nconst DEGREES_TO_RADIANS = (1 / 180) * Math.PI;\n\n// TODO - remove\nexport const config: ConfigurationOptions = {\n EPSILON: 1e-12,\n debug: false,\n precision: 4,\n printTypes: false,\n printDegrees: false,\n printRowMajor: true\n};\n\nexport function configure(options?: Partial): ConfigurationOptions {\n // Only copy existing keys\n for (const key in options) {\n assert(key in config);\n config[key] = options[key];\n }\n return config;\n}\n\n/**\n * Formats a value into a string\n * @param value\n * @param param1\n * @returns\n */\nexport function formatValue(\n value: number,\n {precision = config.precision}: {precision?: number} = {}\n): string {\n value = round(value);\n // get rid of trailing zeros\n return `${parseFloat(value.toPrecision(precision))}`;\n}\n\n/**\n * Check if value is an \"array\"\n * Returns `true` if value is either an array or a typed array\n *\n * Note: returns `false` for `ArrayBuffer` and `DataView` instances\n */\nexport function isArray(value: unknown): boolean {\n return Array.isArray(value) || (ArrayBuffer.isView(value) && !(value instanceof DataView));\n}\n\nexport function clone(array: NumericArray | MathArray): NumericArray {\n return 'clone' in array ? array.clone() : array.slice();\n}\n\nexport function toRadians(degrees: number): number;\nexport function toRadians(degrees: NumericArray): NumericArray;\n\nexport function toRadians(degrees: number | NumericArray): number | NumericArray {\n return radians(degrees as NumericArray);\n}\n\nexport function toDegrees(degrees: number): number;\nexport function toDegrees(degrees: NumericArray): NumericArray;\n\nexport function toDegrees(radians: number | NumericArray): number | NumericArray {\n return degrees(radians as NumericArray);\n}\n\n// GLSL math function equivalents - Works on both single values and vectors\n\n/**\n * \"GLSL equivalent\" radians: Works on single values and vectors\n */\nexport function radians(degrees: number): number;\nexport function radians(degrees: NumericArray, result?: NumericArray): NumericArray;\n\nexport function radians(\n degrees: number | NumericArray,\n result?: NumericArray\n): number | NumericArray {\n return map(degrees, (degrees) => degrees * DEGREES_TO_RADIANS, result);\n}\n\n/**\n * \"GLSL equivalent\" degrees: Works on single values and vectors\n */\nexport function degrees(radians: number): number;\nexport function degrees(radians: NumericArray, result?: NumericArray): NumericArray;\n\nexport function degrees(\n radians: number | NumericArray,\n result?: NumericArray\n): number | NumericArray {\n return map(radians, (radians) => radians * RADIANS_TO_DEGREES, result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.sin`: Works on single values and vectors\n * @deprecated\n */\nexport function sin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.sin(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.cos`: Works on single values and vectors\n * @deprecated\n */\nexport function cos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.cos(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.tan`: Works on single values and vectors\n * @deprecated\n */\nexport function tan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.tan(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.asin`: Works on single values and vectors\n * @deprecated\n */\nexport function asin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.asin(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.acos`: Works on single values and vectors\n * @deprecated\n */\nexport function acos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.acos(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.atan`: Works on single values and vectors\n * @deprecated\n */\nexport function atan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.atan(angle), result);\n}\n\n/**\n * GLSL style value clamping: Works on single values and vectors\n */\nexport function clamp(value: number, min: number, max: number): number;\nexport function clamp(value: NumericArray, min: number, max: number): NumericArray;\n\nexport function clamp(\n value: number | NumericArray,\n min: number,\n max: number\n): number | NumericArray {\n return map(value, (value) => Math.max(min, Math.min(max, value)));\n}\n\n/**\n * Interpolate between two numbers or two arrays\n */\nexport function lerp(a: number, b: number, t: number): number;\nexport function lerp(a: NumericArray, b: NumericArray, t: number): NumericArray;\n\nexport function lerp(\n a: number | NumericArray,\n b: number | NumericArray,\n t: number\n): number | NumericArray {\n if (isArray(a)) {\n return (a as NumericArray).map((ai: number, i: number) => lerp(ai, (b as NumericArray)[i], t));\n }\n return t * (b as number) + (1 - t) * (a as number);\n}\n\n/* eslint-disable */\n\n/**\n * Compares any two math objects, using `equals` method if available.\n * @param a\n * @param b\n * @param epsilon\n * @returns\n */\nexport function equals(a: any, b: any, epsilon?: number): boolean {\n const oldEpsilon = config.EPSILON;\n if (epsilon) {\n config.EPSILON = epsilon;\n }\n try {\n if (a === b) {\n return true;\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n // eslint-disable-next-line max-depth\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (a && a.equals) {\n return a.equals(b);\n }\n if (b && b.equals) {\n return b.equals(a);\n }\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b) <= config.EPSILON * Math.max(1, Math.abs(a), Math.abs(b));\n }\n return false;\n } finally {\n config.EPSILON = oldEpsilon;\n }\n}\n\nexport function exactEquals(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n if (a && typeof a === 'object' && b && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false;\n }\n if (a.exactEquals) {\n return a.exactEquals(b);\n }\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n if (!exactEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\n/* eslint-enable */\n\nexport function withEpsilon(epsilon: number, func: () => T): T {\n const oldPrecision = config.EPSILON;\n config.EPSILON = epsilon;\n let value: T;\n try {\n value = func();\n } finally {\n config.EPSILON = oldPrecision;\n }\n return value;\n}\n\n// HELPERS\n\nfunction round(value: number): number {\n return Math.round(value / config.EPSILON) * config.EPSILON;\n}\n\n// If the array has a clone function, calls it, otherwise returns a copy\nfunction duplicateArray(array: NumericArray): NumericArray {\n // @ts-expect-error We check for math.gl class methods\n return array.clone ? array.clone() : (new Array(array.length) as number[]);\n}\n\n// If the argument value is an array, applies the func element wise,\n// otherwise applies func to the argument value\nfunction map(\n value: number | NumericArray,\n func: (x: number, index?: number, result?: NumericArray) => number,\n result?: NumericArray\n): number | NumericArray {\n if (isArray(value)) {\n const array = value as NumericArray;\n result = result || duplicateArray(array);\n for (let i = 0; i < result.length && i < array.length; ++i) {\n result[i] = func(value[i], i, result);\n }\n return result;\n }\n return func(value as number);\n}\n","/* eslint-disable camelcase */\nimport {NumericArray} from '@math.gl/types';\n// vec2 additions\n\nexport function vec2_transformMat4AsVector(\n out: T,\n a: Readonly,\n m: Readonly\n): T {\n const x = a[0];\n const y = a[1];\n const w = m[3] * x + m[7] * y || 1.0;\n out[0] = (m[0] * x + m[4] * y) / w;\n out[1] = (m[1] * x + m[5] * y) / w;\n return out;\n}\n\n// vec3 additions\n\n// Transform as vector, only uses 3x3 minor matrix\nexport function vec3_transformMat4AsVector(\n out: T,\n a: Readonly,\n m: Readonly\n): T {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = m[3] * x + m[7] * y + m[11] * z || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z) / w;\n return out;\n}\n\nexport function vec3_transformMat2(\n out: T,\n a: Readonly,\n m: Readonly\n): T {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n return out;\n}\n\n// vec4 additions\n\nexport function vec4_transformMat2(\n out: T,\n a: Readonly,\n m: Readonly\n): T {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\nexport function vec4_transformMat3(\n out: T,\n a: Readonly,\n m: Readonly\n): T {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n out[0] = m[0] * x + m[3] * y + m[6] * z;\n out[1] = m[1] * x + m[4] * y + m[7] * z;\n out[2] = m[2] * x + m[5] * y + m[8] * z;\n out[3] = a[3];\n return out;\n}\n","// NOTE: Added to make Cesium-derived test cases work\n// TODO: Determine if/how to keep\nexport default {\n EPSILON1: 1e-1,\n EPSILON2: 1e-2,\n EPSILON3: 1e-3,\n EPSILON4: 1e-4,\n EPSILON5: 1e-5,\n EPSILON6: 1e-6,\n EPSILON7: 1e-7,\n EPSILON8: 1e-8,\n EPSILON9: 1e-9,\n EPSILON10: 1e-10,\n EPSILON11: 1e-11,\n EPSILON12: 1e-12,\n EPSILON13: 1e-13,\n EPSILON14: 1e-14,\n EPSILON15: 1e-15,\n EPSILON16: 1e-16,\n EPSILON17: 1e-17,\n EPSILON18: 1e-18,\n EPSILON19: 1e-19,\n EPSILON20: 1e-20,\n\n PI_OVER_TWO: Math.PI / 2,\n PI_OVER_FOUR: Math.PI / 4,\n PI_OVER_SIX: Math.PI / 6,\n\n TWO_PI: Math.PI * 2\n};\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\nimport {NumberArray} from '@math.gl/types';\nimport {config} from './common';\n\nexport function validateVector(v: NumberArray, length: number): boolean {\n if (v.length !== length) {\n return false;\n }\n // Could be arguments \"array\" (v.every not availasble)\n for (let i = 0; i < v.length; ++i) {\n if (!Number.isFinite(v[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport function checkNumber(value: any): number {\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid number ${value}`);\n }\n return value as number;\n}\n\nexport function checkVector(\n v: T,\n length: number,\n callerName: string = ''\n): T {\n if (config.debug && !validateVector(v, length)) {\n throw new Error(`math.gl: ${callerName} some fields set to invalid numbers'`);\n }\n return v;\n}\n\nconst map = {};\n\nexport function deprecated(method: string, version: string): void {\n if (!map[method]) {\n map[method] = true;\n // eslint-disable-next-line\n console.warn(\n `${method} has been removed in version ${version}, see upgrade guide for more information`\n );\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nexport const INTERSECTION = {\n OUTSIDE: -1, // Represents that an object is not contained within the frustum.\n INTERSECTING: 0, // Represents that an object intersects one of the frustum's planes.\n INSIDE: 1 // Represents that an object is fully within the frustum.\n} as const;\n","import {BoundingVolume} from './bounding-volume';\nimport {Vector3} from '@math.gl/core';\nimport Plane from '../plane';\nimport {INTERSECTION} from '../../constants';\n\nconst scratchVector = new Vector3();\nconst scratchNormal = new Vector3();\n\n/**\n * An axis aligned bounding box - aligned with coordinate axes\n * @see BoundingVolume\n * @see BoundingRectangle\n * @see OrientedBoundingBox\n */\nexport default class AxisAlignedBoundingBox implements BoundingVolume {\n /** The center point of the bounding box. */\n readonly center: Vector3;\n /** The positive half diagonal of the bounding box. */\n readonly halfDiagonal: Vector3;\n /** The minimum point defining the bounding box. [0, 0, 0] for empty box */\n readonly minimum: Vector3;\n /** The maximum point defining the bounding box. [0, 0, 0] for empty box */\n readonly maximum: Vector3;\n\n /**\n * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes.\n * @param minimum=[0, 0, 0] The minimum point along the x, y, and z axes.\n * @param maximum=[0, 0, 0] The maximum point along the x, y, and z axes.\n * @param center The center of the box; automatically computed if not supplied.\n */\n constructor(\n minimum: readonly number[] = [0, 0, 0],\n maximum: readonly number[] = [0, 0, 0],\n center?: readonly number[]\n ) {\n // If center was not defined, compute it.\n center = center || scratchVector.copy(minimum).add(maximum).scale(0.5);\n this.center = new Vector3(center);\n this.halfDiagonal = new Vector3(maximum).subtract(this.center);\n\n /**\n * The minimum point defining the bounding box.\n * @type {Vector3}\n * @default {@link 0, 0, 0}\n */\n this.minimum = new Vector3(minimum);\n\n /**\n * The maximum point defining the bounding box.\n * @type {Vector3}\n * @default {@link 0, 0, 0}\n */\n this.maximum = new Vector3(maximum);\n }\n\n /**\n * Duplicates a AxisAlignedBoundingBox instance.\n *\n * @returns {AxisAlignedBoundingBox} A new AxisAlignedBoundingBox instance.\n */\n clone(): AxisAlignedBoundingBox {\n return new AxisAlignedBoundingBox(this.minimum, this.maximum, this.center);\n }\n\n /**\n * Compares the provided AxisAlignedBoundingBox componentwise and returns\n * true if they are equal, false otherwise.\n *\n * @param {AxisAlignedBoundingBox} [right] The second AxisAlignedBoundingBox to compare with.\n * @returns {Boolean} true if left and right are equal, false otherwise.\n */\n equals(right: AxisAlignedBoundingBox): boolean {\n return (\n this === right ||\n (Boolean(right) && this.minimum.equals(right.minimum) && this.maximum.equals(right.maximum))\n );\n }\n\n /**\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\n * @param transform The transformation matrix to apply to the bounding sphere.\n * @returns itself, i.e. the modified BoundingVolume.\n */\n transform(transform: readonly number[]): this {\n this.center.transformAsPoint(transform);\n // TODO - this.halfDiagonal.transformAsVector(transform);\n this.halfDiagonal.transform(transform);\n this.minimum.transform(transform);\n this.maximum.transform(transform);\n return this;\n }\n\n /**\n * Determines which side of a plane a box is located.\n */\n intersectPlane(plane: Plane): number {\n const {halfDiagonal} = this;\n const normal = scratchNormal.from(plane.normal);\n const e =\n halfDiagonal.x * Math.abs(normal.x) +\n halfDiagonal.y * Math.abs(normal.y) +\n halfDiagonal.z * Math.abs(normal.z);\n const s = this.center.dot(normal) + plane.distance; // signed distance from center\n\n if (s - e > 0) {\n return INTERSECTION.INSIDE;\n }\n\n if (s + e < 0) {\n // Not in front because normals point inward\n return INTERSECTION.OUTSIDE;\n }\n\n return INTERSECTION.INTERSECTING;\n }\n\n /** Computes the estimated distance from the closest point on a bounding box to a point. */\n distanceTo(point: readonly number[]): number {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n /** Computes the estimated distance squared from the closest point on a bounding box to a point. */\n distanceSquaredTo(point: readonly number[]): number {\n const offset = scratchVector.from(point).subtract(this.center);\n const {halfDiagonal} = this;\n\n let distanceSquared = 0.0;\n let d;\n\n d = Math.abs(offset.x) - halfDiagonal.x;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.y) - halfDiagonal.y;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.z) - halfDiagonal.z;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {NumericArray, Vector3} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport {INTERSECTION} from '../../constants';\nimport {BoundingVolume} from './bounding-volume';\nimport Plane from '../plane';\n\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\n\n/** A BoundingSphere */\nexport default class BoundingSphere implements BoundingVolume {\n center: Vector3;\n radius: number;\n\n /** Creates a bounding sphere */\n constructor(center: readonly number[] = [0, 0, 0], radius: number = 0.0) {\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n /** Sets the bounding sphere from `center` and `radius`. */\n fromCenterRadius(center: readonly number[], radius: number): this {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n /**\n * Computes a bounding sphere from the corner points of an axis-aligned bounding box. The sphere\n * tightly and fully encompasses the box.\n */\n fromCornerPoints(corner: readonly number[], oppositeCorner: readonly number[]): this {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n /** Compares the provided BoundingSphere component wise */\n equals(right: BoundingSphere): boolean {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.radius === right.radius)\n );\n }\n\n /** Duplicates a BoundingSphere instance. */\n clone(): BoundingSphere {\n return new BoundingSphere(this.center, this.radius);\n }\n\n /** Computes a bounding sphere that contains both the left and right bounding spheres. */\n union(boundingSphere: BoundingSphere): BoundingSphere {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n return boundingSphere.clone();\n }\n\n // There are two tangent points, one on far side of each sphere.\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n scratchVector2\n .copy(toRightCenter)\n .scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation)\n .add(leftCenter);\n\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n\n return this;\n }\n\n /** Computes a bounding sphere by enlarging the provided sphere to contain the provided point. */\n expand(point: readonly number[]): this {\n const scratchPoint = scratchVector.from(point);\n const radius = scratchPoint.subtract(this.center).magnitude();\n if (radius > this.radius) {\n this.radius = radius;\n }\n return this;\n }\n\n // BoundingVolume interface\n\n /**\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\n * @param sphere The bounding sphere to apply the transformation to.\n * @param transform The transformation matrix to apply to the bounding sphere.\n * @returns self.\n */\n transform(transform: readonly number[]): this {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n /** Computes the estimated distance squared from the closest point on a bounding sphere to a point. */\n distanceSquaredTo(point: Readonly): number {\n const d = this.distanceTo(point);\n return d * d;\n }\n\n /** Computes the estimated distance from the closest point on a bounding sphere to a point. */\n distanceTo(point: Readonly): number {\n const scratchPoint = scratchVector.from(point);\n const delta = scratchPoint.subtract(this.center);\n return Math.max(0, delta.len() - this.radius);\n }\n\n /** Determines which side of a plane a sphere is located. */\n intersectPlane(plane: Plane): number {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n // The center point is negative side of the plane normal\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n // The center point and radius is positive side of the plane\n return INTERSECTION.INSIDE;\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3, Matrix4, Quaternion, NumericArray} from '@math.gl/core';\nimport type {BoundingVolume} from './bounding-volume';\nimport BoundingSphere from './bounding-sphere';\nimport type Plane from '../plane';\nimport {INTERSECTION} from '../../constants';\n\nconst scratchVector3 = new Vector3();\nconst scratchOffset = new Vector3();\nconst scratchVectorU = new Vector3();\nconst scratchVectorV = new Vector3();\nconst scratchVectorW = new Vector3();\nconst scratchCorner = new Vector3();\nconst scratchToCenter = new Vector3();\n\nconst MATRIX3 = {\n COLUMN0ROW0: 0,\n COLUMN0ROW1: 1,\n COLUMN0ROW2: 2,\n COLUMN1ROW0: 3,\n COLUMN1ROW1: 4,\n COLUMN1ROW2: 5,\n COLUMN2ROW0: 6,\n COLUMN2ROW1: 7,\n COLUMN2ROW2: 8\n};\n\n/**\n * An OrientedBoundingBox of some object is a closed and convex cuboid.\n * It can provide a tighter bounding volume than `BoundingSphere` or\n * `AxisAlignedBoundingBox` in many cases.\n */\nexport default class OrientedBoundingBox implements BoundingVolume {\n center: Vector3;\n halfAxes: Matrix3;\n\n /**\n * An OrientedBoundingBox of some object is a closed and convex cuboid.\n * It can provide a tighter bounding volume than\n * `BoundingSphere` or `AxisAlignedBoundingBox` in many cases.\n */\n constructor(center?: readonly number[], halfAxes?: readonly number[]);\n constructor(center: Readonly = [0, 0, 0], halfAxes = [0, 0, 0, 0, 0, 0, 0, 0, 0]) {\n this.center = new Vector3().from(center);\n this.halfAxes = new Matrix3(halfAxes);\n }\n\n /** Returns an array with three halfSizes for the bounding box */\n get halfSize(): number[] {\n const xAxis = this.halfAxes.getColumn(0);\n const yAxis = this.halfAxes.getColumn(1);\n const zAxis = this.halfAxes.getColumn(2);\n return [new Vector3(xAxis).len(), new Vector3(yAxis).len(), new Vector3(zAxis).len()];\n }\n\n /** Returns a quaternion describing the orientation of the bounding box */\n get quaternion(): Quaternion {\n const xAxis = this.halfAxes.getColumn(0);\n const yAxis = this.halfAxes.getColumn(1);\n const zAxis = this.halfAxes.getColumn(2);\n const normXAxis = new Vector3(xAxis).normalize();\n const normYAxis = new Vector3(yAxis).normalize();\n const normZAxis = new Vector3(zAxis).normalize();\n return new Quaternion().fromMatrix3(new Matrix3([...normXAxis, ...normYAxis, ...normZAxis]));\n }\n\n /**\n * Create OrientedBoundingBox from quaternion based OBB,\n */\n fromCenterHalfSizeQuaternion(\n center: number[],\n halfSize: number[],\n quaternion: number[]\n ): OrientedBoundingBox {\n const quaternionObject = new Quaternion(quaternion);\n const directionsMatrix = new Matrix3().fromQuaternion(quaternionObject);\n directionsMatrix[0] = directionsMatrix[0] * halfSize[0];\n directionsMatrix[1] = directionsMatrix[1] * halfSize[0];\n directionsMatrix[2] = directionsMatrix[2] * halfSize[0];\n directionsMatrix[3] = directionsMatrix[3] * halfSize[1];\n directionsMatrix[4] = directionsMatrix[4] * halfSize[1];\n directionsMatrix[5] = directionsMatrix[5] * halfSize[1];\n directionsMatrix[6] = directionsMatrix[6] * halfSize[2];\n directionsMatrix[7] = directionsMatrix[7] * halfSize[2];\n directionsMatrix[8] = directionsMatrix[8] * halfSize[2];\n this.center = new Vector3().from(center);\n this.halfAxes = directionsMatrix;\n return this;\n }\n\n /** Duplicates a OrientedBoundingBox instance. */\n clone(): OrientedBoundingBox {\n return new OrientedBoundingBox(this.center, this.halfAxes);\n }\n\n /** Compares the provided OrientedBoundingBox component wise and returns */\n equals(right: OrientedBoundingBox): boolean {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.halfAxes.equals(right.halfAxes))\n );\n }\n\n /** Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box. */\n getBoundingSphere(result = new BoundingSphere()): BoundingSphere {\n const halfAxes = this.halfAxes;\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n\n // Calculate \"corner\" vector\n const cornerVector = scratchVector3.copy(u).add(v).add(w);\n\n result.center.copy(this.center);\n result.radius = cornerVector.magnitude();\n\n return result;\n }\n\n /** Determines which side of a plane the oriented bounding box is located. */\n intersectPlane(plane: Plane): number {\n const center = this.center;\n const normal = plane.normal;\n const halfAxes = this.halfAxes;\n\n const normalX = normal.x;\n const normalY = normal.y;\n const normalZ = normal.z;\n\n // Plane is used as if it is its normal; the first three components are assumed to be normalized\n const radEffective =\n Math.abs(\n normalX * halfAxes[MATRIX3.COLUMN0ROW0] +\n normalY * halfAxes[MATRIX3.COLUMN0ROW1] +\n normalZ * halfAxes[MATRIX3.COLUMN0ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[MATRIX3.COLUMN1ROW0] +\n normalY * halfAxes[MATRIX3.COLUMN1ROW1] +\n normalZ * halfAxes[MATRIX3.COLUMN1ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[MATRIX3.COLUMN2ROW0] +\n normalY * halfAxes[MATRIX3.COLUMN2ROW1] +\n normalZ * halfAxes[MATRIX3.COLUMN2ROW2]\n );\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n if (distanceToPlane <= -radEffective) {\n // The entire box is on the negative side of the plane normal\n return INTERSECTION.OUTSIDE;\n } else if (distanceToPlane >= radEffective) {\n // The entire box is on the positive side of the plane normal\n return INTERSECTION.INSIDE;\n }\n return INTERSECTION.INTERSECTING;\n }\n\n /** Computes the estimated distance from the closest point on a bounding box to a point. */\n distanceTo(point: readonly number[]): number {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n /**\n * Computes the estimated distance squared from the closest point\n * on a bounding box to a point.\n * See Geometric Tools for Computer Graphics 10.4.2\n */\n distanceSquaredTo(point: readonly number[]): number {\n // Computes the estimated distance squared from the\n // closest point on a bounding box to a point.\n // See Geometric Tools for Computer Graphics 10.4.2\n const offset = scratchOffset.from(point).subtract(this.center);\n\n const halfAxes = this.halfAxes;\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n\n const uHalf = u.magnitude();\n const vHalf = v.magnitude();\n const wHalf = w.magnitude();\n\n u.normalize();\n v.normalize();\n w.normalize();\n\n let distanceSquared = 0.0;\n let d;\n\n d = Math.abs(offset.dot(u)) - uHalf;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.dot(v)) - vHalf;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n d = Math.abs(offset.dot(w)) - wHalf;\n if (d > 0) {\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n }\n\n /**\n * The distances calculated by the vector from the center of the bounding box\n * to position projected onto direction.\n *\n * - If you imagine the infinite number of planes with normal direction,\n * this computes the smallest distance to the closest and farthest planes\n * from `position` that intersect the bounding box.\n *\n * @param position The position to calculate the distance from.\n * @param direction The direction from position.\n * @param result An Interval (array of length 2) to store the nearest and farthest distances.\n * @returns Interval (array of length 2) with nearest and farthest distances\n * on the bounding box from position in direction.\n */\n // eslint-disable-next-line max-statements\n computePlaneDistances(\n position: readonly number[],\n direction: Vector3,\n result: number[] = [-0, -0]\n ): number[] {\n let minDist = Number.POSITIVE_INFINITY;\n let maxDist = Number.NEGATIVE_INFINITY;\n\n const center = this.center;\n const halfAxes = this.halfAxes;\n\n const u = halfAxes.getColumn(0, scratchVectorU);\n const v = halfAxes.getColumn(1, scratchVectorV);\n const w = halfAxes.getColumn(2, scratchVectorW);\n\n // project first corner\n const corner = scratchCorner.copy(u).add(v).add(w).add(center);\n\n const toCenter = scratchToCenter.copy(corner).subtract(position);\n let mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project second corner\n corner.copy(center).add(u).add(v).subtract(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project third corner\n corner.copy(center).add(u).subtract(v).add(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fourth corner\n corner.copy(center).add(u).subtract(v).subtract(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fifth corner\n center.copy(corner).subtract(u).add(v).add(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project sixth corner\n center.copy(corner).subtract(u).add(v).subtract(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project seventh corner\n center.copy(corner).subtract(u).subtract(v).add(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project eighth corner\n center.copy(corner).subtract(u).subtract(v).subtract(w);\n\n toCenter.copy(corner).subtract(position);\n mag = direction.dot(toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n result[0] = minDist;\n result[1] = maxDist;\n return result;\n }\n\n /**\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\n * @param transform The transformation matrix to apply to the bounding sphere.\n * @returns itself, i.e. the modified BoundingVolume.\n */\n transform(transformation: readonly number[]): this {\n this.center.transformAsPoint(transformation);\n\n const xAxis = this.halfAxes.getColumn(0, scratchVectorU);\n xAxis.transformAsPoint(transformation);\n\n const yAxis = this.halfAxes.getColumn(1, scratchVectorV);\n yAxis.transformAsPoint(transformation);\n\n const zAxis = this.halfAxes.getColumn(2, scratchVectorW);\n zAxis.transformAsPoint(transformation);\n\n this.halfAxes = new Matrix3([...xAxis, ...yAxis, ...zAxis]);\n return this;\n }\n\n getTransform(): Matrix4 {\n // const modelMatrix = Matrix4.fromRotationTranslation(this.boundingVolume.halfAxes, this.boundingVolume.center);\n // return modelMatrix;\n throw new Error('not implemented');\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Vector3, equals, assert, NumericArray} from '@math.gl/core';\n\nconst scratchPosition = new Vector3();\nconst scratchNormal = new Vector3();\n\n// A plane in Hessian Normal Form\nexport default class Plane {\n readonly normal: Vector3;\n distance: number;\n\n constructor(normal: Readonly = [0, 0, 1], distance: number = 0) {\n this.normal = new Vector3();\n this.distance = -0;\n this.fromNormalDistance(normal, distance);\n }\n\n /** Creates a plane from a normal and a distance from the origin. */\n fromNormalDistance(normal: Readonly, distance: number): this {\n assert(Number.isFinite(distance));\n this.normal.from(normal).normalize();\n this.distance = distance;\n return this;\n }\n\n /** Creates a plane from a normal and a point on the plane. */\n fromPointNormal(point: Readonly, normal: Readonly): this {\n point = scratchPosition.from(point);\n this.normal.from(normal).normalize();\n const distance = -this.normal.dot(point);\n this.distance = distance;\n return this;\n }\n\n /** Creates a plane from the general equation */\n fromCoefficients(a: number, b: number, c: number, d: number): this {\n this.normal.set(a, b, c);\n assert(equals(this.normal.len(), 1));\n this.distance = d;\n return this;\n }\n\n /** Duplicates a Plane instance. */\n clone(): Plane {\n return new Plane(this.normal, this.distance);\n }\n\n /** Compares the provided Planes by normal and distance */\n equals(right: Plane): boolean {\n return equals(this.distance, right.distance) && equals(this.normal, right.normal);\n }\n\n /** Computes the signed shortest distance of a point to a plane.\n * The sign of the distance determines which side of the plane the point is on.\n */\n getPointDistance(point: Readonly): number {\n return this.normal.dot(point) + this.distance;\n }\n\n /** Transforms the plane by the given transformation matrix. */\n transform(matrix4: Readonly): this {\n const normal = scratchNormal.copy(this.normal).transformAsVector(matrix4).normalize();\n const point = this.normal.scale(-this.distance).transform(matrix4);\n return this.fromPointNormal(point, normal);\n }\n\n /** Projects a point onto the plane. */\n projectPointOntoPlane(point: Readonly, result: Vector3): Vector3;\n projectPointOntoPlane(\n point: Readonly,\n result?: readonly number[]\n ): readonly number[];\n\n projectPointOntoPlane(point, result = [0, 0, 0]) {\n point = scratchPosition.from(point);\n // projectedPoint = point - (normal.point + scale) * normal\n const pointDistance = this.getPointDistance(point);\n const scaledNormal = scratchNormal.copy(this.normal).scale(pointDistance);\n\n return point.subtract(scaledNormal).to(result);\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Vector3, assert} from '@math.gl/core';\nimport {INTERSECTION} from '../constants';\nimport Plane from './plane';\nimport type {BoundingVolume} from './bounding-volumes/bounding-volume';\nimport type BoundingSphere from './bounding-volumes/bounding-sphere';\n\n// X, Y, Z Unit vectors\nconst faces = [new Vector3([1, 0, 0]), new Vector3([0, 1, 0]), new Vector3([0, 0, 1])];\n\nconst scratchPlaneCenter = new Vector3();\nconst scratchPlaneNormal = new Vector3();\nconst scratchPlane = new Plane(new Vector3(1.0, 0.0, 0.0), 0.0);\n\n/** A culling volume defined by planes. */\nexport default class CullingVolume {\n /**\n * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value\n * represents the case where the object bounding volume is entirely outside the culling volume.\n */\n static MASK_OUTSIDE = 0xffffffff;\n\n /**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume is entirely inside the culling volume.\n */\n static MASK_INSIDE = 0x00000000;\n\n /**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume (may) intersect all planes of the culling volume.\n */\n static MASK_INDETERMINATE = 0x7fffffff;\n\n /** Array of clipping planes. */\n readonly planes: Plane[];\n\n /**\n * Create a new `CullingVolume` bounded by an array of clipping planed\n * @param planes Array of clipping planes.\n * */\n constructor(planes: Plane[] = []) {\n this.planes = planes;\n }\n\n /**\n * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere.\n * The planes are aligned to the x, y, and z axes in world coordinates.\n */\n fromBoundingSphere(boundingSphere: BoundingSphere): CullingVolume {\n this.planes.length = 2 * faces.length;\n\n const center = boundingSphere.center;\n const radius = boundingSphere.radius;\n\n let planeIndex = 0;\n\n for (const faceNormal of faces) {\n let plane0 = this.planes[planeIndex];\n let plane1 = this.planes[planeIndex + 1];\n\n if (!plane0) {\n plane0 = this.planes[planeIndex] = new Plane();\n }\n if (!plane1) {\n plane1 = this.planes[planeIndex + 1] = new Plane();\n }\n\n const plane0Center = scratchPlaneCenter.copy(faceNormal).scale(-radius).add(center);\n const plane0Distance = -faceNormal.dot(plane0Center);\n\n plane0.fromPointNormal(plane0Center, faceNormal);\n\n const plane1Center = scratchPlaneCenter.copy(faceNormal).scale(radius).add(center);\n\n const negatedFaceNormal = scratchPlaneNormal.copy(faceNormal).negate();\n\n const plane1Distance = -negatedFaceNormal.dot(plane1Center);\n\n plane1.fromPointNormal(plane1Center, negatedFaceNormal);\n\n planeIndex += 2;\n }\n\n return this;\n }\n\n /** Determines whether a bounding volume intersects the culling volume. */\n computeVisibility(boundingVolume: BoundingVolume): number {\n // const planes = this.planes;\n let intersect: number = INTERSECTION.INSIDE;\n for (const plane of this.planes) {\n const result = boundingVolume.intersectPlane(plane);\n switch (result) {\n case INTERSECTION.OUTSIDE:\n // We are done\n return INTERSECTION.OUTSIDE;\n\n case INTERSECTION.INTERSECTING:\n // If no other intersection is outside, return INTERSECTING\n intersect = INTERSECTION.INTERSECTING;\n break;\n\n default:\n }\n }\n\n return intersect;\n }\n\n /**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling\n * volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then\n * the parent (and therefore this) volume is completely inside plane[planeIndex]\n * and that plane check can be skipped.\n */\n computeVisibilityWithPlaneMask(boundingVolume: BoundingVolume, parentPlaneMask: number): number {\n assert(Number.isFinite(parentPlaneMask), 'parentPlaneMask is required.');\n\n if (\n parentPlaneMask === CullingVolume.MASK_OUTSIDE ||\n parentPlaneMask === CullingVolume.MASK_INSIDE\n ) {\n // parent is completely outside or completely inside, so this child is as well.\n return parentPlaneMask;\n }\n\n // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE.\n // (Because if there are fewer than 31 planes, the upper bits wont be changed.)\n let mask = CullingVolume.MASK_INSIDE;\n\n const planes = this.planes;\n for (let k = 0; k < this.planes.length; ++k) {\n // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization.\n const flag = k < 31 ? 1 << k : 0;\n if (k < 31 && (parentPlaneMask & flag) === 0) {\n // boundingVolume is known to be INSIDE this plane.\n continue;\n }\n\n const plane = planes[k];\n const result = boundingVolume.intersectPlane(plane);\n if (result === INTERSECTION.OUTSIDE) {\n return CullingVolume.MASK_OUTSIDE;\n } else if (result === INTERSECTION.INTERSECTING) {\n mask |= flag;\n }\n }\n\n return mask;\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n// Note: This class is still an experimental export, mainly used by other test cases\n// - It has not been fully adapted to math.gl conventions\n// - Documentation has not been ported\n\nimport {Vector3, Vector2, Matrix4, assert, NumericArray} from '@math.gl/core';\nimport CullingVolume from './culling-volume';\nimport Plane from './plane';\n\nconst scratchPlaneUpVector = new Vector3();\nconst scratchPlaneRightVector = new Vector3();\nconst scratchPlaneNearCenter = new Vector3();\nconst scratchPlaneFarCenter = new Vector3();\nconst scratchPlaneNormal = new Vector3();\n\ntype PerspectiveOffCenterFrustumOptions = {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n near?: number;\n far?: number;\n};\n\nexport default class PerspectiveOffCenterFrustum {\n /**\n * Defines the left clipping plane.\n * @type {Number}\n * @default undefined\n */\n left?: number;\n private _left?: number;\n /**\n * Defines the right clipping plane.\n * @type {Number}\n * @default undefined\n */\n right?: number;\n private _right?: number;\n /**\n * Defines the top clipping plane.\n * @type {Number}\n * @default undefined\n */\n top?: number;\n private _top?: number;\n /**\n * Defines the bottom clipping plane.\n * @type {Number}\n * @default undefined\n */\n bottom?: number;\n private _bottom?: number;\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n near: number;\n private _near: number;\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0\n */\n far: number;\n private _far: number;\n\n private _cullingVolume = new CullingVolume([\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane()\n ]);\n private _perspectiveMatrix = new Matrix4();\n private _infinitePerspective = new Matrix4();\n\n /**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Vector4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveOffCenterFrustum\n *\n * @example\n * const frustum = new PerspectiveOffCenterFrustum({\n * left : -1.0,\n * right : 1.0,\n * top : 1.0,\n * bottom : -1.0,\n * near : 1.0,\n * far : 100.0\n * });\n *\n * @see PerspectiveFrustum\n */\n constructor(options: PerspectiveOffCenterFrustumOptions = {}) {\n const {near = 1.0, far = 500000000.0} = options;\n\n this.left = options.left;\n this._left = undefined;\n\n this.right = options.right;\n this._right = undefined;\n\n this.top = options.top;\n this._top = undefined;\n\n this.bottom = options.bottom;\n this._bottom = undefined;\n\n this.near = near;\n this._near = near;\n\n this.far = far;\n this._far = far;\n }\n\n /**\n * Returns a duplicate of a PerspectiveOffCenterFrustum instance.\n * @returns {PerspectiveOffCenterFrustum} A new PerspectiveFrustum instance.\n * */\n clone(): PerspectiveOffCenterFrustum {\n return new PerspectiveOffCenterFrustum({\n right: this.right,\n left: this.left,\n top: this.top,\n bottom: this.bottom,\n near: this.near,\n far: this.far\n });\n }\n\n /**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * true if they are equal, false otherwise.\n *\n * @returns {Boolean} true if they are equal, false otherwise.\n */\n equals(other: PerspectiveOffCenterFrustum): boolean {\n return (\n other &&\n other instanceof PerspectiveOffCenterFrustum &&\n this.right === other.right &&\n this.left === other.left &&\n this.top === other.top &&\n this.bottom === other.bottom &&\n this.near === other.near &&\n this.far === other.far\n );\n }\n\n /**\n * Gets the perspective projection matrix computed from the view frustum.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n *\n * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix\n */\n get projectionMatrix(): Matrix4 {\n this._update();\n return this._perspectiveMatrix;\n }\n\n /**\n * Gets the perspective projection matrix computed from the view frustum with an infinite far plane.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n *\n * @see PerspectiveOffCenterFrustum#projectionMatrix\n */\n get infiniteProjectionMatrix(): Matrix4 {\n this._update();\n return this._infinitePerspective;\n }\n\n /**\n * Creates a culling volume for this frustum.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\n // eslint-disable-next-line complexity, max-statements\n computeCullingVolume(\n /** A Vector3 defines the eye position. */\n position: Readonly,\n /** A Vector3 defines the view direction. */\n direction: Readonly,\n /** A Vector3 defines the up direction. */\n up: Readonly\n ): CullingVolume {\n assert(position, 'position is required.');\n assert(direction, 'direction is required.');\n assert(up, 'up is required.');\n\n const planes = this._cullingVolume.planes;\n\n up = scratchPlaneUpVector.copy(up).normalize();\n const right = scratchPlaneRightVector.copy(direction).cross(up).normalize();\n\n const nearCenter = scratchPlaneNearCenter\n .copy(direction)\n .multiplyByScalar(this.near)\n .add(position);\n\n const farCenter = scratchPlaneFarCenter\n .copy(direction)\n .multiplyByScalar(this.far)\n .add(position);\n\n let normal = scratchPlaneNormal;\n\n // Left plane computation\n normal.copy(right).multiplyByScalar(this.left).add(nearCenter).subtract(position).cross(up);\n\n planes[0].fromPointNormal(position, normal);\n\n // Right plane computation\n normal\n .copy(right)\n .multiplyByScalar(this.right)\n .add(nearCenter)\n .subtract(position)\n .cross(up)\n .negate();\n\n planes[1].fromPointNormal(position, normal);\n\n // Bottom plane computation\n normal\n .copy(up)\n .multiplyByScalar(this.bottom)\n .add(nearCenter)\n .subtract(position)\n .cross(right)\n .negate();\n\n planes[2].fromPointNormal(position, normal);\n\n // Top plane computation\n normal.copy(up).multiplyByScalar(this.top).add(nearCenter).subtract(position).cross(right);\n\n planes[3].fromPointNormal(position, normal);\n\n normal = new Vector3().copy(direction);\n\n // Near plane computation\n planes[4].fromPointNormal(nearCenter, normal);\n\n // Far plane computation\n normal.negate();\n\n planes[5].fromPointNormal(farCenter, normal);\n\n return this._cullingVolume;\n }\n\n /**\n * Returns the pixel's width and height in meters.\n *\n * @returns {Vector2} The modified result parameter or a new instance of {@link Vector2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, new Vector2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * const position = camera.position;\n * const direction = camera.direction;\n * const toCenter = Vector3.subtract(primitive.boundingVolume.center, position, new Vector3()); // vector from camera to a primitive\n * const toCenterProj = Vector3.multiplyByScalar(direction, Vector3.dot(direction, toCenter), new Vector3()); // project vector onto camera direction vector\n * const distance = Vector3.magnitude(toCenterProj);\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, new Vector2());\n */\n getPixelDimensions(\n /** The width of the drawing buffer. */\n drawingBufferWidth: number,\n /** The height of the drawing buffer. */\n drawingBufferHeight: number,\n /** The distance to the near plane in meters. */\n distance: number,\n /** The object onto which to store the result. */\n result: Vector2\n ): Vector2 {\n this._update();\n\n assert(Number.isFinite(drawingBufferWidth) && Number.isFinite(drawingBufferHeight));\n // 'Both drawingBufferWidth and drawingBufferHeight are required.'\n assert(drawingBufferWidth > 0);\n // 'drawingBufferWidth must be greater than zero.'\n assert(drawingBufferHeight > 0);\n // 'drawingBufferHeight must be greater than zero.'\n assert(distance > 0);\n // 'distance is required.');\n assert(result);\n // 'A result object is required.');\n\n const inverseNear = 1.0 / this.near;\n let tanTheta = this.top * inverseNear;\n const pixelHeight = (2.0 * distance * tanTheta) / drawingBufferHeight;\n tanTheta = this.right * inverseNear;\n const pixelWidth = (2.0 * distance * tanTheta) / drawingBufferWidth;\n\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n }\n\n // eslint-disable-next-line complexity, max-statements\n private _update() {\n assert(\n Number.isFinite(this.right) &&\n Number.isFinite(this.left) &&\n Number.isFinite(this.top) &&\n Number.isFinite(this.bottom) &&\n Number.isFinite(this.near) &&\n Number.isFinite(this.far)\n );\n // throw new DeveloperError('right, left, top, bottom, near, or far parameters are not set.');\n\n const {top, bottom, right, left, near, far} = this;\n\n if (\n top !== this._top ||\n bottom !== this._bottom ||\n left !== this._left ||\n right !== this._right ||\n near !== this._near ||\n far !== this._far\n ) {\n assert(\n this.near > 0 && this.near < this.far,\n 'near must be greater than zero and less than far.'\n );\n\n this._left = left;\n this._right = right;\n this._top = top;\n this._bottom = bottom;\n this._near = near;\n this._far = far;\n this._perspectiveMatrix = new Matrix4().frustum({\n left,\n right,\n bottom,\n top,\n near,\n far\n });\n this._infinitePerspective = new Matrix4().frustum({\n left,\n right,\n bottom,\n top,\n near,\n far: Infinity\n });\n }\n }\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\n\n/* eslint-disable */\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = (4.0 / 3.0) * Math.PI;\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.\n *\n * The bounding sphere is computed by running two algorithms, a naive algorithm and\n * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.\n * Bounding sphere computation article http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding\n *\n * @param positions An array of points that the bounding sphere will enclose.\n * @param result Optional object onto which to store the result.\n * @returns The modified result parameter or a new `BoundingSphere` instance if not provided.\n */\nexport default function makeBoundingSphereFromPoints(\n positions: number[][],\n result: BoundingSphere = new BoundingSphere()\n): BoundingSphere {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n xMin.copy(currentPos);\n }\n\n if (x > xMax.x) {\n xMax.copy(currentPos);\n }\n\n if (y < yMin.y) {\n yMin.copy(currentPos);\n }\n\n if (y > yMax.y) {\n yMax.copy(currentPos);\n }\n\n if (z < zMin.z) {\n zMin.copy(currentPos);\n }\n\n if (z > zMax.z) {\n zMax.copy(currentPos);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n\n // Set the diameter endpoints to the largest span.\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n const naiveCenter = fromPointsNaiveCenterScratch\n .copy(minBoxPt)\n .add(maxBoxPt)\n .multiplyByScalar(0.5);\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n let naiveRadius = 0;\n for (const position of positions) {\n currentPos.copy(position);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n const oldCenterToPointSquared = fromPointsScratch\n .copy(currentPos)\n .subtract(ritterCenter)\n .magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n result.radius = naiveRadius;\n }\n\n return result;\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Matrix3, _MathUtils} from '@math.gl/core';\n\nconst scratchMatrix = new Matrix3();\nconst scratchUnitary = new Matrix3();\nconst scratchDiagonal = new Matrix3();\n\nconst jMatrix = new Matrix3();\nconst jMatrixTranspose = new Matrix3();\n\nexport type EigenDecomposition = {\n unitary: Matrix3;\n diagonal: Matrix3;\n};\n\n/**\n * Computes the eigenvectors and eigenvalues of a symmetric matrix.\n *\n * - Returns a diagonal matrix and unitary matrix such that:\n * `matrix = unitary matrix * diagonal matrix * transpose(unitary matrix)`\n * - The values along the diagonal of the diagonal matrix are the eigenvalues. The columns\n * of the unitary matrix are the corresponding eigenvectors.\n * - This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n * section 8.4.3 The Classical Jacobi Algorithm\n *\n * @param matrix The 3x3 matrix to decompose into diagonal and unitary matrix. Expected to be symmetric.\n * @param result Optional object with unitary and diagonal properties which are matrices onto which to store the result.\n * @returns An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively.\n *\n * @example\n * const a = //... symmetric matrix\n * const result = {\n * unitary : new Matrix3(),\n * diagonal : new Matrix3()\n * };\n * computeEigenDecomposition(a, result);\n *\n * const unitaryTranspose = Matrix3.transpose(result.unitary, new Matrix3());\n * const b = Matrix3.multiply(result.unitary, result.diagonal, new Matrix3());\n * Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a\n *\n * const lambda = result.diagonal.getColumn(0, new Vector3()).x; // first eigenvalue\n * const v = result.unitary.getColumn(0, new Vector3()); // first eigenvector\n * const c = v.multiplyByScalar(lambda); // equal to v.transformByMatrix3(a)\n */\nexport default function computeEigenDecomposition(\n matrix: number[],\n // @ts-expect-error accept empty object type\n result: EigenDecomposition = {}\n): EigenDecomposition {\n const EIGEN_TOLERANCE = _MathUtils.EPSILON20;\n const EIGEN_MAX_SWEEPS = 10;\n\n let count = 0;\n let sweep = 0;\n\n const unitaryMatrix = scratchUnitary;\n const diagonalMatrix = scratchDiagonal;\n\n unitaryMatrix.identity();\n diagonalMatrix.copy(matrix);\n\n const epsilon = EIGEN_TOLERANCE * computeFrobeniusNorm(diagonalMatrix);\n\n while (sweep < EIGEN_MAX_SWEEPS && offDiagonalFrobeniusNorm(diagonalMatrix) > epsilon) {\n shurDecomposition(diagonalMatrix, jMatrix);\n\n jMatrixTranspose.copy(jMatrix).transpose();\n\n diagonalMatrix.multiplyRight(jMatrix);\n diagonalMatrix.multiplyLeft(jMatrixTranspose);\n unitaryMatrix.multiplyRight(jMatrix);\n\n if (++count > 2) {\n ++sweep;\n count = 0;\n }\n }\n\n result.unitary = unitaryMatrix.toTarget(result.unitary);\n result.diagonal = diagonalMatrix.toTarget(result.diagonal);\n\n return result;\n}\n\nfunction computeFrobeniusNorm(matrix: Matrix3): number {\n let norm = 0.0;\n for (let i = 0; i < 9; ++i) {\n const temp = matrix[i];\n norm += temp * temp;\n }\n return Math.sqrt(norm);\n}\n\nconst rowVal = [1, 0, 0];\nconst colVal = [2, 2, 1];\n\n// Computes the \"off-diagonal\" Frobenius norm.\n// Assumes matrix is symmetric.\nfunction offDiagonalFrobeniusNorm(matrix: Matrix3): number {\n let norm = 0.0;\n for (let i = 0; i < 3; ++i) {\n const temp = matrix[scratchMatrix.getElementIndex(colVal[i], rowVal[i])];\n norm += 2.0 * temp * temp;\n }\n return Math.sqrt(norm);\n}\n\n// The routine takes a matrix, which is assumed to be symmetric, and\n// finds the largest off-diagonal term, and then creates\n// a matrix (result) which can be used to help reduce it\n//\n// This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n// section 8.4.2 The 2by2 Symmetric Schur Decomposition.\n//\n// eslint-disable-next-line max-statements\nfunction shurDecomposition(matrix: Matrix3, result: Matrix3): Matrix3 {\n const tolerance = _MathUtils.EPSILON15;\n\n let maxDiagonal = 0.0;\n let rotAxis = 1;\n\n // find pivot (rotAxis) based on max diagonal of matrix\n for (let i = 0; i < 3; ++i) {\n const temp = Math.abs(matrix[scratchMatrix.getElementIndex(colVal[i], rowVal[i])]);\n if (temp > maxDiagonal) {\n rotAxis = i;\n maxDiagonal = temp;\n }\n }\n\n const p = rowVal[rotAxis];\n const q = colVal[rotAxis];\n\n let c = 1.0;\n let s = 0.0;\n\n if (Math.abs(matrix[scratchMatrix.getElementIndex(q, p)]) > tolerance) {\n const qq = matrix[scratchMatrix.getElementIndex(q, q)];\n const pp = matrix[scratchMatrix.getElementIndex(p, p)];\n const qp = matrix[scratchMatrix.getElementIndex(q, p)];\n\n const tau = (qq - pp) / 2.0 / qp;\n let t;\n\n if (tau < 0.0) {\n t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau));\n } else {\n t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau));\n }\n\n c = 1.0 / Math.sqrt(1.0 + t * t);\n s = t * c;\n }\n\n // Copy into result\n Matrix3.IDENTITY.to(result);\n result[scratchMatrix.getElementIndex(p, p)] = result[scratchMatrix.getElementIndex(q, q)] = c;\n result[scratchMatrix.getElementIndex(q, p)] = s;\n result[scratchMatrix.getElementIndex(p, q)] = -s;\n\n return result;\n}\n","// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3} from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\n\nconst scratchVector2 = new Vector3();\n\nconst scratchVector3 = new Vector3();\n\nconst scratchVector4 = new Vector3();\n\nconst scratchVector5 = new Vector3();\n\nconst scratchVector6 = new Vector3();\n\nconst scratchCovarianceResult = new Matrix3();\n\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\n\n/**\n * Computes an instance of an OrientedBoundingBox of the given positions.\n *\n * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis).\n * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf\n */\n/* eslint-disable max-statements */\nexport function makeOrientedBoundingBoxFromPoints(\n positions: number[][],\n result: OrientedBoundingBox = new OrientedBoundingBox()\n): OrientedBoundingBox {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n for (const position of positions) {\n meanPoint.add(position);\n }\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\n\n let exx = 0.0;\n let exy = 0.0;\n let exz = 0.0;\n let eyy = 0.0;\n let eyz = 0.0;\n let ezz = 0.0;\n\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\n exx += p.x * p.x;\n exy += p.x * p.y;\n exz += p.x * p.z;\n eyy += p.y * p.y;\n eyz += p.y * p.z;\n ezz += p.z * p.z;\n }\n\n exx *= invLength;\n exy *= invLength;\n exz *= invLength;\n eyy *= invLength;\n eyz *= invLength;\n ezz *= invLength;\n\n const covarianceMatrix = scratchCovarianceResult;\n covarianceMatrix[0] = exx;\n covarianceMatrix[1] = exy;\n covarianceMatrix[2] = exz;\n covarianceMatrix[3] = exy;\n covarianceMatrix[4] = eyy;\n covarianceMatrix[5] = eyz;\n covarianceMatrix[6] = exz;\n covarianceMatrix[7] = eyz;\n covarianceMatrix[8] = ezz;\n\n const {unitary} = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\n\n let u1 = -Number.MAX_VALUE;\n let u2 = -Number.MAX_VALUE;\n let u3 = -Number.MAX_VALUE;\n let l1 = Number.MAX_VALUE;\n let l2 = Number.MAX_VALUE;\n let l3 = Number.MAX_VALUE;\n\n for (const position of positions) {\n scratchVector2.copy(position);\n\n u1 = Math.max(scratchVector2.dot(v1), u1);\n u2 = Math.max(scratchVector2.dot(v2), u2);\n u3 = Math.max(scratchVector2.dot(v3), u3);\n\n l1 = Math.min(scratchVector2.dot(v1), l1);\n l2 = Math.min(scratchVector2.dot(v2), l2);\n l3 = Math.min(scratchVector2.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n\n result.center.copy(v1).add(v2).add(v3);\n\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n\n return result;\n}\n\n/**\n * Computes an instance of an AxisAlignedBoundingBox. The box is determined by\n * finding the points spaced the farthest apart on the x, y, and z axes.\n */\nexport function makeAxisAlignedBoundingBoxFromPoints(\n positions: readonly number[][],\n result: AxisAlignedBoundingBox = new AxisAlignedBoundingBox()\n): AxisAlignedBoundingBox {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n\n return result;\n}\n","/* eslint-disable max-statements, max-depth, complexity, no-unused-expressions */\n\nimport {equals} from '@math.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\nexport const WINDING = {\n CLOCKWISE: 1,\n COUNTER_CLOCKWISE: -1\n} as const;\n\n/** Polygon representation where each point is represented as a separate array of positions. */\ntype PointsArray = NumericArray[];\n\n/** Segment visitor callback type for polygons defined with flat arrays, */\ntype SegmentVisitorFlat = (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n i1: number,\n i2: number\n) => void;\n\n/** Segment visitor callback type for polygons defined with array of points. */\nexport type SegmentVisitorPoints = (\n p1: NumericArray,\n p2: NumericArray,\n i1: number,\n i2: number\n) => void;\n\n/** Parameters of a polygon. */\ntype PolygonParams = {\n start?: number; // Start index of the polygon in the array of positions. Defaults to 0.\n end?: number; // End index of the polygon in the array of positions. Defaults to number of positions.\n size?: number; // Size of a point, 2 (XZ) or 3 (XYZ). Defaults to 2. Affects only polygons stored in flat arrays.\n isClosed?: boolean; // Indicates that the first point of the polygon is equal to the last point, and additional checks should be ommited.\n};\n\n/**\n * Checks winding direction of the polygon and reverses the polygon in case of opposite winding direction.\n * Note: points are modified in-place.\n * @param points An array that represents points of the polygon.\n * @param direction Requested winding direction. 1 is for clockwise, -1 for counterclockwise winding direction.\n * @param options Parameters of the polygon.\n * @return Returns true if the winding direction was changed.\n */\nexport function modifyPolygonWindingDirection(\n points: NumericArray,\n direction: number,\n options: PolygonParams = {}\n): boolean {\n const windingDirection = getPolygonWindingDirection(points, options);\n if (windingDirection !== direction) {\n reversePolygon(points, options);\n return true;\n }\n return false;\n}\n\n/**\n * Returns winding direction of the polygon.\n * @param points An array that represents points of the polygon.\n * @param options Parameters of the polygon.\n * @returns Winding direction of the polygon.\n */\nexport function getPolygonWindingDirection(\n points: NumericArray,\n options: PolygonParams = {}\n): number {\n return Math.sign(getPolygonSignedArea(points, options));\n}\n\n/**\n * Returns signed area of the polygon.\n * @param points An array that represents points of the polygon.\n * @param options Parameters of the polygon.\n * @returns Signed area of the polygon.\n * https://en.wikipedia.org/wiki/Shoelace_formula\n */\nexport function getPolygonSignedArea(points: NumericArray, options: PolygonParams = {}): number {\n const {start = 0, end = points.length} = options;\n const dim = options.size || 2;\n let area = 0;\n for (let i = start, j = end - dim; i < end; i += dim) {\n area += (points[i] - points[j]) * (points[i + 1] + points[j + 1]);\n j = i;\n }\n return area / 2;\n}\n\n/**\n * Calls the visitor callback for each segment in the polygon.\n * @param points An array that represents points of the polygon\n * @param visitor A callback to call for each segment.\n * @param options Parameters of the polygon.\n */\nexport function forEachSegmentInPolygon(\n points: NumericArray,\n visitor: SegmentVisitorFlat,\n options: PolygonParams = {}\n): void {\n const {start = 0, end = points.length, size = 2, isClosed} = options;\n\n const numPoints = (end - start) / size;\n for (let i = 0; i < numPoints - 1; ++i) {\n visitor(\n points[start + i * size],\n points[start + i * size + 1],\n points[start + (i + 1) * size],\n points[start + (i + 1) * size + 1],\n i,\n i + 1\n );\n }\n\n const endPointIndex = start + (numPoints - 1) * size;\n const isClosedEx =\n isClosed ||\n (equals(points[start], points[endPointIndex]) &&\n equals(points[start + 1], points[endPointIndex + 1]));\n\n if (!isClosedEx) {\n visitor(\n points[endPointIndex],\n points[endPointIndex + 1],\n points[start],\n points[start + 1],\n numPoints - 1,\n 0\n );\n }\n}\n\nfunction reversePolygon(\n points: NumericArray,\n options: {start?: number; end?: number; size?: number}\n): void {\n const {start = 0, end = points.length, size = 2} = options;\n\n const numPoints = (end - start) / size;\n const numSwaps = Math.floor(numPoints / 2);\n for (let i = 0; i < numSwaps; ++i) {\n const b1 = start + i * size;\n const b2 = start + (numPoints - 1 - i) * size;\n for (let j = 0; j < size; ++j) {\n const tmp = points[b1 + j];\n points[b1 + j] = points[b2 + j];\n points[b2 + j] = tmp;\n }\n }\n}\n\n/**\n * Checks winding direction of the polygon and reverses the polygon in case of opposite winding direction.\n * Note: points are modified in-place.\n * @param points Array of points that represent the polygon.\n * @param direction Requested winding direction. 1 is for clockwise, -1 for counterclockwise winding direction.\n * @param options Parameters of the polygon.\n * @return Returns true if the winding direction was changed.\n */\nexport function modifyPolygonWindingDirectionPoints(\n points: PointsArray,\n direction: number,\n options: PolygonParams = {}\n): boolean {\n const currentDirection = getPolygonWindingDirectionPoints(points, options);\n if (currentDirection !== direction) {\n points.reverse();\n return true;\n }\n return false;\n}\n\n/**\n * Returns winding direction of the polygon.\n * @param points Array of points that represent the polygon.\n * @param options Parameters of the polygon.\n * @returns Winding direction of the polygon.\n */\nexport function getPolygonWindingDirectionPoints(\n points: PointsArray,\n options: PolygonParams = {}\n): number {\n return Math.sign(getPolygonSignedAreaPoints(points, options));\n}\n\n/**\n * Returns signed area of the polygon.\n * @param points Array of points that represent the polygon.\n * @param options Parameters of the polygon.\n * @returns Signed area of the polygon.\n */\nexport function getPolygonSignedAreaPoints(\n points: PointsArray,\n options: PolygonParams = {}\n): number {\n // https://en.wikipedia.org/wiki/Shoelace_formula\n const {start = 0, end = points.length} = options;\n let area = 0;\n for (let i = start, j = end - 1; i < end; ++i) {\n area += (points[i][0] - points[j][0]) * (points[i][1] + points[j][1]);\n j = i;\n }\n return area / 2;\n}\n\n/**\n * Calls visitor callback for each segment in the polygon.\n * @param points Array of points that represent the polygon.\n * @param visitor A callback to call for each segment.\n * @param options Parameters of the polygon.\n */\nexport function forEachSegmentInPolygonPoints(\n points: PointsArray,\n visitor: SegmentVisitorPoints,\n options: PolygonParams = {}\n): void {\n const {start = 0, end = points.length, isClosed} = options;\n for (let i = start; i < end - 1; ++i) {\n visitor(points[i], points[i + 1], i, i + 1);\n }\n\n const isClosedEx = isClosed || equals(points[end - 1], points[0]);\n if (!isClosedEx) {\n visitor(points[end - 1], points[0], end - 1, 0);\n }\n}\n","/*\n Adapted from https://github.com/mapbox/earcut to allow passing in\n of outline and hole areas using the `areas` parameter. As the\n areas are calcuted as part of classifying the polygon rings\n we can pass them in again to avoid recomputation\n\n ISC License\n\n Copyright (c) 2016, Mapbox\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n\n */\n\n/* eslint-disable */\n\nimport {getPolygonSignedArea} from './polygon-utils';\n\n/**\n * Computes a triangulation of a polygon\n * @param positions a flat array of the vertex positions that define the polygon.\n * @param holeIndices an array of hole indices if any (e.g. [5, 8] for a 12-vertex input would mean one hole with vertices 5–7 and another with 8–11).\n * @param dim the number of elements in each vertex. Size `2` will interpret `positions` as `[x0, y0, x1, y1, ...]` and size `3` will interpret `positions` as `[x0, y0, z0, x1, y1, z1, ...]`. Default `2`.\n * @param areas areas of outer polygon and holes as computed by `getPolygonSignedArea()`. Can be optionally supplied to speed up triangulation\n * @returns array of indices into the `positions` array that describes the triangulation of the polygon\n * Adapted from https://github.com/mapbox/earcut\n */\nexport function earcut(\n positions: number[],\n holeIndices?: number[],\n dim: number = 2,\n areas?: number[]\n): number[] {\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : positions.length;\n let outerNode = linkedList(positions, 0, outerLen, dim, true, areas && areas[0]);\n const triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n let invSize;\n let maxX;\n let maxY;\n let minX;\n let minY;\n let x;\n let y;\n\n if (hasHoles) outerNode = eliminateHoles(positions, holeIndices, outerNode, dim, areas);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (positions.length > 80 * dim) {\n minX = maxX = positions[0];\n minY = maxY = positions[1];\n\n for (let i = dim; i < outerLen; i += dim) {\n x = positions[i];\n y = positions[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise, area) {\n let i;\n let last;\n if (area === undefined) {\n area = getPolygonSignedArea(data, {start, end, size: dim});\n }\n\n // Note that the signed area calculation in math.gl\n // has the opposite sign to that which was originally\n // present in earcut, thus the `< 0` is reversed\n if (clockwise === area < 0) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end?) {\n if (!start) return start;\n if (!end) end = start;\n\n let p = start;\n let again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass?) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n let stop = ear;\n let prev;\n let next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n const a = ear.prev;\n const b = ear;\n const c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n let p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0)\n return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n const a = ear.prev;\n const b = ear;\n const c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n const minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : b.x < c.x ? b.x : c.x;\n const minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : b.y < c.y ? b.y : c.y;\n const maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : b.x > c.x ? b.x : c.x;\n const maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : b.y > c.y ? b.y : c.y;\n\n // z-order range for the current triangle bbox;\n const minZ = zOrder(minTX, minTY, minX, minY, invSize);\n const maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n let p = ear.prevZ;\n let n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (\n p !== ear.prev &&\n p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0\n )\n return false;\n p = p.prevZ;\n\n if (\n n !== ear.prev &&\n n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0\n )\n return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (\n p !== ear.prev &&\n p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0\n )\n return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (\n n !== ear.prev &&\n n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0\n )\n return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n let p = start;\n do {\n const a = p.prev;\n const b = p.next.next;\n\n if (\n !equals(a, b) &&\n intersects(a, p, p.next, b) &&\n locallyInside(a, b) &&\n locallyInside(b, a)\n ) {\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n let a = start;\n do {\n let b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n let c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim, areas) {\n const queue = [];\n let i;\n let len;\n let start;\n let end;\n let list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false, areas && areas[i + 1]);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n const b = splitPolygon(outerNode, hole);\n\n // filter collinear points around the cuts\n filterPoints(outerNode, outerNode.next);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n let p = outerNode;\n const hx = hole.x;\n const hy = hole.y;\n let qx = -Infinity;\n let m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n const x = p.x + ((hy - p.y) * (p.next.x - p.x)) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n const stop = m;\n const mx = m.x;\n const my = m.y;\n let tanMin = Infinity;\n let tan;\n\n p = m;\n\n do {\n if (\n hx >= p.x &&\n p.x >= mx &&\n hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)\n ) {\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (\n locallyInside(p, hole) &&\n (tan < tanMin ||\n (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))\n ) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n let p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n let e;\n let i;\n let inSize = 1;\n let numMerges;\n let p;\n let pSize;\n let q;\n let qSize;\n let tail;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00ff00ff;\n x = (x | (x << 4)) & 0x0f0f0f0f;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00ff00ff;\n y = (y | (y << 4)) & 0x0f0f0f0f;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n let p = start;\n let leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (\n (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0\n );\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return (\n a.next.i !== b.i &&\n a.prev.i !== b.i &&\n !intersectsPolygon(a, b) && // dones't intersect other edges\n ((locallyInside(a, b) &&\n locallyInside(b, a) &&\n middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b))) || // does not create opposite-facing sectors\n (equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0))\n ); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n const o1 = sign(area(p1, q1, p2));\n const o2 = sign(area(p1, q1, q2));\n const o3 = sign(area(p2, q2, p1));\n const o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return (\n q.x <= Math.max(p.x, r.x) &&\n q.x >= Math.min(p.x, r.x) &&\n q.y <= Math.max(p.y, r.y) &&\n q.y >= Math.min(p.y, r.y)\n );\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n let p = a;\n do {\n if (\n p.i !== a.i &&\n p.next.i !== a.i &&\n p.i !== b.i &&\n p.next.i !== b.i &&\n intersects(p, p.next, a, b)\n )\n return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0\n ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0\n : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n let p = a;\n let inside = false;\n const px = (a.x + b.x) / 2;\n const py = (a.y + b.y) / 2;\n do {\n if (\n p.y > py !== p.next.y > py &&\n p.next.y !== p.y &&\n px < ((p.next.x - p.x) * (py - p.y)) / (p.next.y - p.y) + p.x\n )\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n const a2 = new Node(a.i, a.x, a.y);\n const b2 = new Node(b.i, b.x, b.y);\n const an = a.next;\n const bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n const p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n","/*\n Adapted from https://github.com/mapbox/lineclip to work with flat arrays\n and 3d positions\n\n ISC License\n\n Copyright (c) 2015, Mapbox\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n\n */\n\n/* eslint-disable max-statements, max-depth, complexity */\n\nimport {push, copy, getPointAtIndex} from './utils';\nimport type {NumericArray} from '@math.gl/core';\n\nexport type BoundingBox = [number, number, number, number];\n\n/**\n * Cohen-Sutherland line clipping algorithm, adapted to efficiently\n * handle polylines rather than just segments\n */\nexport function clipPolyline(\n positions: Readonly,\n bbox: BoundingBox,\n options?: {\n size?: number;\n startIndex?: number;\n endIndex?: number;\n }\n): number[][] {\n const {size = 2, startIndex = 0, endIndex = positions.length} = options || {};\n const numPoints = (endIndex - startIndex) / size;\n const result: number[][] = [];\n let part: number[] = [];\n let a: number[];\n let b: number[];\n let codeA: number = -1;\n let codeB: number;\n let lastCode: number;\n\n for (let i = 1; i < numPoints; i++) {\n a = getPointAtIndex(positions, i - 1, size, startIndex, a);\n b = getPointAtIndex(positions, i, size, startIndex, b);\n if (codeA < 0) {\n codeA = bitCode(a, bbox);\n }\n codeB = lastCode = bitCode(b, bbox);\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(codeA | codeB)) {\n // accept\n push(part, a);\n\n if (codeB !== lastCode) {\n // segment went outside\n push(part, b);\n\n if (i < numPoints - 1) {\n // start a new line\n result.push(part);\n part = [];\n }\n } else if (i === numPoints - 1) {\n push(part, b);\n }\n break;\n } else if (codeA & codeB) {\n // trivial reject\n break;\n } else if (codeA) {\n // a outside, intersect with clip edge\n intersect(a, b, codeA, bbox, a);\n codeA = bitCode(a, bbox);\n } else {\n // b outside\n intersect(a, b, codeB, bbox, b);\n codeB = bitCode(b, bbox);\n }\n }\n\n codeA = lastCode;\n }\n\n if (part.length) result.push(part);\n\n return result;\n}\n\n/**\n * Sutherland-Hodgeman polygon clipping algorithm\n * polygon must be closed (first vertex == last vertex)\n */\nexport function clipPolygon(\n positions: Readonly,\n bbox: BoundingBox,\n options?: {\n size?: number;\n startIndex?: number;\n endIndex?: number;\n }\n): number[] {\n const {size = 2, endIndex = positions.length} = options || {};\n let {startIndex = 0} = options || {};\n let numPoints = (endIndex - startIndex) / size;\n let result: number[];\n let p: number[];\n let prev: number[];\n let inside: boolean;\n let prevInside: boolean;\n\n // clip against each side of the clip rectangle\n for (let edge = 1; edge <= 8; edge *= 2) {\n result = [];\n prev = getPointAtIndex(positions, numPoints - 1, size, startIndex, prev);\n prevInside = !(bitCode(prev, bbox) & edge);\n\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n inside = !(bitCode(p, bbox) & edge);\n\n // if segment goes through the clip window, add an intersection\n if (inside !== prevInside) push(result, intersect(prev, p, edge, bbox));\n\n if (inside) push(result, p); // add a point if it's inside\n\n copy(prev, p);\n prevInside = inside;\n }\n\n // close loop\n positions = result;\n startIndex = 0;\n numPoints = result.length / size;\n\n if (!numPoints) break;\n }\n\n return result;\n}\n\n/** intersect a segment against one of the 4 lines that make up the bbox */\n\nexport function intersect(\n a: number[],\n b: number[],\n edge: number,\n bbox: BoundingBox,\n out: number[] = []\n): number[] {\n let t;\n // Forces out[snapI] to be on the bbox edge\n // Interpolation introduces precision issue which may cause lineclip to be\n // stuck in an infinite loop\n let snap: number;\n if (edge & 8) {\n // top\n t = (bbox[3] - a[1]) / (b[1] - a[1]);\n snap = 3;\n } else if (edge & 4) {\n // bottom\n t = (bbox[1] - a[1]) / (b[1] - a[1]);\n snap = 1;\n } else if (edge & 2) {\n // right\n t = (bbox[2] - a[0]) / (b[0] - a[0]);\n snap = 2;\n } else if (edge & 1) {\n // left\n t = (bbox[0] - a[0]) / (b[0] - a[0]);\n snap = 0;\n } else {\n return null;\n }\n for (let i = 0; i < a.length; i++) {\n out[i] = (snap & 1) === i ? bbox[snap] : t * (b[i] - a[i]) + a[i];\n }\n return out;\n}\n\n/**\n * bit code reflects the point position relative to the bbox:\n * left mid right\n * top 1001 1000 1010\n * mid 0001 0000 0010\n * bottom 0101 0100 0110\n */\nexport function bitCode(p: number[], bbox: BoundingBox): number {\n let code = 0;\n\n if (p[0] < bbox[0]) code |= 1;\n // left\n else if (p[0] > bbox[2]) code |= 2; // right\n\n if (p[1] < bbox[1]) code |= 4;\n // bottom\n else if (p[1] > bbox[3]) code |= 8; // top\n\n return code;\n}\n","import type {NumericArray} from '@math.gl/core';\n\nexport function push(target: number[], source: number[]): boolean {\n const size = source.length;\n const startIndex = target.length;\n\n // dedupe, if source is the same point as the last vertex\n if (startIndex > 0) {\n let isDuplicate = true;\n for (let i = 0; i < size; i++) {\n if (target[startIndex - size + i] !== source[i]) {\n isDuplicate = false;\n break;\n }\n }\n if (isDuplicate) {\n return false;\n }\n }\n\n for (let i = 0; i < size; i++) {\n target[startIndex + i] = source[i];\n }\n return true;\n}\n\nexport function copy(target: number[], source: Readonly): void {\n const size = source.length;\n for (let i = 0; i < size; i++) {\n target[i] = source[i];\n }\n}\n\nexport function getPointAtIndex(\n positions: Readonly,\n index: number,\n size: number,\n offset: number,\n out: number[] = []\n): number[] {\n const startI = offset + index * size;\n for (let i = 0; i < size; i++) {\n out[i] = positions[startI + i];\n }\n return out;\n}\n","/* eslint-disable max-statements, max-depth, complexity, no-unused-expressions */\nimport {bitCode, intersect, BoundingBox} from './lineclip';\nimport {getPointAtIndex, copy, push} from './utils';\n\nimport type {NumericArray} from '@math.gl/core';\n\nexport type Polygon = {\n positions: Readonly;\n holeIndices?: Readonly;\n edgeTypes?: Readonly;\n};\n\nexport function cutPolylineByGrid(\n positions: NumericArray,\n options?: {\n size?: number;\n broken?: boolean;\n gridResolution?: number;\n gridOffset?: [number, number];\n startIndex?: number;\n endIndex?: number;\n }\n): number[] | number[][] {\n const {\n size = 2,\n broken = false,\n gridResolution = 10,\n gridOffset = [0, 0],\n startIndex = 0,\n endIndex = positions.length\n } = options || {};\n const numPoints = (endIndex - startIndex) / size;\n let part: number[] = [];\n const result: number[][] = [part];\n const a: number[] = getPointAtIndex(positions, 0, size, startIndex);\n let b: number[];\n let codeB: number;\n const cell: BoundingBox = getGridCell(a, gridResolution, gridOffset, []);\n const scratchPoint: number[] = [];\n push(part, a);\n\n for (let i = 1; i < numPoints; i++) {\n b = getPointAtIndex(positions, i, size, startIndex, b);\n codeB = bitCode(b, cell);\n\n while (codeB) {\n // find the intersection with the current cell\n intersect(a, b, codeB, cell, scratchPoint);\n const codeAlt = bitCode(scratchPoint, cell);\n if (codeAlt) {\n intersect(a, scratchPoint, codeAlt, cell, scratchPoint);\n codeB = codeAlt;\n }\n push(part, scratchPoint);\n // move to the next cell\n copy(a, scratchPoint);\n\n moveToNeighborCell(cell, gridResolution, codeB);\n if (broken && part.length > size) {\n part = [];\n result.push(part);\n push(part, a);\n }\n\n codeB = bitCode(b, cell);\n }\n\n push(part, b);\n copy(a, b);\n }\n\n return broken ? result : result[0];\n}\n\nconst TYPE_INSIDE = 0;\nconst TYPE_BORDER = 1;\n\nfunction concatInPlace(arr1: number[], arr2: number[]): number[] {\n for (let i = 0; i < arr2.length; i++) {\n arr1.push(arr2[i]);\n }\n return arr1;\n}\n\nexport function cutPolygonByGrid(\n positions: Readonly,\n holeIndices: Readonly | null = null,\n options?: {\n size?: number;\n gridResolution?: number;\n gridOffset?: [number, number];\n edgeTypes?: boolean;\n }\n): Polygon[] {\n if (!positions.length) {\n // input is empty\n return [];\n }\n const {size = 2, gridResolution = 10, gridOffset = [0, 0], edgeTypes = false} = options || {};\n const result: Polygon[] = [];\n const queue: {pos: Readonly; types: number[]; holes: Readonly}[] = [\n {\n pos: positions,\n types: edgeTypes ? (new Array(positions.length / size).fill(TYPE_BORDER) as number[]) : null,\n holes: holeIndices || []\n }\n ];\n const bbox: number[][] = [[], []];\n // @ts-ignore\n let cell: BoundingBox = [];\n\n // Recursively bisect polygon until every part fit in a single grid cell\n while (queue.length) {\n const {pos, types, holes} = queue.shift();\n\n // Get the bounding box of the outer polygon\n getBoundingBox(pos, size, holes[0] || pos.length, bbox);\n cell = getGridCell(bbox[0], gridResolution, gridOffset, cell);\n const code = bitCode(bbox[1], cell);\n\n if (code) {\n // Split the outer ring at the boundary\n let parts = bisectPolygon(pos, types, size, 0, holes[0] || pos.length, cell, code);\n const polygonLow = {pos: parts[0].pos, types: parts[0].types, holes: []};\n const polygonHigh = {pos: parts[1].pos, types: parts[1].types, holes: []};\n queue.push(polygonLow, polygonHigh);\n\n // Split each hole at the boundary\n for (let i = 0; i < holes.length; i++) {\n parts = bisectPolygon(pos, types, size, holes[i], holes[i + 1] || pos.length, cell, code);\n\n if (parts[0]) {\n polygonLow.holes.push(polygonLow.pos.length);\n polygonLow.pos = concatInPlace(polygonLow.pos, parts[0].pos);\n if (edgeTypes) {\n polygonLow.types = concatInPlace(polygonLow.types, parts[0].types);\n }\n }\n if (parts[1]) {\n polygonHigh.holes.push(polygonHigh.pos.length);\n polygonHigh.pos = concatInPlace(polygonHigh.pos, parts[1].pos);\n if (edgeTypes) {\n polygonHigh.types = concatInPlace(polygonHigh.types, parts[1].types);\n }\n }\n }\n } else {\n // Polygon fits in a single cell, no more processing required\n const polygon: Polygon = {positions: pos};\n if (edgeTypes) {\n polygon.edgeTypes = types;\n }\n if (holes.length) {\n polygon.holeIndices = holes;\n }\n\n result.push(polygon);\n }\n }\n return result;\n}\n\n// edgeTypes:\n// TYPE_BORDER - edge from the original polygon\n// TYPE_INSIDE - inside the original polygon\n// eslint-disable-next-line max-params\nfunction bisectPolygon(\n positions: Readonly,\n edgeTypes: number[] | undefined,\n size: number,\n startIndex: number,\n endIndex: number,\n bbox: BoundingBox,\n edge: number\n): {\n pos: number[];\n types?: number[];\n}[] {\n const numPoints = (endIndex - startIndex) / size;\n const resultLow: number[] = [];\n const resultHigh: number[] = [];\n const typesLow: number[] = [];\n const typesHigh: number[] = [];\n const scratchPoint: number[] = [];\n\n let p: number[];\n let side: number;\n let type: number;\n const prev = getPointAtIndex(positions, numPoints - 1, size, startIndex);\n let prevSide = Math.sign(edge & 8 ? prev[1] - bbox[3] : prev[0] - bbox[2]);\n let prevType = edgeTypes && edgeTypes[numPoints - 1];\n let lowPointCount = 0;\n let highPointCount = 0;\n\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n side = Math.sign(edge & 8 ? p[1] - bbox[3] : p[0] - bbox[2]);\n type = edgeTypes && edgeTypes[startIndex / size + i];\n\n // if segment goes through the boundary, add an intersection\n if (side && prevSide && prevSide !== side) {\n intersect(prev, p, edge, bbox, scratchPoint);\n push(resultLow, scratchPoint) && typesLow.push(prevType);\n push(resultHigh, scratchPoint) && typesHigh.push(prevType);\n }\n\n if (side <= 0) {\n push(resultLow, p) && typesLow.push(type);\n lowPointCount -= side;\n } else if (typesLow.length) {\n typesLow[typesLow.length - 1] = TYPE_INSIDE;\n }\n if (side >= 0) {\n push(resultHigh, p) && typesHigh.push(type);\n highPointCount += side;\n } else if (typesHigh.length) {\n typesHigh[typesHigh.length - 1] = TYPE_INSIDE;\n }\n\n copy(prev, p);\n prevSide = side;\n prevType = type;\n }\n\n return [\n lowPointCount ? {pos: resultLow, types: edgeTypes && typesLow} : null,\n highPointCount ? {pos: resultHigh, types: edgeTypes && typesHigh} : null\n ];\n}\n\nfunction getGridCell(\n p: number[],\n gridResolution: number,\n gridOffset: [number, number],\n out: number[]\n): BoundingBox {\n const left = Math.floor((p[0] - gridOffset[0]) / gridResolution) * gridResolution + gridOffset[0];\n const bottom =\n Math.floor((p[1] - gridOffset[1]) / gridResolution) * gridResolution + gridOffset[1];\n out[0] = left;\n out[1] = bottom;\n out[2] = left + gridResolution;\n out[3] = bottom + gridResolution;\n return out as BoundingBox;\n}\n\nfunction moveToNeighborCell(cell: number[], gridResolution: number, edge: number): void {\n if (edge & 8) {\n // top\n cell[1] += gridResolution;\n cell[3] += gridResolution;\n } else if (edge & 4) {\n // bottom\n cell[1] -= gridResolution;\n cell[3] -= gridResolution;\n } else if (edge & 2) {\n // right\n cell[0] += gridResolution;\n cell[2] += gridResolution;\n } else if (edge & 1) {\n // left\n cell[0] -= gridResolution;\n cell[2] -= gridResolution;\n }\n}\n\nfunction getBoundingBox(\n positions: Readonly,\n size: number,\n endIndex: number,\n out: number[][]\n): number[][] {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < endIndex; i += size) {\n const x = positions[i];\n const y = positions[i + 1];\n minX = x < minX ? x : minX;\n maxX = x > maxX ? x : maxX;\n minY = y < minY ? y : minY;\n maxY = y > maxY ? y : maxY;\n }\n\n out[0][0] = minX;\n out[0][1] = minY;\n out[1][0] = maxX;\n out[1][1] = maxY;\n return out;\n}\n","import {cutPolylineByGrid, cutPolygonByGrid} from './cut-by-grid';\nimport {getPointAtIndex, push} from './utils';\nimport type {Polygon} from './cut-by-grid';\nimport type {NumericArray} from '@math.gl/core';\n\n// https://en.wikipedia.org/wiki/Web_Mercator_projection\nconst DEFAULT_MAX_LATITUDE = 85.051129;\n\n/** https://user-images.githubusercontent.com/2059298/78465769-938b7a00-76ae-11ea-9b95-1f4c26425ab9.png */\nexport function cutPolylineByMercatorBounds(\n positions: Readonly,\n options?: {\n size?: number;\n startIndex?: number;\n endIndex?: number;\n normalize?: boolean;\n }\n): number[][] {\n const {size = 2, startIndex = 0, endIndex = positions.length, normalize = true} = options || {};\n\n // Remap longitudes so that each segment takes the shorter path\n const newPositions = positions.slice(startIndex, endIndex);\n wrapLongitudesForShortestPath(newPositions, size, 0, endIndex - startIndex);\n\n const parts = cutPolylineByGrid(newPositions, {\n size,\n broken: true,\n gridResolution: 360,\n gridOffset: [-180, -180]\n }) as number[][];\n\n if (normalize) {\n // Each part is guaranteed to be in a single copy of the world\n // Map longitudes back to [-180, 180]\n for (const part of parts) {\n shiftLongitudesIntoRange(part, size);\n }\n }\n return parts;\n}\n\n/** https://user-images.githubusercontent.com/2059298/78465770-94241080-76ae-11ea-809a-6a8534dac1d9.png */\nexport function cutPolygonByMercatorBounds(\n positions: Readonly,\n holeIndices: Readonly | null = null,\n options?: {\n size?: number;\n normalize?: boolean;\n maxLatitude?: number;\n edgeTypes?: boolean;\n }\n): Polygon[] {\n const {size = 2, normalize = true, edgeTypes = false} = options || {};\n holeIndices = holeIndices || [];\n const newPositions: number[] = [];\n const newHoleIndices: number[] = [];\n let srcStartIndex = 0;\n let targetIndex = 0;\n\n for (let ringIndex = 0; ringIndex <= holeIndices.length; ringIndex++) {\n // srcStartIndex/srcEndIndex define the ring in the original positions\n const srcEndIndex = holeIndices[ringIndex] || positions.length;\n // targetStartIndex/targetIndex define the ring in newPositions\n const targetStartIndex = targetIndex;\n\n // In case the ring contains a pole (e.g. Antarctica), we'll have to insert vertices\n // The insertion point is defined by the vertex closest to the pole\n // Split the the ring by the insertion point when copying to newPositions\n const splitIndex = findSplitIndex(positions, size, srcStartIndex, srcEndIndex);\n for (let i = splitIndex; i < srcEndIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n for (let i = srcStartIndex; i < splitIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n\n // Remap longitudes so that each segment takes the shorter path\n wrapLongitudesForShortestPath(newPositions, size, targetStartIndex, targetIndex);\n\n // Handle the case when the ring contains a pole\n insertPoleVertices(newPositions, size, targetStartIndex, targetIndex, options?.maxLatitude);\n\n srcStartIndex = srcEndIndex;\n newHoleIndices[ringIndex] = targetIndex;\n }\n newHoleIndices.pop();\n\n const parts = cutPolygonByGrid(newPositions, newHoleIndices, {\n size,\n gridResolution: 360,\n gridOffset: [-180, -180],\n edgeTypes\n });\n\n if (normalize) {\n // Each part is guaranteed to be in a single copy of the world\n // Map longitudes back to [-180, 180]\n for (const part of parts) {\n // @ts-expect-error (mutates readonly array) May mutate newPositions, which is created by us\n shiftLongitudesIntoRange(part.positions, size);\n }\n }\n return parts;\n}\n\n/* Helpers */\n\n// See comments for insertPoleVertices\nfunction findSplitIndex(\n positions: Readonly,\n size: number,\n startIndex: number,\n endIndex: number\n): number {\n let maxLat = -1;\n let pointIndex = -1;\n for (let i = startIndex + 1; i < endIndex; i += size) {\n const lat = Math.abs(positions[i]);\n if (lat > maxLat) {\n maxLat = lat;\n pointIndex = i - 1;\n }\n }\n return pointIndex;\n}\n\n// https://user-images.githubusercontent.com/2059298/78857483-5987e400-79de-11ea-98fc-0631287a8431.png\n//\n// If the polygon contains a pole, to tesselate it correctly, we need to insert the edge\n// of map into the polygon. This requires adding two vertices that represent the pole, by\n// drawing a perpendicular line to the Mercator map edge from a selected vertex on the ring.\n//\n// We select the insertion position carefully so that the inserted line segments do not\n// intersect with the ring itself. This is ensured by findSplitIndex, which returns the\n// vertex closest to the pole.\nfunction insertPoleVertices(\n positions: number[],\n size: number,\n startIndex: number,\n endIndex: number,\n maxLatitude: number = DEFAULT_MAX_LATITUDE\n): void {\n // Check if the ring contains a pole\n const firstLng = positions[startIndex];\n const lastLng = positions[endIndex - size];\n if (Math.abs(firstLng - lastLng) > 180) {\n // The ring does not make a round trip\n // Add the nearest pole to the vertices so that the polygon tesselates correctly\n const p = getPointAtIndex(positions, 0, size, startIndex);\n // Copy the first vertex to the world of the last vertex\n p[0] += Math.round((lastLng - firstLng) / 360) * 360;\n push(positions, p);\n // Project the copied vertex to the edge of the map\n p[1] = Math.sign(p[1]) * maxLatitude;\n push(positions, p);\n // Project the first vertex to the edge of the map\n p[0] = firstLng;\n push(positions, p);\n }\n}\n\nfunction wrapLongitudesForShortestPath(\n positions: NumericArray,\n size: number,\n startIndex: number,\n endIndex: number\n): void {\n let prevLng: number = positions[0];\n let lng: number;\n for (let i = startIndex; i < endIndex; i += size) {\n lng = positions[i];\n const delta = lng - prevLng;\n if (delta > 180 || delta < -180) {\n lng -= Math.round(delta / 360) * 360;\n }\n positions[i] = prevLng = lng;\n }\n}\n\nfunction shiftLongitudesIntoRange(positions: NumericArray, size: number): void {\n let refLng: number;\n const pointCount = positions.length / size;\n\n // Find a longitude that is not on the edge of a world\n // Which we will use to determine which world copy it is\n for (let i = 0; i < pointCount; i++) {\n refLng = positions[i * size];\n if ((refLng + 180) % 360 !== 0) {\n break;\n }\n }\n\n const delta = -Math.round(refLng / 360) * 360;\n if (delta === 0) {\n return;\n }\n for (let i = 0; i < pointCount; i++) {\n positions[i * size] += delta;\n }\n}\n","import {transformMat4, scale} from 'gl-matrix/vec4';\n\n// Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()\nexport function createMat4(): number[] {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\n// Transforms a vec4 with a projection matrix\nexport function transformVector(matrix: number[], vector: number[]): number[] {\n const result = transformMat4([] as number[], vector, matrix);\n scale(result, result, 1 / result[3]);\n return result;\n}\n\nexport function mod(value: number, divisor: number): number {\n const modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\n\nexport function lerp(start: number, end: number, step: number): number {\n return step * end + (1 - step) * start;\n}\n\nexport function clamp(x: number, min: number, max: number): number {\n return x < min ? min : x > max ? max : x;\n}\n\nfunction ieLog2(x: number): number {\n return Math.log(x) * Math.LOG2E;\n}\n// Handle missing log2 in IE 11\nexport const log2 = Math.log2 || ieLog2;\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport default function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(message || '@math.gl/web-mercator: assertion failed.');\n }\n}\n","// TODO - THE UTILITIES IN THIS FILE SHOULD BE IMPORTED FROM WEB-MERCATOR-VIEWPORT MODULE\n\nimport {createMat4, transformVector, clamp, log2} from './math-utils';\n\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport assert from './assert';\n\n// CONSTANTS\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst DEGREES_TO_RADIANS = PI / 180;\nconst RADIANS_TO_DEGREES = 180 / PI;\nconst TILE_SIZE = 512;\n// Average circumference (40075 km equatorial, 40007 km meridional)\nconst EARTH_CIRCUMFERENCE = 40.03e6;\n// Latitude that makes a square world, 2 * atan(E ** PI) - PI / 2\nexport const MAX_LATITUDE = 85.051129;\n\n// Mapbox default altitude\nexport const DEFAULT_ALTITUDE = 1.5;\n\nexport type DistanceScales = {\n unitsPerMeter: number[];\n metersPerUnit: number[];\n unitsPerMeter2?: number[];\n unitsPerDegree: number[];\n degreesPerUnit: number[];\n unitsPerDegree2?: number[];\n};\n\n/**\n * PROJECTION MATRIX PARAMETERS\n *\n * TODO how to document mebers\n * @param fov in radians. fov is variable, depends on pitch and altitude\n * @param aspect width/height\n * @param focalDistance distance at which visual scale factor is 1\n * @param near near clipping plane\n * @param far far clipping plane\n */\ntype ProjectionParameters = {\n fov: number;\n aspect: number;\n focalDistance: number;\n near: number;\n far: number;\n};\n\n/** Logarithimic zoom to linear scale **/\nexport function zoomToScale(zoom: number): number {\n return Math.pow(2, zoom);\n}\n\n/** Linear scale to logarithimic zoom **/\nexport function scaleToZoom(scale: number): number {\n return log2(scale);\n}\n\n/**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n *\n * @param lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return [x,y] coordinates.\n */\nexport function lngLatToWorld(lngLat: number[]): [number, number] {\n const [lng, lat] = lngLat;\n assert(Number.isFinite(lng));\n assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, 'invalid latitude');\n\n const lambda2 = lng * DEGREES_TO_RADIANS;\n const phi2 = lat * DEGREES_TO_RADIANS;\n const x = (TILE_SIZE * (lambda2 + PI)) / (2 * PI);\n const y = (TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5)))) / (2 * PI);\n return [x, y];\n}\n\n/**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [x,y] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\nexport function worldToLngLat(xy: number[]): [number, number] {\n const [x, y] = xy;\n const lambda2 = (x / TILE_SIZE) * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp((y / TILE_SIZE) * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\n\n/**\n * Returns the zoom level that gives a 1 meter pixel at a certain latitude\n * 1 = C*cos(y)/2^z/TILE_SIZE = C*cos(y)/2^(z+9)\n */\nexport function getMeterZoom(options: {latitude: number}): number {\n const {latitude} = options;\n assert(Number.isFinite(latitude));\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\n\n/**\n * Calculate the conversion from meter to common units at a given latitude\n * This is a cheaper version of `getDistanceScales`\n * @param latitude center latitude in degrees\n * @returns common units per meter\n */\nexport function unitsPerMeter(latitude: number): number {\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;\n}\n\n/**\n * Calculate distance scales in meters around current lat/lon, both for\n * degrees and pixels.\n * In mercator projection mode, the distance scales vary significantly\n * with latitude.\n */\nexport function getDistanceScales(options: {\n latitude: number;\n longitude: number;\n highPrecision?: boolean;\n}): DistanceScales {\n const {latitude, longitude, highPrecision = false} = options;\n assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n\n const worldSize = TILE_SIZE;\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n\n /**\n * Number of pixels occupied by one degree longitude around current lat/lon:\n unitsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)\n = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)\n unitsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)\n = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)\n */\n const unitsPerDegreeX = worldSize / 360;\n const unitsPerDegreeY = unitsPerDegreeX / latCosine;\n\n /**\n * Number of pixels occupied by one meter around current lat/lon:\n */\n const altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n\n /**\n * LngLat: longitude -> east and latitude -> north (bottom left)\n * UTM meter offset: x -> east and y -> north (bottom left)\n * World space: x -> east and y -> south (top left)\n *\n * Y needs to be flipped when converting delta degree/meter to delta pixels\n */\n const result: DistanceScales = {\n unitsPerMeter: [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter],\n metersPerUnit: [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter],\n\n unitsPerDegree: [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter],\n degreesPerUnit: [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter]\n };\n\n /**\n * Taylor series 2nd order for 1/latCosine\n f'(a) * (x - a)\n = d(1/cos(lat * DEGREES_TO_RADIANS))/d(lat) * dLat\n = DEGREES_TO_RADIANS * tan(lat * DEGREES_TO_RADIANS) / cos(lat * DEGREES_TO_RADIANS) * dLat\n */\n if (highPrecision) {\n const latCosine2 = (DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS)) / latCosine;\n const unitsPerDegreeY2 = (unitsPerDegreeX * latCosine2) / 2;\n const altUnitsPerDegree2 = (worldSize / EARTH_CIRCUMFERENCE) * latCosine2;\n const altUnitsPerMeter2 = (altUnitsPerDegree2 / unitsPerDegreeY) * altUnitsPerMeter;\n\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n\n // Main results, used for converting meters to latlng deltas and scaling offsets\n return result;\n}\n\n/**\n * Offset a lng/lat position by meterOffset (northing, easting)\n */\nexport function addMetersToLngLat(lngLatZ: number[], xyz: number[]): number[] {\n const [longitude, latitude, z0] = lngLatZ;\n const [x, y, z] = xyz;\n\n const {unitsPerMeter, unitsPerMeter2} = getDistanceScales({\n longitude,\n latitude,\n highPrecision: true\n });\n\n const worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n\n const newLngLat = worldToLngLat(worldspace);\n const newZ = (z0 || 0) + (z || 0);\n\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\n\n/**\n *\n * view and projection matrix creation is intentionally kept compatible with\n * mapbox-gl's implementation to ensure that seamless interoperation\n * with mapbox and react-map-gl. See: https://github.com/mapbox/mapbox-gl-js\n */\nexport function getViewMatrix(options: {\n // Viewport props\n height: number;\n pitch: number;\n bearing: number;\n altitude: number;\n // Pre-calculated parameters\n scale: number;\n center?: number[];\n}): number[] {\n const {\n // Viewport props\n height,\n pitch,\n bearing,\n altitude,\n // Pre-calculated parameters\n scale,\n center\n } = options;\n // VIEW MATRIX: PROJECTS MERCATOR WORLD COORDINATES\n // Note that mercator world coordinates typically need to be flipped\n //\n // Note: As usual, matrix operation orders should be read in reverse\n // since vectors will be multiplied from the right during transformation\n const vm = createMat4();\n\n // Move camera to altitude (along the pitch & bearing direction)\n mat4.translate(vm, vm, [0, 0, -altitude]);\n\n // Rotate by bearing, and then by pitch (which tilts the view)\n mat4.rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n mat4.rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n\n const relativeScale = scale / height;\n mat4.scale(vm, vm, [relativeScale, relativeScale, relativeScale]);\n\n if (center) {\n mat4.translate(vm, vm, vec3.negate([], center));\n }\n\n return vm;\n}\n\n/**\n * Calculates mapbox compatible projection matrix from parameters\n *\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns project parameters object\n */\nexport function getProjectionParameters(options: {\n width: number;\n height: number;\n scale?: number;\n center?: number[];\n offset?: [number, number];\n fovy?: number;\n altitude?: number;\n pitch?: number;\n nearZMultiplier?: number;\n farZMultiplier?: number;\n}): ProjectionParameters {\n const {\n width,\n height,\n altitude,\n pitch = 0,\n offset,\n center,\n scale,\n nearZMultiplier = 1,\n farZMultiplier = 1\n } = options;\n let {fovy = altitudeToFovy(DEFAULT_ALTITUDE)} = options;\n\n // For back-compatibility allow field of view to be\n // derived from altitude\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n\n const fovRadians = fovy * DEGREES_TO_RADIANS;\n const pitchRadians = pitch * DEGREES_TO_RADIANS;\n\n // Distance from camera to the target\n const focalDistance = fovyToAltitude(fovy);\n\n let cameraToSeaLevelDistance = focalDistance;\n\n if (center) {\n cameraToSeaLevelDistance += (center[2] * scale) / Math.cos(pitchRadians) / height;\n }\n\n const fovAboveCenter = fovRadians * (0.5 + (offset ? offset[1] : 0) / height);\n\n // Find the distance from the center point to the center top\n // in focal distance units using law of sines.\n const topHalfSurfaceDistance =\n (Math.sin(fovAboveCenter) * cameraToSeaLevelDistance) /\n Math.sin(clamp(Math.PI / 2 - pitchRadians - fovAboveCenter, 0.01, Math.PI - 0.01));\n\n // Calculate z distance of the farthest fragment that should be rendered.\n const furthestDistance =\n Math.sin(pitchRadians) * topHalfSurfaceDistance + cameraToSeaLevelDistance;\n // Matches mapbox limit\n const horizonDistance = cameraToSeaLevelDistance * 10;\n\n // Calculate z value of the farthest fragment that should be rendered.\n const farZ = Math.min(furthestDistance * farZMultiplier, horizonDistance);\n\n return {\n fov: fovRadians,\n aspect: width / height,\n focalDistance,\n near: nearZMultiplier,\n far: farZ\n };\n}\n\n/**\n * CALCULATE PROJECTION MATRIX: PROJECTS FROM CAMERA (VIEW) SPACE TO CLIPSPACE\n *\n * To match mapbox's z buffer:\n * - \\<= 0.28: nearZMultiplier: 0.1, farZmultiplier: 1\n * - \\>= 0.29: nearZMultiplier: 1 / height, farZMultiplier: 1.01\n *\n * @param options Viewport options\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns 4x4 projection matrix\n */\nexport function getProjectionMatrix(options: {\n width: number;\n height: number;\n pitch: number;\n scale?: number;\n center?: number[];\n offset?: [number, number];\n fovy?: number;\n altitude?: number;\n nearZMultiplier: number;\n farZMultiplier: number;\n}): number[] {\n const {fov, aspect, near, far} = getProjectionParameters(options);\n\n const projectionMatrix = mat4.perspective(\n [] as number[],\n fov, // fov in radians\n aspect, // aspect ratio\n near, // near plane\n far // far plane\n );\n\n return projectionMatrix;\n}\n\n/**\n *\n * Convert an altitude to field of view such that the\n * focal distance is equal to the altitude\n *\n * @param altitude - altitude of camera in screen units\n * @return fovy field of view in degrees\n */\nexport function altitudeToFovy(altitude: number): number {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\n\n/**\n *\n * Convert an field of view such that the\n * focal distance is equal to the altitude\n *\n * @param fovy - field of view in degrees\n * @return altitude altitude of camera in screen units\n */\nexport function fovyToAltitude(fovy: number): number {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\n\n/**\n * Project flat coordinates to pixels on screen.\n *\n * @param xyz - flat coordinate on 512*512 Mercator Zoom 0 tile\n * @param pixelProjectionMatrix - projection matrix 4x4\n * @return [x, y, depth] pixel coordinate on screen.\n */\nexport function worldToPixels(xyz: number[], pixelProjectionMatrix: number[]): number[];\n\n// Project flat coordinates to pixels on screen.\nexport function worldToPixels(xyz: number[], pixelProjectionMatrix: number[]): number[] {\n const [x, y, z = 0] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\n\n/**\n * Unproject pixels on screen to flat coordinates.\n *\n * @param xyz - pixel coordinate on screen.\n * @param pixelUnprojectionMatrix - unprojection matrix 4x4\n * @param targetZ - if pixel coordinate does not have a 3rd component (depth),\n * targetZ is used as the elevation plane to unproject onto\n * @return [x, y, Z] flat coordinates on 512*512 Mercator Zoom 0 tile.\n */\nexport function pixelsToWorld(\n xyz: number[],\n pixelUnprojectionMatrix: number[],\n targetZ: number = 0\n): number[] {\n const [x, y, z] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y), 'invalid pixel coordinate');\n\n if (Number.isFinite(z)) {\n // Has depth component\n const coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that line with z=0\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n\n const z0 = coord0[2];\n const z1 = coord1[2];\n\n const t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2.lerp([] as number[], coord0, coord1, t);\n}\n","import assert from './assert';\nimport {log2, clamp} from './math-utils';\nimport {MAX_LATITUDE, lngLatToWorld, worldToLngLat} from './web-mercator-utils';\n\n/**\n * Options for fitBounds\n * @param width - viewport width\n * @param height - viewport height\n * @param bounds - [[lon, lat], [lon, lat]]\n * @param minExtent - The width/height of the bounded area will never be smaller than this\n * @param padding - The amount of padding in pixels\n * to add to the given bounds. Can also be an object with top, bottom, left and right\n * properties defining the padding.\n * @param options.offset= - The center of the given bounds relative to the map's center,\n */\nexport type FitBoundsOptions = {\n width: number;\n height: number;\n bounds: [[number, number], [number, number]];\n minExtent?: number; // 0.01 would be about 1000 meters (degree is ~110KM)\n maxZoom?: number; // ~x4,000,000 => About 10 meter extents\n // options\n padding?: number | Padding;\n offset?: number[];\n};\n\n/**\n * An object describing the padding to add to the bounds.\n * @property top - Padding from top in pixels to add to the given bounds\n * @property bottom - Padding from bottom in pixels to add to the given bounds\n * @property left - Padding from left in pixels to add to the given bounds\n * @property right - Padding from right in pixels to add to the given bounds\n */\nexport type Padding = {\n top: number;\n bottom: number;\n left: number;\n right: number;\n};\n\ntype ViewportProps = {\n longitude: number;\n latitude: number;\n zoom: number;\n};\n\n/**\n * Returns map settings {latitude, longitude, zoom}\n * that will contain the provided corners within the provided width.\n *\n * > _Note: Only supports non-perspective mode._\n *\n * @param options fit bounds parameters\n * @returns - latitude, longitude and zoom\n */\nexport default function fitBounds(options: FitBoundsOptions): ViewportProps {\n const {\n width,\n height,\n bounds,\n minExtent = 0, // 0.01 would be about 1000 meters (degree is ~110KM)\n maxZoom = 24, // ~x4,000,000 => About 10 meter extents\n offset = [0, 0]\n } = options;\n\n const [[west, south], [east, north]] = bounds;\n const padding = getPaddingObject(options.padding);\n\n const nw = lngLatToWorld([west, clamp(north, -MAX_LATITUDE, MAX_LATITUDE)]);\n const se = lngLatToWorld([east, clamp(south, -MAX_LATITUDE, MAX_LATITUDE)]);\n\n // width/height on the Web Mercator plane\n const size = [\n Math.max(Math.abs(se[0] - nw[0]), minExtent),\n Math.max(Math.abs(se[1] - nw[1]), minExtent)\n ];\n\n const targetSize = [\n width - padding.left - padding.right - Math.abs(offset[0]) * 2,\n height - padding.top - padding.bottom - Math.abs(offset[1]) * 2\n ];\n\n assert(targetSize[0] > 0 && targetSize[1] > 0);\n\n // scale = screen pixels per unit on the Web Mercator plane\n const scaleX = targetSize[0] / size[0];\n const scaleY = targetSize[1] / size[1];\n\n // Find how much we need to shift the center\n const offsetX = (padding.right - padding.left) / 2 / scaleX;\n const offsetY = (padding.top - padding.bottom) / 2 / scaleY;\n\n const center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n\n const centerLngLat = worldToLngLat(center);\n const zoom = Math.min(maxZoom, log2(Math.abs(Math.min(scaleX, scaleY))));\n\n assert(Number.isFinite(zoom));\n\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom\n };\n}\n\n// Helpers\nfunction getPaddingObject(padding: number | Padding = 0): Padding {\n if (typeof padding === 'number') {\n return {\n top: padding,\n bottom: padding,\n left: padding,\n right: padding\n };\n }\n\n // Make sure all the required properties are set\n assert(\n Number.isFinite(padding.top) &&\n Number.isFinite(padding.bottom) &&\n Number.isFinite(padding.left) &&\n Number.isFinite(padding.right)\n );\n\n return padding;\n}\n","import {worldToLngLat} from './web-mercator-utils';\nimport * as vec2 from 'gl-matrix/vec2';\nimport {transformVector} from './math-utils';\nimport type WebMercatorViewport from './web-mercator-viewport';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\n/*\n * Returns the quad at the intersection of the frustum and the given z plane\n * @param {WebMercatorViewport} viewport\n * @param {Number} z - elevation in meters\n */\nexport default function getBounds(viewport: WebMercatorViewport, z: number = 0): number[][] {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const {width, height, unproject} = viewport;\n const unprojectOps = {targetZ: z};\n const bottomLeft = unproject([0, height], unprojectOps);\n const bottomRight = unproject([width, height], unprojectOps);\n let topLeft: number[];\n let topRight: number[];\n\n const halfFov = viewport.fovy\n ? 0.5 * viewport.fovy * DEGREES_TO_RADIANS\n : Math.atan(0.5 / viewport.altitude);\n const angleToGround = (90 - viewport.pitch) * DEGREES_TO_RADIANS;\n // The top plane is parallel to the ground if halfFov == angleToGround\n if (halfFov > angleToGround - 0.01) {\n // intersect with the far plane\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n } else {\n // intersect with the top plane\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n\n/*\n * Find a point on the far clipping plane of the viewport\n * @param {WebMercatorViewport} viewport\n * @param {Number} x - projected x in screen space\n * @param {Number} targetZ - the elevation of the point in meters\n */\nfunction unprojectOnFarPlane(viewport: WebMercatorViewport, x: number, targetZ: number): number[] {\n const {pixelUnprojectionMatrix} = viewport;\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n\n const z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n const t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n const coord = vec2.lerp([], coord0, coord1, t);\n\n const result = worldToLngLat(coord);\n result.push(targetZ);\n return result;\n}\n","// View and Projection Matrix calculations for mapbox-js style map view properties\nimport {createMat4} from './math-utils';\n\nimport {\n zoomToScale,\n pixelsToWorld,\n lngLatToWorld,\n worldToLngLat,\n worldToPixels,\n altitudeToFovy,\n fovyToAltitude,\n DEFAULT_ALTITUDE,\n getProjectionMatrix,\n getDistanceScales,\n getViewMatrix,\n DistanceScales\n} from './web-mercator-utils';\nimport fitBounds from './fit-bounds';\nimport getBounds from './get-bounds';\nimport type {FitBoundsOptions} from './fit-bounds';\n\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\n\n/**\n * @param width=1 - Width of \"viewport\" or window\n * @param height=1 - Height of \"viewport\" or window\n * @param scale=1 - Either use scale or zoom\n * @param pitch=0 - Camera angle in degrees (0 is straight down)\n * @param bearing=0 - Map rotation in degrees (0 means north is up)\n * @param fovy= - Field of view of camera in degrees\n * @param altitude= - Altitude of camera in screen units \n *\n * Web mercator projection short-hand parameters\n * @param latitude - Center of viewport on map\n * @param longitude - Center of viewport on map\n * @param zoom - Scale = Math.pow(2,zoom) on map\n\n * Notes:\n * - Only one of center or [latitude, longitude] can be specified\n * - [latitude, longitude] can only be specified when \"mercator\" is true\n * - Altitude has a default value that matches assumptions in mapbox-gl\n * - Field of view is independent from altitude, provide `altitudeToFovy(1.5)` (default value) to match assumptions in mapbox-gl\n * - width and height are forced to 1 if supplied as 0, to avoid\n * division by zero. This is intended to reduce the burden of apps to\n * to check values before instantiating a Viewport.\n */\nexport type WebMercatorViewportProps = {\n // Map state\n width: number;\n height: number;\n latitude?: number;\n longitude?: number;\n position?: number[];\n zoom?: number;\n pitch?: number;\n bearing?: number;\n altitude?: number;\n fovy?: number;\n nearZMultiplier?: number;\n farZMultiplier?: number;\n};\n\n/**\n * The WebMercatorViewport class creates\n * - view/projection matrices\n * - \"uniform values\" (for shaders) from mercator params\n *\n * Note: Instances are immutable in the sense that they only have accessors.\n * A new viewport instance should be created if any parameters have changed.\n */\nexport default class WebMercatorViewport {\n readonly latitude: number;\n readonly longitude: number;\n readonly zoom: number;\n readonly pitch: number;\n readonly bearing: number;\n readonly altitude: number;\n readonly fovy: number;\n\n readonly meterOffset: number[];\n readonly center: number[];\n\n readonly width: number;\n readonly height: number;\n readonly scale: number;\n readonly distanceScales: DistanceScales;\n\n readonly viewMatrix: number[];\n readonly projectionMatrix: number[];\n\n viewProjectionMatrix: number[];\n pixelProjectionMatrix: number[];\n pixelUnprojectionMatrix: number[];\n\n /**\n * @classdesc\n * Creates view/projection matrices from mercator params\n * Note: The Viewport is immutable in the sense that it only has accessors.\n * A new viewport instance should be created if any parameters have changed.\n */\n // eslint-disable-next-line max-statements\n constructor(props: WebMercatorViewportProps = {width: 1, height: 1}) {\n let {\n // Map state\n width,\n height,\n altitude = null,\n fovy = null\n } = props;\n const {\n latitude = 0,\n longitude = 0,\n zoom = 0,\n pitch = 0,\n bearing = 0,\n position = null,\n nearZMultiplier = 0.02,\n farZMultiplier = 1.01\n } = props;\n\n // Silently allow apps to send in 0,0 to facilitate isomorphic render etc\n width = width || 1;\n height = height || 1;\n\n // `fovy` & `altitude` are independent parameters, one for the\n // projection and the latter for the view matrix. In the past,\n // the `fovy` was always derived from the `altitude`\n if (fovy === null && altitude === null) {\n altitude = DEFAULT_ALTITUDE;\n fovy = altitudeToFovy(altitude);\n } else if (fovy === null) {\n fovy = altitudeToFovy(altitude);\n } else if (altitude === null) {\n altitude = fovyToAltitude(fovy);\n }\n\n const scale = zoomToScale(zoom);\n // Altitude - prevent division by 0\n // TODO - just throw an Error instead?\n altitude = Math.max(0.75, altitude);\n\n const distanceScales = getDistanceScales({longitude, latitude});\n\n const center: number[] = lngLatToWorld([longitude, latitude]);\n center.push(0);\n\n if (position) {\n vec3.add(center, center, vec3.mul([], position, distanceScales.unitsPerMeter));\n }\n\n this.projectionMatrix = getProjectionMatrix({\n width,\n height,\n scale,\n center,\n pitch,\n fovy,\n nearZMultiplier,\n farZMultiplier\n });\n\n this.viewMatrix = getViewMatrix({\n height,\n scale,\n center,\n pitch,\n bearing,\n altitude\n });\n\n // Save parameters\n this.width = width;\n this.height = height;\n this.scale = scale;\n\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n this.center = center;\n this.meterOffset = position || [0, 0, 0];\n\n this.distanceScales = distanceScales;\n\n this._initMatrices();\n\n Object.freeze(this);\n }\n\n _initMatrices(): void {\n const {width, height, projectionMatrix, viewMatrix} = this;\n\n // Note: As usual, matrix operations should be applied in \"reverse\" order\n // since vectors will be multiplied in from the right during transformation\n const vpm = createMat4();\n mat4.multiply(vpm, vpm, projectionMatrix);\n mat4.multiply(vpm, vpm, viewMatrix);\n this.viewProjectionMatrix = vpm;\n\n // Calculate matrices and scales needed for projection\n /**\n * Builds matrices that converts preprojected lngLats to screen pixels\n * and vice versa.\n * Note: Currently returns bottom-left coordinates!\n * Note: Starts with the GL projection matrix and adds steps to the\n * scale and translate that matrix onto the window.\n * Note: WebGL controls clip space to screen projection with gl.viewport\n * and does not need this step.\n */\n const m = createMat4();\n\n // matrix for conversion from location to screen coordinates\n mat4.scale(m, m, [width / 2, -height / 2, 1]);\n mat4.translate(m, m, [1, -1, 0]);\n mat4.multiply(m, m, vpm);\n\n const mInverse = mat4.invert(createMat4(), m);\n if (!mInverse) {\n throw new Error('Pixel project matrix not invertible');\n }\n\n this.pixelProjectionMatrix = m;\n this.pixelUnprojectionMatrix = mInverse;\n }\n\n /** Two viewports are equal if width and height are identical, and if\n * their view and projection matrices are (approximately) equal.\n */\n equals = (viewport: WebMercatorViewport | null): boolean => {\n if (!(viewport instanceof WebMercatorViewport)) {\n return false;\n }\n\n return (\n viewport.width === this.width &&\n viewport.height === this.height &&\n mat4.equals(viewport.projectionMatrix, this.projectionMatrix) &&\n mat4.equals(viewport.viewMatrix, this.viewMatrix)\n );\n };\n\n /**\n * Projects xyz (possibly latitude and longitude) to pixel coordinates in window\n * using viewport projection parameters\n * - [longitude, latitude] to [x, y]\n * - [longitude, latitude, Z] => [x, y, z]\n * Note: By default, returns top-left coordinates for canvas/SVG type render\n *\n * @param lngLatZ - [lng, lat] or [lng, lat, Z]\n * @param options - options\n * @param options.topLeft=true - Whether projected coords are top left\n * @return - screen coordinates [x, y] or [x, y, z], z as pixel depth\n */\n project = (lngLatZ: number[], options: {topLeft?: boolean} = {}): number[] => {\n const {topLeft = true} = options;\n const worldPosition = this.projectPosition(lngLatZ);\n const coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n const [x, y] = coord;\n const y2 = topLeft ? y : this.height - y;\n return lngLatZ.length === 2 ? [x, y2] : [x, y2, coord[2]];\n };\n\n /**\n * Unproject pixel coordinates on screen onto world coordinates, possibly `[lon, lat]` on map.\n *\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n *\n * @param xyz - screen coordinates, z as pixel depth\n * @param options - options\n * @param options.topLeft=true - Whether projected coords are top left\n * @param options.targetZ=0 - If pixel depth is unknown, targetZ is used as\n * the elevation plane to unproject onto\n * @return - [lng, lat, Z] or [X, Y, Z]\n */\n unproject = (xyz: number[], options: {topLeft?: boolean; targetZ?: number} = {}): number[] => {\n const {topLeft = true, targetZ = undefined} = options;\n const [x, y, z] = xyz;\n\n const y2 = topLeft ? y : this.height - y;\n const targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n const coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n const [X, Y, Z] = this.unprojectPosition(coord);\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];\n };\n\n // NON_LINEAR PROJECTION HOOKS\n // Used for web meractor projection\n\n projectPosition = (xyz: number[]): [number, number, number] => {\n const [X, Y] = lngLatToWorld(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n };\n\n unprojectPosition = (xyz: number[]): [number, number, number] => {\n const [X, Y] = worldToLngLat(xyz);\n const Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n };\n\n /**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n *\n * @param lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return [x,y] coordinates.\n */\n projectFlat(lngLat: number[]): number[] {\n return lngLatToWorld(lngLat);\n }\n\n /**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [lat,lon] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\n unprojectFlat(xy: number[]): number[] {\n return worldToLngLat(xy);\n }\n\n /**\n * Get the map center that place a given [lng, lat] coordinate at screen point [x, y]\n * @param opt\n * @param opt.lngLat - [lng,lat] coordinates\n * Specifies a point on the sphere.\n * @param opt.pos - [x,y] coordinates\n * Specifies a point on the screen.\n * @return [lng,lat] new map center.\n */\n getMapCenterByLngLatPosition({lngLat, pos}: {lngLat: number[]; pos: number[]}): number[] {\n const fromLocation = pixelsToWorld(pos, this.pixelUnprojectionMatrix);\n const toLocation = lngLatToWorld(lngLat);\n const translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n const newCenter = vec2.add([], this.center, translate);\n return worldToLngLat(newCenter);\n }\n\n /**\n * Returns a new viewport that fit around the given rectangle.\n * Only supports non-perspective mode.\n * @param bounds - [[lon, lat], [lon, lat]]\n * @param [options]\n * @param [options.padding] - The amount of padding in pixels to add to the given bounds.\n * @param [options.offset] - The center of the given bounds relative to the map's center,\n * [x, y] measured in pixels.\n * @returns {WebMercatorViewport}\n */\n fitBounds(\n bounds: [[number, number], [number, number]],\n options: Omit = {}\n ): WebMercatorViewport {\n const {width, height} = this;\n const {longitude, latitude, zoom} = fitBounds(Object.assign({width, height, bounds}, options));\n return new WebMercatorViewport({width, height, longitude, latitude, zoom});\n }\n\n /**\n * Returns the bounding box of the viewport.\n * @param [options]\n * @param [options.z] - The altitude at which the bounds should be calculated.\n * @returns {Array} bounds - [[lon, lat], [lon, lat]]\n */\n getBounds(options?: {z?: number}): number[][] {\n const corners = this.getBoundingRegion(options);\n\n const west = Math.min(...corners.map((p) => p[0]));\n const east = Math.max(...corners.map((p) => p[0]));\n const south = Math.min(...corners.map((p) => p[1]));\n const north = Math.max(...corners.map((p) => p[1]));\n return [\n [west, south],\n [east, north]\n ];\n }\n\n /**\n * Returns the bounding box of the viewport.\n * @param [options]\n * @param [options.z] - The altitude at which the bounds should be calculated.\n * @returns {Array} an array of 4 points that define the visible region\n */\n getBoundingRegion(options: {z?: number} = {}): number[][] {\n return getBounds(this, options.z || 0);\n }\n\n // DEPRECATED\n\n /** @deprecated Legacy method name */\n getLocationAtPoint({lngLat, pos}: {lngLat: number[]; pos: number[]}): number[] {\n return this.getMapCenterByLngLatPosition({lngLat, pos});\n }\n}\n","import {worldToLngLat} from './web-mercator-utils';\nimport {mod, log2} from './math-utils';\n\n// defined by mapbox-gl\nconst TILE_SIZE = 512;\n\n/** Description of viewport */\nexport type ViewportProps = {\n width: number;\n height: number;\n longitude: number;\n latitude: number;\n zoom: number;\n pitch?: number;\n bearing?: number;\n};\n\n/**\n * Apply mathematical constraints to viewport props\n * @param props\n */\n// eslint-disable-next-line complexity\nexport default function normalizeViewportProps(props: ViewportProps): ViewportProps {\n const {width, height, pitch = 0} = props;\n let {longitude, latitude, zoom, bearing = 0} = props;\n\n // Normalize degrees\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n\n // Constrain zoom and shift center at low zoom levels\n const minZoom = log2(height / TILE_SIZE);\n if (zoom <= minZoom) {\n zoom = minZoom;\n latitude = 0;\n } else {\n // Eliminate white space above and below the map\n const halfHeightPixels = height / 2 / Math.pow(2, zoom);\n const minLatitude = worldToLngLat([0, halfHeightPixels])[1];\n if (latitude < minLatitude) {\n latitude = minLatitude;\n } else {\n const maxLatitude = worldToLngLat([0, TILE_SIZE - halfHeightPixels])[1];\n if (latitude > maxLatitude) {\n latitude = maxLatitude;\n }\n }\n }\n\n return {width, height, longitude, latitude, zoom, pitch, bearing};\n}\n","import {lerp} from './math-utils';\nimport {scaleToZoom, zoomToScale, lngLatToWorld, worldToLngLat} from './web-mercator-utils';\nimport * as vec2 from 'gl-matrix/vec2';\n\nimport type {ViewportProps} from './normalize-viewport-props';\n\nconst EPSILON = 0.01;\nconst VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom'] as const;\nconst DEFAULT_OPTS = {\n curve: 1.414,\n speed: 1.2\n // screenSpeed and maxDuration are used only if specified\n};\n\nexport type FlytoTransitionOptions = {\n curve?: number;\n speed?: number;\n screenSpeed?: number;\n maxDuration?: number;\n};\n\n/**\n * mapbox-gl-js flyTo : https://www.mapbox.com/mapbox-gl-js/api/#map#flyto.\n * It implements “Smooth and efficient zooming and panning.” algorithm by\n * \"Jarke J. van Wijk and Wim A.A. Nuij\"\n */\nexport default function flyToViewport(\n startProps: ViewportProps,\n endProps: ViewportProps,\n t: number,\n options?: FlytoTransitionOptions\n): {\n longitude: number;\n latitude: number;\n zoom: number;\n} {\n // Equations from above paper are referred where needed.\n\n const {startZoom, startCenterXY, uDelta, w0, u1, S, rho, rho2, r0} = getFlyToTransitionParams(\n startProps,\n endProps,\n options\n );\n\n // If change in center is too small, do linear interpolaiton.\n if (u1 < EPSILON) {\n const viewport = {};\n for (const key of VIEWPORT_TRANSITION_PROPS) {\n const startValue = startProps[key];\n const endValue = endProps[key];\n viewport[key] = lerp(startValue, endValue, t);\n }\n // @ts-expect-error properties are populated dynamically\n return viewport;\n }\n\n const s = t * S;\n\n const w = Math.cosh(r0) / Math.cosh(r0 + rho * s);\n const u = (w0 * ((Math.cosh(r0) * Math.tanh(r0 + rho * s) - Math.sinh(r0)) / rho2)) / u1;\n\n const scaleIncrement = 1 / w; // Using w method for scaling.\n const newZoom = startZoom + scaleToZoom(scaleIncrement);\n\n const newCenterWorld = vec2.scale([], uDelta, u);\n vec2.add(newCenterWorld, newCenterWorld, startCenterXY);\n\n const newCenter = worldToLngLat(newCenterWorld);\n return {\n longitude: newCenter[0],\n latitude: newCenter[1],\n zoom: newZoom\n };\n}\n\n// returns transition duration in milliseconds\nexport function getFlyToDuration(\n startProps: ViewportProps,\n endProps: ViewportProps,\n options?: FlytoTransitionOptions\n): number {\n const opts = {...DEFAULT_OPTS, ...options};\n const {screenSpeed, speed, maxDuration} = opts;\n const {S, rho} = getFlyToTransitionParams(startProps, endProps, opts);\n const length = 1000 * S;\n let duration: number;\n if (Number.isFinite(screenSpeed)) {\n duration = length / (screenSpeed / rho);\n } else {\n duration = length / speed;\n }\n\n return Number.isFinite(maxDuration) && duration > maxDuration ? 0 : duration;\n}\n\n// Private Methods\n\n// Calculate all parameters that are static for given startProps and endProps\nfunction getFlyToTransitionParams(\n startProps: ViewportProps,\n endProps: ViewportProps,\n opts: FlytoTransitionOptions\n): {\n startZoom: number;\n startCenterXY: number[];\n uDelta: number[];\n w0: number;\n u1: number;\n S: number;\n rho: number;\n rho2: number;\n r0: number;\n r1: number;\n} {\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n const rho = opts.curve;\n const startZoom = startProps.zoom;\n const startCenter = [startProps.longitude, startProps.latitude];\n const startScale = zoomToScale(startZoom);\n const endZoom = endProps.zoom;\n const endCenter = [endProps.longitude, endProps.latitude];\n const scale = zoomToScale(endZoom - startZoom);\n\n const startCenterXY = lngLatToWorld(startCenter);\n const endCenterXY = lngLatToWorld(endCenter);\n const uDelta = vec2.sub([] as number[], endCenterXY, startCenterXY);\n\n const w0 = Math.max(startProps.width, startProps.height);\n const w1 = w0 / scale;\n const u1 = vec2.length(uDelta) * startScale;\n // u0 is treated as '0' in Eq (9).\n\n // If u1 is too small, will generate invalid number\n const _u1 = Math.max(u1, EPSILON);\n\n // Implement Equation (9) from above algorithm.\n const rho2 = rho * rho;\n const b0 = (w1 * w1 - w0 * w0 + rho2 * rho2 * _u1 * _u1) / (2 * w0 * rho2 * _u1);\n const b1 = (w1 * w1 - w0 * w0 - rho2 * rho2 * _u1 * _u1) / (2 * w1 * rho2 * _u1);\n const r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);\n const r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n const S = (r1 - r0) / rho;\n\n return {startZoom, startCenterXY, uDelta, w0, u1, S, rho, rho2, r0, r1};\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M11.01 3.05C6.51 3.54 3 7.36 3 12c0 4.97 4.03 9 9 9 4.63 0 8.45-3.5 8.95-8 .09-.79-.78-1.42-1.54-.95-.84.54-1.84.85-2.91.85-2.98 0-5.4-2.42-5.4-5.4 0-1.06.31-2.06.84-2.89.45-.67-.04-1.63-.93-1.56z\"\n}), 'DarkModeRounded');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n}), 'Edit');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 9c-3.15 0-6 2.41-6 6.15 0 2.49 2 5.44 6 8.85 4-3.41 6-6.36 6-8.85C18 11.41 15.15 9 12 9zm0 7.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM12 4c1.93 0 3.68.78 4.95 2.05l-1.41 1.41C14.63 6.56 13.38 6 12 6s-2.63.56-3.54 1.46L7.05 6.05C8.32 4.78 10.07 4 12 4zm7.78-.77-1.41 1.41C16.74 3.01 14.49 2 12.01 2S7.27 3.01 5.64 4.63L4.22 3.22C6.22 1.23 8.97 0 12.01 0s5.78 1.23 7.77 3.23z\"\n}), 'EmergencyShare');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M8.12 9.29 12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7a.9959.9959 0 0 1 0-1.41c.39-.38 1.03-.39 1.42 0z\"\n}), 'KeyboardArrowDownRounded');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M8.12 14.71 12 10.83l3.88 3.88c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 8.71a.9959.9959 0 0 0-1.41 0L6.7 13.3c-.39.39-.39 1.02 0 1.41.39.38 1.03.39 1.42 0z\"\n}), 'KeyboardArrowUpRounded');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z\"\n}), 'LightModeRounded');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)([/*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m12 12.9-2.13 2.09c-.56.56-.87 1.29-.87 2.07C9 18.68 10.35 20 12 20s3-1.32 3-2.94c0-.78-.31-1.52-.87-2.07L12 12.9z\"\n}, \"0\"), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m16 6-.44.55C14.38 8.02 12 7.19 12 5.3V2S4 6 4 13c0 2.92 1.56 5.47 3.89 6.86-.56-.79-.89-1.76-.89-2.8 0-1.32.52-2.56 1.47-3.5L12 10.1l3.53 3.47c.95.93 1.47 2.17 1.47 3.5 0 1.02-.31 1.96-.85 2.75 1.89-1.15 3.29-3.06 3.71-5.3.66-3.55-1.07-6.9-3.86-8.52z\"\n}, \"1\")], 'LocalFireDepartment');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)([/*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M5 5h6c.55 0 1-.45 1-1s-.45-1-1-1H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h6c.55 0 1-.45 1-1s-.45-1-1-1H5V5z\"\n}, \"0\"), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m20.65 11.65-2.79-2.79c-.32-.32-.86-.1-.86.35V11h-7c-.55 0-1 .45-1 1s.45 1 1 1h7v1.79c0 .45.54.67.85.35l2.79-2.79c.2-.19.2-.51.01-.7z\"\n}, \"1\")], 'LogoutRounded');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m20.5 3-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM15 19l-6-2.11V5l6 2.11V19z\"\n}), 'Map');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"\n}), 'Menu');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15 16v1.26l-6-3v-3.17L11.7 8H16V2h-6v4.9L7.3 10H3v6h5l7 3.5V22h6v-6z\"\n}), 'Polyline');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19.74 18.33C21.15 16.6 22 14.4 22 12c0-5.52-4.48-10-10-10S2 6.48 2 12s4.48 10 10 10c2.4 0 4.6-.85 6.33-2.26.27-.22.53-.46.78-.71.03-.03.05-.06.07-.08.2-.2.39-.41.56-.62zM12 20c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8c0 1.85-.63 3.54-1.69 4.9l-1.43-1.43c.69-.98 1.1-2.17 1.1-3.46 0-3.31-2.69-6-6-6s-6 2.69-6 6 2.69 6 6 6c1.3 0 2.51-.42 3.49-1.13l1.42 1.42C15.54 19.37 13.85 20 12 20zm1.92-7.49c.17-.66.02-1.38-.49-1.9l-.02-.02c-.77-.77-2-.78-2.78-.04-.01.01-.03.02-.05.04-.78.78-.78 2.05 0 2.83l.02.02c.52.51 1.25.67 1.91.49l1.51 1.51c-.6.36-1.29.58-2.04.58-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4c0 .73-.21 1.41-.56 2l-1.5-1.51z\"\n}), 'Radar');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n}), 'Search');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)([/*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M6 11c2.76 0 5-2.24 5-5S8.76 1 6 1 1 3.24 1 6s2.24 5 5 5zm15 3h-5c-1.1 0-2 .9-2 2v5c0 1.1.9 2 2 2h5c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2z\"\n}, \"0\"), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M17.71 7.7c.4.19.83.3 1.29.3 1.65 0 3-1.35 3-3s-1.35-3-3-3-3 1.35-3 3c0 .46.11.89.3 1.29L6.29 16.3c-.4-.19-.83-.3-1.29-.3-1.65 0-3 1.35-3 3s1.35 3 3 3 3-1.35 3-3c0-.46-.11-.89-.3-1.29L17.71 7.7z\"\n}, \"1\")], 'ShapeLine');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 16.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.66 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.37-3.47C10.5 13.1 9.66 13 9 13z\"\n}), 'SupervisorAccount');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12.5 8c-2.65 0-5.05.99-6.9 2.6L3.71 8.71C3.08 8.08 2 8.52 2 9.41V15c0 .55.45 1 1 1h5.59c.89 0 1.34-1.08.71-1.71l-1.91-1.91c1.39-1.16 3.16-1.88 5.12-1.88 3.16 0 5.89 1.84 7.19 4.5.27.56.91.84 1.5.64.71-.23 1.07-1.04.75-1.72C20.23 10.42 16.65 8 12.5 8z\"\n}), 'UndoRounded');\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, COMMENT, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = !!element.parent; // in nested rules comments become children of the \"auto-inserted\" rule and that's always the `element.parent`\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? element.parent.children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\n\n// prepend: true moves MUI styles to the top of the so they're loaded first.\n// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nlet cache;\nif (typeof document === 'object') {\n cache = createCache({\n key: 'css',\n prepend: true\n });\n}\nexport default function StyledEngineProvider(props) {\n const {\n injectFirst,\n children\n } = props;\n return injectFirst && cache ? /*#__PURE__*/_jsx(CacheProvider, {\n value: cache,\n children: children\n }) : children;\n}\nprocess.env.NODE_ENV !== \"production\" ? StyledEngineProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: PropTypes.node,\n /**\n * By default, the styles are injected last in the element of the page.\n * As a result, they gain more specificity than any other style sheet.\n * If you want to override MUI's styles, set this prop.\n */\n injectFirst: PropTypes.bool\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Global } from '@emotion/react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction isEmpty(obj) {\n return obj === undefined || obj === null || Object.keys(obj).length === 0;\n}\nexport default function GlobalStyles(props) {\n const {\n styles,\n defaultTheme = {}\n } = props;\n const globalStyles = typeof styles === 'function' ? themeInput => styles(isEmpty(themeInput) ? defaultTheme : themeInput) : styles;\n return /*#__PURE__*/_jsx(Global, {\n styles: globalStyles\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes = {\n defaultTheme: PropTypes.object,\n styles: PropTypes.oneOfType([PropTypes.array, PropTypes.string, PropTypes.object, PropTypes.func])\n} : void 0;","/**\n * @mui/styled-engine v5.15.14\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const internal_processStyles = (tag, processor) => {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n};\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from './StyledEngineProvider';\nexport { default as GlobalStyles } from './GlobalStyles';","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.alpha = alpha;\nexports.blend = blend;\nexports.colorChannel = void 0;\nexports.darken = darken;\nexports.decomposeColor = decomposeColor;\nexports.emphasize = emphasize;\nexports.getContrastRatio = getContrastRatio;\nexports.getLuminance = getLuminance;\nexports.hexToRgb = hexToRgb;\nexports.hslToRgb = hslToRgb;\nexports.lighten = lighten;\nexports.private_safeAlpha = private_safeAlpha;\nexports.private_safeColorChannel = void 0;\nexports.private_safeDarken = private_safeDarken;\nexports.private_safeEmphasize = private_safeEmphasize;\nexports.private_safeLighten = private_safeLighten;\nexports.recomposeColor = recomposeColor;\nexports.rgbToHex = rgbToHex;\nvar _formatMuiErrorMessage2 = _interopRequireDefault(require(\"@mui/utils/formatMuiErrorMessage\"));\nvar _clamp = _interopRequireDefault(require(\"@mui/utils/clamp\"));\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n if (process.env.NODE_ENV !== 'production') {\n if (value < min || value > max) {\n console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n }\n }\n return (0, _clamp.default)(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nfunction hexToRgb(color) {\n color = color.slice(1);\n const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n let colors = color.match(re);\n if (colors && colors[0].length === 1) {\n colors = colors.map(n => n + n);\n }\n return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n const hex = int.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nfunction decomposeColor(color) {\n // Idempotent\n if (color.type) {\n return color;\n }\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n const marker = color.indexOf('(');\n const type = color.substring(0, marker);\n if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\nThe following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` : (0, _formatMuiErrorMessage2.default)(9, color));\n }\n let values = color.substring(marker + 1, color.length - 1);\n let colorSpace;\n if (type === 'color') {\n values = values.split(' ');\n colorSpace = values.shift();\n if (values.length === 4 && values[3].charAt(0) === '/') {\n values[3] = values[3].slice(1);\n }\n if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\nThe following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.` : (0, _formatMuiErrorMessage2.default)(10, colorSpace));\n }\n } else {\n values = values.split(',');\n }\n values = values.map(value => parseFloat(value));\n return {\n type,\n values,\n colorSpace\n };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nconst colorChannel = color => {\n const decomposedColor = decomposeColor(color);\n return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexports.colorChannel = colorChannel;\nconst private_safeColorChannel = (color, warning) => {\n try {\n return colorChannel(color);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexports.private_safeColorChannel = private_safeColorChannel;\nfunction recomposeColor(color) {\n const {\n type,\n colorSpace\n } = color;\n let {\n values\n } = color;\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n } else if (type.indexOf('hsl') !== -1) {\n values[1] = `${values[1]}%`;\n values[2] = `${values[2]}%`;\n }\n if (type.indexOf('color') !== -1) {\n values = `${colorSpace} ${values.join(' ')}`;\n } else {\n values = `${values.join(', ')}`;\n }\n return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nfunction rgbToHex(color) {\n // Idempotent\n if (color.indexOf('#') === 0) {\n return color;\n }\n const {\n values\n } = decomposeColor(color);\n return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nfunction hslToRgb(color) {\n color = decomposeColor(color);\n const {\n values\n } = color;\n const h = values[0];\n const s = values[1] / 100;\n const l = values[2] / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n let type = 'rgb';\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (color.type === 'hsla') {\n type += 'a';\n rgb.push(values[3]);\n }\n return recomposeColor({\n type,\n values: rgb\n });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nfunction getLuminance(color) {\n color = decomposeColor(color);\n let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n rgb = rgb.map(val => {\n if (color.type !== 'color') {\n val /= 255; // normalized\n }\n return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n });\n\n // Truncate at 3 digits\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nfunction getContrastRatio(foreground, background) {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction alpha(color, value) {\n color = decomposeColor(color);\n value = clampWrapper(value);\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n if (color.type === 'color') {\n color.values[3] = `/${value}`;\n } else {\n color.values[3] = value;\n }\n return recomposeColor(color);\n}\nfunction private_safeAlpha(color, value, warning) {\n try {\n return alpha(color, value);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction darken(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n return recomposeColor(color);\n}\nfunction private_safeDarken(color, coefficient, warning) {\n try {\n return darken(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction lighten(color, coefficient) {\n color = decomposeColor(color);\n coefficient = clampWrapper(coefficient);\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n } else if (color.type.indexOf('color') !== -1) {\n for (let i = 0; i < 3; i += 1) {\n color.values[i] += (1 - color.values[i]) * coefficient;\n }\n }\n return recomposeColor(color);\n}\nfunction private_safeLighten(color, coefficient, warning) {\n try {\n return lighten(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction emphasize(color, coefficient = 0.15) {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nfunction private_safeEmphasize(color, coefficient, warning) {\n try {\n return private_safeEmphasize(color, coefficient);\n } catch (error) {\n if (warning && process.env.NODE_ENV !== 'production') {\n console.warn(warning);\n }\n return color;\n }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nfunction blend(background, overlay, opacity, gamma = 1.0) {\n const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n const backgroundColor = decomposeColor(background);\n const overlayColor = decomposeColor(overlay);\n const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n return recomposeColor({\n type: 'rgb',\n values: rgb\n });\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createStyled;\nexports.shouldForwardProp = shouldForwardProp;\nexports.systemDefaultTheme = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\nvar _styledEngine = _interopRequireWildcard(require(\"@mui/styled-engine\"));\nvar _deepmerge = require(\"@mui/utils/deepmerge\");\nvar _capitalize = _interopRequireDefault(require(\"@mui/utils/capitalize\"));\nvar _getDisplayName = _interopRequireDefault(require(\"@mui/utils/getDisplayName\"));\nvar _createTheme = _interopRequireDefault(require(\"./createTheme\"));\nvar _styleFunctionSx = _interopRequireDefault(require(\"./styleFunctionSx\"));\nconst _excluded = [\"ownerState\"],\n _excluded2 = [\"variants\"],\n _excluded3 = [\"name\", \"slot\", \"skipVariantsResolver\", \"skipSx\", \"overridesResolver\"];\n/* eslint-disable no-underscore-dangle */\nfunction _getRequireWildcardCache(e) { if (\"function\" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }\nfunction _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || \"object\" != typeof e && \"function\" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if (\"default\" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\n\n// Update /system/styled/#api in case if this changes\nfunction shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nconst systemDefaultTheme = exports.systemDefaultTheme = (0, _createTheme.default)();\nconst lowercaseFirstLetter = string => {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n};\nfunction resolveTheme({\n defaultTheme,\n theme,\n themeId\n}) {\n return isEmpty(theme) ? defaultTheme : theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (props, styles) => styles[slot];\n}\nfunction processStyleArg(callableStyle, _ref) {\n let {\n ownerState\n } = _ref,\n props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);\n const resolvedStylesArg = typeof callableStyle === 'function' ? callableStyle((0, _extends2.default)({\n ownerState\n }, props)) : callableStyle;\n if (Array.isArray(resolvedStylesArg)) {\n return resolvedStylesArg.flatMap(resolvedStyle => processStyleArg(resolvedStyle, (0, _extends2.default)({\n ownerState\n }, props)));\n }\n if (!!resolvedStylesArg && typeof resolvedStylesArg === 'object' && Array.isArray(resolvedStylesArg.variants)) {\n const {\n variants = []\n } = resolvedStylesArg,\n otherStyles = (0, _objectWithoutPropertiesLoose2.default)(resolvedStylesArg, _excluded2);\n let result = otherStyles;\n variants.forEach(variant => {\n let isMatch = true;\n if (typeof variant.props === 'function') {\n isMatch = variant.props((0, _extends2.default)({\n ownerState\n }, props, ownerState));\n } else {\n Object.keys(variant.props).forEach(key => {\n if ((ownerState == null ? void 0 : ownerState[key]) !== variant.props[key] && props[key] !== variant.props[key]) {\n isMatch = false;\n }\n });\n }\n if (isMatch) {\n if (!Array.isArray(result)) {\n result = [result];\n }\n result.push(typeof variant.style === 'function' ? variant.style((0, _extends2.default)({\n ownerState\n }, props, ownerState)) : variant.style);\n }\n });\n return result;\n }\n return resolvedStylesArg;\n}\nfunction createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n const systemSx = props => {\n return (0, _styleFunctionSx.default)((0, _extends2.default)({}, props, {\n theme: resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }))\n }));\n };\n systemSx.__mui_systemSx = true;\n return (tag, inputOptions = {}) => {\n // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n (0, _styledEngine.internal_processStyles)(tag, styles => styles.filter(style => !(style != null && style.__mui_systemSx)));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n } = inputOptions,\n options = (0, _objectWithoutPropertiesLoose2.default)(inputOptions, _excluded3);\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = (0, _styledEngine.default)(tag, (0, _extends2.default)({\n shouldForwardProp: shouldForwardPropOption,\n label\n }, options));\n const transformStyleArg = stylesArg => {\n // On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n if (typeof stylesArg === 'function' && stylesArg.__emotion_real !== stylesArg || (0, _deepmerge.isPlainObject)(stylesArg)) {\n return props => processStyleArg(stylesArg, (0, _extends2.default)({}, props, {\n theme: resolveTheme({\n theme: props.theme,\n defaultTheme,\n themeId\n })\n }));\n }\n return stylesArg;\n };\n const muiStyledResolver = (styleArg, ...expressions) => {\n let transformedStyleArg = transformStyleArg(styleArg);\n const expressionsWithDefaultTheme = expressions ? expressions.map(transformStyleArg) : [];\n if (componentName && overridesResolver) {\n expressionsWithDefaultTheme.push(props => {\n const theme = resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }));\n if (!theme.components || !theme.components[componentName] || !theme.components[componentName].styleOverrides) {\n return null;\n }\n const styleOverrides = theme.components[componentName].styleOverrides;\n const resolvedStyleOverrides = {};\n // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n Object.entries(styleOverrides).forEach(([slotKey, slotStyle]) => {\n resolvedStyleOverrides[slotKey] = processStyleArg(slotStyle, (0, _extends2.default)({}, props, {\n theme\n }));\n });\n return overridesResolver(props, resolvedStyleOverrides);\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsWithDefaultTheme.push(props => {\n var _theme$components;\n const theme = resolveTheme((0, _extends2.default)({}, props, {\n defaultTheme,\n themeId\n }));\n const themeVariants = theme == null || (_theme$components = theme.components) == null || (_theme$components = _theme$components[componentName]) == null ? void 0 : _theme$components.variants;\n return processStyleArg({\n variants: themeVariants\n }, (0, _extends2.default)({}, props, {\n theme\n }));\n });\n }\n if (!skipSx) {\n expressionsWithDefaultTheme.push(systemSx);\n }\n const numOfCustomFnsApplied = expressionsWithDefaultTheme.length - expressions.length;\n if (Array.isArray(styleArg) && numOfCustomFnsApplied > 0) {\n const placeholders = new Array(numOfCustomFnsApplied).fill('');\n // If the type is array, than we need to add placeholders in the template for the overrides, variants and the sx styles.\n transformedStyleArg = [...styleArg, ...placeholders];\n transformedStyleArg.raw = [...styleArg.raw, ...placeholders];\n }\n const Component = defaultStyledResolver(transformedStyleArg, ...expressionsWithDefaultTheme);\n if (process.env.NODE_ENV !== 'production') {\n let displayName;\n if (componentName) {\n displayName = `${componentName}${(0, _capitalize.default)(componentSlot || '')}`;\n }\n if (displayName === undefined) {\n displayName = `Styled(${(0, _getDisplayName.default)(tag)})`;\n }\n Component.displayName = displayName;\n }\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from './merge';\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !== -1) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction(_extends({\n theme\n }, props[key]));\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n }) : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n var _breakpointsInput$key;\n const breakpointsInOrder = (_breakpointsInput$key = breakpointsInput.keys) == null ? void 0 : _breakpointsInput$key.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/experimental-api/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n *\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars && typeof theme.getColorSchemeSelector === 'function') {\n // If CssVarsProvider is used as a provider,\n // returns '* :where([data-mui-color-scheme=\"light|dark\"]) &'\n const selector = theme.getColorSchemeSelector(key).replace(/(\\[[^\\]]+\\])/, '*:where($1)');\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"values\", \"unit\", \"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return _extends({}, acc, {\n [obj.key]: obj.val\n });\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5\n } = breakpoints,\n other = _objectWithoutPropertiesLoose(breakpoints, _excluded);\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return _extends({\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit\n }, other);\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import { createUnarySpacing } from '../spacing';\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n\n // Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n // Smaller components, such as icons, can align to a 4dp grid.\n // https://m2.material.io/design/layout/understanding-layout.html\n const transform = createUnarySpacing({\n spacing: spacingInput\n });\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"breakpoints\", \"palette\", \"spacing\", \"shape\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from './createBreakpoints';\nimport shape from './shape';\nimport createSpacing from './createSpacing';\nimport styleFunctionSx from '../styleFunctionSx/styleFunctionSx';\nimport defaultSxConfig from '../styleFunctionSx/defaultSxConfig';\nimport applyStyles from './applyStyles';\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: _extends({\n mode: 'light'\n }, paletteInput),\n spacing,\n shape: _extends({}, shape, shapeInput)\n }, other);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nimport { getPath } from './style';\nimport merge from './merge';\nimport memoize from './memoize';\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n var _getPath;\n const themeSpacing = (_getPath = getPath(theme, themeKey, false)) != null ? _getPath : defaultValue;\n if (typeof themeSpacing === 'number') {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof abs !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${abs}.`);\n }\n }\n return themeSpacing * abs;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return abs => {\n if (typeof abs === 'string') {\n return abs;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n return themeSpacing[abs];\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n const abs = Math.abs(propValue);\n const transformed = transformer(abs);\n if (propValue >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n return `-${transformed}`;\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (keys.indexOf(prop) === -1) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","import merge from './merge';\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from './responsivePropType';\nimport style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from './style';\nimport compose from './compose';\nimport { createUnaryUnit, getValue } from './spacing';\nimport { handleBreakpoints } from './breakpoints';\nimport responsivePropType from './responsivePropType';\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from './style';\nimport compose from './compose';\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from './style';\nimport compose from './compose';\nimport { handleBreakpoints, values as breakpointsValues } from './breakpoints';\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n var _props$theme, _props$theme2;\n const breakpoint = ((_props$theme = props.theme) == null || (_props$theme = _props$theme.breakpoints) == null || (_props$theme = _props$theme.values) == null ? void 0 : _props$theme[propValue]) || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (((_props$theme2 = props.theme) == null || (_props$theme2 = _props$theme2.breakpoints) == null ? void 0 : _props$theme2.unit) !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from '../spacing';\nimport { borderRadius, borderTransform } from '../borders';\nimport { gap, rowGap, columnGap } from '../cssGrid';\nimport { paletteTransform } from '../palette';\nimport { maxWidth, sizingTransform } from '../sizing';\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"sx\"];\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from './defaultSxConfig';\nconst splitProps = props => {\n var _props$theme$unstable, _props$theme;\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = (_props$theme$unstable = props == null || (_props$theme = props.theme) == null ? void 0 : _props$theme.unstable_sxConfig) != null ? _props$theme$unstable : defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return _extends({}, systemProps, result);\n };\n } else {\n finalSx = _extends({}, systemProps, inSx);\n }\n return _extends({}, otherProps, {\n sx: finalSx\n });\n}","import capitalize from '@mui/utils/capitalize';\nimport merge from '../merge';\nimport { getPath, getStyleValue as getValue } from '../style';\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from '../breakpoints';\nimport defaultSxConfig from './defaultSxConfig';\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n var _theme$unstable_sxCon;\n const {\n sx,\n theme = {}\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = (_theme$unstable_sxCon = theme.unstable_sxConfig) != null ? _theme$unstable_sxCon : defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n return removeUnusedBreakpoints(breakpointsKeys, css);\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n const contextTheme = React.useContext(ThemeContext);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from './createTheme';\nimport useThemeWithoutDefault from './useThemeWithoutDefault';\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param {object} defaultProps\n * @param {object} props\n * @returns {object} resolved props\n */\nexport default function resolveProps(defaultProps, props) {\n const output = _extends({}, props);\n Object.keys(defaultProps).forEach(propName => {\n if (propName.toString().match(/^(components|slots)$/)) {\n output[propName] = _extends({}, defaultProps[propName], output[propName]);\n } else if (propName.toString().match(/^(componentsProps|slotProps)$/)) {\n const defaultSlotProps = defaultProps[propName] || {};\n const slotProps = props[propName];\n output[propName] = {};\n if (!slotProps || !Object.keys(slotProps)) {\n // Reduce the iteration if the slot props is empty\n output[propName] = defaultSlotProps;\n } else if (!defaultSlotProps || !Object.keys(defaultSlotProps)) {\n // Reduce the iteration if the default slot props is empty\n output[propName] = slotProps;\n } else {\n output[propName] = _extends({}, slotProps);\n Object.keys(defaultSlotProps).forEach(slotPropName => {\n output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName]);\n });\n }\n } else if (output[propName] === undefined) {\n output[propName] = defaultProps[propName];\n }\n });\n return output;\n}","import resolveProps from '@mui/utils/resolveProps';\nexport default function getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps) {\n return props;\n }\n return resolveProps(theme.components[name].defaultProps, props);\n}","'use client';\n\nimport getThemeProps from './getThemeProps';\nimport useTheme from '../useTheme';\nexport default function useThemeProps({\n props,\n name,\n defaultTheme,\n themeId\n}) {\n let theme = useTheme(defaultTheme);\n if (themeId) {\n theme = theme[themeId] || theme;\n }\n const mergedProps = getThemeProps({\n theme,\n name,\n props\n });\n return mergedProps;\n}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","import _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`capitalize(string)\\` expects a string argument.` : _formatMuiErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","export default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n Object.keys(slots).forEach(\n // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n slot => {\n output[slot] = slots[slot].reduce((acc, key) => {\n if (key) {\n const utilityClass = getUtilityClass(key);\n if (utilityClass !== '') {\n acc.push(utilityClass);\n }\n if (classes && classes[key]) {\n acc.push(classes[key]);\n }\n }\n return acc;\n }, []).join(' ');\n });\n return output;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if (!isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? _extends({}, target) : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n // Avoid prototype pollution\n if (key === '__proto__') {\n return;\n }\n if (isPlainObject(source[key]) && key in target && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@mui/internal-babel-macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe if we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n /* eslint-disable prefer-template */\n let url = 'https://mui.com/production-error/?code=' + code;\n for (let i = 1; i < arguments.length; i += 1) {\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url += '&args[]=' + encodeURIComponent(arguments[i]);\n }\n return 'Minified MUI error #' + code + '; visit ' + url + ' for the full message.';\n /* eslint-enable prefer-template */\n}","import ClassNameGenerator from '../ClassNameGenerator';\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from '../generateUtilityClass';\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","import { ForwardRef, Memo } from 'react-is';\n\n// Simplified polyfill for IE11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nconst fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nexport function getFunctionName(fn) {\n const match = `${fn}`.match(fnNameMatchRegex);\n const name = match && match[1];\n return name || '';\n}\nfunction getFunctionComponentName(Component, fallback = '') {\n return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n const functionName = getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE11 support\n */\nexport default function getDisplayName(Component) {\n if (Component == null) {\n return undefined;\n }\n if (typeof Component === 'string') {\n return Component;\n }\n if (typeof Component === 'function') {\n return getFunctionComponentName(Component, 'Component');\n }\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component === 'object') {\n switch (Component.$$typeof) {\n case ForwardRef:\n return getWrappedName(Component, Component.render, 'ForwardRef');\n case Memo:\n return getWrappedName(Component, Component.type, 'memo');\n default:\n return undefined;\n }\n }\n return undefined;\n}","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function createMixins(breakpoints, mixins) {\n return _extends({\n toolbar: {\n minHeight: 56,\n [breakpoints.up('xs')]: {\n '@media (orientation: landscape)': {\n minHeight: 48\n }\n },\n [breakpoints.up('sm')]: {\n minHeight: 64\n }\n }\n }, mixins);\n}","const common = {\n black: '#000',\n white: '#fff'\n};\nexport default common;","const grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#f5f5f5',\n A200: '#eeeeee',\n A400: '#bdbdbd',\n A700: '#616161'\n};\nexport default grey;","const purple = {\n 50: '#f3e5f5',\n 100: '#e1bee7',\n 200: '#ce93d8',\n 300: '#ba68c8',\n 400: '#ab47bc',\n 500: '#9c27b0',\n 600: '#8e24aa',\n 700: '#7b1fa2',\n 800: '#6a1b9a',\n 900: '#4a148c',\n A100: '#ea80fc',\n A200: '#e040fb',\n A400: '#d500f9',\n A700: '#aa00ff'\n};\nexport default purple;","const red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nexport default red;","const orange = {\n 50: '#fff3e0',\n 100: '#ffe0b2',\n 200: '#ffcc80',\n 300: '#ffb74d',\n 400: '#ffa726',\n 500: '#ff9800',\n 600: '#fb8c00',\n 700: '#f57c00',\n 800: '#ef6c00',\n 900: '#e65100',\n A100: '#ffd180',\n A200: '#ffab40',\n A400: '#ff9100',\n A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n 50: '#e3f2fd',\n 100: '#bbdefb',\n 200: '#90caf9',\n 300: '#64b5f6',\n 400: '#42a5f5',\n 500: '#2196f3',\n 600: '#1e88e5',\n 700: '#1976d2',\n 800: '#1565c0',\n 900: '#0d47a1',\n A100: '#82b1ff',\n A200: '#448aff',\n A400: '#2979ff',\n A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n 50: '#e1f5fe',\n 100: '#b3e5fc',\n 200: '#81d4fa',\n 300: '#4fc3f7',\n 400: '#29b6f6',\n 500: '#03a9f4',\n 600: '#039be5',\n 700: '#0288d1',\n 800: '#0277bd',\n 900: '#01579b',\n A100: '#80d8ff',\n A200: '#40c4ff',\n A400: '#00b0ff',\n A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n 50: '#e8f5e9',\n 100: '#c8e6c9',\n 200: '#a5d6a7',\n 300: '#81c784',\n 400: '#66bb6a',\n 500: '#4caf50',\n 600: '#43a047',\n 700: '#388e3c',\n 800: '#2e7d32',\n 900: '#1b5e20',\n A100: '#b9f6ca',\n A200: '#69f0ae',\n A400: '#00e676',\n A700: '#00c853'\n};\nexport default green;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nconst _excluded = [\"mode\", \"contrastThreshold\", \"tonalOffset\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from '../colors/common';\nimport grey from '../colors/grey';\nimport purple from '../colors/purple';\nimport red from '../colors/red';\nimport orange from '../colors/orange';\nimport blue from '../colors/blue';\nimport lightBlue from '../colors/lightBlue';\nimport green from '../colors/green';\nexport const light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.6)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: common.white,\n default: common.white\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12\n }\n};\nexport const dark = {\n text: {\n primary: common.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: '#121212',\n default: '#121212'\n },\n action: {\n active: common.white,\n hover: 'rgba(255, 255, 255, 0.08)',\n hoverOpacity: 0.08,\n selected: 'rgba(255, 255, 255, 0.16)',\n selectedOpacity: 0.16,\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(255, 255, 255, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.24\n }\n};\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n const tonalOffsetLight = tonalOffset.light || tonalOffset;\n const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = lighten(intent.main, tonalOffsetLight);\n } else if (direction === 'dark') {\n intent.dark = darken(intent.main, tonalOffsetDark);\n }\n }\n}\nfunction getDefaultPrimary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: blue[200],\n light: blue[50],\n dark: blue[400]\n };\n }\n return {\n main: blue[700],\n light: blue[400],\n dark: blue[800]\n };\n}\nfunction getDefaultSecondary(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: purple[200],\n light: purple[50],\n dark: purple[400]\n };\n }\n return {\n main: purple[500],\n light: purple[300],\n dark: purple[700]\n };\n}\nfunction getDefaultError(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: red[500],\n light: red[300],\n dark: red[700]\n };\n }\n return {\n main: red[700],\n light: red[400],\n dark: red[800]\n };\n}\nfunction getDefaultInfo(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: lightBlue[400],\n light: lightBlue[300],\n dark: lightBlue[700]\n };\n }\n return {\n main: lightBlue[700],\n light: lightBlue[500],\n dark: lightBlue[900]\n };\n}\nfunction getDefaultSuccess(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: green[400],\n light: green[300],\n dark: green[700]\n };\n }\n return {\n main: green[800],\n light: green[500],\n dark: green[900]\n };\n}\nfunction getDefaultWarning(mode = 'light') {\n if (mode === 'dark') {\n return {\n main: orange[400],\n light: orange[300],\n dark: orange[700]\n };\n }\n return {\n main: '#ed6c02',\n // closest to orange[800] that pass 3:1.\n light: orange[500],\n dark: orange[900]\n };\n}\nexport default function createPalette(palette) {\n const {\n mode = 'light',\n contrastThreshold = 3,\n tonalOffset = 0.2\n } = palette,\n other = _objectWithoutPropertiesLoose(palette, _excluded);\n const primary = palette.primary || getDefaultPrimary(mode);\n const secondary = palette.secondary || getDefaultSecondary(mode);\n const error = palette.error || getDefaultError(mode);\n const info = palette.info || getDefaultInfo(mode);\n const success = palette.success || getDefaultSuccess(mode);\n const warning = palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background) {\n const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n if (process.env.NODE_ENV !== 'production') {\n const contrast = getContrastRatio(background, contrastText);\n if (contrast < 3) {\n console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n }\n }\n return contrastText;\n }\n const augmentColor = ({\n color,\n name,\n mainShade = 500,\n lightShade = 300,\n darkShade = 700\n }) => {\n color = _extends({}, color);\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n if (!color.hasOwnProperty('main')) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\nThe color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatMuiErrorMessage(11, name ? ` (${name})` : '', mainShade));\n }\n if (typeof color.main !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\n\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\n\nDid you intend to use one of the following approaches?\n\nimport { green } from \"@mui/material/colors\";\n\nconst theme1 = createTheme({ palette: {\n primary: green,\n} });\n\nconst theme2 = createTheme({ palette: {\n primary: { main: green[500] },\n} });` : _formatMuiErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n }\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n return color;\n };\n const modes = {\n dark,\n light\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!modes[mode]) {\n console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n }\n }\n const paletteOutput = deepmerge(_extends({\n // A collection of common colors.\n common: _extends({}, common),\n // prevent mutable object.\n // The palette mode, can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary: augmentColor({\n color: primary,\n name: 'primary'\n }),\n // The colors used to represent secondary interface elements for a user.\n secondary: augmentColor({\n color: secondary,\n name: 'secondary',\n mainShade: 'A400',\n lightShade: 'A200',\n darkShade: 'A700'\n }),\n // The colors used to represent interface elements that the user should be made aware of.\n error: augmentColor({\n color: error,\n name: 'error'\n }),\n // The colors used to represent potentially dangerous actions or important messages.\n warning: augmentColor({\n color: warning,\n name: 'warning'\n }),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info: augmentColor({\n color: info,\n name: 'info'\n }),\n // The colors used to indicate the successful completion of an action that user triggered.\n success: augmentColor({\n color: success,\n name: 'success'\n }),\n // The grey colors.\n grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset\n }, modes[mode]), other);\n return paletteOutput;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"];\nimport deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n const _ref = typeof typography === 'function' ? typography(palette) : typography,\n {\n fontFamily = defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize = 14,\n // px\n fontWeightLight = 300,\n fontWeightRegular = 400,\n fontWeightMedium = 500,\n fontWeightBold = 700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize = 16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem: pxToRem2\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof fontSize !== 'number') {\n console.error('MUI: `fontSize` is required to be a number.');\n }\n if (typeof htmlFontSize !== 'number') {\n console.error('MUI: `htmlFontSize` is required to be a number.');\n }\n }\n const coef = fontSize / 14;\n const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => _extends({\n fontFamily,\n fontWeight,\n fontSize: pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: `${round(letterSpacing / size)}em`\n } : {}, casing, allVariants);\n const variants = {\n h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n inherit: {\n fontFamily: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit'\n }\n };\n return deepmerge(_extends({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold\n }, variants), other, {\n clone: false // No need to clone deep\n });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"duration\", \"easing\", \"delay\"];\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n const constant = height / 36;\n\n // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\nexport default function createTransitions(inputTransitions) {\n const mergedEasing = _extends({}, easing, inputTransitions.easing);\n const mergedDuration = _extends({}, duration, inputTransitions.duration);\n const create = (props = ['all'], options = {}) => {\n const {\n duration: durationOption = mergedDuration.standard,\n easing: easingOption = mergedEasing.easeInOut,\n delay = 0\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n const isString = value => typeof value === 'string';\n // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n const isNumber = value => !isNaN(parseFloat(value));\n if (!isString(props) && !Array.isArray(props)) {\n console.error('MUI: Argument \"props\" must be a string or Array.');\n }\n if (!isNumber(durationOption) && !isString(durationOption)) {\n console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n }\n if (!isString(easingOption)) {\n console.error('MUI: Argument \"easing\" must be a string.');\n }\n if (!isNumber(delay) && !isString(delay)) {\n console.error('MUI: Argument \"delay\" must be a number or a string.');\n }\n if (typeof options !== 'object') {\n console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n }\n if (Object.keys(other).length !== 0) {\n console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n }\n }\n return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n };\n return _extends({\n getAutoHeightDuration,\n create\n }, inputTransitions, {\n easing: mergedEasing,\n duration: mergedDuration\n });\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nexport default zIndex;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nconst _excluded = [\"breakpoints\", \"mixins\", \"spacing\", \"palette\", \"transitions\", \"typography\", \"shape\"];\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from './createMixins';\nimport createPalette from './createPalette';\nimport createTypography from './createTypography';\nimport shadows from './shadows';\nimport createTransitions from './createTransitions';\nimport zIndex from './zIndex';\nfunction createTheme(options = {}, ...args) {\n const {\n mixins: mixinsInput = {},\n palette: paletteInput = {},\n transitions: transitionsInput = {},\n typography: typographyInput = {}\n } = options,\n other = _objectWithoutPropertiesLoose(options, _excluded);\n if (options.vars) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`vars\\` is a private field used for CSS variables support.\nPlease use another name.` : _formatMuiErrorMessage(18));\n }\n const palette = createPalette(paletteInput);\n const systemTheme = systemCreateTheme(options);\n let muiTheme = deepmerge(systemTheme, {\n mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows: shadows.slice(),\n typography: createTypography(palette, typographyInput),\n transitions: createTransitions(transitionsInput),\n zIndex: _extends({}, zIndex)\n });\n muiTheme = deepmerge(muiTheme, other);\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n if (process.env.NODE_ENV !== 'production') {\n // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n const traverse = (node, component) => {\n let key;\n\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (key in node) {\n const child = node[key];\n if (stateClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n if (process.env.NODE_ENV !== 'production') {\n const stateClass = generateUtilityClass('', key);\n console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n root: {\n [`&.${stateClass}`]: child\n }\n }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n }\n // Remove the style to prevent global conflicts.\n node[key] = {};\n }\n }\n };\n Object.keys(muiTheme.components).forEach(component => {\n const styleOverrides = muiTheme.components[component].styleOverrides;\n if (styleOverrides && component.indexOf('Mui') === 0) {\n traverse(styleOverrides, component);\n }\n });\n }\n muiTheme.unstable_sxConfig = _extends({}, defaultSxConfig, other == null ? void 0 : other.unstable_sxConfig);\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nlet warnedOnce = false;\nexport function createMuiTheme(...args) {\n if (process.env.NODE_ENV !== 'production') {\n if (!warnedOnce) {\n warnedOnce = true;\n console.error(['MUI: the createMuiTheme function was renamed to createTheme.', '', \"You should use `import { createTheme } from '@mui/material/styles'`\"].join('\\n'));\n }\n }\n return createTheme(...args);\n}\nexport default createTheme;","'use client';\n\nimport createTheme from './createTheme';\nconst defaultTheme = createTheme();\nexport default defaultTheme;","export default '$$material';","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from './slotShouldForwardProp';\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nimport rootShouldForwardProp from './rootShouldForwardProp';\nexport { default as slotShouldForwardProp } from './slotShouldForwardProp';\nexport { default as rootShouldForwardProp } from './rootShouldForwardProp';\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","'use client';\n\nimport systemUseThemeProps from '@mui/system/useThemeProps';\nimport defaultTheme from './defaultTheme';\nimport THEME_ID from './identifier';\nexport default function useThemeProps({\n props,\n name\n}) {\n return systemUseThemeProps({\n props,\n name,\n defaultTheme,\n themeId: THEME_ID\n });\n}","import capitalize from '@mui/utils/capitalize';\nexport default capitalize;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"inheritViewBox\", \"titleAccess\", \"viewBox\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport { getSvgIconUtilityClass } from './svgIconClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(({\n theme,\n ownerState\n}) => {\n var _theme$transitions, _theme$transitions$cr, _theme$transitions2, _theme$typography, _theme$typography$pxT, _theme$typography2, _theme$typography2$px, _theme$typography3, _theme$typography3$px, _palette$ownerState$c, _palette, _palette2, _palette3;\n return {\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n // the will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: ownerState.hasSvgAsChild ? undefined : 'currentColor',\n flexShrink: 0,\n transition: (_theme$transitions = theme.transitions) == null || (_theme$transitions$cr = _theme$transitions.create) == null ? void 0 : _theme$transitions$cr.call(_theme$transitions, 'fill', {\n duration: (_theme$transitions2 = theme.transitions) == null || (_theme$transitions2 = _theme$transitions2.duration) == null ? void 0 : _theme$transitions2.shorter\n }),\n fontSize: {\n inherit: 'inherit',\n small: ((_theme$typography = theme.typography) == null || (_theme$typography$pxT = _theme$typography.pxToRem) == null ? void 0 : _theme$typography$pxT.call(_theme$typography, 20)) || '1.25rem',\n medium: ((_theme$typography2 = theme.typography) == null || (_theme$typography2$px = _theme$typography2.pxToRem) == null ? void 0 : _theme$typography2$px.call(_theme$typography2, 24)) || '1.5rem',\n large: ((_theme$typography3 = theme.typography) == null || (_theme$typography3$px = _theme$typography3.pxToRem) == null ? void 0 : _theme$typography3$px.call(_theme$typography3, 35)) || '2.1875rem'\n }[ownerState.fontSize],\n // TODO v5 deprecate, v6 remove for sx\n color: (_palette$ownerState$c = (_palette = (theme.vars || theme).palette) == null || (_palette = _palette[ownerState.color]) == null ? void 0 : _palette.main) != null ? _palette$ownerState$c : {\n action: (_palette2 = (theme.vars || theme).palette) == null || (_palette2 = _palette2.action) == null ? void 0 : _palette2.active,\n disabled: (_palette3 = (theme.vars || theme).palette) == null || (_palette3 = _palette3.action) == null ? void 0 : _palette3.disabled,\n inherit: undefined\n }[ownerState.color]\n };\n});\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = _extends({}, props, {\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n });\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref\n }, more, other, hasSvgAsChild && children.props, {\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport SvgIcon from '../SvgIcon';\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, _extends({\n \"data-testid\": `${displayName}Icon`,\n ref: ref\n }, props, {\n children: path\n }));\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(Component));\n}","import createChainedFunction from '@mui/utils/createChainedFunction';\nexport default createChainedFunction;","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","import debounce from '@mui/utils/debounce';\nexport default debounce;","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // @ts-ignore\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}","import deprecatedPropType from '@mui/utils/deprecatedPropType';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import isMuiElement from '@mui/utils/isMuiElement';\nexport default isMuiElement;","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from '@mui/utils/ownerDocument';\nexport default ownerDocument;","import ownerWindow from '@mui/utils/ownerWindow';\nexport default ownerWindow;","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import requirePropFactory from '@mui/utils/requirePropFactory';\nexport default requirePropFactory;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}","import setRef from '@mui/utils/setRef';\nexport default setRef;","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`mui-${globalId}`);\n }\n }, [defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example
\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride != null ? idOverride : reactId;\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}","'use client';\n\nimport useId from '@mui/utils/useId';\nexport default useId;","import unsupportedProp from '@mui/utils/unsupportedProp';\nexport default unsupportedProp;","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\nimport useControlled from '@mui/utils/useControlled';\nexport default useControlled;","'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && defaultValue !== defaultProp) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useRef((...args) =>\n // @ts-expect-error hide `this`\n (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport useEventCallback from '@mui/utils/useEventCallback';\nexport default useEventCallback;","'use client';\n\nimport useForkRef from '@mui/utils/useForkRef';\nexport default useForkRef;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return instance => {\n refs.forEach(ref => {\n setRef(ref, instance);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","'use client';\n\nimport useLazyRef from '../useLazyRef/useLazyRef';\nimport useOnMount from '../useOnMount/useOnMount';\nexport class Timeout {\n constructor() {\n this.currentId = null;\n this.clear = () => {\n if (this.currentId !== null) {\n clearTimeout(this.currentId);\n this.currentId = null;\n }\n };\n this.disposeEffect = () => {\n return this.clear;\n };\n }\n static create() {\n return new Timeout();\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(() => {\n this.currentId = null;\n fn();\n }, delay);\n }\n}\nexport default function useTimeout() {\n const timeout = useLazyRef(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport * as React from 'react';\nimport { Timeout } from '../useTimeout/useTimeout';\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nconst hadFocusVisibleRecentlyTimeout = new Timeout();\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const {\n type,\n tagName\n } = node;\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const {\n target\n } = event;\n try {\n return target.matches(':focus-visible');\n } catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = React.useCallback(node => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n const isFocusVisibleRef = React.useRef(false);\n\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n hadFocusVisibleRecentlyTimeout.start(100, () => {\n hadFocusVisibleRecently = false;\n });\n isFocusVisibleRef.current = false;\n return true;\n }\n return false;\n }\n\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n isFocusVisibleRef.current = true;\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref\n };\n}","'use client';\n\nimport useIsFocusVisible from '@mui/utils/useIsFocusVisible';\nexport default useIsFocusVisible;","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/ClassNameGenerator';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","export type { EditMode } from './lib/edit-mode';\nexport type { GeoJsonEditModeType } from './lib/geojson-edit-mode';\nexport type { GeoJsonEditModeConstructor } from './lib/geojson-edit-mode';\n\nexport { GeoJsonEditMode } from './lib/geojson-edit-mode';\n\n// Alter modes\nexport { ModifyMode } from './lib/modify-mode';\nexport { TranslateMode } from './lib/translate-mode';\nexport { ScaleMode } from './lib/scale-mode';\nexport { RotateMode } from './lib/rotate-mode';\nexport { DuplicateMode } from './lib/duplicate-mode';\nexport { ExtendLineStringMode } from './lib/extend-line-string-mode';\nexport { SplitPolygonMode } from './lib/split-polygon-mode';\nexport { ExtrudeMode } from './lib/extrude-mode';\nexport { ElevationMode } from './lib/elevation-mode';\nexport { TransformMode } from './lib/transform-mode';\n\n// Draw modes\nexport { DrawPointMode } from './lib/draw-point-mode';\nexport { DrawLineStringMode } from './lib/draw-line-string-mode';\nexport { DrawPolygonMode } from './lib/draw-polygon-mode';\nexport { DrawRectangleMode } from './lib/draw-rectangle-mode';\nexport { DrawCircleByDiameterMode } from './lib/draw-circle-by-diameter-mode';\nexport { DrawCircleFromCenterMode } from './lib/draw-circle-from-center-mode';\nexport { DrawEllipseByBoundingBoxMode } from './lib/draw-ellipse-by-bounding-box-mode';\nexport { DrawEllipseUsingThreePointsMode } from './lib/draw-ellipse-using-three-points-mode';\nexport { DrawRectangleUsingThreePointsMode } from './lib/draw-rectangle-using-three-points-mode';\nexport { Draw90DegreePolygonMode } from './lib/draw-90degree-polygon-mode';\nexport { DrawPolygonByDraggingMode } from './lib/draw-polygon-by-dragging-mode';\nexport { ImmutableFeatureCollection } from './lib/immutable-feature-collection';\n\n// Other modes\nexport { ViewMode } from './lib/view-mode';\nexport { MeasureDistanceMode } from './lib/measure-distance-mode';\nexport { MeasureAreaMode } from './lib/measure-area-mode';\nexport { MeasureAngleMode } from './lib/measure-angle-mode';\nexport { CompositeMode } from './lib/composite-mode';\nexport { SnappableMode } from './lib/snappable-mode';\n\n// Experimental\nexport { default as _memoize } from './memoize';\n\nexport type {\n ScreenCoordinates,\n EditAction,\n Pick,\n ClickEvent,\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n ModeProps,\n GuideFeatureCollection,\n Viewport,\n Tooltip,\n} from './types';\n\nexport type {\n Position,\n PointCoordinates,\n LineStringCoordinates,\n PolygonCoordinates,\n MultiPointCoordinates,\n MultiLineStringCoordinates,\n MultiPolygonCoordinates,\n AnyCoordinates,\n Point,\n LineString,\n Polygon,\n MultiPoint,\n MultiLineString,\n MultiPolygon,\n Geometry,\n Polygonal,\n BoundingBoxArray,\n FeatureOf,\n FeatureWithProps,\n Feature,\n FeatureCollection,\n AnyGeoJson,\n} from './geojson-types';\n\n// Utils\nimport * as utils from './utils';\nexport { utils };\n","import { FeatureCollection } from '../geojson-types';\nimport {\n ModeProps,\n ClickEvent,\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n GuideFeatureCollection,\n} from '../types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class CompositeMode extends GeoJsonEditMode {\n _modes: Array;\n\n constructor(modes: Array) {\n super();\n this._modes = modes;\n }\n\n _coalesce(\n callback: (arg0: GeoJsonEditMode) => T,\n resultEval: (arg0: T) => boolean | null | undefined = null\n ): T {\n let result: T;\n\n for (let i = 0; i < this._modes.length; i++) {\n result = callback(this._modes[i]);\n if (resultEval ? resultEval(result) : result) {\n break;\n }\n }\n\n return result as any;\n }\n\n handleClick(event: ClickEvent, props: ModeProps): void {\n this._coalesce((handler) => handler.handleClick(event, props));\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {\n return this._coalesce((handler) => handler.handlePointerMove(event, props));\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps): void {\n return this._coalesce((handler) => handler.handleStartDragging(event, props));\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps): void {\n return this._coalesce((handler) => handler.handleStopDragging(event, props));\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps): void {\n return this._coalesce((handler) => handler.handleDragging(event, props));\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n // TODO: Combine the guides *BUT* make sure if none of the results have\n // changed to return the same object so that \"guides !== this.state.guides\"\n // in editable-geojson-layer works.\n\n const allGuides = [];\n for (const mode of this._modes) {\n allGuides.push(...mode.getGuides(props).features);\n }\n\n return {\n type: 'FeatureCollection',\n features: allGuides,\n };\n }\n}\n","import destination from '@turf/destination';\nimport bearing from '@turf/bearing';\nimport lineIntersect from '@turf/line-intersect';\nimport turfDistance from '@turf/distance';\nimport { point, lineString as turfLineString } from '@turf/helpers';\nimport {\n generatePointsParallelToLinePoints,\n getPickedEditHandle,\n getEditHandlesForGeometry,\n} from '../utils';\nimport {\n ClickEvent,\n PointerMoveEvent,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { Polygon, LineString, Position, FeatureCollection } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class Draw90DegreePolygonMode extends GeoJsonEditMode {\n createTentativeFeature(props: ModeProps): TentativeFeature {\n const clickSequence = this.getClickSequence();\n\n const { mapCoords } = props.lastPointerMoveEvent;\n\n let p3;\n if (clickSequence.length === 1) {\n p3 = mapCoords;\n } else {\n const p1 = clickSequence[clickSequence.length - 2];\n const p2 = clickSequence[clickSequence.length - 1];\n [p3] = generatePointsParallelToLinePoints(p1, p2, mapCoords);\n }\n\n let tentativeFeature;\n\n if (clickSequence.length < 3) {\n // Draw a LineString connecting all the clicked points with the hovered point\n tentativeFeature = {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [...clickSequence, p3],\n },\n };\n } else {\n // Draw a Polygon connecting all the clicked points with the hovered point\n tentativeFeature = {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'Polygon',\n coordinates: [[...clickSequence, p3, clickSequence[0]]],\n },\n };\n }\n\n return tentativeFeature;\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const guides: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n };\n\n const clickSequence = this.getClickSequence();\n\n if (clickSequence.length === 0 || !props.lastPointerMoveEvent) {\n return guides;\n }\n const tentativeFeature = this.createTentativeFeature(props);\n\n guides.features.push(tentativeFeature);\n\n guides.features = guides.features.concat(\n getEditHandlesForGeometry(tentativeFeature.geometry, -1)\n );\n\n // Slice off the handles that are are next to the pointer\n guides.features = guides.features.slice(0, -1);\n\n return guides;\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n super.handlePointerMove(event, props);\n }\n\n handleClick(event: ClickEvent, props: ModeProps) {\n const { picks } = event;\n const tentativeFeature = this.getTentativeGuide(props);\n this.addClickSequence(event);\n const clickSequence = this.getClickSequence();\n\n if (!tentativeFeature) {\n // nothing else to do\n return;\n }\n\n if (clickSequence.length === 3 && tentativeFeature.geometry.type === 'LineString') {\n const lineString: LineString = tentativeFeature.geometry;\n\n // Tweak the clicked position to be the snapped 90 degree point along the polygon\n clickSequence[clickSequence.length - 1] =\n lineString.coordinates[lineString.coordinates.length - 1];\n } else if (clickSequence.length > 3 && tentativeFeature.geometry.type === 'Polygon') {\n const polygon: Polygon = tentativeFeature.geometry;\n\n // Tweak the clicked position to be the snapped 90 degree point along the polygon\n clickSequence[clickSequence.length - 1] =\n polygon.coordinates[0][polygon.coordinates[0].length - 2];\n\n const clickedEditHandle = getPickedEditHandle(picks);\n\n if (\n clickedEditHandle &&\n Array.isArray(clickedEditHandle.properties.positionIndexes) &&\n (clickedEditHandle.properties.positionIndexes[1] === 0 ||\n clickedEditHandle.properties.positionIndexes[1] === polygon.coordinates[0].length - 3)\n ) {\n // They clicked the first or last point (or double-clicked), so complete the polygon\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: this.finalizedCoordinates([...polygon.coordinates[0]]),\n };\n\n this.resetClickSequence();\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(polygonToAdd, props);\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n\n // Trigger pointer move right away in order for it to update edit handles (to support double-click)\n const fakePointerMoveEvent: PointerMoveEvent = {\n screenCoords: [-1, -1],\n mapCoords: event.mapCoords,\n picks: [],\n pointerDownPicks: null,\n pointerDownScreenCoords: null,\n pointerDownMapCoords: null,\n cancelPan: () => {},\n sourceEvent: null,\n };\n\n this.handlePointerMove(fakePointerMoveEvent, props);\n }\n\n finalizedCoordinates(coords: Position[]) {\n // Remove the hovered position\n let coordinates = [[...coords.slice(0, -2), coords[0]]];\n let pt = this.getIntermediatePoint([...coords]);\n if (!pt) {\n // if intermediate point with 90 degree not available\n // try remove the last clicked point and get the intermediate point.\n const tc = [...coords];\n tc.splice(-3, 1);\n pt = this.getIntermediatePoint([...tc]);\n if (pt) {\n coordinates = [[...coords.slice(0, -3), pt, coords[0]]];\n }\n } else {\n coordinates = [[...coords.slice(0, -2), pt, coords[0]]];\n }\n return coordinates;\n }\n\n getIntermediatePoint(coordinates: Position[]) {\n let pt;\n if (coordinates.length > 4) {\n const [p1, p2] = [...coordinates];\n const angle1 = bearing(p1, p2);\n const p3 = coordinates[coordinates.length - 3];\n const p4 = coordinates[coordinates.length - 4];\n const angle2 = bearing(p3, p4);\n\n const angles = { first: [], second: [] };\n // calculate 3 right angle points for first and last points in lineString\n [1, 2, 3].forEach((factor) => {\n const newAngle1 = angle1 + factor * 90;\n // convert angles to 0 to -180 for anti-clock and 0 to 180 for clock wise\n angles.first.push(newAngle1 > 180 ? newAngle1 - 360 : newAngle1);\n const newAngle2 = angle2 + factor * 90;\n angles.second.push(newAngle2 > 180 ? newAngle2 - 360 : newAngle2);\n });\n\n const distance = turfDistance(point(p1), point(p3));\n // Draw imaginary right angle lines for both first and last points in lineString\n // If there is intersection point for any 2 lines, will be the 90 degree point.\n [0, 1, 2].forEach((indexFirst) => {\n const line1 = turfLineString([\n p1,\n destination(p1, distance, angles.first[indexFirst]).geometry.coordinates,\n ]);\n [0, 1, 2].forEach((indexSecond) => {\n const line2 = turfLineString([\n p3,\n destination(p3, distance, angles.second[indexSecond]).geometry.coordinates,\n ]);\n const fc = lineIntersect(line1, line2);\n if (fc && fc.features.length) {\n // found the intersect point\n pt = fc.features[0].geometry.coordinates;\n }\n });\n });\n }\n return pt;\n }\n}\n","import circle from '@turf/circle';\nimport distance from '@turf/distance';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { getIntermediatePosition } from './geojson-edit-mode';\nimport { TwoClickPolygonMode } from './two-click-polygon-mode';\n\nexport class DrawCircleByDiameterMode extends TwoClickPolygonMode {\n getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf {\n // Default turf value for circle is 64\n const { steps = 64 } = modeConfig || {};\n const options = { steps };\n\n if (steps < 4) {\n console.warn(`Minimum steps to draw a circle is 4 `); // eslint-disable-line no-console,no-undef\n options.steps = 4;\n }\n\n const centerCoordinates = getIntermediatePosition(coord1, coord2);\n const radius = Math.max(distance(coord1, centerCoordinates), 0.001);\n\n const geometry = circle(centerCoordinates, radius, options);\n\n geometry.properties = geometry.properties || {};\n geometry.properties.shape = 'Circle';\n\n return geometry;\n }\n}\n","import circle from '@turf/circle';\nimport distance from '@turf/distance';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { TwoClickPolygonMode } from './two-click-polygon-mode';\n\nexport class DrawCircleFromCenterMode extends TwoClickPolygonMode {\n getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf {\n // Default turf value for circle is 64\n const { steps = 64 } = modeConfig || {};\n const options = { steps };\n\n if (steps < 4) {\n console.warn(`Minimum steps to draw a circle is 4 `); // eslint-disable-line no-console,no-undef\n options.steps = 4;\n }\n\n const radius = Math.max(distance(coord1, coord2), 0.001);\n const geometry = circle(coord1, radius, options);\n\n geometry.properties = geometry.properties || {};\n geometry.properties.shape = 'Circle';\n\n return geometry;\n }\n}\n","import bboxPolygon from '@turf/bbox-polygon';\nimport distance from '@turf/distance';\nimport ellipse from '@turf/ellipse';\nimport { point } from '@turf/helpers';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { getIntermediatePosition } from './geojson-edit-mode';\nimport { TwoClickPolygonMode } from './two-click-polygon-mode';\n\nexport class DrawEllipseByBoundingBoxMode extends TwoClickPolygonMode {\n getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf {\n const minX = Math.min(coord1[0], coord2[0]);\n const minY = Math.min(coord1[1], coord2[1]);\n const maxX = Math.max(coord1[0], coord2[0]);\n const maxY = Math.max(coord1[1], coord2[1]);\n\n const polygonPoints = bboxPolygon([minX, minY, maxX, maxY]).geometry.coordinates[0];\n const centerCoordinates = getIntermediatePosition(coord1, coord2);\n\n const xSemiAxis = Math.max(distance(point(polygonPoints[0]), point(polygonPoints[1])), 0.001);\n const ySemiAxis = Math.max(distance(point(polygonPoints[0]), point(polygonPoints[3])), 0.001);\n\n // @ts-ignore\n return ellipse(centerCoordinates, xSemiAxis, ySemiAxis);\n }\n}\n","import distance from '@turf/distance';\nimport ellipse from '@turf/ellipse';\nimport bearing from '@turf/bearing';\nimport { point } from '@turf/helpers';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { getIntermediatePosition } from './geojson-edit-mode';\nimport { ThreeClickPolygonMode } from './three-click-polygon-mode';\n\nexport class DrawEllipseUsingThreePointsMode extends ThreeClickPolygonMode {\n getThreeClickPolygon(\n coord1: Position,\n coord2: Position,\n coord3: Position,\n modeConfig: any\n ): FeatureOf | null | undefined {\n const centerCoordinates = getIntermediatePosition(coord1, coord2);\n const xSemiAxis = Math.max(distance(centerCoordinates, point(coord3)), 0.001);\n const ySemiAxis = Math.max(distance(coord1, coord2), 0.001) / 2;\n const options = { angle: bearing(coord1, coord2) };\n // @ts-ignore\n return ellipse(centerCoordinates, xSemiAxis, ySemiAxis, options);\n }\n}\n","import { LineString, FeatureCollection } from '../geojson-types';\nimport { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types';\nimport { getPickedEditHandle } from '../utils';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class DrawLineStringMode extends GeoJsonEditMode {\n handleClick(event: ClickEvent, props: ModeProps) {\n const { picks } = event;\n const clickedEditHandle = getPickedEditHandle(picks);\n\n let positionAdded = false;\n if (!clickedEditHandle) {\n // Don't add another point right next to an existing one\n this.addClickSequence(event);\n positionAdded = true;\n }\n const clickSequence = this.getClickSequence();\n\n if (\n clickSequence.length > 1 &&\n clickedEditHandle &&\n Array.isArray(clickedEditHandle.properties.positionIndexes) &&\n clickedEditHandle.properties.positionIndexes[0] === clickSequence.length - 1\n ) {\n // They clicked the last point (or double-clicked), so add the LineString\n\n const lineStringToAdd: LineString = {\n type: 'LineString',\n coordinates: [...clickSequence],\n };\n\n this.resetClickSequence();\n\n const editAction = this.getAddFeatureAction(lineStringToAdd, props.data);\n if (editAction) {\n props.onEdit(editAction);\n }\n } else if (positionAdded) {\n // new tentative point\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: 'addTentativePosition',\n editContext: {\n position: event.mapCoords,\n },\n });\n }\n }\n handleKeyUp(event: KeyboardEvent, props: ModeProps) {\n const { key } = event;\n if (key === 'Enter') {\n const clickSequence = this.getClickSequence();\n if (clickSequence.length > 1) {\n const lineStringToAdd: LineString = {\n type: 'LineString',\n coordinates: [...clickSequence],\n };\n this.resetClickSequence();\n const editAction = this.getAddFeatureAction(lineStringToAdd, props.data);\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n }\n getGuides(props: ModeProps): GuideFeatureCollection {\n const { lastPointerMoveEvent } = props;\n const clickSequence = this.getClickSequence();\n\n const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];\n\n const guides = {\n type: 'FeatureCollection',\n features: [],\n };\n\n let tentativeFeature;\n if (clickSequence.length > 0) {\n tentativeFeature = {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [...clickSequence, ...lastCoords],\n },\n };\n }\n\n if (tentativeFeature) {\n guides.features.push(tentativeFeature);\n }\n\n const editHandles = clickSequence.map((clickedCoord, index) => ({\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType: 'existing',\n featureIndex: -1,\n positionIndexes: [index],\n },\n geometry: {\n type: 'Point',\n coordinates: clickedCoord,\n },\n }));\n\n guides.features.push(...editHandles);\n // @ts-ignore\n return guides;\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n }\n}\n","import { ClickEvent, PointerMoveEvent, ModeProps, TentativeFeature } from '../types';\nimport { FeatureCollection } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class DrawPointMode extends GeoJsonEditMode {\n createTentativeFeature(props: ModeProps): TentativeFeature {\n const { lastPointerMoveEvent } = props;\n const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];\n\n return {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'Point',\n coordinates: lastCoords[0],\n },\n };\n }\n\n handleClick({ mapCoords }: ClickEvent, props: ModeProps): void {\n const geometry = {\n type: 'Point',\n coordinates: mapCoords,\n };\n // @ts-ignore\n props.onEdit(this.getAddFeatureAction(geometry, props.data));\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n super.handlePointerMove(event, props);\n }\n}\n","import throttle from 'lodash.throttle';\nimport {\n ClickEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n ModeProps,\n} from '../types';\nimport { Polygon, FeatureCollection } from '../geojson-types';\nimport { getPickedEditHandle } from '../utils';\nimport { DrawPolygonMode } from './draw-polygon-mode';\n\ntype DraggingHandler = (event: DraggingEvent, props: ModeProps) => void;\n\nexport class DrawPolygonByDraggingMode extends DrawPolygonMode {\n handleDraggingThrottled: DraggingHandler | null | undefined = null;\n\n handleClick(event: ClickEvent, props: ModeProps) {\n // No-op\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n event.cancelPan();\n if (props.modeConfig && props.modeConfig.throttleMs) {\n this.handleDraggingThrottled = throttle(this.handleDraggingAux, props.modeConfig.throttleMs);\n } else {\n this.handleDraggingThrottled = this.handleDraggingAux;\n }\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n this.addClickSequence(event);\n const clickSequence = this.getClickSequence();\n // @ts-ignore\n if (this.handleDraggingThrottled && this.handleDraggingThrottled.cancel) {\n // @ts-ignore\n this.handleDraggingThrottled.cancel();\n }\n\n if (clickSequence.length > 2) {\n // Complete the polygon.\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: [[...clickSequence, clickSequence[0]]],\n };\n\n this.resetClickSequence();\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(polygonToAdd, props);\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n\n handleDraggingAux(event: DraggingEvent, props: ModeProps) {\n const { picks } = event;\n const clickedEditHandle = getPickedEditHandle(picks);\n\n if (!clickedEditHandle) {\n // Don't add another point right next to an existing one.\n this.addClickSequence(event);\n }\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps) {\n if (this.handleDraggingThrottled) {\n this.handleDraggingThrottled(event, props);\n }\n }\n}\n","import {\n ClickEvent,\n PointerMoveEvent,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { Polygon, FeatureCollection } from '../geojson-types';\nimport { getPickedEditHandle } from '../utils';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class DrawPolygonMode extends GeoJsonEditMode {\n createTentativeFeature(props: ModeProps): TentativeFeature {\n const { lastPointerMoveEvent } = props;\n const clickSequence = this.getClickSequence();\n\n const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];\n\n let tentativeFeature;\n if (clickSequence.length === 1 || clickSequence.length === 2) {\n tentativeFeature = {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [...clickSequence, ...lastCoords],\n },\n };\n } else if (clickSequence.length > 2) {\n tentativeFeature = {\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'Polygon',\n coordinates: [[...clickSequence, ...lastCoords, clickSequence[0]]],\n },\n };\n }\n\n return tentativeFeature;\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const clickSequence = this.getClickSequence();\n\n const guides = {\n type: 'FeatureCollection',\n features: [],\n };\n\n const tentativeFeature = this.createTentativeFeature(props);\n if (tentativeFeature) {\n guides.features.push(tentativeFeature);\n }\n\n const editHandles = clickSequence.map((clickedCoord, index) => ({\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType: 'existing',\n featureIndex: -1,\n positionIndexes: [index],\n },\n geometry: {\n type: 'Point',\n coordinates: clickedCoord,\n },\n }));\n\n guides.features.push(...editHandles);\n // @ts-ignore\n return guides;\n }\n\n handleClick(event: ClickEvent, props: ModeProps) {\n const { picks } = event;\n const clickedEditHandle = getPickedEditHandle(picks);\n\n let positionAdded = false;\n if (!clickedEditHandle) {\n // Don't add another point right next to an existing one\n this.addClickSequence(event);\n positionAdded = true;\n }\n const clickSequence = this.getClickSequence();\n\n if (\n clickSequence.length > 2 &&\n clickedEditHandle &&\n Array.isArray(clickedEditHandle.properties.positionIndexes) &&\n (clickedEditHandle.properties.positionIndexes[0] === 0 ||\n clickedEditHandle.properties.positionIndexes[0] === clickSequence.length - 1)\n ) {\n // They clicked the first or last point (or double-clicked), so complete the polygon\n\n // Remove the hovered position\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: [[...clickSequence, clickSequence[0]]],\n };\n\n this.resetClickSequence();\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(polygonToAdd, props);\n if (editAction) {\n props.onEdit(editAction);\n }\n } else if (positionAdded) {\n // new tentative point\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: 'addTentativePosition',\n editContext: {\n position: event.mapCoords,\n },\n });\n }\n }\n handleKeyUp(event: KeyboardEvent, props: ModeProps) {\n if (event.key === 'Enter') {\n const clickSequence = this.getClickSequence();\n if (clickSequence.length > 2) {\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: [[...clickSequence, clickSequence[0]]],\n };\n this.resetClickSequence();\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(polygonToAdd, props);\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n }\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n super.handlePointerMove(event, props);\n }\n}\n","import bboxPolygon from '@turf/bbox-polygon';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { TwoClickPolygonMode } from './two-click-polygon-mode';\n\nexport class DrawRectangleMode extends TwoClickPolygonMode {\n getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf {\n const rectangle = bboxPolygon([coord1[0], coord1[1], coord2[0], coord2[1]]);\n rectangle.properties = rectangle.properties || {};\n rectangle.properties.shape = 'Rectangle';\n\n // @ts-ignore\n return rectangle;\n }\n}\n","import { generatePointsParallelToLinePoints } from '../utils';\nimport { Position, Polygon, FeatureOf } from '../geojson-types';\nimport { ThreeClickPolygonMode } from './three-click-polygon-mode';\n\nexport class DrawRectangleUsingThreePointsMode extends ThreeClickPolygonMode {\n getThreeClickPolygon(\n coord1: Position,\n coord2: Position,\n coord3: Position,\n modeConfig: any\n ): FeatureOf | null | undefined {\n const [p3, p4] = generatePointsParallelToLinePoints(coord1, coord2, coord3);\n\n return {\n type: 'Feature',\n properties: {\n shape: 'Rectangle',\n },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n // Draw a polygon containing all the points of the LineString,\n // then the points orthogonal to the lineString,\n // then back to the starting position\n coord1,\n coord2,\n p3,\n p4,\n coord1,\n ],\n ],\n },\n };\n }\n}\n","import { StartDraggingEvent, ModeProps } from '../types';\nimport { FeatureCollection } from '../geojson-types';\nimport { TranslateMode } from './translate-mode';\n\nexport class DuplicateMode extends TranslateMode {\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n super.handleStartDragging(event, props);\n\n if (this._geometryBeforeTranslate) {\n props.onEdit(this.getAddManyFeaturesAction(this._geometryBeforeTranslate, props.data));\n }\n }\n\n updateCursor(props: ModeProps) {\n if (this._isTranslatable) {\n props.onUpdateCursor('copy');\n } else {\n props.onUpdateCursor(null);\n }\n }\n}\n","import { ModeProps, PointerMoveEvent, StopDraggingEvent } from '../types';\nimport { Position, FeatureCollection } from '../geojson-types';\nimport { getPickedEditHandle } from '../utils';\nimport { ModifyMode } from './modify-mode';\n\nfunction defaultCalculateElevationChange({\n pointerDownScreenCoords,\n screenCoords,\n}: {\n pointerDownScreenCoords: Position;\n screenCoords: Position;\n}) {\n return 10 * (pointerDownScreenCoords[1] - screenCoords[1]);\n}\n\nexport class ElevationMode extends ModifyMode {\n makeElevatedEvent(\n event: PointerMoveEvent | StopDraggingEvent,\n position: Position,\n props: ModeProps\n ): Record {\n const {\n minElevation = 0,\n maxElevation = 20000,\n calculateElevationChange = defaultCalculateElevationChange,\n } = props.modeConfig || {};\n\n if (!event.pointerDownScreenCoords) {\n return event;\n }\n\n // $FlowFixMe - really, I know it has something at index 2\n let elevation = position.length === 3 ? position[2] : 0;\n\n // calculateElevationChange is configurable because (at this time) modes are not aware of the viewport\n elevation += calculateElevationChange({\n pointerDownScreenCoords: event.pointerDownScreenCoords,\n screenCoords: event.screenCoords,\n });\n elevation = Math.min(elevation, maxElevation);\n elevation = Math.max(elevation, minElevation);\n\n return Object.assign({}, event, {\n mapCoords: [position[0], position[1], elevation],\n });\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n const editHandle = getPickedEditHandle(event.pointerDownPicks);\n const position = editHandle ? editHandle.geometry.coordinates : event.mapCoords;\n // @ts-ignore\n super.handlePointerMove(this.makeElevatedEvent(event, position, props), props);\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n const editHandle = getPickedEditHandle(event.picks);\n const position = editHandle ? editHandle.geometry.coordinates : event.mapCoords;\n // @ts-ignore\n super.handleStopDragging(this.makeElevatedEvent(event, position, props), props);\n }\n\n getCursor(event: PointerMoveEvent): string | null | undefined {\n let cursor = super.getCursor(event);\n if (cursor === 'cell') {\n cursor = 'ns-resize';\n }\n return cursor;\n }\n\n static calculateElevationChangeWithViewport(\n viewport: any,\n {\n pointerDownScreenCoords,\n screenCoords,\n }: {\n pointerDownScreenCoords: Position;\n screenCoords: Position;\n }\n ): number {\n // Source: https://gis.stackexchange.com/a/127949/111804\n const metersPerPixel =\n (156543.03392 * Math.cos((viewport.latitude * Math.PI) / 180)) / Math.pow(2, viewport.zoom);\n\n return (metersPerPixel * (pointerDownScreenCoords[1] - screenCoords[1])) / 2;\n }\n}\n","import { Position, LineString, FeatureCollection } from '../geojson-types';\nimport { ClickEvent, PointerMoveEvent, ModeProps, GuideFeatureCollection } from '../types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class ExtendLineStringMode extends GeoJsonEditMode {\n getSingleSelectedLineString(props: ModeProps): LineString | null | undefined {\n const selectedGeometry = this.getSelectedGeometry(props);\n\n if (selectedGeometry && selectedGeometry.type === 'LineString') {\n return selectedGeometry;\n }\n return null;\n }\n\n handleClick(event: ClickEvent, props: ModeProps) {\n const { selectedIndexes } = props;\n const selectedLineString = this.getSingleSelectedLineString(props);\n\n if (!selectedLineString) {\n console.warn(`ExtendLineStringMode only supported for single LineString selection`); // eslint-disable-line\n return;\n }\n\n // Extend the LineString\n let positionIndexes = [selectedLineString.coordinates.length];\n\n const modeConfig = props.modeConfig;\n if (modeConfig && modeConfig.drawAtFront) {\n positionIndexes = [0];\n }\n const featureIndex = selectedIndexes[0];\n const updatedData = new ImmutableFeatureCollection(props.data)\n .addPosition(featureIndex, positionIndexes, event.mapCoords)\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'addPosition',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes,\n position: event.mapCoords,\n },\n });\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const guides = {\n type: 'FeatureCollection',\n features: [],\n };\n\n const selectedLineString = this.getSingleSelectedLineString(props);\n if (!selectedLineString) {\n // nothing to do\n // @ts-ignore\n return guides;\n }\n\n const mapCoords = props.lastPointerMoveEvent && props.lastPointerMoveEvent.mapCoords;\n\n // Draw an extension line starting from one end of the selected LineString to the cursor\n let startPosition: Position | null | undefined = null;\n const { modeConfig } = props;\n if (modeConfig && modeConfig.drawAtFront) {\n startPosition = selectedLineString.coordinates[0];\n } else {\n startPosition = selectedLineString.coordinates[selectedLineString.coordinates.length - 1];\n }\n\n guides.features.push({\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [startPosition, mapCoords],\n },\n });\n // @ts-ignore\n return guides;\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n }\n}\n","import bearing from '@turf/bearing';\nimport {\n generatePointsParallelToLinePoints,\n getPickedEditHandle,\n getPickedIntermediateEditHandle,\n} from '../utils';\nimport { FeatureCollection } from '../geojson-types';\nimport { ModeProps, StartDraggingEvent, StopDraggingEvent, DraggingEvent } from '../types';\nimport { ModifyMode } from './modify-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class ExtrudeMode extends ModifyMode {\n // this mode is busted =(\n\n isPointAdded = false;\n\n handleDragging(event: DraggingEvent, props: ModeProps): void {\n const editHandle = getPickedEditHandle(event.pointerDownPicks);\n\n if (editHandle) {\n const { featureIndex } = editHandle.properties;\n let { positionIndexes } = editHandle.properties;\n\n const size = this.coordinatesSize(positionIndexes, featureIndex, props.data);\n positionIndexes = this.isPointAdded\n ? this.nextPositionIndexes(positionIndexes, size)\n : positionIndexes;\n // p1 and p1 are end points for edge\n const p1 = this.getPointForPositionIndexes(\n this.prevPositionIndexes(positionIndexes, size),\n featureIndex,\n props.data\n );\n const p2 = this.getPointForPositionIndexes(positionIndexes, featureIndex, props.data);\n if (p1 && p2) {\n // p3 and p4 are end points for moving (extruding) edge\n const [p3, p4] = generatePointsParallelToLinePoints(p1, p2, event.mapCoords);\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .replacePosition(featureIndex, this.prevPositionIndexes(positionIndexes, size), p4)\n .replacePosition(featureIndex, positionIndexes, p3)\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'extruding',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes: this.nextPositionIndexes(positionIndexes, size),\n position: p3,\n },\n });\n\n event.cancelPan();\n }\n }\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n const selectedFeatureIndexes = props.selectedIndexes;\n\n const editHandle = getPickedIntermediateEditHandle(event.picks);\n if (selectedFeatureIndexes.length && editHandle) {\n const { positionIndexes, featureIndex } = editHandle.properties;\n\n const size = this.coordinatesSize(positionIndexes, featureIndex, props.data);\n // p1 and p1 are end points for edge\n const p1 = this.getPointForPositionIndexes(\n this.prevPositionIndexes(positionIndexes, size),\n featureIndex,\n props.data\n );\n const p2 = this.getPointForPositionIndexes(positionIndexes, featureIndex, props.data);\n\n if (p1 && p2) {\n let updatedData = new ImmutableFeatureCollection(props.data);\n if (!this.isOrthogonal(positionIndexes, featureIndex, size, props.data)) {\n updatedData = updatedData.addPosition(featureIndex, positionIndexes, p2);\n }\n if (\n !this.isOrthogonal(\n this.prevPositionIndexes(positionIndexes, size),\n featureIndex,\n size,\n props.data\n )\n ) {\n updatedData = updatedData.addPosition(featureIndex, positionIndexes, p1);\n this.isPointAdded = true;\n }\n\n props.onEdit({\n updatedData: updatedData.getObject(),\n editType: 'startExtruding',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes,\n position: p1,\n },\n });\n }\n }\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n const selectedFeatureIndexes = props.selectedIndexes;\n const editHandle = getPickedEditHandle(event.pointerDownPicks);\n if (selectedFeatureIndexes.length && editHandle) {\n const { featureIndex } = editHandle.properties;\n let { positionIndexes } = editHandle.properties;\n\n const size = this.coordinatesSize(positionIndexes, featureIndex, props.data);\n positionIndexes = this.isPointAdded\n ? this.nextPositionIndexes(positionIndexes, size)\n : positionIndexes;\n // p1 and p1 are end points for edge\n const p1 = this.getPointForPositionIndexes(\n this.prevPositionIndexes(positionIndexes, size),\n featureIndex,\n props.data\n );\n const p2 = this.getPointForPositionIndexes(positionIndexes, featureIndex, props.data);\n\n if (p1 && p2) {\n // p3 and p4 are end points for new moved (extruded) edge\n const [p3, p4] = generatePointsParallelToLinePoints(p1, p2, event.mapCoords);\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .replacePosition(featureIndex, this.prevPositionIndexes(positionIndexes, size), p4)\n .replacePosition(featureIndex, positionIndexes, p3)\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'extruded',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes,\n position: p3,\n },\n });\n }\n }\n this.isPointAdded = false;\n }\n\n coordinatesSize(\n positionIndexes: number[] | null | undefined,\n featureIndex: number,\n { features }: FeatureCollection\n ) {\n let size = 0;\n if (Array.isArray(positionIndexes)) {\n const feature = features[featureIndex];\n const coordinates: any = feature.geometry.coordinates;\n // for Multi polygons, length will be 3\n if (positionIndexes.length === 3) {\n const [a, b] = positionIndexes;\n if (coordinates.length && coordinates[a].length) {\n size = coordinates[a][b].length;\n }\n } else {\n const [b] = positionIndexes;\n if (coordinates.length && coordinates[b].length) {\n size = coordinates[b].length;\n }\n }\n }\n return size;\n }\n\n getBearing(p1: any, p2: any) {\n const angle = bearing(p1, p2);\n if (angle < 0) {\n return Math.floor(360 + angle);\n }\n return Math.floor(angle);\n }\n\n isOrthogonal(\n positionIndexes: number[] | null | undefined,\n featureIndex: number,\n size: number,\n features: FeatureCollection\n ) {\n if (!Array.isArray(positionIndexes)) {\n return false;\n }\n if (positionIndexes[positionIndexes.length - 1] === size - 1) {\n positionIndexes[positionIndexes.length - 1] = 0;\n }\n const prevPoint = this.getPointForPositionIndexes(\n this.prevPositionIndexes(positionIndexes, size),\n featureIndex,\n features\n );\n const nextPoint = this.getPointForPositionIndexes(\n this.nextPositionIndexes(positionIndexes, size),\n featureIndex,\n features\n );\n const currentPoint = this.getPointForPositionIndexes(positionIndexes, featureIndex, features);\n const prevAngle = this.getBearing(currentPoint, prevPoint);\n const nextAngle = this.getBearing(currentPoint, nextPoint);\n return [89, 90, 91, 269, 270, 271].includes(Math.abs(prevAngle - nextAngle));\n }\n\n nextPositionIndexes(positionIndexes: number[] | null | undefined, size: number): number[] {\n if (!Array.isArray(positionIndexes)) {\n return [];\n }\n const next = [...positionIndexes];\n if (next.length) {\n next[next.length - 1] = next[next.length - 1] === size - 1 ? 0 : next[next.length - 1] + 1;\n }\n return next;\n }\n\n prevPositionIndexes(positionIndexes: number[] | null | undefined, size: number): number[] {\n if (!Array.isArray(positionIndexes)) {\n return [];\n }\n const prev = [...positionIndexes];\n if (prev.length) {\n prev[prev.length - 1] = prev[prev.length - 1] === 0 ? size - 2 : prev[prev.length - 1] - 1;\n }\n return prev;\n }\n\n getPointForPositionIndexes(\n positionIndexes: number[] | null | undefined,\n featureIndex: number,\n { features }: FeatureCollection\n ) {\n let p1;\n if (Array.isArray(positionIndexes)) {\n const feature = features[featureIndex];\n const coordinates: any = feature.geometry.coordinates;\n // for Multi polygons, length will be 3\n if (positionIndexes.length === 3) {\n const [a, b, c] = positionIndexes;\n if (coordinates.length && coordinates[a].length) {\n p1 = coordinates[a][b][c];\n }\n } else {\n const [b, c] = positionIndexes;\n if (coordinates.length && coordinates[b].length) {\n p1 = coordinates[b][c];\n }\n }\n }\n return p1;\n }\n}\n","import turfUnion from '@turf/union';\nimport turfDifference from '@turf/difference';\nimport turfIntersect from '@turf/intersect';\nimport rewind from '@turf/rewind';\n\nimport {\n EditAction,\n ClickEvent,\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n Pick,\n Tooltip,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { FeatureCollection, Feature, Polygon, Geometry, Position } from '../geojson-types';\nimport { getPickedEditHandles, getNonGuidePicks } from '../utils';\nimport { EditMode } from './edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport type GeoJsonEditAction = EditAction;\n\nconst DEFAULT_GUIDES: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n};\nconst DEFAULT_TOOLTIPS: Tooltip[] = [];\n\n// Main interface for `EditMode`s that edit GeoJSON\nexport type GeoJsonEditModeType = EditMode;\n\nexport interface GeoJsonEditModeConstructor {\n new (): GeoJsonEditModeType;\n}\n\nexport class GeoJsonEditMode implements EditMode {\n _clickSequence: Position[] = [];\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n return DEFAULT_GUIDES;\n }\n\n getTooltips(props: ModeProps): Tooltip[] {\n return DEFAULT_TOOLTIPS;\n }\n\n getSelectedFeature(props: ModeProps): Feature | null | undefined {\n if (props.selectedIndexes.length === 1) {\n return props.data.features[props.selectedIndexes[0]];\n }\n return null;\n }\n\n getSelectedGeometry(props: ModeProps): Geometry | null | undefined {\n const feature = this.getSelectedFeature(props);\n if (feature) {\n return feature.geometry;\n }\n return null;\n }\n\n getSelectedFeaturesAsFeatureCollection(props: ModeProps): FeatureCollection {\n const { features } = props.data;\n const selectedFeatures = props.selectedIndexes.map((selectedIndex) => features[selectedIndex]);\n return {\n type: 'FeatureCollection',\n features: selectedFeatures,\n };\n }\n\n getClickSequence(): Position[] {\n return this._clickSequence;\n }\n\n addClickSequence({ mapCoords }: ClickEvent): void {\n this._clickSequence.push(mapCoords);\n }\n\n resetClickSequence(): void {\n this._clickSequence = [];\n }\n\n getTentativeGuide(props: ModeProps): TentativeFeature | null | undefined {\n const guides = this.getGuides(props);\n\n // @ts-ignore\n return guides.features.find((f) => f.properties && f.properties.guideType === 'tentative');\n }\n\n isSelectionPicked(picks: Pick[], props: ModeProps): boolean {\n if (!picks.length) return false;\n const pickedFeatures = getNonGuidePicks(picks).map(({ index }) => index);\n const pickedHandles = getPickedEditHandles(picks).map(\n ({ properties }) => properties.featureIndex\n );\n const pickedIndexes = new Set([...pickedFeatures, ...pickedHandles]);\n return props.selectedIndexes.some((index) => pickedIndexes.has(index));\n }\n\n rewindPolygon(feature: Feature): Feature {\n const { geometry } = feature;\n\n const isPolygonal = geometry.type === 'Polygon' || geometry.type === 'MultiPolygon';\n if (isPolygonal) {\n // @ts-ignore\n return rewind(feature);\n }\n\n return feature;\n }\n\n getAddFeatureAction(\n featureOrGeometry: Geometry | Feature,\n features: FeatureCollection\n ): GeoJsonEditAction {\n // Unsure why flow can't deal with Geometry type, but there I fixed it\n const featureOrGeometryAsAny: any = featureOrGeometry;\n\n const feature: any =\n featureOrGeometryAsAny.type === 'Feature'\n ? featureOrGeometryAsAny\n : {\n type: 'Feature',\n properties: {},\n geometry: featureOrGeometryAsAny,\n };\n\n const rewindFeature = this.rewindPolygon(feature);\n const updatedData = new ImmutableFeatureCollection(features)\n .addFeature(rewindFeature)\n .getObject();\n\n return {\n updatedData,\n editType: 'addFeature',\n editContext: {\n featureIndexes: [updatedData.features.length - 1],\n },\n };\n }\n\n getAddManyFeaturesAction(\n { features: featuresToAdd }: FeatureCollection,\n features: FeatureCollection\n ): GeoJsonEditAction {\n let updatedData = new ImmutableFeatureCollection(features);\n const initialIndex = updatedData.getObject().features.length;\n const updatedIndexes = [];\n for (const feature of featuresToAdd) {\n const { properties, geometry } = feature;\n const geometryAsAny: any = geometry;\n updatedData = updatedData.addFeature({\n type: 'Feature',\n properties,\n geometry: geometryAsAny,\n });\n updatedIndexes.push(initialIndex + updatedIndexes.length);\n }\n\n return {\n updatedData: updatedData.getObject(),\n editType: 'addFeature',\n editContext: {\n featureIndexes: updatedIndexes,\n },\n };\n }\n\n getAddFeatureOrBooleanPolygonAction(\n featureOrGeometry: Polygon | Feature,\n props: ModeProps\n ): GeoJsonEditAction | null | undefined {\n const featureOrGeometryAsAny: any = featureOrGeometry;\n\n const selectedFeature = this.getSelectedFeature(props);\n const { modeConfig } = props;\n if (modeConfig && modeConfig.booleanOperation) {\n if (\n !selectedFeature ||\n (selectedFeature.geometry.type !== 'Polygon' &&\n selectedFeature.geometry.type !== 'MultiPolygon')\n ) {\n // eslint-disable-next-line no-console,no-undef\n console.warn(\n 'booleanOperation only supported for single Polygon or MultiPolygon selection'\n );\n return null;\n }\n\n const feature =\n featureOrGeometryAsAny.type === 'Feature'\n ? featureOrGeometryAsAny\n : {\n type: 'Feature',\n geometry: featureOrGeometryAsAny,\n };\n\n let updatedGeometry;\n if (modeConfig.booleanOperation === 'union') {\n updatedGeometry = turfUnion(selectedFeature, feature);\n } else if (modeConfig.booleanOperation === 'difference') {\n // @ts-ignore\n updatedGeometry = turfDifference(selectedFeature, feature);\n } else if (modeConfig.booleanOperation === 'intersection') {\n // @ts-ignore\n updatedGeometry = turfIntersect(selectedFeature, feature);\n } else {\n // eslint-disable-next-line no-console,no-undef\n console.warn(`Invalid booleanOperation ${modeConfig.booleanOperation}`);\n return null;\n }\n\n if (!updatedGeometry) {\n // eslint-disable-next-line no-console,no-undef\n console.warn('Canceling edit. Boolean operation erased entire polygon.');\n return null;\n }\n\n const featureIndex = props.selectedIndexes[0];\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .replaceGeometry(featureIndex, updatedGeometry.geometry)\n .getObject();\n\n const editAction: GeoJsonEditAction = {\n updatedData,\n editType: 'unionGeometry',\n editContext: {\n featureIndexes: [featureIndex],\n },\n };\n\n return editAction;\n }\n return this.getAddFeatureAction(featureOrGeometry, props.data);\n }\n\n createTentativeFeature(props: ModeProps): TentativeFeature {\n return null;\n }\n\n handleClick(event: ClickEvent, props: ModeProps): void {}\n handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {\n const tentativeFeature = this.createTentativeFeature(props);\n if (tentativeFeature) {\n props.onEdit({\n updatedData: props.data,\n editType: 'updateTentativeFeature',\n editContext: {\n feature: tentativeFeature,\n },\n });\n }\n }\n handleStartDragging(event: StartDraggingEvent, props: ModeProps): void {}\n handleStopDragging(event: StopDraggingEvent, props: ModeProps): void {}\n handleDragging(event: DraggingEvent, props: ModeProps): void {}\n\n handleKeyUp(event: KeyboardEvent, props: ModeProps): void {\n if (event.key === 'Escape') {\n this.resetClickSequence();\n props.onEdit({\n // Because the new drawing feature is dropped, so the data will keep as the same.\n updatedData: props.data,\n editType: 'cancelFeature',\n editContext: {},\n });\n }\n }\n}\n\nexport function getIntermediatePosition(position1: Position, position2: Position): Position {\n const intermediatePosition = [\n (position1[0] + position2[0]) / 2.0,\n (position1[1] + position2[1]) / 2.0,\n ];\n // @ts-ignore\n return intermediatePosition;\n}\n","import {\n Feature,\n FeatureCollection,\n Geometry,\n Polygon,\n MultiLineString,\n MultiPolygon,\n Position,\n PolygonCoordinates,\n} from '../geojson-types';\n\nexport class ImmutableFeatureCollection {\n featureCollection: FeatureCollection;\n\n constructor(featureCollection: FeatureCollection) {\n this.featureCollection = featureCollection;\n }\n\n getObject() {\n return this.featureCollection;\n }\n\n /**\n * Replaces the position deeply nested withing the given feature's geometry.\n * Works with Point, MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon.\n *\n * @param featureIndex The index of the feature to update\n * @param positionIndexes An array containing the indexes of the position to replace\n * @param updatedPosition The updated position to place in the result (i.e. [lng, lat])\n *\n * @returns A new `ImmutableFeatureCollection` with the given position replaced. Does not modify this `ImmutableFeatureCollection`.\n */\n replacePosition(\n featureIndex: number,\n positionIndexes: number[] | null | undefined,\n updatedPosition: Position\n ): ImmutableFeatureCollection {\n const geometry = this.featureCollection.features[featureIndex].geometry;\n\n const isPolygonal = geometry.type === 'Polygon' || geometry.type === 'MultiPolygon';\n const updatedGeometry: any = {\n ...geometry,\n coordinates: immutablyReplacePosition(\n geometry.coordinates,\n positionIndexes,\n updatedPosition,\n isPolygonal\n ),\n };\n\n return this.replaceGeometry(featureIndex, updatedGeometry);\n }\n\n /**\n * Removes a position deeply nested in a GeoJSON geometry coordinates array.\n * Works with MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon.\n *\n * @param featureIndex The index of the feature to update\n * @param positionIndexes An array containing the indexes of the postion to remove\n *\n * @returns A new `ImmutableFeatureCollection` with the given coordinate removed. Does not modify this `ImmutableFeatureCollection`.\n */\n removePosition(\n featureIndex: number,\n positionIndexes: number[] | null | undefined\n ): ImmutableFeatureCollection {\n const geometry = this.featureCollection.features[featureIndex].geometry;\n\n if (geometry.type === 'Point') {\n throw Error(`Can't remove a position from a Point or there'd be nothing left`);\n }\n if (\n geometry.type === 'MultiPoint' && // only 1 point left\n geometry.coordinates.length < 2\n ) {\n throw Error(`Can't remove the last point of a MultiPoint or there'd be nothing left`);\n }\n if (\n geometry.type === 'LineString' && // only 2 positions\n geometry.coordinates.length < 3\n ) {\n throw Error(`Can't remove position. LineString must have at least two positions`);\n }\n if (\n geometry.type === 'Polygon' && // outer ring is a triangle\n geometry.coordinates[0].length < 5 &&\n Array.isArray(positionIndexes) && // trying to remove from outer ring\n positionIndexes[0] === 0\n ) {\n throw Error(`Can't remove position. Polygon's outer ring must have at least four positions`);\n }\n if (\n geometry.type === 'MultiLineString' && // only 1 LineString left\n geometry.coordinates.length === 1 && // only 2 positions\n geometry.coordinates[0].length < 3\n ) {\n throw Error(`Can't remove position. MultiLineString must have at least two positions`);\n }\n if (\n geometry.type === 'MultiPolygon' && // only 1 polygon left\n geometry.coordinates.length === 1 && // outer ring is a triangle\n geometry.coordinates[0][0].length < 5 &&\n Array.isArray(positionIndexes) && // trying to remove from first polygon\n positionIndexes[0] === 0 && // trying to remove from outer ring\n positionIndexes[1] === 0\n ) {\n throw Error(\n `Can't remove position. MultiPolygon's outer ring must have at least four positions`\n );\n }\n\n const isPolygonal = geometry.type === 'Polygon' || geometry.type === 'MultiPolygon';\n const updatedGeometry: any = {\n ...geometry,\n coordinates: immutablyRemovePosition(geometry.coordinates, positionIndexes, isPolygonal),\n };\n\n // Handle cases where incomplete geometries need pruned (e.g. holes that were triangles)\n pruneGeometryIfNecessary(updatedGeometry);\n\n return this.replaceGeometry(featureIndex, updatedGeometry);\n }\n\n /**\n * Adds a position deeply nested in a GeoJSON geometry coordinates array.\n * Works with MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon.\n *\n * @param featureIndex The index of the feature to update\n * @param positionIndexes An array containing the indexes of the position that will proceed the new position\n * @param positionToAdd The new position to place in the result (i.e. [lng, lat])\n *\n * @returns A new `ImmutableFeatureCollection` with the given coordinate removed. Does not modify this `ImmutableFeatureCollection`.\n */\n addPosition(\n featureIndex: number,\n positionIndexes: number[] | null | undefined,\n positionToAdd: Position\n ): ImmutableFeatureCollection {\n const geometry = this.featureCollection.features[featureIndex].geometry;\n\n if (geometry.type === 'Point') {\n throw new Error('Unable to add a position to a Point feature');\n }\n\n const isPolygonal = geometry.type === 'Polygon' || geometry.type === 'MultiPolygon';\n const updatedGeometry: any = {\n ...geometry,\n coordinates: immutablyAddPosition(\n geometry.coordinates,\n positionIndexes,\n positionToAdd,\n isPolygonal\n ),\n };\n\n return this.replaceGeometry(featureIndex, updatedGeometry);\n }\n\n replaceGeometry(featureIndex: number, geometry: Geometry): ImmutableFeatureCollection {\n const updatedFeature: any = {\n ...this.featureCollection.features[featureIndex],\n geometry,\n };\n\n const updatedFeatureCollection = {\n ...this.featureCollection,\n features: [\n ...this.featureCollection.features.slice(0, featureIndex),\n updatedFeature,\n ...this.featureCollection.features.slice(featureIndex + 1),\n ],\n };\n\n return new ImmutableFeatureCollection(updatedFeatureCollection);\n }\n\n addFeature(feature: Feature): ImmutableFeatureCollection {\n return this.addFeatures([feature]);\n }\n\n addFeatures(features: Feature[]): ImmutableFeatureCollection {\n const updatedFeatureCollection = {\n ...this.featureCollection,\n features: [...this.featureCollection.features, ...features],\n };\n\n return new ImmutableFeatureCollection(updatedFeatureCollection);\n }\n\n deleteFeature(featureIndex: number) {\n return this.deleteFeatures([featureIndex]);\n }\n\n deleteFeatures(featureIndexes: number[]) {\n const features = [...this.featureCollection.features];\n featureIndexes.sort();\n for (let i = featureIndexes.length - 1; i >= 0; i--) {\n const featureIndex = featureIndexes[i];\n if (featureIndex >= 0 && featureIndex < features.length) {\n features.splice(featureIndex, 1);\n }\n }\n\n const updatedFeatureCollection = {\n ...this.featureCollection,\n features,\n };\n\n return new ImmutableFeatureCollection(updatedFeatureCollection);\n }\n}\n\nfunction getUpdatedPosition(updatedPosition: Position, previousPosition: Position): Position {\n // This function checks if the updatedPosition is missing elevation\n // and copies it from previousPosition\n if (updatedPosition.length === 2 && previousPosition.length === 3) {\n const elevation = (previousPosition as any)[2];\n return [updatedPosition[0], updatedPosition[1], elevation];\n }\n\n return updatedPosition;\n}\n\nfunction immutablyReplacePosition(\n coordinates: any,\n positionIndexes: number[] | null | undefined,\n updatedPosition: Position,\n isPolygonal: boolean\n): any {\n if (!positionIndexes) {\n return coordinates;\n }\n if (positionIndexes.length === 0) {\n return getUpdatedPosition(updatedPosition, coordinates);\n }\n if (positionIndexes.length === 1) {\n const updated = [\n ...coordinates.slice(0, positionIndexes[0]),\n getUpdatedPosition(updatedPosition, coordinates[positionIndexes[0]]),\n ...coordinates.slice(positionIndexes[0] + 1),\n ];\n\n if (\n isPolygonal &&\n (positionIndexes[0] === 0 || positionIndexes[0] === coordinates.length - 1)\n ) {\n // for polygons, the first point is repeated at the end of the array\n // so, update it on both ends of the array\n updated[0] = getUpdatedPosition(updatedPosition, coordinates[0]);\n updated[coordinates.length - 1] = getUpdatedPosition(updatedPosition, coordinates[0]);\n }\n return updated;\n }\n\n // recursively update inner array\n return [\n ...coordinates.slice(0, positionIndexes[0]),\n immutablyReplacePosition(\n coordinates[positionIndexes[0]],\n positionIndexes.slice(1, positionIndexes.length),\n updatedPosition,\n isPolygonal\n ),\n ...coordinates.slice(positionIndexes[0] + 1),\n ];\n}\n\nfunction immutablyRemovePosition(\n coordinates: any,\n positionIndexes: number[] | null | undefined,\n isPolygonal: boolean\n): any {\n if (!positionIndexes) {\n return coordinates;\n }\n if (positionIndexes.length === 0) {\n throw Error('Must specify the index of the position to remove');\n }\n if (positionIndexes.length === 1) {\n const updated = [\n ...coordinates.slice(0, positionIndexes[0]),\n ...coordinates.slice(positionIndexes[0] + 1),\n ];\n\n if (\n isPolygonal &&\n (positionIndexes[0] === 0 || positionIndexes[0] === coordinates.length - 1)\n ) {\n // for polygons, the first point is repeated at the end of the array\n // so, if the first/last coordinate is to be removed, coordinates[1] will be the new first/last coordinate\n if (positionIndexes[0] === 0) {\n // change the last to be the same as the first\n updated[updated.length - 1] = updated[0];\n } else if (positionIndexes[0] === coordinates.length - 1) {\n // change the first to be the same as the last\n updated[0] = updated[updated.length - 1];\n }\n }\n return updated;\n }\n\n // recursively update inner array\n return [\n ...coordinates.slice(0, positionIndexes[0]),\n immutablyRemovePosition(\n coordinates[positionIndexes[0]],\n positionIndexes.slice(1, positionIndexes.length),\n isPolygonal\n ),\n ...coordinates.slice(positionIndexes[0] + 1),\n ];\n}\n\nfunction immutablyAddPosition(\n coordinates: any,\n positionIndexes: number[] | null | undefined,\n positionToAdd: Position,\n isPolygonal: boolean\n): any {\n if (!positionIndexes) {\n return coordinates;\n }\n if (positionIndexes.length === 0) {\n throw Error('Must specify the index of the position to remove');\n }\n if (positionIndexes.length === 1) {\n const updated = [\n ...coordinates.slice(0, positionIndexes[0]),\n positionToAdd,\n ...coordinates.slice(positionIndexes[0]),\n ];\n return updated;\n }\n\n // recursively update inner array\n return [\n ...coordinates.slice(0, positionIndexes[0]),\n immutablyAddPosition(\n coordinates[positionIndexes[0]],\n positionIndexes.slice(1, positionIndexes.length),\n positionToAdd,\n isPolygonal\n ),\n ...coordinates.slice(positionIndexes[0] + 1),\n ];\n}\n\nfunction pruneGeometryIfNecessary(geometry: Geometry) {\n switch (geometry.type) {\n case 'Polygon':\n prunePolygonIfNecessary(geometry);\n break;\n case 'MultiLineString':\n pruneMultiLineStringIfNecessary(geometry);\n break;\n case 'MultiPolygon':\n pruneMultiPolygonIfNecessary(geometry);\n break;\n default:\n // Not downgradable\n break;\n }\n}\n\nfunction prunePolygonIfNecessary(geometry: Polygon) {\n const polygon = geometry.coordinates;\n\n // If any hole is no longer a polygon, remove the hole entirely\n for (let holeIndex = 1; holeIndex < polygon.length; holeIndex++) {\n if (removeHoleIfNecessary(polygon, holeIndex)) {\n // It was removed, so keep the index the same\n holeIndex--;\n }\n }\n}\n\nfunction pruneMultiLineStringIfNecessary(geometry: MultiLineString) {\n for (let lineStringIndex = 0; lineStringIndex < geometry.coordinates.length; lineStringIndex++) {\n const lineString = geometry.coordinates[lineStringIndex];\n if (lineString.length === 1) {\n // Only a single position left on this LineString, so remove it (can't have Point in MultiLineString)\n geometry.coordinates.splice(lineStringIndex, 1);\n // Keep the index the same\n lineStringIndex--;\n }\n }\n}\n\nfunction pruneMultiPolygonIfNecessary(geometry: MultiPolygon) {\n for (let polygonIndex = 0; polygonIndex < geometry.coordinates.length; polygonIndex++) {\n const polygon = geometry.coordinates[polygonIndex];\n const outerRing = polygon[0];\n\n // If the outer ring is no longer a polygon, remove the whole polygon\n if (outerRing.length <= 3) {\n geometry.coordinates.splice(polygonIndex, 1);\n // It was removed, so keep the index the same\n polygonIndex--;\n }\n\n for (let holeIndex = 1; holeIndex < polygon.length; holeIndex++) {\n if (removeHoleIfNecessary(polygon, holeIndex)) {\n // It was removed, so keep the index the same\n holeIndex--;\n }\n }\n }\n}\n\nfunction removeHoleIfNecessary(polygon: PolygonCoordinates, holeIndex: number) {\n const hole = polygon[holeIndex];\n if (hole.length <= 3) {\n polygon.splice(holeIndex, 1);\n return true;\n }\n return false;\n}\n","import turfBearing from '@turf/bearing';\n// @ts-ignore\nimport turfCenter from '@turf/center';\n// @ts-ignore\nimport memoize from '../memoize';\n\nimport { ClickEvent, PointerMoveEvent, Tooltip, ModeProps, GuideFeatureCollection } from '../types';\nimport { FeatureCollection } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nconst DEFAULT_TOOLTIPS = [];\n\nexport class MeasureAngleMode extends GeoJsonEditMode {\n _getTooltips = memoize(({ modeConfig, vertex, point1, point2 }) => {\n let tooltips = DEFAULT_TOOLTIPS;\n\n if (vertex && point1 && point2) {\n const { formatTooltip, measurementCallback } = modeConfig || {};\n const units = 'deg';\n\n const angle1 = turfBearing(vertex, point1);\n const angle2 = turfBearing(vertex, point2);\n let angle = Math.abs(angle1 - angle2);\n if (angle > 180) {\n angle = 360 - angle;\n }\n\n let text;\n if (formatTooltip) {\n text = formatTooltip(angle);\n } else {\n // By default, round to 2 decimal places and append units\n // @ts-ignore\n text = `${parseFloat(angle).toFixed(2)} ${units}`;\n }\n\n if (measurementCallback) {\n measurementCallback(angle);\n }\n\n const position = turfCenter({\n type: 'FeatureCollection',\n features: [point1, point2].map((p) => ({\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: p,\n },\n })),\n }).geometry.coordinates;\n\n tooltips = [\n {\n position,\n text,\n },\n ];\n }\n\n return tooltips;\n });\n\n handleClick(event: ClickEvent, props: ModeProps): void {\n if (this.getClickSequence().length >= 3) {\n this.resetClickSequence();\n }\n\n this.addClickSequence(event);\n }\n\n // Called when the pointer moved, regardless of whether the pointer is down, up, and whether something was picked\n handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {\n props.onUpdateCursor('cell');\n }\n\n getPoints(props: ModeProps) {\n const clickSequence = this.getClickSequence();\n\n const points = [...clickSequence];\n\n if (clickSequence.length < 3 && props.lastPointerMoveEvent) {\n points.push(props.lastPointerMoveEvent.mapCoords);\n }\n\n return points;\n }\n\n // Return features that can be used as a guide for editing the data\n getGuides(props: ModeProps): GuideFeatureCollection {\n const guides: GuideFeatureCollection = { type: 'FeatureCollection', features: [] };\n const { features } = guides;\n\n const points = this.getPoints(props);\n\n if (points.length > 2) {\n features.push({\n type: 'Feature',\n properties: { guideType: 'tentative' },\n geometry: {\n type: 'LineString',\n coordinates: [points[1], points[0], points[2]],\n },\n });\n } else if (points.length > 1) {\n features.push({\n type: 'Feature',\n properties: { guideType: 'tentative' },\n geometry: {\n type: 'LineString',\n coordinates: [points[1], points[0]],\n },\n });\n }\n\n return guides;\n }\n\n getTooltips(props: ModeProps): Tooltip[] {\n const points = this.getPoints(props);\n\n return this._getTooltips({\n modeConfig: props.modeConfig,\n vertex: points[0],\n point1: points[1],\n point2: points[2],\n });\n }\n}\n","import turfArea from '@turf/area';\nimport turfCentroid from '@turf/centroid';\nimport { ClickEvent, Tooltip, ModeProps } from '../types';\nimport { FeatureCollection } from '../geojson-types';\nimport { DrawPolygonMode } from './draw-polygon-mode';\n\nconst DEFAULT_TOOLTIPS = [];\n\nexport class MeasureAreaMode extends DrawPolygonMode {\n handleClick(event: ClickEvent, props: ModeProps) {\n const propsWithoutEdit = {\n ...props,\n // @ts-ignore\n onEdit: () => {},\n };\n\n super.handleClick(event, propsWithoutEdit);\n }\n\n getTooltips(props: ModeProps): Tooltip[] {\n const tentativeGuide = this.getTentativeGuide(props);\n\n if (tentativeGuide && tentativeGuide.geometry.type === 'Polygon') {\n const { modeConfig } = props;\n const { formatTooltip, measurementCallback } = modeConfig || {};\n const units = 'sq. m';\n\n const centroid = turfCentroid(tentativeGuide);\n const area = turfArea(tentativeGuide);\n\n let text;\n if (formatTooltip) {\n text = formatTooltip(area);\n } else {\n // By default, round to 2 decimal places and append units\n // @ts-ignore\n text = `${parseFloat(area).toFixed(2)} ${units}`;\n }\n\n if (measurementCallback) {\n measurementCallback(area);\n }\n\n return [\n {\n position: centroid.geometry.coordinates,\n text,\n },\n ];\n }\n return DEFAULT_TOOLTIPS;\n }\n}\n","// @ts-ignore\nimport turfDistance from '@turf/distance';\n// @ts-ignore\nimport memoize from '../memoize';\nimport {\n ClickEvent,\n PointerMoveEvent,\n Tooltip,\n ModeProps,\n GuideFeatureCollection,\n EditHandleFeature,\n} from '../types';\nimport { FeatureCollection, Position } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nconst DEFAULT_TOOLTIPS = [];\n\nexport class MeasureDistanceMode extends GeoJsonEditMode {\n startingPoint: Readonly | null | undefined = null;\n endingPoint: Readonly | null | undefined = null;\n endingPointLocked = false;\n\n _setEndingPoint(mapCoords: Position) {\n this.endingPoint = {\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType: 'existing',\n featureIndex: -1,\n positionIndexes: [],\n },\n geometry: {\n type: 'Point',\n coordinates: mapCoords,\n },\n };\n }\n\n _getTooltips = memoize(({ modeConfig, startingPoint, endingPoint }) => {\n let tooltips = DEFAULT_TOOLTIPS;\n\n if (startingPoint && endingPoint) {\n const { formatTooltip, turfOptions, measurementCallback } = modeConfig || {};\n const units = (turfOptions && turfOptions.units) || 'kilometers';\n\n const distance = turfDistance(startingPoint, endingPoint, turfOptions);\n\n let text;\n if (formatTooltip) {\n text = formatTooltip(distance);\n } else {\n // By default, round to 2 decimal places and append units\n text = `${parseFloat(distance).toFixed(2)} ${units}`;\n }\n\n if (measurementCallback) {\n measurementCallback(distance);\n }\n\n tooltips = [\n {\n position: endingPoint.geometry.coordinates,\n text,\n },\n ];\n }\n\n return tooltips;\n });\n\n handleClick(event: ClickEvent, props: ModeProps): void {\n if (!this.startingPoint || this.endingPointLocked) {\n this.startingPoint = {\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType: 'existing',\n featureIndex: -1,\n positionIndexes: [],\n },\n geometry: {\n type: 'Point',\n coordinates: event.mapCoords,\n },\n };\n this.endingPoint = null;\n this.endingPointLocked = false;\n } else if (this.startingPoint) {\n this._setEndingPoint(event.mapCoords);\n this.endingPointLocked = true;\n }\n }\n\n // Called when the pointer moved, regardless of whether the pointer is down, up, and whether something was picked\n handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {\n if (this.startingPoint && !this.endingPointLocked) {\n this._setEndingPoint(event.mapCoords);\n }\n\n props.onUpdateCursor('cell');\n }\n\n // Return features that can be used as a guide for editing the data\n getGuides(props: ModeProps): GuideFeatureCollection {\n const guides: GuideFeatureCollection = { type: 'FeatureCollection', features: [] };\n const { features } = guides;\n\n if (this.startingPoint) {\n features.push(this.startingPoint);\n }\n if (this.endingPoint) {\n features.push(this.endingPoint);\n }\n if (this.startingPoint && this.endingPoint) {\n features.push({\n type: 'Feature',\n properties: { guideType: 'tentative' },\n geometry: {\n type: 'LineString',\n coordinates: [\n this.startingPoint.geometry.coordinates,\n this.endingPoint.geometry.coordinates,\n ],\n },\n });\n }\n return guides;\n }\n\n getTooltips(props: ModeProps): Tooltip[] {\n return this._getTooltips({\n modeConfig: props.modeConfig,\n startingPoint: this.startingPoint,\n endingPoint: this.endingPoint,\n });\n }\n}\n","import nearestPointOnLine from '@turf/nearest-point-on-line';\nimport { point, lineString as toLineString } from '@turf/helpers';\nimport {\n recursivelyTraverseNestedArrays,\n nearestPointOnProjectedLine,\n getEditHandlesForGeometry,\n getPickedEditHandles,\n getPickedEditHandle,\n getPickedExistingEditHandle,\n getPickedIntermediateEditHandle,\n NearestPointType,\n} from '../utils';\nimport { LineString, Point, FeatureCollection, FeatureOf } from '../geojson-types';\nimport {\n ModeProps,\n ClickEvent,\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n Viewport,\n GuideFeatureCollection,\n} from '../types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class ModifyMode extends GeoJsonEditMode {\n getGuides(props: ModeProps): GuideFeatureCollection {\n const handles = [];\n\n const { data, lastPointerMoveEvent } = props;\n const { features } = data;\n const picks = lastPointerMoveEvent && lastPointerMoveEvent.picks;\n const mapCoords = lastPointerMoveEvent && lastPointerMoveEvent.mapCoords;\n\n for (const index of props.selectedIndexes) {\n if (index < features.length) {\n const { geometry } = features[index];\n handles.push(...getEditHandlesForGeometry(geometry, index));\n } else {\n console.warn(`selectedFeatureIndexes out of range ${index}`); // eslint-disable-line no-console,no-undef\n }\n }\n\n // intermediate edit handle\n if (picks && picks.length && mapCoords) {\n const existingEditHandle = getPickedExistingEditHandle(picks);\n // don't show intermediate point when too close to an existing edit handle\n const featureAsPick = !existingEditHandle && picks.find((pick) => !pick.isGuide);\n\n // is the feature in the pick selected\n if (\n featureAsPick &&\n !featureAsPick.object.geometry.type.includes('Point') &&\n props.selectedIndexes.includes(featureAsPick.index)\n ) {\n let intermediatePoint: NearestPointType | null | undefined = null;\n let positionIndexPrefix = [];\n const referencePoint = point(mapCoords);\n // process all lines of the (single) feature\n recursivelyTraverseNestedArrays(\n featureAsPick.object.geometry.coordinates,\n [],\n (lineString, prefix) => {\n const lineStringFeature = toLineString(lineString);\n const candidateIntermediatePoint = this.nearestPointOnLine(\n // @ts-ignore\n lineStringFeature,\n referencePoint,\n props.modeConfig && props.modeConfig.viewport\n );\n if (\n !intermediatePoint ||\n candidateIntermediatePoint.properties.dist < intermediatePoint.properties.dist\n ) {\n intermediatePoint = candidateIntermediatePoint;\n positionIndexPrefix = prefix;\n }\n }\n );\n // tack on the lone intermediate point to the set of handles\n if (intermediatePoint) {\n const {\n geometry: { coordinates: position },\n properties: { index },\n } = intermediatePoint;\n handles.push({\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType: 'intermediate',\n featureIndex: featureAsPick.index,\n positionIndexes: [...positionIndexPrefix, index + 1],\n },\n geometry: {\n type: 'Point',\n coordinates: position,\n },\n });\n }\n }\n }\n\n return {\n type: 'FeatureCollection',\n features: handles,\n };\n }\n\n // turf.js does not support elevation for nearestPointOnLine\n nearestPointOnLine(\n line: FeatureOf,\n inPoint: FeatureOf,\n viewport: Viewport | null | undefined\n ): NearestPointType {\n const { coordinates } = line.geometry;\n if (coordinates.some((coord) => coord.length > 2)) {\n if (viewport) {\n // This line has elevation, we need to use alternative algorithm\n return nearestPointOnProjectedLine(line, inPoint, viewport);\n }\n // eslint-disable-next-line no-console,no-undef\n console.log(\n 'Editing 3D point but modeConfig.viewport not provided. Falling back to 2D logic.'\n );\n }\n\n return nearestPointOnLine(line, inPoint);\n }\n\n handleClick(event: ClickEvent, props: ModeProps) {\n const pickedExistingHandle = getPickedExistingEditHandle(event.picks);\n const pickedIntermediateHandle = getPickedIntermediateEditHandle(event.picks);\n\n if (pickedExistingHandle) {\n const { featureIndex, positionIndexes } = pickedExistingHandle.properties;\n\n let updatedData;\n try {\n updatedData = new ImmutableFeatureCollection(props.data)\n .removePosition(featureIndex, positionIndexes)\n .getObject();\n } catch (ignored) {\n // This happens if user attempts to remove the last point\n }\n\n if (updatedData) {\n props.onEdit({\n updatedData,\n editType: 'removePosition',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes,\n position: pickedExistingHandle.geometry.coordinates,\n },\n });\n }\n } else if (pickedIntermediateHandle) {\n const { featureIndex, positionIndexes } = pickedIntermediateHandle.properties;\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .addPosition(featureIndex, positionIndexes, pickedIntermediateHandle.geometry.coordinates)\n .getObject();\n\n if (updatedData) {\n props.onEdit({\n updatedData,\n editType: 'addPosition',\n editContext: {\n featureIndexes: [featureIndex],\n positionIndexes,\n position: pickedIntermediateHandle.geometry.coordinates,\n },\n });\n }\n }\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps): void {\n const editHandle = getPickedEditHandle(event.pointerDownPicks);\n\n if (editHandle) {\n // Cancel map panning if pointer went down on an edit handle\n event.cancelPan();\n\n const editHandleProperties = editHandle.properties;\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .replacePosition(\n editHandleProperties.featureIndex,\n editHandleProperties.positionIndexes,\n event.mapCoords\n )\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'movePosition',\n editContext: {\n featureIndexes: [editHandleProperties.featureIndex],\n positionIndexes: editHandleProperties.positionIndexes,\n position: event.mapCoords,\n },\n });\n }\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {\n const cursor = this.getCursor(event);\n props.onUpdateCursor(cursor);\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n const selectedFeatureIndexes = props.selectedIndexes;\n\n const editHandle = getPickedIntermediateEditHandle(event.picks);\n if (selectedFeatureIndexes.length && editHandle) {\n const editHandleProperties = editHandle.properties;\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .addPosition(\n editHandleProperties.featureIndex,\n editHandleProperties.positionIndexes,\n event.mapCoords\n )\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'addPosition',\n editContext: {\n featureIndexes: [editHandleProperties.featureIndex],\n positionIndexes: editHandleProperties.positionIndexes,\n position: event.mapCoords,\n },\n });\n }\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n const selectedFeatureIndexes = props.selectedIndexes;\n const editHandle = getPickedEditHandle(event.picks);\n if (selectedFeatureIndexes.length && editHandle) {\n const editHandleProperties = editHandle.properties;\n\n const updatedData = new ImmutableFeatureCollection(props.data)\n .replacePosition(\n editHandleProperties.featureIndex,\n editHandleProperties.positionIndexes,\n event.mapCoords\n )\n .getObject();\n\n props.onEdit({\n updatedData,\n editType: 'finishMovePosition',\n editContext: {\n featureIndexes: [editHandleProperties.featureIndex],\n positionIndexes: editHandleProperties.positionIndexes,\n position: event.mapCoords,\n },\n });\n }\n }\n\n getCursor(event: PointerMoveEvent): string | null | undefined {\n const picks = (event && event.picks) || [];\n\n const handlesPicked = getPickedEditHandles(picks);\n if (handlesPicked.length) {\n return 'cell';\n }\n return null;\n }\n}\n","/* eslint-disable prettier/prettier */\nimport bbox from '@turf/bbox';\nimport turfCentroid from '@turf/centroid';\nimport turfBearing from '@turf/bearing';\nimport bboxPolygon from '@turf/bbox-polygon';\nimport turfDistance from '@turf/distance';\nimport { coordEach } from '@turf/meta';\nimport { getGeom } from '@turf/invariant';\nimport { point, featureCollection, lineString } from '@turf/helpers';\nimport turfTransformRotate from '@turf/transform-rotate';\nimport polygonToLine from '@turf/polygon-to-line';\nimport {\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n ModeProps,\n EditHandleFeature,\n GuideFeatureCollection,\n} from '../types';\nimport { getPickedEditHandle } from '../utils';\nimport { FeatureCollection, Position } from '../geojson-types';\nimport { GeoJsonEditMode, GeoJsonEditAction, getIntermediatePosition } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class RotateMode extends GeoJsonEditMode {\n _selectedEditHandle: EditHandleFeature | null | undefined;\n _geometryBeingRotated: FeatureCollection | null | undefined;\n _isRotating = false;\n\n _isSinglePointGeometrySelected = (geometry: FeatureCollection | null | undefined): boolean => {\n const { features } = geometry || {};\n if (Array.isArray(features) && features.length === 1) {\n // @ts-ignore\n const { type } = getGeom(features[0]);\n return type === 'Point';\n }\n return false;\n };\n\n getIsRotating = () => this._isRotating;\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const selectedGeometry =\n this._geometryBeingRotated || this.getSelectedFeaturesAsFeatureCollection(props);\n\n if (this._isSinglePointGeometrySelected(selectedGeometry)) {\n return { type: 'FeatureCollection', features: [] };\n }\n\n if (this._isRotating) {\n // Display rotate pivot\n return featureCollection([turfCentroid(selectedGeometry)]) as GuideFeatureCollection;\n }\n\n const boundingBox = bboxPolygon(bbox(selectedGeometry));\n\n let previousCoord = null;\n let topEdgeMidpointCoords = null;\n let longestEdgeLength = 0;\n\n coordEach(boundingBox, (coord) => {\n if (previousCoord) {\n // @ts-ignore\n const edgeMidpoint = getIntermediatePosition(coord, previousCoord);\n if (!topEdgeMidpointCoords || edgeMidpoint[1] > topEdgeMidpointCoords[1]) {\n // Get the top edge midpoint of the enveloping box\n topEdgeMidpointCoords = edgeMidpoint;\n }\n // Get the length of the longest edge of the enveloping box\n const edgeDistance = turfDistance(coord, previousCoord);\n longestEdgeLength = Math.max(longestEdgeLength, edgeDistance);\n }\n previousCoord = coord;\n });\n\n // Scale the length of the line between the rotate handler and the enveloping box\n // relative to the length of the longest edge of the enveloping box\n const rotateHandleCoords = topEdgeMidpointCoords && [\n topEdgeMidpointCoords[0],\n topEdgeMidpointCoords[1] + longestEdgeLength / 1000,\n ];\n\n const lineFromEnvelopeToRotateHandle = lineString([topEdgeMidpointCoords, rotateHandleCoords]);\n const rotateHandle = point(rotateHandleCoords, {\n guideType: 'editHandle',\n editHandleType: 'rotate',\n });\n // @ts-ignore\n return featureCollection([\n // @ts-ignore\n polygonToLine(boundingBox),\n // @ts-ignore\n rotateHandle,\n lineFromEnvelopeToRotateHandle,\n ]);\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps) {\n if (!this._isRotating) {\n return;\n }\n\n const rotateAction = this.getRotateAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'rotating',\n props\n );\n if (rotateAction) {\n props.onEdit(rotateAction);\n }\n\n event.cancelPan();\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n if (!this._isRotating) {\n const selectedEditHandle = getPickedEditHandle(event.picks);\n this._selectedEditHandle =\n selectedEditHandle && selectedEditHandle.properties.editHandleType === 'rotate'\n ? selectedEditHandle\n : null;\n }\n\n this.updateCursor(props);\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n if (this._selectedEditHandle) {\n this._isRotating = true;\n this._geometryBeingRotated = this.getSelectedFeaturesAsFeatureCollection(props);\n }\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n if (this._isRotating) {\n // Rotate the geometry\n const rotateAction = this.getRotateAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'rotated',\n props\n );\n\n if (rotateAction) {\n props.onEdit(rotateAction);\n }\n\n this._geometryBeingRotated = null;\n this._selectedEditHandle = null;\n this._isRotating = false;\n }\n }\n\n updateCursor(props: ModeProps) {\n if (this._selectedEditHandle) {\n // TODO: look at doing SVG cursors to get a better \"rotate\" cursor\n props.onUpdateCursor('crosshair');\n } else {\n props.onUpdateCursor(null);\n }\n }\n\n getRotateAction(\n startDragPoint: Position,\n currentPoint: Position,\n editType: string,\n props: ModeProps\n ): GeoJsonEditAction | null | undefined {\n if (!this._geometryBeingRotated) {\n return null;\n }\n\n const centroid = turfCentroid(this._geometryBeingRotated);\n const angle = getRotationAngle(centroid, startDragPoint, currentPoint);\n // @ts-ignore\n const rotatedFeatures: FeatureCollection = turfTransformRotate(\n // @ts-ignore\n this._geometryBeingRotated,\n angle,\n {\n pivot: centroid,\n }\n );\n\n let updatedData = new ImmutableFeatureCollection(props.data);\n\n const selectedIndexes = props.selectedIndexes;\n for (let i = 0; i < selectedIndexes.length; i++) {\n const selectedIndex = selectedIndexes[i];\n const movedFeature = rotatedFeatures.features[i];\n updatedData = updatedData.replaceGeometry(selectedIndex, movedFeature.geometry);\n }\n\n return {\n updatedData: updatedData.getObject(),\n editType,\n editContext: {\n featureIndexes: selectedIndexes,\n },\n };\n }\n}\n\nfunction getRotationAngle(centroid: Position, startDragPoint: Position, currentPoint: Position) {\n const bearing1 = turfBearing(centroid, startDragPoint);\n const bearing2 = turfBearing(centroid, currentPoint);\n return bearing2 - bearing1;\n}\n","/* eslint-disable prettier/prettier */\nimport bbox from '@turf/bbox';\nimport turfCentroid from '@turf/centroid';\nimport turfBearing from '@turf/bearing';\nimport bboxPolygon from '@turf/bbox-polygon';\nimport { point, featureCollection } from '@turf/helpers';\nimport polygonToLine from '@turf/polygon-to-line';\nimport { coordEach } from '@turf/meta';\nimport turfDistance from '@turf/distance';\nimport turfTransformScale from '@turf/transform-scale';\nimport { getCoord, getGeom } from '@turf/invariant';\nimport { FeatureCollection, Position } from '../geojson-types';\nimport {\n ModeProps,\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n EditHandleFeature,\n GuideFeatureCollection,\n} from '../types';\nimport { getPickedEditHandle } from '../utils';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class ScaleMode extends GeoJsonEditMode {\n _geometryBeingScaled: FeatureCollection | null | undefined;\n _selectedEditHandle: EditHandleFeature | null | undefined;\n _cornerGuidePoints: Array;\n _cursor: string | null | undefined;\n _isScaling = false;\n\n _isSinglePointGeometrySelected = (geometry: FeatureCollection | null | undefined): boolean => {\n const { features } = geometry || {};\n if (Array.isArray(features) && features.length === 1) {\n // @ts-ignore\n const { type } = getGeom(features[0]);\n return type === 'Point';\n }\n return false;\n };\n\n _getOppositeScaleHandle = (selectedHandle: EditHandleFeature) => {\n const selectedHandleIndex =\n selectedHandle &&\n selectedHandle.properties &&\n Array.isArray(selectedHandle.properties.positionIndexes) &&\n selectedHandle.properties.positionIndexes[0];\n\n if (typeof selectedHandleIndex !== 'number') {\n return null;\n }\n const guidePointCount = this._cornerGuidePoints.length;\n const oppositeIndex = (selectedHandleIndex + guidePointCount / 2) % guidePointCount;\n return this._cornerGuidePoints.find((p) => {\n if (!Array.isArray(p.properties.positionIndexes)) {\n return false;\n }\n return p.properties.positionIndexes[0] === oppositeIndex;\n });\n };\n\n _getUpdatedData = (props: ModeProps, editedData: FeatureCollection) => {\n let updatedData = new ImmutableFeatureCollection(props.data);\n const selectedIndexes = props.selectedIndexes;\n for (let i = 0; i < selectedIndexes.length; i++) {\n const selectedIndex = selectedIndexes[i];\n const movedFeature = editedData.features[i];\n updatedData = updatedData.replaceGeometry(selectedIndex, movedFeature.geometry);\n }\n return updatedData.getObject();\n };\n\n isEditHandleSelected = (): boolean => Boolean(this._selectedEditHandle);\n\n getScaleAction = (\n startDragPoint: Position,\n currentPoint: Position,\n editType: string,\n props: ModeProps\n ) => {\n if (!this._selectedEditHandle) {\n return null;\n }\n\n const oppositeHandle = this._getOppositeScaleHandle(this._selectedEditHandle);\n const origin = getCoord(oppositeHandle);\n // @ts-ignore\n const scaleFactor = getScaleFactor(origin, startDragPoint, currentPoint);\n // @ts-ignore\n const scaledFeatures: FeatureCollection = turfTransformScale(\n // @ts-ignore\n this._geometryBeingScaled,\n scaleFactor,\n { origin }\n );\n\n return {\n updatedData: this._getUpdatedData(props, scaledFeatures),\n editType,\n editContext: {\n featureIndexes: props.selectedIndexes,\n },\n };\n };\n\n updateCursor = (props: ModeProps) => {\n if (this._selectedEditHandle) {\n if (this._cursor) {\n props.onUpdateCursor(this._cursor);\n }\n const cursorGeometry = this.getSelectedFeaturesAsFeatureCollection(props);\n\n // Get resize cursor direction from the hovered scale editHandle (e.g. nesw or nwse)\n const centroid = turfCentroid(cursorGeometry);\n const bearing = turfBearing(centroid, this._selectedEditHandle);\n const positiveBearing = bearing < 0 ? bearing + 180 : bearing;\n if (\n (positiveBearing >= 0 && positiveBearing <= 90) ||\n (positiveBearing >= 180 && positiveBearing <= 270)\n ) {\n this._cursor = 'nesw-resize';\n props.onUpdateCursor('nesw-resize');\n } else {\n this._cursor = 'nwse-resize';\n props.onUpdateCursor('nwse-resize');\n }\n } else {\n props.onUpdateCursor(null);\n this._cursor = null;\n }\n };\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n if (!this._isScaling) {\n const selectedEditHandle = getPickedEditHandle(event.picks);\n this._selectedEditHandle =\n selectedEditHandle && selectedEditHandle.properties.editHandleType === 'scale'\n ? selectedEditHandle\n : null;\n\n if (selectedEditHandle) {\n this.updateCursor(props);\n }\n }\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n if (this._selectedEditHandle) {\n this._isScaling = true;\n this._geometryBeingScaled = this.getSelectedFeaturesAsFeatureCollection(props);\n }\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps) {\n if (!this._isScaling) {\n return;\n }\n\n props.onUpdateCursor(this._cursor);\n\n const scaleAction = this.getScaleAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'scaling',\n props\n );\n if (scaleAction) {\n props.onEdit(scaleAction);\n }\n\n event.cancelPan();\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n if (this._isScaling) {\n // Scale the geometry\n const scaleAction = this.getScaleAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'scaled',\n props\n );\n if (scaleAction) {\n props.onEdit(scaleAction);\n }\n\n props.onUpdateCursor(null);\n\n this._geometryBeingScaled = null;\n this._selectedEditHandle = null;\n this._cursor = null;\n this._isScaling = false;\n }\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n this._cornerGuidePoints = [];\n const selectedGeometry = this.getSelectedFeaturesAsFeatureCollection(props);\n\n // Add buffer to the enveloping box if a single Point feature is selected\n if (this._isSinglePointGeometrySelected(selectedGeometry)) {\n return { type: 'FeatureCollection', features: [] };\n }\n\n const boundingBox = bboxPolygon(bbox(selectedGeometry));\n boundingBox.properties.mode = 'scale';\n const cornerGuidePoints = [];\n\n coordEach(boundingBox, (coord, coordIndex) => {\n if (coordIndex < 4) {\n // Get corner midpoint guides from the enveloping box\n const cornerPoint = point(coord, {\n guideType: 'editHandle',\n editHandleType: 'scale',\n positionIndexes: [coordIndex],\n });\n cornerGuidePoints.push(cornerPoint);\n }\n });\n\n this._cornerGuidePoints = cornerGuidePoints;\n // @ts-ignore\n return featureCollection([polygonToLine(boundingBox), ...this._cornerGuidePoints]);\n }\n}\n\nfunction getScaleFactor(centroid: Position, startDragPoint: Position, currentPoint: Position) {\n const startDistance = turfDistance(centroid, startDragPoint);\n const endDistance = turfDistance(centroid, currentPoint);\n return endDistance / startDistance;\n}\n","import { Position, Feature, FeatureCollection } from '../geojson-types';\nimport {\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n ModeProps,\n Pick,\n GuideFeatureCollection,\n EditHandleFeature,\n} from '../types';\nimport {\n getPickedSnapSourceEditHandle,\n getPickedEditHandles,\n getEditHandlesForGeometry,\n} from '../utils';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\ntype MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent | DraggingEvent;\n\nexport class SnappableMode extends GeoJsonEditMode {\n _handler: GeoJsonEditMode;\n\n constructor(handler: GeoJsonEditMode) {\n super();\n this._handler = handler;\n }\n\n _getSnappedMouseEvent(\n event: T,\n snapSource: EditHandleFeature,\n snapTarget: EditHandleFeature\n ): T {\n return Object.assign(event, {\n mapCoords: snapTarget.geometry.coordinates,\n pointerDownMapCoords: snapSource && snapSource.geometry.coordinates,\n });\n }\n\n _getPickedSnapTarget(picks: Pick[]): EditHandleFeature | null | undefined {\n return getPickedEditHandles(picks).find(\n (handle) => handle.properties.editHandleType === 'snap-target'\n );\n }\n\n _getPickedSnapSource(\n pointerDownPicks: Pick[] | null | undefined\n ): EditHandleFeature | null | undefined {\n return getPickedSnapSourceEditHandle(pointerDownPicks);\n }\n\n _getUpdatedSnapSourceHandle(\n snapSourceHandle: EditHandleFeature,\n data: FeatureCollection\n ): EditHandleFeature {\n const { featureIndex, positionIndexes } = snapSourceHandle.properties;\n if (!Array.isArray(positionIndexes)) {\n return snapSourceHandle;\n }\n const snapSourceFeature = data.features[featureIndex];\n\n // $FlowFixMe\n const snapSourceCoordinates: Position = positionIndexes.reduce(\n (a: any[], b: number) => a[b],\n snapSourceFeature.geometry.coordinates\n );\n\n return {\n ...snapSourceHandle,\n geometry: {\n type: 'Point',\n coordinates: snapSourceCoordinates,\n },\n };\n }\n\n // If additionalSnapTargets is present in modeConfig and is populated, this\n // method will return those features along with the features\n // that live in the current layer. Otherwise, this method will simply return the\n // features from the current layer\n _getSnapTargets(props: ModeProps): Feature[] {\n let { additionalSnapTargets } = props.modeConfig || {};\n additionalSnapTargets = additionalSnapTargets || [];\n\n const features = [...props.data.features, ...additionalSnapTargets];\n return features;\n }\n\n _getSnapTargetHandles(props: ModeProps): EditHandleFeature[] {\n const handles = [];\n const features = this._getSnapTargets(props);\n\n for (let i = 0; i < features.length; i++) {\n // Filter out the currently selected feature(s)\n const isCurrentIndexFeatureNotSelected = !props.selectedIndexes.includes(i);\n\n if (isCurrentIndexFeatureNotSelected) {\n const { geometry } = features[i];\n handles.push(...getEditHandlesForGeometry(geometry, i, 'snap-target'));\n }\n }\n return handles;\n }\n\n // If no snap handle has been picked, only display the edit handles of the\n // selected feature. If a snap handle has been picked, display said snap handle\n // along with all snappable points on all non-selected features.\n getGuides(props: ModeProps): GuideFeatureCollection {\n const { modeConfig, lastPointerMoveEvent } = props;\n const { enableSnapping } = modeConfig || {};\n\n const guides: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [...this._handler.getGuides(props).features],\n };\n\n if (!enableSnapping) {\n return guides;\n }\n\n const snapSourceHandle: EditHandleFeature | null | undefined =\n lastPointerMoveEvent && this._getPickedSnapSource(lastPointerMoveEvent.pointerDownPicks);\n\n // They started dragging a handle\n // So render the picked handle (in its updated location) and all possible snap targets\n if (snapSourceHandle) {\n guides.features.push(\n ...this._getSnapTargetHandles(props),\n this._getUpdatedSnapSourceHandle(snapSourceHandle, props.data)\n );\n\n return guides;\n }\n\n // Render the possible snap source handles\n const { features } = props.data;\n for (const index of props.selectedIndexes) {\n if (index < features.length) {\n const { geometry } = features[index];\n guides.features.push(...getEditHandlesForGeometry(geometry, index, 'snap-source'));\n }\n }\n\n return guides;\n }\n\n _getSnapAwareEvent(\n event: T,\n props: ModeProps\n ): T {\n const snapSource = this._getPickedSnapSource(props.lastPointerMoveEvent.pointerDownPicks);\n const snapTarget = this._getPickedSnapTarget(event.picks);\n\n return snapSource && snapTarget\n ? this._getSnappedMouseEvent(event, snapSource, snapTarget)\n : event;\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n this._handler.handleStartDragging(event, props);\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n this._handler.handleStopDragging(this._getSnapAwareEvent(event, props), props);\n }\n\n handleDragging(event: DraggingEvent, props: ModeProps) {\n this._handler.handleDragging(this._getSnapAwareEvent(event, props), props);\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n this._handler.handlePointerMove(this._getSnapAwareEvent(event, props), props);\n }\n}\n","import booleanPointInPolygon from '@turf/boolean-point-in-polygon';\nimport turfDifference from '@turf/difference';\nimport turfBuffer from '@turf/buffer';\nimport lineIntersect from '@turf/line-intersect';\nimport { lineString } from '@turf/helpers';\nimport turfBearing from '@turf/bearing';\nimport turfDistance from '@turf/distance';\nimport turfDestination from '@turf/destination';\nimport turfPolygonToLine from '@turf/polygon-to-line';\nimport nearestPointOnLine from '@turf/nearest-point-on-line';\nimport { generatePointsParallelToLinePoints } from '../utils';\nimport { FeatureCollection } from '../geojson-types';\nimport {\n ClickEvent,\n PointerMoveEvent,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { GeoJsonEditMode, GeoJsonEditAction } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class SplitPolygonMode extends GeoJsonEditMode {\n calculateMapCoords(clickSequence: any, mapCoords: any, props: ModeProps) {\n const modeConfig = props.modeConfig;\n if (!modeConfig || !modeConfig.lock90Degree || !clickSequence.length) {\n return mapCoords;\n }\n if (clickSequence.length === 1) {\n // if first point is clicked, then find closest polygon point and build ~90deg vector\n const firstPoint = clickSequence[0];\n const selectedGeometry = this.getSelectedGeometry(props);\n // @ts-ignore\n const feature = turfPolygonToLine(selectedGeometry);\n\n const lines = feature.type === 'FeatureCollection' ? feature.features : [feature];\n let minDistance = Number.MAX_SAFE_INTEGER;\n let closestPoint = null;\n // If Multipolygon, then we should find nearest polygon line and stick split to it.\n lines.forEach((line) => {\n const snapPoint = nearestPointOnLine(line, firstPoint);\n const distanceFromOrigin = turfDistance(snapPoint, firstPoint);\n if (minDistance > distanceFromOrigin) {\n minDistance = distanceFromOrigin;\n closestPoint = snapPoint;\n }\n });\n\n if (closestPoint) {\n // closest point is used as 90degree entry to the polygon\n const lastBearing = turfBearing(firstPoint, closestPoint);\n const currentDistance = turfDistance(firstPoint, mapCoords, { units: 'meters' });\n return turfDestination(firstPoint, currentDistance, lastBearing, {\n units: 'meters',\n }).geometry.coordinates;\n }\n return mapCoords;\n }\n // Allow only 90 degree turns\n const lastPoint = clickSequence[clickSequence.length - 1];\n const [approximatePoint] = generatePointsParallelToLinePoints(\n clickSequence[clickSequence.length - 2],\n lastPoint,\n mapCoords\n );\n // align point with current ground\n const nearestPt = nearestPointOnLine(lineString([lastPoint, approximatePoint]), mapCoords)\n .geometry.coordinates;\n return nearestPt;\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const clickSequence = this.getClickSequence();\n\n const guides: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n };\n\n if (clickSequence.length === 0 || !props.lastPointerMoveEvent) {\n // nothing to do yet\n return guides;\n }\n\n const { mapCoords } = props.lastPointerMoveEvent;\n\n guides.features.push({\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [...clickSequence, this.calculateMapCoords(clickSequence, mapCoords, props)],\n },\n });\n\n return guides;\n }\n\n handleClick(event: ClickEvent, props: ModeProps) {\n const tentativeFeature = this.getTentativeGuide(props);\n\n const selectedGeometry = this.getSelectedGeometry(props);\n\n if (!selectedGeometry) {\n // eslint-disable-next-line no-console,no-undef\n console.warn('A polygon must be selected for splitting');\n return;\n }\n\n const clickSequence = this.getClickSequence();\n if (tentativeFeature && tentativeFeature.geometry.type === 'LineString') {\n clickSequence.push(\n tentativeFeature.geometry.coordinates[tentativeFeature.geometry.coordinates.length - 1]\n );\n } else {\n this.addClickSequence(event);\n }\n\n const pt = {\n type: 'Point',\n coordinates: clickSequence[clickSequence.length - 1],\n };\n // @ts-ignore\n const isPointInPolygon = booleanPointInPolygon(pt, selectedGeometry);\n if (clickSequence.length > 1 && tentativeFeature && !isPointInPolygon) {\n this.resetClickSequence();\n // @ts-ignore\n const isLineInterectingWithPolygon = lineIntersect(tentativeFeature, selectedGeometry);\n if (isLineInterectingWithPolygon.features.length === 0) {\n return;\n }\n\n const editAction = this.splitPolygon(tentativeFeature, props);\n\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n }\n\n splitPolygon(tentativeFeature: TentativeFeature, props: ModeProps) {\n const selectedGeometry = this.getSelectedGeometry(props);\n const featureIndex = props.selectedIndexes[0];\n const modeConfig = props.modeConfig || {};\n\n // Default gap in between the polygon\n let { gap = 0.1, units = 'centimeters' } = modeConfig;\n if (gap === 0) {\n gap = 0.1;\n units = 'centimeters';\n }\n\n const buffer = turfBuffer(tentativeFeature, gap, { units });\n // @ts-ignore\n const updatedGeometry = turfDifference(selectedGeometry, buffer);\n if (!updatedGeometry) {\n // eslint-disable-next-line no-console,no-undef\n console.warn('Canceling edit. Split Polygon erased');\n return null;\n }\n\n const { type, coordinates } = updatedGeometry.geometry;\n let updatedCoordinates = [];\n if (type === 'Polygon') {\n // Update the coordinates as per Multipolygon\n // @ts-ignore\n updatedCoordinates = coordinates.map((c) => [c]);\n } else {\n // Handle Case when Multipolygon has holes\n // @ts-ignore\n updatedCoordinates = coordinates.reduce((agg, prev) => {\n prev.forEach((p) => {\n agg.push([p]);\n });\n return agg;\n }, []);\n }\n\n // Update the type to Mulitpolygon\n const updatedData = new ImmutableFeatureCollection(props.data).replaceGeometry(featureIndex, {\n type: 'MultiPolygon',\n coordinates: updatedCoordinates,\n });\n\n const editAction: GeoJsonEditAction = {\n updatedData: updatedData.getObject(),\n editType: 'split',\n editContext: {\n featureIndexes: [featureIndex],\n },\n };\n\n return editAction;\n }\n}\n","import {\n ClickEvent,\n PointerMoveEvent,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { Position, Polygon, FeatureOf, FeatureCollection } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class ThreeClickPolygonMode extends GeoJsonEditMode {\n handleClick(event: ClickEvent, props: ModeProps) {\n this.addClickSequence(event);\n const clickSequence = this.getClickSequence();\n const tentativeFeature = this.getTentativeGuide(props);\n\n if (\n clickSequence.length > 2 &&\n tentativeFeature &&\n tentativeFeature.geometry.type === 'Polygon'\n ) {\n const editAction = this.getAddFeatureOrBooleanPolygonAction(tentativeFeature.geometry, props);\n this.resetClickSequence();\n\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const { lastPointerMoveEvent, modeConfig } = props;\n const clickSequence = this.getClickSequence();\n\n const guides: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n };\n\n if (clickSequence.length === 0) {\n // nothing to do yet\n return guides;\n }\n\n const hoveredCoord = lastPointerMoveEvent.mapCoords;\n\n if (clickSequence.length === 1) {\n guides.features.push({\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: {\n type: 'LineString',\n coordinates: [clickSequence[0], hoveredCoord],\n },\n });\n } else {\n const polygon = this.getThreeClickPolygon(\n clickSequence[0],\n clickSequence[1],\n hoveredCoord,\n modeConfig\n );\n if (polygon) {\n guides.features.push({\n type: 'Feature',\n properties: {\n guideType: 'tentative',\n },\n geometry: polygon.geometry,\n });\n }\n }\n\n return guides;\n }\n\n getThreeClickPolygon(\n coord1: Position,\n coord2: Position,\n coord3: Position,\n modeConfig: any\n ): FeatureOf | null | undefined {\n return null;\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n super.handlePointerMove(event, props);\n }\n\n createTentativeFeature(props: ModeProps): TentativeFeature {\n const { lastPointerMoveEvent } = props;\n const clickSequence = this.getClickSequence();\n\n const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];\n\n let tentativeFeature;\n if (clickSequence.length === 2) {\n tentativeFeature = this.getThreeClickPolygon(\n clickSequence[0],\n clickSequence[1],\n lastCoords[0],\n props.modeConfig\n );\n }\n\n return tentativeFeature;\n }\n}\n","import { featureCollection } from '@turf/helpers';\nimport { PointerMoveEvent, ModeProps, StartDraggingEvent } from '../types';\nimport { FeatureCollection } from '../geojson-types';\nimport { TranslateMode } from './translate-mode';\nimport { ScaleMode } from './scale-mode';\nimport { RotateMode } from './rotate-mode';\n\nimport { CompositeMode } from './composite-mode';\n\nexport class TransformMode extends CompositeMode {\n constructor() {\n super([new TranslateMode(), new ScaleMode(), new RotateMode()]);\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n let updatedCursor = null;\n super.handlePointerMove(event, {\n ...props,\n onUpdateCursor: (cursor) => {\n updatedCursor = cursor || updatedCursor;\n },\n });\n props.onUpdateCursor(updatedCursor);\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n let scaleMode = null;\n let translateMode = null;\n const filteredModes = [];\n\n // If the user selects a scaling edit handle that overlaps with part of the selected feature,\n // it is possible for both scale and translate actions to be triggered. This logic prevents\n // this simultaneous action trigger from happening by putting a higher priority on scaling\n // since the user needs to be more precise to hover over a scaling edit handle.\n this._modes.forEach((mode) => {\n if (mode instanceof TranslateMode) {\n translateMode = mode;\n } else {\n if (mode instanceof ScaleMode) {\n scaleMode = mode;\n }\n filteredModes.push(mode);\n }\n });\n\n if (scaleMode instanceof ScaleMode && !scaleMode.isEditHandleSelected()) {\n filteredModes.push(translateMode);\n }\n\n filteredModes.filter(Boolean).forEach((mode) => mode.handleStartDragging(event, props));\n }\n\n getGuides(props: ModeProps) {\n let compositeGuides = super.getGuides(props);\n const rotateMode = (this._modes || []).find((mode) => mode instanceof RotateMode);\n\n if (rotateMode instanceof RotateMode) {\n const nonEnvelopeGuides = compositeGuides.features.filter((guide) => {\n const { editHandleType, mode } = (guide.properties as any) || {};\n // Both scale and rotate modes have the same enveloping box as a guide - only need one\n const guidesToFilterOut = [mode];\n // Do not render scaling edit handles if rotating\n if (rotateMode.getIsRotating()) {\n guidesToFilterOut.push(editHandleType);\n }\n return !guidesToFilterOut.includes('scale');\n });\n // @ts-ignore\n compositeGuides = featureCollection(nonEnvelopeGuides);\n }\n return compositeGuides;\n }\n}\n","import turfBearing from '@turf/bearing';\nimport turfDistance from '@turf/distance';\nimport turfTransformTranslate from '@turf/transform-translate';\nimport { point } from '@turf/helpers';\nimport { FeatureCollection, Position } from '../geojson-types';\nimport {\n PointerMoveEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n ModeProps,\n} from '../types';\nimport { GeoJsonEditMode, GeoJsonEditAction } from './geojson-edit-mode';\nimport { ImmutableFeatureCollection } from './immutable-feature-collection';\n\nexport class TranslateMode extends GeoJsonEditMode {\n _geometryBeforeTranslate: FeatureCollection | null | undefined;\n _isTranslatable: boolean;\n\n handleDragging(event: DraggingEvent, props: ModeProps) {\n if (!this._isTranslatable) {\n // Nothing to do\n return;\n }\n\n if (this._geometryBeforeTranslate) {\n // Translate the geometry\n const editAction = this.getTranslateAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'translating',\n props\n );\n\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n\n // cancel map panning\n event.cancelPan();\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n this._isTranslatable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props);\n\n this.updateCursor(props);\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps) {\n if (!this._isTranslatable) {\n return;\n }\n\n this._geometryBeforeTranslate = this.getSelectedFeaturesAsFeatureCollection(props);\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps) {\n if (this._geometryBeforeTranslate) {\n // Translate the geometry\n const editAction = this.getTranslateAction(\n event.pointerDownMapCoords,\n event.mapCoords,\n 'translated',\n props\n );\n\n if (editAction) {\n props.onEdit(editAction);\n }\n\n this._geometryBeforeTranslate = null;\n }\n }\n\n updateCursor(props: ModeProps) {\n if (this._isTranslatable) {\n props.onUpdateCursor('move');\n } else {\n props.onUpdateCursor(null);\n }\n }\n\n getTranslateAction(\n startDragPoint: Position,\n currentPoint: Position,\n editType: string,\n props: ModeProps\n ): GeoJsonEditAction | null | undefined {\n if (!this._geometryBeforeTranslate) {\n return null;\n }\n const p1 = point(startDragPoint);\n const p2 = point(currentPoint);\n\n const distanceMoved = turfDistance(p1, p2);\n const direction = turfBearing(p1, p2);\n\n const movedFeatures = turfTransformTranslate(\n // @ts-ignore\n this._geometryBeforeTranslate,\n distanceMoved,\n direction\n );\n\n let updatedData = new ImmutableFeatureCollection(props.data);\n\n const selectedIndexes = props.selectedIndexes;\n for (let i = 0; i < selectedIndexes.length; i++) {\n const selectedIndex = selectedIndexes[i];\n const movedFeature = movedFeatures.features[i];\n updatedData = updatedData.replaceGeometry(selectedIndex, movedFeature.geometry);\n }\n\n return {\n updatedData: updatedData.getObject(),\n editType,\n editContext: {\n featureIndexes: selectedIndexes,\n },\n };\n }\n}\n","import {\n ClickEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n PointerMoveEvent,\n ModeProps,\n GuideFeatureCollection,\n TentativeFeature,\n} from '../types';\nimport { Polygon, FeatureCollection, FeatureOf, Position } from '../geojson-types';\nimport { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class TwoClickPolygonMode extends GeoJsonEditMode {\n handleClick(event: ClickEvent, props: ModeProps) {\n if (props.modeConfig && props.modeConfig.dragToDraw) {\n // handled in drag handlers\n return;\n }\n\n this.addClickSequence(event);\n\n this.checkAndFinishPolygon(props);\n }\n\n handleStartDragging(event: StartDraggingEvent, props: ModeProps): void {\n if (!props.modeConfig || !props.modeConfig.dragToDraw) {\n // handled in click handlers\n return;\n }\n\n this.addClickSequence(event);\n event.cancelPan();\n }\n\n handleStopDragging(event: StopDraggingEvent, props: ModeProps): void {\n if (!props.modeConfig || !props.modeConfig.dragToDraw) {\n // handled in click handlers\n return;\n }\n this.addClickSequence(event);\n\n this.checkAndFinishPolygon(props);\n }\n\n checkAndFinishPolygon(props: ModeProps) {\n const clickSequence = this.getClickSequence();\n const tentativeFeature = this.getTentativeGuide(props);\n\n if (\n clickSequence.length > 1 &&\n tentativeFeature &&\n tentativeFeature.geometry.type === 'Polygon'\n ) {\n const feature: FeatureOf = {\n type: 'Feature',\n properties: {\n shape: tentativeFeature.properties.shape,\n },\n geometry: {\n type: 'Polygon',\n coordinates: tentativeFeature.geometry.coordinates,\n },\n };\n const editAction = this.getAddFeatureOrBooleanPolygonAction(feature, props);\n\n this.resetClickSequence();\n\n if (editAction) {\n props.onEdit(editAction);\n }\n }\n }\n\n getGuides(props: ModeProps): GuideFeatureCollection {\n const { lastPointerMoveEvent, modeConfig } = props;\n const clickSequence = this.getClickSequence();\n\n const guides: GuideFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n };\n\n if (clickSequence.length === 0) {\n // nothing to do yet\n return guides;\n }\n\n const corner1 = clickSequence[0];\n const corner2 = lastPointerMoveEvent.mapCoords;\n\n const polygon = this.getTwoClickPolygon(corner1, corner2, modeConfig);\n if (polygon) {\n guides.features.push({\n type: 'Feature',\n properties: {\n shape: polygon.properties && polygon.properties.shape,\n guideType: 'tentative',\n },\n geometry: polygon.geometry,\n });\n }\n\n return guides;\n }\n\n getTwoClickPolygon(\n coord1: Position,\n coord2: Position,\n modeConfig: any\n ): FeatureOf | null | undefined {\n return null;\n }\n\n handlePointerMove(event: PointerMoveEvent, props: ModeProps) {\n props.onUpdateCursor('cell');\n super.handlePointerMove(event, props);\n }\n\n createTentativeFeature(props: ModeProps): TentativeFeature {\n const { lastPointerMoveEvent } = props;\n const clickSequence = this.getClickSequence();\n\n const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];\n\n let tentativeFeature;\n if (clickSequence.length === 1) {\n tentativeFeature = this.getTwoClickPolygon(clickSequence[0], lastCoords[0], props.modeConfig);\n }\n\n return tentativeFeature;\n }\n}\n","import { GeoJsonEditMode } from './geojson-edit-mode';\n\nexport class ViewMode extends GeoJsonEditMode {}\n","// port from @deck.gl/core\nfunction isEqual(a: any, b: any) {\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\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 {function} compute - the function to be memoized\n */\nexport default function memoize(compute: Function) {\n let cachedArgs = {};\n let cachedResult;\n\n return (args: any) => {\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","import destination from '@turf/destination';\nimport bearing from '@turf/bearing';\nimport pointToLineDistance from '@turf/point-to-line-distance';\nimport { point } from '@turf/helpers';\nimport WebMercatorViewport from 'viewport-mercator-project';\nimport { Viewport, Pick, EditHandleFeature, EditHandleType } from './types';\nimport {\n Geometry,\n Position,\n Point,\n LineString,\n FeatureOf,\n FeatureWithProps,\n} from './geojson-types';\n\nexport type NearestPointType = FeatureWithProps;\n\nexport function toDeckColor(\n color?: [number, number, number, number] | number,\n defaultColor: [number, number, number, number] = [255, 0, 0, 255]\n): [number, number, number, number] {\n if (!Array.isArray(color)) {\n return defaultColor;\n }\n return [color[0] * 255, color[1] * 255, color[2] * 255, color[3] * 255];\n}\n\n//\n// a GeoJSON helper function that calls the provided function with\n// an argument that is the most deeply-nested array having elements\n// that are arrays of primitives as an argument, e.g.\n//\n// {\n// \"type\": \"MultiPolygon\",\n// \"coordinates\": [\n// [\n// [[30, 20], [45, 40], [10, 40], [30, 20]]\n// ],\n// [\n// [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]\n// ]\n// ]\n// }\n//\n// the function would be called on:\n//\n// [[30, 20], [45, 40], [10, 40], [30, 20]]\n//\n// and\n//\n// [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]\n//\nexport function recursivelyTraverseNestedArrays(\n array: Array,\n prefix: Array,\n fn: Function\n) {\n if (!Array.isArray(array[0])) {\n return true;\n }\n for (let i = 0; i < array.length; i++) {\n if (recursivelyTraverseNestedArrays(array[i], [...prefix, i], fn)) {\n fn(array, prefix);\n break;\n }\n }\n return false;\n}\n\nexport function generatePointsParallelToLinePoints(\n p1: Position,\n p2: Position,\n mapCoords: Position\n): Position[] {\n const lineString: LineString = {\n type: 'LineString',\n coordinates: [p1, p2],\n };\n const pt = point(mapCoords);\n const ddistance = pointToLineDistance(pt, lineString);\n const lineBearing = bearing(p1, p2);\n\n // Check if current point is to the left or right of line\n // Line from A=(x1,y1) to B=(x2,y2) a point P=(x,y)\n // then (x−x1)(y2−y1)−(y−y1)(x2−x1)\n const isPointToLeftOfLine =\n (mapCoords[0] - p1[0]) * (p2[1] - p1[1]) - (mapCoords[1] - p1[1]) * (p2[0] - p1[0]);\n\n // Bearing to draw perpendicular to the line string\n const orthogonalBearing = isPointToLeftOfLine < 0 ? lineBearing - 90 : lineBearing - 270;\n\n // Get coordinates for the point p3 and p4 which are perpendicular to the lineString\n // Add the distance as the current position moves away from the lineString\n const p3 = destination(p2, ddistance, orthogonalBearing);\n const p4 = destination(p1, ddistance, orthogonalBearing);\n\n return [p3.geometry.coordinates, p4.geometry.coordinates] as Position[];\n}\n\nexport function distance2d(x1: number, y1: number, x2: number, y2: number): number {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport function mix(a: number, b: number, ratio: number): number {\n return b * ratio + a * (1 - ratio);\n}\n\nexport function nearestPointOnProjectedLine(\n line: FeatureOf,\n inPoint: FeatureOf,\n viewport: Viewport\n): NearestPointType {\n const wmViewport = new WebMercatorViewport(viewport);\n // Project the line to viewport, then find the nearest point\n const coordinates: Array> = line.geometry.coordinates as any;\n const projectedCoords = coordinates.map(([x, y, z = 0]) => wmViewport.project([x, y, z]));\n //@ts-ignore\n const [x, y] = wmViewport.project(inPoint.geometry.coordinates);\n // console.log('projectedCoords', JSON.stringify(projectedCoords));\n\n let minDistance = Infinity;\n let minPointInfo = {};\n\n projectedCoords.forEach(([x2, y2], index) => {\n if (index === 0) {\n return;\n }\n\n const [x1, y1] = projectedCoords[index - 1];\n\n // line from projectedCoords[index - 1] to projectedCoords[index]\n // convert to Ax + By + C = 0\n const A = y1 - y2;\n const B = x2 - x1;\n const C = x1 * y2 - x2 * y1;\n\n // https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\n const div = A * A + B * B;\n const distance = Math.abs(A * x + B * y + C) / Math.sqrt(div);\n\n // TODO: Check if inside bounds\n\n if (distance < minDistance) {\n minDistance = distance;\n minPointInfo = {\n index,\n x0: (B * (B * x - A * y) - A * C) / div,\n y0: (A * (-B * x + A * y) - B * C) / div,\n };\n }\n });\n //@ts-ignore\n const { index, x0, y0 } = minPointInfo;\n const [x1, y1, z1 = 0] = projectedCoords[index - 1];\n const [x2, y2, z2 = 0] = projectedCoords[index];\n\n // calculate what ratio of the line we are on to find the proper z\n const lineLength = distance2d(x1, y1, x2, y2);\n const startToPointLength = distance2d(x1, y1, x0, y0);\n const ratio = startToPointLength / lineLength;\n const z0 = mix(z1, z2, ratio);\n\n return {\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: wmViewport.unproject([x0, y0, z0]),\n },\n properties: {\n // TODO: calculate the distance in proper units\n dist: minDistance,\n index: index - 1,\n },\n };\n}\n\nexport function getPickedEditHandle(\n picks: Pick[] | null | undefined\n): EditHandleFeature | null | undefined {\n const handles = getPickedEditHandles(picks);\n return handles.length ? handles[0] : null;\n}\n\nexport function getPickedSnapSourceEditHandle(\n picks: Pick[] | null | undefined\n): EditHandleFeature | null | undefined {\n const handles = getPickedEditHandles(picks);\n return handles.find((handle) => handle.properties.editHandleType === 'snap-source');\n}\n\nexport function getNonGuidePicks(picks: Pick[]): Pick[] {\n return picks && picks.filter((pick) => !pick.isGuide);\n}\n\nexport function getPickedExistingEditHandle(\n picks: Pick[] | null | undefined\n): EditHandleFeature | null | undefined {\n const handles = getPickedEditHandles(picks);\n return handles.find(\n ({ properties }) => properties.featureIndex >= 0 && properties.editHandleType === 'existing'\n );\n}\n\nexport function getPickedIntermediateEditHandle(\n picks: Pick[] | null | undefined\n): EditHandleFeature | null | undefined {\n const handles = getPickedEditHandles(picks);\n return handles.find(\n ({ properties }) => properties.featureIndex >= 0 && properties.editHandleType === 'intermediate'\n );\n}\n\nexport function getPickedEditHandles(picks: Pick[] | null | undefined): EditHandleFeature[] {\n const handles =\n (picks &&\n picks\n .filter((pick) => pick.isGuide && pick.object.properties.guideType === 'editHandle')\n .map((pick) => pick.object)) ||\n [];\n\n return handles;\n}\n\nexport function getEditHandlesForGeometry(\n geometry: Geometry,\n featureIndex: number,\n editHandleType: EditHandleType = 'existing'\n): EditHandleFeature[] {\n let handles: EditHandleFeature[] = [];\n\n switch (geometry.type) {\n case 'Point':\n // positions are not nested\n handles = [\n {\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n editHandleType,\n positionIndexes: [],\n featureIndex,\n },\n geometry: {\n type: 'Point',\n coordinates: geometry.coordinates,\n },\n },\n ];\n break;\n case 'MultiPoint':\n case 'LineString':\n // positions are nested 1 level\n handles = handles.concat(\n getEditHandlesForCoordinates(geometry.coordinates, [], featureIndex, editHandleType)\n );\n break;\n case 'Polygon':\n case 'MultiLineString':\n // positions are nested 2 levels\n for (let a = 0; a < geometry.coordinates.length; a++) {\n handles = handles.concat(\n getEditHandlesForCoordinates(geometry.coordinates[a], [a], featureIndex, editHandleType)\n );\n if (geometry.type === 'Polygon') {\n // Don't repeat the first/last handle for Polygons\n handles = handles.slice(0, -1);\n }\n }\n\n break;\n case 'MultiPolygon':\n // positions are nested 3 levels\n for (let a = 0; a < geometry.coordinates.length; a++) {\n for (let b = 0; b < geometry.coordinates[a].length; b++) {\n handles = handles.concat(\n getEditHandlesForCoordinates(\n geometry.coordinates[a][b],\n [a, b],\n featureIndex,\n editHandleType\n )\n );\n // Don't repeat the first/last handle for Polygons\n handles = handles.slice(0, -1);\n }\n }\n\n break;\n default:\n //@ts-ignore\n throw Error(`Unhandled geometry type: ${geometry.type}`);\n }\n\n return handles;\n}\n\nfunction getEditHandlesForCoordinates(\n coordinates: any[],\n positionIndexPrefix: number[],\n featureIndex: number,\n editHandleType: EditHandleType = 'existing'\n): EditHandleFeature[] {\n const editHandles = [];\n for (let i = 0; i < coordinates.length; i++) {\n const position = coordinates[i];\n editHandles.push({\n type: 'Feature',\n properties: {\n guideType: 'editHandle',\n positionIndexes: [...positionIndexPrefix, i],\n featureIndex,\n editHandleType,\n },\n geometry: {\n type: 'Point',\n coordinates: position,\n },\n });\n }\n return editHandles;\n}\n","export { ArrowStyles, DEFAULT_ARROWS, MAX_ARROWS } from './style';\n\n// Layers\nexport { default as EditableGeoJsonLayer } from './layers/editable-geojson-layer';\nexport { default as EditableH3ClusterLayer } from './layers/editable-h3-cluster-layer';\nexport { default as SelectionLayer } from './layers/selection-layer';\nexport { default as ElevatedEditHandleLayer } from './layers/elevated-edit-handle-layer';\n\n// Layers moved from deck.gl\nexport { default as PathOutlineLayer } from './layers/path-outline-layer/path-outline-layer';\nexport { default as PathMarkerLayer } from './layers/path-marker-layer/path-marker-layer';\nexport { default as JunctionScatterplotLayer } from './layers/junction-scatterplot-layer';\n\n// Utils\nexport { toDeckColor } from './utils';\n\n// Types\nexport type { Color, Viewport } from './types';\n","/* eslint-env browser */\n\nimport { GeoJsonLayer, ScatterplotLayer, IconLayer, TextLayer } from '@deck.gl/layers';\n\nimport {\n ViewMode,\n ModifyMode,\n TranslateMode,\n ScaleMode,\n RotateMode,\n DuplicateMode,\n SplitPolygonMode,\n ExtrudeMode,\n ElevationMode,\n DrawPointMode,\n DrawLineStringMode,\n DrawPolygonMode,\n DrawRectangleMode,\n DrawCircleFromCenterMode,\n DrawCircleByDiameterMode,\n DrawEllipseByBoundingBoxMode,\n DrawRectangleUsingThreePointsMode,\n DrawEllipseUsingThreePointsMode,\n Draw90DegreePolygonMode,\n DrawPolygonByDraggingMode,\n SnappableMode,\n TransformMode,\n EditAction,\n ClickEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n PointerMoveEvent,\n GeoJsonEditModeType,\n GeoJsonEditModeConstructor,\n FeatureCollection,\n} from '@nebula.gl/edit-modes';\n\nimport EditableLayer from './editable-layer';\n\nconst DEFAULT_LINE_COLOR = [0x0, 0x0, 0x0, 0x99];\nconst DEFAULT_FILL_COLOR = [0x0, 0x0, 0x0, 0x90];\nconst DEFAULT_SELECTED_LINE_COLOR = [0x0, 0x0, 0x0, 0xff];\nconst DEFAULT_SELECTED_FILL_COLOR = [0x0, 0x0, 0x90, 0x90];\nconst DEFAULT_TENTATIVE_LINE_COLOR = [0x90, 0x90, 0x90, 0xff];\nconst DEFAULT_TENTATIVE_FILL_COLOR = [0x90, 0x90, 0x90, 0x90];\nconst DEFAULT_EDITING_EXISTING_POINT_COLOR = [0xc0, 0x0, 0x0, 0xff];\nconst DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR = [0x0, 0x0, 0x0, 0x80];\nconst DEFAULT_EDITING_SNAP_POINT_COLOR = [0x7c, 0x00, 0xc0, 0xff];\nconst DEFAULT_EDITING_POINT_OUTLINE_COLOR = [0xff, 0xff, 0xff, 0xff];\nconst DEFAULT_EDITING_EXISTING_POINT_RADIUS = 5;\nconst DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS = 3;\nconst DEFAULT_EDITING_SNAP_POINT_RADIUS = 7;\n\nconst DEFAULT_EDIT_MODE = DrawPolygonMode;\n\nfunction guideAccessor(accessor) {\n if (!accessor || typeof accessor !== 'function') {\n return accessor;\n }\n return (guideMaybeWrapped) => accessor(unwrapGuide(guideMaybeWrapped));\n}\n\n// The object handed to us from deck.gl is different depending on the version of deck.gl used, unwrap as necessary\nfunction unwrapGuide(guideMaybeWrapped) {\n if (guideMaybeWrapped.__source) {\n return guideMaybeWrapped.__source.object;\n } else if (guideMaybeWrapped.sourceFeature) {\n return guideMaybeWrapped.sourceFeature.feature;\n }\n // It is not wrapped, return as is\n return guideMaybeWrapped;\n}\n\nfunction getEditHandleColor(handle) {\n switch (handle.properties.editHandleType) {\n case 'existing':\n return DEFAULT_EDITING_EXISTING_POINT_COLOR;\n case 'snap-source':\n return DEFAULT_EDITING_SNAP_POINT_COLOR;\n case 'intermediate':\n default:\n return DEFAULT_EDITING_INTERMEDIATE_POINT_COLOR;\n }\n}\n\nfunction getEditHandleOutlineColor(handle) {\n return DEFAULT_EDITING_POINT_OUTLINE_COLOR;\n}\n\nfunction getEditHandleRadius(handle) {\n switch (handle.properties.editHandleType) {\n case 'existing':\n return DEFAULT_EDITING_EXISTING_POINT_RADIUS;\n case 'snap':\n return DEFAULT_EDITING_SNAP_POINT_RADIUS;\n case 'intermediate':\n default:\n return DEFAULT_EDITING_INTERMEDIATE_POINT_RADIUS;\n }\n}\n\nconst defaultProps = {\n mode: DEFAULT_EDIT_MODE,\n\n // Edit and interaction events\n onEdit: () => {},\n\n pickable: true,\n pickingRadius: 10,\n pickingDepth: 5,\n fp64: false,\n filled: true,\n stroked: true,\n lineWidthScale: 1,\n lineWidthMinPixels: 1,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineWidthUnits: 'pixels',\n lineJointRounded: false,\n lineMiterLimit: 4,\n pointRadiusScale: 1,\n pointRadiusMinPixels: 2,\n pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,\n getLineColor: (feature, isSelected, mode) =>\n isSelected ? DEFAULT_SELECTED_LINE_COLOR : DEFAULT_LINE_COLOR,\n getFillColor: (feature, isSelected, mode) =>\n isSelected ? DEFAULT_SELECTED_FILL_COLOR : DEFAULT_FILL_COLOR,\n getRadius: (f) =>\n (f && f.properties && f.properties.radius) || (f && f.properties && f.properties.size) || 1,\n getLineWidth: (f) => (f && f.properties && f.properties.lineWidth) || 3,\n\n // Tentative feature rendering\n getTentativeLineColor: (f) => DEFAULT_TENTATIVE_LINE_COLOR,\n getTentativeFillColor: (f) => DEFAULT_TENTATIVE_FILL_COLOR,\n getTentativeLineWidth: (f) => (f && f.properties && f.properties.lineWidth) || 3,\n\n editHandleType: 'point',\n\n // point handles\n editHandlePointRadiusScale: 1,\n editHandlePointOutline: true,\n editHandlePointStrokeWidth: 2,\n editHandlePointRadiusMinPixels: 4,\n editHandlePointRadiusMaxPixels: 8,\n getEditHandlePointColor: getEditHandleColor,\n getEditHandlePointOutlineColor: getEditHandleOutlineColor,\n getEditHandlePointRadius: getEditHandleRadius,\n\n // icon handles\n editHandleIconAtlas: null,\n editHandleIconMapping: null,\n editHandleIconSizeScale: 1,\n getEditHandleIcon: (handle) => handle.properties.editHandleType,\n getEditHandleIconSize: 10,\n getEditHandleIconColor: getEditHandleColor,\n getEditHandleIconAngle: 0,\n\n // misc\n billboard: true,\n};\n\n// Mapping of mode name to mode class (for legacy purposes)\nconst modeNameMapping = {\n view: ViewMode,\n\n // Alter modes\n modify: ModifyMode,\n translate: new SnappableMode(new TranslateMode()),\n\n transform: new SnappableMode(new TransformMode()),\n scale: ScaleMode,\n rotate: RotateMode,\n duplicate: DuplicateMode,\n split: SplitPolygonMode,\n extrude: ExtrudeMode,\n elevation: ElevationMode,\n\n // Draw modes\n drawPoint: DrawPointMode,\n drawLineString: DrawLineStringMode,\n drawPolygon: DrawPolygonMode,\n drawRectangle: DrawRectangleMode,\n drawCircleFromCenter: DrawCircleFromCenterMode,\n drawCircleByBoundingBox: DrawCircleByDiameterMode,\n drawEllipseByBoundingBox: DrawEllipseByBoundingBoxMode,\n drawRectangleUsing3Points: DrawRectangleUsingThreePointsMode,\n drawEllipseUsing3Points: DrawEllipseUsingThreePointsMode,\n draw90DegreePolygon: Draw90DegreePolygonMode,\n drawPolygonByDragging: DrawPolygonByDraggingMode,\n};\n\ntype Props = {\n mode: string | GeoJsonEditModeConstructor | GeoJsonEditModeType;\n onEdit: (arg0: EditAction) => void;\n // TODO: type the rest\n\n [key: string]: any;\n};\n\n// type State = {\n// mode: GeoJsonEditMode,\n// tentativeFeature: ?Feature,\n// editHandles: any[],\n// selectedFeatures: Feature[]\n// };\n\nexport default class EditableGeoJsonLayer extends EditableLayer {\n static layerName = 'EditableGeoJsonLayer';\n static defaultProps = defaultProps;\n // props: Props;\n\n // setState: ($Shape) => void;\n renderLayers() {\n const subLayerProps = this.getSubLayerProps({\n id: 'geojson',\n\n // Proxy most GeoJsonLayer props as-is\n data: this.props.data,\n fp64: this.props.fp64,\n filled: this.props.filled,\n stroked: this.props.stroked,\n lineWidthScale: this.props.lineWidthScale,\n lineWidthMinPixels: this.props.lineWidthMinPixels,\n lineWidthMaxPixels: this.props.lineWidthMaxPixels,\n lineWidthUnits: this.props.lineWidthUnits,\n lineJointRounded: this.props.lineJointRounded,\n lineMiterLimit: this.props.lineMiterLimit,\n pointRadiusScale: this.props.pointRadiusScale,\n pointRadiusMinPixels: this.props.pointRadiusMinPixels,\n pointRadiusMaxPixels: this.props.pointRadiusMaxPixels,\n getLineColor: this.selectionAwareAccessor(this.props.getLineColor),\n getFillColor: this.selectionAwareAccessor(this.props.getFillColor),\n getRadius: this.selectionAwareAccessor(this.props.getRadius),\n getLineWidth: this.selectionAwareAccessor(this.props.getLineWidth),\n\n _subLayerProps: {\n 'line-strings': {\n billboard: this.props.billboard,\n },\n 'polygons-stroke': {\n billboard: this.props.billboard,\n },\n },\n\n updateTriggers: {\n getLineColor: [this.props.selectedFeatureIndexes, this.props.mode],\n getFillColor: [this.props.selectedFeatureIndexes, this.props.mode],\n getRadius: [this.props.selectedFeatureIndexes, this.props.mode],\n getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode],\n },\n });\n\n let layers: any = [new GeoJsonLayer(subLayerProps)];\n\n layers = layers.concat(this.createGuidesLayers(), this.createTooltipsLayers());\n\n return layers;\n }\n\n initializeState() {\n super.initializeState();\n\n this.setState({\n selectedFeatures: [],\n editHandles: [],\n });\n }\n\n // TODO: is this the best way to properly update state from an outside event handler?\n shouldUpdateState(opts: any) {\n // console.log(\n // 'shouldUpdateState',\n // opts.changeFlags.propsOrDataChanged,\n // opts.changeFlags.stateChanged\n // );\n return super.shouldUpdateState(opts) || opts.changeFlags.stateChanged;\n }\n\n updateState({\n props,\n oldProps,\n changeFlags,\n }: {\n props: Props;\n oldProps: Props;\n changeFlags: any;\n }) {\n // @ts-ignore\n super.updateState({ oldProps, props, changeFlags });\n\n if (changeFlags.propsOrDataChanged) {\n const modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode;\n if (modePropChanged) {\n let mode;\n if (typeof props.mode === 'function') {\n // They passed a constructor/class, so new it up\n const ModeConstructor = props.mode;\n mode = new ModeConstructor();\n } else if (typeof props.mode === 'string') {\n // Lookup the mode based on its name (for backwards compatibility)\n mode = modeNameMapping[props.mode];\n // eslint-disable-next-line no-console\n console.warn(\n \"Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead.\"\n );\n } else {\n // Should be an instance of EditMode in this case\n mode = props.mode;\n }\n\n if (!mode) {\n console.warn(`No mode configured for ${String(props.mode)}`); // eslint-disable-line no-console,no-undef\n // Use default mode\n mode = new DEFAULT_EDIT_MODE();\n }\n\n if (mode !== this.state.mode) {\n this.setState({ mode, cursor: null });\n }\n }\n }\n\n let selectedFeatures = [];\n if (Array.isArray(props.selectedFeatureIndexes)) {\n // TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ...\n selectedFeatures = props.selectedFeatureIndexes.map((elem) => props.data.features[elem]);\n }\n\n this.setState({ selectedFeatures });\n }\n\n getModeProps(props: Props) {\n return {\n modeConfig: props.modeConfig,\n data: props.data,\n selectedIndexes: props.selectedFeatureIndexes,\n lastPointerMoveEvent: this.state.lastPointerMoveEvent,\n cursor: this.state.cursor,\n onEdit: (editAction: EditAction) => {\n // Force a re-render\n // This supports double-click where we need to ensure that there's a re-render between the two clicks\n // even though the data wasn't changed, just the internal tentative feature.\n this.setNeedsUpdate();\n props.onEdit(editAction);\n },\n onUpdateCursor: (cursor: string | null | undefined) => {\n this.setState({ cursor });\n },\n };\n }\n\n selectionAwareAccessor(accessor: any) {\n if (typeof accessor !== 'function') {\n return accessor;\n }\n return (feature: Record) =>\n accessor(feature, this.isFeatureSelected(feature), this.props.mode);\n }\n\n isFeatureSelected(feature: Record) {\n if (!this.props.data || !this.props.selectedFeatureIndexes) {\n return false;\n }\n if (!this.props.selectedFeatureIndexes.length) {\n return false;\n }\n const featureIndex = this.props.data.features.indexOf(feature);\n return this.props.selectedFeatureIndexes.includes(featureIndex);\n }\n\n getPickingInfo({ info, sourceLayer }: Record) {\n if (sourceLayer.id.endsWith('guides')) {\n // If user is picking an editing handle, add additional data to the info\n info.isGuide = true;\n }\n\n return info;\n }\n\n createGuidesLayers() {\n const mode = this.getActiveMode();\n const guides: FeatureCollection = mode.getGuides(this.getModeProps(this.props));\n\n if (!guides || !guides.features.length) {\n return [];\n }\n\n let pointLayerProps;\n if (this.props.editHandleType === 'icon') {\n pointLayerProps = {\n type: IconLayer,\n iconAtlas: this.props.editHandleIconAtlas,\n iconMapping: this.props.editHandleIconMapping,\n sizeScale: this.props.editHandleIconSizeScale,\n getIcon: guideAccessor(this.props.getEditHandleIcon),\n getSize: guideAccessor(this.props.getEditHandleIconSize),\n getColor: guideAccessor(this.props.getEditHandleIconColor),\n getAngle: guideAccessor(this.props.getEditHandleIconAngle),\n };\n } else {\n pointLayerProps = {\n type: ScatterplotLayer,\n radiusScale: this.props.editHandlePointRadiusScale,\n stroked: this.props.editHandlePointOutline,\n getLineWidth: this.props.editHandlePointStrokeWidth,\n radiusMinPixels: this.props.editHandlePointRadiusMinPixels,\n radiusMaxPixels: this.props.editHandlePointRadiusMaxPixels,\n getRadius: guideAccessor(this.props.getEditHandlePointRadius),\n getFillColor: guideAccessor(this.props.getEditHandlePointColor),\n getLineColor: guideAccessor(this.props.getEditHandlePointOutlineColor),\n };\n }\n\n const layer = new GeoJsonLayer(\n this.getSubLayerProps({\n id: `guides`,\n data: guides,\n fp64: this.props.fp64,\n _subLayerProps: {\n points: pointLayerProps,\n },\n lineWidthScale: this.props.lineWidthScale,\n lineWidthMinPixels: this.props.lineWidthMinPixels,\n lineWidthMaxPixels: this.props.lineWidthMaxPixels,\n lineWidthUnits: this.props.lineWidthUnits,\n lineJointRounded: this.props.lineJointRounded,\n lineMiterLimit: this.props.lineMiterLimit,\n getLineColor: guideAccessor(this.props.getTentativeLineColor),\n getLineWidth: guideAccessor(this.props.getTentativeLineWidth),\n getFillColor: guideAccessor(this.props.getTentativeFillColor),\n })\n );\n\n return [layer];\n }\n\n createTooltipsLayers() {\n const mode = this.getActiveMode();\n const tooltips = mode.getTooltips(this.getModeProps(this.props));\n\n const layer = new TextLayer(\n this.getSubLayerProps({\n id: `tooltips`,\n data: tooltips,\n })\n );\n\n return [layer];\n }\n\n onLayerClick(event: ClickEvent) {\n this.getActiveMode().handleClick(event, this.getModeProps(this.props));\n }\n\n onLayerKeyUp(event: KeyboardEvent) {\n this.getActiveMode().handleKeyUp(event, this.getModeProps(this.props));\n }\n\n onStartDragging(event: StartDraggingEvent) {\n this.getActiveMode().handleStartDragging(event, this.getModeProps(this.props));\n }\n\n onDragging(event: DraggingEvent) {\n this.getActiveMode().handleDragging(event, this.getModeProps(this.props));\n }\n\n onStopDragging(event: StopDraggingEvent) {\n this.getActiveMode().handleStopDragging(event, this.getModeProps(this.props));\n }\n\n onPointerMove(event: PointerMoveEvent) {\n this.setState({ lastPointerMoveEvent: event });\n this.getActiveMode().handlePointerMove(event, this.getModeProps(this.props));\n }\n\n getCursor({ isDragging }: { isDragging: boolean }) {\n let { cursor } = this.state;\n if (!cursor) {\n // default cursor\n cursor = isDragging ? 'grabbing' : 'grab';\n }\n return cursor;\n }\n\n getActiveMode(): GeoJsonEditModeType {\n return this.state.mode;\n }\n}\n","/* eslint-env browser */\n\nimport { H3ClusterLayer } from '@deck.gl/geo-layers';\nimport { ViewMode } from '@nebula.gl/edit-modes';\nimport { polyfill, geoToH3 } from 'h3-js';\nimport EditableGeoJsonLayer from './editable-geojson-layer';\nimport EditableLayer from './editable-layer';\n\nconst DEFAULT_EDIT_MODE = ViewMode;\nconst DEFAULT_H3_RESOLUTION = 9;\nconst EMPTY_FEATURE_COLLECTION = {\n type: 'FeatureCollection',\n features: [],\n};\n\nconst defaultProps = {\n mode: DEFAULT_EDIT_MODE,\n\n // EditableGeoJsonLayer\n ...EditableGeoJsonLayer.defaultProps,\n\n // h3 layer\n data: [],\n selectedIndexes: [],\n filled: false,\n stroked: true,\n lineWidthScale: 1,\n lineWidthMinPixels: 1,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineWidthUnits: 'pixels',\n getHexagons: (d) => d.hexIds,\n getEditedCluster: (updatedHexagons, existingCluster) => {\n if (existingCluster) {\n return {\n ...existingCluster,\n hexIds: updatedHexagons,\n };\n }\n return {\n hexIds: updatedHexagons,\n };\n },\n resolution: DEFAULT_H3_RESOLUTION,\n};\n\nexport default class EditableH3ClusterLayer extends EditableLayer {\n static layerName = 'EditableH3ClusterLayer';\n static defaultProps = defaultProps;\n\n initializeState() {\n super.initializeState();\n\n this.setState({\n tentativeHexagonIDs: [],\n });\n }\n\n // convert array of (lng, lat) coords to cluster of hexes\n getDerivedHexagonIDs(coords) {\n return polyfill(coords, this.props.resolution, true);\n }\n\n // convert pair of (lng, lat) coords into single hex\n getDerivedHexagonID(coords) {\n return geoToH3(coords[1], coords[0], this.props.resolution);\n }\n\n renderLayers() {\n const layers: any = [\n new EditableGeoJsonLayer(\n this.getSubLayerProps({\n id: 'editable-geojson',\n\n mode: this.props.mode,\n data: EMPTY_FEATURE_COLLECTION,\n selectedFeatureIndexes: [],\n\n onEdit: (editAction) => {\n const { editType, editContext } = editAction;\n\n switch (editType) {\n case 'updateTentativeFeature':\n // tentative feature updates, updated on every pointer move\n if (editContext.feature.geometry.type === 'Polygon') {\n const coords = editContext.feature.geometry.coordinates;\n const hexIDs = this.getDerivedHexagonIDs(coords);\n\n this.setState({ tentativeHexagonIDs: hexIDs });\n } else if (editContext.feature.geometry.type === 'Point') {\n const coords = editContext.feature.geometry.coordinates;\n const hexID = this.getDerivedHexagonID(coords);\n\n this.setState({ tentativeHexagonIDs: [hexID] });\n }\n break;\n case 'addFeature':\n const updatedData = [...this.props.data];\n const { modeConfig } = this.props;\n\n if (!modeConfig || !modeConfig.booleanOperation) {\n // add new h3 cluster\n updatedData.push(\n this.props.getEditedCluster(this.state.tentativeHexagonIDs, null)\n );\n } else if (this.props.selectedIndexes.length !== 1) {\n // eslint-disable-next-line no-console,no-undef\n console.warn('booleanOperation only supported for single cluster selection');\n } else {\n // they're affecting a selected cluster\n let finalHexagonIDs;\n const committedHexagonIDs = new Set(this.getSelectedHexIDs());\n const tentativeHexagonIDs = new Set(this.state.tentativeHexagonIDs);\n\n switch (modeConfig.booleanOperation) {\n case 'union':\n default:\n finalHexagonIDs = [\n ...new Set([...committedHexagonIDs, ...tentativeHexagonIDs]),\n ];\n break;\n case 'intersection':\n finalHexagonIDs = [...committedHexagonIDs].filter((hexID: string) =>\n tentativeHexagonIDs.has(hexID)\n );\n break;\n case 'difference':\n finalHexagonIDs = [...committedHexagonIDs].filter(\n (hexID: string) => !tentativeHexagonIDs.has(hexID)\n );\n break;\n }\n\n const selectedIndex = this.props.selectedIndexes[0];\n const existingCluster = this.props.data[selectedIndex];\n updatedData[selectedIndex] = this.props.getEditedCluster(\n finalHexagonIDs,\n existingCluster\n );\n }\n\n this.setState({\n tentativeHexagonIDs: [],\n });\n\n this.props.onEdit({ updatedData });\n\n break;\n default:\n break;\n }\n },\n })\n ),\n\n new H3ClusterLayer(\n this.getSubLayerProps({\n id: 'hexagons',\n data: this.props.data,\n getHexagons: this.props.getHexagons,\n })\n ),\n new H3ClusterLayer(\n this.getSubLayerProps({\n id: 'tentative-hexagons',\n data: [\n {\n hexIds: this.state.tentativeHexagonIDs,\n },\n ],\n getHexagons: (d) => d.hexIds,\n })\n ),\n ];\n return layers;\n }\n\n // because data is an array of hexagon data, we take the cumulative of all selected indexes,\n // using props.getHexagons to support multiple data types\n getSelectedHexIDs() {\n let cumulativeHexIDs = [];\n this.props.selectedIndexes.forEach((index) => {\n const selectedCluster = this.props.data[index];\n const hexIDs = this.props.getHexagons(selectedCluster);\n cumulativeHexIDs = cumulativeHexIDs.concat(hexIDs);\n });\n return cumulativeHexIDs;\n }\n\n getCursor({ isDragging }: { isDragging: boolean }) {\n let { cursor } = this.state;\n if (!cursor) {\n // default cursor\n cursor = isDragging ? 'grabbing' : 'grab';\n }\n return cursor;\n }\n}\n","/* eslint-env browser */\n\nimport { CompositeLayer } from '@deck.gl/core';\nimport {\n ClickEvent,\n StartDraggingEvent,\n StopDraggingEvent,\n DraggingEvent,\n PointerMoveEvent,\n} from '@nebula.gl/edit-modes';\n\nconst EVENT_TYPES = ['anyclick', 'pointermove', 'panstart', 'panmove', 'panend', 'keyup'];\n\nexport default class EditableLayer extends CompositeLayer {\n static layerName = 'EditableLayer';\n // Overridable interaction event handlers\n onLayerClick(event: ClickEvent) {\n // default implementation - do nothing\n }\n\n onStartDragging(event: StartDraggingEvent) {\n // default implementation - do nothing\n }\n\n onStopDragging(event: StopDraggingEvent) {\n // default implementation - do nothing\n }\n\n onDragging(event: DraggingEvent) {\n // default implementation - do nothing\n }\n\n onPointerMove(event: PointerMoveEvent) {\n // default implementation - do nothing\n }\n\n onLayerKeyUp(event: KeyboardEvent): void {\n // default implementation - do nothing;\n }\n // TODO: implement onCancelDragging (e.g. drag off screen)\n\n initializeState() {\n this.setState({\n _editableLayerState: {\n // Picked objects at the time the pointer went down\n pointerDownPicks: null,\n // Screen coordinates where the pointer went down\n pointerDownScreenCoords: null,\n // Ground coordinates where the pointer went down\n pointerDownMapCoords: null,\n\n // Keep track of the mjolnir.js event handler so it can be deregistered\n eventHandler: this._forwardEventToCurrentLayer.bind(this),\n },\n });\n\n this._addEventHandlers();\n }\n\n finalizeState() {\n this._removeEventHandlers();\n }\n\n _addEventHandlers() {\n // @ts-ignore\n const { eventManager } = this.context.deck;\n const { eventHandler } = this.state._editableLayerState;\n\n for (const eventType of EVENT_TYPES) {\n eventManager.on(eventType, eventHandler, {\n // give nebula a higher priority so that it can stop propagation to deck.gl's map panning handlers\n priority: 100,\n });\n }\n }\n\n _removeEventHandlers() {\n // @ts-ignore\n const { eventManager } = this.context.deck;\n const { eventHandler } = this.state._editableLayerState;\n\n for (const eventType of EVENT_TYPES) {\n eventManager.off(eventType, eventHandler);\n }\n }\n\n // A new layer instance is created on every render, so forward the event to the current layer\n // This means that the first layer instance will stick around to be the event listener, but will forward the event\n // to the latest layer instance.\n _forwardEventToCurrentLayer(event: any) {\n const currentLayer = this.getCurrentLayer();\n\n // Use a naming convention to find the event handling function for this event type\n const func = currentLayer[`_on${event.type}`].bind(currentLayer);\n if (!func) {\n console.warn(`no handler for mjolnir.js event ${event.type}`); // eslint-disable-line\n return;\n }\n func(event);\n }\n\n _onanyclick({ srcEvent }: any) {\n const screenCoords = this.getScreenCoords(srcEvent);\n const mapCoords = this.getMapCoords(screenCoords);\n // @ts-ignore\n const picks = this.getPicks(screenCoords);\n\n this.onLayerClick({\n mapCoords,\n // @ts-ignore\n screenCoords,\n picks,\n sourceEvent: srcEvent,\n });\n }\n\n _onkeyup({ srcEvent }: { srcEvent: KeyboardEvent }) {\n this.onLayerKeyUp(srcEvent);\n }\n\n _onpanstart(event: any) {\n const screenCoords = this.getScreenCoords(event.srcEvent);\n const mapCoords = this.getMapCoords(screenCoords);\n // @ts-ignore\n const picks = this.getPicks(screenCoords);\n\n this.setState({\n _editableLayerState: {\n ...this.state._editableLayerState,\n pointerDownScreenCoords: screenCoords,\n pointerDownMapCoords: mapCoords,\n pointerDownPicks: picks,\n },\n });\n\n this.onStartDragging({\n picks,\n // @ts-ignore\n screenCoords,\n // @ts-ignore\n mapCoords,\n // @ts-ignore\n pointerDownScreenCoords: screenCoords,\n pointerDownMapCoords: mapCoords,\n cancelPan: event.stopImmediatePropagation,\n sourceEvent: event.srcEvent,\n });\n }\n\n _onpanmove(event: any) {\n const { srcEvent } = event;\n const screenCoords = this.getScreenCoords(srcEvent);\n const mapCoords = this.getMapCoords(screenCoords);\n\n const {\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n } = this.state._editableLayerState;\n // @ts-ignore\n const picks = this.getPicks(screenCoords);\n\n this.onDragging({\n // @ts-ignore\n screenCoords,\n mapCoords,\n picks,\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n sourceEvent: srcEvent,\n cancelPan: event.stopImmediatePropagation,\n // another (hacky) approach for cancelling map panning\n // const controller = this.context.deck.viewManager.controllers[\n // Object.keys(this.context.deck.viewManager.controllers)[0]\n // ];\n // controller._state.isDragging = false;\n });\n }\n\n _onpanend({ srcEvent }: any) {\n const screenCoords = this.getScreenCoords(srcEvent);\n const mapCoords = this.getMapCoords(screenCoords);\n\n const {\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n } = this.state._editableLayerState;\n // @ts-ignore\n const picks = this.getPicks(screenCoords);\n\n this.onStopDragging({\n picks,\n // @ts-ignore\n screenCoords,\n mapCoords,\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n sourceEvent: srcEvent,\n });\n\n this.setState({\n _editableLayerState: {\n ...this.state._editableLayerState,\n pointerDownScreenCoords: null,\n pointerDownMapCoords: null,\n pointerDownPicks: null,\n },\n });\n }\n\n _onpointermove(event: any) {\n const { srcEvent } = event;\n const screenCoords = this.getScreenCoords(srcEvent);\n const mapCoords = this.getMapCoords(screenCoords);\n\n const {\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n } = this.state._editableLayerState;\n // @ts-ignore\n const picks = this.getPicks(screenCoords);\n\n this.onPointerMove({\n // @ts-ignore\n screenCoords,\n mapCoords,\n picks,\n pointerDownPicks,\n pointerDownScreenCoords,\n pointerDownMapCoords,\n sourceEvent: srcEvent,\n });\n }\n\n getPicks(screenCoords: [number, number]) {\n // @ts-ignore\n return this.context.deck.pickMultipleObjects({\n x: screenCoords[0],\n y: screenCoords[1],\n layerIds: [this.props.id],\n radius: this.props.pickingRadius,\n depth: this.props.pickingDepth,\n });\n }\n\n getScreenCoords(pointerEvent: any) {\n return [\n pointerEvent.clientX -\n (this.context.gl.canvas as HTMLCanvasElement).getBoundingClientRect().left,\n pointerEvent.clientY -\n (this.context.gl.canvas as HTMLCanvasElement).getBoundingClientRect().top,\n ];\n }\n\n getMapCoords(screenCoords: number[]) {\n // @ts-ignore\n return this.context.viewport.unproject([screenCoords[0], screenCoords[1]]);\n }\n}\n","/* eslint-env browser */\n\nimport { CompositeLayer } from '@deck.gl/core';\nimport { ScatterplotLayer, LineLayer } from '@deck.gl/layers';\n\nconst defaultProps = {};\n\nexport default class ElevatedEditHandleLayer extends CompositeLayer {\n static layerName = 'ElevatedEditHandleLayer';\n static defaultProps = defaultProps;\n renderLayers() {\n const handles = new ScatterplotLayer(\n Object.assign({}, this.props, {\n id: `${this.props.id}-ScatterplotLayer`,\n data: this.props.data,\n })\n );\n\n const lines = new LineLayer(\n Object.assign({}, this.props, {\n id: `${this.props.id}-LineLayer`,\n data: this.props.data,\n pickable: false,\n getSourcePosition: ({ position }) => [position[0], position[1], 0],\n getTargetPosition: ({ position }) => [position[0], position[1], position[2] || 0],\n getColor: [150, 150, 150, 200],\n getStrokeWidth: 3,\n })\n );\n\n return [handles, lines];\n }\n}\n","import { CompositeLayer } from '@deck.gl/core';\nimport { ScatterplotLayer } from '@deck.gl/layers';\n\nexport default class JunctionScatterplotLayer extends CompositeLayer {\n static layerName = 'JunctionScatterplotLayer';\n static defaultProps = {\n // @ts-ignore\n ...ScatterplotLayer.defaultProps,\n getFillColor: (d) => [0, 0, 0, 255],\n getStrokeColor: (d) => [255, 255, 255, 255],\n getInnerRadius: (d) => 1,\n };\n\n renderLayers() {\n const { id, getFillColor, getStrokeColor, getInnerRadius, updateTriggers } = this.props;\n\n // data needs to be passed explicitly after deck.gl 5.3\n return [\n // the full circles\n new ScatterplotLayer({\n ...this.props,\n id: `${id}-full`,\n data: this.props.data,\n getLineColor: getStrokeColor,\n updateTriggers: {\n ...updateTriggers,\n getStrokeColor: updateTriggers.getStrokeColor,\n },\n }), // the inner part\n new ScatterplotLayer({\n ...this.props,\n id: `${id}-inner`,\n data: this.props.data,\n getFillColor,\n getRadius: getInnerRadius,\n pickable: false,\n updateTriggers: {\n ...updateTriggers,\n getFillColor: updateTriggers.getFillColor,\n getRadius: updateTriggers.getInnerRadius,\n },\n }),\n ];\n }\n}\n","import { Geometry } from '@luma.gl/core';\n\nexport default class Arrow2DGeometry extends Geometry {\n constructor(opts = {}) {\n super(\n Object.assign({}, opts, {\n attributes: getArrowAttributes(opts),\n })\n );\n }\n}\n\nfunction getArrowAttributes({ length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05 }) {\n const texCoords = [\n // HEAD\n 0.5,\n 1.0,\n 0,\n 0.5 - headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 + headSize / 2,\n 1.0 - headSize,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n tailStart,\n 0,\n 0.5 - tailWidth / 2,\n 1.0 - headSize,\n 0,\n 0.5 + tailWidth / 2,\n 1.0 - headSize,\n 0,\n ];\n\n const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1];\n\n // Center and scale\n const positions = new Array(texCoords.length);\n for (let i = 0; i < texCoords.length / 3; i++) {\n const i3 = i * 3;\n positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length;\n positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length;\n positions[i3 + 2] = 0;\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n texCoords: new Float32Array(texCoords),\n };\n}\n","import { Vector2 } from 'math.gl';\n\nfunction getLineLength(vPoints) {\n // calculate total length\n let lineLength = 0;\n for (let i = 0; i < vPoints.length - 1; i++) {\n lineLength += vPoints[i].distance(vPoints[i + 1]);\n }\n return lineLength;\n}\n\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_DIRECTION = { forward: true, backward: false };\n\nexport default function createPathMarkers({\n data,\n getPath = (x) => x.path,\n getDirection = (x) => x.direction,\n getColor = (x) => DEFAULT_COLOR,\n getMarkerPercentages = (x) => [0.5],\n projectFlat,\n}) {\n const markers = [];\n\n for (const object of data) {\n const path = getPath(object);\n const direction = getDirection(object) || DEFAULT_DIRECTION;\n const color = getColor(object);\n\n const vPoints = path.map((p) => new Vector2(p));\n const vPointsReverse = vPoints.slice(0).reverse();\n\n // calculate total length\n const lineLength = getLineLength(vPoints);\n\n // Ask for where to put markers\n // @ts-ignore\n const percentages = getMarkerPercentages(object, { lineLength });\n\n // Create the markers\n for (const percentage of percentages) {\n if (direction.forward) {\n const marker = createMarkerAlongPath({\n path: vPoints,\n percentage,\n lineLength,\n color,\n object,\n projectFlat,\n });\n markers.push(marker);\n }\n\n if (direction.backward) {\n const marker = createMarkerAlongPath({\n path: vPointsReverse,\n percentage,\n lineLength,\n color,\n object,\n projectFlat,\n });\n markers.push(marker);\n }\n }\n }\n\n return markers;\n}\n\nfunction createMarkerAlongPath({ path, percentage, lineLength, color, object, projectFlat }) {\n const distanceAlong = lineLength * percentage;\n let currentDistance = 0;\n let previousDistance = 0;\n let i = 0;\n for (i = 0; i < path.length - 1; i++) {\n currentDistance += path[i].distance(path[i + 1]);\n if (currentDistance > distanceAlong) {\n break;\n }\n previousDistance = currentDistance;\n }\n\n const vDirection = path[i + 1].clone().subtract(path[i]).normalize();\n const along = distanceAlong - previousDistance;\n const vCenter = vDirection.clone().multiply(new Vector2(along, along)).add(path[i]);\n\n const vDirection2 = new Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i]));\n const angle = (-vDirection2.verticalAngle() * 180) / Math.PI;\n\n return { position: [vCenter.x, vCenter.y, 0], angle, color, object };\n}\n","import { CompositeLayer, COORDINATE_SYSTEM } from '@deck.gl/core';\nimport { ScatterplotLayer } from '@deck.gl/layers';\nimport { SimpleMeshLayer } from '@deck.gl/mesh-layers';\nimport PathOutlineLayer from '../path-outline-layer/path-outline-layer';\nimport Arrow2DGeometry from './arrow-2d-geometry';\n\nimport createPathMarkers from './create-path-markers';\nimport { getClosestPointOnPolyline } from './polyline';\n\nconst DISTANCE_FOR_MULTI_ARROWS = 0.1;\nconst ARROW_HEAD_SIZE = 0.2;\nconst ARROW_TAIL_WIDTH = 0.05;\n// const ARROW_CENTER_ADJUST = -0.8;\n\nconst DEFAULT_MARKER_LAYER = SimpleMeshLayer;\n\nconst DEFAULT_MARKER_LAYER_PROPS = {\n mesh: new Arrow2DGeometry({ headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH }),\n};\n\nconst defaultProps = Object.assign({}, PathOutlineLayer.defaultProps, {\n MarkerLayer: DEFAULT_MARKER_LAYER,\n markerLayerProps: DEFAULT_MARKER_LAYER_PROPS,\n\n sizeScale: 100,\n fp64: false,\n\n hightlightIndex: -1,\n highlightPoint: null,\n\n getPath: (x) => x.path,\n getColor: (x) => x.color,\n getMarkerColor: (x) => [0, 0, 0, 255],\n getDirection: (x) => x.direction,\n getMarkerPercentages: (object, { lineLength }) =>\n lineLength > DISTANCE_FOR_MULTI_ARROWS ? [0.25, 0.5, 0.75] : [0.5],\n});\n\nexport default class PathMarkerLayer extends CompositeLayer {\n static layerName = 'PathMarkerLayer';\n static defaultProps = defaultProps;\n\n initializeState() {\n this.state = {\n markers: [],\n mesh: new Arrow2DGeometry({ headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH }),\n closestPoint: null,\n };\n }\n // @ts-ignore\n projectFlat(xyz, viewport, coordinateSystem, coordinateOrigin) {\n if (coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n const [dx, dy] = viewport.metersToLngLatDelta(xyz);\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n } else if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS) {\n const [dx, dy] = xyz;\n const [x, y] = coordinateOrigin;\n return viewport.projectFlat([x + dx, dy + y]);\n }\n\n return viewport.projectFlat(xyz);\n }\n\n updateState({ props, oldProps, changeFlags }) {\n if (changeFlags.dataChanged || changeFlags.updateTriggersChanged) {\n const {\n data,\n getPath,\n getDirection,\n getMarkerColor,\n getMarkerPercentages,\n coordinateSystem,\n coordinateOrigin,\n } = this.props;\n // @ts-ignore\n const { viewport } = this.context;\n const projectFlat = (o) => this.projectFlat(o, viewport, coordinateSystem, coordinateOrigin);\n this.state.markers = createPathMarkers({\n data,\n getPath,\n getDirection,\n getColor: getMarkerColor,\n getMarkerPercentages,\n projectFlat,\n });\n this._recalculateClosestPoint();\n }\n if (changeFlags.propsChanged) {\n if (props.point !== oldProps.point) {\n this._recalculateClosestPoint();\n }\n }\n }\n\n _recalculateClosestPoint() {\n const { highlightPoint, highlightIndex } = this.props;\n if (highlightPoint && highlightIndex >= 0) {\n const object = this.props.data[highlightIndex];\n const points = this.props.getPath(object);\n const { point } = getClosestPointOnPolyline({ points, p: highlightPoint });\n this.state.closestPoints = [\n {\n position: point,\n },\n ];\n } else {\n this.state.closestPoints = [];\n }\n }\n\n getPickingInfo({ info }) {\n return Object.assign(info, {\n // override object with picked feature\n object: (info.object && info.object.path) || info.object,\n });\n }\n\n renderLayers() {\n return [\n new PathOutlineLayer(\n this.props,\n // @ts-ignore\n this.getSubLayerProps({\n id: 'paths',\n // Note: data has to be passed explicitly like this to avoid being empty\n data: this.props.data,\n })\n ),\n new this.props.MarkerLayer(\n this.getSubLayerProps(\n Object.assign({}, this.props.markerLayerProps, {\n id: 'markers',\n data: this.state.markers,\n getOrientation: (x) => [0, -x.angle, 0],\n getColor: (x) => x.color,\n sizeScale: this.props.sizeScale,\n fp64: this.props.fp64,\n pickable: false,\n parameters: {\n blend: false,\n depthTest: false,\n },\n })\n )\n ),\n this.state.closestPoints &&\n new ScatterplotLayer({\n id: `${this.props.id}-highlight`,\n data: this.state.closestPoints,\n // @ts-ignore\n fp64: this.props.fp64,\n }),\n ];\n }\n}\n","import { Vector3, clamp } from 'math.gl';\n\n// Return the closest point on a line segment\nexport function getClosestPointOnLine({ p, p1, p2, clampToLine = true }) {\n const lineVector = new Vector3(p2).subtract(p1);\n const pointVector = new Vector3(p).subtract(p1);\n let dotProduct = lineVector.dot(pointVector);\n if (clampToLine) {\n dotProduct = clamp(dotProduct, 0, 1);\n }\n // @ts-ignore\n return lineVector.lerp(dotProduct);\n}\n\n// Return the closest point on a line segment\nexport function getClosestPointOnPolyline({ p, points }) {\n p = new Vector3(p);\n let pClosest = null;\n let distanceSquared = Infinity;\n let index = -1;\n for (let i = 0; i < points.length - 1; ++i) {\n const p1 = points[i];\n const p2 = points[i + 1];\n const pClosestOnLine = getClosestPointOnLine({ p, p1, p2 });\n const distanceToLineSquared = p.distanceSquared(pClosestOnLine);\n if (distanceToLineSquared < distanceSquared) {\n distanceSquared = distanceToLineSquared;\n pClosest = pClosestOnLine;\n index = i;\n }\n }\n return {\n point: pClosest,\n index,\n p1: points[index],\n p2: points[index + 1],\n distanceSquared,\n distance: Math.sqrt(distanceSquared),\n };\n}\n","import { PathLayer } from '@deck.gl/layers';\nimport GL from '@luma.gl/constants';\nimport { Framebuffer, Texture2D } from '@luma.gl/core';\nimport outline from '../../shaderlib/outline/outline';\n\n// TODO - this should be built into assembleShaders\nfunction injectShaderCode({ source, code = '' }) {\n const INJECT_CODE = /}[^{}]*$/;\n return source.replace(INJECT_CODE, code.concat('\\n}\\n'));\n}\n\nconst VS_CODE = `\\\n outline_setUV(gl_Position);\n outline_setZLevel(instanceZLevel);\n`;\n\nconst FS_CODE = `\\\n gl_FragColor = outline_filterColor(gl_FragColor);\n`;\n\nconst defaultProps = {\n getZLevel: { type: 'accessor', value: 0 },\n};\n\nexport default class PathOutlineLayer extends PathLayer {\n static layerName = 'PathOutlineLayer';\n static defaultProps = defaultProps;\n\n // Override getShaders to inject the outline module\n getShaders() {\n const shaders = super.getShaders();\n return Object.assign({}, shaders, {\n modules: shaders.modules.concat([outline]),\n vs: injectShaderCode({ source: shaders.vs, code: VS_CODE }),\n fs: injectShaderCode({ source: shaders.fs, code: FS_CODE }),\n });\n }\n\n initializeState(context: any) {\n super.initializeState(context);\n\n // Create an outline \"shadow\" map\n // TODO - we should create a single outlineMap for all layers\n this.setState({\n outlineFramebuffer: new Framebuffer(context.gl),\n dummyTexture: new Texture2D(context.gl),\n });\n\n // Create an attribute manager\n this.state.attributeManager.addInstanced({\n instanceZLevel: {\n size: 1,\n type: GL.UNSIGNED_BYTE,\n update: this.calculateZLevels,\n accessor: 'getZLevel',\n },\n });\n }\n\n // Override draw to add render module\n draw({ moduleParameters = {}, parameters, uniforms, context }) {\n // Need to calculate same uniforms as base layer\n const {\n rounded,\n miterLimit,\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n dashJustified,\n } = this.props;\n\n uniforms = Object.assign({}, uniforms, {\n jointType: Number(rounded),\n alignMode: Number(dashJustified),\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels,\n });\n\n // Render the outline shadowmap (based on segment z orders)\n const { outlineFramebuffer, dummyTexture } = this.state;\n outlineFramebuffer.resize();\n outlineFramebuffer.clear({ color: true, depth: true });\n\n this.state.model.updateModuleSettings({\n outlineEnabled: true,\n outlineRenderShadowmap: true,\n outlineShadowmap: dummyTexture,\n });\n\n this.state.model.draw({\n uniforms: Object.assign({}, uniforms, {\n jointType: 0,\n widthScale: this.props.widthScale * 1.3,\n }),\n parameters: {\n depthTest: false,\n // Biggest value needs to go into buffer\n blendEquation: GL.MAX,\n },\n framebuffer: outlineFramebuffer,\n });\n\n // Now use the outline shadowmap to render the lines (with outlines)\n this.state.model.updateModuleSettings({\n outlineEnabled: true,\n outlineRenderShadowmap: false,\n outlineShadowmap: outlineFramebuffer,\n });\n this.state.model.draw({\n uniforms: Object.assign({}, uniforms, {\n jointType: Number(rounded),\n widthScale: this.props.widthScale,\n }),\n parameters: {\n depthTest: false,\n },\n });\n }\n\n calculateZLevels(attribute) {\n const { getZLevel } = this.props;\n const { pathTesselator } = this.state;\n\n attribute.value = pathTesselator._updateAttribute({\n target: attribute.value,\n size: 1,\n getValue: (object, index) => [getZLevel(object, index) || 0],\n });\n }\n}\n","/* eslint-env browser */\nimport { CompositeLayer } from '@deck.gl/core';\nimport { PolygonLayer } from '@deck.gl/layers';\nimport { polygon } from '@turf/helpers';\nimport turfBuffer from '@turf/buffer';\nimport turfDifference from '@turf/difference';\nimport { DrawRectangleMode, DrawPolygonMode, ViewMode } from '@nebula.gl/edit-modes';\n\nimport EditableGeoJsonLayer from './editable-geojson-layer';\n\nexport const SELECTION_TYPE = {\n NONE: null,\n RECTANGLE: 'rectangle',\n POLYGON: 'polygon',\n};\n\nconst MODE_MAP = {\n [SELECTION_TYPE.RECTANGLE]: DrawRectangleMode,\n [SELECTION_TYPE.POLYGON]: DrawPolygonMode,\n};\n\nconst MODE_CONFIG_MAP = {\n [SELECTION_TYPE.RECTANGLE]: { dragToDraw: true },\n};\n\nconst defaultProps = {\n selectionType: SELECTION_TYPE.RECTANGLE,\n layerIds: [],\n onSelect: () => {},\n};\n\nconst EMPTY_DATA = {\n type: 'FeatureCollection',\n features: [],\n};\n\nconst EXPANSION_KM = 50;\nconst LAYER_ID_GEOJSON = 'selection-geojson';\nconst LAYER_ID_BLOCKER = 'selection-blocker';\n\nconst PASS_THROUGH_PROPS = [\n 'lineWidthScale',\n 'lineWidthMinPixels',\n 'lineWidthMaxPixels',\n 'lineWidthUnits',\n 'lineJointRounded',\n 'lineMiterLimit',\n 'pointRadiusScale',\n 'pointRadiusMinPixels',\n 'pointRadiusMaxPixels',\n 'lineDashJustified',\n 'getLineColor',\n 'getFillColor',\n 'getRadius',\n 'getLineWidth',\n 'getLineDashArray',\n 'getTentativeLineDashArray',\n 'getTentativeLineColor',\n 'getTentativeFillColor',\n 'getTentativeLineWidth',\n];\n\nexport default class SelectionLayer extends CompositeLayer {\n static layerName = 'SelectionLayer';\n static defaultProps = defaultProps;\n\n _selectRectangleObjects(coordinates: any) {\n const { layerIds, onSelect } = this.props;\n // @ts-ignore\n const [x1, y1] = this.context.viewport.project(coordinates[0][0]);\n // @ts-ignore\n const [x2, y2] = this.context.viewport.project(coordinates[0][2]);\n // @ts-ignore\n const pickingInfos = this.context.deck.pickObjects({\n x: Math.min(x1, x2),\n y: Math.min(y1, y2),\n width: Math.abs(x2 - x1),\n height: Math.abs(y2 - y1),\n layerIds,\n });\n\n onSelect({ pickingInfos });\n }\n\n _selectPolygonObjects(coordinates: any) {\n const { layerIds, onSelect } = this.props;\n // @ts-ignore\n const mousePoints = coordinates[0].map((c) => this.context.viewport.project(c));\n\n const allX = mousePoints.map((mousePoint) => mousePoint[0]);\n const allY = mousePoints.map((mousePoint) => mousePoint[1]);\n const x = Math.min(...allX);\n const y = Math.min(...allY);\n const maxX = Math.max(...allX);\n const maxY = Math.max(...allY);\n\n // Use a polygon to hide the outside, because pickObjects()\n // does not support polygons\n const landPointsPoly = polygon(coordinates);\n const bigBuffer = turfBuffer(landPointsPoly, EXPANSION_KM);\n let bigPolygon;\n try {\n // turfDifference throws an exception if the polygon\n // intersects with itself (TODO: check if true in all versions)\n bigPolygon = turfDifference(bigBuffer, landPointsPoly);\n } catch (e) {\n // invalid selection polygon\n console.log('turfDifference() error', e); // eslint-disable-line\n return;\n }\n\n this.setState({\n pendingPolygonSelection: {\n bigPolygon,\n },\n });\n\n const blockerId = `${this.props.id}-${LAYER_ID_BLOCKER}`;\n\n // HACK, find a better way\n setTimeout(() => {\n // @ts-ignore\n const pickingInfos = this.context.deck.pickObjects({\n x,\n y,\n width: maxX - x,\n height: maxY - y,\n layerIds: [blockerId, ...layerIds],\n });\n\n onSelect({\n pickingInfos: pickingInfos.filter((item) => item.layer.id !== this.props.id),\n });\n }, 250);\n }\n\n renderLayers() {\n const { pendingPolygonSelection } = this.state;\n\n const mode = MODE_MAP[this.props.selectionType] || ViewMode;\n const modeConfig = MODE_CONFIG_MAP[this.props.selectionType];\n\n const inheritedProps = {};\n PASS_THROUGH_PROPS.forEach((p) => {\n if (this.props[p] !== undefined) inheritedProps[p] = this.props[p];\n });\n\n const layers = [\n new EditableGeoJsonLayer(\n this.getSubLayerProps({\n id: LAYER_ID_GEOJSON,\n pickable: true,\n mode,\n modeConfig,\n selectedFeatureIndexes: [],\n data: EMPTY_DATA,\n onEdit: ({ updatedData, editType }) => {\n if (editType === 'addFeature') {\n const { coordinates } = updatedData.features[0].geometry;\n\n if (this.props.selectionType === SELECTION_TYPE.RECTANGLE) {\n this._selectRectangleObjects(coordinates);\n } else if (this.props.selectionType === SELECTION_TYPE.POLYGON) {\n this._selectPolygonObjects(coordinates);\n }\n }\n },\n ...inheritedProps,\n })\n ),\n ];\n\n if (pendingPolygonSelection) {\n const { bigPolygon } = pendingPolygonSelection;\n layers.push(\n new PolygonLayer(\n // @ts-ignore\n this.getSubLayerProps({\n id: LAYER_ID_BLOCKER,\n pickable: true,\n stroked: false,\n opacity: 1.0,\n data: [bigPolygon],\n getLineColor: (obj) => [0, 0, 0, 1],\n getFillColor: (obj) => [0, 0, 0, 1],\n getPolygon: (o) => o.geometry.coordinates,\n })\n )\n );\n }\n\n return layers;\n }\n\n shouldUpdateState({ changeFlags: { stateChanged, propsOrDataChanged } }: Record) {\n return stateChanged || propsOrDataChanged;\n }\n}\n","/* eslint-disable camelcase */\nconst INITIAL_STATE: Record = {\n outlineEnabled: false,\n outlineRenderShadowmap: false,\n outlineShadowmap: null,\n};\n\nfunction getUniforms({ outlineEnabled, outlineRenderShadowmap, outlineShadowmap } = INITIAL_STATE) {\n const uniforms: Record = {};\n if (outlineEnabled !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uEnabled = outlineEnabled;\n }\n if (outlineRenderShadowmap !== undefined) {\n // ? 1.0 : 0.0;\n uniforms.outline_uRenderOutlines = outlineRenderShadowmap;\n }\n if (outlineShadowmap !== undefined) {\n uniforms.outline_uShadowmap = outlineShadowmap;\n }\n return uniforms;\n}\n\nconst vs = `\\\nattribute float instanceZLevel;\nvarying float outline_vzLevel;\nvarying vec4 outline_vPosition;\n\n// Set the z level for the outline shadowmap rendering\nvoid outline_setZLevel(float zLevel) {\n outline_vzLevel = zLevel;\n}\n\n// Store an adjusted position for texture2DProj\nvoid outline_setUV(vec4 position) {\n // mat4(\n // 0.5, 0.0, 0.0, 0.0,\n // 0.0, 0.5, 0.0, 0.0,\n // 0.0, 0.0, 0.5, 0.0,\n // 0.5, 0.5, 0.5, 1.0\n // ) * position;\n outline_vPosition = vec4(position.xyz * 0.5 + position.w * 0.5, position.w);\n}\n`;\n\nconst fs = `\\\nuniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nvarying float outline_vzLevel;\n// varying vec2 outline_vUV;\nvarying vec4 outline_vPosition;\n\nconst float OUTLINE_Z_LEVEL_ERROR = 0.01;\n\n// Return a darker color in shadowmap\nvec4 outline_filterShadowColor(vec4 color) {\n return vec4(outline_vzLevel / 255., outline_vzLevel / 255., outline_vzLevel / 255., 1.);\n}\n\n// Return a darker color if in shadowmap\nvec4 outline_filterDarkenColor(vec4 color) {\n if (outline_uEnabled) {\n float maxZLevel;\n if (outline_vPosition.q > 0.0) {\n maxZLevel = texture2DProj(outline_uShadowmap, outline_vPosition).r * 255.;\n } else {\n discard;\n }\n if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {\n vec4(color.rgb * 0.5, color.a);\n } else {\n discard;\n }\n }\n return color;\n}\n\n// if enabled and rendering outlines - Render depth to shadowmap\n// if enabled and rendering colors - Return a darker color if in shadowmap\n// if disabled, just return color\nvec4 outline_filterColor(vec4 color) {\n if (outline_uEnabled) {\n return outline_uRenderOutlines ?\n outline_filterShadowColor(color) :\n outline_filterDarkenColor(color);\n }\n return color;\n}\n`;\n\nexport default {\n name: 'outline',\n vs,\n fs,\n getUniforms,\n};\n","// Describes the arrow style of polylines\nexport const ArrowStyles = {\n NONE: 0,\n FORWARD: 1,\n BACKWARD: 2,\n BOTH: 3,\n};\n\nexport const DEFAULT_ARROWS = 1;\nexport const MAX_ARROWS = 3;\n","import destination from '@turf/destination';\nimport bearing from '@turf/bearing';\nimport pointToLineDistance from '@turf/point-to-line-distance';\nimport { point } from '@turf/helpers';\nimport {\n Position,\n Point,\n LineString,\n FeatureOf,\n FeatureWithProps,\n Viewport,\n} from '@nebula.gl/edit-modes';\nimport WebMercatorViewport from 'viewport-mercator-project';\n\n// TODO edit-modes: delete and use edit-modes/utils instead\n\nexport type NearestPointType = FeatureWithProps;\n\nexport function toDeckColor(\n color?: [number, number, number, number] | number,\n defaultColor: [number, number, number, number] = [255, 0, 0, 255]\n): [number, number, number, number] {\n if (!Array.isArray(color)) {\n return defaultColor;\n }\n return [color[0] * 255, color[1] * 255, color[2] * 255, color[3] * 255];\n}\n\n//\n// a GeoJSON helper function that calls the provided function with\n// an argument that is the most deeply-nested array having elements\n// that are arrays of primitives as an argument, e.g.\n//\n// {\n// \"type\": \"MultiPolygon\",\n// \"coordinates\": [\n// [\n// [[30, 20], [45, 40], [10, 40], [30, 20]]\n// ],\n// [\n// [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]\n// ]\n// ]\n// }\n//\n// the function would be called on:\n//\n// [[30, 20], [45, 40], [10, 40], [30, 20]]\n//\n// and\n//\n// [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]\n//\nexport function recursivelyTraverseNestedArrays(\n array: Array,\n prefix: Array,\n fn: Function\n) {\n if (!Array.isArray(array[0])) {\n return true;\n }\n for (let i = 0; i < array.length; i++) {\n if (recursivelyTraverseNestedArrays(array[i], [...prefix, i], fn)) {\n fn(array, prefix);\n break;\n }\n }\n return false;\n}\n\nexport function generatePointsParallelToLinePoints(\n p1: Position,\n p2: Position,\n groundCoords: Position\n): Position[] {\n const lineString: LineString = {\n type: 'LineString',\n coordinates: [p1, p2],\n };\n const pt = point(groundCoords);\n const ddistance = pointToLineDistance(pt, lineString);\n const lineBearing = bearing(p1, p2);\n\n // Check if current point is to the left or right of line\n // Line from A=(x1,y1) to B=(x2,y2) a point P=(x,y)\n // then (x−x1)(y2−y1)−(y−y1)(x2−x1)\n const isPointToLeftOfLine =\n (groundCoords[0] - p1[0]) * (p2[1] - p1[1]) - (groundCoords[1] - p1[1]) * (p2[0] - p1[0]);\n\n // Bearing to draw perpendicular to the line string\n const orthogonalBearing = isPointToLeftOfLine < 0 ? lineBearing - 90 : lineBearing - 270;\n\n // Get coordinates for the point p3 and p4 which are perpendicular to the lineString\n // Add the distance as the current position moves away from the lineString\n const p3 = destination(p2, ddistance, orthogonalBearing);\n const p4 = destination(p1, ddistance, orthogonalBearing);\n //@ts-ignore\n return [p3.geometry.coordinates, p4.geometry.coordinates];\n}\n\nexport function distance2d(x1: number, y1: number, x2: number, y2: number): number {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport function mix(a: number, b: number, ratio: number): number {\n return b * ratio + a * (1 - ratio);\n}\n\nexport function nearestPointOnProjectedLine(\n line: FeatureOf,\n inPoint: FeatureOf,\n viewport: Viewport\n): NearestPointType {\n const wmViewport = new WebMercatorViewport(viewport);\n // Project the line to viewport, then find the nearest point\n const coordinates: Array> = line.geometry.coordinates as any;\n const projectedCoords = coordinates.map(([x, y, z = 0]) => wmViewport.project([x, y, z]));\n //@ts-ignore\n const [x, y] = wmViewport.project(inPoint.geometry.coordinates);\n // console.log('projectedCoords', JSON.stringify(projectedCoords));\n\n let minDistance = Infinity;\n let minPointInfo = {};\n\n projectedCoords.forEach(([x2, y2], index) => {\n if (index === 0) {\n return;\n }\n\n const [x1, y1] = projectedCoords[index - 1];\n\n // line from projectedCoords[index - 1] to projectedCoords[index]\n // convert to Ax + By + C = 0\n const A = y1 - y2;\n const B = x2 - x1;\n const C = x1 * y2 - x2 * y1;\n\n // https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\n const div = A * A + B * B;\n const distance = Math.abs(A * x + B * y + C) / Math.sqrt(div);\n\n // TODO: Check if inside bounds\n\n if (distance < minDistance) {\n minDistance = distance;\n minPointInfo = {\n index,\n x0: (B * (B * x - A * y) - A * C) / div,\n y0: (A * (-B * x + A * y) - B * C) / div,\n };\n }\n });\n //@ts-ignore\n const { index, x0, y0 } = minPointInfo;\n const [x1, y1, z1 = 0] = projectedCoords[index - 1];\n const [x2, y2, z2 = 0] = projectedCoords[index];\n\n // calculate what ratio of the line we are on to find the proper z\n const lineLength = distance2d(x1, y1, x2, y2);\n const startToPointLength = distance2d(x1, y1, x0, y0);\n const ratio = startToPointLength / lineLength;\n const z0 = mix(z1, z2, ratio);\n\n return {\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: wmViewport.unproject([x0, y0, z0]),\n },\n properties: {\n // TODO: calculate the distance in proper units\n dist: minDistance,\n index: index - 1,\n },\n };\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// This function is needed in initialization stages,\n// make sure it can be imported in isolation\n\nimport isBrowser from './is-browser';\nimport isElectron from './is-electron';\n\nconst window = globalThis;\n\nexport function isMobile(): boolean {\n return typeof window.orientation !== 'undefined';\n}\n\n// Simple browser detection\n// `mockUserAgent` parameter allows user agent to be overridden for testing\n/* eslint-disable complexity */\nexport default function getBrowser(\n mockUserAgent?: string\n): 'Node' | 'Electron' | 'Chrome' | 'Firefox' | 'Safari' | 'Edge' | 'IE' | 'Unknown' {\n if (!mockUserAgent && !isBrowser()) {\n return 'Node';\n }\n\n if (isElectron(mockUserAgent)) {\n return 'Electron';\n }\n\n const navigator_ = typeof navigator !== 'undefined' ? navigator : {};\n // @ts-expect-error\n const userAgent = mockUserAgent || navigator_.userAgent || '';\n // const appVersion = navigator_.appVersion || '';\n\n // NOTE: Order of tests matter, as many agents list Chrome etc.\n if (userAgent.indexOf('Edge') > -1) {\n return 'Edge';\n }\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n if (isMSIE || isTrident) {\n return 'IE';\n }\n if (window.chrome) {\n return 'Chrome';\n }\n if (window.safari) {\n return 'Safari';\n }\n if (window.mozInnerScreenX) {\n return 'Firefox';\n }\n return 'Unknown';\n}\n","// This function is needed in initialization stages,\n// make sure it can be imported in isolation\n\nimport isElectron from './is-electron';\n\nexport default function isBrowser(): boolean {\n // Check if in browser by duck-typing Node context\n const isNode =\n // @ts-expect-error\n typeof process === 'object' && String(process) === '[object process]' && !process.browser;\n\n return !isNode || isElectron();\n}\n\n// document does not exist on worker thread\nexport function isBrowserMainThread(): boolean {\n return isBrowser() && typeof document !== 'undefined';\n}\n","// based on https://github.com/cheton/is-electron\n// https://github.com/electron/electron/issues/2288\n/* eslint-disable complexity */\nexport default function isElectron(mockUserAgent?: string): boolean {\n // Renderer process\n if (\n typeof window !== 'undefined' &&\n typeof window.process === 'object' &&\n // @ts-expect-error\n window.process.type === 'renderer'\n ) {\n return true;\n }\n // Main process\n if (\n typeof process !== 'undefined' &&\n typeof process.versions === 'object' &&\n Boolean(process.versions.electron)\n ) {\n return true;\n }\n // Detect the user agent when the `nodeIntegration` option is set to true\n const realUserAgent =\n typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent;\n const userAgent = mockUserAgent || realUserAgent;\n if (userAgent && userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n return false;\n}\n","import checkIfBrowser from '../lib/is-browser';\n\nexport {self, window, global, document, process, console} from '../lib/globals';\n\n// Extract injected version from package.json (injected by babel plugin)\n// @ts-expect-error\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nexport const isBrowser = checkIfBrowser();\n","// probe.gl, MIT license\n\nfunction getStorage(type): Storage {\n try {\n // @ts-expect-error\n const storage: Storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return storage;\n } catch (e) {\n return null;\n }\n}\n\n// Store keys in local storage via simple interface\nexport default class LocalStorage {\n storage: Storage;\n id: string;\n config: Record = {};\n\n constructor(id: string, defaultSettings: Record = {}, type = 'sessionStorage') {\n this.storage = getStorage(type);\n this.id = id;\n this.config = {};\n Object.assign(this.config, defaultSettings);\n this._loadConfiguration();\n }\n\n getConfiguration() {\n return this.config;\n }\n\n setConfiguration(configuration) {\n this.config = {};\n return this.updateConfiguration(configuration);\n }\n\n updateConfiguration(configuration) {\n Object.assign(this.config, configuration);\n if (this.storage) {\n const serialized = JSON.stringify(this.config);\n this.storage.setItem(this.id, serialized);\n }\n return this;\n }\n\n // Get config from persistent store, if available\n _loadConfiguration() {\n let configuration = {};\n if (this.storage) {\n const serializedConfiguration = this.storage.getItem(this.id);\n configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};\n }\n Object.assign(this.config, configuration);\n return this;\n }\n}\n","// TODO: Currently unused, keeping in case we want it later for log formatting\nexport function formatTime(ms: number): string {\n let formatted;\n if (ms < 10) {\n formatted = `${ms.toFixed(2)}ms`;\n } else if (ms < 100) {\n formatted = `${ms.toFixed(1)}ms`;\n } else if (ms < 1000) {\n formatted = `${ms.toFixed(0)}ms`;\n } else {\n formatted = `${(ms / 1000).toFixed(2)}s`;\n }\n return formatted;\n}\n\nexport function leftPad(string: string, length: number = 8): string {\n const padLength = Math.max(length - string.length, 0);\n return `${' '.repeat(padLength)}${string}`;\n}\n\nexport function rightPad(string: string, length: number = 8): string {\n const padLength = Math.max(length - string.length, 0);\n return `${string}${' '.repeat(padLength)}`;\n}\n\nexport function formatValue(v: unknown, opts: {isInteger?: boolean} = {}): string {\n const EPSILON = 1e-16;\n const {isInteger = false} = opts;\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n return formatArrayValue(v, opts);\n }\n if (!Number.isFinite(v)) {\n return String(v);\n }\n // @ts-expect-error\n if (Math.abs(v) < EPSILON) {\n return isInteger ? '0' : '0.';\n }\n if (isInteger) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n if (Math.abs(v) > 100 && Math.abs(v) < 10000) {\n // @ts-expect-error\n return v.toFixed(0);\n }\n // @ts-expect-error\n const string = v.toPrecision(2);\n const decimal = string.indexOf('.0');\n return decimal === string.length - 2 ? string.slice(0, -1) : string;\n}\n\n/** Helper to formatValue */\nfunction formatArrayValue(v, opts) {\n const {maxElts = 16, size = 1} = opts;\n let string = '[';\n for (let i = 0; i < v.length && i < maxElts; ++i) {\n if (i > 0) {\n string += `,${i % size === 0 ? ' ' : ''}`;\n }\n string += formatValue(v[i], opts);\n }\n const terminator = v.length > maxElts ? '...' : ']';\n return `${string}${terminator}`;\n}\n\n/** Inspired by https://github.com/hughsk/console-image (MIT license) */\nexport function formatImage(image, message, scale, maxWidth = 600) {\n const imageUrl = image.src.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n\n if (image.width > maxWidth) {\n scale = Math.min(scale, maxWidth / image.width);\n }\n\n const width = image.width * scale;\n const height = image.height * scale;\n\n const style = [\n 'font-size:1px;',\n `padding:${Math.floor(height / 2)}px ${Math.floor(width / 2)}px;`,\n `line-height:${height}px;`,\n `background:url(${imageUrl});`,\n `background-size:${width}px ${height}px;`,\n 'color:transparent;'\n ].join('');\n\n return [`${message} %c+`, style];\n}\n","import {isBrowser} from '@probe.gl/env';\n\nexport enum COLOR {\n BLACK = 30,\n RED = 31,\n GREEN = 32,\n YELLOW = 33,\n BLUE = 34,\n MAGENTA = 35,\n CYAN = 36,\n WHITE = 37,\n\n BRIGHT_BLACK = 90,\n BRIGHT_RED = 91,\n BRIGHT_GREEN = 92,\n BRIGHT_YELLOW = 93,\n BRIGHT_BLUE = 94,\n BRIGHT_MAGENTA = 95,\n BRIGHT_CYAN = 96,\n BRIGHT_WHITE = 97\n}\n\nfunction getColor(color): number {\n return typeof color === 'string' ? COLOR[color.toUpperCase()] || COLOR.WHITE : color;\n}\n\nexport function addColor(string, color, background?): string {\n if (!isBrowser && typeof string === 'string') {\n if (color) {\n color = getColor(color);\n string = `\\u001b[${color}m${string}\\u001b[39m`;\n }\n if (background) {\n // background colors values are +10\n color = getColor(background);\n string = `\\u001b[${background + 10}m${string}\\u001b[49m`;\n }\n }\n return string;\n}\n","export default function assert(condition: unknown, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n","/* eslint-disable no-restricted-globals */\nconst globals = {\n self: typeof self !== 'undefined' && self,\n window: typeof window !== 'undefined' && window,\n global: typeof global !== 'undefined' && global,\n document: typeof document !== 'undefined' && document,\n process: typeof process === 'object' && process\n};\n\nconst global_ = globalThis;\nconst self_ = globals.self || globals.window || globals.global;\nconst window_ = globals.window || globals.self || globals.global;\nconst document_ = globals.document || {};\nconst process_ = globals.process || {};\nconst console_ = console;\n\nexport {\n self_ as self,\n window_ as window,\n global_ as global,\n document_ as document,\n process_ as process,\n console_ as console\n};\n","// probe.gl, MIT license\n\nimport {window, process, isBrowser} from '@probe.gl/env';\n\n/** Get best timer available. */\nexport function getHiResTimestamp() {\n let timestamp;\n if (isBrowser && 'performance' in window) {\n timestamp = window?.performance?.now?.();\n } else if ('hrtime' in process) {\n // @ts-ignore\n const timeParts = process?.hrtime?.();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n","// probe.gl, MIT license\n\n/* eslint-disable no-console */\nimport {VERSION, isBrowser} from '@probe.gl/env';\nimport LocalStorage from './utils/local-storage';\nimport {formatImage, formatTime, leftPad} from './utils/formatters';\nimport {addColor} from './utils/color';\nimport {autobind} from './utils/autobind';\nimport assert from './utils/assert';\nimport {getHiResTimestamp} from './utils/hi-res-timestamp';\nimport * as asciify from './node/node-asciify-image';\n\n// Instrumentation in other packages may override console methods, so preserve them here\nconst originalConsole = {\n debug: isBrowser ? console.debug || console.log : console.log,\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error\n};\n\ntype Table = Record;\n\ntype LogFunction = () => void;\n\ntype LogSettings = {\n enabled?: boolean;\n level?: number;\n [key: string]: any;\n};\n\nconst DEFAULT_SETTINGS: Required = {\n enabled: true,\n level: 0\n};\n\nfunction noop() {} // eslint-disable-line @typescript-eslint/no-empty-function\n\nconst cache = {};\nconst ONCE = {once: true};\n\n// A console wrapper\n\nexport default class Log {\n static VERSION = VERSION;\n\n id: string;\n VERSION: string = VERSION;\n _startTs: number = getHiResTimestamp();\n _deltaTs: number = getHiResTimestamp();\n _storage: LocalStorage;\n userData = {};\n\n // TODO - fix support from throttling groups\n LOG_THROTTLE_TIMEOUT: number = 0; // Time before throttled messages are logged again\n\n constructor({id} = {id: ''}) {\n this.id = id;\n this._storage = new LocalStorage(`__probe-${this.id}__`, DEFAULT_SETTINGS);\n this.userData = {};\n\n this.timeStamp(`${this.id} started`);\n\n autobind(this);\n Object.seal(this);\n }\n\n set level(newLevel: number) {\n this.setLevel(newLevel);\n }\n\n get level(): number {\n return this.getLevel();\n }\n\n isEnabled(): boolean {\n return this._storage.config.enabled;\n }\n\n getLevel(): number {\n return this._storage.config.level;\n }\n\n /** @return {Number} milliseconds, with fractions */\n getTotal() {\n return Number((getHiResTimestamp() - this._startTs).toPrecision(10));\n }\n\n /** @return {Number} milliseconds, with fractions */\n getDelta() {\n return Number((getHiResTimestamp() - this._deltaTs).toPrecision(10));\n }\n\n /** @deprecated use logLevel */\n set priority(newPriority) {\n this.level = newPriority;\n }\n\n /** @deprecated use logLevel */\n get priority() {\n return this.level;\n }\n\n /** @deprecated use logLevel */\n getPriority() {\n return this.level;\n }\n\n // Configure\n\n enable(enabled: boolean = true): this {\n this._storage.updateConfiguration({enabled});\n return this;\n }\n\n setLevel(level: number): this {\n this._storage.updateConfiguration({level});\n return this;\n }\n\n /** return the current status of the setting */\n get(setting: string): any {\n return this._storage.config[setting];\n }\n\n // update the status of the setting\n set(setting: string, value: any): void {\n this._storage.updateConfiguration({[setting]: value});\n }\n\n /** Logs the current settings as a table */\n settings(): void {\n if (console.table) {\n console.table(this._storage.config);\n } else {\n console.log(this._storage.config);\n }\n }\n\n // Unconditional logging\n\n assert(condition: unknown, message?: string): asserts condition {\n assert(condition, message);\n }\n\n /** Warn, but only once, no console flooding */\n warn(message: string, ...args): LogFunction;\n warn(message: string): LogFunction {\n return this._getLogFunction(0, message, originalConsole.warn, arguments, ONCE);\n }\n\n /** Print an error */\n error(message: string, ...args): LogFunction;\n error(message: string): LogFunction {\n return this._getLogFunction(0, message, originalConsole.error, arguments);\n }\n\n /** Print a deprecation warning */\n deprecated(oldUsage: string, newUsage: string): LogFunction {\n return this.warn(`\\`${oldUsage}\\` is deprecated and will be removed \\\nin a later version. Use \\`${newUsage}\\` instead`);\n }\n\n /** Print a removal warning */\n removed(oldUsage: string, newUsage: string): LogFunction {\n return this.error(`\\`${oldUsage}\\` has been removed. Use \\`${newUsage}\\` instead`);\n }\n\n // Conditional logging\n\n /** Log to a group */\n probe(logLevel, message?, ...args): LogFunction;\n probe(logLevel, message?): LogFunction {\n return this._getLogFunction(logLevel, message, originalConsole.log, arguments, {\n time: true,\n once: true\n });\n }\n\n /** Log a debug message */\n log(logLevel, message?, ...args): LogFunction;\n log(logLevel, message?): LogFunction {\n return this._getLogFunction(logLevel, message, originalConsole.debug, arguments);\n }\n\n /** Log a normal message */\n info(logLevel, message?, ...args): LogFunction;\n info(logLevel, message?): LogFunction {\n return this._getLogFunction(logLevel, message, console.info, arguments);\n }\n\n /** Log a normal message, but only once, no console flooding */\n once(logLevel, message?, ...args): LogFunction;\n once(logLevel, message?, ...args) {\n return this._getLogFunction(\n logLevel,\n message,\n originalConsole.debug || originalConsole.info,\n arguments,\n ONCE\n );\n }\n\n /** Logs an object as a table */\n table(logLevel, table?, columns?): LogFunction {\n if (table) {\n // @ts-expect-error Not clear how this works, columns being passed as arguments\n return this._getLogFunction(logLevel, table, console.table || noop, columns && [columns], {\n tag: getTableHeader(table)\n });\n }\n return noop;\n }\n\n /** logs an image under Chrome */\n image({logLevel, priority, image, message = '', scale = 1}): LogFunction {\n if (!this._shouldLog(logLevel || priority)) {\n return noop;\n }\n return isBrowser\n ? logImageInBrowser({image, message, scale})\n : logImageInNode({image, message, scale});\n }\n\n time(logLevel, message) {\n return this._getLogFunction(logLevel, message, console.time ? console.time : console.info);\n }\n\n timeEnd(logLevel, message) {\n return this._getLogFunction(\n logLevel,\n message,\n console.timeEnd ? console.timeEnd : console.info\n );\n }\n\n timeStamp(logLevel, message?) {\n return this._getLogFunction(logLevel, message, console.timeStamp || noop);\n }\n\n group(logLevel, message, opts = {collapsed: false}) {\n const options = normalizeArguments({logLevel, message, opts});\n const {collapsed} = opts;\n // @ts-expect-error\n options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;\n\n return this._getLogFunction(options);\n }\n\n groupCollapsed(logLevel, message, opts = {}) {\n return this.group(logLevel, message, Object.assign({}, opts, {collapsed: true}));\n }\n\n groupEnd(logLevel) {\n return this._getLogFunction(logLevel, '', console.groupEnd || noop);\n }\n\n // EXPERIMENTAL\n\n withGroup(logLevel: number, message: string, func: Function): void {\n this.group(logLevel, message)();\n\n try {\n func();\n } finally {\n this.groupEnd(logLevel)();\n }\n }\n\n trace(): void {\n if (console.trace) {\n console.trace();\n }\n }\n\n // PRIVATE METHODS\n\n /** Deduces log level from a variety of arguments */\n _shouldLog(logLevel: unknown): boolean {\n return this.isEnabled() && this.getLevel() >= normalizeLogLevel(logLevel);\n }\n\n _getLogFunction(\n logLevel: unknown,\n message?: unknown,\n method?: Function,\n args?: IArguments,\n opts?: Record\n ): LogFunction {\n if (this._shouldLog(logLevel)) {\n // normalized opts + timings\n opts = normalizeArguments({logLevel, message, args, opts});\n method = method || opts.method;\n assert(method);\n\n opts.total = this.getTotal();\n opts.delta = this.getDelta();\n // reset delta timer\n this._deltaTs = getHiResTimestamp();\n\n const tag = opts.tag || opts.message;\n\n if (opts.once) {\n if (!cache[tag]) {\n cache[tag] = getHiResTimestamp();\n } else {\n return noop;\n }\n }\n\n // TODO - Make throttling work with groups\n // if (opts.nothrottle || !throttle(tag, this.LOG_THROTTLE_TIMEOUT)) {\n // return noop;\n // }\n\n message = decorateMessage(this.id, opts.message, opts);\n\n // Bind console function so that it can be called after being returned\n return method.bind(console, message, ...opts.args);\n }\n return noop;\n }\n}\n\n/**\n * Get logLevel from first argument:\n * - log(logLevel, message, args) => logLevel\n * - log(message, args) => 0\n * - log({logLevel, ...}, message, args) => logLevel\n * - log({logLevel, message, args}) => logLevel\n */\nfunction normalizeLogLevel(logLevel: unknown): number {\n if (!logLevel) {\n return 0;\n }\n let resolvedLevel;\n\n switch (typeof logLevel) {\n case 'number':\n resolvedLevel = logLevel;\n break;\n\n case 'object':\n // Backward compatibility\n // TODO - deprecate `priority`\n // @ts-expect-error\n resolvedLevel = logLevel.logLevel || logLevel.priority || 0;\n break;\n\n default:\n return 0;\n }\n // 'log level must be a number'\n assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);\n\n return resolvedLevel;\n}\n\n/**\n * \"Normalizes\" the various argument patterns into an object with known types\n * - log(logLevel, message, args) => {logLevel, message, args}\n * - log(message, args) => {logLevel: 0, message, args}\n * - log({logLevel, ...}, message, args) => {logLevel, message, args}\n * - log({logLevel, message, args}) => {logLevel, message, args}\n */\nexport function normalizeArguments(opts: {\n logLevel;\n message;\n collapsed?: boolean;\n args?: IArguments;\n opts?;\n}): {\n logLevel: number;\n message: string;\n args: any[];\n} {\n const {logLevel, message} = opts;\n opts.logLevel = normalizeLogLevel(logLevel);\n\n // We use `arguments` instead of rest parameters (...args) because IE\n // does not support the syntax. Rest parameters is transpiled to code with\n // perf impact. Doing it here instead avoids constructing args when logging is\n // disabled.\n // TODO - remove when/if IE support is dropped\n const args: any[] = opts.args ? Array.from(opts.args) : [];\n // args should only contain arguments that appear after `message`\n // eslint-disable-next-line no-empty\n while (args.length && args.shift() !== message) {}\n\n switch (typeof logLevel) {\n case 'string':\n case 'function':\n if (message !== undefined) {\n args.unshift(message);\n }\n opts.message = logLevel;\n break;\n\n case 'object':\n Object.assign(opts, logLevel);\n break;\n\n default:\n }\n\n // Resolve functions into strings by calling them\n if (typeof opts.message === 'function') {\n opts.message = opts.message();\n }\n const messageType = typeof opts.message;\n // 'log message must be a string' or object\n assert(messageType === 'string' || messageType === 'object');\n\n // original opts + normalized opts + opts arg + fixed up message\n return Object.assign(opts, {args}, opts.opts);\n}\n\nfunction decorateMessage(id, message, opts) {\n if (typeof message === 'string') {\n const time = opts.time ? leftPad(formatTime(opts.total)) : '';\n message = opts.time ? `${id}: ${time} ${message}` : `${id}: ${message}`;\n message = addColor(message, opts.color, opts.background);\n }\n return message;\n}\n\n/** Use the asciify module to log an image under node.js */\nfunction logImageInNode({image, message = '', scale = 1}) {\n asciify.nodeAsciifyImage({image, message, scale});\n return noop;\n}\n\nfunction logImageInBrowser({image, message = '', scale = 1}) {\n if (typeof image === 'string') {\n const img = new Image();\n img.onload = () => {\n const args = formatImage(img, message, scale);\n console.log(...args);\n };\n img.src = image;\n return noop;\n }\n const element = image.nodeName || '';\n if (element.toLowerCase() === 'img') {\n console.log(...formatImage(image, message, scale));\n return noop;\n }\n if (element.toLowerCase() === 'canvas') {\n const img = new Image();\n img.onload = () => console.log(...formatImage(img, message, scale));\n img.src = image.toDataURL();\n return noop;\n }\n return noop;\n}\n\nfunction getTableHeader(table: Table): string {\n for (const key in table) {\n for (const title in table[key]) {\n return title || 'untitled';\n }\n }\n return 'empty';\n}\n","// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/**\n * Binds the \"this\" argument of all functions on a class instance to the instance\n * @param obj - class instance (typically a react component)\n */\nexport function autobind(obj: object, predefined = ['constructor']): void {\n const proto = Object.getPrototypeOf(obj);\n const propNames = Object.getOwnPropertyNames(proto);\n for (const key of propNames) {\n if (typeof obj[key] === 'function') {\n if (!predefined.find(name => key === name)) {\n obj[key] = obj[key].bind(obj);\n }\n }\n }\n}\n","// Copyright (c) 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nexport default function getHiResTimestamp(): number {\n let timestamp;\n // Get best timer available.\n if (typeof window !== 'undefined' && window.performance) {\n timestamp = window.performance.now();\n } else if (typeof process !== 'undefined' && process.hrtime) {\n const timeParts = process.hrtime();\n timestamp = timeParts[0] * 1000 + timeParts[1] / 1e6;\n } else {\n timestamp = Date.now();\n }\n\n return timestamp;\n}\n","import getHiResTimestamp from '../utils/hi-res-timestamp';\n\nexport default class Stat {\n readonly name: string;\n readonly type: string;\n sampleSize: number = 1;\n time: number;\n count: number;\n samples: number;\n lastTiming: number;\n lastSampleTime: number;\n lastSampleCount: number;\n\n _count: number = 0;\n _time: number = 0;\n _samples: number = 0;\n _startTime: number = 0;\n _timerPending: boolean = false;\n\n constructor(name: string, type?: string) {\n this.name = name;\n this.type = type;\n this.reset();\n }\n\n setSampleSize(samples: number): this {\n this.sampleSize = samples;\n return this;\n }\n\n /** Call to increment count (+1) */\n incrementCount(): this {\n this.addCount(1);\n\n return this;\n }\n\n /** Call to decrement count (-1) */\n decrementCount(): this {\n this.subtractCount(1);\n\n return this;\n }\n\n /** Increase count */\n addCount(value: number): this {\n this._count += value;\n this._samples++;\n this._checkSampling();\n\n return this;\n }\n\n /** Decrease count */\n subtractCount(value: number): this {\n this._count -= value;\n this._samples++;\n this._checkSampling();\n\n return this;\n }\n\n /** Add an arbitrary timing and bump the count */\n addTime(time: number): this {\n this._time += time;\n this.lastTiming = time;\n this._samples++;\n this._checkSampling();\n\n return this;\n }\n\n /** Start a timer */\n timeStart(): this {\n this._startTime = getHiResTimestamp();\n this._timerPending = true;\n\n return this;\n }\n\n /** End a timer. Adds to time and bumps the timing count. */\n timeEnd(): this {\n if (!this._timerPending) {\n return this;\n }\n this.addTime(getHiResTimestamp() - this._startTime);\n this._timerPending = false;\n this._checkSampling();\n\n return this;\n }\n\n getSampleAverageCount(): number {\n return this.sampleSize > 0 ? this.lastSampleCount / this.sampleSize : 0;\n }\n\n /** Calculate average time / count for the previous window */\n getSampleAverageTime(): number {\n return this.sampleSize > 0 ? this.lastSampleTime / this.sampleSize : 0;\n }\n\n /** Calculate counts per second for the previous window */\n getSampleHz(): number {\n return this.lastSampleTime > 0 ? this.sampleSize / (this.lastSampleTime / 1000) : 0;\n }\n\n getAverageCount(): number {\n return this.samples > 0 ? this.count / this.samples : 0;\n }\n\n /** Calculate average time / count */\n getAverageTime(): number {\n return this.samples > 0 ? this.time / this.samples : 0;\n }\n\n /** Calculate counts per second */\n getHz(): number {\n return this.time > 0 ? this.samples / (this.time / 1000) : 0;\n }\n\n reset(): this {\n this.time = 0;\n this.count = 0;\n this.samples = 0;\n this.lastTiming = 0;\n this.lastSampleTime = 0;\n this.lastSampleCount = 0;\n this._count = 0;\n this._time = 0;\n this._samples = 0;\n this._startTime = 0;\n this._timerPending = false;\n\n return this;\n }\n\n _checkSampling(): void {\n if (this._samples === this.sampleSize) {\n this.lastSampleTime = this._time;\n this.lastSampleCount = this._count;\n this.count += this._count;\n this.time += this._time;\n this.samples += this._samples;\n this._time = 0;\n this._count = 0;\n this._samples = 0;\n }\n }\n}\n","import Stat from './stat';\n\n/** A \"bag\" of `Stat` objects, can be visualized using `StatsWidget` */\nexport default class Stats {\n readonly id: string;\n readonly stats: Record = {};\n\n constructor(options: {id: string; stats?: Stats | Stat[] | {name: string; type?: string}[]}) {\n this.id = options.id;\n this.stats = {};\n\n this._initializeStats(options.stats);\n\n Object.seal(this);\n }\n\n /** Acquire a stat. Create if it doesn't exist. */\n get(name: string, type: string = 'count'): Stat {\n return this._getOrCreate({name, type});\n }\n\n get size(): number {\n return Object.keys(this.stats).length;\n }\n\n /** Reset all stats */\n reset(): this {\n for (const key in this.stats) {\n this.stats[key].reset();\n }\n\n return this;\n }\n\n forEach(fn: (stat: Stat) => void): void {\n for (const key in this.stats) {\n fn(this.stats[key]);\n }\n }\n\n getTable(): Record<\n string,\n {\n time: number;\n count: number;\n average: number;\n hz: number;\n }\n > {\n const table = {};\n this.forEach(stat => {\n table[stat.name] = {\n time: stat.time || 0,\n count: stat.count || 0,\n average: stat.getAverageTime() || 0,\n hz: stat.getHz() || 0\n };\n });\n\n return table;\n }\n\n _initializeStats(stats: Stats | Stat[] | {name: string; type?: string}[] = []): void {\n stats.forEach(stat => this._getOrCreate(stat));\n }\n\n _getOrCreate(stat): Stat {\n if (!stat || !stat.name) {\n return null;\n }\n\n const {name, type} = stat;\n if (!this.stats[name]) {\n if (stat instanceof Stat) {\n this.stats[name] = stat;\n } else {\n this.stats[name] = new Stat(name, type);\n }\n }\n return this.stats[name];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\n// Note: change RADIUS => earthRadius\nvar RADIUS = 6378137;\n/**\n * Takes one or more features and returns their area in square meters.\n *\n * @name area\n * @param {GeoJSON} geojson input GeoJSON feature(s)\n * @returns {number} area in square meters\n * @example\n * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);\n *\n * var area = turf.area(polygon);\n *\n * //addToMap\n * var addToMap = [polygon]\n * polygon.properties.area = area\n */\nfunction area(geojson) {\n return meta_1.geomReduce(geojson, function (value, geom) {\n return value + calculateArea(geom);\n }, 0);\n}\nexports.default = area;\n/**\n * Calculate Area\n *\n * @private\n * @param {Geometry} geom GeoJSON Geometries\n * @returns {number} area\n */\nfunction calculateArea(geom) {\n var total = 0;\n var i;\n switch (geom.type) {\n case \"Polygon\":\n return polygonArea(geom.coordinates);\n case \"MultiPolygon\":\n for (i = 0; i < geom.coordinates.length; i++) {\n total += polygonArea(geom.coordinates[i]);\n }\n return total;\n case \"Point\":\n case \"MultiPoint\":\n case \"LineString\":\n case \"MultiLineString\":\n return 0;\n }\n return 0;\n}\nfunction polygonArea(coords) {\n var total = 0;\n if (coords && coords.length > 0) {\n total += Math.abs(ringArea(coords[0]));\n for (var i = 1; i < coords.length; i++) {\n total -= Math.abs(ringArea(coords[i]));\n }\n }\n return total;\n}\n/**\n * @private\n * Calculate the approximate area of the polygon were it projected onto the earth.\n * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative.\n *\n * Reference:\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for Polygons on a Sphere\",\n * JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007 https://trs.jpl.nasa.gov/handle/2014/40409\n *\n * @param {Array>} coords Ring Coordinates\n * @returns {number} The approximate signed geodesic area of the polygon in square meters.\n */\nfunction ringArea(coords) {\n var p1;\n var p2;\n var p3;\n var lowerIndex;\n var middleIndex;\n var upperIndex;\n var i;\n var total = 0;\n var coordsLength = coords.length;\n if (coordsLength > 2) {\n for (i = 0; i < coordsLength; i++) {\n if (i === coordsLength - 2) {\n // i = N-2\n lowerIndex = coordsLength - 2;\n middleIndex = coordsLength - 1;\n upperIndex = 0;\n }\n else if (i === coordsLength - 1) {\n // i = N-1\n lowerIndex = coordsLength - 1;\n middleIndex = 0;\n upperIndex = 1;\n }\n else {\n // i = 0 to N-3\n lowerIndex = i;\n middleIndex = i + 1;\n upperIndex = i + 2;\n }\n p1 = coords[lowerIndex];\n p2 = coords[middleIndex];\n p3 = coords[upperIndex];\n total += (rad(p3[0]) - rad(p1[0])) * Math.sin(rad(p2[1]));\n }\n total = (total * RADIUS * RADIUS) / 2;\n }\n return total;\n}\nfunction rad(num) {\n return (num * Math.PI) / 180;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @name bboxPolygon\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {Properties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nfunction bboxPolygon(bbox, options) {\n if (options === void 0) { options = {}; }\n // Convert BBox positions to Numbers\n // No performance loss for including Number()\n // https://github.com/Turfjs/turf/issues/1119\n var west = Number(bbox[0]);\n var south = Number(bbox[1]);\n var east = Number(bbox[2]);\n var north = Number(bbox[3]);\n if (bbox.length === 6) {\n throw new Error(\"@turf/bbox-polygon does not support BBox with 6 positions\");\n }\n var lowLeft = [west, south];\n var topLeft = [west, north];\n var topRight = [east, north];\n var lowRight = [east, south];\n return helpers_1.polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options.properties, { bbox: bbox, id: options.id });\n}\nexports.default = bboxPolygon;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n meta_1.coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nbbox[\"default\"] = bbox;\nexports.default = bbox;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n// http://en.wikipedia.org/wiki/Haversine_formula\n// http://www.movable-type.co.uk/scripts/latlong.html\n/**\n * Takes two {@link Point|points} and finds the geographic bearing between them,\n * i.e. the angle measured in degrees from the north line (0 degrees)\n *\n * @name bearing\n * @param {Coord} start starting Point\n * @param {Coord} end ending Point\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.final=false] calculates the final bearing if true\n * @returns {number} bearing in decimal degrees, between -180 and 180 degrees (positive clockwise)\n * @example\n * var point1 = turf.point([-75.343, 39.984]);\n * var point2 = turf.point([-75.534, 39.123]);\n *\n * var bearing = turf.bearing(point1, point2);\n *\n * //addToMap\n * var addToMap = [point1, point2]\n * point1.properties['marker-color'] = '#f00'\n * point2.properties['marker-color'] = '#0f0'\n * point1.properties.bearing = bearing\n */\nfunction bearing(start, end, options) {\n if (options === void 0) { options = {}; }\n // Reverse calculation\n if (options.final === true) {\n return calculateFinalBearing(start, end);\n }\n var coordinates1 = invariant_1.getCoord(start);\n var coordinates2 = invariant_1.getCoord(end);\n var lon1 = helpers_1.degreesToRadians(coordinates1[0]);\n var lon2 = helpers_1.degreesToRadians(coordinates2[0]);\n var lat1 = helpers_1.degreesToRadians(coordinates1[1]);\n var lat2 = helpers_1.degreesToRadians(coordinates2[1]);\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) -\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n return helpers_1.radiansToDegrees(Math.atan2(a, b));\n}\nexports.default = bearing;\n/**\n * Calculates Final Bearing\n *\n * @private\n * @param {Coord} start starting Point\n * @param {Coord} end ending Point\n * @returns {number} bearing\n */\nfunction calculateFinalBearing(start, end) {\n // Swap start & end\n var bear = bearing(end, start);\n bear = (bear + 180) % 360;\n return bear;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.\n *\n * @name booleanClockwise\n * @param {Feature|LineString|Array>} line to be evaluated\n * @returns {boolean} true/false\n * @example\n * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);\n * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);\n *\n * turf.booleanClockwise(clockwiseRing)\n * //=true\n * turf.booleanClockwise(counterClockwiseRing)\n * //=false\n */\nfunction booleanClockwise(line) {\n var ring = invariant_1.getCoords(line);\n var sum = 0;\n var i = 1;\n var prev;\n var cur;\n while (i < ring.length) {\n prev = cur || ring[0];\n cur = ring[i];\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n i++;\n }\n return sum > 0;\n}\nexports.default = booleanClockwise;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n * [-81, 41],\n * [-81, 47],\n * [-72, 47],\n * [-72, 41],\n * [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nfunction booleanPointInPolygon(point, polygon, options) {\n if (options === void 0) { options = {}; }\n // validation\n if (!point) {\n throw new Error(\"point is required\");\n }\n if (!polygon) {\n throw new Error(\"polygon is required\");\n }\n var pt = invariant_1.getCoord(point);\n var geom = invariant_1.getGeom(polygon);\n var type = geom.type;\n var bbox = polygon.bbox;\n var polys = geom.coordinates;\n // Quick elimination if point is not inside bbox\n if (bbox && inBBox(pt, bbox) === false) {\n return false;\n }\n // normalize to multipolygon\n if (type === \"Polygon\") {\n polys = [polys];\n }\n var insidePoly = false;\n for (var i = 0; i < polys.length && !insidePoly; i++) {\n // check if it is in the outer ring first\n if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n var inHole = false;\n var k = 1;\n // check for the point in any of the holes\n while (k < polys[i].length && !inHole) {\n if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n inHole = true;\n }\n k++;\n }\n if (!inHole) {\n insidePoly = true;\n }\n }\n }\n return insidePoly;\n}\nexports.default = booleanPointInPolygon;\n/**\n * inRing\n *\n * @private\n * @param {Array} pt [x,y]\n * @param {Array>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n var isInside = false;\n if (ring[0][0] === ring[ring.length - 1][0] &&\n ring[0][1] === ring[ring.length - 1][1]) {\n ring = ring.slice(0, ring.length - 1);\n }\n for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n var xi = ring[i][0];\n var yi = ring[i][1];\n var xj = ring[j][0];\n var yj = ring[j][1];\n var onBoundary = pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0 &&\n (xi - pt[0]) * (xj - pt[0]) <= 0 &&\n (yi - pt[1]) * (yj - pt[1]) <= 0;\n if (onBoundary) {\n return !ignoreBoundary;\n }\n var intersect = yi > pt[1] !== yj > pt[1] &&\n pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n return (bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]);\n}\n","'use strict';\n\nvar center = require('@turf/center');\nvar turfJsts = require('turf-jsts');\nvar meta = require('@turf/meta');\nvar d3Geo = require('d3-geo');\nvar helpers = require('@turf/helpers');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar center__default = /*#__PURE__*/_interopDefaultLegacy(center);\n\n/**\n * Calculates a buffer for input features for a given radius. Units supported are miles, kilometers, and degrees.\n *\n * When using a negative radius, the resulting geometry may be invalid if\n * it's too small compared to the radius magnitude. If the input is a\n * FeatureCollection, only valid members will be returned in the output\n * FeatureCollection - i.e., the output collection may have fewer members than\n * the input, or even be empty.\n *\n * @name buffer\n * @param {FeatureCollection|Geometry|Feature} geojson input to be buffered\n * @param {number} radius distance to draw the buffer (negative values are allowed)\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] any of the options supported by turf units\n * @param {number} [options.steps=8] number of steps\n * @returns {FeatureCollection|Feature|undefined} buffered features\n * @example\n * var point = turf.point([-90.548630, 14.616599]);\n * var buffered = turf.buffer(point, 500, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [point, buffered]\n */\nfunction buffer(geojson, radius, options) {\n // Optional params\n options = options || {};\n\n // use user supplied options or default values\n var units = options.units || \"kilometers\";\n var steps = options.steps || 8;\n\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n if (typeof options !== \"object\") throw new Error(\"options must be an object\");\n if (typeof steps !== \"number\") throw new Error(\"steps must be an number\");\n\n // Allow negative buffers (\"erosion\") or zero-sized buffers (\"repair geometry\")\n if (radius === undefined) throw new Error(\"radius is required\");\n if (steps <= 0) throw new Error(\"steps must be greater than 0\");\n\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n meta.geomEach(geojson, function (geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered) results.push(buffered);\n });\n return helpers.featureCollection(results);\n case \"FeatureCollection\":\n meta.featureEach(geojson, function (feature) {\n var multiBuffered = bufferFeature(feature, radius, units, steps);\n if (multiBuffered) {\n meta.featureEach(multiBuffered, function (buffered) {\n if (buffered) results.push(buffered);\n });\n }\n });\n return helpers.featureCollection(results);\n }\n return bufferFeature(geojson, radius, units, steps);\n}\n\n/**\n * Buffer single Feature/Geometry\n *\n * @private\n * @param {Feature} geojson input to be buffered\n * @param {number} radius distance to draw the buffer\n * @param {string} [units='kilometers'] any of the options supported by turf units\n * @param {number} [steps=8] number of steps\n * @returns {Feature} buffered feature\n */\nfunction bufferFeature(geojson, radius, units, steps) {\n var properties = geojson.properties || {};\n var geometry = geojson.type === \"Feature\" ? geojson.geometry : geojson;\n\n // Geometry Types faster than jsts\n if (geometry.type === \"GeometryCollection\") {\n var results = [];\n meta.geomEach(geojson, function (geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered) results.push(buffered);\n });\n return helpers.featureCollection(results);\n }\n\n // Project GeoJSON to Azimuthal Equidistant projection (convert to Meters)\n var projection = defineProjection(geometry);\n var projected = {\n type: geometry.type,\n coordinates: projectCoords(geometry.coordinates, projection),\n };\n\n // JSTS buffer operation\n var reader = new turfJsts.GeoJSONReader();\n var geom = reader.read(projected);\n var distance = helpers.radiansToLength(helpers.lengthToRadians(radius, units), \"meters\");\n var buffered = turfJsts.BufferOp.bufferOp(geom, distance, steps);\n var writer = new turfJsts.GeoJSONWriter();\n buffered = writer.write(buffered);\n\n // Detect if empty geometries\n if (coordsIsNaN(buffered.coordinates)) return undefined;\n\n // Unproject coordinates (convert to Degrees)\n var result = {\n type: buffered.type,\n coordinates: unprojectCoords(buffered.coordinates, projection),\n };\n\n return helpers.feature(result, properties);\n}\n\n/**\n * Coordinates isNaN\n *\n * @private\n * @param {Array} coords GeoJSON Coordinates\n * @returns {boolean} if NaN exists\n */\nfunction coordsIsNaN(coords) {\n if (Array.isArray(coords[0])) return coordsIsNaN(coords[0]);\n return isNaN(coords[0]);\n}\n\n/**\n * Project coordinates to projection\n *\n * @private\n * @param {Array} coords to project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array} projected coordinates\n */\nfunction projectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj(coords);\n return coords.map(function (coord) {\n return projectCoords(coord, proj);\n });\n}\n\n/**\n * Un-Project coordinates to projection\n *\n * @private\n * @param {Array} coords to un-project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array} un-projected coordinates\n */\nfunction unprojectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj.invert(coords);\n return coords.map(function (coord) {\n return unprojectCoords(coord, proj);\n });\n}\n\n/**\n * Define Azimuthal Equidistant projection\n *\n * @private\n * @param {Geometry|Feature} geojson Base projection on center of GeoJSON\n * @returns {GeoProjection} D3 Geo Azimuthal Equidistant Projection\n */\nfunction defineProjection(geojson) {\n var coords = center__default['default'](geojson).geometry.coordinates;\n var rotation = [-coords[0], -coords[1]];\n return d3Geo.geoAzimuthalEquidistant().rotate(rotation).scale(helpers.earthRadius);\n}\n\nmodule.exports = buffer;\nmodule.exports.default = buffer;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bbox_1 = __importDefault(require(\"@turf/bbox\"));\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Takes a {@link Feature} or {@link FeatureCollection} and returns the absolute center point of all features.\n *\n * @name center\n * @param {GeoJSON} geojson GeoJSON to be centered\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Point\n * @param {Object} [options.bbox={}] Translate GeoJSON BBox to Point\n * @param {Object} [options.id={}] Translate GeoJSON Id to Point\n * @returns {Feature} a Point feature at the absolute center point of all input features\n * @example\n * var features = turf.points([\n * [-97.522259, 35.4691],\n * [-97.502754, 35.463455],\n * [-97.508269, 35.463245]\n * ]);\n *\n * var center = turf.center(features);\n *\n * //addToMap\n * var addToMap = [features, center]\n * center.properties['marker-size'] = 'large';\n * center.properties['marker-color'] = '#000';\n */\nfunction center(geojson, options) {\n if (options === void 0) { options = {}; }\n var ext = bbox_1.default(geojson);\n var x = (ext[0] + ext[2]) / 2;\n var y = (ext[1] + ext[3]) / 2;\n return helpers_1.point([x, y], options.properties, options);\n}\nexports.default = center;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Takes one or more features and calculates the centroid using the mean of all vertices.\n * This lessens the effect of small islands and artifacts when calculating the centroid of a set of polygons.\n *\n * @name centroid\n * @param {GeoJSON} geojson GeoJSON to be centered\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] an Object that is used as the {@link Feature}'s properties\n * @returns {Feature} the centroid of the input features\n * @example\n * var polygon = turf.polygon([[[-81, 41], [-88, 36], [-84, 31], [-80, 33], [-77, 39], [-81, 41]]]);\n *\n * var centroid = turf.centroid(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, centroid]\n */\nfunction centroid(geojson, options) {\n if (options === void 0) { options = {}; }\n var xSum = 0;\n var ySum = 0;\n var len = 0;\n meta_1.coordEach(geojson, function (coord) {\n xSum += coord[0];\n ySum += coord[1];\n len++;\n }, true);\n return helpers_1.point([xSum / len, ySum / len], options.properties);\n}\nexports.default = centroid;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar destination_1 = __importDefault(require(\"@turf/destination\"));\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Takes a {@link Point} and calculates the circle polygon given a radius in degrees, radians, miles, or kilometers; and steps for precision.\n *\n * @name circle\n * @param {Feature|number[]} center center point\n * @param {number} radius radius of the circle\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.steps=64] number of steps\n * @param {string} [options.units='kilometers'] miles, kilometers, degrees, or radians\n * @param {Object} [options.properties={}] properties\n * @returns {Feature} circle polygon\n * @example\n * var center = [-75.343, 39.984];\n * var radius = 5;\n * var options = {steps: 10, units: 'kilometers', properties: {foo: 'bar'}};\n * var circle = turf.circle(center, radius, options);\n *\n * //addToMap\n * var addToMap = [turf.point(center), circle]\n */\nfunction circle(center, radius, options) {\n if (options === void 0) { options = {}; }\n // default params\n var steps = options.steps || 64;\n var properties = options.properties\n ? options.properties\n : !Array.isArray(center) && center.type === \"Feature\" && center.properties\n ? center.properties\n : {};\n // main\n var coordinates = [];\n for (var i = 0; i < steps; i++) {\n coordinates.push(destination_1.default(center, radius, (i * -360) / steps, options).geometry\n .coordinates);\n }\n coordinates.push(coordinates[0]);\n return helpers_1.polygon([coordinates], properties);\n}\nexports.default = circle;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexports.default = clone;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// http://en.wikipedia.org/wiki/Haversine_formula\n// http://www.movable-type.co.uk/scripts/latlong.html\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Takes a {@link Point} and calculates the location of a destination point given a distance in\n * degrees, radians, miles, or kilometers; and bearing in degrees.\n * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.\n *\n * @name destination\n * @param {Coord} origin starting point\n * @param {number} distance distance from the origin point\n * @param {number} bearing ranging from -180 to 180\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] miles, kilometers, degrees, or radians\n * @param {Object} [options.properties={}] Translate properties to Point\n * @returns {Feature} destination point\n * @example\n * var point = turf.point([-75.343, 39.984]);\n * var distance = 50;\n * var bearing = 90;\n * var options = {units: 'miles'};\n *\n * var destination = turf.destination(point, distance, bearing, options);\n *\n * //addToMap\n * var addToMap = [point, destination]\n * destination.properties['marker-color'] = '#f00';\n * point.properties['marker-color'] = '#0f0';\n */\nfunction destination(origin, distance, bearing, options) {\n if (options === void 0) { options = {}; }\n // Handle input\n var coordinates1 = invariant_1.getCoord(origin);\n var longitude1 = helpers_1.degreesToRadians(coordinates1[0]);\n var latitude1 = helpers_1.degreesToRadians(coordinates1[1]);\n var bearingRad = helpers_1.degreesToRadians(bearing);\n var radians = helpers_1.lengthToRadians(distance, options.units);\n // Main\n var latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians) +\n Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad));\n var longitude2 = longitude1 +\n Math.atan2(Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1), Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2));\n var lng = helpers_1.radiansToDegrees(longitude2);\n var lat = helpers_1.radiansToDegrees(latitude2);\n return helpers_1.point([lng, lat], options.properties);\n}\nexports.default = destination;\n","'use strict';\n\nvar polygonClipping = require('polygon-clipping');\nvar helpers = require('@turf/helpers');\nvar invariant = require('@turf/invariant');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar polygonClipping__default = /*#__PURE__*/_interopDefaultLegacy(polygonClipping);\n\n/**\n * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.\n *\n * @name difference\n * @param {Feature} polygon1 input Polygon feature\n * @param {Feature} polygon2 Polygon feature to difference from polygon1\n * @returns {Feature|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)\n * @example\n * var polygon1 = turf.polygon([[\n * [128, -26],\n * [141, -26],\n * [141, -21],\n * [128, -21],\n * [128, -26]\n * ]], {\n * \"fill\": \"#F00\",\n * \"fill-opacity\": 0.1\n * });\n * var polygon2 = turf.polygon([[\n * [126, -28],\n * [140, -28],\n * [140, -20],\n * [126, -20],\n * [126, -28]\n * ]], {\n * \"fill\": \"#00F\",\n * \"fill-opacity\": 0.1\n * });\n *\n * var difference = turf.difference(polygon1, polygon2);\n *\n * //addToMap\n * var addToMap = [polygon1, polygon2, difference];\n */\nfunction difference(polygon1, polygon2) {\n var geom1 = invariant.getGeom(polygon1);\n var geom2 = invariant.getGeom(polygon2);\n var properties = polygon1.properties || {};\n\n var differenced = polygonClipping__default['default'].difference(\n geom1.coordinates,\n geom2.coordinates\n );\n if (differenced.length === 0) return null;\n if (differenced.length === 1) return helpers.polygon(differenced[0], properties);\n return helpers.multiPolygon(differenced, properties);\n}\n\nmodule.exports = difference;\nmodule.exports.default = difference;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\nvar helpers_1 = require(\"@turf/helpers\");\n//http://en.wikipedia.org/wiki/Haversine_formula\n//http://www.movable-type.co.uk/scripts/latlong.html\n/**\n * Calculates the distance between two {@link Point|points} in degrees, radians, miles, or kilometers.\n * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.\n *\n * @name distance\n * @param {Coord | Point} from origin point or coordinate\n * @param {Coord | Point} to destination point or coordinate\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @returns {number} distance between the two points\n * @example\n * var from = turf.point([-75.343, 39.984]);\n * var to = turf.point([-75.534, 39.123]);\n * var options = {units: 'miles'};\n *\n * var distance = turf.distance(from, to, options);\n *\n * //addToMap\n * var addToMap = [from, to];\n * from.properties.distance = distance;\n * to.properties.distance = distance;\n */\nfunction distance(from, to, options) {\n if (options === void 0) { options = {}; }\n var coordinates1 = invariant_1.getCoord(from);\n var coordinates2 = invariant_1.getCoord(to);\n var dLat = helpers_1.degreesToRadians(coordinates2[1] - coordinates1[1]);\n var dLon = helpers_1.degreesToRadians(coordinates2[0] - coordinates1[0]);\n var lat1 = helpers_1.degreesToRadians(coordinates1[1]);\n var lat2 = helpers_1.degreesToRadians(coordinates2[1]);\n var a = Math.pow(Math.sin(dLat / 2), 2) +\n Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);\n return helpers_1.radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), options.units);\n}\nexports.default = distance;\n","'use strict';\n\nvar helpers = require('@turf/helpers');\nvar rhumbDestination = require('@turf/rhumb-destination');\nvar transformRotate = require('@turf/transform-rotate');\nvar invariant = require('@turf/invariant');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar rhumbDestination__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDestination);\nvar transformRotate__default = /*#__PURE__*/_interopDefaultLegacy(transformRotate);\n\n/**\n * Takes a {@link Point} and calculates the ellipse polygon given two semi-axes expressed in variable units and steps for precision.\n *\n * @param {Coord} center center point\n * @param {number} xSemiAxis semi (major) axis of the ellipse along the x-axis\n * @param {number} ySemiAxis semi (minor) axis of the ellipse along the y-axis\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.angle=0] angle of rotation in decimal degrees, positive clockwise\n * @param {Coord} [options.pivot='origin'] point around which the rotation will be performed\n * @param {number} [options.steps=64] number of steps\n * @param {string} [options.units='kilometers'] unit of measurement for axes\n * @param {Object} [options.properties={}] properties\n * @returns {Feature} ellipse polygon\n * @example\n * var center = [-75, 40];\n * var xSemiAxis = 5;\n * var ySemiAxis = 2;\n * var ellipse = turf.ellipse(center, xSemiAxis, ySemiAxis);\n *\n * //addToMap\n * var addToMap = [turf.point(center), ellipse]\n */\nfunction ellipse(center, xSemiAxis, ySemiAxis, options) {\n // Optional params\n options = options || {};\n var steps = options.steps || 64;\n var units = options.units || \"kilometers\";\n var angle = options.angle || 0;\n var pivot = options.pivot || center;\n var properties = options.properties || center.properties || {};\n\n // validation\n if (!center) throw new Error(\"center is required\");\n if (!xSemiAxis) throw new Error(\"xSemiAxis is required\");\n if (!ySemiAxis) throw new Error(\"ySemiAxis is required\");\n if (!helpers.isObject(options)) throw new Error(\"options must be an object\");\n if (!helpers.isNumber(steps)) throw new Error(\"steps must be a number\");\n if (!helpers.isNumber(angle)) throw new Error(\"angle must be a number\");\n\n var centerCoords = invariant.getCoord(center);\n if (units === \"degrees\") {\n var angleRad = helpers.degreesToRadians(angle);\n } else {\n xSemiAxis = rhumbDestination__default['default'](center, xSemiAxis, 90, { units: units });\n ySemiAxis = rhumbDestination__default['default'](center, ySemiAxis, 0, { units: units });\n xSemiAxis = invariant.getCoord(xSemiAxis)[0] - centerCoords[0];\n ySemiAxis = invariant.getCoord(ySemiAxis)[1] - centerCoords[1];\n }\n\n var coordinates = [];\n for (var i = 0; i < steps; i += 1) {\n var stepAngle = (i * -360) / steps;\n var x =\n (xSemiAxis * ySemiAxis) /\n Math.sqrt(\n Math.pow(ySemiAxis, 2) +\n Math.pow(xSemiAxis, 2) * Math.pow(getTanDeg(stepAngle), 2)\n );\n var y =\n (xSemiAxis * ySemiAxis) /\n Math.sqrt(\n Math.pow(xSemiAxis, 2) +\n Math.pow(ySemiAxis, 2) / Math.pow(getTanDeg(stepAngle), 2)\n );\n\n if (stepAngle < -90 && stepAngle >= -270) x = -x;\n if (stepAngle < -180 && stepAngle >= -360) y = -y;\n if (units === \"degrees\") {\n var newx = x * Math.cos(angleRad) + y * Math.sin(angleRad);\n var newy = y * Math.cos(angleRad) - x * Math.sin(angleRad);\n x = newx;\n y = newy;\n }\n\n coordinates.push([x + centerCoords[0], y + centerCoords[1]]);\n }\n coordinates.push(coordinates[0]);\n if (units === \"degrees\") {\n return helpers.polygon([coordinates], properties);\n } else {\n return transformRotate__default['default'](helpers.polygon([coordinates], properties), angle, {\n pivot: pivot,\n });\n }\n}\n\n/**\n * Get Tan Degrees\n *\n * @private\n * @param {number} deg Degrees\n * @returns {number} Tan Degrees\n */\nfunction getTanDeg(deg) {\n var rad = (deg * Math.PI) / 180;\n return Math.tan(rad);\n}\n\nmodule.exports = ellipse;\nmodule.exports.default = ellipse;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexports.earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.factors = {\n centimeters: exports.earthRadius * 100,\n centimetres: exports.earthRadius * 100,\n degrees: exports.earthRadius / 111325,\n feet: exports.earthRadius * 3.28084,\n inches: exports.earthRadius * 39.37,\n kilometers: exports.earthRadius / 1000,\n kilometres: exports.earthRadius / 1000,\n meters: exports.earthRadius,\n metres: exports.earthRadius,\n miles: exports.earthRadius / 1609.344,\n millimeters: exports.earthRadius * 1000,\n millimetres: exports.earthRadius * 1000,\n nauticalmiles: exports.earthRadius / 1852,\n radians: 1,\n yards: exports.earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / exports.earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nfunction feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nexports.feature = feature;\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nfunction geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nexports.geometry = geometry;\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nfunction point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.point = point;\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nfunction points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\nexports.points = points;\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nfunction polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.polygon = polygon;\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nfunction polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\nexports.polygons = polygons;\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nfunction lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.lineString = lineString;\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nfunction lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\nexports.lineStrings = lineStrings;\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nfunction featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nexports.featureCollection = featureCollection;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nfunction multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiLineString = multiLineString;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nfunction multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiPoint = multiPoint;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nfunction multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\nexports.multiPolygon = multiPolygon;\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nfunction geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\nexports.geometryCollection = geometryCollection;\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nfunction round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nexports.round = round;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nfunction radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = exports.factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nexports.radiansToLength = radiansToLength;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nfunction lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = exports.factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nexports.lengthToRadians = lengthToRadians;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nexports.lengthToDegrees = lengthToDegrees;\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nfunction bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nexports.bearingToAzimuth = bearingToAzimuth;\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nfunction radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\nexports.radiansToDegrees = radiansToDegrees;\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nfunction degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\nexports.degreesToRadians = degreesToRadians;\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nfunction convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nexports.convertLength = convertLength;\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nfunction convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = exports.areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = exports.areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\nexports.convertArea = convertArea;\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nexports.isNumber = isNumber;\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nfunction isObject(input) {\n return !!input && input.constructor === Object;\n}\nexports.isObject = isObject;\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nexports.validateBBox = validateBBox;\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexports.validateId = validateId;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar polygon_clipping_1 = __importDefault(require(\"polygon-clipping\"));\n/**\n * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and\n * finds their polygonal intersection. If they don't intersect, returns null.\n *\n * @name intersect\n * @param {Feature} poly1 the first polygon or multipolygon\n * @param {Feature} poly2 the second polygon or multipolygon\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature\n * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or\n * {@link MultiPolygon}). If they do not share any area, returns `null`.\n * @example\n * var poly1 = turf.polygon([[\n * [-122.801742, 45.48565],\n * [-122.801742, 45.60491],\n * [-122.584762, 45.60491],\n * [-122.584762, 45.48565],\n * [-122.801742, 45.48565]\n * ]]);\n *\n * var poly2 = turf.polygon([[\n * [-122.520217, 45.535693],\n * [-122.64038, 45.553967],\n * [-122.720031, 45.526554],\n * [-122.669906, 45.507309],\n * [-122.723464, 45.446643],\n * [-122.532577, 45.408574],\n * [-122.487258, 45.477466],\n * [-122.520217, 45.535693]\n * ]]);\n *\n * var intersection = turf.intersect(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, intersection];\n */\nfunction intersect(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = invariant_1.getGeom(poly1);\n var geom2 = invariant_1.getGeom(poly2);\n var intersection = polygon_clipping_1.default.intersection(geom1.coordinates, geom2.coordinates);\n if (intersection.length === 0)\n return null;\n if (intersection.length === 1)\n return helpers_1.polygon(intersection[0], options.properties);\n return helpers_1.multiPolygon(intersection, options.properties);\n}\nexports.default = intersect;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers\n * @returns {Array} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nfunction getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\") {\n return coord.geometry.coordinates;\n }\n if (coord.type === \"Point\") {\n return coord.coordinates;\n }\n }\n if (Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nexports.getCoord = getCoord;\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nfunction getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\nexports.getCoords = getCoords;\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nfunction containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n helpers_1.isNumber(coordinates[0]) &&\n helpers_1.isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\nexports.containsNumber = containsNumber;\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\nexports.geojsonType = geojsonType;\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nfunction featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\nexports.featureOf = featureOf;\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\nexports.collectionOf = collectionOf;\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nfunction getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\nexports.getGeom = getGeom;\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nfunction getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\nexports.getType = getType;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar line_segment_1 = __importDefault(require(\"@turf/line-segment\"));\nvar meta_1 = require(\"@turf/meta\");\nvar geojson_rbush_1 = __importDefault(require(\"geojson-rbush\"));\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @name lineIntersect\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @returns {FeatureCollection} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect(line1, line2) {\n var unique = {};\n var results = [];\n // First, normalize geometries to features\n // Then, handle simple 2-vertex segments\n if (line1.type === \"LineString\") {\n line1 = helpers_1.feature(line1);\n }\n if (line2.type === \"LineString\") {\n line2 = helpers_1.feature(line2);\n }\n if (line1.type === \"Feature\" &&\n line2.type === \"Feature\" &&\n line1.geometry !== null &&\n line2.geometry !== null &&\n line1.geometry.type === \"LineString\" &&\n line2.geometry.type === \"LineString\" &&\n line1.geometry.coordinates.length === 2 &&\n line2.geometry.coordinates.length === 2) {\n var intersect = intersects(line1, line2);\n if (intersect) {\n results.push(intersect);\n }\n return helpers_1.featureCollection(results);\n }\n // Handles complex GeoJSON Geometries\n var tree = geojson_rbush_1.default();\n tree.load(line_segment_1.default(line2));\n meta_1.featureEach(line_segment_1.default(line1), function (segment) {\n meta_1.featureEach(tree.search(segment), function (match) {\n var intersect = intersects(segment, match);\n if (intersect) {\n // prevent duplicate points https://github.com/Turfjs/turf/issues/688\n var key = invariant_1.getCoords(intersect).join(\",\");\n if (!unique[key]) {\n unique[key] = true;\n results.push(intersect);\n }\n }\n });\n });\n return helpers_1.featureCollection(results);\n}\n/**\n * Find a point that intersects LineStrings with two coordinates each\n *\n * @private\n * @param {Feature} line1 GeoJSON LineString (Must only contain 2 coordinates)\n * @param {Feature} line2 GeoJSON LineString (Must only contain 2 coordinates)\n * @returns {Feature} intersecting GeoJSON Point\n */\nfunction intersects(line1, line2) {\n var coords1 = invariant_1.getCoords(line1);\n var coords2 = invariant_1.getCoords(line2);\n if (coords1.length !== 2) {\n throw new Error(\" line1 must only contain 2 coordinates\");\n }\n if (coords2.length !== 2) {\n throw new Error(\" line2 must only contain 2 coordinates\");\n }\n var x1 = coords1[0][0];\n var y1 = coords1[0][1];\n var x2 = coords1[1][0];\n var y2 = coords1[1][1];\n var x3 = coords2[0][0];\n var y3 = coords2[0][1];\n var x4 = coords2[1][0];\n var y4 = coords2[1][1];\n var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n var numeA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\n var numeB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\n if (denom === 0) {\n if (numeA === 0 && numeB === 0) {\n return null;\n }\n return null;\n }\n var uA = numeA / denom;\n var uB = numeB / denom;\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n var x = x1 + uA * (x2 - x1);\n var y = y1 + uA * (y2 - y1);\n return helpers_1.point([x, y]);\n }\n return null;\n}\nexports.default = lineIntersect;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a\n * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.\n *\n * @name lineSegment\n * @param {GeoJSON} geojson GeoJSON Polygon or LineString\n * @returns {FeatureCollection} 2-vertex line segments\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n * var segments = turf.lineSegment(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, segments]\n */\nfunction lineSegment(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n var results = [];\n meta_1.flattenEach(geojson, function (feature) {\n lineSegmentFeature(feature, results);\n });\n return helpers_1.featureCollection(results);\n}\n/**\n * Line Segment\n *\n * @private\n * @param {Feature} geojson Line or polygon feature\n * @param {Array} results push to results\n * @returns {void}\n */\nfunction lineSegmentFeature(geojson, results) {\n var coords = [];\n var geometry = geojson.geometry;\n if (geometry !== null) {\n switch (geometry.type) {\n case \"Polygon\":\n coords = invariant_1.getCoords(geometry);\n break;\n case \"LineString\":\n coords = [invariant_1.getCoords(geometry)];\n }\n coords.forEach(function (coord) {\n var segments = createSegments(coord, geojson.properties);\n segments.forEach(function (segment) {\n segment.id = results.length;\n results.push(segment);\n });\n });\n }\n}\n/**\n * Create Segments from LineString coordinates\n *\n * @private\n * @param {Array>} coords LineString coordinates\n * @param {*} properties GeoJSON properties\n * @returns {Array>} line segments\n */\nfunction createSegments(coords, properties) {\n var segments = [];\n coords.reduce(function (previousCoords, currentCoords) {\n var segment = helpers_1.lineString([previousCoords, currentCoords], properties);\n segment.bbox = bbox(previousCoords, currentCoords);\n segments.push(segment);\n return currentCoords;\n });\n return segments;\n}\n/**\n * Create BBox between two coordinates (faster than @turf/bbox)\n *\n * @private\n * @param {Array} coords1 Point coordinate\n * @param {Array} coords2 Point coordinate\n * @returns {BBox} [west, south, east, north]\n */\nfunction bbox(coords1, coords2) {\n var x1 = coords1[0];\n var y1 = coords1[1];\n var x2 = coords2[0];\n var y2 = coords2[1];\n var west = x1 < x2 ? x1 : x2;\n var south = y1 < y2 ? y1 : y2;\n var east = x1 > x2 ? x1 : x2;\n var north = y1 > y2 ? y1 : y2;\n return [west, south, east, north];\n}\nexports.default = lineSegment;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar helpers = require('@turf/helpers');\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n helpers.feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = helpers.lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n helpers.lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return helpers.lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return helpers.lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return helpers.lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return helpers.lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return helpers.point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return helpers.point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return helpers.point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return helpers.point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return helpers.point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexports.coordAll = coordAll;\nexports.coordEach = coordEach;\nexports.coordReduce = coordReduce;\nexports.featureEach = featureEach;\nexports.featureReduce = featureReduce;\nexports.findPoint = findPoint;\nexports.findSegment = findSegment;\nexports.flattenEach = flattenEach;\nexports.flattenReduce = flattenReduce;\nexports.geomEach = geomEach;\nexports.geomReduce = geomReduce;\nexports.lineEach = lineEach;\nexports.lineReduce = lineReduce;\nexports.propEach = propEach;\nexports.propReduce = propReduce;\nexports.segmentEach = segmentEach;\nexports.segmentReduce = segmentReduce;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bearing_1 = __importDefault(require(\"@turf/bearing\"));\nvar distance_1 = __importDefault(require(\"@turf/distance\"));\nvar destination_1 = __importDefault(require(\"@turf/destination\"));\nvar line_intersect_1 = __importDefault(require(\"@turf/line-intersect\"));\nvar meta_1 = require(\"@turf/meta\");\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Takes a {@link Point} and a {@link LineString} and calculates the closest Point on the (Multi)LineString.\n *\n * @name nearestPointOnLine\n * @param {Geometry|Feature} lines lines to snap to\n * @param {Geometry|Feature|number[]} pt point to snap from\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @returns {Feature} closest point on the `line` to `point`. The properties object will contain three values: `index`: closest point was found on nth line part, `dist`: distance between pt and the closest point, `location`: distance along the line between start and the closest point.\n * @example\n * var line = turf.lineString([\n * [-77.031669, 38.878605],\n * [-77.029609, 38.881946],\n * [-77.020339, 38.884084],\n * [-77.025661, 38.885821],\n * [-77.021884, 38.889563],\n * [-77.019824, 38.892368]\n * ]);\n * var pt = turf.point([-77.037076, 38.884017]);\n *\n * var snapped = turf.nearestPointOnLine(line, pt, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [line, pt, snapped];\n * snapped.properties['marker-color'] = '#00f';\n */\nfunction nearestPointOnLine(lines, pt, options) {\n if (options === void 0) { options = {}; }\n var closestPt = helpers_1.point([Infinity, Infinity], {\n dist: Infinity,\n });\n var length = 0.0;\n meta_1.flattenEach(lines, function (line) {\n var coords = invariant_1.getCoords(line);\n for (var i = 0; i < coords.length - 1; i++) {\n //start\n var start = helpers_1.point(coords[i]);\n start.properties.dist = distance_1.default(pt, start, options);\n //stop\n var stop_1 = helpers_1.point(coords[i + 1]);\n stop_1.properties.dist = distance_1.default(pt, stop_1, options);\n // sectionLength\n var sectionLength = distance_1.default(start, stop_1, options);\n //perpendicular\n var heightDistance = Math.max(start.properties.dist, stop_1.properties.dist);\n var direction = bearing_1.default(start, stop_1);\n var perpendicularPt1 = destination_1.default(pt, heightDistance, direction + 90, options);\n var perpendicularPt2 = destination_1.default(pt, heightDistance, direction - 90, options);\n var intersect = line_intersect_1.default(helpers_1.lineString([\n perpendicularPt1.geometry.coordinates,\n perpendicularPt2.geometry.coordinates,\n ]), helpers_1.lineString([start.geometry.coordinates, stop_1.geometry.coordinates]));\n var intersectPt = null;\n if (intersect.features.length > 0) {\n intersectPt = intersect.features[0];\n intersectPt.properties.dist = distance_1.default(pt, intersectPt, options);\n intersectPt.properties.location =\n length + distance_1.default(start, intersectPt, options);\n }\n if (start.properties.dist < closestPt.properties.dist) {\n closestPt = start;\n closestPt.properties.index = i;\n closestPt.properties.location = length;\n }\n if (stop_1.properties.dist < closestPt.properties.dist) {\n closestPt = stop_1;\n closestPt.properties.index = i + 1;\n closestPt.properties.location = length + sectionLength;\n }\n if (intersectPt &&\n intersectPt.properties.dist < closestPt.properties.dist) {\n closestPt = intersectPt;\n closestPt.properties.index = i;\n }\n // update length\n length += sectionLength;\n }\n });\n return closestPt;\n}\nexports.default = nearestPointOnLine;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Taken from http://geomalgorithms.com/a02-_lines.html\nvar distance_1 = __importDefault(require(\"@turf/distance\"));\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar meta_1 = require(\"@turf/meta\");\nvar rhumb_distance_1 = __importDefault(require(\"@turf/rhumb-distance\"));\n/**\n * Returns the minimum distance between a {@link Point} and a {@link LineString}, being the distance from a line the\n * minimum distance between the point and any segment of the `LineString`.\n *\n * @name pointToLineDistance\n * @param {Feature|Array} pt Feature or Geometry\n * @param {Feature} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be anything supported by turf/convertLength\n * (ex: degrees, radians, miles, or kilometers)\n * @param {string} [options.method=\"geodesic\"] wether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(pt, line, options) {\n if (options === void 0) { options = {}; }\n // Optional parameters\n if (!options.method) {\n options.method = \"geodesic\";\n }\n if (!options.units) {\n options.units = \"kilometers\";\n }\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = helpers_1.point(pt);\n }\n else if (pt.type === \"Point\") {\n pt = helpers_1.feature(pt);\n }\n else {\n invariant_1.featureOf(pt, \"Point\", \"point\");\n }\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = helpers_1.lineString(line);\n }\n else if (line.type === \"LineString\") {\n line = helpers_1.feature(line);\n }\n else {\n invariant_1.featureOf(line, \"LineString\", \"line\");\n }\n var distance = Infinity;\n var p = pt.geometry.coordinates;\n meta_1.segmentEach(line, function (segment) {\n var a = segment.geometry.coordinates[0];\n var b = segment.geometry.coordinates[1];\n var d = distanceToSegment(p, a, b, options);\n if (d < distance) {\n distance = d;\n }\n });\n return helpers_1.convertLength(distance, \"degrees\", options.units);\n}\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array} p external point\n * @param {Array} a first segment point\n * @param {Array} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(p, a, b, options) {\n var v = [b[0] - a[0], b[1] - a[1]];\n var w = [p[0] - a[0], p[1] - a[1]];\n var c1 = dot(w, v);\n if (c1 <= 0) {\n return calcDistance(p, a, { method: options.method, units: \"degrees\" });\n }\n var c2 = dot(v, v);\n if (c2 <= c1) {\n return calcDistance(p, b, { method: options.method, units: \"degrees\" });\n }\n var b2 = c1 / c2;\n var Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n return calcDistance(p, Pb, { method: options.method, units: \"degrees\" });\n}\nfunction dot(u, v) {\n return u[0] * v[0] + u[1] * v[1];\n}\nfunction calcDistance(a, b, options) {\n return options.method === \"planar\"\n ? rhumb_distance_1.default(a, b, options)\n : distance_1.default(a, b, options);\n}\nexports.default = pointToLineDistance;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @name polygonToLine\n * @param {Feature} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nfunction default_1(poly, options) {\n if (options === void 0) { options = {}; }\n var geom = invariant_1.getGeom(poly);\n if (!options.properties && poly.type === \"Feature\") {\n options.properties = poly.properties;\n }\n switch (geom.type) {\n case \"Polygon\":\n return polygonToLine(geom, options);\n case \"MultiPolygon\":\n return multiPolygonToLine(geom, options);\n default:\n throw new Error(\"invalid poly\");\n }\n}\nexports.default = default_1;\n/**\n * @private\n */\nfunction polygonToLine(poly, options) {\n if (options === void 0) { options = {}; }\n var geom = invariant_1.getGeom(poly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : poly.type === \"Feature\"\n ? poly.properties\n : {};\n return coordsToLine(coords, properties);\n}\nexports.polygonToLine = polygonToLine;\n/**\n * @private\n */\nfunction multiPolygonToLine(multiPoly, options) {\n if (options === void 0) { options = {}; }\n var geom = invariant_1.getGeom(multiPoly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : multiPoly.type === \"Feature\"\n ? multiPoly.properties\n : {};\n var lines = [];\n coords.forEach(function (coord) {\n lines.push(coordsToLine(coord, properties));\n });\n return helpers_1.featureCollection(lines);\n}\nexports.multiPolygonToLine = multiPolygonToLine;\n/**\n * @private\n */\nfunction coordsToLine(coords, properties) {\n if (coords.length > 1) {\n return helpers_1.multiLineString(coords, properties);\n }\n return helpers_1.lineString(coords[0], properties);\n}\nexports.coordsToLine = coordsToLine;\n","'use strict';\n\nvar clone = require('@turf/clone');\nvar booleanClockwise = require('@turf/boolean-clockwise');\nvar meta = require('@turf/meta');\nvar invariant = require('@turf/invariant');\nvar helpers = require('@turf/helpers');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar clone__default = /*#__PURE__*/_interopDefaultLegacy(clone);\nvar booleanClockwise__default = /*#__PURE__*/_interopDefaultLegacy(booleanClockwise);\n\n/**\n * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).\n *\n * @name rewind\n * @param {GeoJSON} geojson input GeoJSON Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.reverse=false] enable reverse winding\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} rewind Polygon\n * @example\n * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);\n *\n * var rewind = turf.rewind(polygon);\n *\n * //addToMap\n * var addToMap = [rewind];\n */\nfunction rewind(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var reverse = options.reverse || false;\n var mutate = options.mutate || false;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof reverse !== \"boolean\")\n throw new Error(\" must be a boolean\");\n if (typeof mutate !== \"boolean\")\n throw new Error(\" must be a boolean\");\n\n // prevent input mutation\n if (mutate === false) geojson = clone__default['default'](geojson);\n\n // Support Feature Collection or Geometry Collection\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n meta.geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"FeatureCollection\":\n meta.featureEach(geojson, function (feature) {\n meta.featureEach(rewindFeature(feature, reverse), function (result) {\n results.push(result);\n });\n });\n return helpers.featureCollection(results);\n }\n // Support Feature or Geometry Objects\n return rewindFeature(geojson, reverse);\n}\n\n/**\n * Rewind\n *\n * @private\n * @param {Geometry|Feature} geojson Geometry or Feature\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {Geometry|Feature} rewind Geometry or Feature\n */\nfunction rewindFeature(geojson, reverse) {\n var type = geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n\n // Support all GeoJSON Geometry Objects\n switch (type) {\n case \"GeometryCollection\":\n meta.geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"LineString\":\n rewindLineString(invariant.getCoords(geojson), reverse);\n return geojson;\n case \"Polygon\":\n rewindPolygon(invariant.getCoords(geojson), reverse);\n return geojson;\n case \"MultiLineString\":\n invariant.getCoords(geojson).forEach(function (lineCoords) {\n rewindLineString(lineCoords, reverse);\n });\n return geojson;\n case \"MultiPolygon\":\n invariant.getCoords(geojson).forEach(function (lineCoords) {\n rewindPolygon(lineCoords, reverse);\n });\n return geojson;\n case \"Point\":\n case \"MultiPoint\":\n return geojson;\n }\n}\n\n/**\n * Rewind LineString - outer ring clockwise\n *\n * @private\n * @param {Array>} coords GeoJSON LineString geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindLineString(coords, reverse) {\n if (booleanClockwise__default['default'](coords) === reverse) coords.reverse();\n}\n\n/**\n * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.\n *\n * @private\n * @param {Array>>} coords GeoJSON Polygon geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindPolygon(coords, reverse) {\n // outer ring\n if (booleanClockwise__default['default'](coords[0]) !== reverse) {\n coords[0].reverse();\n }\n // inner rings\n for (var i = 1; i < coords.length; i++) {\n if (booleanClockwise__default['default'](coords[i]) === reverse) {\n coords[i].reverse();\n }\n }\n}\n\nmodule.exports = rewind;\nmodule.exports.default = rewind;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://en.wikipedia.org/wiki/Rhumb_line\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Takes two {@link Point|points} and finds the bearing angle between them along a Rhumb line\n * i.e. the angle measured in degrees start the north line (0 degrees)\n *\n * @name rhumbBearing\n * @param {Coord} start starting Point\n * @param {Coord} end ending Point\n * @param {Object} [options] Optional parameters\n * @param {boolean} [options.final=false] calculates the final bearing if true\n * @returns {number} bearing from north in decimal degrees, between -180 and 180 degrees (positive clockwise)\n * @example\n * var point1 = turf.point([-75.343, 39.984], {\"marker-color\": \"#F00\"});\n * var point2 = turf.point([-75.534, 39.123], {\"marker-color\": \"#00F\"});\n *\n * var bearing = turf.rhumbBearing(point1, point2);\n *\n * //addToMap\n * var addToMap = [point1, point2];\n * point1.properties.bearing = bearing;\n * point2.properties.bearing = bearing;\n */\nfunction rhumbBearing(start, end, options) {\n if (options === void 0) { options = {}; }\n var bear360;\n if (options.final) {\n bear360 = calculateRhumbBearing(invariant_1.getCoord(end), invariant_1.getCoord(start));\n }\n else {\n bear360 = calculateRhumbBearing(invariant_1.getCoord(start), invariant_1.getCoord(end));\n }\n var bear180 = bear360 > 180 ? -(360 - bear360) : bear360;\n return bear180;\n}\n/**\n * Returns the bearing from ‘this’ point to destination point along a rhumb line.\n * Adapted from Geodesy: https://github.com/chrisveness/geodesy/blob/master/latlon-spherical.js\n *\n * @private\n * @param {Array} from - origin point.\n * @param {Array} to - destination point.\n * @returns {number} Bearing in degrees from north.\n * @example\n * var p1 = new LatLon(51.127, 1.338);\n * var p2 = new LatLon(50.964, 1.853);\n * var d = p1.rhumbBearingTo(p2); // 116.7 m\n */\nfunction calculateRhumbBearing(from, to) {\n // φ => phi\n // Δλ => deltaLambda\n // Δψ => deltaPsi\n // θ => theta\n var phi1 = helpers_1.degreesToRadians(from[1]);\n var phi2 = helpers_1.degreesToRadians(to[1]);\n var deltaLambda = helpers_1.degreesToRadians(to[0] - from[0]);\n // if deltaLambdaon over 180° take shorter rhumb line across the anti-meridian:\n if (deltaLambda > Math.PI) {\n deltaLambda -= 2 * Math.PI;\n }\n if (deltaLambda < -Math.PI) {\n deltaLambda += 2 * Math.PI;\n }\n var deltaPsi = Math.log(Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4));\n var theta = Math.atan2(deltaLambda, deltaPsi);\n return (helpers_1.radiansToDegrees(theta) + 360) % 360;\n}\nexports.default = rhumbBearing;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://en.wikipedia.org/wiki/Rhumb_line\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Returns the destination {@link Point} having travelled the given distance along a Rhumb line from the\n * origin Point with the (varant) given bearing.\n *\n * @name rhumbDestination\n * @param {Coord} origin starting point\n * @param {number} distance distance from the starting point\n * @param {number} bearing varant bearing angle ranging from -180 to 180 degrees from north\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @param {Object} [options.properties={}] translate properties to destination point\n * @returns {Feature} Destination point.\n * @example\n * var pt = turf.point([-75.343, 39.984], {\"marker-color\": \"F00\"});\n * var distance = 50;\n * var bearing = 90;\n * var options = {units: 'miles'};\n *\n * var destination = turf.rhumbDestination(pt, distance, bearing, options);\n *\n * //addToMap\n * var addToMap = [pt, destination]\n * destination.properties['marker-color'] = '#00F';\n */\nfunction rhumbDestination(origin, distance, bearing, options) {\n if (options === void 0) { options = {}; }\n var wasNegativeDistance = distance < 0;\n var distanceInMeters = helpers_1.convertLength(Math.abs(distance), options.units, \"meters\");\n if (wasNegativeDistance)\n distanceInMeters = -Math.abs(distanceInMeters);\n var coords = invariant_1.getCoord(origin);\n var destination = calculateRhumbDestination(coords, distanceInMeters, bearing);\n // compensate the crossing of the 180th meridian (https://macwright.org/2016/09/26/the-180th-meridian.html)\n // solution from https://github.com/mapbox/mapbox-gl-js/issues/3250#issuecomment-294887678\n destination[0] +=\n destination[0] - coords[0] > 180\n ? -360\n : coords[0] - destination[0] > 180\n ? 360\n : 0;\n return helpers_1.point(destination, options.properties);\n}\n/**\n * Returns the destination point having travelled along a rhumb line from origin point the given\n * distance on the given bearing.\n * Adapted from Geodesy: http://www.movable-type.co.uk/scripts/latlong.html#rhumblines\n *\n * @private\n * @param {Array} origin - point\n * @param {number} distance - Distance travelled, in same units as earth radius (default: metres).\n * @param {number} bearing - Bearing in degrees from north.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {Array} Destination point.\n */\nfunction calculateRhumbDestination(origin, distance, bearing, radius) {\n // φ => phi\n // λ => lambda\n // ψ => psi\n // Δ => Delta\n // δ => delta\n // θ => theta\n radius = radius === undefined ? helpers_1.earthRadius : Number(radius);\n var delta = distance / radius; // angular distance in radians\n var lambda1 = (origin[0] * Math.PI) / 180; // to radians, but without normalize to 𝜋\n var phi1 = helpers_1.degreesToRadians(origin[1]);\n var theta = helpers_1.degreesToRadians(bearing);\n var DeltaPhi = delta * Math.cos(theta);\n var phi2 = phi1 + DeltaPhi;\n // check for some daft bugger going past the pole, normalise latitude if so\n if (Math.abs(phi2) > Math.PI / 2) {\n phi2 = phi2 > 0 ? Math.PI - phi2 : -Math.PI - phi2;\n }\n var DeltaPsi = Math.log(Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4));\n // E-W course becomes ill-conditioned with 0/0\n var q = Math.abs(DeltaPsi) > 10e-12 ? DeltaPhi / DeltaPsi : Math.cos(phi1);\n var DeltaLambda = (delta * Math.sin(theta)) / q;\n var lambda2 = lambda1 + DeltaLambda;\n return [\n (((lambda2 * 180) / Math.PI + 540) % 360) - 180,\n (phi2 * 180) / Math.PI,\n ]; // normalise to −180..+180°\n}\nexports.default = rhumbDestination;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://en.wikipedia.org/wiki/Rhumb_line\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Calculates the distance along a rhumb line between two {@link Point|points} in degrees, radians,\n * miles, or kilometers.\n *\n * @name rhumbDistance\n * @param {Coord} from origin point\n * @param {Coord} to destination point\n * @param {Object} [options] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be degrees, radians, miles, or kilometers\n * @returns {number} distance between the two points\n * @example\n * var from = turf.point([-75.343, 39.984]);\n * var to = turf.point([-75.534, 39.123]);\n * var options = {units: 'miles'};\n *\n * var distance = turf.rhumbDistance(from, to, options);\n *\n * //addToMap\n * var addToMap = [from, to];\n * from.properties.distance = distance;\n * to.properties.distance = distance;\n */\nfunction rhumbDistance(from, to, options) {\n if (options === void 0) { options = {}; }\n var origin = invariant_1.getCoord(from);\n var destination = invariant_1.getCoord(to);\n // compensate the crossing of the 180th meridian (https://macwright.org/2016/09/26/the-180th-meridian.html)\n // solution from https://github.com/mapbox/mapbox-gl-js/issues/3250#issuecomment-294887678\n destination[0] +=\n destination[0] - origin[0] > 180\n ? -360\n : origin[0] - destination[0] > 180\n ? 360\n : 0;\n var distanceInMeters = calculateRhumbDistance(origin, destination);\n var distance = helpers_1.convertLength(distanceInMeters, \"meters\", options.units);\n return distance;\n}\n/**\n * Returns the distance travelling from ‘this’ point to destination point along a rhumb line.\n * Adapted from Geodesy: https://github.com/chrisveness/geodesy/blob/master/latlon-spherical.js\n *\n * @private\n * @param {Array} origin point.\n * @param {Array} destination point.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} Distance in km between this point and destination point (same units as radius).\n *\n * @example\n * var p1 = new LatLon(51.127, 1.338);\n * var p2 = new LatLon(50.964, 1.853);\n * var d = p1.distanceTo(p2); // 40.31 km\n */\nfunction calculateRhumbDistance(origin, destination, radius) {\n // φ => phi\n // λ => lambda\n // ψ => psi\n // Δ => Delta\n // δ => delta\n // θ => theta\n radius = radius === undefined ? helpers_1.earthRadius : Number(radius);\n // see www.edwilliams.org/avform.htm#Rhumb\n var R = radius;\n var phi1 = (origin[1] * Math.PI) / 180;\n var phi2 = (destination[1] * Math.PI) / 180;\n var DeltaPhi = phi2 - phi1;\n var DeltaLambda = (Math.abs(destination[0] - origin[0]) * Math.PI) / 180;\n // if dLon over 180° take shorter rhumb line across the anti-meridian:\n if (DeltaLambda > Math.PI) {\n DeltaLambda -= 2 * Math.PI;\n }\n // on Mercator projection, longitude distances shrink by latitude; q is the 'stretch factor'\n // q becomes ill-conditioned along E-W line (0/0); use empirical tolerance to avoid it\n var DeltaPsi = Math.log(Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4));\n var q = Math.abs(DeltaPsi) > 10e-12 ? DeltaPhi / DeltaPsi : Math.cos(phi1);\n // distance is pythagoras on 'stretched' Mercator projection\n var delta = Math.sqrt(DeltaPhi * DeltaPhi + q * q * DeltaLambda * DeltaLambda); // angular distance in radians\n var dist = delta * R;\n return dist;\n}\nexports.default = rhumbDistance;\n","'use strict';\n\nvar centroid = require('@turf/centroid');\nvar rhumbBearing = require('@turf/rhumb-bearing');\nvar rhumbDistance = require('@turf/rhumb-distance');\nvar rhumbDestination = require('@turf/rhumb-destination');\nvar clone = require('@turf/clone');\nvar meta = require('@turf/meta');\nvar invariant = require('@turf/invariant');\nvar helpers = require('@turf/helpers');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar centroid__default = /*#__PURE__*/_interopDefaultLegacy(centroid);\nvar rhumbBearing__default = /*#__PURE__*/_interopDefaultLegacy(rhumbBearing);\nvar rhumbDistance__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDistance);\nvar rhumbDestination__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDestination);\nvar clone__default = /*#__PURE__*/_interopDefaultLegacy(clone);\n\n/**\n * Rotates any geojson Feature or Geometry of a specified angle, around its `centroid` or a given `pivot` point.\n *\n * @name transformRotate\n * @param {GeoJSON} geojson object to be rotated\n * @param {number} angle of rotation in decimal degrees, positive clockwise\n * @param {Object} [options={}] Optional parameters\n * @param {Coord} [options.pivot='centroid'] point around which the rotation will be performed\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} the rotated GeoJSON feature\n * @example\n * var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * var options = {pivot: [0, 25]};\n * var rotatedPoly = turf.transformRotate(poly, 10, options);\n *\n * //addToMap\n * var addToMap = [poly, rotatedPoly];\n * rotatedPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformRotate(geojson, angle, options) {\n // Optional parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var pivot = options.pivot;\n var mutate = options.mutate;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson is required\");\n if (angle === undefined || angle === null || isNaN(angle))\n throw new Error(\"angle is required\");\n\n // Shortcut no-rotation\n if (angle === 0) return geojson;\n\n // Use centroid of GeoJSON if pivot is not provided\n if (!pivot) pivot = centroid__default['default'](geojson);\n\n // Clone geojson to avoid side effects\n if (mutate === false || mutate === undefined) geojson = clone__default['default'](geojson);\n\n // Rotate each coordinate\n meta.coordEach(geojson, function (pointCoords) {\n var initialAngle = rhumbBearing__default['default'](pivot, pointCoords);\n var finalAngle = initialAngle + angle;\n var distance = rhumbDistance__default['default'](pivot, pointCoords);\n var newCoords = invariant.getCoords(rhumbDestination__default['default'](pivot, distance, finalAngle));\n pointCoords[0] = newCoords[0];\n pointCoords[1] = newCoords[1];\n });\n return geojson;\n}\n\nmodule.exports = transformRotate;\nmodule.exports.default = transformRotate;\n","'use strict';\n\nvar clone = require('@turf/clone');\nvar center = require('@turf/center');\nvar centroid = require('@turf/centroid');\nvar turfBBox = require('@turf/bbox');\nvar rhumbBearing = require('@turf/rhumb-bearing');\nvar rhumbDistance = require('@turf/rhumb-distance');\nvar rhumbDestination = require('@turf/rhumb-destination');\nvar meta = require('@turf/meta');\nvar helpers = require('@turf/helpers');\nvar invariant = require('@turf/invariant');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar clone__default = /*#__PURE__*/_interopDefaultLegacy(clone);\nvar center__default = /*#__PURE__*/_interopDefaultLegacy(center);\nvar centroid__default = /*#__PURE__*/_interopDefaultLegacy(centroid);\nvar turfBBox__default = /*#__PURE__*/_interopDefaultLegacy(turfBBox);\nvar rhumbBearing__default = /*#__PURE__*/_interopDefaultLegacy(rhumbBearing);\nvar rhumbDistance__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDistance);\nvar rhumbDestination__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDestination);\n\n/**\n * Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger).\n * If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature.\n *\n * @name transformScale\n * @param {GeoJSON} geojson GeoJSON to be scaled\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {Object} [options={}] Optional parameters\n * @param {string|Coord} [options.origin='centroid'] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} scaled GeoJSON\n * @example\n * var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * var scaledPoly = turf.transformScale(poly, 3);\n *\n * //addToMap\n * var addToMap = [poly, scaledPoly];\n * scaledPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformScale(geojson, factor, options) {\n // Optional parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var origin = options.origin;\n var mutate = options.mutate;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor === 0)\n throw new Error(\"invalid factor\");\n var originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone__default['default'](geojson);\n\n // Scale each Feature separately\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n meta.featureEach(geojson, function (feature, index) {\n geojson.features[index] = scale(feature, factor, origin);\n });\n return geojson;\n }\n // Scale Feature/Geometry\n return scale(geojson, factor, origin);\n}\n\n/**\n * Scale Feature/Geometry\n *\n * @private\n * @param {Feature|Geometry} feature GeoJSON Feature/Geometry\n * @param {number} factor of scaling, positive or negative values greater than 0\n * @param {string|Coord} [origin=\"centroid\"] Point from which the scaling will occur (string options: sw/se/nw/ne/center/centroid)\n * @returns {Feature|Geometry} scaled GeoJSON Feature/Geometry\n */\nfunction scale(feature, factor, origin) {\n // Default params\n var isPoint = invariant.getType(feature) === \"Point\";\n origin = defineOrigin(feature, origin);\n\n // Shortcut no-scaling\n if (factor === 1 || isPoint) return feature;\n\n // Scale each coordinate\n meta.coordEach(feature, function (coord) {\n var originalDistance = rhumbDistance__default['default'](origin, coord);\n var bearing = rhumbBearing__default['default'](origin, coord);\n var newDistance = originalDistance * factor;\n var newCoord = invariant.getCoords(rhumbDestination__default['default'](origin, newDistance, bearing));\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n\n return feature;\n}\n\n/**\n * Define Origin\n *\n * @private\n * @param {GeoJSON} geojson GeoJSON\n * @param {string|Coord} origin sw/se/nw/ne/center/centroid\n * @returns {Feature} Point origin\n */\nfunction defineOrigin(geojson, origin) {\n // Default params\n if (origin === undefined || origin === null) origin = \"centroid\";\n\n // Input Coord\n if (Array.isArray(origin) || typeof origin === \"object\")\n return invariant.getCoord(origin);\n\n // Define BBox\n var bbox = geojson.bbox ? geojson.bbox : turfBBox__default['default'](geojson);\n var west = bbox[0];\n var south = bbox[1];\n var east = bbox[2];\n var north = bbox[3];\n\n switch (origin) {\n case \"sw\":\n case \"southwest\":\n case \"westsouth\":\n case \"bottomleft\":\n return helpers.point([west, south]);\n case \"se\":\n case \"southeast\":\n case \"eastsouth\":\n case \"bottomright\":\n return helpers.point([east, south]);\n case \"nw\":\n case \"northwest\":\n case \"westnorth\":\n case \"topleft\":\n return helpers.point([west, north]);\n case \"ne\":\n case \"northeast\":\n case \"eastnorth\":\n case \"topright\":\n return helpers.point([east, north]);\n case \"center\":\n return center__default['default'](geojson);\n case undefined:\n case null:\n case \"centroid\":\n return centroid__default['default'](geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n}\n\nmodule.exports = transformScale;\nmodule.exports.default = transformScale;\n","'use strict';\n\nvar meta = require('@turf/meta');\nvar helpers = require('@turf/helpers');\nvar invariant = require('@turf/invariant');\nvar clone = require('@turf/clone');\nvar rhumbDestination = require('@turf/rhumb-destination');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar clone__default = /*#__PURE__*/_interopDefaultLegacy(clone);\nvar rhumbDestination__default = /*#__PURE__*/_interopDefaultLegacy(rhumbDestination);\n\n/**\n * Moves any geojson Feature or Geometry of a specified distance along a Rhumb Line\n * on the provided direction angle.\n *\n * @name transformTranslate\n * @param {GeoJSON} geojson object to be translated\n * @param {number} distance length of the motion; negative values determine motion in opposite direction\n * @param {number} direction of the motion; angle from North in decimal degrees, positive clockwise\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] in which `distance` will be express; miles, kilometers, degrees, or radians\n * @param {number} [options.zTranslation=0] length of the vertical motion, same unit of distance\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} the translated GeoJSON object\n * @example\n * var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);\n * var translatedPoly = turf.transformTranslate(poly, 100, 35);\n *\n * //addToMap\n * var addToMap = [poly, translatedPoly];\n * translatedPoly.properties = {stroke: '#F00', 'stroke-width': 4};\n */\nfunction transformTranslate(geojson, distance, direction, options) {\n // Optional parameters\n options = options || {};\n if (!helpers.isObject(options)) throw new Error(\"options is invalid\");\n var units = options.units;\n var zTranslation = options.zTranslation;\n var mutate = options.mutate;\n\n // Input validation\n if (!geojson) throw new Error(\"geojson is required\");\n if (distance === undefined || distance === null || isNaN(distance))\n throw new Error(\"distance is required\");\n if (zTranslation && typeof zTranslation !== \"number\" && isNaN(zTranslation))\n throw new Error(\"zTranslation is not a number\");\n\n // Shortcut no-motion\n zTranslation = zTranslation !== undefined ? zTranslation : 0;\n if (distance === 0 && zTranslation === 0) return geojson;\n\n if (direction === undefined || direction === null || isNaN(direction))\n throw new Error(\"direction is required\");\n\n // Invert with negative distances\n if (distance < 0) {\n distance = -distance;\n direction = direction + 180;\n }\n\n // Clone geojson to avoid side effects\n if (mutate === false || mutate === undefined) geojson = clone__default['default'](geojson);\n\n // Translate each coordinate\n meta.coordEach(geojson, function (pointCoords) {\n var newCoords = invariant.getCoords(\n rhumbDestination__default['default'](pointCoords, distance, direction, { units: units })\n );\n pointCoords[0] = newCoords[0];\n pointCoords[1] = newCoords[1];\n if (zTranslation && pointCoords.length === 3)\n pointCoords[2] += zTranslation;\n });\n return geojson;\n}\n\nmodule.exports = transformTranslate;\nmodule.exports.default = transformTranslate;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar polygon_clipping_1 = __importDefault(require(\"polygon-clipping\"));\nvar invariant_1 = require(\"@turf/invariant\");\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Takes two {@link (Multi)Polygon(s)} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.\n *\n * @name union\n * @param {Feature} polygon1 input Polygon feature\n * @param {Feature} polygon2 Polygon feature to difference from polygon1\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate Properties to output Feature\n * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature, or null if the inputs are empty\n * @example\n * var poly1 = turf.polygon([[\n * [-82.574787, 35.594087],\n * [-82.574787, 35.615581],\n * [-82.545261, 35.615581],\n * [-82.545261, 35.594087],\n * [-82.574787, 35.594087]\n * ]], {\"fill\": \"#0f0\"});\n * var poly2 = turf.polygon([[\n * [-82.560024, 35.585153],\n * [-82.560024, 35.602602],\n * [-82.52964, 35.602602],\n * [-82.52964, 35.585153],\n * [-82.560024, 35.585153]\n * ]], {\"fill\": \"#00f\"});\n *\n * var union = turf.union(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, union];\n */\nfunction union(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = invariant_1.getGeom(poly1);\n var geom2 = invariant_1.getGeom(poly2);\n var unioned = polygon_clipping_1.default.union(geom1.coordinates, geom2.coordinates);\n if (unioned.length === 0)\n return null;\n if (unioned.length === 1)\n return helpers_1.polygon(unioned[0], options.properties);\n else\n return helpers_1.multiPolygon(unioned, options.properties);\n}\nexports.default = union;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar RBush = require('rbush');\nvar Queue = require('tinyqueue');\nvar pointInPolygon = require('point-in-polygon');\nvar orient = require('robust-predicates/umd/orient2d.min.js').orient2d;\n\n// Fix for require issue in webpack https://github.com/mapbox/concaveman/issues/18\nif (Queue.default) {\n Queue = Queue.default;\n}\n\nmodule.exports = concaveman;\nmodule.exports.default = concaveman;\n\nfunction concaveman(points, concavity, lengthThreshold) {\n // a relative measure of concavity; higher value means simpler hull\n concavity = Math.max(0, concavity === undefined ? 2 : concavity);\n\n // when a segment goes below this length threshold, it won't be drilled down further\n lengthThreshold = lengthThreshold || 0;\n\n // start with a convex hull of the points\n var hull = fastConvexHull(points);\n\n // index the points with an R-tree\n var tree = new RBush(16);\n tree.toBBox = function (a) {\n return {\n minX: a[0],\n minY: a[1],\n maxX: a[0],\n maxY: a[1]\n };\n };\n tree.compareMinX = function (a, b) { return a[0] - b[0]; };\n tree.compareMinY = function (a, b) { return a[1] - b[1]; };\n\n tree.load(points);\n\n // turn the convex hull into a linked list and populate the initial edge queue with the nodes\n var queue = [];\n for (var i = 0, last; i < hull.length; i++) {\n var p = hull[i];\n tree.remove(p);\n last = insertNode(p, last);\n queue.push(last);\n }\n\n // index the segments with an R-tree (for intersection checks)\n var segTree = new RBush(16);\n for (i = 0; i < queue.length; i++) segTree.insert(updateBBox(queue[i]));\n\n var sqConcavity = concavity * concavity;\n var sqLenThreshold = lengthThreshold * lengthThreshold;\n\n // process edges one by one\n while (queue.length) {\n var node = queue.shift();\n var a = node.p;\n var b = node.next.p;\n\n // skip the edge if it's already short enough\n var sqLen = getSqDist(a, b);\n if (sqLen < sqLenThreshold) continue;\n\n var maxSqLen = sqLen / sqConcavity;\n\n // find the best connection point for the current edge to flex inward to\n p = findCandidate(tree, node.prev.p, a, b, node.next.next.p, maxSqLen, segTree);\n\n // if we found a connection and it satisfies our concavity measure\n if (p && Math.min(getSqDist(p, a), getSqDist(p, b)) <= maxSqLen) {\n // connect the edge endpoints through this point and add 2 new edges to the queue\n queue.push(node);\n queue.push(insertNode(p, node));\n\n // update point and segment indexes\n tree.remove(p);\n segTree.remove(node);\n segTree.insert(updateBBox(node));\n segTree.insert(updateBBox(node.next));\n }\n }\n\n // convert the resulting hull linked list to an array of points\n node = last;\n var concave = [];\n do {\n concave.push(node.p);\n node = node.next;\n } while (node !== last);\n\n concave.push(node.p);\n\n return concave;\n}\n\nfunction findCandidate(tree, a, b, c, d, maxDist, segTree) {\n var queue = new Queue([], compareDist);\n var node = tree.data;\n\n // search through the point R-tree with a depth-first search using a priority queue\n // in the order of distance to the edge (b, c)\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n\n var dist = node.leaf ? sqSegDist(child, b, c) : sqSegBoxDist(b, c, child);\n if (dist > maxDist) continue; // skip the node if it's farther than we ever need\n\n queue.push({\n node: child,\n dist: dist\n });\n }\n\n while (queue.length && !queue.peek().node.children) {\n var item = queue.pop();\n var p = item.node;\n\n // skip all points that are as close to adjacent edges (a,b) and (c,d),\n // and points that would introduce self-intersections when connected\n var d0 = sqSegDist(p, a, b);\n var d1 = sqSegDist(p, c, d);\n if (item.dist < d0 && item.dist < d1 &&\n noIntersections(b, p, segTree) &&\n noIntersections(c, p, segTree)) return p;\n }\n\n node = queue.pop();\n if (node) node = node.node;\n }\n\n return null;\n}\n\nfunction compareDist(a, b) {\n return a.dist - b.dist;\n}\n\n// square distance from a segment bounding box to the given one\nfunction sqSegBoxDist(a, b, bbox) {\n if (inside(a, bbox) || inside(b, bbox)) return 0;\n var d1 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.maxX, bbox.minY);\n if (d1 === 0) return 0;\n var d2 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.minX, bbox.maxY);\n if (d2 === 0) return 0;\n var d3 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY);\n if (d3 === 0) return 0;\n var d4 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY);\n if (d4 === 0) return 0;\n return Math.min(d1, d2, d3, d4);\n}\n\nfunction inside(a, bbox) {\n return a[0] >= bbox.minX &&\n a[0] <= bbox.maxX &&\n a[1] >= bbox.minY &&\n a[1] <= bbox.maxY;\n}\n\n// check if the edge (a,b) doesn't intersect any other edges\nfunction noIntersections(a, b, segTree) {\n var minX = Math.min(a[0], b[0]);\n var minY = Math.min(a[1], b[1]);\n var maxX = Math.max(a[0], b[0]);\n var maxY = Math.max(a[1], b[1]);\n\n var edges = segTree.search({minX: minX, minY: minY, maxX: maxX, maxY: maxY});\n for (var i = 0; i < edges.length; i++) {\n if (intersects(edges[i].p, edges[i].next.p, a, b)) return false;\n }\n return true;\n}\n\nfunction cross(p1, p2, p3) {\n return orient(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\n// check if the edges (p1,q1) and (p2,q2) intersect\nfunction intersects(p1, q1, p2, q2) {\n return p1 !== q2 && q1 !== p2 &&\n cross(p1, q1, p2) > 0 !== cross(p1, q1, q2) > 0 &&\n cross(p2, q2, p1) > 0 !== cross(p2, q2, q1) > 0;\n}\n\n// update the bounding box of a node's edge\nfunction updateBBox(node) {\n var p1 = node.p;\n var p2 = node.next.p;\n node.minX = Math.min(p1[0], p2[0]);\n node.minY = Math.min(p1[1], p2[1]);\n node.maxX = Math.max(p1[0], p2[0]);\n node.maxY = Math.max(p1[1], p2[1]);\n return node;\n}\n\n// speed up convex hull by filtering out points inside quadrilateral formed by 4 extreme points\nfunction fastConvexHull(points) {\n var left = points[0];\n var top = points[0];\n var right = points[0];\n var bottom = points[0];\n\n // find the leftmost, rightmost, topmost and bottommost points\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n if (p[0] < left[0]) left = p;\n if (p[0] > right[0]) right = p;\n if (p[1] < top[1]) top = p;\n if (p[1] > bottom[1]) bottom = p;\n }\n\n // filter out points that are inside the resulting quadrilateral\n var cull = [left, top, right, bottom];\n var filtered = cull.slice();\n for (i = 0; i < points.length; i++) {\n if (!pointInPolygon(points[i], cull)) filtered.push(points[i]);\n }\n\n // get convex hull around the filtered points\n return convexHull(filtered);\n}\n\n// create a new node in a doubly linked list\nfunction insertNode(p, prev) {\n var node = {\n p: p,\n prev: null,\n next: null,\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0\n };\n\n if (!prev) {\n node.prev = node;\n node.next = node;\n\n } else {\n node.next = prev.next;\n node.prev = prev;\n prev.next.prev = node;\n prev.next = node;\n }\n return node;\n}\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction sqSegDist(p, p1, p2) {\n\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n// segment to segment distance, ported from http://geomalgorithms.com/a07-_distance.html by Dan Sunday\nfunction sqSegSegDist(x0, y0, x1, y1, x2, y2, x3, y3) {\n var ux = x1 - x0;\n var uy = y1 - y0;\n var vx = x3 - x2;\n var vy = y3 - y2;\n var wx = x0 - x2;\n var wy = y0 - y2;\n var a = ux * ux + uy * uy;\n var b = ux * vx + uy * vy;\n var c = vx * vx + vy * vy;\n var d = ux * wx + uy * wy;\n var e = vx * wx + vy * wy;\n var D = a * c - b * b;\n\n var sc, sN, tc, tN;\n var sD = D;\n var tD = D;\n\n if (D === 0) {\n sN = 0;\n sD = 1;\n tN = e;\n tD = c;\n } else {\n sN = b * e - c * d;\n tN = a * e - b * d;\n if (sN < 0) {\n sN = 0;\n tN = e;\n tD = c;\n } else if (sN > sD) {\n sN = sD;\n tN = e + b;\n tD = c;\n }\n }\n\n if (tN < 0.0) {\n tN = 0.0;\n if (-d < 0.0) sN = 0.0;\n else if (-d > a) sN = sD;\n else {\n sN = -d;\n sD = a;\n }\n } else if (tN > tD) {\n tN = tD;\n if ((-d + b) < 0.0) sN = 0;\n else if (-d + b > a) sN = sD;\n else {\n sN = -d + b;\n sD = a;\n }\n }\n\n sc = sN === 0 ? 0 : sN / sD;\n tc = tN === 0 ? 0 : tN / tD;\n\n var cx = (1 - sc) * x0 + sc * x1;\n var cy = (1 - sc) * y0 + sc * y1;\n var cx2 = (1 - tc) * x2 + tc * x3;\n var cy2 = (1 - tc) * y2 + tc * y3;\n var dx = cx2 - cx;\n var dy = cy2 - cy;\n\n return dx * dx + dy * dy;\n}\n\nfunction compareByX(a, b) {\n return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];\n}\n\nfunction convexHull(points) {\n points.sort(compareByX);\n\n var lower = [];\n for (var i = 0; i < points.length; i++) {\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\n lower.pop();\n }\n lower.push(points[i]);\n }\n\n var upper = [];\n for (var ii = points.length - 1; ii >= 0; ii--) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[ii]) <= 0) {\n upper.pop();\n }\n upper.push(points[ii]);\n }\n\n upper.pop();\n lower.pop();\n return lower.concat(upper);\n}\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipPolygon from \"./polygon\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport function clipExtent(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import length from \"./length\";\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains\";\nimport {default as distance} from \"./distance\";\nimport {epsilon, radians} from \"./math\";\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ab = distance(coordinates[0], coordinates[1]),\n ao = distance(coordinates[0], point),\n ob = distance(point, coordinates[1]);\n return ao + ob <= ab + epsilon;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import clipBuffer from \"./buffer\";\nimport clipPolygon from \"./polygon\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(rotate, sink) {\n var line = clipLine(sink),\n rotatedStart = rotate.invert(start[0], start[1]),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius, delta) {\n var cr = cos(radius),\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nexport function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n clip = projection.clipExtent && projection.clipExtent();\n\n projection\n .scale(150)\n .translate([0, 0]);\n\n if (clip != null) projection.clipExtent(null);\n\n geoStream(object, projection.stream(boundsStream));\n\n var b = boundsStream.result(),\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\n if (clip != null) projection.clipExtent(clip);\n\n return projection\n .scale(k * 150)\n .translate([x, y]);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport {clipExtent} from \"../clip/extent\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache,\n cacheStream;\n\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pow, sign, sin, sqrt, tan} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {mercatorRaw} from \"./mercator\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import {clipExtent} from \"../clip/extent\";\nimport identity from \"../identity\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\n\nfunction scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, clip = identity, // clip extent\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));\n },\n clipExtent: function(_) {\n return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n }\n };\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","/**\r\n * DBSCAN - Density based clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * DBSCAN class construcotr\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {DBSCAN}\r\n */\r\nfunction DBSCAN(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {Array} */\r\n this.dataset = [];\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 2;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n /** @type {Array} */\r\n this.clusters = [];\r\n /** @type {Array} */\r\n this.noise = [];\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._visited = [];\r\n /** @type {Array} */\r\n this._assigned = [];\r\n /** @type {number} */\r\n this._datasetLength = 0;\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n};\r\n\r\n/******************************************************************************/\r\n// public functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nDBSCAN.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0; pointId < this._datasetLength; pointId++) {\r\n // if point is not visited, check if it forms a cluster\r\n if (this._visited[pointId] !== 1) {\r\n this._visited[pointId] = 1;\r\n\r\n // if closest neighborhood is too small to form a cluster, mark as noise\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n if (neighbors.length < this.minPts) {\r\n this.noise.push(pointId);\r\n } else {\r\n // create new cluster and add point\r\n var clusterId = this.clusters.length;\r\n this.clusters.push([]);\r\n this._addToCluster(pointId, clusterId);\r\n\r\n this._expandCluster(clusterId, neighbors);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this.noise = [];\r\n\r\n this._datasetLength = dataset.length;\r\n this._visited = new Array(this._datasetLength);\r\n this._assigned = new Array(this._datasetLength);\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Expand cluster to closest points of given neighborhood\r\n *\r\n * @param {number} clusterId\r\n * @param {Array} neighbors\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._expandCluster = function(clusterId, neighbors) {\r\n\r\n /**\r\n * It's very important to calculate length of neighbors array each time,\r\n * as the number of elements changes over time\r\n */\r\n for (var i = 0; i < neighbors.length; i++) {\r\n var pointId2 = neighbors[i];\r\n\r\n if (this._visited[pointId2] !== 1) {\r\n this._visited[pointId2] = 1;\r\n var neighbors2 = this._regionQuery(pointId2);\r\n\r\n if (neighbors2.length >= this.minPts) {\r\n neighbors = this._mergeArrays(neighbors, neighbors2);\r\n }\r\n }\r\n\r\n // add to cluster\r\n if (this._assigned[pointId2] !== 1) {\r\n this._addToCluster(pointId2, clusterId);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Add new point to cluster\r\n *\r\n * @param {number} pointId\r\n * @param {number} clusterId\r\n */\r\nDBSCAN.prototype._addToCluster = function(pointId, clusterId) {\r\n this.clusters[clusterId].push(pointId);\r\n this._assigned[pointId] = 1;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId,\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._regionQuery = function(pointId) {\r\n var neighbors = [];\r\n\r\n for (var id = 0; id < this._datasetLength; id++) {\r\n var dist = this.distance(this.dataset[pointId], this.dataset[id]);\r\n if (dist < this.epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * @param {Array} a\r\n * @param {Array} b\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._mergeArrays = function(a, b) {\r\n var len = b.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n var P = b[i];\r\n if (a.indexOf(P) < 0) {\r\n a.push(P);\r\n }\r\n }\r\n\r\n return a;\r\n};\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nDBSCAN.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = DBSCAN;\r\n}\r\n","/**\r\n * KMEANS clustering\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * KMEANS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} k - number of clusters\r\n * @param {function} distance - distance function\r\n * @returns {KMEANS}\r\n */\r\n function KMEANS(dataset, k, distance) {\r\n this.k = 3; // number of clusters\r\n this.dataset = []; // set of feature vectors\r\n this.assignments = []; // set of associated clusters for each feature vector\r\n this.centroids = []; // vectors for our clusters\r\n\r\n this.init(dataset, k, distance);\r\n}\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.init = function(dataset, k, distance) {\r\n this.assignments = [];\r\n this.centroids = [];\r\n\r\n if (typeof dataset !== 'undefined') {\r\n this.dataset = dataset;\r\n }\r\n\r\n if (typeof k !== 'undefined') {\r\n this.k = k;\r\n }\r\n\r\n if (typeof distance !== 'undefined') {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.run = function(dataset, k) {\r\n this.init(dataset, k);\r\n\r\n var len = this.dataset.length;\r\n\r\n // initialize centroids\r\n for (var i = 0; i < this.k; i++) {\r\n this.centroids[i] = this.randomCentroid();\r\n\t}\r\n\r\n var change = true;\r\n while(change) {\r\n\r\n // assign feature vectors to clusters\r\n change = this.assign();\r\n\r\n // adjust location of centroids\r\n for (var centroidId = 0; centroidId < this.k; centroidId++) {\r\n var mean = new Array(maxDim);\r\n var count = 0;\r\n\r\n // init mean vector\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] = 0;\r\n }\r\n\r\n for (var j = 0; j < len; j++) {\r\n var maxDim = this.dataset[j].length;\r\n\r\n // if current cluster id is assigned to point\r\n if (centroidId === this.assignments[j]) {\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] += this.dataset[j][dim];\r\n }\r\n count++;\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n // if cluster contain points, adjust centroid position\r\n for (var dim = 0; dim < maxDim; dim++) {\r\n mean[dim] /= count;\r\n }\r\n this.centroids[centroidId] = mean;\r\n } else {\r\n // if cluster is empty, generate new random centroid\r\n this.centroids[centroidId] = this.randomCentroid();\r\n change = true;\r\n }\r\n }\r\n }\r\n\r\n return this.getClusters();\r\n};\r\n\r\n/**\r\n * Generate random centroid\r\n *\r\n * @returns {Array}\r\n */\r\nKMEANS.prototype.randomCentroid = function() {\r\n var maxId = this.dataset.length -1;\r\n var centroid;\r\n var id;\r\n\r\n do {\r\n id = Math.round(Math.random() * maxId);\r\n centroid = this.dataset[id];\r\n } while (this.centroids.indexOf(centroid) >= 0);\r\n\r\n return centroid;\r\n}\r\n\r\n/**\r\n * Assign points to clusters\r\n *\r\n * @returns {boolean}\r\n */\r\nKMEANS.prototype.assign = function() {\r\n var change = false;\r\n var len = this.dataset.length;\r\n var closestCentroid;\r\n\r\n for (var i = 0; i < len; i++) {\r\n closestCentroid = this.argmin(this.dataset[i], this.centroids, this.distance);\r\n\r\n if (closestCentroid != this.assignments[i]) {\r\n this.assignments[i] = closestCentroid;\r\n change = true;\r\n }\r\n }\r\n\r\n return change;\r\n}\r\n\r\n/**\r\n * Extract information about clusters\r\n *\r\n * @returns {undefined}\r\n */\r\nKMEANS.prototype.getClusters = function() {\r\n var clusters = new Array(this.k);\r\n var centroidId;\r\n\r\n for (var pointId = 0; pointId < this.assignments.length; pointId++) {\r\n centroidId = this.assignments[pointId];\r\n\r\n // init empty cluster\r\n if (typeof clusters[centroidId] === 'undefined') {\r\n clusters[centroidId] = [];\r\n }\r\n\r\n clusters[centroidId].push(pointId);\r\n }\r\n\r\n return clusters;\r\n};\r\n\r\n// utils\r\n\r\n/**\r\n * @params {Array} point\r\n * @params {Array.} set\r\n * @params {Function} f\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.argmin = function(point, set, f) {\r\n var min = Number.MAX_VALUE;\r\n var arg = 0;\r\n var len = set.length;\r\n var d;\r\n\r\n for (var i = 0; i < len; i++) {\r\n d = f(point, set[i]);\r\n if (d < min) {\r\n min = d;\r\n arg = i;\r\n }\r\n }\r\n\r\n return arg;\r\n};\r\n\r\n/**\r\n * Euclidean distance\r\n *\r\n * @params {number} p\r\n * @params {number} q\r\n * @returns {number}\r\n */\r\nKMEANS.prototype.distance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n var diff = p[i] - q[i];\r\n sum += diff * diff;\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = KMEANS;\r\n}\r\n","\r\n/**\r\n * @requires ./PriorityQueue.js\r\n */\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n var PriorityQueue = require('./PriorityQueue.js');\r\n}\r\n\r\n/**\r\n * OPTICS - Ordering points to identify the clustering structure\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * OPTICS class constructor\r\n * @constructor\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distanceFunction\r\n * @returns {OPTICS}\r\n */\r\nfunction OPTICS(dataset, epsilon, minPts, distanceFunction) {\r\n /** @type {number} */\r\n this.epsilon = 1;\r\n /** @type {number} */\r\n this.minPts = 1;\r\n /** @type {function} */\r\n this.distance = this._euclideanDistance;\r\n\r\n // temporary variables used during computation\r\n\r\n /** @type {Array} */\r\n this._reachability = [];\r\n /** @type {Array} */\r\n this._processed = [];\r\n /** @type {number} */\r\n this._coreDistance = 0;\r\n /** @type {Array} */\r\n this._orderedList = [];\r\n\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n}\r\n\r\n/******************************************************************************/\r\n// pulic functions\r\n\r\n/**\r\n * Start clustering\r\n *\r\n * @param {Array} dataset\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nOPTICS.prototype.run = function(dataset, epsilon, minPts, distanceFunction) {\r\n this._init(dataset, epsilon, minPts, distanceFunction);\r\n\r\n for (var pointId = 0, l = this.dataset.length; pointId < l; pointId++) {\r\n if (this._processed[pointId] !== 1) {\r\n this._processed[pointId] = 1;\r\n this.clusters.push([pointId]);\r\n var clusterId = this.clusters.length - 1;\r\n\r\n this._orderedList.push(pointId);\r\n var priorityQueue = new PriorityQueue(null, null, 'asc');\r\n var neighbors = this._regionQuery(pointId);\r\n\r\n // using priority queue assign elements to new cluster\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, priorityQueue);\r\n this._expandCluster(clusterId, priorityQueue);\r\n }\r\n }\r\n }\r\n\r\n return this.clusters;\r\n};\r\n\r\n/**\r\n * Generate reachability plot for all points\r\n *\r\n * @returns {array}\r\n * @access public\r\n */\r\nOPTICS.prototype.getReachabilityPlot = function() {\r\n var reachabilityPlot = [];\r\n\r\n for (var i = 0, l = this._orderedList.length; i < l; i++) {\r\n var pointId = this._orderedList[i];\r\n var distance = this._reachability[pointId];\r\n\r\n reachabilityPlot.push([pointId, distance]);\r\n }\r\n\r\n return reachabilityPlot;\r\n};\r\n\r\n/******************************************************************************/\r\n// protected functions\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} dataset\r\n * @param {number} epsilon\r\n * @param {number} minPts\r\n * @param {function} distance\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._init = function(dataset, epsilon, minPts, distance) {\r\n\r\n if (dataset) {\r\n\r\n if (!(dataset instanceof Array)) {\r\n throw Error('Dataset must be of type array, ' +\r\n typeof dataset + ' given');\r\n }\r\n\r\n this.dataset = dataset;\r\n this.clusters = [];\r\n this._reachability = new Array(this.dataset.length);\r\n this._processed = new Array(this.dataset.length);\r\n this._coreDistance = 0;\r\n this._orderedList = [];\r\n }\r\n\r\n if (epsilon) {\r\n this.epsilon = epsilon;\r\n }\r\n\r\n if (minPts) {\r\n this.minPts = minPts;\r\n }\r\n\r\n if (distance) {\r\n this.distance = distance;\r\n }\r\n};\r\n\r\n/**\r\n * Update information in queue\r\n *\r\n * @param {number} pointId\r\n * @param {Array} neighbors\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._updateQueue = function(pointId, neighbors, queue) {\r\n var self = this;\r\n\r\n this._coreDistance = this._distanceToCore(pointId);\r\n neighbors.forEach(function(pointId2) {\r\n if (self._processed[pointId2] === undefined) {\r\n var dist = self.distance(self.dataset[pointId], self.dataset[pointId2]);\r\n var newReachableDistance = Math.max(self._coreDistance, dist);\r\n\r\n if (self._reachability[pointId2] === undefined) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.insert(pointId2, newReachableDistance);\r\n } else {\r\n if (newReachableDistance < self._reachability[pointId2]) {\r\n self._reachability[pointId2] = newReachableDistance;\r\n queue.remove(pointId2);\r\n queue.insert(pointId2, newReachableDistance);\r\n }\r\n }\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Expand cluster\r\n *\r\n * @param {number} clusterId\r\n * @param {PriorityQueue} queue\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nOPTICS.prototype._expandCluster = function(clusterId, queue) {\r\n var queueElements = queue.getElements();\r\n\r\n for (var p = 0, l = queueElements.length; p < l; p++) {\r\n var pointId = queueElements[p];\r\n if (this._processed[pointId] === undefined) {\r\n var neighbors = this._regionQuery(pointId);\r\n this._processed[pointId] = 1;\r\n\r\n this.clusters[clusterId].push(pointId);\r\n this._orderedList.push(pointId);\r\n\r\n if (this._distanceToCore(pointId) !== undefined) {\r\n this._updateQueue(pointId, neighbors, queue);\r\n this._expandCluster(clusterId, queue);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Calculating distance to cluster core\r\n *\r\n * @param {number} pointId\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._distanceToCore = function(pointId) {\r\n var l = this.epsilon;\r\n for (var coreDistCand = 0; coreDistCand < l; coreDistCand++) {\r\n var neighbors = this._regionQuery(pointId, coreDistCand);\r\n if (neighbors.length >= this.minPts) {\r\n return coreDistCand;\r\n }\r\n }\r\n\r\n return;\r\n};\r\n\r\n/**\r\n * Find all neighbors around given point\r\n *\r\n * @param {number} pointId\r\n * @param {number} epsilon\r\n * @returns {Array}\r\n * @access protected\r\n */\r\nOPTICS.prototype._regionQuery = function(pointId, epsilon) {\r\n epsilon = epsilon || this.epsilon;\r\n var neighbors = [];\r\n\r\n for (var id = 0, l = this.dataset.length; id < l; id++) {\r\n if (this.distance(this.dataset[pointId], this.dataset[id]) < epsilon) {\r\n neighbors.push(id);\r\n }\r\n }\r\n\r\n return neighbors;\r\n};\r\n\r\n/******************************************************************************/\r\n// helpers\r\n\r\n/**\r\n * Calculate euclidean distance in multidimensional space\r\n *\r\n * @param {Array} p\r\n * @param {Array} q\r\n * @returns {number}\r\n * @access protected\r\n */\r\nOPTICS.prototype._euclideanDistance = function(p, q) {\r\n var sum = 0;\r\n var i = Math.min(p.length, q.length);\r\n\r\n while (i--) {\r\n sum += (p[i] - q[i]) * (p[i] - q[i]);\r\n }\r\n\r\n return Math.sqrt(sum);\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = OPTICS;\r\n}\r\n","/**\r\n * PriorityQueue\r\n * Elements in this queue are sorted according to their value\r\n *\r\n * @author Lukasz Krawczyk \r\n * @copyright MIT\r\n */\r\n\r\n/**\r\n * PriorityQueue class construcotr\r\n * @constructor\r\n *\r\n * @example\r\n * queue: [1,2,3,4]\r\n * priorities: [4,1,2,3]\r\n * > result = [1,4,2,3]\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @param {string} sorting - asc / desc\r\n * @returns {PriorityQueue}\r\n */\r\nfunction PriorityQueue(elements, priorities, sorting) {\r\n /** @type {Array} */\r\n this._queue = [];\r\n /** @type {Array} */\r\n this._priorities = [];\r\n /** @type {string} */\r\n this._sorting = 'desc';\r\n\r\n this._init(elements, priorities, sorting);\r\n};\r\n\r\n/**\r\n * Insert element\r\n *\r\n * @param {Object} ele\r\n * @param {Object} priority\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.insert = function(ele, priority) {\r\n var indexToInsert = this._queue.length;\r\n var index = indexToInsert;\r\n\r\n while (index--) {\r\n var priority2 = this._priorities[index];\r\n if (this._sorting === 'desc') {\r\n if (priority > priority2) {\r\n indexToInsert = index;\r\n }\r\n } else {\r\n if (priority < priority2) {\r\n indexToInsert = index;\r\n }\r\n }\r\n }\r\n\r\n this._insertAt(ele, priority, indexToInsert);\r\n};\r\n\r\n/**\r\n * Remove element\r\n *\r\n * @param {Object} ele\r\n * @returns {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.remove = function(ele) {\r\n var index = this._queue.length;\r\n\r\n while (index--) {\r\n var ele2 = this._queue[index];\r\n if (ele === ele2) {\r\n this._queue.splice(index, 1);\r\n this._priorities.splice(index, 1);\r\n break;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * For each loop wrapper\r\n *\r\n * @param {function} func\r\n * @returs {undefined}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.forEach = function(func) {\r\n this._queue.forEach(func);\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElements = function() {\r\n return this._queue;\r\n};\r\n\r\n/**\r\n * @param {number} index\r\n * @returns {Object}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementPriority = function(index) {\r\n return this._priorities[index];\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getPriorities = function() {\r\n return this._priorities;\r\n};\r\n\r\n/**\r\n * @returns {Array}\r\n * @access public\r\n */\r\nPriorityQueue.prototype.getElementsWithPriorities = function() {\r\n var result = [];\r\n\r\n for (var i = 0, l = this._queue.length; i < l; i++) {\r\n result.push([this._queue[i], this._priorities[i]]);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Set object properties\r\n *\r\n * @param {Array} elements\r\n * @param {Array} priorities\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._init = function(elements, priorities, sorting) {\r\n\r\n if (elements && priorities) {\r\n this._queue = [];\r\n this._priorities = [];\r\n\r\n if (elements.length !== priorities.length) {\r\n throw new Error('Arrays must have the same length');\r\n }\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n this.insert(elements[i], priorities[i]);\r\n }\r\n }\r\n\r\n if (sorting) {\r\n this._sorting = sorting;\r\n }\r\n};\r\n\r\n/**\r\n * Insert element at given position\r\n *\r\n * @param {Object} ele\r\n * @param {number} index\r\n * @returns {undefined}\r\n * @access protected\r\n */\r\nPriorityQueue.prototype._insertAt = function(ele, priority, index) {\r\n if (this._queue.length === index) {\r\n this._queue.push(ele);\r\n this._priorities.push(priority);\r\n } else {\r\n this._queue.splice(index, 0, ele);\r\n this._priorities.splice(index, 0, priority);\r\n }\r\n};\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = PriorityQueue;\r\n}\r\n","\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = {\r\n DBSCAN: require('./DBSCAN.js'),\r\n KMEANS: require('./KMEANS.js'),\r\n OPTICS: require('./OPTICS.js'),\r\n PriorityQueue: require('./PriorityQueue.js')\r\n };\r\n}\r\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n","//index.js\nvar deepEqual = require('deep-equal');\n\nvar Equality = function(opt) {\n this.precision = opt && opt.precision ? opt.precision : 17;\n this.direction = opt && opt.direction ? opt.direction : false;\n this.pseudoNode = opt && opt.pseudoNode ? opt.pseudoNode : false;\n this.objectComparator = opt && opt.objectComparator ? opt.objectComparator : objectComparator;\n};\n\nEquality.prototype.compare = function(g1,g2) {\n if (g1.type !== g2.type || !sameLength(g1,g2)) return false;\n\n switch(g1.type) {\n case 'Point':\n return this.compareCoord(g1.coordinates, g2.coordinates);\n break;\n case 'LineString':\n return this.compareLine(g1.coordinates, g2.coordinates,0,false);\n break;\n case 'Polygon':\n return this.comparePolygon(g1,g2);\n break;\n case 'Feature':\n return this.compareFeature(g1, g2);\n default:\n if (g1.type.indexOf('Multi') === 0) {\n var context = this;\n var g1s = explode(g1);\n var g2s = explode(g2);\n return g1s.every(function(g1part) {\n return this.some(function(g2part) {\n return context.compare(g1part,g2part);\n });\n },g2s);\n }\n }\n return false;\n};\n\nfunction explode(g) {\n return g.coordinates.map(function(part) {\n return {\n type: g.type.replace('Multi', ''),\n coordinates: part}\n });\n}\n//compare length of coordinates/array\nfunction sameLength(g1,g2) {\n return g1.hasOwnProperty('coordinates') ?\n g1.coordinates.length === g2.coordinates.length\n : g1.length === g2.length;\n}\n\n// compare the two coordinates [x,y]\nEquality.prototype.compareCoord = function(c1,c2) {\n if (c1.length !== c2.length) {\n return false;\n }\n\n for (var i=0; i < c1.length; i++) {\n if (c1[i].toFixed(this.precision) !== c2[i].toFixed(this.precision)) {\n return false;\n }\n }\n return true;\n};\n\nEquality.prototype.compareLine = function(path1,path2,ind,isPoly) {\n if (!sameLength(path1,path2)) return false;\n var p1 = this.pseudoNode ? path1 : this.removePseudo(path1);\n var p2 = this.pseudoNode ? path2 : this.removePseudo(path2);\n if (isPoly && !this.compareCoord(p1[0],p2[0])) {\n // fix start index of both to same point\n p2 = this.fixStartIndex(p2,p1);\n if(!p2) return;\n }\n // for linestring ind =0 and for polygon ind =1\n var sameDirection = this.compareCoord(p1[ind],p2[ind]);\n if (this.direction || sameDirection\n ) {\n return this.comparePath(p1, p2);\n } else {\n if (this.compareCoord(p1[ind],p2[p2.length - (1+ind)])\n ) {\n return this.comparePath(p1.slice().reverse(), p2);\n }\n return false;\n }\n};\nEquality.prototype.fixStartIndex = function(sourcePath,targetPath) {\n //make sourcePath first point same as of targetPath\n var correctPath,ind = -1;\n for (var i=0; i< sourcePath.length; i++) {\n if(this.compareCoord(sourcePath[i],targetPath[0])) {\n ind = i;\n break;\n }\n }\n if (ind >= 0) {\n correctPath = [].concat(\n sourcePath.slice(ind,sourcePath.length),\n sourcePath.slice(1,ind+1));\n }\n return correctPath;\n};\nEquality.prototype.comparePath = function (p1,p2) {\n var cont = this;\n return p1.every(function(c,i) {\n return cont.compareCoord(c,this[i]);\n },p2);\n};\n\nEquality.prototype.comparePolygon = function(g1,g2) {\n if (this.compareLine(g1.coordinates[0],g2.coordinates[0],1,true)) {\n var holes1 = g1.coordinates.slice(1,g1.coordinates.length);\n var holes2 = g2.coordinates.slice(1,g2.coordinates.length);\n var cont = this;\n return holes1.every(function(h1) {\n return this.some(function(h2) {\n return cont.compareLine(h1,h2,1,true);\n });\n },holes2);\n } else {\n return false;\n }\n};\n\nEquality.prototype.compareFeature = function(g1,g2) {\n if (\n g1.id !== g2.id ||\n !this.objectComparator(g1.properties, g2.properties) ||\n !this.compareBBox(g1,g2)\n ) {\n return false;\n }\n return this.compare(g1.geometry, g2.geometry);\n};\n\nEquality.prototype.compareBBox = function(g1,g2) {\n if (\n (!g1.bbox && !g2.bbox) || \n (\n g1.bbox && g2.bbox &&\n this.compareCoord(g1.bbox, g2.bbox)\n )\n ) {\n return true;\n }\n return false;\n};\nEquality.prototype.removePseudo = function(path) {\n //TODO to be implement\n return path;\n};\n\nfunction objectComparator(obj1, obj2) {\n return deepEqual(obj1, obj2, {strict: true});\n}\n\nmodule.exports = Equality;\n","var rbush = require('rbush');\nvar helpers = require('@turf/helpers');\nvar meta = require('@turf/meta');\nvar turfBBox = require('@turf/bbox').default;\nvar featureEach = meta.featureEach;\nvar coordEach = meta.coordEach;\nvar polygon = helpers.polygon;\nvar featureCollection = helpers.featureCollection;\n\n/**\n * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.\n *\n * @name rbush\n * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a\n * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var geojsonRbush = require('geojson-rbush').default;\n * var tree = geojsonRbush();\n */\nfunction geojsonRbush(maxEntries) {\n var tree = new rbush(maxEntries);\n /**\n * [insert](https://github.com/mourner/rbush#data-format)\n *\n * @param {Feature} feature insert single GeoJSON Feature\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n * tree.insert(poly)\n */\n tree.insert = function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid feature');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.insert.call(this, feature);\n };\n\n /**\n * [load](https://github.com/mourner/rbush#bulk-inserting-data)\n *\n * @param {FeatureCollection|Array} features load entire GeoJSON FeatureCollection\n * @returns {RBush} GeoJSON RBush\n * @example\n * var polys = turf.polygons([\n * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],\n * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]\n * ]);\n * tree.load(polys);\n */\n tree.load = function (features) {\n var load = [];\n // Load an Array of Features\n if (Array.isArray(features)) {\n features.forEach(function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid features');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n } else {\n // Load a FeatureCollection\n featureEach(features, function (feature) {\n if (feature.type !== 'Feature') throw new Error('invalid features');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n }\n return rbush.prototype.load.call(this, load);\n };\n\n /**\n * [remove](https://github.com/mourner/rbush#removing-data)\n *\n * @param {Feature} feature remove single GeoJSON Feature\n * @param {Function} equals Pass a custom equals function to compare by value for removal.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.remove(poly);\n */\n tree.remove = function (feature, equals) {\n if (feature.type !== 'Feature') throw new Error('invalid feature');\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.remove.call(this, feature, equals);\n };\n\n /**\n * [clear](https://github.com/mourner/rbush#removing-data)\n *\n * @returns {RBush} GeoJSON Rbush\n * @example\n * tree.clear()\n */\n tree.clear = function () {\n return rbush.prototype.clear.call(this);\n };\n\n /**\n * [search](https://github.com/mourner/rbush#search)\n *\n * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON\n * @returns {FeatureCollection} all features that intersects with the given GeoJSON.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.search(poly);\n */\n tree.search = function (geojson) {\n var features = rbush.prototype.search.call(this, this.toBBox(geojson));\n return featureCollection(features);\n };\n\n /**\n * [collides](https://github.com/mourner/rbush#collisions)\n *\n * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON\n * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.\n * @example\n * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n *\n * tree.collides(poly);\n */\n tree.collides = function (geojson) {\n return rbush.prototype.collides.call(this, this.toBBox(geojson));\n };\n\n /**\n * [all](https://github.com/mourner/rbush#search)\n *\n * @returns {FeatureCollection} all the features in RBush\n * @example\n * tree.all()\n */\n tree.all = function () {\n var features = rbush.prototype.all.call(this);\n return featureCollection(features);\n };\n\n /**\n * [toJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @returns {any} export data as JSON object\n * @example\n * var exported = tree.toJSON()\n */\n tree.toJSON = function () {\n return rbush.prototype.toJSON.call(this);\n };\n\n /**\n * [fromJSON](https://github.com/mourner/rbush#export-and-import)\n *\n * @param {any} json import previously exported data\n * @returns {RBush} GeoJSON RBush\n * @example\n * var exported = {\n * \"children\": [\n * {\n * \"type\": \"Feature\",\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * },\n * \"properties\": {},\n * \"bbox\": [110, 50, 110, 50]\n * }\n * ],\n * \"height\": 1,\n * \"leaf\": true,\n * \"minX\": 110,\n * \"minY\": 50,\n * \"maxX\": 110,\n * \"maxY\": 50\n * }\n * tree.fromJSON(exported)\n */\n tree.fromJSON = function (json) {\n return rbush.prototype.fromJSON.call(this, json);\n };\n\n /**\n * Converts GeoJSON to {minX, minY, maxX, maxY} schema\n *\n * @private\n * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from\n * @returns {Object} converted to {minX, minY, maxX, maxY}\n */\n tree.toBBox = function (geojson) {\n var bbox;\n if (geojson.bbox) bbox = geojson.bbox;\n else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n else if (geojson.type === 'Feature') bbox = turfBBox(geojson);\n else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson);\n else throw new Error('invalid geojson')\n\n return {\n minX: bbox[0],\n minY: bbox[1],\n maxX: bbox[2],\n maxY: bbox[3]\n };\n };\n return tree;\n}\n\nmodule.exports = geojsonRbush;\nmodule.exports.default = geojsonRbush;\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion paramter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -near;\n }\n\n return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {ReadonlyVec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the source vector\n * @returns {vec2} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to ceil\n * @returns {vec2} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to floor\n * @returns {vec2} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to round\n * @returns {vec2} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\n * Calculates the length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to negate\n * @returns {vec2} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to invert\n * @returns {vec2} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to normalize\n * @returns {vec2} out\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {ReadonlyVec2} a The vec2 point to rotate\n * @param {ReadonlyVec2} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec2} out\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\n * Get the angle between two 2D vectors\n * @param {ReadonlyVec2} a The first operand\n * @param {ReadonlyVec2} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec2 to zero\n *\n * @param {vec2} out the receiving vector\n * @returns {vec2} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\n * Alias for {@link vec2.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();","\nvar libh3 = (\nfunction(libh3) {\n libh3 = libh3 || {};\n\nvar Module=typeof libh3!==\"undefined\"?libh3:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0,\"getNativeTypeSize invalid bits \"+bits+\", type \"+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for getValue: \"+type)}return null}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=24048,DYNAMIC_BASE=5266928,DYNAMICTOP_PTR=24016;var INITIAL_TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||33554432;if(Module[\"buffer\"]){buffer=Module[\"buffer\"]}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}INITIAL_TOTAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var tempDouble;var tempI64;memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAYAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAABAAAAAMAAAAGAAAABQAAAAIAAAAAAAAAAgAAAAMAAAABAAAABAAAAAYAAAAAAAAABQAAAAMAAAAGAAAABAAAAAUAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAABAAAABQAAAAIAAAAAAAAAAQAAAAMAAAAGAAAABAAAAAYAAAAAAAAABQAAAAIAAAABAAAABAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABgAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAACAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAwAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAQAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAFAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAABgAAAAAAAAADAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAEAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAEAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAACAAAABAAAAAMAAAAIAAAA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AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAADAAAABQAAAAEAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAABQAAAAUAAAAAAAAAAAAAAP////8BAAAAAAAAAAMAAAAEAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAABQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAQAAAP//////////AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAIAAAAAAAAAAAAAAAEAAAACAAAABgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAAAAAAAAAABAAAAAQAAAAUAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAAAAAAAAAAAAAEAAAADAAAABwAAAAYAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAAAAAAAAAAAAQAAAAAAAAAJAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAAAAAAAAAAAAQAAAAQAAAAIAAAACgAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAAAAAAAAAAABAAAACwAAAA8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAgAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAAAAAAABAAAADAAAABAAAAAMAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAEAAAAKAAAAEwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAAAAAAAAAQAAAA0AAAARAAAADQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAAAAAAAAAAAAAEAAAAOAAAAEgAAAA8AAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABMAAAACAAAAAAAAAAAAAAABAAAA//////////8TAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABIAAAAAAAAAGAAAAAAAAAAhAAAAAAAAAB4AAAAAAAAAIAAAAAMAAAAxAAAAAQAAADAAAAADAAAAMgAAAAMAAAAIAAAAAAAAAAUAAAAFAAAACgAAAAUAAAAWAAAAAAAAABAAAAAAAAAAEgAAAAAAAAApAAAAAQAAACEAAAAAAAAAHgAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAgAAAAUAAAAPAAAAAQAAAAgAAAAAAAAABQAAAAUAAAAfAAAAAQAAABYAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAYAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAsAAAAAAAAAEQAAAAMAAAAYAAAAAQAAABcAAAADAAAAGQAAAAMAAAAAAAAAAAAAAAEAAAAFAAAACQAAAAUAAAAFAAAAAAAAAAIAAAAAAAAABgAAAAAAAAASAAAAAQAAAAoAAAAAAAAACwAAAAAAAAAEAAAAAQAAAAMAAAAFAAAABwAAAAUAAAAIAAAAAQAAAAAAAAAAAAAAAQAAAAUAAAAQAAAAAQAAAAUAAAAAAAAAAgAAAAAAAAAHAAAAAAAAABUAAAAAAAAAJgAAAAAAAAAJAAAAAAAAABMAAAAAAAAAIgAAAAMAAAAOAAAAAQAAABQAAAADAAAAJAAAAAMAAAADAAAAAAAAAA0AAAAFAAAAHQAAAAUAAAABAAAAAAAAAAcAAAAAAAAAFQAAAAAAAAAGAAAAAQAAAAkAAAAAAAAAEwAAAAAAAAAEAAAAAgAAAAwAAAAFAAAAGgAAAAUAAAAAAAAAAQAAAAMAAAAAAAAADQAAAAUAAAACAAAAAQAAAAEAAAAAAAAABwAAAAAAAAAaAAAAAAAAACoAAAAAAAAAOgAAAAAAAAAdAAAAAAAAACsAAAAAAAAAPgAAAAMAAAAmAAAAAQAAAC8AAAADAAAAQAAAAAMAAAAMAAAAAAAAABwAAAAFAAAALAAAAAUAAAANAAAAAAAAABoAAAAAAAAAKgAAAAAAAAAVAAAAAQAAAB0AAAAAAAAAKwAAAAAAAAAEAAAAAwAAAA8AAAAFAAAAHwAAAAUAAAADAAAAAQAAAAwAAAAAAAAAHAAAAAUAAAAHAAAAAQAAAA0AAAAAAAAAGgAAAAAAAAAfAAAAAAAAACkAAAAAAAAAMQAAAAAAAAAsAAAAAAAAADUAAAAAAAAAPQAAAAMAAAA6AAAAAQAAAEEAAAADAAAASwAAAAMAAAAPAAAAAAAAABYAAAAFAAAAIQAAAAUAAAAcAAAAAAAAAB8AAAAAAAAAKQAAAAAAAAAqAAAAAQAAACwAAAAAAAAANQAAAAAAAAAEAAAABAAAAAgAAAAFAAAAEAAAAAUAAAAMAAAAAQAAAA8AAAAAAAAAFgAAAAUAAAAaAAAAAQAAABwAAAAAAAAAHwAAAAAAAAAyAAAAAAAAADAAAAAAAAAAMQAAAAMAAAAgAAAAAAAAAB4AAAADAAAAIQAAAAMAAAAYAAAAAwAAABIAAAADAAAAEAAAAAMAAABGAAAAAAAAAEMAAAAAAAAAQgAAAAMAAAA0AAAAAwAAADIAAAAAAAAAMAAAAAAAAAAlAAAAAwAAACAAAAAAAAAAHgAAAAMAAABTAAAAAAAAAFcAAAADAAAAVQAAAAMAAABKAAAAAwAAAEYAAAAAAAAAQwAAAAAAAAA5AAAAAQAAADQAAAADAAAAMgAAAAAAAAAZAAAAAAAAABcAAAAAAAAAGAAAAAMAAAARAAAAAAAAAAsAAAADAAAACgAAAAMAAAAOAAAAAwAAAAYAAAADAAAAAgAAAAMAAAAtAAAAAAAAACcAAAAAAAAAJQAAAAMAAAAjAAAAAwAAABkAAAAAAAAAFwAAAAAAAAAbAAAAAwAAABEAAAAAAAAACwAAAAMAAAA/AAAAAAAAADsAAAADAAAAOQAAAAMAAAA4AAAAAwAAAC0AAAAAAAAAJwAAAAAAAAAuAAAAAwAAACMAAAADAAAAGQAAAAAAAAAkAAAAAAAAABQAAAAAAAAADgAAAAMAAAAiAAAAAAAAABMAAAADAAAACQAAAAMAAAAmAAAAAwAAABUAAAADAAAABwAAAAMAAAA3AAAAAAAAACgAAAAAAAAAGwAAAAMAAAA2AAAAAwAAACQAAAAAAAAAFAAAAAAAAAAzAAAAAwAAACIAAAAAAAAAEwAAAAMAAABIAAAAAAAAADwAAAADAAAALgAAAAMAAABJAAAAAwAAADcAAAAAAAAAKAAAAAAAAABHAAAAAwAAADYAAAADAAAAJAAAAAAAAABAAAAAAAAAAC8AAAAAAAAAJgAAAAMAAAA+AAAAAAAAACsAAAADAAAAHQAAAAMAAAA6AAAAAwAAACoAAAADAAAAGgAAAAMAAABUAAAAAAAAAEUAAAAAAAAAMwAAAAMAAABSAAAAAwAAAEAAAAAAAAAALwAAAAAAAABMAAAAAwAAAD4AAAAAAAAAKwAAAAMAAABhAAAAAAAAAFkAAAADAAAARwAAAAMAAABiAAAAAwAAAFQAAAAAAAAARQAAAAAAAABgAAAAAwAAAFIAAAADAAAAQAAAAAAAAABLAAAAAAAAAEEAAAAAAAAAOgAAAAMAAAA9AAAAAAAAADUAAAADAAAALAAAAAMAAAAxAAAAAwAAACkAAAADAAAAHwAAAAMAAABeAAAAAAAAAFYAAAAAAAAATAAAAAMAAABRAAAAAwAAAEsAAAAAAAAAQQAAAAAAAABCAAAAAwAAAD0AAAAAAAAANQAAAAMAAABrAAAAAAAAAGgAAAADAAAAYAAAAAMAAABlAAAAAwAAAF4AAAAAAAAAVgAAAAAAAABVAAAAAwAAAFEAAAADAAAASwAAAAAAAAA5AAAAAAAAADsAAAAAAAAAPwAAAAMAAABKAAAAAAAAAE4AAAADAAAATwAAAAMAAABTAAAAAwAAAFwAAAADAAAAXwAAAAMAAAAlAAAAAAAAACcAAAADAAAALQAAAAMAAAA0AAAAAAAAADkAAAAAAAAAOwAAAAAAAABGAAAAAwAAAEoAAAAAAAAATgAAAAMAAAAYAAAAAAAAABcAAAADAAAAGQAAAAMAAAAgAAAAAwAAACUAAAAAAAAAJwAAAAMAAAAyAAAAAwAAADQAAAAAAAAAOQAAAAAAAAAuAAAAAAAAADwAAAAAAAAASAAAAAMAAAA4AAAAAAAAAEQAAAADAAAAUAAAAAMAAAA/AAAAAwAAAE0AAAADAAAAWgAAAAMAAAAbAAAAAAAAACgAAAADAAAANwAAAAMAAAAjAAAAAAAAAC4AAAAAAAAAPAAAAAAAAAAtAAAAAwAAADgAAAAAAAAARAAAAAMAAAAOAAAAAAAAABQAAAADAAAAJAAAAAMAAAARAAAAAwAAABsAAAAAAAAAKAAAAAMAAAAZAAAAAwAAACMAAAAAAAAALgAAAAAAAABHAAAAAAAAAFkAAAAAAAAAYQAAAAMAAABJAAAAAAAAAFsAAAADAAAAZwAAAAMAAABIAAAAAwAAAFgAAAADAAAAaQAAAAMAAAAzAAAAAAAAAEUAAAADAAAAVAAAAAMAAAA2AAAAAAAAAEcAAAAAAAAAWQAAAAAAAAA3AAAAAwAAAEkAAAAAAAAAWwAAAAMAAAAmAAAAAAAAAC8AAAADAAAAQAAAAAMAAAAiAAAAAwAAADMAAAAAAAAARQAAAAMAAAAkAAAAAwAAADYAAAAAAAAARwAAAAAAAABgAAAAAAAAAGgAAAAAAAAAawAAAAMAAABiAAAAAAAAAG4AAAADAAAAcwAAAAMAAABhAAAAAwAAAG8AAAADAAAAdwAAAAMAAABMAAAAAAAAAFYAAAADAAAAXgAAAAMAAABSAAAAAAAAAGAAAAAAAAAAaAAAAAAAAABUAAAAAwAAAGIAAAAAAAAAbgAAAAMAAAA6AAAAAAAAAEEAAAADAAAASwAAAAMAAAA+AAAAAwAAAEwAAAAAAAAAVgAAAAMAAABAAAAAAwAAAFIAAAAAAAAAYAAAAAAAAABVAAAAAAAAAFcAAAAAAAAAUwAAAAMAAABlAAAAAAAAAGYAAAADAAAAZAAAAAMAAABrAAAAAwAAAHAAAAADAAAAcgAAAAMAAABCAAAAAAAAAEMAAAADAAAARgAAAAMAAABRAAAAAAAAAFUAAAAAAAAAVwAAAAAAAABeAAAAAwAAAGUAAAAAAAAAZgAAAAMAAAAxAAAAAAAAADAAAAADAAAAMgAAAAMAAAA9AAAAAwAAAEIAAAAAAAAAQwAAAAMAAABLAAAAAwAAAFEAAAAAAAAAVQAAAAAAAABfAAAAAAAAAFwAAAAAAAAAUwAAAAAAAABPAAAAAAAAAE4AAAAAAAAASgAAAAMAAAA/AAAAAQAAADsAAAADAAAAOQAAAAMAAABtAAAAAAAAAGwAAAAAAAAAZAAAAAUAAABdAAAAAQAAAF8AAAAAAAAAXAAAAAAAAABNAAAAAQAAAE8AAAAAAAAATgAAAAAAAAB1AAAABAAAAHYAAAAFAAAAcgAAAAUAAABqAAAAAQAAAG0AAAAAAAAAbAAAAAAAAABaAAAAAQAAAF0AAAABAAAAXwAAAAAAAABaAAAAAAAAAE0AAAAAAAAAPwAAAAAAAABQAAAAAAAAAEQAAAAAAAAAOAAAAAMAAABIAAAAAQAAADwAAAADAAAALgAAAAMAAABqAAAAAAAAAF0AAAAAAAAATwAAAAUAAABjAAAAAQAAAFoAAAAAAAAATQAAAAAAAABYAAAAAQAAAFAAAAAAAAAARAAAAAAAAAB1AAAAAwAAAG0AAAAFAAAAXwAAAAUAAABxAAAAAQAAAGoAAAAAAAAAXQAAAAAAAABpAAAAAQAAAGMAAAABAAAAWgAAAAAAAABpAAAAAAAAAFgAAAAAAAAASAAAAAAAAABnAAAAAAAAAFsAAAAAAAAASQAAAAMAAABhAAAAAQAAAFkAAAADAAAARwAAAAMAAABxAAAAAAAAAGMAAAAAAAAAUAAAAAUAAAB0AAAAAQAAAGkAAAAAAAAAWAAAAAAAAABvAAAAAQAAAGcAAAAAAAAAWwAAAAAAAAB1AAAAAgAAAGoAAAAFAAAAWgAAAAUAAAB5AAAAAQAAAHEAAAAAAAAAYwAAAAAAAAB3AAAAAQAAAHQAAAABAAAAaQAAAAAAAAB3AAAAAAAAAG8AAAAAAAAAYQAAAAAAAABzAAAAAAAAAG4AAAAAAAAAYgAAAAMAAABrAAAAAQAAAGgAAAADAAAAYAAAAAMAAAB5AAAAAAAAAHQAAAAAAAAAZwAAAAUAAAB4AAAAAQAAAHcAAAAAAAAAbwAAAAAAAABwAAAAAQAAAHMAAAAAAAAAbgAAAAAAAAB1AAAAAQAAAHEAAAAFAAAAaQAAAAUAAAB2AAAAAQAAAHkAAAAAAAAAdAAAAAAAAAByAAAAAQAAAHgAAAABAAAAdwAAAAAAAAByAAAAAAAAAHAAAAAAAAAAawAAAAAAAABkAAAAAAAAAGYAAAAAAAAAZQAAAAMAAABTAAAAAQAAAFcAAAADAAAAVQAAAAMAAAB2AAAAAAAAAHgAAAAAAAAAcwAAAAUAAABsAAAAAQAAAHIAAAAAAAAAcAAAAAAAAABcAAAAAQAAAGQAAAAAAAAAZgAAAAAAAAB1AAAAAAAAAHkAAAAFAAAAdwAAAAUAAABtAAAAAQAAAHYAAAAAAAAAeAAAAAAAAABfAAAAAQAAAGwAAAABAAAAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAB+ogX28rbpPxqumpJv+fM/165tC4ns9D+XaEnTqUsEQFrOtNlC4PA/3U+0XG6P9b9TdUUBxTTjP4PUp8ex1ty/B1rD/EN43z+lcDi6LLrZP/a45NWEHMY/oJ5ijLDZ+j/xw3rjxWPjP2B8A46ioQdAotff3wla2z+FMSpA1jj+v6b5Y1mtPbS/cIu8K0F457/2esiyJpDNv98k5Ts2NeA/pvljWa09tD88ClUJ60MDQPZ6yLImkM0/4ONKxa0UBcD2uOTVhBzGv5G7JRxGave/8cN648Vj47+HCwtkjAXIv6LX398JWtu/qyheaCAL9D9TdUUBxTTjv4gyTxslhwVAB1rD/EN4378EH/28teoFwH6iBfbytum/F6ztFYdK/r/Xrm0Liez0vwcS6wNGWeO/Ws602ULg8L9TCtRLiLT8P8pi5RexJsw/BlIKPVwR5T95Wyu0/QjnP5PjoT7YYcu/mBhKZ6zrwj8wRYS7NebuP3qW6geh+Ls/SLrixebL3r+pcyymN9XrPwmkNHp7xec/GWNMZVAA17+82s+x2BLiPwn2ytbJ9ek/LgEH1sMS1j8yp/2LhTfeP+SnWwtQBbu/d38gkp5X7z8ytsuHaADGPzUYObdf1+m/7IauECWhwz+cjSACjzniP76Z+wUhN9K/1+GEKzup67+/GYr/04baPw6idWOvsuc/ZedTWsRa5b/EJQOuRzi0v/OncYhHPes/h49PixY53j+i8wWfC03Nvw2idWOvsue/ZedTWsRa5T/EJQOuRzi0P/KncYhHPeu/iY9PixY53r+i8wWfC03NP9anWwtQBbs/d38gkp5X778ytsuHaADGvzUYObdf1+k/74auECWhw7+cjSACjzniv8CZ+wUhN9I/1uGEKzup6z+/GYr/04bavwmkNHp7xee/F2NMZVAA1z+82s+x2BLivwr2ytbJ9em/KwEH1sMS1r8yp/2LhTfev81i5RexJsy/BlIKPVwR5b95Wyu0/Qjnv5DjoT7YYcs/nBhKZ6zrwr8wRYS7Nebuv3OW6geh+Lu/SLrixebL3j+pcyymN9Xrv8rHIFfWehZAMBwUdlo0DECTUc17EOb2PxpVB1SWChdAzjbhb9pTDUDQhmdvECX5P9FlMKCC9+g/IIAzjELgE0DajDngMv8GQFhWDmDPjNs/y1guLh96EkAxPi8k7DIEQJCc4URlhRhA3eLKKLwkEECqpNAyTBD/P6xpjXcDiwVAFtl//cQm4z+Ibt3XKiYTQM7mCLUb3QdAoM1t8yVv7D8aLZv2Nk8UQEAJPV5nQwxAtSsfTCoE9z9TPjXLXIIWQBVanC5W9AtAYM3d7Adm9j++5mQz1FoWQBUThyaVBghAwH5muQsV7T89Q1qv82MUQJoWGOfNuBdAzrkClkmwDkDQjKq77t37Py+g0dtitsE/ZwAMTwVPEUBojepluNwBQGYbtuW+t9w/HNWIJs6MEkDTNuQUSlgEQKxktPP5TcQ/ixbLB8JjEUCwuWjXMQYCQAS/R09FkRdAowpiZjhhDkB7LmlczD/7P01iQmhhsAVAnrtTwDy84z/Z6jfQ2TgTQChOCXMnWwpAhrW3daoz8z/HYJvVPI4VQLT3ik5FcA5Angi7LOZd+z+NNVzDy5gXQBXdvVTFUA1AYNMgOeYe+T8+qHXGCwkXQKQTOKwa5AJA8gFVoEMW0T+FwzJyttIRQAEAAAD/////BwAAAP////8xAAAA/////1cBAAD/////YQkAAP////+nQQAA/////5HLAQD/////95AMAP/////B9lcAAAAAAAAAAAAAAAAAAgAAAP////8OAAAA/////2IAAAD/////rgIAAP/////CEgAA/////06DAAD/////IpcDAP/////uIRkA/////4LtrwAAAAAAAAAAAAAAAAAAAAAAAgAAAP//////////AQAAAAMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////wIAAAD//////////wEAAAAAAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA/////////////////////wEAAAD///////////////8CAAAA////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD///////////////////////////////8CAAAA////////////////AQAAAP////////////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAAAQAAAP//////////AgAAAP//////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAAEAAAD//////////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAFAAAABQAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAACAAAAAAAAAAUAAAAGAAAAAAAAAAIAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAADAAAAAgAAAAIAAAAAAAAABQAAAAcAAAAAAAAAAgAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAQAAAACAAAAAgAAAAAAAAAFAAAACAAAAAAAAAACAAAAAgAAAAMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAUAAAAJAAAAAAAAAAIAAAACAAAAAwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACAAAAAAAAAAMAAAAOAAAAAgAAAAAAAAACAAAAAwAAAAAAAAAAAAAAAgAAAAIAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAIAAAAAAAAAAwAAAAoAAAACAAAAAAAAAAIAAAADAAAAAQAAAAAAAAACAAAAAgAAAAMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAAAAAADAAAACwAAAAIAAAAAAAAAAgAAAAMAAAACAAAAAAAAAAIAAAACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAAAAAAMAAAAMAAAAAgAAAAAAAAACAAAAAwAAAAMAAAAAAAAAAgAAAAIAAAADAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAIAAAAAAAAAAwAAAA0AAAACAAAAAAAAAAIAAAADAAAABAAAAAAAAAACAAAAAgAAAAMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAAAAAADAAAABgAAAAIAAAAAAAAAAgAAAAMAAAAPAAAAAAAAAAIAAAACAAAAAwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAAAAAACAAAAAwAAABAAAAAAAAAAAgAAAAIAAAADAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAIAAAAAAAAAAwAAAAgAAAACAAAAAAAAAAIAAAADAAAAEQAAAAAAAAACAAAAAgAAAAMAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAAAAAgAAAAAAAAADAAAACQAAAAIAAAAAAAAAAgAAAAMAAAASAAAAAAAAAAIAAAACAAAAAwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAACAAAAAAAAAAMAAAAFAAAAAgAAAAAAAAACAAAAAwAAABMAAAAAAAAAAgAAAAIAAAADAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAAFAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAABAAEAAAEBAAAAAAABAAAAAQAAAAEAAQAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAAAAQAAAAMAAAAOAAAABgAAAAsAAAACAAAABwAAAAEAAAAYAAAABQAAAAoAAAABAAAABgAAAAAAAAAmAAAABwAAAAwAAAADAAAACAAAAAIAAAAxAAAACQAAAA4AAAAAAAAABQAAAAQAAAA6AAAACAAAAA0AAAAEAAAACQAAAAMAAAA/AAAACwAAAAYAAAAPAAAACgAAABAAAABIAAAADAAAAAcAAAAQAAAACwAAABEAAABTAAAACgAAAAUAAAATAAAADgAAAA8AAABhAAAADQAAAAgAAAARAAAADAAAABIAAABrAAAADgAAAAkAAAASAAAADQAAABMAAAB1AAAADwAAABMAAAARAAAAEgAAABAAAAAHAAAABwAAAAEAAAACAAAABAAAAAMAAAAAAAAAAAAAAAcAAAADAAAAAQAAAAIAAAAFAAAABAAAAAAAAAAAAAAAYWxnb3MuYwBfcG9seWZpbGxJbnRlcm5hbABhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0dlb0JvdW5kYXJ5AGFkamFjZW50RmFjZURpcltjZW50ZXJJSksuZmFjZV1bZmFjZTJdID09IEtJAF9mYWNlSWprVG9HZW9Cb3VuZGFyeQBwb2x5Z29uLT5uZXh0ID09IE5VTEwAbGlua2VkR2VvLmMAYWRkTmV3TGlua2VkUG9seWdvbgBuZXh0ICE9IE5VTEwAbG9vcCAhPSBOVUxMAGFkZE5ld0xpbmtlZExvb3AAcG9seWdvbi0+Zmlyc3QgPT0gTlVMTABhZGRMaW5rZWRMb29wAGNvb3JkICE9IE5VTEwAYWRkTGlua2VkQ29vcmQAbG9vcC0+Zmlyc3QgPT0gTlVMTABpbm5lckxvb3BzICE9IE5VTEwAbm9ybWFsaXplTXVsdGlQb2x5Z29uAGJib3hlcyAhPSBOVUxMAGNhbmRpZGF0ZXMgIT0gTlVMTABmaW5kUG9seWdvbkZvckhvbGUAY2FuZGlkYXRlQkJveGVzICE9IE5VTEwAcmV2RGlyICE9IElOVkFMSURfRElHSVQAbG9jYWxpai5jAGgzVG9Mb2NhbElqawBiYXNlQ2VsbCAhPSBvcmlnaW5CYXNlQ2VsbAAhKG9yaWdpbk9uUGVudCAmJiBpbmRleE9uUGVudCkAcGVudGFnb25Sb3RhdGlvbnMgPj0gMABkaXJlY3Rpb25Sb3RhdGlvbnMgPj0gMABiYXNlQ2VsbCA9PSBvcmlnaW5CYXNlQ2VsbABiYXNlQ2VsbCAhPSBJTlZBTElEX0JBU0VfQ0VMTABsb2NhbElqa1RvSDMAIV9pc0Jhc2VDZWxsUGVudGFnb24oYmFzZUNlbGwpAGJhc2VDZWxsUm90YXRpb25zID49IDAAd2l0aGluUGVudGFnb25Sb3RhdGlvbnMgPj0gMABncmFwaC0+YnVja2V0cyAhPSBOVUxMAHZlcnRleEdyYXBoLmMAaW5pdFZlcnRleEdyYXBoAG5vZGUgIT0gTlVMTABhZGRWZXJ0ZXhOb2Rl\";var tempDoublePtr=24032;function demangle(func){return func}function demangleAll(text){var regex=/\\b__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+\" [\"+x+\"]\"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort(\"Assertion failed: \"+UTF8ToString(condition)+\", at: \"+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"])}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}function abortOnCannotGrowMemory(requestedSize){abort(\"OOM\")}function emscripten_realloc_buffer(size){try{var newBuffer=new ArrayBuffer(size);if(newBuffer.byteLength!=size)return;new Int8Array(newBuffer).set(HEAP8);_emscripten_replace_memory(newBuffer);updateGlobalBufferAndViews(newBuffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=16777216;var LIMIT=2147483648-PAGE_MULTIPLE;if(requestedSize>LIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\") at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=a;b[g+4>>2]=c;g=(f|0)!=0;if(g)b[f>>2]=0;if(Fb(a,c)|0){n=1;S=o;return n|0}b[n>>2]=0;a:do if((d|0)>=1)if(g){k=0;l=1;m=1;h=0;g=a;while(1){if(!(h|k)){g=da(g,c,4,n)|0;c=G()|0;if((g|0)==0&(c|0)==0){g=2;break a}if(Fb(g,c)|0){g=1;break a}}g=da(g,c,b[16+(k<<2)>>2]|0,n)|0;c=G()|0;if((g|0)==0&(c|0)==0){g=2;break a}a=e+(m<<3)|0;b[a>>2]=g;b[a+4>>2]=c;b[f+(m<<2)>>2]=l;h=h+1|0;a=(h|0)==(l|0);i=k+1|0;j=(i|0)==6;if(Fb(g,c)|0){g=1;break a}l=l+(j&a&1)|0;if((l|0)>(d|0)){g=0;break}else{k=a?(j?0:i):k;m=m+1|0;h=a?0:h}}}else{k=0;l=1;m=1;h=0;g=a;while(1){if(!(h|k)){g=da(g,c,4,n)|0;c=G()|0;if((g|0)==0&(c|0)==0){g=2;break a}if(Fb(g,c)|0){g=1;break a}}g=da(g,c,b[16+(k<<2)>>2]|0,n)|0;c=G()|0;if((g|0)==0&(c|0)==0){g=2;break a}a=e+(m<<3)|0;b[a>>2]=g;b[a+4>>2]=c;h=h+1|0;a=(h|0)==(l|0);i=k+1|0;j=(i|0)==6;if(Fb(g,c)|0){g=1;break a}l=l+(j&a&1)|0;if((l|0)>(d|0)){g=0;break}else{k=a?(j?0:i):k;m=m+1|0;h=a?0:h}}}else g=0;while(0);n=g;S=o;return n|0}function ca(a,c,d,e,f,g,h){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=S;S=S+16|0;l=m;if((a|0)==0&(c|0)==0){S=m;return}i=bd(a|0,c|0,g|0,((g|0)<0)<<31>>31|0)|0;G()|0;j=e+(i<<3)|0;n=j;o=b[n>>2]|0;n=b[n+4>>2]|0;k=(o|0)==(a|0)&(n|0)==(c|0);if(!((o|0)==0&(n|0)==0|k))do{i=(i+1|0)%(g|0)|0;j=e+(i<<3)|0;o=j;n=b[o>>2]|0;o=b[o+4>>2]|0;k=(n|0)==(a|0)&(o|0)==(c|0)}while(!((n|0)==0&(o|0)==0|k));i=f+(i<<2)|0;if(k?(b[i>>2]|0)<=(h|0):0){S=m;return}o=j;b[o>>2]=a;b[o+4>>2]=c;b[i>>2]=h;if((h|0)>=(d|0)){S=m;return}o=h+1|0;b[l>>2]=0;n=da(a,c,2,l)|0;ca(n,G()|0,d,e,f,g,o);b[l>>2]=0;n=da(a,c,3,l)|0;ca(n,G()|0,d,e,f,g,o);b[l>>2]=0;n=da(a,c,1,l)|0;ca(n,G()|0,d,e,f,g,o);b[l>>2]=0;n=da(a,c,5,l)|0;ca(n,G()|0,d,e,f,g,o);b[l>>2]=0;n=da(a,c,4,l)|0;ca(n,G()|0,d,e,f,g,o);b[l>>2]=0;n=da(a,c,6,l)|0;ca(n,G()|0,d,e,f,g,o);S=m;return}function da(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((b[e>>2]|0)>0){f=0;do{d=Pa(d)|0;f=f+1|0}while((f|0)<(b[e>>2]|0))}i=cd(a|0,c|0,45)|0;G()|0;j=i&127;g=Lb(a,c)|0;f=cd(a|0,c|0,52)|0;G()|0;f=f&15;a:do if(!f)h=6;else while(1){m=(15-f|0)*3|0;n=cd(a|0,c|0,m|0)|0;G()|0;n=n&7;o=(Rb(f)|0)==0;f=f+-1|0;l=dd(7,0,m|0)|0;c=c&~(G()|0);m=dd(b[(o?464:48)+(n*28|0)+(d<<2)>>2]|0,0,m|0)|0;k=G()|0;d=b[(o?672:256)+(n*28|0)+(d<<2)>>2]|0;a=m|a&~l;c=k|c;if(!d){d=0;break a}if(!f){h=6;break}}while(0);if((h|0)==6){o=b[880+(j*28|0)+(d<<2)>>2]|0;n=dd(o|0,0,45)|0;a=n|a;c=G()|0|c&-1040385;d=b[4304+(j*28|0)+(d<<2)>>2]|0;if((o&127|0)==127){o=dd(b[880+(j*28|0)+20>>2]|0,0,45)|0;c=G()|0|c&-1040385;d=b[4304+(j*28|0)+20>>2]|0;a=Nb(o|a,c)|0;c=G()|0;b[e>>2]=(b[e>>2]|0)+1}}h=cd(a|0,c|0,45)|0;G()|0;h=h&127;b:do if(!(la(h)|0)){if((d|0)>0){f=0;do{a=Nb(a,c)|0;c=G()|0;f=f+1|0}while((f|0)!=(d|0))}}else{c:do if((Lb(a,c)|0)==1){if((j|0)!=(h|0))if(ra(h,b[7728+(j*28|0)>>2]|0)|0){a=Pb(a,c)|0;g=1;c=G()|0;break}else{a=Nb(a,c)|0;g=1;c=G()|0;break}switch(g|0){case 5:{a=Pb(a,c)|0;c=G()|0;b[e>>2]=(b[e>>2]|0)+5;g=0;break c}case 3:{a=Nb(a,c)|0;c=G()|0;b[e>>2]=(b[e>>2]|0)+1;g=0;break c}default:{n=0;o=0;F(n|0);return o|0}}}else g=0;while(0);if((d|0)>0){f=0;do{a=Mb(a,c)|0;c=G()|0;f=f+1|0}while((f|0)!=(d|0))}if((j|0)!=(h|0)){if(!(ma(h)|0)){if((g|0)!=0|(Lb(a,c)|0)!=5)break;b[e>>2]=(b[e>>2]|0)+1;break}switch(i&127){case 8:case 118:break b;default:{}}if((Lb(a,c)|0)!=3)b[e>>2]=(b[e>>2]|0)+1}}while(0);b[e>>2]=((b[e>>2]|0)+d|0)%6|0;n=c;o=a;F(n|0);return o|0}function ea(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=S;S=S+16|0;l=m;if(!d){l=e;b[l>>2]=a;b[l+4>>2]=c;l=0;S=m;return l|0}b[l>>2]=0;a:do if(!(Fb(a,c)|0)){g=(d|0)>0;if(g){f=0;k=a;do{k=da(k,c,4,l)|0;c=G()|0;if((k|0)==0&(c|0)==0){a=2;break a}f=f+1|0;if(Fb(k,c)|0){a=1;break a}}while((f|0)<(d|0));j=e;b[j>>2]=k;b[j+4>>2]=c;j=d+-1|0;if(g){g=0;h=1;f=k;a=c;do{f=da(f,a,2,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}i=e+(h<<3)|0;b[i>>2]=f;b[i+4>>2]=a;h=h+1|0;if(Fb(f,a)|0){a=1;break a}g=g+1|0}while((g|0)<(d|0));i=0;g=h;do{f=da(f,a,3,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}h=e+(g<<3)|0;b[h>>2]=f;b[h+4>>2]=a;g=g+1|0;if(Fb(f,a)|0){a=1;break a}i=i+1|0}while((i|0)<(d|0));h=0;do{f=da(f,a,1,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}i=e+(g<<3)|0;b[i>>2]=f;b[i+4>>2]=a;g=g+1|0;if(Fb(f,a)|0){a=1;break a}h=h+1|0}while((h|0)<(d|0));h=0;do{f=da(f,a,5,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}i=e+(g<<3)|0;b[i>>2]=f;b[i+4>>2]=a;g=g+1|0;if(Fb(f,a)|0){a=1;break a}h=h+1|0}while((h|0)<(d|0));h=0;do{f=da(f,a,4,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}i=e+(g<<3)|0;b[i>>2]=f;b[i+4>>2]=a;g=g+1|0;if(Fb(f,a)|0){a=1;break a}h=h+1|0}while((h|0)<(d|0));h=0;while(1){f=da(f,a,6,l)|0;a=G()|0;if((f|0)==0&(a|0)==0){a=2;break a}if((h|0)!=(j|0)){i=e+(g<<3)|0;b[i>>2]=f;b[i+4>>2]=a;if(!(Fb(f,a)|0))g=g+1|0;else{a=1;break a}}h=h+1|0;if((h|0)>=(d|0)){h=k;g=c;break}}}else{h=k;f=k;g=c;a=c}}else{h=e;b[h>>2]=a;b[h+4>>2]=c;h=a;f=a;g=c;a=c}a=((h|0)!=(f|0)|(g|0)!=(a|0))&1}else a=1;while(0);l=a;S=m;return l|0}function fa(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=S;S=S+48|0;f=g+8|0;e=g;i=a;h=b[i+4>>2]|0;d=e;b[d>>2]=b[i>>2];b[d+4>>2]=h;vc(e,f);f=ya(f,c)|0;c=b[e>>2]|0;e=b[a+8>>2]|0;if((e|0)<=0){i=c;h=(f|0)<(i|0);i=h?i:f;i=i+12|0;S=g;return i|0}d=b[a+12>>2]|0;a=0;do{c=(b[d+(a<<3)>>2]|0)+c|0;a=a+1|0}while((a|0)<(e|0));i=(f|0)<(c|0);i=i?c:f;i=i+12|0;S=g;return i|0}function ga(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=S;S=S+48|0;e=i+8|0;f=i;if(!(ha(a,c,d)|0)){S=i;return}j=a;g=b[j+4>>2]|0;h=f;b[h>>2]=b[j>>2];b[h+4>>2]=g;vc(f,e);h=ya(e,c)|0;c=b[f>>2]|0;g=b[a+8>>2]|0;if((g|0)>0){f=b[a+12>>2]|0;e=0;do{c=(b[f+(e<<3)>>2]|0)+c|0;e=e+1|0}while((e|0)!=(g|0))}c=(h|0)<(c|0)?c:h;if((c|0)<=-12){S=i;return}j=c+11|0;hd(d|0,0,(((j|0)>0?j:0)<<3)+8|0)|0;S=i;return}function ha(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,I=0,J=0;J=S;S=S+112|0;D=J+80|0;j=J+72|0;E=J;F=J+56|0;k=a+8|0;I=Wc((b[k>>2]<<5)+32|0)|0;if(!I)H(22848,22448,800,22456);wc(a,I);g=a;e=b[g+4>>2]|0;i=j;b[i>>2]=b[g>>2];b[i+4>>2]=e;vc(j,D);i=ya(D,c)|0;e=b[j>>2]|0;g=b[k>>2]|0;if((g|0)>0){h=b[a+12>>2]|0;f=0;do{e=(b[h+(f<<3)>>2]|0)+e|0;f=f+1|0}while((f|0)!=(g|0))}i=(i|0)<(e|0)?e:i;C=i+12|0;f=Yc(C,8)|0;l=Yc(C,8)|0;b[D>>2]=0;A=a;B=b[A+4>>2]|0;e=j;b[e>>2]=b[A>>2];b[e+4>>2]=B;e=ia(j,C,c,D,f,l)|0;if(e|0){Xc(f);Xc(l);Xc(I);I=e;S=J;return I|0}a:do if((b[k>>2]|0)>0){g=a+12|0;e=0;while(1){h=ia((b[g>>2]|0)+(e<<3)|0,C,c,D,f,l)|0;e=e+1|0;if(h|0)break;if((e|0)>=(b[k>>2]|0))break a}Xc(f);Xc(l);Xc(I);I=h;S=J;return I|0}while(0);if((i|0)>-12)hd(l|0,0,((C|0)>1?C:1)<<3|0)|0;b:do if((b[D>>2]|0)>0){B=((C|0)<0)<<31>>31;v=f;w=l;x=f;y=f;z=l;A=f;e=f;r=f;s=l;t=l;u=l;f=l;c:while(1){q=b[D>>2]|0;o=0;p=0;g=0;while(1){h=E;i=h+56|0;do{b[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c=v+(o<<3)|0;j=b[c>>2]|0;c=b[c+4>>2]|0;if(ba(j,c,1,E,0)|0){h=E;i=h+56|0;do{b[h>>2]=0;h=h+4|0}while((h|0)<(i|0));h=Yc(7,4)|0;if(h|0){ca(j,c,1,E,h,7,0);Xc(h)}}n=0;do{m=E+(n<<3)|0;l=b[m>>2]|0;m=b[m+4>>2]|0;d:do if(!((l|0)==0&(m|0)==0)){j=bd(l|0,m|0,C|0,B|0)|0;G()|0;h=d+(j<<3)|0;i=h;c=b[i>>2]|0;i=b[i+4>>2]|0;if(!((c|0)==0&(i|0)==0)){k=0;while(1){if((k|0)>(C|0))break c;if((c|0)==(l|0)&(i|0)==(m|0))break d;j=(j+1|0)%(C|0)|0;h=d+(j<<3)|0;i=h;c=b[i>>2]|0;i=b[i+4>>2]|0;if((c|0)==0&(i|0)==0)break;else k=k+1|0}}if(!((l|0)==0&(m|0)==0)){Vb(l,m,F);if(xc(a,I,F)|0){k=h;b[k>>2]=l;b[k+4>>2]=m;k=w+(g<<3)|0;b[k>>2]=l;b[k+4>>2]=m;g=g+1|0}}}while(0);n=n+1|0}while(n>>>0<7);p=p+1|0;if((p|0)>=(q|0))break;else o=o+1|0}if((q|0)>0)hd(x|0,0,q<<3|0)|0;b[D>>2]=g;if((g|0)>0){l=f;m=u;n=A;o=t;p=s;q=w;f=r;u=e;t=y;s=x;r=l;e=m;A=z;z=n;y=o;x=p;w=v;v=q}else break b}Xc(y);Xc(z);Xc(I);I=-1;S=J;return I|0}else e=l;while(0);Xc(I);Xc(f);Xc(e);I=0;S=J;return I|0}function ia(a,c,d,f,g,h){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=S;S=S+48|0;y=C+32|0;z=C+16|0;A=C;i=b[a>>2]|0;if((i|0)<=0){B=0;S=C;return B|0}t=a+4|0;u=y+8|0;v=z+8|0;w=A+8|0;x=((c|0)<0)<<31>>31;s=0;a:while(1){j=b[t>>2]|0;q=j+(s<<4)|0;b[y>>2]=b[q>>2];b[y+4>>2]=b[q+4>>2];b[y+8>>2]=b[q+8>>2];b[y+12>>2]=b[q+12>>2];if((s|0)==(i+-1|0)){b[z>>2]=b[j>>2];b[z+4>>2]=b[j+4>>2];b[z+8>>2]=b[j+8>>2];b[z+12>>2]=b[j+12>>2]}else{q=j+(s+1<<4)|0;b[z>>2]=b[q>>2];b[z+4>>2]=b[q+4>>2];b[z+8>>2]=b[q+8>>2];b[z+12>>2]=b[q+12>>2]}q=za(y,z,d)|0;b:do if((q|0)>0){r=+(q|0);p=0;c:while(1){E=+(q-p|0);D=+(p|0);e[A>>3]=+e[y>>3]*E/r+ +e[z>>3]*D/r;e[w>>3]=+e[u>>3]*E/r+ +e[v>>3]*D/r;n=Sb(A,d)|0;o=G()|0;j=bd(n|0,o|0,c|0,x|0)|0;G()|0;i=h+(j<<3)|0;k=i;l=b[k>>2]|0;k=b[k+4>>2]|0;d:do if((l|0)==0&(k|0)==0)B=14;else{m=0;while(1){if((m|0)>(c|0)){i=1;break d}if((l|0)==(n|0)&(k|0)==(o|0)){i=7;break d}j=(j+1|0)%(c|0)|0;i=h+(j<<3)|0;k=i;l=b[k>>2]|0;k=b[k+4>>2]|0;if((l|0)==0&(k|0)==0){B=14;break}else m=m+1|0}}while(0);if((B|0)==14){B=0;if((n|0)==0&(o|0)==0)i=7;else{b[i>>2]=n;b[i+4>>2]=o;i=b[f>>2]|0;m=g+(i<<3)|0;b[m>>2]=n;b[m+4>>2]=o;b[f>>2]=i+1;i=0}}switch(i&7){case 7:case 0:break;default:break c}p=p+1|0;if((q|0)<=(p|0)){B=8;break b}}if(i|0){i=-1;B=20;break a}}else B=8;while(0);if((B|0)==8)B=0;s=s+1|0;i=b[a>>2]|0;if((s|0)>=(i|0)){i=0;B=20;break}}if((B|0)==20){S=C;return i|0}return 0}function ja(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=S;S=S+176|0;j=k;if((c|0)<1){Mc(d,0,0);S=k;return}h=a;h=cd(b[h>>2]|0,b[h+4>>2]|0,52)|0;G()|0;Mc(d,(c|0)>6?c:6,h&15);h=0;do{e=a+(h<<3)|0;Wb(b[e>>2]|0,b[e+4>>2]|0,j);e=b[j>>2]|0;if((e|0)>0){i=0;do{g=j+8+(i<<4)|0;i=i+1|0;e=j+8+(((i|0)%(e|0)|0)<<4)|0;f=Rc(d,e,g)|0;if(!f)Qc(d,g,e)|0;else Pc(d,f)|0;e=b[j>>2]|0}while((i|0)<(e|0))}h=h+1|0}while((h|0)!=(c|0));S=k;return}function ka(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;g=S;S=S+32|0;e=g;f=g+16|0;ja(a,c,f);b[d>>2]=0;b[d+4>>2]=0;b[d+8>>2]=0;a=Oc(f)|0;if(!a){kc(d)|0;Nc(f);S=g;return}do{c=hc(d)|0;do{ic(c,a)|0;h=a+16|0;b[e>>2]=b[h>>2];b[e+4>>2]=b[h+4>>2];b[e+8>>2]=b[h+8>>2];b[e+12>>2]=b[h+12>>2];Pc(f,a)|0;a=Sc(f,e)|0}while((a|0)!=0);a=Oc(f)|0}while((a|0)!=0);kc(d)|0;Nc(f);S=g;return}function la(a){a=a|0;return b[7728+(a*28|0)+16>>2]|0}function ma(a){a=a|0;return (a|0)==4|(a|0)==117|0}function na(a){a=a|0;return b[11152+((b[a>>2]|0)*216|0)+((b[a+4>>2]|0)*72|0)+((b[a+8>>2]|0)*24|0)+(b[a+12>>2]<<3)>>2]|0}function oa(a){a=a|0;return b[11152+((b[a>>2]|0)*216|0)+((b[a+4>>2]|0)*72|0)+((b[a+8>>2]|0)*24|0)+(b[a+12>>2]<<3)+4>>2]|0}function pa(a,c){a=a|0;c=c|0;a=7728+(a*28|0)|0;b[c>>2]=b[a>>2];b[c+4>>2]=b[a+4>>2];b[c+8>>2]=b[a+8>>2];b[c+12>>2]=b[a+12>>2];return}function qa(a,c){a=a|0;c=c|0;var d=0,e=0;if(c>>>0>20){c=-1;return c|0}do if((b[11152+(c*216|0)>>2]|0)!=(a|0))if((b[11152+(c*216|0)+8>>2]|0)!=(a|0))if((b[11152+(c*216|0)+16>>2]|0)!=(a|0))if((b[11152+(c*216|0)+24>>2]|0)!=(a|0))if((b[11152+(c*216|0)+32>>2]|0)!=(a|0))if((b[11152+(c*216|0)+40>>2]|0)!=(a|0))if((b[11152+(c*216|0)+48>>2]|0)!=(a|0))if((b[11152+(c*216|0)+56>>2]|0)!=(a|0))if((b[11152+(c*216|0)+64>>2]|0)!=(a|0))if((b[11152+(c*216|0)+72>>2]|0)!=(a|0))if((b[11152+(c*216|0)+80>>2]|0)!=(a|0))if((b[11152+(c*216|0)+88>>2]|0)!=(a|0))if((b[11152+(c*216|0)+96>>2]|0)!=(a|0))if((b[11152+(c*216|0)+104>>2]|0)!=(a|0))if((b[11152+(c*216|0)+112>>2]|0)!=(a|0))if((b[11152+(c*216|0)+120>>2]|0)!=(a|0))if((b[11152+(c*216|0)+128>>2]|0)!=(a|0))if((b[11152+(c*216|0)+136>>2]|0)==(a|0)){a=2;d=1;e=2}else{if((b[11152+(c*216|0)+144>>2]|0)==(a|0)){a=0;d=2;e=0;break}if((b[11152+(c*216|0)+152>>2]|0)==(a|0)){a=0;d=2;e=1;break}if((b[11152+(c*216|0)+160>>2]|0)==(a|0)){a=0;d=2;e=2;break}if((b[11152+(c*216|0)+168>>2]|0)==(a|0)){a=1;d=2;e=0;break}if((b[11152+(c*216|0)+176>>2]|0)==(a|0)){a=1;d=2;e=1;break}if((b[11152+(c*216|0)+184>>2]|0)==(a|0)){a=1;d=2;e=2;break}if((b[11152+(c*216|0)+192>>2]|0)==(a|0)){a=2;d=2;e=0;break}if((b[11152+(c*216|0)+200>>2]|0)==(a|0)){a=2;d=2;e=1;break}if((b[11152+(c*216|0)+208>>2]|0)==(a|0)){a=2;d=2;e=2;break}else a=-1;return a|0}else{a=2;d=1;e=1}else{a=2;d=1;e=0}else{a=1;d=1;e=2}else{a=1;d=1;e=1}else{a=1;d=1;e=0}else{a=0;d=1;e=2}else{a=0;d=1;e=1}else{a=0;d=1;e=0}else{a=2;d=0;e=2}else{a=2;d=0;e=1}else{a=2;d=0;e=0}else{a=1;d=0;e=2}else{a=1;d=0;e=1}else{a=1;d=0;e=0}else{a=0;d=0;e=2}else{a=0;d=0;e=1}else{a=0;d=0;e=0}while(0);c=b[11152+(c*216|0)+(d*72|0)+(a*24|0)+(e<<3)+4>>2]|0;return c|0}function ra(a,c){a=a|0;c=c|0;if((b[7728+(a*28|0)+20>>2]|0)==(c|0)){c=1;return c|0}c=(b[7728+(a*28|0)+24>>2]|0)==(c|0);return c|0}function sa(a,c){a=a|0;c=c|0;return b[880+(a*28|0)+(c<<2)>>2]|0}function ta(a,c){a=a|0;c=c|0;if((b[880+(a*28|0)>>2]|0)==(c|0)){c=0;return c|0}if((b[880+(a*28|0)+4>>2]|0)==(c|0)){c=1;return c|0}if((b[880+(a*28|0)+8>>2]|0)==(c|0)){c=2;return c|0}if((b[880+(a*28|0)+12>>2]|0)==(c|0)){c=3;return c|0}if((b[880+(a*28|0)+16>>2]|0)==(c|0)){c=4;return c|0}if((b[880+(a*28|0)+20>>2]|0)==(c|0)){c=5;return c|0}else return ((b[880+(a*28|0)+24>>2]|0)==(c|0)?6:7)|0;return 0}function ua(){return 122}function va(a){a=a|0;var c=0,d=0,e=0;c=0;do{dd(c|0,0,45)|0;e=G()|0|134225919;d=a+(c<<3)|0;b[d>>2]=-1;b[d+4>>2]=e;c=c+1|0}while((c|0)!=122);return}function wa(a){a=a|0;return +e[a+16>>3]<+e[a+24>>3]|0}function xa(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;c=+e[b>>3];if(!(c>=+e[a+8>>3])){b=0;return b|0}if(!(c<=+e[a>>3])){b=0;return b|0}d=+e[a+16>>3];c=+e[a+24>>3];f=+e[b+8>>3];b=f>=c;a=f<=d&1;if(d>2]=0;h=h+4|0}while((h|0)<(j|0));_b(c,g);h=g;j=b[h>>2]|0;h=b[h+4>>2]|0;Vb(j,h,d);Wb(j,h,f);k=+jb(d,f+8|0);e[d>>3]=+e[a>>3];h=d+8|0;e[h>>3]=+e[a+16>>3];e[f>>3]=+e[a+8>>3];j=f+8|0;e[j>>3]=+e[a+24>>3];l=+jb(d,f);j=~~+A(+(l*l/+ed(+(+q(+((+e[h>>3]-+e[j>>3])/(+e[d>>3]-+e[f>>3])))),3.0)/(k*(k*2.59807621135)*.8)));S=i;return ((j|0)==0?1:j)|0}function za(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0.0;i=S;S=S+288|0;e=i+264|0;f=i+96|0;g=i;h=g;j=h+96|0;do{b[h>>2]=0;h=h+4|0}while((h|0)<(j|0));_b(d,g);j=g;h=b[j>>2]|0;j=b[j+4>>2]|0;Vb(h,j,e);Wb(h,j,f);k=+jb(e,f+8|0);j=~~+A(+(+jb(a,c)/(k*2.0)));S=i;return ((j|0)==0?1:j)|0}function Aa(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;b[a>>2]=c;b[a+4>>2]=d;b[a+8>>2]=e;return}function Ba(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0.0;n=c+8|0;b[n>>2]=0;k=+e[a>>3];i=+q(+k);l=+e[a+8>>3];j=+q(+l)/.8660254037844386;i=i+j*.5;d=~~i;a=~~j;i=i-+(d|0);j=j-+(a|0);do if(i<.5)if(i<.3333333333333333){b[c>>2]=d;if(j<(i+1.0)*.5){b[c+4>>2]=a;break}else{a=a+1|0;b[c+4>>2]=a;break}}else{o=1.0-i;a=(!(j>2]=a;if(o<=j&j>2]=d;break}else{b[c>>2]=d;break}}else{if(!(i<.6666666666666666)){d=d+1|0;b[c>>2]=d;if(j>2]=a;break}else{a=a+1|0;b[c+4>>2]=a;break}}if(j<1.0-i){b[c+4>>2]=a;if(i*2.0+-1.0>2]=d;break}}else{a=a+1|0;b[c+4>>2]=a}d=d+1|0;b[c>>2]=d}while(0);do if(k<0.0)if(!(a&1)){m=(a|0)/2|0;m=_c(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;d=~~(+(d|0)-(+(m>>>0)+4294967296.0*+(G()|0))*2.0);b[c>>2]=d;break}else{m=(a+1|0)/2|0;m=_c(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;d=~~(+(d|0)-((+(m>>>0)+4294967296.0*+(G()|0))*2.0+1.0));b[c>>2]=d;break}while(0);m=c+4|0;if(l<0.0){d=d-((a<<1|1|0)/2|0)|0;b[c>>2]=d;a=0-a|0;b[m>>2]=a}f=a-d|0;if((d|0)<0){g=0-d|0;b[m>>2]=f;b[n>>2]=g;b[c>>2]=0;a=f;d=0}else g=0;if((a|0)<0){d=d-a|0;b[c>>2]=d;g=g-a|0;b[n>>2]=g;b[m>>2]=0;a=0}h=d-g|0;f=a-g|0;if((g|0)<0){b[c>>2]=h;b[m>>2]=f;b[n>>2]=0;a=f;d=h;g=0}f=(a|0)<(d|0)?a:d;f=(g|0)<(f|0)?g:f;if((f|0)<=0)return;b[c>>2]=d-f;b[m>>2]=a-f;b[n>>2]=g-f;return}function Ca(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;if((c|0)<0){d=d-c|0;b[h>>2]=d;g=a+8|0;b[g>>2]=(b[g>>2]|0)-c;b[a>>2]=0;c=0}if((d|0)<0){c=c-d|0;b[a>>2]=c;g=a+8|0;f=(b[g>>2]|0)-d|0;b[g>>2]=f;b[h>>2]=0;d=0}else{f=a+8|0;g=f;f=b[f>>2]|0}if((f|0)<0){c=c-f|0;b[a>>2]=c;d=d-f|0;b[h>>2]=d;b[g>>2]=0;f=0}e=(d|0)<(c|0)?d:c;e=(f|0)<(e|0)?f:e;if((e|0)<=0)return;b[a>>2]=c-e;b[h>>2]=d-e;b[g>>2]=f-e;return}function Da(a,c){a=a|0;c=c|0;var d=0.0,f=0;f=b[a+8>>2]|0;d=+((b[a+4>>2]|0)-f|0);e[c>>3]=+((b[a>>2]|0)-f|0)-d*.5;e[c+8>>3]=d*.8660254037844386;return}function Ea(a,c,d){a=a|0;c=c|0;d=d|0;b[d>>2]=(b[c>>2]|0)+(b[a>>2]|0);b[d+4>>2]=(b[c+4>>2]|0)+(b[a+4>>2]|0);b[d+8>>2]=(b[c+8>>2]|0)+(b[a+8>>2]|0);return}function Fa(a,c,d){a=a|0;c=c|0;d=d|0;b[d>>2]=(b[a>>2]|0)-(b[c>>2]|0);b[d+4>>2]=(b[a+4>>2]|0)-(b[c+4>>2]|0);b[d+8>>2]=(b[a+8>>2]|0)-(b[c+8>>2]|0);return}function Ga(a,c){a=a|0;c=c|0;var d=0,e=0;d=B(b[a>>2]|0,c)|0;b[a>>2]=d;d=a+4|0;e=B(b[d>>2]|0,c)|0;b[d>>2]=e;a=a+8|0;c=B(b[a>>2]|0,c)|0;b[a>>2]=c;return}function Ha(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=b[a>>2]|0;i=(h|0)<0;e=(b[a+4>>2]|0)-(i?h:0)|0;g=(e|0)<0;f=(g?0-e|0:0)+((b[a+8>>2]|0)-(i?h:0))|0;d=(f|0)<0;a=d?0:f;c=(g?0:e)-(d?f:0)|0;f=(i?0:h)-(g?e:0)-(d?f:0)|0;d=(c|0)<(f|0)?c:f;d=(a|0)<(d|0)?a:d;e=(d|0)>0;a=a-(e?d:0)|0;c=c-(e?d:0)|0;a:do switch(f-(e?d:0)|0){case 0:switch(c|0){case 0:{i=(a|0)==0?0:(a|0)==1?1:7;return i|0}case 1:{i=(a|0)==0?2:(a|0)==1?3:7;return i|0}default:break a}case 1:switch(c|0){case 0:{i=(a|0)==0?4:(a|0)==1?5:7;return i|0}case 1:{if(!a)a=6;else break a;return a|0}default:break a}default:{}}while(0);i=7;return i|0}function Ia(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=b[h>>2]|0;c=(b[a>>2]|0)-d|0;i=a+4|0;d=(b[i>>2]|0)-d|0;e=Vc(+((c*3|0)-d|0)/7.0)|0;b[a>>2]=e;c=Vc(+((d<<1)+c|0)/7.0)|0;b[i>>2]=c;b[h>>2]=0;d=c-e|0;if((e|0)<0){g=0-e|0;b[i>>2]=d;b[h>>2]=g;b[a>>2]=0;c=d;e=0;d=g}else d=0;if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0)return;b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;return}function Ja(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=b[h>>2]|0;c=(b[a>>2]|0)-d|0;i=a+4|0;d=(b[i>>2]|0)-d|0;e=Vc(+((c<<1)+d|0)/7.0)|0;b[a>>2]=e;c=Vc(+((d*3|0)-c|0)/7.0)|0;b[i>>2]=c;b[h>>2]=0;d=c-e|0;if((e|0)<0){g=0-e|0;b[i>>2]=d;b[h>>2]=g;b[a>>2]=0;c=d;e=0;d=g}else d=0;if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0)return;b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;return}function Ka(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;i=a+8|0;e=b[i>>2]|0;f=d+(c*3|0)|0;b[a>>2]=f;d=e+(d*3|0)|0;b[h>>2]=d;c=(e*3|0)+c|0;b[i>>2]=c;e=d-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=e;b[i>>2]=c;b[a>>2]=0;d=e;e=0}else e=f;if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function La(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=(c*3|0)+f|0;f=d+(f*3|0)|0;b[a>>2]=f;b[h>>2]=e;c=(d*3|0)+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;f=0}else d=e;if((d|0)<0){f=f-d|0;b[a>>2]=f;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=f-c|0;e=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=e;b[i>>2]=0;f=g;c=0}else e=d;d=(e|0)<(f|0)?e:f;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=f-d;b[h>>2]=e-d;b[i>>2]=c-d;return}function Ma(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;if((c+-1|0)>>>0>=6)return;f=(b[15472+(c*12|0)>>2]|0)+(b[a>>2]|0)|0;b[a>>2]=f;i=a+4|0;e=(b[15472+(c*12|0)+4>>2]|0)+(b[i>>2]|0)|0;b[i>>2]=e;h=a+8|0;c=(b[15472+(c*12|0)+8>>2]|0)+(b[h>>2]|0)|0;b[h>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[i>>2]=d;b[h>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[h>>2]=c;b[i>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[i>>2]=f-d;b[h>>2]=c-d;return}function Na(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=c+f|0;f=d+f|0;b[a>>2]=f;b[h>>2]=e;c=d+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Oa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;e=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;f=e+c|0;b[a>>2]=f;e=d+e|0;b[h>>2]=e;c=d+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Pa(a){a=a|0;switch(a|0){case 1:{a=5;break}case 5:{a=4;break}case 4:{a=6;break}case 6:{a=2;break}case 2:{a=3;break}case 3:{a=1;break}default:{}}return a|0}function Qa(a){a=a|0;switch(a|0){case 1:{a=3;break}case 3:{a=2;break}case 2:{a=6;break}case 6:{a=4;break}case 4:{a=5;break}case 5:{a=1;break}default:{}}return a|0}function Ra(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;i=a+8|0;e=b[i>>2]|0;f=d+(c<<1)|0;b[a>>2]=f;d=e+(d<<1)|0;b[h>>2]=d;c=(e<<1)+c|0;b[i>>2]=c;e=d-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=e;b[i>>2]=c;b[a>>2]=0;d=e;e=0}else e=f;if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Sa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=(c<<1)+f|0;f=d+(f<<1)|0;b[a>>2]=f;b[h>>2]=e;c=(d<<1)+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;f=0}else d=e;if((d|0)<0){f=f-d|0;b[a>>2]=f;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=f-c|0;e=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=e;b[i>>2]=0;f=g;c=0}else e=d;d=(e|0)<(f|0)?e:f;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=f-d;b[h>>2]=e-d;b[i>>2]=c-d;return}function Ta(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=(b[a>>2]|0)-(b[c>>2]|0)|0;i=(h|0)<0;e=(b[a+4>>2]|0)-(b[c+4>>2]|0)-(i?h:0)|0;g=(e|0)<0;f=(i?0-h|0:0)+(b[a+8>>2]|0)-(b[c+8>>2]|0)+(g?0-e|0:0)|0;a=(f|0)<0;c=a?0:f;d=(g?0:e)-(a?f:0)|0;f=(i?0:h)-(g?e:0)-(a?f:0)|0;a=(d|0)<(f|0)?d:f;a=(c|0)<(a|0)?c:a;e=(a|0)>0;c=c-(e?a:0)|0;d=d-(e?a:0)|0;a=f-(e?a:0)|0;a=(a|0)>-1?a:0-a|0;d=(d|0)>-1?d:0-d|0;c=(c|0)>-1?c:0-c|0;c=(d|0)>(c|0)?d:c;return ((a|0)>(c|0)?a:c)|0}function Ua(a,c){a=a|0;c=c|0;var d=0;d=b[a+8>>2]|0;b[c>>2]=(b[a>>2]|0)-d;b[c+4>>2]=(b[a+4>>2]|0)-d;return}function Va(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b[a>>2]|0;b[c>>2]=e;a=b[a+4>>2]|0;h=c+4|0;b[h>>2]=a;i=c+8|0;b[i>>2]=0;d=a-e|0;if((e|0)<0){a=0-e|0;b[h>>2]=d;b[i>>2]=a;b[c>>2]=0;e=0}else{d=a;a=0}if((d|0)<0){e=e-d|0;b[c>>2]=e;a=a-d|0;b[i>>2]=a;b[h>>2]=0;d=0}g=e-a|0;f=d-a|0;if((a|0)<0){b[c>>2]=g;b[h>>2]=f;b[i>>2]=0;d=f;f=g;a=0}else f=e;e=(d|0)<(f|0)?d:f;e=(a|0)<(e|0)?a:e;if((e|0)<=0)return;b[c>>2]=f-e;b[h>>2]=d-e;b[i>>2]=a-e;return}function Wa(a){a=a|0;var c=0,d=0,e=0,f=0;c=a+8|0;f=b[c>>2]|0;d=f-(b[a>>2]|0)|0;b[a>>2]=d;e=a+4|0;a=(b[e>>2]|0)-f|0;b[e>>2]=a;b[c>>2]=0-(a+d);return}function Xa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;d=b[a>>2]|0;c=0-d|0;b[a>>2]=c;h=a+8|0;b[h>>2]=0;i=a+4|0;e=b[i>>2]|0;f=e+d|0;if((d|0)>0){b[i>>2]=f;b[h>>2]=d;b[a>>2]=0;c=0;e=f}else d=0;if((e|0)<0){g=c-e|0;b[a>>2]=g;d=d-e|0;b[h>>2]=d;b[i>>2]=0;f=g-d|0;c=0-d|0;if((d|0)<0){b[a>>2]=f;b[i>>2]=c;b[h>>2]=0;e=c;d=0}else{e=0;f=g}}else f=c;c=(e|0)<(f|0)?e:f;c=(d|0)<(c|0)?d:c;if((c|0)<=0)return;b[a>>2]=f-c;b[i>>2]=e-c;b[h>>2]=d-c;return}function Ya(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=S;S=S+16|0;e=d;Za(a,b,c,e);Ba(e,c+4|0);S=d;return}function Za(a,c,d,f){a=a|0;c=c|0;d=d|0;f=f|0;var g=0.0,h=0,i=0.0,j=0.0,k=0;k=S;S=S+32|0;h=k;Jc(a,h);b[d>>2]=0;g=+Ic(15888,h);i=+Ic(15912,h);if(i>2]=1;g=i}i=+Ic(15936,h);if(i>2]=2;g=i}i=+Ic(15960,h);if(i>2]=3;g=i}i=+Ic(15984,h);if(i>2]=4;g=i}i=+Ic(16008,h);if(i>2]=5;g=i}i=+Ic(16032,h);if(i>2]=6;g=i}i=+Ic(16056,h);if(i>2]=7;g=i}i=+Ic(16080,h);if(i>2]=8;g=i}i=+Ic(16104,h);if(i>2]=9;g=i}i=+Ic(16128,h);if(i>2]=10;g=i}i=+Ic(16152,h);if(i>2]=11;g=i}i=+Ic(16176,h);if(i>2]=12;g=i}i=+Ic(16200,h);if(i>2]=13;g=i}i=+Ic(16224,h);if(i>2]=14;g=i}i=+Ic(16248,h);if(i>2]=15;g=i}i=+Ic(16272,h);if(i>2]=16;g=i}i=+Ic(16296,h);if(i>2]=17;g=i}i=+Ic(16320,h);if(i>2]=18;g=i}i=+Ic(16344,h);if(i>2]=19;g=i}i=+w(+(1.0-g*.5));if(i<1.0e-16){b[f>>2]=0;b[f+4>>2]=0;b[f+8>>2]=0;b[f+12>>2]=0;S=k;return}d=b[d>>2]|0;g=+e[16368+(d*24|0)>>3];g=+gb(g-+gb(+lb(15568+(d<<4)|0,a)));if(!(Rb(c)|0))j=g;else j=+gb(g+-.3334731722518321);g=+v(+i)/.381966011250105;if((c|0)>0){h=0;do{g=g*2.6457513110645907;h=h+1|0}while((h|0)!=(c|0))}i=+t(+j)*g;e[f>>3]=i;j=+u(+j)*g;e[f+8>>3]=j;S=k;return}function _a(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0.0,i=0.0;h=+Fc(a);if(h<1.0e-16){c=15568+(c<<4)|0;b[g>>2]=b[c>>2];b[g+4>>2]=b[c+4>>2];b[g+8>>2]=b[c+8>>2];b[g+12>>2]=b[c+12>>2];return}i=+z(+(+e[a+8>>3]),+(+e[a>>3]));if((d|0)>0){a=0;do{h=h/2.6457513110645907;a=a+1|0}while((a|0)!=(d|0))}if(!f){h=+y(+(h*.381966011250105));if(Rb(d)|0)i=+gb(i+.3334731722518321)}else{h=h/3.0;d=(Rb(d)|0)==0;h=+y(+((d?h:h/2.6457513110645907)*.381966011250105))}mb(15568+(c<<4)|0,+gb(+e[16368+(c*24|0)>>3]-i),h,g);return}function $a(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=S;S=S+16|0;f=e;Da(a+4|0,f);_a(f,b[a>>2]|0,c,0,d);S=e;return}function ab(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0.0,J=0.0;G=S;S=S+272|0;h=G+256|0;u=G+240|0;D=G;E=G+224|0;F=G+208|0;v=G+176|0;w=G+160|0;x=G+192|0;y=G+144|0;z=G+128|0;A=G+112|0;B=G+96|0;C=G+80|0;b[h>>2]=c;b[u>>2]=b[a>>2];b[u+4>>2]=b[a+4>>2];b[u+8>>2]=b[a+8>>2];b[u+12>>2]=b[a+12>>2];bb(u,h,D);b[g>>2]=0;u=f+d+((f|0)==5&1)|0;if((u|0)<=(d|0)){S=G;return}k=b[h>>2]|0;l=E+4|0;m=v+4|0;n=d+5|0;o=16848+(k<<2)|0;p=16928+(k<<2)|0;q=z+8|0;r=A+8|0;s=B+8|0;t=F+4|0;j=d;a:while(1){i=D+(((j|0)%5|0)<<4)|0;b[F>>2]=b[i>>2];b[F+4>>2]=b[i+4>>2];b[F+8>>2]=b[i+8>>2];b[F+12>>2]=b[i+12>>2];do{}while((cb(F,k,0,1)|0)==2);if((j|0)>(d|0)&(Rb(c)|0)!=0){b[v>>2]=b[F>>2];b[v+4>>2]=b[F+4>>2];b[v+8>>2]=b[F+8>>2];b[v+12>>2]=b[F+12>>2];Da(l,w);f=b[v>>2]|0;h=b[17008+(f*80|0)+(b[E>>2]<<2)>>2]|0;b[v>>2]=b[18608+(f*80|0)+(h*20|0)>>2];i=b[18608+(f*80|0)+(h*20|0)+16>>2]|0;if((i|0)>0){a=0;do{Na(m);a=a+1|0}while((a|0)<(i|0))}i=18608+(f*80|0)+(h*20|0)+4|0;b[x>>2]=b[i>>2];b[x+4>>2]=b[i+4>>2];b[x+8>>2]=b[i+8>>2];Ga(x,(b[o>>2]|0)*3|0);Ea(m,x,m);Ca(m);Da(m,y);I=+(b[p>>2]|0);e[z>>3]=I*3.0;e[q>>3]=0.0;J=I*-1.5;e[A>>3]=J;e[r>>3]=I*2.598076211353316;e[B>>3]=J;e[s>>3]=I*-2.598076211353316;switch(b[17008+((b[v>>2]|0)*80|0)+(b[F>>2]<<2)>>2]|0){case 1:{a=A;f=z;break}case 3:{a=B;f=A;break}case 2:{a=z;f=B;break}default:{a=12;break a}}Gc(w,y,f,a,C);_a(C,b[v>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}if((j|0)<(n|0)){Da(t,v);_a(v,b[F>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1};b[E>>2]=b[F>>2];b[E+4>>2]=b[F+4>>2];b[E+8>>2]=b[F+8>>2];b[E+12>>2]=b[F+12>>2];j=j+1|0;if((j|0)>=(u|0)){a=3;break}}if((a|0)==3){S=G;return}else if((a|0)==12)H(22474,22521,581,22531)}function bb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=S;S=S+128|0;e=j+64|0;f=j;g=e;h=20208;i=g+60|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=f;h=20272;i=g+60|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));i=(Rb(b[c>>2]|0)|0)==0;e=i?e:f;f=a+4|0;Ra(f);Sa(f);if(Rb(b[c>>2]|0)|0){La(f);b[c>>2]=(b[c>>2]|0)+1}b[d>>2]=b[a>>2];c=d+4|0;Ea(f,e,c);Ca(c);b[d+16>>2]=b[a>>2];c=d+20|0;Ea(f,e+12|0,c);Ca(c);b[d+32>>2]=b[a>>2];c=d+36|0;Ea(f,e+24|0,c);Ca(c);b[d+48>>2]=b[a>>2];c=d+52|0;Ea(f,e+36|0,c);Ca(c);b[d+64>>2]=b[a>>2];d=d+68|0;Ea(f,e+48|0,d);Ca(d);S=j;return}function cb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=S;S=S+32|0;n=p+12|0;i=p;o=a+4|0;m=b[16928+(c<<2)>>2]|0;l=(e|0)!=0;m=l?m*3|0:m;f=b[o>>2]|0;k=a+8|0;h=b[k>>2]|0;if(l){g=a+12|0;e=b[g>>2]|0;f=h+f+e|0;if((f|0)==(m|0)){o=1;S=p;return o|0}else j=g}else{j=a+12|0;e=b[j>>2]|0;f=h+f+e|0}if((f|0)<=(m|0)){o=0;S=p;return o|0}do if((e|0)>0){e=b[a>>2]|0;if((h|0)>0){g=18608+(e*80|0)+60|0;e=a;break}e=18608+(e*80|0)+40|0;if(!d){g=e;e=a}else{Aa(n,m,0,0);Fa(o,n,i);Oa(i);Ea(i,n,o);g=e;e=a}}else{g=18608+((b[a>>2]|0)*80|0)+20|0;e=a}while(0);b[e>>2]=b[g>>2];f=g+16|0;if((b[f>>2]|0)>0){e=0;do{Na(o);e=e+1|0}while((e|0)<(b[f>>2]|0))}a=g+4|0;b[n>>2]=b[a>>2];b[n+4>>2]=b[a+4>>2];b[n+8>>2]=b[a+8>>2];c=b[16848+(c<<2)>>2]|0;Ga(n,l?c*3|0:c);Ea(o,n,o);Ca(o);if(l)e=((b[k>>2]|0)+(b[o>>2]|0)+(b[j>>2]|0)|0)==(m|0)?1:2;else e=2;o=e;S=p;return o|0}function db(a,b){a=a|0;b=b|0;var c=0;do c=cb(a,b,0,1)|0;while((c|0)==2);return c|0}function eb(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=S;S=S+240|0;h=B+224|0;x=B+208|0;y=B;z=B+192|0;A=B+176|0;s=B+160|0;t=B+144|0;u=B+128|0;v=B+112|0;w=B+96|0;b[h>>2]=c;b[x>>2]=b[a>>2];b[x+4>>2]=b[a+4>>2];b[x+8>>2]=b[a+8>>2];b[x+12>>2]=b[a+12>>2];fb(x,h,y);b[g>>2]=0;r=f+d+((f|0)==6&1)|0;if((r|0)<=(d|0)){S=B;return}k=b[h>>2]|0;l=d+6|0;m=16928+(k<<2)|0;n=t+8|0;o=u+8|0;p=v+8|0;q=z+4|0;i=0;j=d;f=-1;a:while(1){h=(j|0)%6|0;a=y+(h<<4)|0;b[z>>2]=b[a>>2];b[z+4>>2]=b[a+4>>2];b[z+8>>2]=b[a+8>>2];b[z+12>>2]=b[a+12>>2];a=i;i=cb(z,k,0,1)|0;if((j|0)>(d|0)&(Rb(c)|0)!=0?((a|0)!=1?(b[z>>2]|0)!=(f|0):0):0){Da(y+(((h+5|0)%6|0)<<4)+4|0,A);Da(y+(h<<4)+4|0,s);C=+(b[m>>2]|0);e[t>>3]=C*3.0;e[n>>3]=0.0;D=C*-1.5;e[u>>3]=D;e[o>>3]=C*2.598076211353316;e[v>>3]=D;e[p>>3]=C*-2.598076211353316;h=b[x>>2]|0;switch(b[17008+(h*80|0)+(((f|0)==(h|0)?b[z>>2]|0:f)<<2)>>2]|0){case 1:{a=u;f=t;break}case 3:{a=v;f=u;break}case 2:{a=t;f=v;break}default:{a=8;break a}}Gc(A,s,f,a,w);if(!(Hc(A,w)|0)?!(Hc(s,w)|0):0){_a(w,b[x>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}}if((j|0)<(l|0)){Da(q,A);_a(A,b[z>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}j=j+1|0;if((j|0)>=(r|0)){a=3;break}else f=b[z>>2]|0}if((a|0)==3){S=B;return}else if((a|0)==8)H(22557,22521,746,22602)}function fb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=S;S=S+160|0;e=j+80|0;f=j;g=e;h=20336;i=g+72|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=f;h=20416;i=g+72|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));i=(Rb(b[c>>2]|0)|0)==0;e=i?e:f;f=a+4|0;Ra(f);Sa(f);if(Rb(b[c>>2]|0)|0){La(f);b[c>>2]=(b[c>>2]|0)+1}b[d>>2]=b[a>>2];c=d+4|0;Ea(f,e,c);Ca(c);b[d+16>>2]=b[a>>2];c=d+20|0;Ea(f,e+12|0,c);Ca(c);b[d+32>>2]=b[a>>2];c=d+36|0;Ea(f,e+24|0,c);Ca(c);b[d+48>>2]=b[a>>2];c=d+52|0;Ea(f,e+36|0,c);Ca(c);b[d+64>>2]=b[a>>2];c=d+68|0;Ea(f,e+48|0,c);Ca(c);b[d+80>>2]=b[a>>2];d=d+84|0;Ea(f,e+60|0,d);Ca(d);S=j;return}function gb(a){a=+a;var b=0.0;b=a<0.0?a+6.283185307179586:a;return +(!(a>=6.283185307179586)?b:b+-6.283185307179586)}function hb(a,b){a=a|0;b=b|0;if(!(+q(+(+e[a>>3]-+e[b>>3]))<1.7453292519943298e-11)){b=0;return b|0}b=+q(+(+e[a+8>>3]-+e[b+8>>3]))<1.7453292519943298e-11;return b|0}function ib(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0)}function jb(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0*6371.007180918475)}function kb(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0*6371.007180918475*1.0e3)}function lb(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0,h=0.0;g=+e[b>>3];d=+t(+g);f=+e[b+8>>3]-+e[a+8>>3];h=d*+u(+f);c=+e[a>>3];return +(+z(+h,+(+u(+g)*+t(+c)-+t(+f)*(d*+u(+c)))))}function mb(a,c,d,f){a=a|0;c=+c;d=+d;f=f|0;var g=0,h=0.0,i=0.0,j=0.0;if(d<1.0e-16){b[f>>2]=b[a>>2];b[f+4>>2]=b[a+4>>2];b[f+8>>2]=b[a+8>>2];b[f+12>>2]=b[a+12>>2];return}h=c<0.0?c+6.283185307179586:c;h=!(c>=6.283185307179586)?h:h+-6.283185307179586;do if(h<1.0e-16){c=+e[a>>3]+d;e[f>>3]=c;g=f}else{g=+q(+(h+-3.141592653589793))<1.0e-16;c=+e[a>>3];if(g){c=c-d;e[f>>3]=c;g=f;break}i=+t(+d);d=+u(+d);c=i*+u(+c)+ +t(+h)*(d*+t(+c));c=c>1.0?1.0:c;c=+x(+(c<-1.0?-1.0:c));e[f>>3]=c;if(+q(+(c+-1.5707963267948966))<1.0e-16){e[f>>3]=1.5707963267948966;e[f+8>>3]=0.0;return}if(+q(+(c+1.5707963267948966))<1.0e-16){e[f>>3]=-1.5707963267948966;e[f+8>>3]=0.0;return}j=+t(+c);h=d*+u(+h)/j;d=+e[a>>3];c=(i-+u(+c)*+u(+d))/+t(+d)/j;i=h>1.0?1.0:h;c=c>1.0?1.0:c;c=+e[a+8>>3]+ +z(+(i<-1.0?-1.0:i),+(c<-1.0?-1.0:c));if(c>3.141592653589793)do c=c+-6.283185307179586;while(c>3.141592653589793);if(c<-3.141592653589793)do c=c+6.283185307179586;while(c<-3.141592653589793);e[f+8>>3]=c;return}while(0);if(+q(+(c+-1.5707963267948966))<1.0e-16){e[g>>3]=1.5707963267948966;e[f+8>>3]=0.0;return}if(+q(+(c+1.5707963267948966))<1.0e-16){e[g>>3]=-1.5707963267948966;e[f+8>>3]=0.0;return}c=+e[a+8>>3];if(c>3.141592653589793)do c=c+-6.283185307179586;while(c>3.141592653589793);if(c<-3.141592653589793)do c=c+6.283185307179586;while(c<-3.141592653589793);e[f+8>>3]=c;return}function nb(a){a=a|0;return +(+e[20496+(a<<3)>>3])}function ob(a){a=a|0;return +(+e[20624+(a<<3)>>3])}function pb(a){a=a|0;return +(+e[20752+(a<<3)>>3])}function qb(a){a=a|0;return +(+e[20880+(a<<3)>>3])}function rb(a){a=a|0;var c=0;c=21008+(a<<3)|0;a=b[c>>2]|0;F(b[c+4>>2]|0);return a|0}function sb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;n=+e[b>>3];l=+e[a>>3];j=+u(+((n-l)*.5));g=+e[b+8>>3];k=+e[a+8>>3];h=+u(+((g-k)*.5));i=+t(+l);m=+t(+n);h=j*j+h*(m*i*h);h=+z(+(+r(+h)),+(+r(+(1.0-h))))*2.0;j=+e[c>>3];n=+u(+((j-n)*.5));d=+e[c+8>>3];g=+u(+((d-g)*.5));f=+t(+j);g=n*n+g*(m*f*g);g=+z(+(+r(+g)),+(+r(+(1.0-g))))*2.0;j=+u(+((l-j)*.5));d=+u(+((k-d)*.5));d=j*j+d*(i*f*d);d=+z(+(+r(+d)),+(+r(+(1.0-d))))*2.0;f=(h+g+d)*.5;return +(+y(+(+r(+(+v(+(f*.5))*+v(+((f-h)*.5))*+v(+((f-g)*.5))*+v(+((f-d)*.5))))))*4.0)}function tb(a,c){a=a|0;c=c|0;var d=0.0,e=0,f=0,g=0,h=0;g=S;S=S+192|0;e=g+168|0;f=g;Vb(a,c,e);Wb(a,c,f);c=b[f>>2]|0;if((c|0)<=0){d=0.0;S=g;return +d}d=+sb(f+8|0,f+8+(((c|0)!=1&1)<<4)|0,e)+0.0;if((c|0)==1){S=g;return +d}a=1;do{h=a;a=a+1|0;d=d+ +sb(f+8+(h<<4)|0,f+8+(((a|0)%(c|0)|0)<<4)|0,e)}while((a|0)<(c|0));S=g;return +d}function ub(a,c){a=a|0;c=c|0;var d=0.0,e=0,f=0,g=0,h=0;g=S;S=S+192|0;e=g+168|0;f=g;Vb(a,c,e);Wb(a,c,f);c=b[f>>2]|0;if((c|0)>0){d=+sb(f+8|0,f+8+(((c|0)!=1&1)<<4)|0,e)+0.0;if((c|0)!=1){a=1;do{h=a;a=a+1|0;d=d+ +sb(f+8+(h<<4)|0,f+8+(((a|0)%(c|0)|0)<<4)|0,e)}while((a|0)<(c|0))}}else d=0.0;S=g;return +(d*6371.007180918475*6371.007180918475)}function vb(a,c){a=a|0;c=c|0;var d=0.0,e=0,f=0,g=0,h=0;g=S;S=S+192|0;e=g+168|0;f=g;Vb(a,c,e);Wb(a,c,f);c=b[f>>2]|0;if((c|0)>0){d=+sb(f+8|0,f+8+(((c|0)!=1&1)<<4)|0,e)+0.0;if((c|0)!=1){a=1;do{h=a;a=a+1|0;d=d+ +sb(f+8+(h<<4)|0,f+8+(((a|0)%(c|0)|0)<<4)|0,e)}while((a|0)<(c|0))}}else d=0.0;S=g;return +(d*6371.007180918475*6371.007180918475*1.0e3*1.0e3)}function wb(a,c){a=a|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0.0;i=S;S=S+176|0;h=i;gc(a,c,h);a=b[h>>2]|0;if((a|0)<=1){g=0.0;S=i;return +g}c=a+-1|0;a=0;d=0.0;f=+e[h+8>>3];g=+e[h+16>>3];do{a=a+1|0;k=f;f=+e[h+8+(a<<4)>>3];l=+u(+((f-k)*.5));j=g;g=+e[h+8+(a<<4)+8>>3];j=+u(+((g-j)*.5));j=l*l+j*(+t(+f)*+t(+k)*j);d=d+ +z(+(+r(+j)),+(+r(+(1.0-j))))*2.0}while((a|0)<(c|0));S=i;return +d}function xb(a,c){a=a|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0.0;i=S;S=S+176|0;h=i;gc(a,c,h);a=b[h>>2]|0;if((a|0)<=1){g=0.0;S=i;return +g}c=a+-1|0;a=0;d=0.0;f=+e[h+8>>3];g=+e[h+16>>3];do{a=a+1|0;k=f;f=+e[h+8+(a<<4)>>3];l=+u(+((f-k)*.5));j=g;g=+e[h+8+(a<<4)+8>>3];j=+u(+((g-j)*.5));j=l*l+j*(+t(+k)*+t(+f)*j);d=d+ +z(+(+r(+j)),+(+r(+(1.0-j))))*2.0}while((a|0)!=(c|0));l=d*6371.007180918475;S=i;return +l}function yb(a,c){a=a|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0.0;i=S;S=S+176|0;h=i;gc(a,c,h);a=b[h>>2]|0;if((a|0)<=1){g=0.0;S=i;return +g}c=a+-1|0;a=0;d=0.0;f=+e[h+8>>3];g=+e[h+16>>3];do{a=a+1|0;k=f;f=+e[h+8+(a<<4)>>3];l=+u(+((f-k)*.5));j=g;g=+e[h+8+(a<<4)+8>>3];j=+u(+((g-j)*.5));j=l*l+j*(+t(+k)*+t(+f)*j);d=d+ +z(+(+r(+j)),+(+r(+(1.0-j))))*2.0}while((a|0)!=(c|0));l=d*6371.007180918475*1.0e3;S=i;return +l}function zb(a,b){a=a|0;b=b|0;b=cd(a|0,b|0,52)|0;G()|0;return b&15|0}function Ab(a,b){a=a|0;b=b|0;b=cd(a|0,b|0,45)|0;G()|0;return b&127|0}function Bb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;if(!(0==0&(b&-16777216|0)==134217728)){b=0;return b|0}g=cd(a|0,b|0,45)|0;G()|0;g=g&127;if(g>>>0>121){b=0;return b|0}c=cd(a|0,b|0,52)|0;G()|0;c=c&15;do if(c|0){e=1;d=0;while(1){f=cd(a|0,b|0,(15-e|0)*3|0)|0;G()|0;f=f&7;if((f|0)!=0&(d^1))if((f|0)==1&(la(g)|0)!=0){h=0;d=13;break}else d=1;if((f|0)==7){h=0;d=13;break}if(e>>>0>>0)e=e+1|0;else{d=9;break}}if((d|0)==9){if((c|0)==15)h=1;else break;return h|0}else if((d|0)==13)return h|0}while(0);while(1){h=cd(a|0,b|0,(14-c|0)*3|0)|0;G()|0;if(!((h&7|0)==7&0==0)){h=0;d=13;break}if(c>>>0<14)c=c+1|0;else{h=1;d=13;break}}if((d|0)==13)return h|0;return 0}function Cb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if((d|0)>=(c|0)){if((d|0)!=(c|0))if(c>>>0<=15){e=dd(c|0,0,52)|0;a=e|a;b=G()|0|b&-15728641;if((d|0)>(c|0))do{e=dd(7,0,(14-c|0)*3|0)|0;c=c+1|0;a=e|a;b=G()|0|b}while((c|0)<(d|0))}else{b=0;a=0}}else{b=0;a=0}F(b|0);return a|0}function Db(a,b,c){a=a|0;b=b|0;c=c|0;a=cd(a|0,b|0,52)|0;G()|0;a=a&15;if(!((c|0)<16&(a|0)<=(c|0))){c=0;return c|0}c=tc(7,c-a|0)|0;return c|0}function Eb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=cd(a|0,c|0,52)|0;G()|0;h=h&15;if(!((d|0)<16&(h|0)<=(d|0)))return;if((h|0)==(d|0)){d=e;b[d>>2]=a;b[d+4>>2]=c;return}j=tc(7,d-h|0)|0;k=(j|0)/7|0;i=cd(a|0,c|0,45)|0;G()|0;if(!(la(i&127)|0))g=0;else{a:do if(!h)f=0;else{g=1;while(1){f=cd(a|0,c|0,(15-g|0)*3|0)|0;G()|0;f=f&7;if(f|0)break a;if(g>>>0>>0)g=g+1|0;else{f=0;break}}}while(0);g=(f|0)==0}l=dd(h+1|0,0,52)|0;f=G()|0|c&-15728641;i=(14-h|0)*3|0;c=dd(7,0,i|0)|0;c=(l|a)&~c;h=f&~(G()|0);Eb(c,h,d,e);f=e+(k<<3)|0;if(!g){l=dd(1,0,i|0)|0;Eb(l|c,G()|0|h,d,f);l=f+(k<<3)|0;j=dd(2,0,i|0)|0;Eb(j|c,G()|0|h,d,l);l=l+(k<<3)|0;j=dd(3,0,i|0)|0;Eb(j|c,G()|0|h,d,l);l=l+(k<<3)|0;j=dd(4,0,i|0)|0;Eb(j|c,G()|0|h,d,l);l=l+(k<<3)|0;j=dd(5,0,i|0)|0;Eb(j|c,G()|0|h,d,l);j=dd(6,0,i|0)|0;Eb(j|c,G()|0|h,d,l+(k<<3)|0);return}g=f+(k<<3)|0;if((j|0)>6){j=f+8|0;l=(g>>>0>j>>>0?g:j)+-1+(0-f)|0;hd(f|0,0,l+8&-8|0)|0;f=j+(l>>>3<<3)|0}l=dd(2,0,i|0)|0;Eb(l|c,G()|0|h,d,f);l=f+(k<<3)|0;j=dd(3,0,i|0)|0;Eb(j|c,G()|0|h,d,l);l=l+(k<<3)|0;j=dd(4,0,i|0)|0;Eb(j|c,G()|0|h,d,l);l=l+(k<<3)|0;j=dd(5,0,i|0)|0;Eb(j|c,G()|0|h,d,l);j=dd(6,0,i|0)|0;Eb(j|c,G()|0|h,d,l+(k<<3)|0);return}function Fb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=cd(a|0,b|0,45)|0;G()|0;if(!(la(e&127)|0)){e=0;return e|0}e=cd(a|0,b|0,52)|0;G()|0;e=e&15;a:do if(!e)c=0;else{d=1;while(1){c=cd(a|0,b|0,(15-d|0)*3|0)|0;G()|0;c=c&7;if(c|0)break a;if(d>>>0>>0)d=d+1|0;else{c=0;break}}}while(0);e=(c|0)==0&1;return e|0}function Gb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if((c|0)<16&(d|0)<=(c|0)){if((d|0)!=(c|0)){e=dd(c|0,0,52)|0;a=e|a;b=G()|0|b&-15728641;if((d|0)<(c|0))do{e=dd(7,0,(14-d|0)*3|0)|0;d=d+1|0;a=a&~e;b=b&~(G()|0)}while((d|0)<(c|0))}}else{b=0;a=0}F(b|0);return a|0}function Hb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;if(!d){y=0;return y|0}f=a;e=b[f>>2]|0;f=b[f+4>>2]|0;if(0==0&(f&15728640|0)==0){if((d|0)<=0){y=0;return y|0}y=c;b[y>>2]=e;b[y+4>>2]=f;if((d|0)==1){y=0;return y|0}e=1;do{w=a+(e<<3)|0;x=b[w+4>>2]|0;y=c+(e<<3)|0;b[y>>2]=b[w>>2];b[y+4>>2]=x;e=e+1|0}while((e|0)!=(d|0));e=0;return e|0}w=d<<3;x=Wc(w)|0;if(!x){y=-3;return y|0}gd(x|0,a|0,w|0)|0;v=Yc(d,8)|0;if(!v){Xc(x);y=-3;return y|0}e=d;a:while(1){h=x;l=b[h>>2]|0;h=b[h+4>>2]|0;t=cd(l|0,h|0,52)|0;G()|0;t=t&15;u=t+-1|0;s=(e|0)>0;b:do if(s){r=((e|0)<0)<<31>>31;p=dd(u|0,0,52)|0;q=G()|0;if(u>>>0>15){f=0;a=l;d=h;while(1){if(!((a|0)==0&(d|0)==0)){g=cd(a|0,d|0,52)|0;G()|0;g=g&15;i=(g|0)<(u|0);g=(g|0)==(u|0);k=i?0:g?a:0;a=i?0:g?d:0;d=bd(k|0,a|0,e|0,r|0)|0;G()|0;g=v+(d<<3)|0;i=g;j=b[i>>2]|0;i=b[i+4>>2]|0;if((j|0)==0&(i|0)==0)d=k;else{p=0;o=d;n=i;d=k;while(1){if((p|0)>(e|0)){y=41;break a}if((j|0)==(d|0)&(n&-117440513|0)==(a|0)){k=cd(j|0,n|0,56)|0;G()|0;k=k&7;m=k+1|0;q=cd(j|0,n|0,45)|0;G()|0;c:do if(!(la(q&127)|0))i=7;else{j=cd(j|0,n|0,52)|0;G()|0;j=j&15;if(!j){i=6;break}i=1;while(1){q=dd(7,0,(15-i|0)*3|0)|0;if(!((q&d|0)==0&((G()|0)&a|0)==0)){i=7;break c}if(i>>>0>>0)i=i+1|0;else{i=6;break}}}while(0);if((k+2|0)>>>0>i>>>0){y=51;break a}q=dd(m|0,0,56)|0;a=G()|0|a&-117440513;i=g;b[i>>2]=0;b[i+4>>2]=0;i=o;d=q|d}else i=(o+1|0)%(e|0)|0;g=v+(i<<3)|0;n=g;j=b[n>>2]|0;n=b[n+4>>2]|0;if((j|0)==0&(n|0)==0)break;else{p=p+1|0;o=i}}}q=g;b[q>>2]=d;b[q+4>>2]=a}f=f+1|0;if((f|0)>=(e|0))break b;d=x+(f<<3)|0;a=b[d>>2]|0;d=b[d+4>>2]|0}}f=0;a=l;d=h;while(1){if(!((a|0)==0&(d|0)==0)){i=cd(a|0,d|0,52)|0;G()|0;i=i&15;if((i|0)>=(u|0)){if((i|0)!=(u|0)){a=a|p;d=d&-15728641|q;if(i>>>0>=t>>>0){g=u;do{o=dd(7,0,(14-g|0)*3|0)|0;g=g+1|0;a=o|a;d=G()|0|d}while(g>>>0>>0)}}}else{a=0;d=0}i=bd(a|0,d|0,e|0,r|0)|0;G()|0;g=v+(i<<3)|0;j=g;k=b[j>>2]|0;j=b[j+4>>2]|0;if(!((k|0)==0&(j|0)==0)){o=0;while(1){if((o|0)>(e|0)){y=41;break a}if((k|0)==(a|0)&(j&-117440513|0)==(d|0)){m=cd(k|0,j|0,56)|0;G()|0;m=m&7;n=m+1|0;z=cd(k|0,j|0,45)|0;G()|0;d:do if(!(la(z&127)|0))j=7;else{k=cd(k|0,j|0,52)|0;G()|0;k=k&15;if(!k){j=6;break}j=1;while(1){z=dd(7,0,(15-j|0)*3|0)|0;if(!((z&a|0)==0&((G()|0)&d|0)==0)){j=7;break d}if(j>>>0>>0)j=j+1|0;else{j=6;break}}}while(0);if((m+2|0)>>>0>j>>>0){y=51;break a}z=dd(n|0,0,56)|0;d=G()|0|d&-117440513;n=g;b[n>>2]=0;b[n+4>>2]=0;a=z|a}else i=(i+1|0)%(e|0)|0;g=v+(i<<3)|0;j=g;k=b[j>>2]|0;j=b[j+4>>2]|0;if((k|0)==0&(j|0)==0)break;else o=o+1|0}}z=g;b[z>>2]=a;b[z+4>>2]=d}f=f+1|0;if((f|0)>=(e|0))break b;d=x+(f<<3)|0;a=b[d>>2]|0;d=b[d+4>>2]|0}}while(0);if((e+5|0)>>>0<11){y=99;break}q=Yc((e|0)/6|0,8)|0;if(!q){y=58;break}e:do if(s){o=0;n=0;do{i=v+(o<<3)|0;a=i;f=b[a>>2]|0;a=b[a+4>>2]|0;if(!((f|0)==0&(a|0)==0)){j=cd(f|0,a|0,56)|0;G()|0;j=j&7;d=j+1|0;k=a&-117440513;z=cd(f|0,a|0,45)|0;G()|0;f:do if(la(z&127)|0){m=cd(f|0,a|0,52)|0;G()|0;m=m&15;if(m|0){g=1;while(1){z=dd(7,0,(15-g|0)*3|0)|0;if(!((f&z|0)==0&(k&(G()|0)|0)==0))break f;if(g>>>0>>0)g=g+1|0;else break}}a=dd(d|0,0,56)|0;f=a|f;a=G()|0|k;d=i;b[d>>2]=f;b[d+4>>2]=a;d=j+2|0}while(0);if((d|0)==7){z=q+(n<<3)|0;b[z>>2]=f;b[z+4>>2]=a&-117440513;n=n+1|0}}o=o+1|0}while((o|0)!=(e|0));if(s){p=((e|0)<0)<<31>>31;m=dd(u|0,0,52)|0;o=G()|0;if(u>>>0>15){a=0;f=0;while(1){do if(!((l|0)==0&(h|0)==0)){j=cd(l|0,h|0,52)|0;G()|0;j=j&15;g=(j|0)<(u|0);j=(j|0)==(u|0);i=g?0:j?l:0;j=g?0:j?h:0;g=bd(i|0,j|0,e|0,p|0)|0;G()|0;d=0;while(1){if((d|0)>(e|0)){y=98;break a}z=v+(g<<3)|0;k=b[z+4>>2]|0;if((k&-117440513|0)==(j|0)?(b[z>>2]|0)==(i|0):0){y=70;break}g=(g+1|0)%(e|0)|0;z=v+(g<<3)|0;if((b[z>>2]|0)==(i|0)?(b[z+4>>2]|0)==(j|0):0)break;else d=d+1|0}if((y|0)==70?(y=0,0==0&(k&117440512|0)==100663296):0)break;z=c+(f<<3)|0;b[z>>2]=l;b[z+4>>2]=h;f=f+1|0}while(0);a=a+1|0;if((a|0)>=(e|0)){e=n;break e}h=x+(a<<3)|0;l=b[h>>2]|0;h=b[h+4>>2]|0}}a=0;f=0;while(1){do if(!((l|0)==0&(h|0)==0)){j=cd(l|0,h|0,52)|0;G()|0;j=j&15;if((j|0)>=(u|0))if((j|0)!=(u|0)){d=l|m;g=h&-15728641|o;if(j>>>0>>0)j=g;else{i=u;do{z=dd(7,0,(14-i|0)*3|0)|0;i=i+1|0;d=z|d;g=G()|0|g}while(i>>>0>>0);j=g}}else{d=l;j=h}else{d=0;j=0}i=bd(d|0,j|0,e|0,p|0)|0;G()|0;g=0;while(1){if((g|0)>(e|0)){y=98;break a}z=v+(i<<3)|0;k=b[z+4>>2]|0;if((k&-117440513|0)==(j|0)?(b[z>>2]|0)==(d|0):0){y=93;break}i=(i+1|0)%(e|0)|0;z=v+(i<<3)|0;if((b[z>>2]|0)==(d|0)?(b[z+4>>2]|0)==(j|0):0)break;else g=g+1|0}if((y|0)==93?(y=0,0==0&(k&117440512|0)==100663296):0)break;z=c+(f<<3)|0;b[z>>2]=l;b[z+4>>2]=h;f=f+1|0}while(0);a=a+1|0;if((a|0)>=(e|0)){e=n;break e}h=x+(a<<3)|0;l=b[h>>2]|0;h=b[h+4>>2]|0}}else{f=0;e=n}}else{f=0;e=0}while(0);hd(v|0,0,w|0)|0;gd(x|0,q|0,e<<3|0)|0;Xc(q);if(!e)break;else c=c+(f<<3)|0}if((y|0)==41){Xc(x);Xc(v);z=-1;return z|0}else if((y|0)==51){Xc(x);Xc(v);z=-2;return z|0}else if((y|0)==58){Xc(x);Xc(v);z=-3;return z|0}else if((y|0)==98){Xc(q);Xc(x);Xc(v);z=-1;return z|0}else if((y|0)==99)gd(c|0,x|0,e<<3|0)|0;Xc(x);Xc(v);z=0;return z|0}function Ib(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if((c|0)<=0){f=0;return f|0}if((f|0)>=16){g=0;while(1){l=a+(g<<3)|0;if(!((b[l>>2]|0)==0&(b[l+4>>2]|0)==0)){g=14;break}g=g+1|0;if((g|0)>=(c|0)){h=0;g=16;break}}if((g|0)==14)return ((e|0)>0?-2:-1)|0;else if((g|0)==16)return h|0}g=0;l=0;a:while(1){k=a+(l<<3)|0;i=k;h=b[i>>2]|0;i=b[i+4>>2]|0;do if(!((h|0)==0&(i|0)==0)){if((g|0)>=(e|0)){h=-1;g=16;break a}j=cd(h|0,i|0,52)|0;G()|0;j=j&15;if((j|0)>(f|0)){h=-2;g=16;break a}if((j|0)==(f|0)){k=d+(g<<3)|0;b[k>>2]=h;b[k+4>>2]=i;g=g+1|0;break}h=(tc(7,f-j|0)|0)+g|0;if((h|0)>(e|0)){h=-1;g=16;break a}Eb(b[k>>2]|0,b[k+4>>2]|0,f,d+(g<<3)|0);g=h}while(0);l=l+1|0;if((l|0)>=(c|0)){h=0;g=16;break}}if((g|0)==16)return h|0;return 0}function Jb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;if((c|0)<=0){d=0;return d|0}if((d|0)>=16){e=0;while(1){h=a+(e<<3)|0;if(!((b[h>>2]|0)==0&(b[h+4>>2]|0)==0)){e=-1;f=13;break}e=e+1|0;if((e|0)>=(c|0)){e=0;f=13;break}}if((f|0)==13)return e|0}e=0;h=0;a:while(1){f=a+(h<<3)|0;g=b[f>>2]|0;f=b[f+4>>2]|0;do if(!((g|0)==0&(f|0)==0)){f=cd(g|0,f|0,52)|0;G()|0;f=f&15;if((f|0)>(d|0)){e=-1;f=13;break a}if((f|0)==(d|0)){e=e+1|0;break}else{e=(tc(7,d-f|0)|0)+e|0;break}}while(0);h=h+1|0;if((h|0)>=(c|0)){f=13;break}}if((f|0)==13)return e|0;return 0}function Kb(a,b){a=a|0;b=b|0;b=cd(a|0,b|0,52)|0;G()|0;return b&1|0}function Lb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=cd(a|0,b|0,52)|0;G()|0;e=e&15;if(!e){e=0;return e|0}d=1;while(1){c=cd(a|0,b|0,(15-d|0)*3|0)|0;G()|0;c=c&7;if(c|0){d=5;break}if(d>>>0>>0)d=d+1|0;else{c=0;d=5;break}}if((d|0)==5)return c|0;return 0}function Mb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;i=cd(a|0,b|0,52)|0;G()|0;i=i&15;if(!i){h=b;i=a;F(h|0);return i|0}h=1;c=0;while(1){f=(15-h|0)*3|0;d=dd(7,0,f|0)|0;e=G()|0;g=cd(a|0,b|0,f|0)|0;G()|0;f=dd(Pa(g&7)|0,0,f|0)|0;g=G()|0;a=f|a&~d;b=g|b&~e;a:do if(!c)if(!((f&d|0)==0&(g&e|0)==0)){d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if(!d)c=1;else{c=1;b:while(1){g=cd(a|0,b|0,(15-c|0)*3|0)|0;G()|0;switch(g&7){case 1:break b;case 0:break;default:{c=1;break a}}if(c>>>0>>0)c=c+1|0;else{c=1;break a}}c=1;while(1){g=(15-c|0)*3|0;e=cd(a|0,b|0,g|0)|0;G()|0;f=dd(7,0,g|0)|0;b=b&~(G()|0);g=dd(Pa(e&7)|0,0,g|0)|0;a=a&~f|g;b=b|(G()|0);if(c>>>0>>0)c=c+1|0;else{c=1;break}}}}else c=0;while(0);if(h>>>0>>0)h=h+1|0;else break}F(b|0);return a|0}function Nb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if(!d){c=b;d=a;F(c|0);return d|0}c=1;while(1){f=(15-c|0)*3|0;g=cd(a|0,b|0,f|0)|0;G()|0;e=dd(7,0,f|0)|0;b=b&~(G()|0);f=dd(Pa(g&7)|0,0,f|0)|0;a=f|a&~e;b=G()|0|b;if(c>>>0>>0)c=c+1|0;else break}F(b|0);return a|0}function Ob(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;i=cd(a|0,b|0,52)|0;G()|0;i=i&15;if(!i){h=b;i=a;F(h|0);return i|0}h=1;c=0;while(1){f=(15-h|0)*3|0;d=dd(7,0,f|0)|0;e=G()|0;g=cd(a|0,b|0,f|0)|0;G()|0;f=dd(Qa(g&7)|0,0,f|0)|0;g=G()|0;a=f|a&~d;b=g|b&~e;a:do if(!c)if(!((f&d|0)==0&(g&e|0)==0)){d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if(!d)c=1;else{c=1;b:while(1){g=cd(a|0,b|0,(15-c|0)*3|0)|0;G()|0;switch(g&7){case 1:break b;case 0:break;default:{c=1;break a}}if(c>>>0>>0)c=c+1|0;else{c=1;break a}}c=1;while(1){e=(15-c|0)*3|0;f=dd(7,0,e|0)|0;g=b&~(G()|0);b=cd(a|0,b|0,e|0)|0;G()|0;b=dd(Qa(b&7)|0,0,e|0)|0;a=a&~f|b;b=g|(G()|0);if(c>>>0>>0)c=c+1|0;else{c=1;break}}}}else c=0;while(0);if(h>>>0>>0)h=h+1|0;else break}F(b|0);return a|0}function Pb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if(!d){c=b;d=a;F(c|0);return d|0}c=1;while(1){g=(15-c|0)*3|0;f=dd(7,0,g|0)|0;e=b&~(G()|0);b=cd(a|0,b|0,g|0)|0;G()|0;b=dd(Qa(b&7)|0,0,g|0)|0;a=b|a&~f;b=G()|0|e;if(c>>>0>>0)c=c+1|0;else break}F(b|0);return a|0}function Qb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=S;S=S+64|0;i=j+40|0;e=j+24|0;f=j+12|0;g=j;dd(c|0,0,52)|0;d=G()|0|134225919;if(!c){if((b[a+4>>2]|0)>2){h=0;i=0;F(h|0);S=j;return i|0}if((b[a+8>>2]|0)>2){h=0;i=0;F(h|0);S=j;return i|0}if((b[a+12>>2]|0)>2){h=0;i=0;F(h|0);S=j;return i|0}dd(na(a)|0,0,45)|0;h=G()|0|d;i=-1;F(h|0);S=j;return i|0};b[i>>2]=b[a>>2];b[i+4>>2]=b[a+4>>2];b[i+8>>2]=b[a+8>>2];b[i+12>>2]=b[a+12>>2];h=i+4|0;if((c|0)>0){a=-1;while(1){b[e>>2]=b[h>>2];b[e+4>>2]=b[h+4>>2];b[e+8>>2]=b[h+8>>2];if(!(c&1)){Ja(h);b[f>>2]=b[h>>2];b[f+4>>2]=b[h+4>>2];b[f+8>>2]=b[h+8>>2];La(f)}else{Ia(h);b[f>>2]=b[h>>2];b[f+4>>2]=b[h+4>>2];b[f+8>>2]=b[h+8>>2];Ka(f)}Fa(e,f,g);Ca(g);l=(15-c|0)*3|0;k=dd(7,0,l|0)|0;d=d&~(G()|0);l=dd(Ha(g)|0,0,l|0)|0;a=l|a&~k;d=G()|0|d;if((c|0)>1)c=c+-1|0;else break}}else a=-1;a:do if(((b[h>>2]|0)<=2?(b[i+8>>2]|0)<=2:0)?(b[i+12>>2]|0)<=2:0){e=na(i)|0;c=dd(e|0,0,45)|0;c=c|a;a=G()|0|d&-1040385;g=oa(i)|0;if(!(la(e)|0)){if((g|0)<=0)break;f=0;while(1){e=cd(c|0,a|0,52)|0;G()|0;e=e&15;if(e){d=1;while(1){l=(15-d|0)*3|0;i=cd(c|0,a|0,l|0)|0;G()|0;k=dd(7,0,l|0)|0;a=a&~(G()|0);l=dd(Pa(i&7)|0,0,l|0)|0;c=c&~k|l;a=a|(G()|0);if(d>>>0>>0)d=d+1|0;else break}}f=f+1|0;if((f|0)==(g|0))break a}}f=cd(c|0,a|0,52)|0;G()|0;f=f&15;b:do if(f){d=1;c:while(1){l=cd(c|0,a|0,(15-d|0)*3|0)|0;G()|0;switch(l&7){case 1:break c;case 0:break;default:break b}if(d>>>0>>0)d=d+1|0;else break b}if(ra(e,b[i>>2]|0)|0){d=1;while(1){i=(15-d|0)*3|0;k=dd(7,0,i|0)|0;l=a&~(G()|0);a=cd(c|0,a|0,i|0)|0;G()|0;a=dd(Qa(a&7)|0,0,i|0)|0;c=c&~k|a;a=l|(G()|0);if(d>>>0>>0)d=d+1|0;else break}}else{d=1;while(1){l=(15-d|0)*3|0;i=cd(c|0,a|0,l|0)|0;G()|0;k=dd(7,0,l|0)|0;a=a&~(G()|0);l=dd(Pa(i&7)|0,0,l|0)|0;c=c&~k|l;a=a|(G()|0);if(d>>>0>>0)d=d+1|0;else break}}}while(0);if((g|0)>0){d=0;do{c=Mb(c,a)|0;a=G()|0;d=d+1|0}while((d|0)!=(g|0))}}else{c=0;a=0}while(0);k=a;l=c;F(k|0);S=j;return l|0}function Rb(a){a=a|0;return (a|0)%2|0|0}function Sb(a,c){a=a|0;c=c|0;var d=0,e=0;e=S;S=S+16|0;d=e;if((c>>>0<=15?!(0==0?(b[a+4>>2]&2146435072|0)==2146435072:0):0)?!(0==0?(b[a+8+4>>2]&2146435072|0)==2146435072:0):0){Ya(a,c,d);c=Qb(d,c)|0;a=G()|0}else{a=0;c=0}F(a|0);S=e;return c|0}function Tb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=d+4|0;g=cd(a|0,c|0,52)|0;G()|0;g=g&15;h=cd(a|0,c|0,45)|0;G()|0;e=(g|0)==0;if(!(la(h&127)|0)){if(e){h=0;return h|0}if((b[f>>2]|0)==0?(b[d+8>>2]|0)==0:0)e=(b[d+12>>2]|0)!=0&1;else e=1}else if(e){h=1;return h|0}else e=1;d=1;while(1){if(!(d&1))La(f);else Ka(f);h=cd(a|0,c|0,(15-d|0)*3|0)|0;G()|0;Ma(f,h&7);if(d>>>0>>0)d=d+1|0;else break}return e|0}function Ub(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=S;S=S+16|0;j=l;k=cd(a|0,c|0,45)|0;G()|0;k=k&127;a:do if((la(k)|0)!=0?(g=cd(a|0,c|0,52)|0,G()|0,g=g&15,(g|0)!=0):0){e=1;b:while(1){i=cd(a|0,c|0,(15-e|0)*3|0)|0;G()|0;switch(i&7){case 5:break b;case 0:break;default:{e=c;break a}}if(e>>>0>>0)e=e+1|0;else{e=c;break a}}f=1;e=c;while(1){c=(15-f|0)*3|0;h=dd(7,0,c|0)|0;i=e&~(G()|0);e=cd(a|0,e|0,c|0)|0;G()|0;e=dd(Qa(e&7)|0,0,c|0)|0;a=a&~h|e;e=i|(G()|0);if(f>>>0>>0)f=f+1|0;else break}}else e=c;while(0);i=7728+(k*28|0)|0;b[d>>2]=b[i>>2];b[d+4>>2]=b[i+4>>2];b[d+8>>2]=b[i+8>>2];b[d+12>>2]=b[i+12>>2];if(!(Tb(a,e,d)|0)){S=l;return}h=d+4|0;b[j>>2]=b[h>>2];b[j+4>>2]=b[h+4>>2];b[j+8>>2]=b[h+8>>2];g=cd(a|0,e|0,52)|0;G()|0;i=g&15;if(!(g&1))g=i;else{La(h);g=i+1|0}if(!(la(k)|0))e=0;else{c:do if(!i)e=0;else{c=1;while(1){f=cd(a|0,e|0,(15-c|0)*3|0)|0;G()|0;f=f&7;if(f|0){e=f;break c}if(c>>>0>>0)c=c+1|0;else{e=0;break}}}while(0);e=(e|0)==4&1}if(!(cb(d,g,e,0)|0)){if((g|0)!=(i|0)){b[h>>2]=b[j>>2];b[h+4>>2]=b[j+4>>2];b[h+8>>2]=b[j+8>>2]}}else{if(la(k)|0)do{}while((cb(d,g,0,0)|0)!=0);if((g|0)!=(i|0))Ja(h)}S=l;return}function Vb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=S;S=S+16|0;e=d;Ub(a,b,e);b=cd(a|0,b|0,52)|0;G()|0;$a(e,b&15,c);S=d;return}function Wb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;g=S;S=S+16|0;f=g;Ub(a,b,f);d=cd(a|0,b|0,45)|0;G()|0;d=(la(d&127)|0)==0;e=cd(a|0,b|0,52)|0;G()|0;e=e&15;a:do if(!d){if(e|0){d=1;while(1){h=dd(7,0,(15-d|0)*3|0)|0;if(!((h&a|0)==0&((G()|0)&b|0)==0))break a;if(d>>>0>>0)d=d+1|0;else break}}ab(f,e,0,5,c);S=g;return}while(0);eb(f,e,0,6,c);S=g;return}function Xb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=cd(a|0,b|0,45)|0;G()|0;if(!(la(d&127)|0)){d=2;return d|0}d=cd(a|0,b|0,52)|0;G()|0;d=d&15;if(!d){d=5;return d|0}c=1;while(1){e=dd(7,0,(15-c|0)*3|0)|0;if(!((e&a|0)==0&((G()|0)&b|0)==0)){c=2;a=6;break}if(c>>>0>>0)c=c+1|0;else{c=5;a=6;break}}if((a|0)==6)return c|0;return 0}function Yb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=S;S=S+128|0;k=m+112|0;g=m+96|0;l=m;f=cd(a|0,c|0,52)|0;G()|0;i=f&15;b[k>>2]=i;h=cd(a|0,c|0,45)|0;G()|0;h=h&127;a:do if(la(h)|0){if(i|0){e=1;while(1){j=dd(7,0,(15-e|0)*3|0)|0;if(!((j&a|0)==0&((G()|0)&c|0)==0)){f=0;break a}if(e>>>0>>0)e=e+1|0;else break}}if(!(f&1)){j=dd(i+1|0,0,52)|0;l=G()|0|c&-15728641;k=dd(7,0,(14-i|0)*3|0)|0;Yb((j|a)&~k,l&~(G()|0),d);S=m;return}else f=1}else f=0;while(0);Ub(a,c,g);if(f){bb(g,k,l);j=5}else{fb(g,k,l);j=6}b:do if(la(h)|0)if(!i)e=20;else{e=1;while(1){h=dd(7,0,(15-e|0)*3|0)|0;if(!((h&a|0)==0&((G()|0)&c|0)==0)){e=8;break b}if(e>>>0>>0)e=e+1|0;else{e=20;break}}}else e=8;while(0);hd(d|0,-1,e|0)|0;if(f){f=0;do{g=l+(f<<4)|0;db(g,b[k>>2]|0)|0;g=b[g>>2]|0;e=0;while(1){h=d+(e<<2)|0;i=b[h>>2]|0;if((i|0)==-1|(i|0)==(g|0))break;else e=e+1|0}b[h>>2]=g;f=f+1|0}while((f|0)!=(j|0))}else{f=0;do{g=l+(f<<4)|0;cb(g,b[k>>2]|0,0,1)|0;g=b[g>>2]|0;e=0;while(1){h=d+(e<<2)|0;i=b[h>>2]|0;if((i|0)==-1|(i|0)==(g|0))break;else e=e+1|0}b[h>>2]=g;f=f+1|0}while((f|0)!=(j|0))}S=m;return}function Zb(){return 12}function _b(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;dd(a|0,0,52)|0;i=G()|0|134225919;if((a|0)<1){e=0;d=0;do{if(la(e)|0){dd(e|0,0,45)|0;h=i|(G()|0);a=c+(d<<3)|0;b[a>>2]=-1;b[a+4>>2]=h;d=d+1|0}e=e+1|0}while((e|0)!=122);return}h=0;d=0;do{if(la(h)|0){dd(h|0,0,45)|0;e=1;f=-1;g=i|(G()|0);while(1){j=dd(7,0,(15-e|0)*3|0)|0;f=f&~j;g=g&~(G()|0);if((e|0)==(a|0))break;else e=e+1|0}j=c+(d<<3)|0;b[j>>2]=f;b[j+4>>2]=g;d=d+1|0}h=h+1|0}while((h|0)!=122);return}function $b(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=S;S=S+64|0;h=i;if((a|0)==(d|0)&(c|0)==(e|0)|(0!=0|(c&2013265920|0)!=134217728|(0!=0|(e&2013265920|0)!=134217728))){h=0;S=i;return h|0}f=cd(a|0,c|0,52)|0;G()|0;f=f&15;g=cd(d|0,e|0,52)|0;G()|0;if((f|0)!=(g&15|0)){h=0;S=i;return h|0}g=f+-1|0;if(f>>>0>1?(k=Cb(a,c,g)|0,j=G()|0,g=Cb(d,e,g)|0,(k|0)==(g|0)&(j|0)==(G()|0)):0){g=(f^15)*3|0;f=cd(a|0,c|0,g|0)|0;G()|0;f=f&7;g=cd(d|0,e|0,g|0)|0;G()|0;g=g&7;if((f|0)==0|(g|0)==0){k=1;S=i;return k|0}if((b[21136+(f<<2)>>2]|0)==(g|0)){k=1;S=i;return k|0}if((b[21168+(f<<2)>>2]|0)==(g|0)){k=1;S=i;return k|0}}f=h;g=f+56|0;do{b[f>>2]=0;f=f+4|0}while((f|0)<(g|0));$(a,c,1,h);k=h;if(((((!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)?(k=h+8|0,!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)):0)?(k=h+16|0,!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)):0)?(k=h+24|0,!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)):0)?(k=h+32|0,!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)):0)?(k=h+40|0,!((b[k>>2]|0)==(d|0)?(b[k+4>>2]|0)==(e|0):0)):0){f=h+48|0;f=((b[f>>2]|0)==(d|0)?(b[f+4>>2]|0)==(e|0):0)&1}else f=1;k=f;S=i;return k|0}function ac(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=S;S=S+16|0;h=k;if(!($b(a,c,d,e)|0)){i=0;j=0;F(i|0);S=k;return j|0}i=c&-2130706433;f=(Fb(a,c)|0)==0;f=f?1:2;while(1){b[h>>2]=0;l=da(a,c,f,h)|0;g=f+1|0;if((l|0)==(d|0)&(G()|0)==(e|0))break;if(g>>>0<7)f=g;else{f=0;a=0;j=6;break}}if((j|0)==6){F(f|0);S=k;return a|0}l=dd(f|0,0,56)|0;j=i|(G()|0)|268435456;l=a|l;F(j|0);S=k;return l|0}function bc(a,b){a=a|0;b=b|0;var c=0;c=0==0&(b&2013265920|0)==268435456;F((c?b&-2130706433|134217728:0)|0);return (c?a:0)|0}function cc(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;e=S;S=S+16|0;d=e;if(!(0==0&(c&2013265920|0)==268435456)){c=0;d=0;F(c|0);S=e;return d|0}f=cd(a|0,c|0,56)|0;G()|0;b[d>>2]=0;d=da(a,c&-2130706433|134217728,f&7,d)|0;c=G()|0;F(c|0);S=e;return d|0}function dc(a,b){a=a|0;b=b|0;var c=0;if(!(0==0&(b&2013265920|0)==268435456)){c=0;return c|0}c=cd(a|0,b|0,56)|0;G()|0;switch(c&7){case 0:case 7:{c=0;return c|0}default:{}}c=b&-2130706433|134217728;if(0==0&(b&117440512|0)==16777216&(Fb(a,c)|0)!=0){c=0;return c|0}c=Bb(a,c)|0;return c|0}function ec(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=S;S=S+16|0;e=g;h=0==0&(c&2013265920|0)==268435456;f=c&-2130706433|134217728;i=d;b[i>>2]=h?a:0;b[i+4>>2]=h?f:0;if(h){c=cd(a|0,c|0,56)|0;G()|0;b[e>>2]=0;a=da(a,f,c&7,e)|0;c=G()|0}else{a=0;c=0}i=d+8|0;b[i>>2]=a;b[i+4>>2]=c;S=g;return}function fc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=(Fb(a,c)|0)==0;c=c&-2130706433;e=d;b[e>>2]=f?a:0;b[e+4>>2]=f?c|285212672:0;e=d+8|0;b[e>>2]=a;b[e+4>>2]=c|301989888;e=d+16|0;b[e>>2]=a;b[e+4>>2]=c|318767104;e=d+24|0;b[e>>2]=a;b[e+4>>2]=c|335544320;e=d+32|0;b[e>>2]=a;b[e+4>>2]=c|352321536;d=d+40|0;b[d>>2]=a;b[d+4>>2]=c|369098752;return}function gc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=S;S=S+16|0;g=h;e=cd(a|0,c|0,56)|0;G()|0;i=0==0&(c&2013265920|0)==268435456;f=i?a:0;a=i?c&-2130706433|134217728:0;c=Lc(f,a,e&7)|0;if((c|0)==-1){b[d>>2]=0;S=h;return}Ub(f,a,g);e=cd(f|0,a|0,52)|0;G()|0;e=e&15;if(!(Fb(f,a)|0))eb(g,e,c,2,d);else ab(g,e,c,2,d);S=h;return}function hc(a){a=a|0;var c=0,d=0,e=0;c=Yc(1,12)|0;if(!c)H(22691,22646,49,22704);d=a+4|0;e=b[d>>2]|0;if(e|0){e=e+8|0;b[e>>2]=c;b[d>>2]=c;return c|0}if(b[a>>2]|0)H(22721,22646,61,22744);e=a;b[e>>2]=c;b[d>>2]=c;return c|0}function ic(a,c){a=a|0;c=c|0;var d=0,e=0;e=Wc(24)|0;if(!e)H(22758,22646,78,22772);b[e>>2]=b[c>>2];b[e+4>>2]=b[c+4>>2];b[e+8>>2]=b[c+8>>2];b[e+12>>2]=b[c+12>>2];b[e+16>>2]=0;c=a+4|0;d=b[c>>2]|0;if(d|0){b[d+16>>2]=e;b[c>>2]=e;return e|0}if(b[a>>2]|0)H(22787,22646,82,22772);b[a>>2]=e;b[c>>2]=e;return e|0}function jc(a){a=a|0;var c=0,d=0,e=0,f=0;if(!a)return;e=1;while(1){c=b[a>>2]|0;if(c|0)do{d=b[c>>2]|0;if(d|0)do{f=d;d=b[d+16>>2]|0;Xc(f)}while((d|0)!=0);f=c;c=b[c+8>>2]|0;Xc(f)}while((c|0)!=0);c=a;a=b[a+8>>2]|0;if(!e)Xc(c);if(!a)break;else e=0}return}function kc(a){a=a|0;var c=0,d=0,f=0,g=0,h=0.0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0;g=a+8|0;if(b[g>>2]|0){K=1;return K|0}f=b[a>>2]|0;if(!f){K=0;return K|0}c=f;d=0;do{d=d+1|0;c=b[c+8>>2]|0}while((c|0)!=0);if(d>>>0<2){K=0;return K|0}I=Wc(d<<2)|0;if(!I)H(22807,22646,317,22826);G=Wc(d<<5)|0;if(!G)H(22848,22646,321,22826);b[a>>2]=0;z=a+4|0;b[z>>2]=0;b[g>>2]=0;d=0;F=0;y=0;n=0;a:while(1){m=b[f>>2]|0;if(m){h=0.0;i=m;do{k=+e[i+8>>3];c=i;i=b[i+16>>2]|0;l=(i|0)==0;g=l?m:i;j=+e[g+8>>3];if(+q(+(k-j))>3.141592653589793){K=14;break}h=h+(j-k)*(+e[c>>3]+ +e[g>>3])}while(!l);if((K|0)==14){K=0;h=0.0;c=m;do{x=+e[c+8>>3];E=c+16|0;D=b[E>>2]|0;D=(D|0)==0?m:D;w=+e[D+8>>3];h=h+(+e[c>>3]+ +e[D>>3])*((w<0.0?w+6.283185307179586:w)-(x<0.0?x+6.283185307179586:x));c=b[((c|0)==0?f:E)>>2]|0}while((c|0)!=0)}if(h>0.0){b[I+(F<<2)>>2]=f;F=F+1|0;g=y;c=n}else K=19}else K=19;if((K|0)==19){K=0;do if(!d)if(!n)if(!(b[a>>2]|0)){g=z;i=a;c=f;d=a;break}else{K=27;break a}else{g=z;i=n+8|0;c=f;d=a;break}else{c=d+8|0;if(b[c>>2]|0){K=21;break a}d=Yc(1,12)|0;if(!d){K=23;break a}b[c>>2]=d;g=d+4|0;i=d;c=n}while(0);b[i>>2]=f;b[g>>2]=f;i=G+(y<<5)|0;l=b[f>>2]|0;if(l){m=G+(y<<5)+8|0;e[m>>3]=1797693134862315708145274.0e284;n=G+(y<<5)+24|0;e[n>>3]=1797693134862315708145274.0e284;e[i>>3]=-1797693134862315708145274.0e284;o=G+(y<<5)+16|0;e[o>>3]=-1797693134862315708145274.0e284;u=1797693134862315708145274.0e284;v=-1797693134862315708145274.0e284;g=0;p=l;k=1797693134862315708145274.0e284;s=1797693134862315708145274.0e284;t=-1797693134862315708145274.0e284;j=-1797693134862315708145274.0e284;while(1){h=+e[p>>3];x=+e[p+8>>3];p=b[p+16>>2]|0;r=(p|0)==0;w=+e[(r?l:p)+8>>3];if(h>3]=h;k=h}if(x>3]=x;s=x}if(h>t)e[i>>3]=h;else h=t;if(x>j){e[o>>3]=x;j=x}u=x>0.0&xv?x:v;g=g|+q(+(x-w))>3.141592653589793;if(r)break;else t=h}if(g){e[o>>3]=v;e[n>>3]=u}}else{b[i>>2]=0;b[i+4>>2]=0;b[i+8>>2]=0;b[i+12>>2]=0;b[i+16>>2]=0;b[i+20>>2]=0;b[i+24>>2]=0;b[i+28>>2]=0}g=y+1|0}E=f+8|0;f=b[E>>2]|0;b[E>>2]=0;if(!f){K=45;break}else{y=g;n=c}}if((K|0)==21)H(22624,22646,35,22658);else if((K|0)==23)H(22678,22646,37,22658);else if((K|0)==27)H(22721,22646,61,22744);else if((K|0)==45){b:do if((F|0)>0){E=(g|0)==0;C=g<<2;D=(a|0)==0;B=0;c=0;while(1){A=b[I+(B<<2)>>2]|0;if(!E){y=Wc(C)|0;if(!y){K=50;break}z=Wc(C)|0;if(!z){K=52;break}c:do if(!D){g=0;d=0;i=a;while(1){f=G+(g<<5)|0;if(lc(b[i>>2]|0,f,b[A>>2]|0)|0){b[y+(d<<2)>>2]=i;b[z+(d<<2)>>2]=f;r=d+1|0}else r=d;i=b[i+8>>2]|0;if(!i)break;else{g=g+1|0;d=r}}if((r|0)>0){f=b[y>>2]|0;if((r|0)==1)d=f;else{o=0;p=-1;d=f;n=f;while(1){l=b[n>>2]|0;f=0;i=0;while(1){g=b[b[y+(i<<2)>>2]>>2]|0;if((g|0)==(l|0))m=f;else m=f+((lc(g,b[z+(i<<2)>>2]|0,b[l>>2]|0)|0)&1)|0;i=i+1|0;if((i|0)==(r|0))break;else f=m}g=(m|0)>(p|0);d=g?n:d;f=o+1|0;if((f|0)==(r|0))break c;o=f;p=g?m:p;n=b[y+(f<<2)>>2]|0}}}else d=0}else d=0;while(0);Xc(y);Xc(z);if(d){g=d+4|0;f=b[g>>2]|0;if(!f){if(b[d>>2]|0){K=70;break}}else d=f+8|0;b[d>>2]=A;b[g>>2]=A}else K=73}else K=73;if((K|0)==73){K=0;c=b[A>>2]|0;if(c|0)do{z=c;c=b[c+16>>2]|0;Xc(z)}while((c|0)!=0);Xc(A);c=2}B=B+1|0;if((B|0)>=(F|0)){J=c;break b}}if((K|0)==50)H(22863,22646,249,22882);else if((K|0)==52)H(22901,22646,252,22882);else if((K|0)==70)H(22721,22646,61,22744)}else J=0;while(0);Xc(I);Xc(G);K=J;return K|0}return 0}function lc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;if(!(xa(c,d)|0)){a=0;return a|0}c=wa(c)|0;l=+e[d>>3];f=+e[d+8>>3];f=c&f<0.0?f+6.283185307179586:f;a=b[a>>2]|0;if(!a){a=0;return a|0}if(c){c=0;d=a;a:while(1){while(1){i=+e[d>>3];k=+e[d+8>>3];d=d+16|0;m=b[d>>2]|0;m=(m|0)==0?a:m;h=+e[m>>3];g=+e[m+8>>3];if(i>h){j=i;i=k}else{j=h;h=i;i=g;g=k}if(!(lj))break;d=b[d>>2]|0;if(!d){d=22;break a}}k=g<0.0?g+6.283185307179586:g;i=i<0.0?i+6.283185307179586:i;f=i==f|k==f?f+-2.220446049250313e-16:f;k=k+(l-h)/(j-h)*(i-k);if((k<0.0?k+6.283185307179586:k)>f)c=c^1;d=b[d>>2]|0;if(!d){d=22;break}}if((d|0)==22)return c|0}else{c=0;d=a;b:while(1){while(1){i=+e[d>>3];k=+e[d+8>>3];d=d+16|0;m=b[d>>2]|0;m=(m|0)==0?a:m;h=+e[m>>3];g=+e[m+8>>3];if(i>h){j=i;i=k}else{j=h;h=i;i=g;g=k}if(!(lj))break;d=b[d>>2]|0;if(!d){d=22;break b}}f=i==f|g==f?f+-2.220446049250313e-16:f;if(g+(l-h)/(j-h)*(i-g)>f)c=c^1;d=b[d>>2]|0;if(!d){d=22;break}}if((d|0)==22)return c|0}return 0}function mc(c,d,e,f,g){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=S;S=S+32|0;t=u+16|0;s=u;h=cd(c|0,d|0,52)|0;G()|0;h=h&15;p=cd(e|0,f|0,52)|0;G()|0;if((h|0)!=(p&15|0)){t=1;S=u;return t|0}l=cd(c|0,d|0,45)|0;G()|0;l=l&127;m=cd(e|0,f|0,45)|0;G()|0;m=m&127;p=(l|0)!=(m|0);if(p){j=ta(l,m)|0;if((j|0)==7){t=2;S=u;return t|0}k=ta(m,l)|0;if((k|0)==7)H(22925,22949,151,22959);else{q=j;i=k}}else{q=0;i=0}n=la(l)|0;o=la(m)|0;b[t>>2]=0;b[t+4>>2]=0;b[t+8>>2]=0;b[t+12>>2]=0;do if(!q){Tb(e,f,t)|0;if((n|0)!=0&(o|0)!=0){if((m|0)!=(l|0))H(23077,22949,243,22959);i=Lb(c,d)|0;h=Lb(e,f)|0;if(!(a[22032+(i*7|0)+h>>0]|0)){i=b[21200+(i*28|0)+(h<<2)>>2]|0;if((i|0)>0){j=t+4|0;h=0;do{Oa(j);h=h+1|0}while((h|0)!=(i|0));r=50}else r=50}else h=5}else r=50}else{m=b[4304+(l*28|0)+(q<<2)>>2]|0;j=(m|0)>0;if(!o)if(j){l=0;k=e;j=f;do{k=Pb(k,j)|0;j=G()|0;i=Qa(i)|0;l=l+1|0}while((l|0)!=(m|0));m=i;l=k;k=j}else{m=i;l=e;k=f}else if(j){l=0;k=e;j=f;do{k=Ob(k,j)|0;j=G()|0;i=Qa(i)|0;if((i|0)==1)i=Qa(1)|0;l=l+1|0}while((l|0)!=(m|0));m=i;l=k;k=j}else{m=i;l=e;k=f}Tb(l,k,t)|0;if(!p)H(22972,22949,181,22959);j=(n|0)!=0;i=(o|0)!=0;if(j&i)H(22999,22949,182,22959);if(!j)if(i){i=Lb(l,k)|0;if(a[22032+(i*7|0)+m>>0]|0){h=4;break}l=0;k=b[21200+(m*28|0)+(i<<2)>>2]|0;r=26}else i=0;else{i=Lb(c,d)|0;if(a[22032+(i*7|0)+q>>0]|0){h=3;break}k=b[21200+(i*28|0)+(q<<2)>>2]|0;l=k;r=26}if((r|0)==26){if((k|0)<=-1)H(23030,22949,212,22959);if((l|0)<=-1)H(23053,22949,213,22959);if((k|0)>0){j=t+4|0;i=0;do{Oa(j);i=i+1|0}while((i|0)!=(k|0));i=l}else i=l};b[s>>2]=0;b[s+4>>2]=0;b[s+8>>2]=0;Ma(s,q);if(h|0)while(1){if(!(Rb(h)|0))La(s);else Ka(s);if((h|0)>1)h=h+-1|0;else break}if((i|0)>0){h=0;do{Oa(s);h=h+1|0}while((h|0)!=(i|0))}r=t+4|0;Ea(r,s,r);Ca(r);r=50}while(0);if((r|0)==50){h=t+4|0;b[g>>2]=b[h>>2];b[g+4>>2]=b[h+4>>2];b[g+8>>2]=b[h+8>>2];h=0}t=h;S=u;return t|0}function nc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=S;S=S+48|0;h=p+36|0;i=p+24|0;j=p+12|0;k=p;g=cd(a|0,c|0,52)|0;G()|0;g=g&15;n=cd(a|0,c|0,45)|0;G()|0;n=n&127;l=la(n)|0;dd(g|0,0,52)|0;r=G()|0|134225919;q=e;b[q>>2]=-1;b[q+4>>2]=r;if(!g){if((b[d>>2]|0)>1){r=1;S=p;return r|0}if((b[d+4>>2]|0)>1){r=1;S=p;return r|0}if((b[d+8>>2]|0)>1){r=1;S=p;return r|0}f=sa(n,Ha(d)|0)|0;if((f|0)==127){r=1;S=p;return r|0}o=dd(f|0,0,45)|0;q=G()|0;n=e;q=b[n+4>>2]&-1040385|q;r=e;b[r>>2]=b[n>>2]|o;b[r+4>>2]=q;r=0;S=p;return r|0};b[h>>2]=b[d>>2];b[h+4>>2]=b[d+4>>2];b[h+8>>2]=b[d+8>>2];while(1){b[i>>2]=b[h>>2];b[i+4>>2]=b[h+4>>2];b[i+8>>2]=b[h+8>>2];if(!(Rb(g)|0)){Ja(h);b[j>>2]=b[h>>2];b[j+4>>2]=b[h+4>>2];b[j+8>>2]=b[h+8>>2];La(j)}else{Ia(h);b[j>>2]=b[h>>2];b[j+4>>2]=b[h+4>>2];b[j+8>>2]=b[h+8>>2];Ka(j)}Fa(i,j,k);Ca(k);q=e;s=b[q>>2]|0;q=b[q+4>>2]|0;t=(15-g|0)*3|0;d=dd(7,0,t|0)|0;q=q&~(G()|0);t=dd(Ha(k)|0,0,t|0)|0;q=G()|0|q;r=e;b[r>>2]=t|s&~d;b[r+4>>2]=q;if((g|0)>1)g=g+-1|0;else break}a:do if(((b[h>>2]|0)<=1?(b[h+4>>2]|0)<=1:0)?(b[h+8>>2]|0)<=1:0){g=Ha(h)|0;i=sa(n,g)|0;if((i|0)==127)k=0;else k=la(i)|0;b:do if(!g)if((l|0)!=0&(k|0)!=0){t=Lb(a,c)|0;g=e;g=21408+(t*28|0)+((Lb(b[g>>2]|0,b[g+4>>2]|0)|0)<<2)|0;g=b[g>>2]|0;if((g|0)<=-1)H(23201,22949,433,23134);if(!g){f=i;g=55}else{h=e;f=0;d=b[h>>2]|0;h=b[h+4>>2]|0;do{d=Nb(d,h)|0;h=G()|0;t=e;b[t>>2]=d;b[t+4>>2]=h;f=f+1|0}while((f|0)<(g|0));f=i;g=54}}else{f=i;g=54}else{if(l){h=21408+((Lb(a,c)|0)*28|0)+(g<<2)|0;h=b[h>>2]|0;if((h|0)>0){d=0;do{g=Pa(g)|0;d=d+1|0}while((d|0)!=(h|0))}if((g|0)==1){f=3;break a}d=sa(n,g)|0;if((d|0)==127)H(23104,22949,376,23134);if(!(la(d)|0)){o=h;m=g;f=d}else H(23147,22949,377,23134)}else{o=0;m=g;f=i}j=b[4304+(n*28|0)+(m<<2)>>2]|0;if((j|0)<=-1)H(23178,22949,384,23134);if(!k){if((o|0)<=-1)H(23030,22949,417,23134);if(o|0){h=e;g=0;d=b[h>>2]|0;h=b[h+4>>2]|0;do{d=Nb(d,h)|0;h=G()|0;t=e;b[t>>2]=d;b[t+4>>2]=h;g=g+1|0}while((g|0)<(o|0))}if((j|0)<=0){g=54;break}h=e;g=0;d=b[h>>2]|0;h=b[h+4>>2]|0;while(1){d=Nb(d,h)|0;h=G()|0;t=e;b[t>>2]=d;b[t+4>>2]=h;g=g+1|0;if((g|0)==(j|0)){g=54;break b}}}i=ta(f,n)|0;if((i|0)==7)H(22925,22949,393,23134);g=e;d=b[g>>2]|0;g=b[g+4>>2]|0;if((j|0)>0){h=0;do{d=Nb(d,g)|0;g=G()|0;t=e;b[t>>2]=d;b[t+4>>2]=g;h=h+1|0}while((h|0)!=(j|0))}d=Lb(d,g)|0;t=ma(f)|0;d=b[(t?21824:21616)+(i*28|0)+(d<<2)>>2]|0;if((d|0)<=-1)H(23030,22949,412,23134);if(!d)g=54;else{i=e;g=0;h=b[i>>2]|0;i=b[i+4>>2]|0;do{h=Mb(h,i)|0;i=G()|0;t=e;b[t>>2]=h;b[t+4>>2]=i;g=g+1|0}while((g|0)<(d|0));g=54}}while(0);if((g|0)==54)if(k)g=55;if((g|0)==55){t=e;if((Lb(b[t>>2]|0,b[t+4>>2]|0)|0)==1){f=4;break}}t=e;r=b[t>>2]|0;t=b[t+4>>2]&-1040385;s=dd(f|0,0,45)|0;t=t|(G()|0);f=e;b[f>>2]=r|s;b[f+4>>2]=t;f=0}else f=2;while(0);t=f;S=p;return t|0}function oc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=S;S=S+16|0;f=g;a=mc(a,b,c,d,f)|0;if(!a){Ua(f,e);a=0}S=g;return a|0}function pc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=S;S=S+16|0;f=e;Va(c,f);d=nc(a,b,f,d)|0;S=e;return d|0}function qc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=S;S=S+32|0;e=g+12|0;f=g;if((mc(a,b,a,b,e)|0)==0?(mc(a,b,c,d,f)|0)==0:0)a=Ta(e,f)|0;else a=-1;S=g;return a|0}function rc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=S;S=S+32|0;e=g+12|0;f=g;if((mc(a,b,a,b,e)|0)==0?(mc(a,b,c,d,f)|0)==0:0)a=Ta(e,f)|0;else a=-1;S=g;return (a>>>31^1)+a|0}function sc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=S;S=S+48|0;g=x+24|0;h=x+12|0;w=x;if((mc(a,c,a,c,g)|0)==0?(mc(a,c,d,e,h)|0)==0:0){v=Ta(g,h)|0;if((v|0)<0){w=v;S=x;return w|0};b[g>>2]=0;b[g+4>>2]=0;b[g+8>>2]=0;b[h>>2]=0;b[h+4>>2]=0;b[h+8>>2]=0;mc(a,c,a,c,g)|0;mc(a,c,d,e,h)|0;Wa(g);Wa(h);if(!v){e=g+4|0;n=g+8|0;s=e;t=n;u=g;d=b[g>>2]|0;e=b[e>>2]|0;g=b[n>>2]|0;p=0.0;r=0.0;o=0.0}else{l=b[g>>2]|0;o=+(v|0);s=g+4|0;m=b[s>>2]|0;t=g+8|0;n=b[t>>2]|0;u=g;d=l;e=m;g=n;p=+((b[h>>2]|0)-l|0)/o;r=+((b[h+4>>2]|0)-m|0)/o;o=+((b[h+8>>2]|0)-n|0)/o}b[w>>2]=d;n=w+4|0;b[n>>2]=e;m=w+8|0;b[m>>2]=g;l=0;while(1){j=+(l|0);y=p*j+ +(d|0);i=r*j+ +(b[s>>2]|0);j=o*j+ +(b[t>>2]|0);e=~~+fd(+y);h=~~+fd(+i);d=~~+fd(+j);y=+q(+(+(e|0)-y));i=+q(+(+(h|0)-i));j=+q(+(+(d|0)-j));do if(!(y>i&y>j)){k=0-e|0;if(i>j){g=k-d|0;break}else{g=h;d=k-h|0;break}}else{e=0-(h+d)|0;g=h}while(0);b[w>>2]=e;b[n>>2]=g;b[m>>2]=d;Xa(w);nc(a,c,w,f+(l<<3)|0)|0;if((l|0)==(v|0))break;l=l+1|0;d=b[u>>2]|0}w=0;S=x;return w|0}w=-1;S=x;return w|0}function tc(a,b){a=a|0;b=b|0;var c=0;if(!b){c=1;return c|0}c=a;a=1;do{a=B((b&1|0)==0?1:c,a)|0;b=b>>1;c=B(c,c)|0}while((b|0)!=0);return a|0}function uc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0.0;if(!(xa(c,d)|0)){n=0;return n|0}c=wa(c)|0;o=+e[d>>3];f=+e[d+8>>3];f=c&f<0.0?f+6.283185307179586:f;n=b[a>>2]|0;if((n|0)<=0){n=0;return n|0}m=b[a+4>>2]|0;if(c){c=0;d=-1;a=0;a:while(1){l=a;while(1){i=+e[m+(l<<4)>>3];k=+e[m+(l<<4)+8>>3];a=(d+2|0)%(n|0)|0;h=+e[m+(a<<4)>>3];g=+e[m+(a<<4)+8>>3];if(i>h){j=i;i=k}else{j=h;h=i;i=g;g=k}if(!(oj))break;d=l+1|0;if((d|0)<(n|0)){a=l;l=d;d=a}else{d=22;break a}}k=g<0.0?g+6.283185307179586:g;i=i<0.0?i+6.283185307179586:i;f=i==f|k==f?f+-2.220446049250313e-16:f;k=k+(o-h)/(j-h)*(i-k);if((k<0.0?k+6.283185307179586:k)>f)c=c^1;a=l+1|0;if((a|0)>=(n|0)){d=22;break}else d=l}if((d|0)==22)return c|0}else{c=0;d=-1;a=0;b:while(1){l=a;while(1){i=+e[m+(l<<4)>>3];k=+e[m+(l<<4)+8>>3];a=(d+2|0)%(n|0)|0;h=+e[m+(a<<4)>>3];g=+e[m+(a<<4)+8>>3];if(i>h){j=i;i=k}else{j=h;h=i;i=g;g=k}if(!(oj))break;d=l+1|0;if((d|0)<(n|0)){a=l;l=d;d=a}else{d=22;break b}}f=i==f|g==f?f+-2.220446049250313e-16:f;if(g+(o-h)/(j-h)*(i-g)>f)c=c^1;a=l+1|0;if((a|0)>=(n|0)){d=22;break}else d=l}if((d|0)==22)return c|0}return 0}function vc(a,c){a=a|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0;r=b[a>>2]|0;if(!r){b[c>>2]=0;b[c+4>>2]=0;b[c+8>>2]=0;b[c+12>>2]=0;b[c+16>>2]=0;b[c+20>>2]=0;b[c+24>>2]=0;b[c+28>>2]=0;return}s=c+8|0;e[s>>3]=1797693134862315708145274.0e284;t=c+24|0;e[t>>3]=1797693134862315708145274.0e284;e[c>>3]=-1797693134862315708145274.0e284;u=c+16|0;e[u>>3]=-1797693134862315708145274.0e284;if((r|0)<=0)return;o=b[a+4>>2]|0;l=1797693134862315708145274.0e284;m=-1797693134862315708145274.0e284;n=0;a=-1;h=1797693134862315708145274.0e284;i=1797693134862315708145274.0e284;k=-1797693134862315708145274.0e284;f=-1797693134862315708145274.0e284;p=0;while(1){d=+e[o+(p<<4)>>3];j=+e[o+(p<<4)+8>>3];a=a+2|0;g=+e[o+(((a|0)==(r|0)?0:a)<<4)+8>>3];if(d>3]=d;h=d}if(j>3]=j;i=j}if(d>k)e[c>>3]=d;else d=k;if(j>f){e[u>>3]=j;f=j}l=j>0.0&jm?j:m;n=n|+q(+(j-g))>3.141592653589793;a=p+1|0;if((a|0)==(r|0))break;else{v=p;k=d;p=a;a=v}}if(!n)return;e[u>>3]=m;e[t>>3]=l;return}function wc(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;r=b[a>>2]|0;if(r){s=c+8|0;e[s>>3]=1797693134862315708145274.0e284;t=c+24|0;e[t>>3]=1797693134862315708145274.0e284;e[c>>3]=-1797693134862315708145274.0e284;u=c+16|0;e[u>>3]=-1797693134862315708145274.0e284;if((r|0)>0){g=b[a+4>>2]|0;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;f=0;d=-1;k=1797693134862315708145274.0e284;l=1797693134862315708145274.0e284;n=-1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;v=0;while(1){h=+e[g+(v<<4)>>3];m=+e[g+(v<<4)+8>>3];z=d+2|0;j=+e[g+(((z|0)==(r|0)?0:z)<<4)+8>>3];if(h>3]=h;k=h}if(m>3]=m;l=m}if(h>n)e[c>>3]=h;else h=n;if(m>i){e[u>>3]=m;i=m}o=m>0.0&mp?m:p;f=f|+q(+(m-j))>3.141592653589793;d=v+1|0;if((d|0)==(r|0))break;else{z=v;n=h;v=d;d=z}}if(f){e[u>>3]=p;e[t>>3]=o}}}else{b[c>>2]=0;b[c+4>>2]=0;b[c+8>>2]=0;b[c+12>>2]=0;b[c+16>>2]=0;b[c+20>>2]=0;b[c+24>>2]=0;b[c+28>>2]=0}z=a+8|0;d=b[z>>2]|0;if((d|0)<=0)return;y=a+12|0;x=0;do{g=b[y>>2]|0;f=x;x=x+1|0;t=c+(x<<5)|0;u=b[g+(f<<3)>>2]|0;if(u){v=c+(x<<5)+8|0;e[v>>3]=1797693134862315708145274.0e284;a=c+(x<<5)+24|0;e[a>>3]=1797693134862315708145274.0e284;e[t>>3]=-1797693134862315708145274.0e284;w=c+(x<<5)+16|0;e[w>>3]=-1797693134862315708145274.0e284;if((u|0)>0){r=b[g+(f<<3)+4>>2]|0;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;g=0;f=-1;s=0;k=1797693134862315708145274.0e284;l=1797693134862315708145274.0e284;m=-1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;while(1){h=+e[r+(s<<4)>>3];n=+e[r+(s<<4)+8>>3];f=f+2|0;j=+e[r+(((f|0)==(u|0)?0:f)<<4)+8>>3];if(h>3]=h;k=h}if(n>3]=n;l=n}if(h>m)e[t>>3]=h;else h=m;if(n>i){e[w>>3]=n;i=n}o=n>0.0&np?n:p;g=g|+q(+(n-j))>3.141592653589793;f=s+1|0;if((f|0)==(u|0))break;else{A=s;s=f;m=h;f=A}}if(g){e[w>>3]=p;e[a>>3]=o}}}else{b[t>>2]=0;b[t+4>>2]=0;b[t+8>>2]=0;b[t+12>>2]=0;b[t+16>>2]=0;b[t+20>>2]=0;b[t+24>>2]=0;b[t+28>>2]=0;d=b[z>>2]|0}}while((x|0)<(d|0));return}function xc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(!(uc(a,c,d)|0)){f=0;return f|0}f=a+8|0;if((b[f>>2]|0)<=0){f=1;return f|0}e=a+12|0;a=0;while(1){g=a;a=a+1|0;if(uc((b[e>>2]|0)+(g<<3)|0,c+(a<<5)|0,d)|0){a=0;e=6;break}if((a|0)>=(b[f>>2]|0)){a=1;e=6;break}}if((e|0)==6)return a|0;return 0}function yc(){return 8}function zc(){return 16}function Ac(){return 168}function Bc(){return 8}function Cc(){return 16}function Dc(){return 12}function Ec(){return 8}function Fc(a){a=a|0;var b=0.0,c=0.0;c=+e[a>>3];b=+e[a+8>>3];return +(+r(+(c*c+b*b)))}function Gc(a,b,c,d,f){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;var g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;k=+e[a>>3];j=+e[b>>3]-k;i=+e[a+8>>3];h=+e[b+8>>3]-i;m=+e[c>>3];g=+e[d>>3]-m;n=+e[c+8>>3];l=+e[d+8>>3]-n;g=(g*(i-n)-(k-m)*l)/(j*l-h*g);e[f>>3]=k+j*g;e[f+8>>3]=i+h*g;return}function Hc(a,b){a=a|0;b=b|0;if(!(+e[a>>3]==+e[b>>3])){b=0;return b|0}b=+e[a+8>>3]==+e[b+8>>3];return b|0}function Ic(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;f=+e[a>>3]-+e[b>>3];d=+e[a+8>>3]-+e[b+8>>3];c=+e[a+16>>3]-+e[b+16>>3];return +(f*f+d*d+c*c)}function Jc(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;c=+e[a>>3];d=+t(+c);c=+u(+c);e[b+16>>3]=c;c=+e[a+8>>3];f=d*+t(+c);e[b>>3]=f;c=d*+u(+c);e[b+8>>3]=c;return}function Kc(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=S;S=S+32|0;f=k+16|0;g=k;Ub(a,c,f);h=Ab(a,c)|0;j=Lb(a,c)|0;pa(h,g);c=qa(h,b[f>>2]|0)|0;if(!(la(h)|0)){j=c;S=k;return j|0}do switch(h|0){case 4:{a=0;d=14;break}case 14:{a=1;d=14;break}case 24:{a=2;d=14;break}case 38:{a=3;d=14;break}case 49:{a=4;d=14;break}case 58:{a=5;d=14;break}case 63:{a=6;d=14;break}case 72:{a=7;d=14;break}case 83:{a=8;d=14;break}case 97:{a=9;d=14;break}case 107:{a=10;d=14;break}case 117:{a=11;d=14;break}default:{i=0;e=0}}while(0);if((d|0)==14){i=b[22096+(a*24|0)+8>>2]|0;e=b[22096+(a*24|0)+16>>2]|0}a=b[f>>2]|0;if((a|0)!=(b[g>>2]|0)){h=ma(h)|0;a=b[f>>2]|0;if(h|(a|0)==(e|0))c=(c+1|0)%6|0}if((j|0)==3&(a|0)==(e|0)){j=(c+5|0)%6|0;S=k;return j|0}if(!((j|0)==5&(a|0)==(i|0))){j=c;S=k;return j|0}j=(c+1|0)%6|0;S=k;return j|0}function Lc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=Fb(a,c)|0;if((d+-1|0)>>>0>5){d=-1;return d|0}f=(e|0)!=0;if((d|0)==1&f){d=-1;return d|0}e=Kc(a,c)|0;if(f){d=(5-e+(b[22384+(d<<2)>>2]|0)|0)%5|0;return d|0}else{d=(6-e+(b[22416+(d<<2)>>2]|0)|0)%6|0;return d|0}return 0}function Mc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if((c|0)>0){e=Yc(c,4)|0;b[a>>2]=e;if(!e)H(23230,23253,40,23267)}else b[a>>2]=0;b[a+4>>2]=c;b[a+8>>2]=0;b[a+12>>2]=d;return}function Nc(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;h=a+12|0;i=a+8|0;a:while(1){d=b[g>>2]|0;c=0;while(1){if((c|0)>=(d|0))break a;f=b[a>>2]|0;j=b[f+(c<<2)>>2]|0;if(!j)c=c+1|0;else break}c=f+(~~(+q(+(+s(10.0,+(+(15-(b[h>>2]|0)|0)))*(+e[j>>3]+ +e[j+8>>3])))%+(d|0))>>>0<<2)|0;d=b[c>>2]|0;b:do if(d|0){f=j+32|0;if((d|0)==(j|0))b[c>>2]=b[f>>2];else{d=d+32|0;c=b[d>>2]|0;if(!c)break;while(1){if((c|0)==(j|0))break;d=c+32|0;c=b[d>>2]|0;if(!c)break b}b[d>>2]=b[f>>2]}Xc(j);b[i>>2]=(b[i>>2]|0)+-1}while(0)}Xc(b[a>>2]|0);return}function Oc(a){a=a|0;var c=0,d=0,e=0;e=b[a+4>>2]|0;d=0;while(1){if((d|0)>=(e|0)){c=0;d=4;break}c=b[(b[a>>2]|0)+(d<<2)>>2]|0;if(!c)d=d+1|0;else{d=4;break}}if((d|0)==4)return c|0;return 0}function Pc(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0;d=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;d=(b[a>>2]|0)+(d<<2)|0;f=b[d>>2]|0;if(!f){h=1;return h|0}h=c+32|0;do if((f|0)!=(c|0)){d=b[f+32>>2]|0;if(!d){h=1;return h|0}g=d;while(1){if((g|0)==(c|0)){g=8;break}d=b[g+32>>2]|0;if(!d){d=1;g=10;break}else{f=g;g=d}}if((g|0)==8){b[f+32>>2]=b[h>>2];break}else if((g|0)==10)return d|0}else b[d>>2]=b[h>>2];while(0);Xc(c);h=a+8|0;b[h>>2]=(b[h>>2]|0)+-1;h=0;return h|0}function Qc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0;h=Wc(40)|0;if(!h)H(23283,23253,98,23296);b[h>>2]=b[c>>2];b[h+4>>2]=b[c+4>>2];b[h+8>>2]=b[c+8>>2];b[h+12>>2]=b[c+12>>2];g=h+16|0;b[g>>2]=b[d>>2];b[g+4>>2]=b[d+4>>2];b[g+8>>2]=b[d+8>>2];b[g+12>>2]=b[d+12>>2];b[h+32>>2]=0;g=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;g=(b[a>>2]|0)+(g<<2)|0;f=b[g>>2]|0;do if(!f)b[g>>2]=h;else{while(1){if(hb(f,c)|0?hb(f+16|0,d)|0:0)break;g=b[f+32>>2]|0;f=(g|0)==0?f:g;if(!(b[f+32>>2]|0)){i=10;break}}if((i|0)==10){b[f+32>>2]=h;break}Xc(h);i=f;return i|0}while(0);i=a+8|0;b[i>>2]=(b[i>>2]|0)+1;i=h;return i|0}function Rc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0;g=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;g=b[(b[a>>2]|0)+(g<<2)>>2]|0;if(!g){d=0;return d|0}if(!d){a=g;while(1){if(hb(a,c)|0){f=10;break}a=b[a+32>>2]|0;if(!a){a=0;f=10;break}}if((f|0)==10)return a|0}a=g;while(1){if(hb(a,c)|0?hb(a+16|0,d)|0:0){f=10;break}a=b[a+32>>2]|0;if(!a){a=0;f=10;break}}if((f|0)==10)return a|0;return 0}function Sc(a,c){a=a|0;c=c|0;var d=0;d=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;a=b[(b[a>>2]|0)+(d<<2)>>2]|0;if(!a){d=0;return d|0}while(1){if(hb(a,c)|0){c=5;break}a=b[a+32>>2]|0;if(!a){a=0;c=5;break}}if((c|0)==5)return a|0;return 0}function Tc(){return 23312}function Uc(a){a=+a;return +(+id(+a))}function Vc(a){a=+a;return ~~+Uc(a)|0}function Wc(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=S;S=S+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=b[5829]|0;d=m>>>a;if(d&3|0){c=(d&1^1)+a|0;a=23356+(c<<1<<2)|0;d=a+8|0;e=b[d>>2]|0;f=e+8|0;g=b[f>>2]|0;if((g|0)==(a|0))b[5829]=m&~(1<>2]=a;b[d>>2]=g}v=c<<3;b[e+4>>2]=v|3;v=e+v+4|0;b[v>>2]=b[v>>2]|1;v=f;S=w;return v|0}l=b[5831]|0;if(k>>>0>l>>>0){if(d|0){c=2<>>12&16;c=c>>>i;d=c>>>5&8;c=c>>>d;g=c>>>2&4;c=c>>>g;a=c>>>1&2;c=c>>>a;e=c>>>1&1;e=(d|i|g|a|e)+(c>>>e)|0;c=23356+(e<<1<<2)|0;a=c+8|0;g=b[a>>2]|0;i=g+8|0;d=b[i>>2]|0;if((d|0)==(c|0)){a=m&~(1<>2]=c;b[a>>2]=d;a=m}v=e<<3;h=v-k|0;b[g+4>>2]=k|3;f=g+k|0;b[f+4>>2]=h|1;b[g+v>>2]=h;if(l|0){e=b[5834]|0;c=l>>>3;d=23356+(c<<1<<2)|0;c=1<>2]|0}b[a>>2]=e;b[c+12>>2]=e;b[e+8>>2]=c;b[e+12>>2]=d}b[5831]=h;b[5834]=f;v=i;S=w;return v|0}g=b[5830]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=b[23620+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(b[j+4>>2]&-8)-k|0;while(1){a=b[d+16>>2]|0;if(!a){a=b[d+20>>2]|0;if(!a)break}h=(b[a+4>>2]&-8)-k|0;f=h>>>0>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=b[i+24>>2]|0;c=b[i+12>>2]|0;do if((c|0)==(i|0)){a=i+20|0;c=b[a>>2]|0;if(!c){a=i+16|0;c=b[a>>2]|0;if(!c){d=0;break}}while(1){e=c+20|0;d=b[e>>2]|0;if(!d){e=c+16|0;d=b[e>>2]|0;if(!d)break;else{c=d;a=e}}else{c=d;a=e}}b[a>>2]=0;d=c}else{d=b[i+8>>2]|0;b[d+12>>2]=c;b[c+8>>2]=d;d=c}while(0);do if(f|0){c=b[i+28>>2]|0;a=23620+(c<<2)|0;if((i|0)==(b[a>>2]|0)){b[a>>2]=d;if(!d){b[5830]=g&~(1<>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}b[d+24>>2]=f;c=b[i+16>>2]|0;if(c|0){b[d+16>>2]=c;b[c+24>>2]=d}c=b[i+20>>2]|0;if(c|0){b[d+20>>2]=c;b[c+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;b[i+4>>2]=v|3;v=i+v+4|0;b[v>>2]=b[v>>2]|1}else{b[i+4>>2]=k|3;b[h+4>>2]=j|1;b[h+j>>2]=j;if(l|0){e=b[5834]|0;c=l>>>3;d=23356+(c<<1<<2)|0;c=1<>2]|0}b[a>>2]=e;b[c+12>>2]=e;b[e+8>>2]=c;b[e+12>>2]=d}b[5831]=j;b[5834]=h}v=i+8|0;S=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=b[5830]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<>>16&4;q=q<>>16&2;j=14-(i|m|j)+(q<>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=b[23620+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(b[d+4>>2]&-8)-k|0;if(h>>>0>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=b[d+20>>2]|0;d=b[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=b[23620+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(b[g+4>>2]&-8)-k|0;d=m>>>0>>0;f=d?m:f;a=d?g:a;d=b[g+16>>2]|0;if(!d)d=b[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((b[5831]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=b[i+24>>2]|0;c=b[i+12>>2]|0;do if((c|0)==(i|0)){a=i+20|0;c=b[a>>2]|0;if(!c){a=i+16|0;c=b[a>>2]|0;if(!c){c=0;break}}while(1){f=c+20|0;d=b[f>>2]|0;if(!d){f=c+16|0;d=b[f>>2]|0;if(!d)break;else{c=d;a=f}}else{c=d;a=f}}b[a>>2]=0}else{v=b[i+8>>2]|0;b[v+12>>2]=c;b[c+8>>2]=v}while(0);do if(g){a=b[i+28>>2]|0;d=23620+(a<<2)|0;if((i|0)==(b[d>>2]|0)){b[d>>2]=c;if(!c){e=e&~(1<>2]|0)==(i|0)?v:g+20|0)>>2]=c;if(!c)break}b[c+24>>2]=g;a=b[i+16>>2]|0;if(a|0){b[c+16>>2]=a;b[a+24>>2]=c}a=b[i+20>>2]|0;if(a){b[c+20>>2]=a;b[a+24>>2]=c}}while(0);b:do if(h>>>0<16){v=h+k|0;b[i+4>>2]=v|3;v=i+v+4|0;b[v>>2]=b[v>>2]|1}else{b[i+4>>2]=k|3;b[l+4>>2]=h|1;b[l+h>>2]=h;c=h>>>3;if(h>>>0<256){d=23356+(c<<1<<2)|0;a=b[5829]|0;c=1<>2]|0}b[a>>2]=l;b[c+12>>2]=l;b[l+8>>2]=c;b[l+12>>2]=d;break}c=h>>>8;if(c)if(h>>>0>16777215)d=31;else{u=(c+1048320|0)>>>16&8;v=c<>>16&4;v=v<>>16&2;d=14-(t|u|d)+(v<>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;c=23620+(d<<2)|0;b[l+28>>2]=d;a=l+16|0;b[a+4>>2]=0;b[a>>2]=0;a=1<>2]=l;b[l+24>>2]=c;b[l+12>>2]=l;b[l+8>>2]=l;break}c=b[c>>2]|0;c:do if((b[c+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(h|0)){c=a;break c}else{e=e<<1;c=a}}b[d>>2]=l;b[l+24>>2]=c;b[l+12>>2]=l;b[l+8>>2]=l;break b}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=l;b[u>>2]=l;b[l+8>>2]=v;b[l+12>>2]=c;b[l+24>>2]=0}while(0);v=i+8|0;S=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=b[5831]|0;if(d>>>0>=m>>>0){c=d-m|0;a=b[5834]|0;if(c>>>0>15){v=a+m|0;b[5834]=v;b[5831]=c;b[v+4>>2]=c|1;b[a+d>>2]=c;b[a+4>>2]=m|3}else{b[5831]=0;b[5834]=0;b[a+4>>2]=d|3;v=a+d+4|0;b[v>>2]=b[v>>2]|1}v=a+8|0;S=w;return v|0}h=b[5832]|0;if(h>>>0>m>>>0){t=h-m|0;b[5832]=t;v=b[5835]|0;u=v+m|0;b[5835]=u;b[u+4>>2]=t|1;b[v+4>>2]=m|3;v=v+8|0;S=w;return v|0}if(!(b[5947]|0)){b[5949]=4096;b[5948]=4096;b[5950]=-1;b[5951]=-1;b[5952]=0;b[5940]=0;b[5947]=n&-16^1431655768;a=4096}else a=b[5949]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;S=w;return v|0}a=b[5939]|0;if(a|0?(l=b[5937]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;S=w;return v|0}d:do if(!(b[5940]&4)){d=b[5835]|0;e:do if(d){e=23764;while(1){n=b[e>>2]|0;if(n>>>0<=d>>>0?(n+(b[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=b[e+8>>2]|0;if(!a){q=128;break e}else e=a}c=g-h&f;if(c>>>0<2147483647){a=jd(c|0)|0;if((a|0)==((b[e>>2]|0)+(b[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=c;g=a;q=145;break d}}else{e=a;q=136}}else c=0}else q=128;while(0);do if((q|0)==128){d=jd(0)|0;if((d|0)!=(-1|0)?(c=d,o=b[5948]|0,p=o+-1|0,c=((p&c|0)==0?0:(p+c&0-o)-c|0)+k|0,o=b[5937]|0,p=c+o|0,c>>>0>m>>>0&c>>>0<2147483647):0){n=b[5939]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){c=0;break}a=jd(c|0)|0;if((a|0)==(d|0)){h=c;g=d;q=145;break d}else{e=a;q=136}}else c=0}while(0);do if((q|0)==136){d=0-c|0;if(!(i>>>0>c>>>0&(c>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){c=0;break}else{h=c;g=e;q=145;break d}a=b[5949]|0;a=j-c+a&0-a;if(a>>>0>=2147483647){h=c;g=e;q=145;break d}if((jd(a|0)|0)==(-1|0)){jd(d|0)|0;c=0;break}else{h=a+c|0;g=e;q=145;break d}}while(0);b[5940]=b[5940]|4;q=143}else{c=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=jd(k|0)|0,p=jd(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0

>>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:c;g=t;q=145}if((q|0)==145){c=(b[5937]|0)+h|0;b[5937]=c;if(c>>>0>(b[5938]|0)>>>0)b[5938]=c;j=b[5835]|0;f:do if(j){c=23764;while(1){a=b[c>>2]|0;d=b[c+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=b[c+8>>2]|0;if(!e)break;else c=e}if(((q|0)==154?(u=c+4|0,(b[c+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){b[u>>2]=d+h;v=(b[5832]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;b[5835]=u;b[5832]=t;b[u+4>>2]=t|1;b[j+v+4>>2]=40;b[5836]=b[5951];break}if(g>>>0<(b[5833]|0)>>>0)b[5833]=g;d=g+h|0;c=23764;while(1){if((b[c>>2]|0)==(d|0)){q=162;break}a=b[c+8>>2]|0;if(!a)break;else c=a}if((q|0)==162?(b[c+12>>2]&8|0)==0:0){b[c>>2]=g;l=c+4|0;b[l>>2]=(b[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;c=d+8|0;c=d+((c&7|0)==0?0:0-c&7)|0;k=l+m|0;i=c-l-m|0;b[l+4>>2]=m|3;g:do if((j|0)==(c|0)){v=(b[5832]|0)+i|0;b[5832]=v;b[5835]=k;b[k+4>>2]=v|1}else{if((b[5834]|0)==(c|0)){v=(b[5831]|0)+i|0;b[5831]=v;b[5834]=k;b[k+4>>2]=v|1;b[k+v>>2]=v;break}a=b[c+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=b[c+8>>2]|0;d=b[c+12>>2]|0;if((d|0)==(a|0)){b[5829]=b[5829]&~(1<>2]=d;b[d+8>>2]=a;break}}else{g=b[c+24>>2]|0;a=b[c+12>>2]|0;do if((a|0)==(c|0)){d=c+16|0;e=d+4|0;a=b[e>>2]|0;if(!a){a=b[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=b[f>>2]|0;if(!e){f=a+16|0;e=b[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}b[d>>2]=0}else{v=b[c+8>>2]|0;b[v+12>>2]=a;b[a+8>>2]=v}while(0);if(!g)break;d=b[c+28>>2]|0;e=23620+(d<<2)|0;do if((b[e>>2]|0)!=(c|0)){v=g+16|0;b[((b[v>>2]|0)==(c|0)?v:g+20|0)>>2]=a;if(!a)break h}else{b[e>>2]=a;if(a|0)break;b[5830]=b[5830]&~(1<>2]=g;d=c+16|0;e=b[d>>2]|0;if(e|0){b[a+16>>2]=e;b[e+24>>2]=a}d=b[d+4>>2]|0;if(!d)break;b[a+20>>2]=d;b[d+24>>2]=a}while(0);c=c+h|0;f=h+i|0}else f=i;c=c+4|0;b[c>>2]=b[c>>2]&-2;b[k+4>>2]=f|1;b[k+f>>2]=f;c=f>>>3;if(f>>>0<256){d=23356+(c<<1<<2)|0;a=b[5829]|0;c=1<>2]|0}b[a>>2]=k;b[c+12>>2]=k;b[k+8>>2]=c;b[k+12>>2]=d;break}c=f>>>8;do if(!c)e=0;else{if(f>>>0>16777215){e=31;break}u=(c+1048320|0)>>>16&8;v=c<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);c=23620+(e<<2)|0;b[k+28>>2]=e;a=k+16|0;b[a+4>>2]=0;b[a>>2]=0;a=b[5830]|0;d=1<>2]=k;b[k+24>>2]=c;b[k+12>>2]=k;b[k+8>>2]=k;break}c=b[c>>2]|0;i:do if((b[c+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(f|0)){c=a;break i}else{e=e<<1;c=a}}b[d>>2]=k;b[k+24>>2]=c;b[k+12>>2]=k;b[k+8>>2]=k;break g}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=k;b[u>>2]=k;b[k+8>>2]=v;b[k+12>>2]=c;b[k+24>>2]=0}while(0);v=l+8|0;S=w;return v|0}c=23764;while(1){a=b[c>>2]|0;if(a>>>0<=j>>>0?(v=a+(b[c+4>>2]|0)|0,v>>>0>j>>>0):0)break;c=b[c+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0>>0?j:a;c=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;b[5835]=u;b[5832]=t;b[u+4>>2]=t|1;b[g+d+4>>2]=40;b[5836]=b[5951];d=a+4|0;b[d>>2]=27;b[c>>2]=b[5941];b[c+4>>2]=b[5942];b[c+8>>2]=b[5943];b[c+12>>2]=b[5944];b[5941]=g;b[5942]=h;b[5944]=0;b[5943]=c;c=a+24|0;do{u=c;c=c+4|0;b[c>>2]=7}while((u+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;b[d>>2]=b[d>>2]&-2;b[j+4>>2]=g|1;b[a>>2]=g;c=g>>>3;if(g>>>0<256){d=23356+(c<<1<<2)|0;a=b[5829]|0;c=1<>2]|0}b[a>>2]=j;b[c+12>>2]=j;b[j+8>>2]=c;b[j+12>>2]=d;break}c=g>>>8;if(c)if(g>>>0>16777215)e=31;else{u=(c+1048320|0)>>>16&8;v=c<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=23620+(e<<2)|0;b[j+28>>2]=e;b[j+20>>2]=0;b[f>>2]=0;c=b[5830]|0;a=1<>2]=j;b[j+24>>2]=d;b[j+12>>2]=j;b[j+8>>2]=j;break}c=b[d>>2]|0;j:do if((b[c+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(g|0)){c=a;break j}else{e=e<<1;c=a}}b[d>>2]=j;b[j+24>>2]=c;b[j+12>>2]=j;b[j+8>>2]=j;break f}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=j;b[u>>2]=j;b[j+8>>2]=v;b[j+12>>2]=c;b[j+24>>2]=0}}else{v=b[5833]|0;if((v|0)==0|g>>>0>>0)b[5833]=g;b[5941]=g;b[5942]=h;b[5944]=0;b[5838]=b[5947];b[5837]=-1;b[5842]=23356;b[5841]=23356;b[5844]=23364;b[5843]=23364;b[5846]=23372;b[5845]=23372;b[5848]=23380;b[5847]=23380;b[5850]=23388;b[5849]=23388;b[5852]=23396;b[5851]=23396;b[5854]=23404;b[5853]=23404;b[5856]=23412;b[5855]=23412;b[5858]=23420;b[5857]=23420;b[5860]=23428;b[5859]=23428;b[5862]=23436;b[5861]=23436;b[5864]=23444;b[5863]=23444;b[5866]=23452;b[5865]=23452;b[5868]=23460;b[5867]=23460;b[5870]=23468;b[5869]=23468;b[5872]=23476;b[5871]=23476;b[5874]=23484;b[5873]=23484;b[5876]=23492;b[5875]=23492;b[5878]=23500;b[5877]=23500;b[5880]=23508;b[5879]=23508;b[5882]=23516;b[5881]=23516;b[5884]=23524;b[5883]=23524;b[5886]=23532;b[5885]=23532;b[5888]=23540;b[5887]=23540;b[5890]=23548;b[5889]=23548;b[5892]=23556;b[5891]=23556;b[5894]=23564;b[5893]=23564;b[5896]=23572;b[5895]=23572;b[5898]=23580;b[5897]=23580;b[5900]=23588;b[5899]=23588;b[5902]=23596;b[5901]=23596;b[5904]=23604;b[5903]=23604;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;b[5835]=u;b[5832]=t;b[u+4>>2]=t|1;b[g+v+4>>2]=40;b[5836]=b[5951]}while(0);c=b[5832]|0;if(c>>>0>m>>>0){t=c-m|0;b[5832]=t;v=b[5835]|0;u=v+m|0;b[5835]=u;b[u+4>>2]=t|1;b[v+4>>2]=m|3;v=v+8|0;S=w;return v|0}}v=Tc()|0;b[v>>2]=12;v=0;S=w;return v|0}function Xc(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=b[5833]|0;a=b[a+-4>>2]|0;c=a&-8;j=d+c|0;do if(!(a&1)){e=b[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+c|0;if(h>>>0>>0)return;if((b[5834]|0)==(h|0)){a=j+4|0;c=b[a>>2]|0;if((c&3|0)!=3){i=h;c=g;break}b[5831]=g;b[a>>2]=c&-2;b[h+4>>2]=g|1;b[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=b[h+8>>2]|0;c=b[h+12>>2]|0;if((c|0)==(a|0)){b[5829]=b[5829]&~(1<>2]=c;b[c+8>>2]=a;i=h;c=g;break}}f=b[h+24>>2]|0;a=b[h+12>>2]|0;do if((a|0)==(h|0)){c=h+16|0;d=c+4|0;a=b[d>>2]|0;if(!a){a=b[c>>2]|0;if(!a){a=0;break}}else c=d;while(1){e=a+20|0;d=b[e>>2]|0;if(!d){e=a+16|0;d=b[e>>2]|0;if(!d)break;else{a=d;c=e}}else{a=d;c=e}}b[c>>2]=0}else{i=b[h+8>>2]|0;b[i+12>>2]=a;b[a+8>>2]=i}while(0);if(f){c=b[h+28>>2]|0;d=23620+(c<<2)|0;if((b[d>>2]|0)==(h|0)){b[d>>2]=a;if(!a){b[5830]=b[5830]&~(1<>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;c=g;break}}b[a+24>>2]=f;c=h+16|0;d=b[c>>2]|0;if(d|0){b[a+16>>2]=d;b[d+24>>2]=a}c=b[c+4>>2]|0;if(c){b[a+20>>2]=c;b[c+24>>2]=a;i=h;c=g}else{i=h;c=g}}else{i=h;c=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=b[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((b[5835]|0)==(j|0)){j=(b[5832]|0)+c|0;b[5832]=j;b[5835]=i;b[i+4>>2]=j|1;if((i|0)!=(b[5834]|0))return;b[5834]=0;b[5831]=0;return}if((b[5834]|0)==(j|0)){j=(b[5831]|0)+c|0;b[5831]=j;b[5834]=h;b[i+4>>2]=j|1;b[h+j>>2]=j;return}f=(e&-8)+c|0;d=e>>>3;do if(e>>>0<256){c=b[j+8>>2]|0;a=b[j+12>>2]|0;if((a|0)==(c|0)){b[5829]=b[5829]&~(1<>2]=a;b[a+8>>2]=c;break}}else{g=b[j+24>>2]|0;a=b[j+12>>2]|0;do if((a|0)==(j|0)){c=j+16|0;d=c+4|0;a=b[d>>2]|0;if(!a){a=b[c>>2]|0;if(!a){d=0;break}}else c=d;while(1){e=a+20|0;d=b[e>>2]|0;if(!d){e=a+16|0;d=b[e>>2]|0;if(!d)break;else{a=d;c=e}}else{a=d;c=e}}b[c>>2]=0;d=a}else{d=b[j+8>>2]|0;b[d+12>>2]=a;b[a+8>>2]=d;d=a}while(0);if(g|0){a=b[j+28>>2]|0;c=23620+(a<<2)|0;if((b[c>>2]|0)==(j|0)){b[c>>2]=d;if(!d){b[5830]=b[5830]&~(1<>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}b[d+24>>2]=g;a=j+16|0;c=b[a>>2]|0;if(c|0){b[d+16>>2]=c;b[c+24>>2]=d}a=b[a+4>>2]|0;if(a|0){b[d+20>>2]=a;b[a+24>>2]=d}}}while(0);b[i+4>>2]=f|1;b[h+f>>2]=f;if((i|0)==(b[5834]|0)){b[5831]=f;return}}else{b[a>>2]=e&-2;b[i+4>>2]=c|1;b[h+c>>2]=c;f=c}a=f>>>3;if(f>>>0<256){d=23356+(a<<1<<2)|0;c=b[5829]|0;a=1<>2]|0}b[c>>2]=i;b[a+12>>2]=i;b[i+8>>2]=a;b[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;e=14-(g|h|e)+(j<>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=23620+(e<<2)|0;b[i+28>>2]=e;b[i+20>>2]=0;b[i+16>>2]=0;c=b[5830]|0;d=1<>2]=i;b[i+24>>2]=a;b[i+12>>2]=i;b[i+8>>2]=i}else{a=b[a>>2]|0;b:do if((b[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;c=b[d>>2]|0;if(!c)break;if((b[c+4>>2]&-8|0)==(f|0)){a=c;break b}else{e=e<<1;a=c}}b[d>>2]=i;b[i+24>>2]=a;b[i+12>>2]=i;b[i+8>>2]=i;break a}while(0);h=a+8|0;j=b[h>>2]|0;b[j+12>>2]=i;b[h>>2]=i;b[i+8>>2]=j;b[i+12>>2]=a;b[i+24>>2]=0}while(0);j=(b[5837]|0)+-1|0;b[5837]=j;if(j|0)return;a=23772;while(1){a=b[a>>2]|0;if(!a)break;else a=a+8|0}b[5837]=-1;return}function Yc(a,c){a=a|0;c=c|0;var d=0;if(a){d=B(c,a)|0;if((c|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(c|0)?d:-1}else d=0;a=Wc(d)|0;if(!a)return a|0;if(!(b[a+-4>>2]&3))return a|0;hd(a|0,0,d|0)|0;return a|0}function Zc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (F(b+d+(c>>>0>>0|0)>>>0|0),c|0)|0}function _c(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (F(d|0),a-c>>>0|0)|0}function $c(a){a=a|0;return (a?31-(D(a^a-1)|0)|0:32)|0}function ad(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=c;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){b[f>>2]=(l>>>0)%(h>>>0);b[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (F(n|0),f)|0}else{if(!g){n=0;f=0;return (F(n|0),f)|0}b[f>>2]=a|0;b[f+4>>2]=c&0;n=0;f=0;return (F(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(D(i|0)|0)-(D(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;c=g-31>>31;h=m;a=l>>>(m>>>0)&c|k<>>(m>>>0)&c;g=0;i=l<>2]=a|0;b[f+4>>2]=j|c&0;n=0;f=0;return (F(n|0),f)|0}g=h-1|0;if(g&h|0){i=(D(h|0)|0)+33-(D(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;c=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&c;c=c&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){b[f>>2]=g&l;b[f+4>>2]=0}if((h|0)==1){o=j|c&0;p=a|0|0;return (F(o|0),p)|0}else{p=$c(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (F(o|0),p)|0}}else{if(g){if(f|0){b[f>>2]=(k>>>0)%(h>>>0);b[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (F(o|0),p)|0}if(!l){if(f|0){b[f>>2]=0;b[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (F(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){b[f>>2]=a|0;b[f+4>>2]=g&k|c&0}o=0;p=k>>>(($c(i|0)|0)>>>0);return (F(o|0),p)|0}g=(D(i|0)|0)-(D(k|0)|0)|0;if(g>>>0<=30){c=g+1|0;i=31-g|0;h=c;a=k<>>(c>>>0);c=k>>>(c>>>0);g=0;i=l<>2]=a|0;b[f+4>>2]=j|c&0;o=0;p=0;return (F(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Zc(m|0,l|0,-1,-1)|0;d=G()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|c<<1|0;_c(k|0,d|0,e|0,n|0)|0;p=G()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=_c(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;c=G()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){b[f>>2]=a;b[f+4>>2]=c}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (F(o|0),p)|0}function bd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=S;S=S+16|0;f=g|0;ad(a,c,d,e,f)|0;S=g;return (F(b[f+4>>2]|0),b[f>>2]|0)|0}function cd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){F(b>>>c|0);return a>>>c|(b&(1<>>c-32|0}function dd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){F(b<>>32-c|0);return a<=0.0?+p(a+.5):+A(a-.5)}function gd(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){K(c|0,d|0,e|0)|0;return c|0}h=c|0;g=c+e|0;if((c&3)==(d&3)){while(c&3){if(!e)return h|0;a[c>>0]=a[d>>0]|0;c=c+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((c|0)<=(f|0)){b[c>>2]=b[d>>2];b[c+4>>2]=b[d+4>>2];b[c+8>>2]=b[d+8>>2];b[c+12>>2]=b[d+12>>2];b[c+16>>2]=b[d+16>>2];b[c+20>>2]=b[d+20>>2];b[c+24>>2]=b[d+24>>2];b[c+28>>2]=b[d+28>>2];b[c+32>>2]=b[d+32>>2];b[c+36>>2]=b[d+36>>2];b[c+40>>2]=b[d+40>>2];b[c+44>>2]=b[d+44>>2];b[c+48>>2]=b[d+48>>2];b[c+52>>2]=b[d+52>>2];b[c+56>>2]=b[d+56>>2];b[c+60>>2]=b[d+60>>2];c=c+64|0;d=d+64|0}while((c|0)<(e|0)){b[c>>2]=b[d>>2];c=c+4|0;d=d+4|0}}else{e=g-4|0;while((c|0)<(e|0)){a[c>>0]=a[d>>0]|0;a[c+1>>0]=a[d+1>>0]|0;a[c+2>>0]=a[d+2>>0]|0;a[c+3>>0]=a[d+3>>0]|0;c=c+4|0;d=d+4|0}}while((c|0)<(g|0)){a[c>>0]=a[d>>0]|0;c=c+1|0;d=d+1|0}return h|0}function hd(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c+e|0;d=d&255;if((e|0)>=67){while(c&3){a[c>>0]=d;c=c+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((c|0)<=(g|0)){b[c>>2]=i;b[c+4>>2]=i;b[c+8>>2]=i;b[c+12>>2]=i;b[c+16>>2]=i;b[c+20>>2]=i;b[c+24>>2]=i;b[c+28>>2]=i;b[c+32>>2]=i;b[c+36>>2]=i;b[c+40>>2]=i;b[c+44>>2]=i;b[c+48>>2]=i;b[c+52>>2]=i;b[c+56>>2]=i;b[c+60>>2]=i;c=c+64|0}while((c|0)<(f|0)){b[c>>2]=i;c=c+4|0}}while((c|0)<(h|0)){a[c>>0]=d;c=c+1|0}return h-e|0}function id(a){a=+a;return a>=0.0?+p(a+.5):+A(a-.5)}function jd(a){a=a|0;var c=0,d=0,e=0;e=J()|0;d=b[g>>2]|0;c=d+a|0;if((a|0)>0&(c|0)<(d|0)|(c|0)<0){M(c|0)|0;I(12);return -1}if((c|0)>(e|0))if(!(L(c|0)|0)){I(12);return -1}b[g>>2]=c;return d|0}\n\n// EMSCRIPTEN_END_FUNCS\nreturn{___uremdi3:bd,_bitshift64Lshr:cd,_bitshift64Shl:dd,_calloc:Yc,_cellAreaKm2:ub,_cellAreaM2:vb,_cellAreaRads2:tb,_compact:Hb,_destroyLinkedPolygon:jc,_edgeLengthKm:pb,_edgeLengthM:qb,_emscripten_replace_memory:V,_exactEdgeLengthKm:xb,_exactEdgeLengthM:yb,_exactEdgeLengthRads:wb,_experimentalH3ToLocalIj:oc,_experimentalLocalIjToH3:pc,_free:Xc,_geoToH3:Sb,_getDestinationH3IndexFromUnidirectionalEdge:cc,_getH3IndexesFromUnidirectionalEdge:ec,_getH3UnidirectionalEdge:ac,_getH3UnidirectionalEdgeBoundary:gc,_getH3UnidirectionalEdgesFromHexagon:fc,_getOriginH3IndexFromUnidirectionalEdge:bc,_getPentagonIndexes:_b,_getRes0Indexes:va,_h3Distance:qc,_h3GetBaseCell:Ab,_h3GetFaces:Yb,_h3GetResolution:zb,_h3IndexesAreNeighbors:$b,_h3IsPentagon:Fb,_h3IsResClassIII:Kb,_h3IsValid:Bb,_h3Line:sc,_h3LineSize:rc,_h3SetToLinkedGeo:ka,_h3ToCenterChild:Gb,_h3ToChildren:Eb,_h3ToGeo:Vb,_h3ToGeoBoundary:Wb,_h3ToParent:Cb,_h3UnidirectionalEdgeIsValid:dc,_hexAreaKm2:nb,_hexAreaM2:ob,_hexRing:ea,_i64Subtract:_c,_kRing:$,_kRingDistances:aa,_llvm_minnum_f64:ed,_llvm_round_f64:fd,_malloc:Wc,_maxFaceCount:Xb,_maxH3ToChildrenSize:Db,_maxKringSize:_,_maxPolyfillSize:fa,_maxUncompactSize:Jb,_memcpy:gd,_memset:hd,_numHexagons:rb,_pentagonIndexCount:Zb,_pointDistKm:jb,_pointDistM:kb,_pointDistRads:ib,_polyfill:ga,_res0IndexCount:ua,_round:id,_sbrk:jd,_sizeOfCoordIJ:Ec,_sizeOfGeoBoundary:Ac,_sizeOfGeoCoord:zc,_sizeOfGeoPolygon:Cc,_sizeOfGeofence:Bc,_sizeOfH3Index:yc,_sizeOfLinkedGeoPolygon:Dc,_uncompact:Ib,establishStackSpace:Z,stackAlloc:W,stackRestore:Y,stackSave:X}})\n\n\n// EMSCRIPTEN_END_ASM\n(asmGlobalArg,asmLibraryArg,buffer);var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _calloc=Module[\"_calloc\"]=asm[\"_calloc\"];var _cellAreaKm2=Module[\"_cellAreaKm2\"]=asm[\"_cellAreaKm2\"];var _cellAreaM2=Module[\"_cellAreaM2\"]=asm[\"_cellAreaM2\"];var _cellAreaRads2=Module[\"_cellAreaRads2\"]=asm[\"_cellAreaRads2\"];var _compact=Module[\"_compact\"]=asm[\"_compact\"];var _destroyLinkedPolygon=Module[\"_destroyLinkedPolygon\"]=asm[\"_destroyLinkedPolygon\"];var _edgeLengthKm=Module[\"_edgeLengthKm\"]=asm[\"_edgeLengthKm\"];var _edgeLengthM=Module[\"_edgeLengthM\"]=asm[\"_edgeLengthM\"];var _emscripten_replace_memory=Module[\"_emscripten_replace_memory\"]=asm[\"_emscripten_replace_memory\"];var _exactEdgeLengthKm=Module[\"_exactEdgeLengthKm\"]=asm[\"_exactEdgeLengthKm\"];var _exactEdgeLengthM=Module[\"_exactEdgeLengthM\"]=asm[\"_exactEdgeLengthM\"];var _exactEdgeLengthRads=Module[\"_exactEdgeLengthRads\"]=asm[\"_exactEdgeLengthRads\"];var _experimentalH3ToLocalIj=Module[\"_experimentalH3ToLocalIj\"]=asm[\"_experimentalH3ToLocalIj\"];var _experimentalLocalIjToH3=Module[\"_experimentalLocalIjToH3\"]=asm[\"_experimentalLocalIjToH3\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _geoToH3=Module[\"_geoToH3\"]=asm[\"_geoToH3\"];var _getDestinationH3IndexFromUnidirectionalEdge=Module[\"_getDestinationH3IndexFromUnidirectionalEdge\"]=asm[\"_getDestinationH3IndexFromUnidirectionalEdge\"];var _getH3IndexesFromUnidirectionalEdge=Module[\"_getH3IndexesFromUnidirectionalEdge\"]=asm[\"_getH3IndexesFromUnidirectionalEdge\"];var _getH3UnidirectionalEdge=Module[\"_getH3UnidirectionalEdge\"]=asm[\"_getH3UnidirectionalEdge\"];var _getH3UnidirectionalEdgeBoundary=Module[\"_getH3UnidirectionalEdgeBoundary\"]=asm[\"_getH3UnidirectionalEdgeBoundary\"];var _getH3UnidirectionalEdgesFromHexagon=Module[\"_getH3UnidirectionalEdgesFromHexagon\"]=asm[\"_getH3UnidirectionalEdgesFromHexagon\"];var _getOriginH3IndexFromUnidirectionalEdge=Module[\"_getOriginH3IndexFromUnidirectionalEdge\"]=asm[\"_getOriginH3IndexFromUnidirectionalEdge\"];var _getPentagonIndexes=Module[\"_getPentagonIndexes\"]=asm[\"_getPentagonIndexes\"];var _getRes0Indexes=Module[\"_getRes0Indexes\"]=asm[\"_getRes0Indexes\"];var _h3Distance=Module[\"_h3Distance\"]=asm[\"_h3Distance\"];var _h3GetBaseCell=Module[\"_h3GetBaseCell\"]=asm[\"_h3GetBaseCell\"];var _h3GetFaces=Module[\"_h3GetFaces\"]=asm[\"_h3GetFaces\"];var _h3GetResolution=Module[\"_h3GetResolution\"]=asm[\"_h3GetResolution\"];var _h3IndexesAreNeighbors=Module[\"_h3IndexesAreNeighbors\"]=asm[\"_h3IndexesAreNeighbors\"];var _h3IsPentagon=Module[\"_h3IsPentagon\"]=asm[\"_h3IsPentagon\"];var _h3IsResClassIII=Module[\"_h3IsResClassIII\"]=asm[\"_h3IsResClassIII\"];var _h3IsValid=Module[\"_h3IsValid\"]=asm[\"_h3IsValid\"];var _h3Line=Module[\"_h3Line\"]=asm[\"_h3Line\"];var _h3LineSize=Module[\"_h3LineSize\"]=asm[\"_h3LineSize\"];var _h3SetToLinkedGeo=Module[\"_h3SetToLinkedGeo\"]=asm[\"_h3SetToLinkedGeo\"];var _h3ToCenterChild=Module[\"_h3ToCenterChild\"]=asm[\"_h3ToCenterChild\"];var _h3ToChildren=Module[\"_h3ToChildren\"]=asm[\"_h3ToChildren\"];var _h3ToGeo=Module[\"_h3ToGeo\"]=asm[\"_h3ToGeo\"];var _h3ToGeoBoundary=Module[\"_h3ToGeoBoundary\"]=asm[\"_h3ToGeoBoundary\"];var _h3ToParent=Module[\"_h3ToParent\"]=asm[\"_h3ToParent\"];var _h3UnidirectionalEdgeIsValid=Module[\"_h3UnidirectionalEdgeIsValid\"]=asm[\"_h3UnidirectionalEdgeIsValid\"];var _hexAreaKm2=Module[\"_hexAreaKm2\"]=asm[\"_hexAreaKm2\"];var _hexAreaM2=Module[\"_hexAreaM2\"]=asm[\"_hexAreaM2\"];var _hexRing=Module[\"_hexRing\"]=asm[\"_hexRing\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _kRing=Module[\"_kRing\"]=asm[\"_kRing\"];var _kRingDistances=Module[\"_kRingDistances\"]=asm[\"_kRingDistances\"];var _llvm_minnum_f64=Module[\"_llvm_minnum_f64\"]=asm[\"_llvm_minnum_f64\"];var _llvm_round_f64=Module[\"_llvm_round_f64\"]=asm[\"_llvm_round_f64\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _maxFaceCount=Module[\"_maxFaceCount\"]=asm[\"_maxFaceCount\"];var _maxH3ToChildrenSize=Module[\"_maxH3ToChildrenSize\"]=asm[\"_maxH3ToChildrenSize\"];var _maxKringSize=Module[\"_maxKringSize\"]=asm[\"_maxKringSize\"];var _maxPolyfillSize=Module[\"_maxPolyfillSize\"]=asm[\"_maxPolyfillSize\"];var _maxUncompactSize=Module[\"_maxUncompactSize\"]=asm[\"_maxUncompactSize\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _numHexagons=Module[\"_numHexagons\"]=asm[\"_numHexagons\"];var _pentagonIndexCount=Module[\"_pentagonIndexCount\"]=asm[\"_pentagonIndexCount\"];var _pointDistKm=Module[\"_pointDistKm\"]=asm[\"_pointDistKm\"];var _pointDistM=Module[\"_pointDistM\"]=asm[\"_pointDistM\"];var _pointDistRads=Module[\"_pointDistRads\"]=asm[\"_pointDistRads\"];var _polyfill=Module[\"_polyfill\"]=asm[\"_polyfill\"];var _res0IndexCount=Module[\"_res0IndexCount\"]=asm[\"_res0IndexCount\"];var _round=Module[\"_round\"]=asm[\"_round\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var _sizeOfCoordIJ=Module[\"_sizeOfCoordIJ\"]=asm[\"_sizeOfCoordIJ\"];var _sizeOfGeoBoundary=Module[\"_sizeOfGeoBoundary\"]=asm[\"_sizeOfGeoBoundary\"];var _sizeOfGeoCoord=Module[\"_sizeOfGeoCoord\"]=asm[\"_sizeOfGeoCoord\"];var _sizeOfGeoPolygon=Module[\"_sizeOfGeoPolygon\"]=asm[\"_sizeOfGeoPolygon\"];var _sizeOfGeofence=Module[\"_sizeOfGeofence\"]=asm[\"_sizeOfGeofence\"];var _sizeOfH3Index=Module[\"_sizeOfH3Index\"]=asm[\"_sizeOfH3Index\"];var _sizeOfLinkedGeoPolygon=Module[\"_sizeOfLinkedGeoPolygon\"]=asm[\"_sizeOfLinkedGeoPolygon\"];var _uncompact=Module[\"_uncompact\"]=asm[\"_uncompact\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"setValue\"]=setValue;Module[\"getValue\"]=getValue;Module[\"getTempRet0\"]=getTempRet0;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=readBinary(memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")};var doBrowserLoad=function(){readAsync(memoryInitializer,applyMemoryInitializer,function(){throw\"could not load memory initializer \"+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){var useRequest=function(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}var calledRun;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n\n return libh3\n}\n)(typeof libh3 === 'object' ? libh3 : {});\nexport default libh3;","/*\n * Copyright 2018-2019 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Define the C bindings for the h3 library\n\n// Add some aliases to make the function definitions more intelligible\nconst NUMBER = 'number';\nconst BOOLEAN = NUMBER;\nconst H3_LOWER = NUMBER;\nconst H3_UPPER = NUMBER;\nconst RESOLUTION = NUMBER;\nconst POINTER = NUMBER;\n\n// Define the bindings to functions in the C lib. Functions are defined as\n// [name, return type, [arg types]]. You must run `npm run build-emscripten`\n// before new functions added here will be available.\nexport default [\n // The size functions are inserted via build/sizes.h\n ['sizeOfH3Index', NUMBER],\n ['sizeOfGeoCoord', NUMBER],\n ['sizeOfGeoBoundary', NUMBER],\n ['sizeOfGeoPolygon', NUMBER],\n ['sizeOfGeofence', NUMBER],\n ['sizeOfLinkedGeoPolygon', NUMBER],\n ['sizeOfCoordIJ', NUMBER],\n // The remaining functions are defined in the core lib in h3Api.h\n ['h3IsValid', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['geoToH3', H3_LOWER, [NUMBER, NUMBER, RESOLUTION]],\n ['h3ToGeo', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['h3ToGeoBoundary', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['maxKringSize', NUMBER, [NUMBER]],\n ['kRing', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['kRingDistances', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER, POINTER]],\n ['hexRing', null, [H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['maxPolyfillSize', NUMBER, [POINTER, RESOLUTION]],\n ['polyfill', null, [POINTER, RESOLUTION, POINTER]],\n ['h3SetToLinkedGeo', null, [POINTER, NUMBER, POINTER]],\n ['destroyLinkedPolygon', null, [POINTER]],\n ['compact', NUMBER, [POINTER, POINTER, NUMBER]],\n ['uncompact', NUMBER, [POINTER, NUMBER, POINTER, NUMBER, RESOLUTION]],\n ['maxUncompactSize', NUMBER, [POINTER, NUMBER, RESOLUTION]],\n ['h3IsPentagon', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['h3IsResClassIII', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['h3GetBaseCell', NUMBER, [H3_LOWER, H3_UPPER]],\n ['h3GetResolution', NUMBER, [H3_LOWER, H3_UPPER]],\n ['maxFaceCount', NUMBER, [H3_LOWER, H3_UPPER]],\n ['h3GetFaces', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['h3ToParent', H3_LOWER, [H3_LOWER, H3_UPPER, RESOLUTION]],\n ['h3ToChildren', null, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['h3ToCenterChild', H3_LOWER, [H3_LOWER, H3_UPPER, RESOLUTION]],\n ['maxH3ToChildrenSize', NUMBER, [H3_LOWER, H3_UPPER, RESOLUTION]],\n ['h3IndexesAreNeighbors', BOOLEAN, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]],\n ['getH3UnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]],\n ['getOriginH3IndexFromUnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER]],\n ['getDestinationH3IndexFromUnidirectionalEdge', H3_LOWER, [H3_LOWER, H3_UPPER]],\n ['h3UnidirectionalEdgeIsValid', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['getH3IndexesFromUnidirectionalEdge', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['getH3UnidirectionalEdgesFromHexagon', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['getH3UnidirectionalEdgeBoundary', null, [H3_LOWER, H3_UPPER, POINTER]],\n ['h3Distance', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]],\n ['h3Line', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['h3LineSize', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER]],\n ['experimentalH3ToLocalIj', NUMBER, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['experimentalLocalIjToH3', NUMBER, [H3_LOWER, H3_UPPER, POINTER, POINTER]],\n ['hexAreaM2', NUMBER, [RESOLUTION]],\n ['hexAreaKm2', NUMBER, [RESOLUTION]],\n ['edgeLengthM', NUMBER, [RESOLUTION]],\n ['edgeLengthKm', NUMBER, [RESOLUTION]],\n ['pointDistM', NUMBER, [POINTER, POINTER]],\n ['pointDistKm', NUMBER, [POINTER, POINTER]],\n ['pointDistRads', NUMBER, [POINTER, POINTER]],\n ['cellAreaM2', NUMBER, [H3_LOWER, H3_UPPER]],\n ['cellAreaKm2', NUMBER, [H3_LOWER, H3_UPPER]],\n ['cellAreaRads2', NUMBER, [H3_LOWER, H3_UPPER]],\n ['exactEdgeLengthM', NUMBER, [H3_LOWER, H3_UPPER]],\n ['exactEdgeLengthKm', NUMBER, [H3_LOWER, H3_UPPER]],\n ['exactEdgeLengthRads', NUMBER, [H3_LOWER, H3_UPPER]],\n ['numHexagons', NUMBER, [RESOLUTION]],\n ['getRes0Indexes', null, [POINTER]],\n ['res0IndexCount', NUMBER],\n ['getPentagonIndexes', null, [NUMBER, POINTER]],\n ['pentagonIndexCount', NUMBER]\n];\n","/*\n * Copyright 2018-2019 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module h3\n */\n\nimport C from '../out/libh3';\nimport BINDINGS from './bindings';\n\nconst H3 = {};\n\n// Create the bound functions themselves\nBINDINGS.forEach(function bind(def) {\n H3[def[0]] = C.cwrap(...def);\n});\n\n// Alias the hexidecimal base for legibility\nconst BASE_16 = 16;\n\n// ----------------------------------------------------------------------------\n// Byte size imports\n\nconst SZ_INT = 4;\nconst SZ_PTR = 4;\nconst SZ_DBL = 8;\nconst SZ_H3INDEX = H3.sizeOfH3Index();\nconst SZ_GEOCOORD = H3.sizeOfGeoCoord();\nconst SZ_GEOBOUNDARY = H3.sizeOfGeoBoundary();\nconst SZ_GEOPOLYGON = H3.sizeOfGeoPolygon();\nconst SZ_GEOFENCE = H3.sizeOfGeofence();\nconst SZ_LINKED_GEOPOLYGON = H3.sizeOfLinkedGeoPolygon();\nconst SZ_COORDIJ = H3.sizeOfCoordIJ();\n\n// ----------------------------------------------------------------------------\n// Custom types\n\n/**\n * 64-bit hexidecimal string representation of an H3 index\n * @static\n * @typedef {string} H3Index\n */\n\n/**\n * 64-bit hexidecimal string representation of an H3 index,\n * or two 32-bit integers in little endian order in an array.\n * @static\n * @typedef {string | number[]} H3IndexInput\n */\n\n/**\n * Coordinates as an `{i, j}` pair\n * @static\n * @typedef CoordIJ\n * @type {Object}\n * @property {number} i\n * @property {number} j\n */\n\n// ----------------------------------------------------------------------------\n// Unit constants\n\n/**\n * Length/Area units\n * @static\n * @typedef UNITS\n * @type {Object}\n * @property {string} m\n * @property {string} m2\n * @property {string} km\n * @property {string} km2\n * @property {string} rads\n * @property {string} rads2\n */\nexport const UNITS = {\n m: 'm',\n m2: 'm2',\n km: 'km',\n km2: 'km2',\n rads: 'rads',\n rads2: 'rads2'\n};\n\n// ----------------------------------------------------------------------------\n// Utilities and helpers\n\n/**\n * Validate a resolution, throwing an error if invalid\n * @private\n * @param {mixed} res Value to validate\n * @throws {Error} Error if invalid\n */\nfunction validateRes(res) {\n if (typeof res !== 'number' || res < 0 || res > 15 || Math.floor(res) !== res) {\n throw new Error(`Invalid resolution: ${res}`);\n }\n}\n\nconst INVALID_HEXIDECIMAL_CHAR = /[^0-9a-fA-F]/;\n\n/**\n * Convert an H3 index (64-bit hexidecimal string) into a \"split long\" - a pair of 32-bit ints\n * @private\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {number[]} A two-element array with 32 lower bits and 32 upper bits\n */\nexport function h3IndexToSplitLong(h3Index) {\n if (\n Array.isArray(h3Index) &&\n h3Index.length === 2 &&\n Number.isInteger(h3Index[0]) &&\n Number.isInteger(h3Index[1])\n ) {\n return h3Index;\n }\n if (typeof h3Index !== 'string' || INVALID_HEXIDECIMAL_CHAR.test(h3Index)) {\n return [0, 0];\n }\n const upper = parseInt(h3Index.substring(0, h3Index.length - 8), BASE_16);\n const lower = parseInt(h3Index.substring(h3Index.length - 8), BASE_16);\n return [lower, upper];\n}\n\n/**\n * Convert a 32-bit int to a hexdecimal string\n * @private\n * @param {number} num Integer to convert\n * @return {H3Index} Hexidecimal string\n */\nfunction hexFrom32Bit(num) {\n if (num >= 0) {\n return num.toString(BASE_16);\n }\n\n // Handle negative numbers\n num = num & 0x7fffffff;\n let tempStr = zeroPad(8, num.toString(BASE_16));\n const topNum = (parseInt(tempStr[0], BASE_16) + 8).toString(BASE_16);\n tempStr = topNum + tempStr.substring(1);\n return tempStr;\n}\n\n/**\n * Get a H3 index from a split long (pair of 32-bit ints)\n * @private\n * @param {number} lower Lower 32 bits\n * @param {number} upper Upper 32 bits\n * @return {H3Index} H3 index\n */\nexport function splitLongToh3Index(lower, upper) {\n return hexFrom32Bit(upper) + zeroPad(8, hexFrom32Bit(lower));\n}\n\n/**\n * Zero-pad a string to a given length\n * @private\n * @param {number} fullLen Target length\n * @param {string} numStr String to zero-pad\n * @return {string} Zero-padded string\n */\nfunction zeroPad(fullLen, numStr) {\n const numZeroes = fullLen - numStr.length;\n let outStr = '';\n for (let i = 0; i < numZeroes; i++) {\n outStr += '0';\n }\n outStr = outStr + numStr;\n return outStr;\n}\n\n/**\n * Populate a C-appropriate Geofence struct from a polygon array\n * @private\n * @param {Array[]} polygonArray Polygon, as an array of coordinate pairs\n * @param {number} geofence C pointer to a Geofence struct\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated Geofence struct\n */\nfunction polygonArrayToGeofence(polygonArray, geofence, isGeoJson) {\n const numVerts = polygonArray.length;\n const geoCoordArray = C._calloc(numVerts, SZ_GEOCOORD);\n // Support [lng, lat] pairs if GeoJSON is specified\n const latIndex = isGeoJson ? 1 : 0;\n const lngIndex = isGeoJson ? 0 : 1;\n for (let i = 0; i < numVerts * 2; i += 2) {\n C.HEAPF64.set(\n [polygonArray[i / 2][latIndex], polygonArray[i / 2][lngIndex]].map(degsToRads),\n geoCoordArray / SZ_DBL + i\n );\n }\n C.HEAPU32.set([numVerts, geoCoordArray], geofence / SZ_INT);\n return geofence;\n}\n\n/**\n * Create a C-appropriate GeoPolygon struct from an array of polygons\n * @private\n * @param {Array[]} coordinates Array of polygons, each an array of coordinate pairs\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated GeoPolygon struct\n */\nfunction coordinatesToGeoPolygon(coordinates, isGeoJson) {\n // Any loops beyond the first loop are holes\n const numHoles = coordinates.length - 1;\n const geoPolygon = C._calloc(SZ_GEOPOLYGON);\n // Byte positions within the struct\n const geofenceOffset = 0;\n const numHolesOffset = geofenceOffset + SZ_GEOFENCE;\n const holesOffset = numHolesOffset + SZ_INT;\n // geofence is first part of struct\n polygonArrayToGeofence(coordinates[0], geoPolygon + geofenceOffset, isGeoJson);\n let holes;\n if (numHoles > 0) {\n holes = C._calloc(numHoles, SZ_GEOFENCE);\n for (let i = 0; i < numHoles; i++) {\n polygonArrayToGeofence(coordinates[i + 1], holes + SZ_GEOFENCE * i, isGeoJson);\n }\n }\n C.setValue(geoPolygon + numHolesOffset, numHoles, 'i32');\n C.setValue(geoPolygon + holesOffset, holes, 'i32');\n return geoPolygon;\n}\n\n/**\n * Free memory allocated for a GeoPolygon struct. It is an error to access the struct\n * after passing it to this method.\n * @private\n * @return {number} geoPolygon C pointer to populated GeoPolygon struct\n */\nfunction destroyGeoPolygon(geoPolygon) {\n // Byte positions within the struct\n const geofenceOffset = 0;\n const numHolesOffset = geofenceOffset + SZ_GEOFENCE;\n const holesOffset = numHolesOffset + SZ_INT;\n // Offset of the geofence vertex array pointer within the Geofence struct\n const geofenceArrayOffset = SZ_INT;\n // Free the outer vertex array\n C._free(C.getValue(geoPolygon + geofenceOffset + geofenceArrayOffset, 'i8*'));\n // Free the vertex array for the holes, if any\n const numHoles = C.getValue(geoPolygon + numHolesOffset, 'i32');\n if (numHoles > 0) {\n const holes = C.getValue(geoPolygon + holesOffset, 'i32');\n for (let i = 0; i < numHoles; i++) {\n C._free(C.getValue(holes + SZ_GEOFENCE * i + geofenceArrayOffset, 'i8*'));\n }\n C._free(holes);\n }\n C._free(geoPolygon);\n}\n\n/**\n * Read a long value, returning the lower and upper portions as separate 32-bit integers.\n * Because the upper bits are returned via side effect, the argument to this function is\n * intended to be the invocation that caused the side effect, e.g. readLong(H3.getSomeLong())\n * @private\n * @param {number} invocation Invoked function returning a long value. The actual return\n * value of these functions is a 32-bit integer.\n * @return {number} Long value as a [lower, upper] pair\n */\nfunction readLong(invocation) {\n // Upper 32-bits of the long set via side-effect\n const upper = C.getTempRet0();\n return [invocation, upper];\n}\n\n/**\n * Read an H3 index from a C return value. As with readLong, the argument to this function\n * is intended to be an invocation, e.g. readH3Index(H3.getSomeAddress()), to help ensure that\n * the temp value storing the upper bits of the long is still set.\n * @private\n * @param {number} invocation Invoked function returning a single H3 index\n * @return {H3Index} H3 index, or null if index was invalid\n */\nfunction readH3Index(invocation) {\n const [lower, upper] = readLong(invocation);\n // The lower bits are allowed to be 0s, but if the upper bits are 0\n // this represents an invalid H3 index\n return upper ? splitLongToh3Index(lower, upper) : null;\n}\n\n/**\n * Read an H3 index from a pointer to C memory.\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes, in case we're\n * reading an array\n * @return {H3Index} H3 index, or null if index was invalid\n */\nfunction readH3IndexFromPointer(cAddress, offset = 0) {\n const lower = C.getValue(cAddress + SZ_INT * offset * 2, 'i32');\n const upper = C.getValue(cAddress + SZ_INT * (offset * 2 + 1), 'i32');\n // The lower bits are allowed to be 0s, but if the upper bits are 0\n // this represents an invalid H3 index\n return upper ? splitLongToh3Index(lower, upper) : null;\n}\n\n/**\n * Store an H3 index in C memory. Primarily used as an efficient way to\n * write sets of hexagons.\n * @private\n * @param {H3IndexInput} h3Index H3 index to store\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes from beginning\n * of the current array\n */\nfunction storeH3Index(h3Index, cAddress, offset) {\n // HEAPU32 is a typed array projection on the index space\n // as unsigned 32-bit integers. This means the index needs\n // to be divided by SZ_INT (4) to access correctly. Also,\n // the H3 index is 64 bits, so we skip by twos as we're writing\n // to 32-bit integers in the proper order.\n C.HEAPU32.set(h3IndexToSplitLong(h3Index), cAddress / SZ_INT + 2 * offset);\n}\n\n/**\n * Read an array of 64-bit H3 indexes from C and convert to a JS array of\n * H3 index strings\n * @private\n * @param {number} cAddress Pointer to C ouput array\n * @param {number} maxCount Max number of hexagons in array. Hexagons with\n * the value 0 will be skipped, so this isn't\n * necessarily the length of the output array.\n * @return {H3Index[]} Array of H3 indexes\n */\nfunction readArrayOfHexagons(cAddress, maxCount) {\n const out = [];\n for (let i = 0; i < maxCount; i++) {\n const h3Index = readH3IndexFromPointer(cAddress, i);\n if (h3Index !== null) {\n out.push(h3Index);\n }\n }\n return out;\n}\n\n/**\n * Store an array of H3 index strings as a C array of 64-bit integers.\n * @private\n * @param {number} cAddress Pointer to C input array\n * @param {H3IndexInput[]} hexagons H3 indexes to pass to the C lib\n */\nfunction storeArrayOfHexagons(cAddress, hexagons) {\n // Assuming the cAddress points to an already appropriately\n // allocated space\n const count = hexagons.length;\n for (let i = 0; i < count; i++) {\n storeH3Index(hexagons[i], cAddress, i);\n }\n}\n\n/**\n * Populate a C-appropriate GeoCoord struct from a [lat, lng] array\n * @private\n * @param {number} lat Coordinate latitude\n * @param {number} lng Coordinate longitude\n * @return {number} C pointer to populated GeoCoord struct\n */\nfunction storeGeoCoord(lat, lng) {\n const geoCoord = C._calloc(1, SZ_GEOCOORD);\n C.HEAPF64.set([lat, lng].map(degsToRads), geoCoord / SZ_DBL);\n return geoCoord;\n}\n\nfunction readSingleCoord(cAddress) {\n return radsToDegs(C.getValue(cAddress, 'double'));\n}\n\n/**\n * Read a GeoCoord from C and return a [lat, lng] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {number[]} [lat, lng] pair\n */\nfunction readGeoCoord(cAddress) {\n return [readSingleCoord(cAddress), readSingleCoord(cAddress + SZ_DBL)];\n}\n\n/**\n * Read a GeoCoord from C and return a GeoJSON-style [lng, lat] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {number[]} [lng, lat] pair\n */\nfunction readGeoCoordGeoJson(cAddress) {\n return [readSingleCoord(cAddress + SZ_DBL), readSingleCoord(cAddress)];\n}\n\n/**\n * Read the GeoBoundary structure into a list of geo coordinate pairs\n * @private\n * @param {number} geoBoundary C pointer to GeoBoundary struct\n * @param {boolean} geoJsonCoords Whether to provide GeoJSON coordinate order: [lng, lat]\n * @param {boolean} closedLoop Whether to close the loop\n * @return {Array[]} Array of geo coordinate pairs\n */\nfunction readGeoBoundary(geoBoundary, geoJsonCoords, closedLoop) {\n const numVerts = C.getValue(geoBoundary, 'i32');\n // Note that though numVerts is an int, the coordinate doubles have to be\n // aligned to 8 bytes, hence the 8-byte offset here\n const vertsPos = geoBoundary + SZ_DBL;\n const out = [];\n // Support [lng, lat] pairs if GeoJSON is specified\n const readCoord = geoJsonCoords ? readGeoCoordGeoJson : readGeoCoord;\n for (let i = 0; i < numVerts * 2; i += 2) {\n out.push(readCoord(vertsPos + SZ_DBL * i));\n }\n if (closedLoop) {\n // Close loop if GeoJSON is specified\n out.push(out[0]);\n }\n return out;\n}\n\n/**\n * Read the LinkedGeoPolygon structure into a nested array of MultiPolygon coordinates\n * @private\n * @param {number} polygon C pointer to LinkedGeoPolygon struct\n * @param {boolean} formatAsGeoJson Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {number[][][][]} MultiPolygon-style output.\n */\nfunction readMultiPolygon(polygon, formatAsGeoJson) {\n const output = [];\n const readCoord = formatAsGeoJson ? readGeoCoordGeoJson : readGeoCoord;\n let loops;\n let loop;\n let coords;\n let coord;\n // Loop through the linked structure, building the output\n while (polygon) {\n output.push((loops = []));\n // Follow ->first pointer\n loop = C.getValue(polygon, 'i8*');\n while (loop) {\n loops.push((coords = []));\n // Follow ->first pointer\n coord = C.getValue(loop, 'i8*');\n while (coord) {\n coords.push(readCoord(coord));\n // Follow ->next pointer\n coord = C.getValue(coord + SZ_DBL * 2, 'i8*');\n }\n if (formatAsGeoJson) {\n // Close loop if GeoJSON is requested\n coords.push(coords[0]);\n }\n // Follow ->next pointer\n loop = C.getValue(loop + SZ_PTR * 2, 'i8*');\n }\n // Follow ->next pointer\n polygon = C.getValue(polygon + SZ_PTR * 2, 'i8*');\n }\n return output;\n}\n\n/**\n * Read a CoordIJ from C and return an {i, j} pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordIJ} {i, j} pair\n */\nfunction readCoordIJ(cAddress) {\n return {\n i: C.getValue(cAddress, 'i32'),\n j: C.getValue(cAddress + SZ_INT, 'i32')\n };\n}\n\n/**\n * Store an {i, j} pair to a C CoordIJ struct.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordIJ} {i, j} pair\n */\nfunction storeCoordIJ(cAddress, {i, j}) {\n C.setValue(cAddress, i, 'i32');\n C.setValue(cAddress + SZ_INT, j, 'i32');\n}\n\n/**\n * Read an array of positive integers array from C. Negative\n * values are considered invalid and ignored in output.\n * @private\n * @param {number} cAddress Pointer to C array\n * @param {number} count Length of C array\n * @return {number[]} Javascript integer array\n */\nfunction readArrayOfPositiveIntegers(cAddress, count) {\n const out = [];\n for (let i = 0; i < count; i++) {\n const int = C.getValue(cAddress + SZ_INT * i, 'i32');\n if (int >= 0) {\n out.push(int);\n }\n }\n return out;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Core\n\n/**\n * Whether a given string represents a valid H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} Whether the index is valid\n */\nexport function h3IsValid(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.h3IsValid(lower, upper));\n}\n\n/**\n * Whether the given H3 index is a pentagon\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isPentagon\n */\nexport function h3IsPentagon(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.h3IsPentagon(lower, upper));\n}\n\n/**\n * Whether the given H3 index is in a Class III resolution (rotated versus\n * the icosahedron and subject to shape distortion adding extra points on\n * icosahedron edges, making them not true hexagons).\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isResClassIII\n */\nexport function h3IsResClassIII(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.h3IsResClassIII(lower, upper));\n}\n\n/**\n * Get the number of the base cell for a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get the base cell for\n * @return {number} Index of the base cell (0-121)\n */\nexport function h3GetBaseCell(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return H3.h3GetBaseCell(lower, upper);\n}\n\n/**\n * Get the indices of all icosahedron faces intersected by a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get faces for\n * @return {number[]} Indices (0-19) of all intersected faces\n */\nexport function h3GetFaces(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const count = H3.maxFaceCount(lower, upper);\n const faces = C._malloc(SZ_INT * count);\n H3.h3GetFaces(lower, upper, faces);\n const out = readArrayOfPositiveIntegers(faces, count);\n C._free(faces);\n return out;\n}\n\n/**\n * Returns the resolution of an H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get resolution\n * @return {number} The number (0-15) resolution, or -1 if invalid\n */\nexport function h3GetResolution(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n if (!H3.h3IsValid(lower, upper)) {\n // Compatability with stated API\n return -1;\n }\n return H3.h3GetResolution(lower, upper);\n}\n\n/**\n * Get the hexagon containing a lat,lon point\n * @static\n * @param {number} lat Latitude of point\n * @param {number} lng Longtitude of point\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index} H3 index\n */\nexport function geoToH3(lat, lng, res) {\n const latlng = C._malloc(SZ_GEOCOORD);\n // Slightly more efficient way to set the memory\n C.HEAPF64.set([lat, lng].map(degsToRads), latlng / SZ_DBL);\n // Read value as a split long\n const h3Index = readH3Index(H3.geoToH3(latlng, res));\n C._free(latlng);\n return h3Index;\n}\n\n/**\n * Get the lat,lon center of a given hexagon\n * @static\n * @param {H3IndexInput} h3Index H3 index\n * @return {number[]} Point as a [lat, lng] pair\n */\nexport function h3ToGeo(h3Index) {\n const latlng = C._malloc(SZ_GEOCOORD);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n H3.h3ToGeo(lower, upper, latlng);\n const out = readGeoCoord(latlng);\n C._free(latlng);\n return out;\n}\n\n/**\n * Get the vertices of a given hexagon (or pentagon), as an array of [lat, lng]\n * points. For pentagons and hexagons on the edge of an icosahedron face, this\n * function may return up to 10 vertices.\n * @static\n * @param {H3Index} h3Index H3 index\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {number[][]} Array of [lat, lng] pairs\n */\nexport function h3ToGeoBoundary(h3Index, formatAsGeoJson) {\n const geoBoundary = C._malloc(SZ_GEOBOUNDARY);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n H3.h3ToGeoBoundary(lower, upper, geoBoundary);\n const out = readGeoBoundary(geoBoundary, formatAsGeoJson, formatAsGeoJson);\n C._free(geoBoundary);\n return out;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Algorithms\n\n/**\n * Get the parent of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get parent for\n * @param {number} res Resolution of hexagon to return\n * @return {H3Index} H3 index of parent, or null for invalid input\n */\nexport function h3ToParent(h3Index, res) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return readH3Index(H3.h3ToParent(lower, upper, res));\n}\n\n/**\n * Get the children/descendents of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get children for\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index[]} H3 indexes of children, or empty array for invalid input\n */\nexport function h3ToChildren(h3Index, res) {\n // Bad input in this case can potentially result in high computation volume\n // using the current C algorithm. Validate and return an empty array on failure.\n if (!h3IsValid(h3Index)) {\n return [];\n }\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const maxCount = H3.maxH3ToChildrenSize(lower, upper, res);\n const hexagons = C._calloc(maxCount, SZ_H3INDEX);\n H3.h3ToChildren(lower, upper, res, hexagons);\n const out = readArrayOfHexagons(hexagons, maxCount);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Get the center child of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get center child for\n * @param {number} res Resolution of hexagon to return\n * @return {H3Index} H3 index of child, or null for invalid input\n */\nexport function h3ToCenterChild(h3Index, res) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return readH3Index(H3.h3ToCenterChild(lower, upper, res));\n}\n\n/**\n * Get all hexagons in a k-ring around a given center. The order of the hexagons is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n */\nexport function kRing(h3Index, ringSize) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const maxCount = H3.maxKringSize(ringSize);\n const hexagons = C._calloc(maxCount, SZ_H3INDEX);\n H3.kRing(lower, upper, ringSize, hexagons);\n const out = readArrayOfHexagons(hexagons, maxCount);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Get all hexagons in a k-ring around a given center, in an array of arrays\n * ordered by distance from the origin. The order of the hexagons within each ring is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[][]} Array of arrays with H3 indexes for all hexagons each ring\n */\nexport function kRingDistances(h3Index, ringSize) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const maxCount = H3.maxKringSize(ringSize);\n const kRings = C._calloc(maxCount, SZ_H3INDEX);\n const distances = C._calloc(maxCount, SZ_INT);\n H3.kRingDistances(lower, upper, ringSize, kRings, distances);\n // Create an array of empty arrays to hold the output\n const out = [];\n for (let i = 0; i < ringSize + 1; i++) {\n out.push([]);\n }\n // Read the array of hexagons, putting them into the appropriate rings\n for (let i = 0; i < maxCount * 2; i += 2) {\n const hexLower = C.getValue(kRings + SZ_INT * i, 'i32');\n const hexUpper = C.getValue(kRings + SZ_INT * (i + 1), 'i32');\n const index = C.getValue(distances + SZ_INT * (i / 2), 'i32');\n if (hexLower !== 0 || hexUpper !== 0) {\n out[index].push(splitLongToh3Index(hexLower, hexUpper));\n }\n }\n C._free(kRings);\n C._free(distances);\n return out;\n}\n\n/**\n * Get all hexagons in a hollow hexagonal ring centered at origin with sides of a given length.\n * Unlike kRing, this function will throw an error if there is a pentagon anywhere in the ring.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n * @throws {Error} If the algorithm could not calculate the ring\n */\nexport function hexRing(h3Index, ringSize) {\n const maxCount = ringSize === 0 ? 1 : 6 * ringSize;\n const hexagons = C._calloc(maxCount, SZ_H3INDEX);\n const retVal = H3.hexRing(...h3IndexToSplitLong(h3Index), ringSize, hexagons);\n if (retVal !== 0) {\n C._free(hexagons);\n throw new Error('Failed to get hexRing (encountered a pentagon?)');\n }\n const out = readArrayOfHexagons(hexagons, maxCount);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Get all hexagons with centers contained in a given polygon. The polygon\n * is specified with GeoJson semantics as an array of loops. Each loop is\n * an array of [lat, lng] pairs (or [lng, lat] if isGeoJson is specified).\n * The first loop is the perimeter of the polygon, and subsequent loops are\n * expected to be holes.\n * @static\n * @param {number[][] | number[][][]} coordinates\n * Array of loops, or a single loop\n * @param {number} res Resolution of hexagons to return\n * @param {boolean} [isGeoJson] Whether to expect GeoJson-style [lng, lat]\n * pairs instead of [lat, lng]\n * @return {H3Index[]} H3 indexes for all hexagons in polygon\n */\nexport function polyfill(coordinates, res, isGeoJson) {\n validateRes(res);\n isGeoJson = Boolean(isGeoJson);\n // Guard against empty input\n if (coordinates.length === 0 || coordinates[0].length === 0) {\n return [];\n }\n // Wrap to expected format if a single loop is provided\n if (typeof coordinates[0][0] === 'number') {\n coordinates = [coordinates];\n }\n const geoPolygon = coordinatesToGeoPolygon(coordinates, isGeoJson);\n const arrayLen = H3.maxPolyfillSize(geoPolygon, res);\n const hexagons = C._calloc(arrayLen, SZ_H3INDEX);\n H3.polyfill(geoPolygon, res, hexagons);\n const out = readArrayOfHexagons(hexagons, arrayLen);\n C._free(hexagons);\n destroyGeoPolygon(geoPolygon);\n return out;\n}\n\n/**\n * Get the outlines of a set of H3 hexagons, returned in GeoJSON MultiPolygon\n * format (an array of polygons, each with an array of loops, each an array of\n * coordinates). Coordinates are returned as [lat, lng] pairs unless GeoJSON\n * is requested.\n *\n * It is the responsibility of the caller to ensure that all hexagons in the\n * set have the same resolution and that the set contains no duplicates. Behavior\n * is undefined if duplicates or multiple resolutions are present, and the\n * algorithm may produce unexpected or invalid polygons.\n *\n * @static\n * @param {H3IndexInput[]} h3Indexes H3 indexes to get outlines for\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output:\n * [lng, lat], closed loops\n * @return {number[][][][]} MultiPolygon-style output.\n */\nexport function h3SetToMultiPolygon(h3Indexes, formatAsGeoJson) {\n // Early exit on empty input\n if (!h3Indexes || !h3Indexes.length) {\n return [];\n }\n // Set up input set\n const indexCount = h3Indexes.length;\n const set = C._calloc(indexCount, SZ_H3INDEX);\n storeArrayOfHexagons(set, h3Indexes);\n // Allocate memory for output linked polygon\n const polygon = C._calloc(SZ_LINKED_GEOPOLYGON);\n // Store a reference to the first polygon - that's the one we need for\n // memory deallocation\n const originalPolygon = polygon;\n H3.h3SetToLinkedGeo(set, indexCount, polygon);\n const multiPolygon = readMultiPolygon(polygon, formatAsGeoJson);\n // Clean up\n H3.destroyLinkedPolygon(originalPolygon);\n C._free(originalPolygon);\n C._free(set);\n return multiPolygon;\n}\n\n/**\n * Compact a set of hexagons of the same resolution into a set of hexagons across\n * multiple levels that represents the same area.\n * @static\n * @param {H3IndexInput[]} h3Set H3 indexes to compact\n * @return {H3Index[]} Compacted H3 indexes\n * @throws {Error} If the input is invalid (e.g. duplicate hexagons)\n */\nexport function compact(h3Set) {\n if (!h3Set || !h3Set.length) {\n return [];\n }\n // Set up input set\n const count = h3Set.length;\n const set = C._calloc(count, SZ_H3INDEX);\n storeArrayOfHexagons(set, h3Set);\n // Allocate memory for compacted hexagons, worst-case is no compaction\n const compactedSet = C._calloc(count, SZ_H3INDEX);\n const retVal = H3.compact(set, compactedSet, count);\n if (retVal !== 0) {\n C._free(set);\n C._free(compactedSet);\n throw new Error('Failed to compact, malformed input data (duplicate hexagons?)');\n }\n const out = readArrayOfHexagons(compactedSet, count);\n C._free(set);\n C._free(compactedSet);\n return out;\n}\n\n/**\n * Uncompact a compacted set of hexagons to hexagons of the same resolution\n * @static\n * @param {H3IndexInput[]} compactedSet H3 indexes to uncompact\n * @param {number} res The resolution to uncompact to\n * @return {H3Index[]} The uncompacted H3 indexes\n * @throws {Error} If the input is invalid (e.g. invalid resolution)\n */\nexport function uncompact(compactedSet, res) {\n validateRes(res);\n if (!compactedSet || !compactedSet.length) {\n return [];\n }\n // Set up input set\n const count = compactedSet.length;\n const set = C._calloc(count, SZ_H3INDEX);\n storeArrayOfHexagons(set, compactedSet);\n // Estimate how many hexagons we need (always overestimates if in error)\n const maxUncompactedNum = H3.maxUncompactSize(set, count, res);\n // Allocate memory for uncompacted hexagons\n const uncompactedSet = C._calloc(maxUncompactedNum, SZ_H3INDEX);\n const retVal = H3.uncompact(set, count, uncompactedSet, maxUncompactedNum, res);\n if (retVal !== 0) {\n C._free(set);\n C._free(uncompactedSet);\n throw new Error('Failed to uncompact (bad resolution?)');\n }\n const out = readArrayOfHexagons(uncompactedSet, maxUncompactedNum);\n C._free(set);\n C._free(uncompactedSet);\n return out;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Unidirectional edges\n\n/**\n * Whether two H3 indexes are neighbors (share an edge)\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {boolean} Whether the hexagons share an edge\n */\nexport function h3IndexesAreNeighbors(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n return Boolean(H3.h3IndexesAreNeighbors(oLower, oUpper, dLower, dUpper));\n}\n\n/**\n * Get an H3 index representing a unidirectional edge for a given origin and destination\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index} H3 index of the edge, or null if no edge is shared\n */\nexport function getH3UnidirectionalEdge(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n return readH3Index(H3.getH3UnidirectionalEdge(oLower, oUpper, dLower, dUpper));\n}\n\n/**\n * Get the origin hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge origin\n */\nexport function getOriginH3IndexFromUnidirectionalEdge(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n return readH3Index(H3.getOriginH3IndexFromUnidirectionalEdge(lower, upper));\n}\n\n/**\n * Get the destination hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge destination\n */\nexport function getDestinationH3IndexFromUnidirectionalEdge(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n return readH3Index(H3.getDestinationH3IndexFromUnidirectionalEdge(lower, upper));\n}\n\n/**\n * Whether the input is a valid unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {boolean} Whether the index is valid\n */\nexport function h3UnidirectionalEdgeIsValid(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n return Boolean(H3.h3UnidirectionalEdgeIsValid(lower, upper));\n}\n\n/**\n * Get the [origin, destination] pair represented by a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index[]} [origin, destination] pair as H3 indexes\n */\nexport function getH3IndexesFromUnidirectionalEdge(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n const count = 2;\n const hexagons = C._calloc(count, SZ_H3INDEX);\n H3.getH3IndexesFromUnidirectionalEdge(lower, upper, hexagons);\n const out = readArrayOfHexagons(hexagons, count);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Get all of the unidirectional edges with the given H3 index as the origin (i.e. an edge to\n * every neighbor)\n * @static\n * @param {H3IndexInput} h3Index H3 index of the origin hexagon\n * @return {H3Index[]} List of unidirectional edges\n */\nexport function getH3UnidirectionalEdgesFromHexagon(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const count = 6;\n const edges = C._calloc(count, SZ_H3INDEX);\n H3.getH3UnidirectionalEdgesFromHexagon(lower, upper, edges);\n const out = readArrayOfHexagons(edges, count);\n C._free(edges);\n return out;\n}\n\n/**\n * Get the vertices of a given edge as an array of [lat, lng] points. Note that for edges that\n * cross the edge of an icosahedron face, this may return 3 coordinates.\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat]\n * @return {number[][]} Array of geo coordinate pairs\n */\nexport function getH3UnidirectionalEdgeBoundary(edgeIndex, formatAsGeoJson) {\n const geoBoundary = C._malloc(SZ_GEOBOUNDARY);\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n H3.getH3UnidirectionalEdgeBoundary(lower, upper, geoBoundary);\n const out = readGeoBoundary(geoBoundary, formatAsGeoJson);\n C._free(geoBoundary);\n return out;\n}\n\n/**\n * Get the grid distance between two hex indexes. This function may fail\n * to find the distance between two indexes if they are very far apart or\n * on opposite sides of a pentagon.\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {number} Distance between hexagons, or a negative\n * number if the distance could not be computed\n */\nexport function h3Distance(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n return H3.h3Distance(oLower, oUpper, dLower, dUpper);\n}\n\n/**\n * Given two H3 indexes, return the line of indexes between them (inclusive).\n *\n * This function may fail to find the line between two indexes, for\n * example if they are very far apart. It may also fail when finding\n * distances for indexes on opposite sides of a pentagon.\n *\n * Notes:\n *\n * - The specific output of this function should not be considered stable\n * across library versions. The only guarantees the library provides are\n * that the line length will be `h3Distance(start, end) + 1` and that\n * every index in the line will be a neighbor of the preceding index.\n * - Lines are drawn in grid space, and may not correspond exactly to either\n * Cartesian lines or great arcs.\n *\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index[]} H3 indexes connecting origin and destination\n * @throws {Error} If the line cannot be calculated\n */\nexport function h3Line(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n const count = H3.h3LineSize(oLower, oUpper, dLower, dUpper);\n if (count < 0) {\n // We can't get the specific error code here - may be any of\n // the errors possible in experimentalH3ToLocalIj\n throw new Error('Line cannot be calculated');\n }\n const hexagons = C._calloc(count, SZ_H3INDEX);\n H3.h3Line(oLower, oUpper, dLower, dUpper, hexagons);\n const out = readArrayOfHexagons(hexagons, count);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Produces IJ coordinates for an H3 index anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {H3IndexInput} destination H3 index for which to find relative coordinates\n * @return {CoordIJ} Coordinates as an `{i, j}` pair\n * @throws {Error} If the IJ coordinates cannot be calculated\n */\nexport function experimentalH3ToLocalIj(origin, destination) {\n const ij = C._malloc(SZ_COORDIJ);\n const retVal = H3.experimentalH3ToLocalIj(\n ...h3IndexToSplitLong(origin),\n ...h3IndexToSplitLong(destination),\n ij\n );\n const coords = readCoordIJ(ij);\n C._free(ij);\n // Return the pair, or throw if an error code was returned.\n // Switch statement and error codes cribbed from h3-java's implementation.\n switch (retVal) {\n case 0:\n return coords;\n case 1:\n throw new Error('Incompatible origin and index.');\n case 2:\n default:\n throw new Error(\n 'Local IJ coordinates undefined for this origin and index pair. ' +\n 'The index may be too far from the origin.'\n );\n case 3:\n case 4:\n case 5:\n throw new Error('Encountered possible pentagon distortion');\n }\n}\n\n/**\n * Produces an H3 index for IJ coordinates anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {CoordIJ} coords Coordinates as an `{i, j}` pair\n * @return {H3Index} H3 index at the relative coordinates\n * @throws {Error} If the H3 index cannot be calculated\n */\nexport function experimentalLocalIjToH3(origin, coords) {\n // Validate input coords\n if (!coords || typeof coords.i !== 'number' || typeof coords.j !== 'number') {\n throw new Error('Coordinates must be provided as an {i, j} object');\n }\n // Allocate memory for the CoordIJ struct and an H3 index to hold the return value\n const ij = C._malloc(SZ_COORDIJ);\n const out = C._malloc(SZ_H3INDEX);\n storeCoordIJ(ij, coords);\n const retVal = H3.experimentalLocalIjToH3(...h3IndexToSplitLong(origin), ij, out);\n const h3Index = readH3IndexFromPointer(out);\n C._free(ij);\n C._free(out);\n if (retVal !== 0) {\n throw new Error(\n 'Index not defined for this origin and IJ coordinates pair. ' +\n 'IJ coordinates may be too far from origin, or ' +\n 'a pentagon distortion was encountered.'\n );\n }\n return h3Index;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Distance/area utilities\n\n/**\n * Great circle distance between two geo points. This is not specific to H3,\n * but is implemented in the library and provided here as a convenience.\n * @static\n * @param {number[]} latlng1 Origin coordinate as [lat, lng]\n * @param {number[]} latlng2 Destination coordinate as [lat, lng]\n * @param {string} unit Distance unit (either UNITS.m or UNITS.km)\n * @return {number} Great circle distance\n * @throws {Error} If the unit is invalid\n */\nexport function pointDist(latlng1, latlng2, unit) {\n const coord1 = storeGeoCoord(latlng1[0], latlng1[1]);\n const coord2 = storeGeoCoord(latlng2[0], latlng2[1]);\n let result;\n switch (unit) {\n case UNITS.m:\n result = H3.pointDistM(coord1, coord2);\n break;\n case UNITS.km:\n result = H3.pointDistKm(coord1, coord2);\n break;\n case UNITS.rads:\n result = H3.pointDistRads(coord1, coord2);\n break;\n default:\n result = null;\n }\n C._free(coord1);\n C._free(coord2);\n if (result === null) {\n throw new Error(`Unknown unit: ${unit}`);\n }\n return result;\n}\n\n/**\n * Exact area of a given cell\n * @static\n * @param {H3Index} h3Index H3 index of the hexagon to measure\n * @param {string} unit Distance unit (either UNITS.m2 or UNITS.km2)\n * @return {number} Cell area\n * @throws {Error} If the unit is invalid\n */\nexport function cellArea(h3Index, unit) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n switch (unit) {\n case UNITS.m2:\n return H3.cellAreaM2(lower, upper);\n case UNITS.km2:\n return H3.cellAreaKm2(lower, upper);\n case UNITS.rads2:\n return H3.cellAreaRads2(lower, upper);\n default:\n throw new Error(`Unknown unit: ${unit}`);\n }\n}\n\n/**\n * Exact length of a given unidirectional edge\n * @static\n * @param {H3Index} edge H3 index of the edge to measure\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Cell area\n * @throws {Error} If the unit is invalid\n */\nexport function exactEdgeLength(edge, unit) {\n const [lower, upper] = h3IndexToSplitLong(edge);\n switch (unit) {\n case UNITS.m:\n return H3.exactEdgeLengthM(lower, upper);\n case UNITS.km:\n return H3.exactEdgeLengthKm(lower, upper);\n case UNITS.rads:\n return H3.exactEdgeLengthRads(lower, upper);\n default:\n throw new Error(`Unknown unit: ${unit}`);\n }\n}\n\n/**\n * Average hexagon area at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Area unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number} Average area\n * @throws {Error} If the unit is invalid\n */\nexport function hexArea(res, unit) {\n validateRes(res);\n switch (unit) {\n case UNITS.m2:\n return H3.hexAreaM2(res);\n case UNITS.km2:\n return H3.hexAreaKm2(res);\n default:\n throw new Error(`Unknown unit: ${unit}`);\n }\n}\n\n/**\n * Average hexagon edge length at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Average edge length\n * @throws {Error} If the unit is invalid\n */\nexport function edgeLength(res, unit) {\n validateRes(res);\n switch (unit) {\n case UNITS.m:\n return H3.edgeLengthM(res);\n case UNITS.km:\n return H3.edgeLengthKm(res);\n default:\n throw new Error(`Unknown unit: ${unit}`);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Public informational utilities\n\n/**\n * The total count of hexagons in the world at a given resolution. Note that above\n * resolution 8 the exact count cannot be represented in a JavaScript 32-bit number,\n * so consumers should use caution when applying further operations to the output.\n * @static\n * @param {number} res Hexagon resolution\n * @return {number} Count\n */\nexport function numHexagons(res) {\n validateRes(res);\n // Get number as a long value\n const [lower, upper] = readLong(H3.numHexagons(res));\n // If we're using <= 32 bits we can use normal JS numbers\n if (!upper) {\n return lower;\n }\n // Above 32 bit, make a JS number that's correct in order of magnitude\n return upper * Math.pow(2, 32) + lower;\n}\n\n/**\n * Get all H3 indexes at resolution 0. As every index at every resolution > 0 is\n * the descendant of a res 0 index, this can be used with h3ToChildren to iterate\n * over H3 indexes at any resolution.\n * @static\n * @return {H3Index[]} All H3 indexes at res 0\n */\nexport function getRes0Indexes() {\n const count = H3.res0IndexCount();\n const hexagons = C._malloc(SZ_H3INDEX * count);\n H3.getRes0Indexes(hexagons);\n const out = readArrayOfHexagons(hexagons, count);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Get the twelve pentagon indexes at a given resolution.\n * @static\n * @param {number} res Hexagon resolution\n * @return {H3Index[]} All H3 pentagon indexes at res\n */\nexport function getPentagonIndexes(res) {\n validateRes(res);\n const count = H3.pentagonIndexCount();\n const hexagons = C._malloc(SZ_H3INDEX * count);\n H3.getPentagonIndexes(res, hexagons);\n const out = readArrayOfHexagons(hexagons, count);\n C._free(hexagons);\n return out;\n}\n\n/**\n * Convert degrees to radians\n * @static\n * @param {number} deg Value in degrees\n * @return {number} Value in radians\n */\nexport function degsToRads(deg) {\n return (deg * Math.PI) / 180;\n}\n\n/**\n * Convert radians to degrees\n * @static\n * @param {number} rad Value in radians\n * @return {number} Value in degrees\n */\nexport function radsToDegs(rad) {\n return (rad * 180) / Math.PI;\n}\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '