leaflet-city-mapper 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -26
- package/cucumber.mjs +1 -1
- package/dist/leaflet-city-mapper-src.js +15326 -0
- package/dist/leaflet-city-mapper-src.js.map +7 -0
- package/dist/leaflet-city-mapper.js +4 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +122 -0
- package/libs/leaflet.js +76 -0
- package/libs/openlayers-bindings.js +1128 -0
- package/libs/openlayers-bindings.min.js +99 -0
- package/libs/openlayers-bindings.min.js.map +7 -0
- package/package.json +4 -3
- package/src/archives/decodeDirectory.js +43 -25
- package/src/archives/decodeHeader.js +15 -11
- package/src/archives/decompress.js +7 -2
- package/src/archives/findDirectoryEntry.js +9 -0
- package/src/archives/findTile.js +31 -0
- package/src/archives/getDirectoryEntries.js +18 -0
- package/src/archives/getHeader.js +7 -3
- package/src/archives/getTileData.js +13 -0
- package/src/archives/getZxy.js +7 -63
- package/src/archives/loadSource.js +24 -10
- package/src/archives/read.js +12 -9
- package/src/archives/tileId.js +7 -3
- package/src/archives/varint.js +7 -3
- package/src/camera/angles.js +12 -4
- package/src/camera/animationPoint.js +4 -1
- package/src/camera/cameraMapReady.js +4 -1
- package/src/camera/cancelCameraAnimation.js +11 -7
- package/src/camera/cleanupCameraMap.js +7 -4
- package/src/camera/fitCameraBounds.js +33 -23
- package/src/camera/getBearing.js +5 -0
- package/src/camera/getPitch.js +5 -0
- package/src/camera/groundBounds.js +13 -6
- package/src/camera/initializeCameraMap.js +8 -3
- package/src/camera/mapAnimateCamera.js +20 -13
- package/src/camera/mapCamera.js +22 -42
- package/src/camera/mapContainerPointToLayerPoint.js +4 -2
- package/src/camera/mapGetBearing.js +4 -1
- package/src/camera/mapGetBounds.js +12 -6
- package/src/camera/mapGetBoundsCenterZoom.js +6 -3
- package/src/camera/mapGetBoundsZoom.js +17 -7
- package/src/camera/mapGetCenterLayerPoint.js +3 -2
- package/src/camera/mapGetPitch.js +4 -1
- package/src/camera/mapLayerPointToContainerPoint.js +3 -2
- package/src/camera/mapLimitCenter.js +12 -7
- package/src/camera/mapLimitOffset.js +6 -2
- package/src/camera/mapPanBy.js +3 -2
- package/src/camera/mapPanInside.js +16 -10
- package/src/camera/mapResetNorth.js +4 -1
- package/src/camera/mapResetNorthPitch.js +4 -1
- package/src/camera/mapSetBearing.js +3 -1
- package/src/camera/mapSetPitch.js +3 -1
- package/src/camera/mapSetPitchAndBearing.js +19 -11
- package/src/camera/mapSetZoomAround.js +12 -8
- package/src/camera/mapStopPitchBearingAnimation.js +3 -3
- package/src/camera/mapTryAnimatedPan.js +3 -2
- package/src/camera/mapUpdateCameraOverlays.js +3 -2
- package/src/camera/pointOf.js +4 -2
- package/src/camera/project.js +23 -16
- package/src/camera/runCameraAnimations.js +15 -12
- package/src/camera/scheduleCameraAnimation.js +9 -4
- package/src/camera/updateSky.js +20 -14
- package/src/cog/decodeCogTile.js +24 -0
- package/src/cog/finiteCogValues.js +5 -0
- package/src/cog/getCogAssetEntry.js +15 -0
- package/src/cog/getCogBase.js +10 -0
- package/src/cog/getCogHeader.js +3 -0
- package/src/cog/getCogProfile.js +16 -0
- package/src/cog/getCogTile.js +12 -0
- package/src/cog/getColorTile.js +25 -0
- package/src/cog/getElevationTile.js +16 -0
- package/src/cog/hasCogProjection.js +9 -0
- package/src/cog/initCog.js +7 -0
- package/src/cog/invalidCogFullResponse.js +3 -0
- package/src/cog/openCog.js +30 -0
- package/src/cog/openCogAsset.js +14 -0
- package/src/cog/readCog.js +25 -0
- package/src/cog/readCogBlock.js +8 -0
- package/src/cog/readCogBody.js +20 -0
- package/src/cog/readCogDirectories.js +20 -0
- package/src/cog/readCogDirectory.js +21 -0
- package/src/cog/readCogLevel.js +27 -0
- package/src/cog/readCogTag.js +15 -0
- package/src/cog/validCogDimensions.js +6 -0
- package/src/cog/validCogEncoding.js +5 -0
- package/src/cog/validCogGeoArrays.js +8 -0
- package/src/cog/validCogGrid.js +9 -0
- package/src/cog/validCogTileCoordinates.js +4 -0
- package/src/cog/validateCogContainer.js +9 -0
- package/src/cog/validateCogContentRange.js +8 -0
- package/src/cog/validateCogOffsets.js +10 -0
- package/src/cog/validateCogRange.js +7 -0
- package/src/cog/validateCogResponse.js +15 -0
- package/src/collision/collider.js +13 -20
- package/src/collision/hiddenLightHit.js +8 -0
- package/src/collision/indexTriangle.js +11 -0
- package/src/collision/intersectMeshes.js +32 -133
- package/src/collision/localRay.js +21 -0
- package/src/collision/mergeHits.js +11 -0
- package/src/collision/rayBounds.js +19 -0
- package/src/collision/readTriangle.js +20 -0
- package/src/collision/sortHits.js +5 -11
- package/src/collision/transformTriangle.js +9 -0
- package/src/collision/triangleDistance.js +21 -0
- package/src/collision/worldHit.js +18 -0
- package/src/controls/addCameraHandler.js +9 -0
- package/src/controls/adjustCameraDrag.js +7 -2
- package/src/controls/cameraControls.js +53 -22
- package/src/controls/cameraDragClick.js +3 -2
- package/src/controls/cameraDragContextMenu.js +3 -2
- package/src/controls/cameraDragDown.js +20 -17
- package/src/controls/cameraDragEnd.js +3 -2
- package/src/controls/cameraDragMove.js +11 -6
- package/src/controls/changeCameraTouch.js +5 -2
- package/src/controls/cleanupCameraTouch.js +21 -16
- package/src/controls/compassAddHooks.js +13 -10
- package/src/controls/compassOrientation.js +2 -1
- package/src/controls/containerResizeAddHooks.js +3 -3
- package/src/controls/dragCamera.js +18 -14
- package/src/controls/endAllCameraDrags.js +4 -2
- package/src/controls/endAllCameraTouches.js +4 -2
- package/src/controls/endCameraTouch.js +3 -2
- package/src/controls/endCameraTouchEvent.js +5 -2
- package/src/controls/failCompassPermission.js +4 -0
- package/src/controls/finishCompassPermission.js +10 -9
- package/src/controls/loadCameraControls.js +2 -2
- package/src/controls/moveCameraTouch.js +16 -9
- package/src/controls/pitchDragAddHooks.js +3 -1
- package/src/controls/refreshRotateControl.js +9 -6
- package/src/controls/removeCameraDrag.js +7 -4
- package/src/controls/rotateButtonClick.js +8 -4
- package/src/controls/rotateButtonKeydown.js +8 -4
- package/src/controls/rotateControl.js +3 -2
- package/src/controls/rotateOnAdd.js +32 -28
- package/src/controls/shiftRotateAddHooks.js +6 -4
- package/src/controls/shiftRotateWheel.js +3 -1
- package/src/controls/startCameraTouch.js +32 -22
- package/src/core/addImageState.js +6 -5
- package/src/core/addRasterImage.js +4 -2
- package/src/core/adjustCameraMarkerPan.js +24 -18
- package/src/core/beforeNativeRender.js +1 -1
- package/src/core/boundsQuad.js +7 -6
- package/src/core/bringNativeLayerToBack.js +6 -1
- package/src/core/bringNativeLayerToFront.js +6 -1
- package/src/core/bypassNativeEvent.js +11 -0
- package/src/core/cameraCircleBounds.js +3 -2
- package/src/core/cameraMarkerDrag.js +16 -13
- package/src/core/cameraMarkerOnDrag.js +7 -2
- package/src/core/cancelGridFade.js +10 -6
- package/src/core/closestCameraLayerPoint.js +3 -2
- package/src/core/current.js +4 -1
- package/src/core/disposeNativeLayer.js +6 -2
- package/src/core/fireRasterLoad.js +3 -2
- package/src/core/forwardNativeError.js +2 -2
- package/src/core/gridlayerGetEvents.js +7 -4
- package/src/core/gridlayerGetTiledPixelBounds.js +8 -4
- package/src/core/handleNativeMapEvent.js +16 -36
- package/src/core/hideTargets.js +6 -4
- package/src/core/initNativeGPU.js +10 -6
- package/src/core/initializeGridContainer.js +3 -2
- package/src/core/initializeNativeLayer.js +16 -18
- package/src/core/layerCallInitHooks.js +14 -0
- package/src/core/localPixelForGeometry.js +3 -2
- package/src/core/localPosition.js +8 -4
- package/src/core/markerCameraIconPoint.js +9 -6
- package/src/core/markerGetEvents.js +6 -2
- package/src/core/markerImageBounds.js +11 -0
- package/src/core/markerInitInteraction.js +4 -2
- package/src/core/markerQuadCorners.js +41 -24
- package/src/core/markerSetIcon.js +5 -2
- package/src/core/markerSetPos.js +10 -5
- package/src/core/markerSetRotation.js +9 -7
- package/src/core/markerUpdateZIndex.js +9 -5
- package/src/core/nativeEventSource.js +18 -0
- package/src/core/nativeEvents.js +8 -3
- package/src/core/nativeImageError.js +8 -3
- package/src/core/nativeImageRefresh.js +6 -2
- package/src/core/nativeLayer.js +24 -21
- package/src/core/nativeLayerMethod.js +8 -3
- package/src/core/popupAdjustPan.js +24 -18
- package/src/core/popupGetEvents.js +5 -2
- package/src/core/popupUpdatePosition.js +5 -2
- package/src/core/pruneNativeResources.js +20 -0
- package/src/core/putNativeMesh.js +11 -8
- package/src/core/quadNativeMesh.js +9 -4
- package/src/core/readyNativeGPU.js +4 -1
- package/src/core/redrawPath.js +6 -0
- package/src/core/refreshNativeLayer.js +11 -6
- package/src/core/refreshNativeLayerContract.js +6 -1
- package/src/core/rejectNativeReady.js +1 -0
- package/src/core/removeImageState.js +4 -3
- package/src/core/removeLayer.js +22 -0
- package/src/core/removeNativeEvents.js +2 -1
- package/src/core/removeTargets.js +6 -2
- package/src/core/reorderNativeLayer.js +4 -1
- package/src/core/resolveNativeReady.js +1 -0
- package/src/core/runGridFades.js +11 -6
- package/src/core/runMarkerPanFrame.js +6 -4
- package/src/core/scheduleGridFade.js +10 -5
- package/src/core/scheduleMarkerPan.js +7 -4
- package/src/core/setRotation.js +5 -0
- package/src/core/styleNativeMesh.js +5 -1
- package/src/core/syncGridLayer.js +10 -3
- package/src/core/syncMarker.js +4 -2
- package/src/core/syncVectorLayer.js +12 -9
- package/src/core/synchronizeNativeLayer.js +8 -17
- package/src/core/textureFor.js +41 -43
- package/src/core/tooltipGetEvents.js +5 -2
- package/src/core/tooltipSetPosition.js +5 -2
- package/src/core/transformNativePoint.js +7 -0
- package/src/core/updateGridOpacity.js +7 -3
- package/src/core/updateNativeHover.js +7 -0
- package/src/core/updateNativeLayerView.js +4 -1
- package/src/core/uploadCanvasTexture.js +18 -15
- package/src/core/uploadNativeImage.js +13 -0
- package/src/geometry/addBridges.js +29 -88
- package/src/geometry/below.js +1 -1
- package/src/geometry/box.js +6 -1
- package/src/geometry/bridgeEdge.js +11 -0
- package/src/geometry/bridgeElevation.js +3 -1
- package/src/geometry/bridgeFaces.js +15 -0
- package/src/geometry/bridgeLocal.js +3 -2
- package/src/geometry/bridgePaths.js +11 -0
- package/src/geometry/bridgePolygon.js +31 -0
- package/src/geometry/bridgeSides.js +11 -0
- package/src/geometry/build.js +10 -6
- package/src/geometry/circleAt.js +4 -2
- package/src/geometry/circleGeometry.js +34 -0
- package/src/geometry/clipLine.js +1 -1
- package/src/geometry/clipSegment.js +11 -7
- package/src/geometry/computeBounds.js +9 -4
- package/src/geometry/conformModelToTerrain.js +17 -12
- package/src/geometry/cross.js +5 -1
- package/src/geometry/dashValues.js +14 -0
- package/src/geometry/dashedSegment.js +16 -0
- package/src/geometry/diskAt.js +4 -2
- package/src/geometry/emitter.js +2 -2
- package/src/geometry/indexBridge.js +29 -0
- package/src/geometry/lampPostGeometry.js +12 -6
- package/src/geometry/lampRing.js +9 -6
- package/src/geometry/lightGeometry.js +2 -2
- package/src/geometry/line.js +21 -54
- package/src/geometry/lineJoin.js +26 -0
- package/src/geometry/nativeGeometry.js +10 -44
- package/src/geometry/polygon.js +4 -3
- package/src/geometry/quad.js +8 -3
- package/src/geometry/roofCoverage.js +23 -52
- package/src/geometry/roofFootprint.js +29 -0
- package/src/geometry/segment.js +2 -1
- package/src/geometry/setVertexColor.js +3 -1
- package/src/geometry/sub.js +2 -2
- package/src/geometry/subtractRoofTile.js +19 -0
- package/src/geometry/surface.js +2 -1
- package/src/geometry/treeGeometry.js +5 -6
- package/src/geometry/treeRing.js +9 -8
- package/src/geometry/triangle.js +8 -7
- package/src/geometry/validateTree.js +7 -0
- package/src/geometry/vertexNormals.js +10 -16
- package/src/geometry/visit.js +2 -1
- package/src/{constants → globals}/CELL.js +0 -1
- package/src/globals/Compass.js +1 -0
- package/src/globals/ContainerResize.js +1 -0
- package/src/{constants → globals}/HEIGHT.js +1 -1
- package/src/globals/L.js +1 -0
- package/src/globals/PitchDrag.js +1 -0
- package/src/globals/ShiftRotate.js +1 -0
- package/src/globals/TouchMode.js +1 -0
- package/src/globals/alphaBlend.js +12 -0
- package/src/globals/archiveDecoder.js +1 -0
- package/src/globals/archiveNorthWest.js +1 -0
- package/src/globals/archiveSouthEast.js +1 -0
- package/src/globals/atmosphereColor.js +1 -0
- package/src/globals/atmosphereStops.js +22 -0
- package/src/globals/blobParts.js +1 -0
- package/src/globals/boundsMethods.js +1 -0
- package/src/globals/cameraAngles.js +1 -0
- package/src/globals/cameraAnimatedOptions.js +3 -0
- package/src/globals/cameraAnimationFrame.js +1 -0
- package/src/globals/cameraAnimations.js +1 -0
- package/src/globals/cameraBearingSensitivity.js +1 -0
- package/src/globals/cameraByMap.js +1 -0
- package/src/globals/cameraDragSensitivity.js +1 -0
- package/src/globals/cameraDrags.js +1 -0
- package/src/globals/cameraEmptyOptions.js +1 -0
- package/src/globals/cameraFocusOptions.js +3 -0
- package/src/globals/cameraFov.js +3 -0
- package/src/globals/cameraListenerOptions.js +4 -0
- package/src/globals/cameraTouchStates.js +1 -0
- package/src/globals/cameraZeroPadding.js +1 -0
- package/src/globals/closestMethods.js +1 -0
- package/src/globals/cogTags.js +1 -0
- package/src/{constants → globals}/colliders.js +0 -1
- package/src/globals/colorLayout.js +8 -0
- package/src/globals/coreEventTypes.js +4 -0
- package/src/globals/coreMatrixKeys.js +4 -0
- package/src/globals/coreQuadIndices.js +1 -0
- package/src/globals/coreQuadUV.js +1 -0
- package/src/globals/coreSampler.js +4 -0
- package/src/globals/coreWhite.js +1 -0
- package/src/globals/cosObliquity.js +3 -0
- package/src/globals/coverageTiles.js +1 -0
- package/src/globals/defaultMaterial.js +1 -0
- package/src/globals/degrees.js +1 -0
- package/src/globals/demBuffer.js +4 -0
- package/src/globals/demLayout.js +3 -0
- package/src/globals/demSize.js +1 -0
- package/src/globals/demTarget.js +3 -0
- package/src/globals/demTexture.js +5 -0
- package/src/globals/depthBindGroup.js +9 -0
- package/src/globals/depthTexture.js +5 -0
- package/src/globals/directoryReader.js +4 -0
- package/src/globals/disabledShadow.js +1 -0
- package/src/globals/dragByHandler.js +1 -0
- package/src/globals/dragStates.js +1 -0
- package/src/globals/drawEntries.js +1 -0
- package/src/globals/drawFrameEntry.js +7 -0
- package/src/globals/drawMeshEntry.js +7 -0
- package/src/globals/drawSamplerEntries.js +18 -0
- package/src/globals/drawTerrainEntry.js +4 -0
- package/src/globals/drawTextureEntries.js +18 -0
- package/src/globals/earthCirc.js +1 -0
- package/src/{constants → globals}/elevationWGSL.js +1 -1
- package/src/globals/fragmentShader.js +3 -0
- package/src/globals/frameBuffer.js +4 -0
- package/src/globals/frameCommands.js +1 -0
- package/src/globals/frameLayoutEntry.js +7 -0
- package/src/globals/geometryDecoder.js +1 -0
- package/src/globals/geometryEmpty.js +1 -0
- package/src/globals/geometryImageOptions.js +4 -0
- package/src/globals/geometryPixelStates.js +1 -0
- package/src/globals/geometryQuaternion.js +1 -0
- package/src/globals/geometryScale.js +1 -0
- package/src/globals/geometrySemantics.js +5 -0
- package/src/globals/geometryTranslation.js +1 -0
- package/src/globals/gridEvents.js +1 -0
- package/src/globals/gridFadeFrame.js +1 -0
- package/src/globals/gridInitializers.js +1 -0
- package/src/globals/halfRadians.js +1 -0
- package/src/globals/headerBounds.js +1 -0
- package/src/globals/headerFlags.js +1 -0
- package/src/globals/headerOffsets.js +5 -0
- package/src/globals/hull.js +10 -0
- package/src/globals/imageStates.js +1 -0
- package/src/globals/instanceLayout.js +9 -0
- package/src/globals/lampDirections.js +8 -0
- package/src/globals/layerCallInitHooks.js +1 -0
- package/src/globals/layerProto.js +1 -0
- package/src/globals/lightScale.js +1 -0
- package/src/{constants → globals}/limbs.js +0 -1
- package/src/globals/loading.js +1 -0
- package/src/globals/mapMethods.js +1 -0
- package/src/globals/markerMethods.js +1 -0
- package/src/globals/markerPanFrame.js +1 -0
- package/src/globals/meshBindGroup.js +4 -0
- package/src/globals/meshBuffer.js +4 -0
- package/src/globals/meshCopySize.js +1 -0
- package/src/globals/meshImage.js +4 -0
- package/src/globals/meshLayoutEntry.js +8 -0
- package/src/globals/meshOffsets.js +1 -0
- package/src/globals/meshPipeline.js +27 -0
- package/src/globals/meshStack.js +3 -0
- package/src/globals/meshTarget.js +3 -0
- package/src/globals/nativeRenderByLayer.js +1 -0
- package/src/globals/nextId.js +1 -0
- package/src/globals/normalLayout.js +8 -0
- package/src/globals/parts.js +24 -0
- package/src/globals/pendingGridFades.js +1 -0
- package/src/globals/pendingInitializations.js +1 -0
- package/src/globals/pendingMapChanges.js +1 -0
- package/src/globals/pendingMarkerPan.js +1 -0
- package/src/globals/pendingPlacements.js +1 -0
- package/src/globals/pendingRasterLoads.js +1 -0
- package/src/globals/pendingZoomAnimations.js +1 -0
- package/src/globals/pipelineLayout.js +3 -0
- package/src/globals/popupEvents.js +1 -0
- package/src/globals/popupPan.js +1 -0
- package/src/globals/popupPosition.js +1 -0
- package/src/globals/positionLayout.js +8 -0
- package/src/globals/programEntries.js +1 -0
- package/src/globals/programLayout.js +3 -0
- package/src/globals/radians.js +1 -0
- package/src/globals/rasterBuffer.js +4 -0
- package/src/globals/rasterIndices.js +1 -0
- package/src/globals/rasterNormals.js +1 -0
- package/src/globals/rasterPoint.js +4 -0
- package/src/globals/rasterPositions.js +1 -0
- package/src/globals/rasterSampler.js +6 -0
- package/src/globals/rasterTexture.js +5 -0
- package/src/globals/rasterUVs.js +1 -0
- package/src/globals/removeLayer.js +1 -0
- package/src/globals/renderEmpty.js +1 -0
- package/src/globals/rendererDevices.js +1 -0
- package/src/globals/ringDirections.js +49 -0
- package/src/globals/roofBindGroup.js +17 -0
- package/src/globals/roofBlitSampler.js +4 -0
- package/src/globals/roofBuffer.js +4 -0
- package/src/globals/roofCommands.js +1 -0
- package/src/globals/roofCopySize.js +1 -0
- package/src/globals/roofImage.js +3 -0
- package/src/globals/roofMin.js +4 -0
- package/src/globals/roofOpacities.js +1 -0
- package/src/globals/roofPass.js +13 -0
- package/src/globals/roofPipeline.js +29 -0
- package/src/globals/roofSampler.js +4 -0
- package/src/globals/roofShader.js +16 -0
- package/src/globals/roofSignatures.js +1 -0
- package/src/globals/roofSize.js +4 -0
- package/src/globals/roofTarget.js +3 -0
- package/src/globals/roofTexture.js +5 -0
- package/src/globals/roofTiles.js +1 -0
- package/src/globals/roundProfile.js +7 -0
- package/src/globals/samplerLayoutEntries.js +36 -0
- package/src/globals/sceneByLayer.js +1 -0
- package/src/globals/sceneCleanupFields.js +1 -0
- package/src/globals/sceneEmptyOptions.js +1 -0
- package/src/globals/scenePass.js +19 -0
- package/src/globals/sceneSunlightUniforms.js +3 -0
- package/src/globals/sceneTransferFields.js +1 -0
- package/src/globals/sceneWalkHandlers.js +1 -0
- package/src/globals/shadowBindGroup.js +10 -0
- package/src/globals/shadowBounds.js +4 -0
- package/src/globals/shadowCamera.js +15 -0
- package/src/globals/shadowDepthLayout.js +9 -0
- package/src/globals/shadowHigh.js +1 -0
- package/src/globals/shadowInstanceLayouts.js +4 -0
- package/src/globals/shadowLayouts.js +3 -0
- package/src/globals/shadowLow.js +1 -0
- package/src/globals/shadowMeshLayout.js +10 -0
- package/src/globals/shadowOffsets.js +1 -0
- package/src/globals/shadowPass.js +9 -0
- package/src/globals/shadowPipeline.js +24 -0
- package/src/globals/shadowPipelineLayout.js +3 -0
- package/src/globals/shadowShader.js +3 -0
- package/src/globals/shadowTexture.js +5 -0
- package/src/globals/shadowValues.js +1 -0
- package/src/globals/sinObliquity.js +3 -0
- package/src/globals/sizes.js +6 -0
- package/src/globals/sunBindGroup.js +20 -0
- package/src/globals/sunByMap.js +1 -0
- package/src/globals/sunlightByControl.js +1 -0
- package/src/globals/tau.js +1 -0
- package/src/globals/terrainLayoutEntry.js +8 -0
- package/src/globals/textureLayoutEntries.js +41 -0
- package/src/globals/tiledBounds.js +1 -0
- package/src/globals/tooltipEvents.js +1 -0
- package/src/globals/tooltipPosition.js +1 -0
- package/src/globals/touchByContainer.js +1 -0
- package/src/globals/trafficByLayer.js +1 -0
- package/src/globals/trafficClocks.js +1 -0
- package/src/globals/trafficEmptyList.js +1 -0
- package/src/globals/trafficEmptyOptions.js +1 -0
- package/src/globals/trafficRouteMaterial.js +1 -0
- package/src/{constants → globals}/trafficShader.js +49 -49
- package/src/globals/triangleContexts.js +1 -0
- package/src/globals/uVLayout.js +8 -0
- package/src/{constants → globals}/vehicles.js +24 -9
- package/src/globals/vertexShader.js +3 -0
- package/src/globals/walkByMap.js +1 -0
- package/src/globals/wantedTiles.js +1 -0
- package/src/index.js +27 -25
- package/src/lighting/cacheLightGrid.js +14 -5
- package/src/lighting/collectLightMeshes.js +4 -1
- package/src/lighting/lightGrid.js +9 -8
- package/src/lighting/updatePointLights.js +11 -7
- package/src/lighting/visitCells.js +4 -11
- package/src/lighting/visitLightCells.js +13 -0
- package/src/lighting/worldLights.js +10 -12
- package/src/lighting/writeLightCell.js +5 -0
- package/src/models/applyModelTransform.js +13 -0
- package/src/models/buildModelNodes.js +14 -0
- package/src/models/createModelContext.js +15 -0
- package/src/models/createModelGeometry.js +40 -0
- package/src/models/decodeModel.js +9 -6
- package/src/models/loadBuffer.js +2 -2
- package/src/models/loadImage.js +9 -5
- package/src/models/loadModel.js +24 -49
- package/src/models/loadModelResources.js +19 -0
- package/src/models/materialFor.js +9 -9
- package/src/models/modelNode.js +25 -69
- package/src/models/nodeMatrix.js +8 -3
- package/src/models/normalizeAccessor.js +11 -0
- package/src/models/readAccessor.js +11 -31
- package/src/models/readAccessorValue.js +7 -0
- package/src/models/readAccessorValues.js +10 -6
- package/src/models/readModelAttributes.js +20 -0
- package/src/models/readModelIndices.js +16 -0
- package/src/models/readSparseAccessor.js +19 -0
- package/src/models/releaseModelResources.js +10 -0
- package/src/models/textureFor.js +9 -6
- package/src/models/textureSampler.js +5 -5
- package/src/picking/findFeature.js +12 -9
- package/src/picking/hit.js +11 -10
- package/src/picking/hitColliderCell.js +19 -0
- package/src/picking/hitMesh.js +12 -16
- package/src/picking/onClick.js +5 -2
- package/src/picking/onPointerLeave.js +5 -2
- package/src/picking/onPointerMove.js +8 -5
- package/src/picking/raycast.js +42 -35
- package/src/picking/setHighlight.js +12 -5
- package/src/picking/shouldSkipOther.js +4 -1
- package/src/picking/showFeature.js +13 -10
- package/src/picking/validateCameraInverse.js +8 -0
- package/src/raster/addRasterTile.js +39 -84
- package/src/raster/comparePendingTiles.js +2 -2
- package/src/raster/createGeometry.js +17 -10
- package/src/raster/createRasterMesh.js +71 -42
- package/src/raster/finishAttachment.js +7 -3
- package/src/raster/finishRasterTile.js +54 -40
- package/src/raster/getRasterEvents.js +3 -3
- package/src/raster/getRasterTileSize.js +5 -3
- package/src/raster/initRaster.js +14 -19
- package/src/raster/isLoading.js +4 -2
- package/src/raster/loadRasterTile.js +10 -7
- package/src/raster/onPMTileAdd.js +4 -1
- package/src/raster/onPMTileRemove.js +4 -1
- package/src/raster/pruneRasterTiles.js +15 -12
- package/src/raster/pumpRasterTiles.js +9 -5
- package/src/raster/rasterTileRange.js +23 -0
- package/src/raster/readyRaster.js +13 -10
- package/src/raster/registerTerrainTile.js +12 -9
- package/src/raster/releaseRasterTile.js +15 -12
- package/src/raster/releaseRasterTiles.js +9 -6
- package/src/raster/removeRasterTile.js +6 -3
- package/src/raster/reportError.js +3 -3
- package/src/raster/retainRasterTiles.js +15 -0
- package/src/raster/setRasterOpacity.js +5 -2
- package/src/raster/setRasterTerrain.js +10 -6
- package/src/raster/setRasterZIndex.js +5 -2
- package/src/raster/terrainTileGeometry.js +16 -0
- package/src/raster/updateAttachedTiles.js +5 -2
- package/src/raster/updateRasterTiles.js +29 -37
- package/src/rendering/bindMeshTextures.js +50 -0
- package/src/rendering/collectFrameMeshes.js +17 -10
- package/src/rendering/collectMeshes.js +2 -24
- package/src/rendering/collectRoofTiles.js +15 -0
- package/src/rendering/collectVisibleMesh.js +27 -0
- package/src/rendering/compareMeshDepth.js +6 -0
- package/src/rendering/compareMeshes.js +8 -10
- package/src/rendering/compareRoofTiles.js +4 -4
- package/src/rendering/composeRoofAtlas.js +53 -36
- package/src/rendering/createMesh.js +22 -11
- package/src/rendering/createProgram.js +47 -64
- package/src/rendering/createProgramLayout.js +36 -0
- package/src/rendering/createProgramUniforms.js +17 -0
- package/src/rendering/destroyAfterSubmission.js +8 -8
- package/src/rendering/destroyTexture.js +4 -1
- package/src/rendering/drawGeometry.js +18 -106
- package/src/rendering/drawPipeline.js +34 -0
- package/src/rendering/drawSceneMeshes.js +14 -17
- package/src/rendering/ensureRoofBlit.js +14 -34
- package/src/rendering/prepareFrameBuffer.js +17 -0
- package/src/rendering/prepareFrameMeshes.js +6 -11
- package/src/rendering/prepareFrameUniforms.js +7 -12
- package/src/rendering/prepareMeshCutout.js +12 -0
- package/src/rendering/prepareMeshTextures.js +23 -0
- package/src/rendering/prepareMeshUniforms.js +25 -0
- package/src/rendering/rebuildRoofAtlas.js +41 -56
- package/src/rendering/render.js +25 -13
- package/src/rendering/reportCompilation.js +6 -6
- package/src/rendering/resizeRenderer.js +19 -14
- package/src/rendering/resizeRoofTexture.js +24 -0
- package/src/rendering/revealRoofMesh.js +15 -0
- package/src/rendering/synchronizeZoomView.js +10 -18
- package/src/rendering/textureBinding.js +7 -7
- package/src/rendering/updateMapCamera.js +30 -16
- package/src/rendering/updateRoofAtlas.js +20 -0
- package/src/rendering/updateRoofRaster.js +12 -19
- package/src/rendering/updateZoomCamera.js +18 -0
- package/src/rendering/uploadMeshTexture.js +26 -0
- package/src/rendering/uploadRoofTile.js +23 -0
- package/src/scene/addSceneLayer.js +17 -0
- package/src/scene/attach.js +54 -161
- package/src/scene/attachLayer.js +5 -2
- package/src/scene/callLayer.js +26 -0
- package/src/scene/cancelUpdate.js +6 -3
- package/src/scene/composeLocalTransform.js +16 -0
- package/src/scene/createLayer.js +7 -0
- package/src/scene/createSceneCamera.js +21 -0
- package/src/scene/emptyEvents.js +1 -1
- package/src/scene/emptyNode.js +8 -7
- package/src/scene/endZoom.js +13 -6
- package/src/scene/failAttachment.js +6 -3
- package/src/scene/get3DEvents.js +12 -9
- package/src/scene/getLocation.js +7 -0
- package/src/scene/init3D.js +28 -15
- package/src/scene/initializeLayer.js +11 -5
- package/src/scene/initializeRendererResources.js +35 -0
- package/src/scene/initializeSharedRenderer.js +45 -0
- package/src/scene/initializerFor.js +3 -1
- package/src/scene/isNativeLayer.js +12 -0
- package/src/scene/layerCountTitle.js +4 -0
- package/src/scene/layerInitialize.js +24 -14
- package/src/scene/layerLayerAdd.js +31 -9
- package/src/scene/mountRenderer.js +25 -0
- package/src/scene/onAdd3DLayer.js +16 -12
- package/src/scene/onMapChange.js +8 -6
- package/src/scene/onRemove3DLayer.js +30 -36
- package/src/scene/onZoomAnim.js +8 -6
- package/src/scene/placeEntry.js +3 -1
- package/src/scene/placeEntryElement.js +22 -0
- package/src/scene/ready.js +9 -0
- package/src/scene/ready3D.js +28 -18
- package/src/scene/releaseRenderer.js +1 -1
- package/src/scene/releaseSharedScene.js +25 -0
- package/src/scene/removeEntry.js +2 -0
- package/src/scene/removeLayerEvents.js +9 -0
- package/src/scene/removeSceneLayer.js +15 -0
- package/src/scene/renderLayerCount.js +13 -0
- package/src/scene/renderPendingMapChange.js +8 -4
- package/src/scene/renderPendingUpdates.js +8 -4
- package/src/scene/renderPendingZoomAnimation.js +7 -3
- package/src/scene/rendererDeviceError.js +10 -6
- package/src/scene/rendererDeviceLost.js +10 -7
- package/src/scene/replaceEntry.js +4 -2
- package/src/scene/reportError.js +2 -2
- package/src/scene/requestAdapter.js +1 -1
- package/src/scene/resolveNextInitialization.js +7 -6
- package/src/scene/restoreGeometry.js +23 -0
- package/src/scene/restoreMaterialTextures.js +16 -0
- package/src/scene/restoreObject.js +22 -58
- package/src/scene/runPlacements.js +4 -2
- package/src/scene/startZoom.js +4 -1
- package/src/scene/underEntry.js +2 -3
- package/src/scene/update.js +8 -4
- package/src/scene/updateCamera.js +51 -28
- package/src/scene/updateLayerCount.js +22 -0
- package/src/scene/updateWorldMatrix.js +23 -28
- package/src/scene/worldMatrixChanged.js +18 -0
- package/src/shaders/materialBaseShader.js +17 -0
- package/src/shaders/materialShaders.js +14 -130
- package/src/shaders/materialSurfaceShader.js +47 -0
- package/src/shaders/materialVertexShader.js +72 -0
- package/src/shaders/roofVertexShader.js +9 -0
- package/src/shaders/validateRoofMaterial.js +10 -0
- package/src/shadows/bindSunlight.js +18 -9
- package/src/shadows/drawShadowMeshes.js +24 -14
- package/src/shadows/ensureShadowPipeline.js +46 -35
- package/src/shadows/meshShadowBounds.js +24 -0
- package/src/shadows/renderSunlight.js +10 -8
- package/src/shadows/resizeSunlight.js +12 -6
- package/src/shadows/shadowBounds.js +10 -19
- package/src/shadows/shadowCacheMatches.js +3 -9
- package/src/shadows/shadowMatrix.js +36 -26
- package/src/shadows/shadowMeshMatches.js +11 -0
- package/src/sources/addGeneratedTriangle.js +3 -2
- package/src/sources/attachAreaMesh.js +32 -26
- package/src/sources/buildArea.js +12 -8
- package/src/sources/buildAreaFeature.js +12 -17
- package/src/sources/buildAreaPoint.js +4 -4
- package/src/sources/buildAreaPolygon.js +3 -3
- package/src/sources/compareAreaDistance.js +1 -2
- package/src/sources/extrusionStyle.js +10 -0
- package/src/sources/featureAnchor.js +9 -0
- package/src/sources/generateTreeGeometry.js +5 -3
- package/src/sources/initializeGeoJSON.js +4 -2
- package/src/sources/instanceAreaGeometry.js +9 -7
- package/src/sources/pendingSourceAreas.js +20 -0
- package/src/sources/projectRing.js +17 -10
- package/src/sources/projectedTree.js +16 -10
- package/src/sources/pump.js +16 -26
- package/src/sources/releaseArea.js +5 -2
- package/src/sources/setGeoJSONData.js +5 -2
- package/src/sources/sourceAreaContext.js +16 -6
- package/src/sources/updateArea.js +23 -16
- package/src/sources/updateStatus.js +5 -2
- package/src/sunlight/addTimeLayer.js +4 -1
- package/src/sunlight/addTo.js +1 -0
- package/src/sunlight/atmosphere.js +7 -10
- package/src/sunlight/createSun.js +54 -0
- package/src/sunlight/horizontalPosition.js +8 -8
- package/src/sunlight/initSunlight.js +3 -0
- package/src/sunlight/initialize.js +7 -4
- package/src/sunlight/mix.js +4 -3
- package/src/sunlight/moonPosition.js +10 -9
- package/src/sunlight/onAddSun.js +27 -66
- package/src/sunlight/onRemoveSun.js +10 -0
- package/src/sunlight/projectCelestialBody.js +5 -5
- package/src/sunlight/remove.js +1 -0
- package/src/sunlight/removeSun.js +9 -3
- package/src/sunlight/removeTimeLayer.js +5 -1
- package/src/sunlight/render.js +4 -2
- package/src/sunlight/rgb.js +6 -4
- package/src/sunlight/solarPosition.js +10 -9
- package/src/sunlight/solarTime.js +11 -0
- package/src/sunlight/styleTimeControl.js +3 -3
- package/src/sunlight/updateCelestialDisc.js +12 -0
- package/src/sunlight/updateSky.js +12 -15
- package/src/sunlight/updateSun.js +10 -4
- package/src/sunlight/useSelectedTime.js +7 -4
- package/src/terrain/applyTerrain.js +21 -0
- package/src/terrain/clearLayerTerrain.js +8 -5
- package/src/terrain/copyTerrainTile.js +12 -0
- package/src/terrain/getElevation.js +7 -3
- package/src/terrain/initTerrain.js +12 -9
- package/src/terrain/loadTerrain.js +25 -45
- package/src/terrain/loadTerrainTiles.js +7 -3
- package/src/terrain/onTerrainAdd.js +10 -6
- package/src/terrain/onTerrainChange.js +5 -2
- package/src/terrain/onTerrainRemove.js +22 -18
- package/src/terrain/rasterProgram.js +51 -0
- package/src/terrain/readBridges.js +1 -1
- package/src/terrain/setLayerTerrain.js +8 -5
- package/src/terrain/setTerrainHeight.js +9 -5
- package/src/terrain/terrainAtlas.js +7 -13
- package/src/terrain/terrainBuffers.js +27 -0
- package/src/terrain/terrainElevation.js +5 -10
- package/src/terrain/terrainGrid.js +19 -11
- package/src/terrain/terrainTileQueue.js +25 -0
- package/src/traffic/addTraffic.js +6 -3
- package/src/traffic/along.js +8 -2
- package/src/traffic/appendRouteDash.js +15 -0
- package/src/traffic/appendRouteSegment.js +15 -0
- package/src/traffic/destroyTrafficGpu.js +4 -2
- package/src/traffic/disposeTrafficObject.js +5 -2
- package/src/traffic/drawTrafficRoute.js +5 -2
- package/src/traffic/failTraffic.js +2 -2
- package/src/traffic/fetchTrafficLanes.js +4 -4
- package/src/traffic/groundTraffic.js +5 -1
- package/src/traffic/initTraffic.js +60 -48
- package/src/traffic/loadTraffic.js +9 -9
- package/src/traffic/locateTraffic.js +7 -5
- package/src/traffic/moveTraffic.js +2 -2
- package/src/traffic/prepareTraffic.js +11 -6
- package/src/traffic/rebaseTraffic.js +32 -30
- package/src/traffic/rebuildTrafficMesh.js +9 -5
- package/src/traffic/refreshTrafficTrips.js +32 -0
- package/src/traffic/removeTraffic.js +16 -13
- package/src/traffic/routeColor.js +3 -3
- package/src/traffic/routeGeometry.js +11 -21
- package/src/traffic/scheduledTrips.js +22 -11
- package/src/traffic/tickTraffic.js +9 -40
- package/src/traffic/toLanes.js +16 -8
- package/src/traffic/tooltip.js +4 -6
- package/src/traffic/trafficBounds.js +6 -2
- package/src/traffic/trafficNow.js +9 -3
- package/src/traffic/trafficStatusText.js +5 -0
- package/src/traffic/trafficStorage.js +2 -2
- package/src/traffic/tripsAt.js +4 -4
- package/src/traffic/updateTraffic.js +4 -1
- package/src/traffic/updateTrafficLights.js +16 -0
- package/src/traffic/updateTrafficPose.js +8 -0
- package/src/traffic/uploadTrafficLanes.js +21 -0
- package/src/traffic/vehicleOffsets.js +3 -2
- package/src/triangulation/clean.js +1 -1
- package/src/triangulation/clipEars.js +23 -0
- package/src/triangulation/connectHole.js +18 -0
- package/src/triangulation/mergeHoles.js +11 -0
- package/src/triangulation/minimumX.js +3 -3
- package/src/triangulation/polygonRings.js +14 -0
- package/src/triangulation/sortHoles.js +7 -12
- package/src/triangulation/triangulate.js +18 -56
- package/src/triangulation/validateArea.js +10 -0
- package/src/utils/parseColor.js +4 -4
- package/src/vehicles/bicycleModel.js +21 -20
- package/src/vehicles/boatBenches.js +3 -2
- package/src/vehicles/boatModel.js +25 -17
- package/src/vehicles/carModel.js +26 -10
- package/src/vehicles/carriage.js +17 -16
- package/src/vehicles/metroModel.js +1 -1
- package/src/vehicles/mirror.js +3 -3
- package/src/vehicles/pedestrianModel.js +15 -14
- package/src/vehicles/tramModel.js +1 -1
- package/src/walk/blocked.js +4 -4
- package/src/walk/createWalk.js +66 -60
- package/src/walk/initWalk.js +1 -0
- package/src/walk/initialize.js +1 -0
- package/src/walk/land.js +32 -0
- package/src/walk/local.js +15 -7
- package/src/walk/moveWalker.js +23 -0
- package/src/walk/onAdd.js +25 -0
- package/src/walk/onKey.js +12 -9
- package/src/walk/onPointer.js +17 -12
- package/src/walk/onRemove.js +9 -1
- package/src/walk/place.js +4 -2
- package/src/walk/start.js +19 -10
- package/src/walk/step.js +21 -29
- package/src/walk/stepWalkerHeight.js +11 -0
- package/src/walk/stop.js +7 -4
- package/src/walk/updateWalkerView.js +22 -0
- package/src/constants/Compass.js +0 -7
- package/src/constants/ContainerResize.js +0 -7
- package/src/constants/PitchDrag.js +0 -7
- package/src/constants/ShiftRotate.js +0 -7
- package/src/constants/TouchMode.js +0 -6
- package/src/constants/accessorSizes.js +0 -1
- package/src/constants/attachState.js +0 -1
- package/src/constants/cameraControlsState.js +0 -1
- package/src/constants/cityMapper.js +0 -6
- package/src/constants/hull.js +0 -1
- package/src/constants/indexState.js +0 -1
- package/src/constants/mapCameraState.js +0 -1
- package/src/constants/nativeLayerState.js +0 -1
- package/src/constants/onMapChangeState.js +0 -1
- package/src/constants/onZoomAnimState.js +0 -1
- package/src/constants/parts.js +0 -19
- package/src/constants/pumpState.js +0 -1
- package/src/constants/ringDirections.js +0 -10
- package/src/constants/roundProfile.js +0 -1
- package/src/constants/underEntryState.js +0 -1
- /package/src/{constants → globals}/TILE_RADIUS.js +0 -0
- /package/src/{constants → globals}/TILE_SIZE.js +0 -0
- /package/src/{constants → globals}/dark.js +0 -0
- /package/src/{constants → globals}/glass.js +0 -0
- /package/src/{constants → globals}/headlight.js +0 -0
- /package/src/{constants → globals}/moves.js +0 -0
- /package/src/{constants → globals}/nativeEventMaps.js +0 -0
- /package/src/{constants → globals}/nativeMethodHandlers.js +0 -0
- /package/src/{constants → globals}/paints.js +0 -0
- /package/src/{constants → globals}/pendingUpdates.js +0 -0
- /package/src/{constants → globals}/renderers.js +0 -0
- /package/src/{constants → globals}/shirt.js +0 -0
- /package/src/{constants → globals}/skin.js +0 -0
- /package/src/{constants → globals}/speed.js +0 -0
- /package/src/{constants → globals}/taillight.js +0 -0
- /package/src/{constants → globals}/trousers.js +0 -0
- /package/src/{constants/accessorTypes.js → globals/types.js} +0 -0
- /package/src/{constants → globals}/tyre.js +0 -0
- /package/src/{constants → globals}/white.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
(()=>{var ql=Object.defineProperty;var I=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var Hl=(e,t)=>{for(var r in t)ql(e,r,{get:t[r],enumerable:!0})};function wr(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var No=I(()=>{});function Sa(e){let t=this._cameraShiftRotate;!e.shiftKey||wr(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),t._map.setBearing(t._map.getBearing()+Math.sign(e.deltaY)*5))}var ba=I(()=>{No()});function Ca(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=Sa,e.addEventListener("wheel",this._wheel,{passive:!1,capture:!0})}var jo=I(()=>{ba()});function Ea(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var Zo=I(()=>{});var Ba,Aa=I(()=>{jo();Zo();Ba=L.Handler.extend({addHooks:Ca,removeHooks:Ea})});var N,fe=I(()=>{N={}});function _r(e){let t=N.dragStates.get(this);if(t.drag||!t.accept(e)||wr(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.({preventScroll:!0}),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var $o=I(()=>{fe();No()});function Pr(e){let t=N.dragStates.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;t.map._stopPitchBearingAnimation(),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*180/Math.PI}else i*=e.clientY<t.drag.cy?1:-1;t.map._setPitchAndBearing(t.map.getPitch()-o*t.sensitivity[1],t.map.getBearing()+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Vo=I(()=>{fe()});function ht(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Tr=I(()=>{});function Ne(e){ht(N.dragStates.get(this),e)}var qo=I(()=>{Tr();fe()});function Lr(e){let t=N.dragStates.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Ho=I(()=>{fe()});function Sr(e){let t=N.dragStates.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Wo=I(()=>{fe()});function br(){let e;for(e of N.cameraDrags)ht(e)}var Yo=I(()=>{fe();Tr()});function Cr(e,t,r,o=[.8,.5],i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return N.dragStates.set(t,n),N.cameraDrags.add(n),t.addEventListener("pointerdown",_r,!0),t.addEventListener("pointermove",Pr),t.addEventListener("pointerup",Ne),t.addEventListener("pointercancel",Ne),t.addEventListener("lostpointercapture",Ne),t.addEventListener("click",Lr,!0),t.addEventListener("contextmenu",Sr),window.addEventListener("blur",br),n}var Xo=I(()=>{fe();$o();Vo();qo();Ho();Wo();Yo()});function za(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var Ia=I(()=>{});function Da(){this._dragState=Cr(this._map,this._map.getContainer(),za,[.8,.5],!0)}var Ko=I(()=>{Xo();Ia()});function Ra(e){ht(e);let{element:t}=e;t.removeEventListener("pointerdown",_r,!0),t.removeEventListener("pointermove",Pr),t.removeEventListener("pointerup",Ne),t.removeEventListener("pointercancel",Ne),t.removeEventListener("lostpointercapture",Ne),t.removeEventListener("click",Lr,!0),t.removeEventListener("contextmenu",Sr),N.dragStates.delete(t),N.cameraDrags.delete(e),N.cameraDrags.size||window.removeEventListener("blur",br)}var Ua=I(()=>{Tr();$o();Vo();qo();Ho();Wo();fe();Yo()});function Er(){Ra(this._dragState)}var Br=I(()=>{Ua()});var Oa,Ga=I(()=>{Ko();Br();Oa=L.Handler.extend({addHooks:Da,removeHooks:Er})});function Fa(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&t._map.setBearing(r-o)}var Na=I(()=>{});function ja([e,t]){let{handler:r,generation:o}=e.value;try{if(!r.enabled()||r._generation!==o)return;if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")throw t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied");window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){r.disable(),r._map.fire("error",{error:i})}}var Za=I(()=>{});function $a(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:Fa};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(ja)}var Jo=I(()=>{Na();Za()});function Va(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Qo=I(()=>{});var qa,Ha=I(()=>{Jo();Qo();qa=L.Handler.extend({addHooks:$a,removeHooks:Va})});function Wa(e){e[0]?.target._containerResizeMap.invalidateSize()}var Ya=I(()=>{});function Xa(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Wa),this._observer.observe(e)}var ko=I(()=>{Ya()});function Ka(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var ei=I(()=>{});var Ja,Qa=I(()=>{ko();ei();Ja=L.Handler.extend({addHooks:Xa,removeHooks:Ka})});function ti(){this._map.fire("cameratouchchange")}var ka=I(()=>{});var ri,es=I(()=>{ka();ri=L.Handler.extend({addHooks:ti,removeHooks:ti})});function ts(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?r.resetNorthPitch():r.resetNorth(),e.detail&&r.getContainer().focus({preventScroll:!0})}var rs=I(()=>{});function os(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")r.setBearing(r.getBearing()-o);else if(e.key==="ArrowRight")r.setBearing(r.getBearing()+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)r.setPitch(r.getPitch()+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)r.setPitch(r.getPitch()-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var is=I(()=>{});function Ar(){let e=this._map,t=this.options.visualizePitch?e.getPitch():0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.cos(t*Math.PI/180))}) rotateX(${t}deg) rotate(${e.getBearing()}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(e.getBearing())} degrees, pitch ${Math.round(e.getPitch())} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!e.getBearing()&&!t&&!this._container.contains(document.activeElement)?"none":""}var oi=I(()=>{});function ns(e){return e.button===0}var as=I(()=>{});function ss(){Ar.call(this._rotateControl)}var fs=I(()=>{oi()});function ms(e){let t=L.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=L.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=L.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=ts,r.onkeydown=os,this._refresh=Ar,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Cr(e,r,ns,[.8,this.options.visualizePitch?.5:0]),r.addEventListener("focusout",ss),L.DomEvent.on(r,"dblclick contextmenu",L.DomEvent.stop),L.DomEvent.disableClickPropagation(t),L.DomEvent.disableScrollPropagation(t),t}var ls=I(()=>{rs();is();oi();Xo();as();fs()});function ps(e){e.off("rotate pitch",this._refresh,this),Er.call(this)}var us=I(()=>{Br()});function cs(e){return new L.Control.Rotate(e)}var ds=I(()=>{});function zr(e){let t=this._cameraTouchState,{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!r.touchRotate.enabled()&&!r.touchPitch.enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;r._stopPitchBearingAnimation();let a=new L.Point((i.clientX+n.clientX)/2,(i.clientY+n.clientY)/2).subtract(new L.Point(o.getBoundingClientRect().left,o.getBoundingClientRect().top));t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:a,anchor:r.containerPointToLatLng(a),zoom:r.getZoom(),bearing:r.getBearing(),pitch:r.getPitch(),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled()},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var ii=I(()=>{});function Ir(e){let t=this._cameraTouchState,{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),f=new L.Point((n.clientX+a.clientX)/2,(n.clientY+a.clientY)/2).subtract(new L.Point(o.getBoundingClientRect().left,o.getBoundingClientRect().top)),m=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*180/Math.PI;r._setPitchAndBearing(r.touchPitch.enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,r.touchRotate.enabled()?i.bearing+m:i.bearing);let l=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(l<1)return;let p=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(l/i.distance))):i.zoom;if(r.setView(r.getCenter(),p,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var ni=I(()=>{});function je(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Ut=I(()=>{});function gt(e){je(this._cameraTouchState,e)}var ai=I(()=>{Ut()});function Dr(){let e=this._cameraTouchState,{map:t,container:r}=e,o=t.touchRotate.enabled()||t.touchPitch.enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(je(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var si=I(()=>{Ut()});function Rr(){let e;for(e of N.cameraTouchStates)je(e)}var fi=I(()=>{fe();Ut()});function hs(){let e=this._cameraTouchState;if(!e)return;let{container:t,map:r}=e;je(e),t.removeEventListener("touchstart",zr,!0),t.removeEventListener("touchmove",Ir,!0),t.removeEventListener("touchend",gt,!0),t.removeEventListener("touchcancel",gt,!0),N.cameraTouchStates.delete(e),N.cameraTouchStates.size||window.removeEventListener("blur",Rr),r.off("cameratouchchange",Dr,r),r.rotateControl?.remove(),delete t._cameraTouchState,delete r._cameraTouchState}var gs=I(()=>{Ut();ii();ni();ai();fe();fi();si()});var xs={};Hl(xs,{cameraControls:()=>Yl});function Yl(e){if(e.addHandler("trackContainerMutation",Ja),!e.options.rotate)return;e.addHandler("shiftKeyRotate",Ba),e.addHandler("pitchDrag",Oa),e.addHandler("compassBearing",qa),e.addHandler("touchRotate",ri),e.addHandler("touchPitch",ri);let t=e.getContainer(),r=e._cameraTouchState={map:e,container:t,touch:null,nativeZoom:void 0};t._cameraTouchState=r,N.cameraTouchStates.add(r),t.addEventListener("touchstart",zr,{capture:!0,passive:!1}),t.addEventListener("touchmove",Ir,{capture:!0,passive:!1}),t.addEventListener("touchend",gt,!0),t.addEventListener("touchcancel",gt,!0),window.addEventListener("blur",Rr),e.on("cameratouchchange",Dr,e),e.options.rotateControl&&(e.rotateControl=new L.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:{}),e.rotateControl.addTo(e)),e.once("unload",hs,e)}var ys=I(()=>{Aa();Ga();Ha();Qa();es();fe();ls();us();ds();jo();Zo();Ko();Br();Jo();Qo();ko();ei();ii();ni();ai();si();gs();fi();N.cameraDrags=new Set;N.dragStates=new WeakMap;N.cameraTouchStates=new Set;L.Control.Rotate=L.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:ms,onRemove:ps});L.control&&(L.control.rotate=cs)});var W={};function Bt(e){let t;for(t of W.imageStates.get(e.currentTarget)||[])re(t)}function At(e){let t;for(t of W.imageStates.get(e.currentTarget)||[])t.source.fire("error",{error:new Error("Unable to load native layer image")})}function Jt(e,t){let r=W.imageStates.get(e);r&&(r.delete(t),r.size||W.imageStates.delete(e))}function Ti(e,t){let r=W.imageStates.get(e);r||W.imageStates.set(e,r=new Set),r.add(t)}function Li(e,t){let r=e._map,o,i,n;if(r._animatingZoom){e._zoomTransitions||=new Map;for(o of r.getContainer().getAnimations({subtree:!0}))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||e._zoomTransitions.has(o)||(i=o.currentTime||0,o.pause(),e._zoomTransitions.set(o,{start:t,time:i}));for([o,{start:n,time:i}]of e._zoomTransitions)o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);if(e._zoomView){let a=e._zoomView,s;for(o of e._zoomTransitions.keys())if(o.effect.target===r._proxy){s=o;break}let f=s?.effect.getComputedTiming().progress??Math.min(1,(t-a.start)/250),m=r.getZoomScale(a.targetZoom,a.zoom),l=1+(m-1)*f,p=r.project(a.from,a.zoom),u=r.project(a.to,a.zoom);r._cameraView={zoom:r.getScaleZoom(l,a.zoom),center:r.unproject(p.add(u.subtract(p).multiplyBy(m*f/l)),a.zoom)},r._updateCameraOverlays()}}}async function Si(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function O(e,t){Si(e,t,e.renderer.device.queue.onSubmittedWorkDone())}function bi(e,t){(!e._size||!e._size.equals(t))&&(e.renderer.width=t.x,e.renderer.height=t.y,e.renderer.canvas.width=Math.round(t.x*e.renderer.dpr),e.renderer.canvas.height=Math.round(t.y*e.renderer.dpr),e.renderer.canvas.style.width=`${t.x}px`,e.renderer.canvas.style.height=`${t.y}px`,e.renderer.depthTexture&&O(e,e.renderer.depthTexture),e.renderer.depthTexture=e.renderer.device.createTexture({size:[e.renderer.canvas.width,e.renderer.canvas.height],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT}),e._size=t)}function et(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function tt(e){let t=[],r,o;for(r=0;r<e.position.length;r++)t.push(e.position[r]-e.target[r]);let i=Math.hypot(...t)||1;for(r=0;r<3;r++)t[r]/=i;let n=et(e.up,t),a=Math.hypot(...n)||1;for(r=0;r<3;r++)n[r]/=a;let s=et(t,n),f=new DOMMatrix([n[0],n[1],n[2],0,s[0],s[1],s[2],0,t[0],t[1],t[2],0,...e.position,1]).inverse().toFloat64Array();for(o of f)if(!Number.isFinite(o))throw new Error("Singular 3D transform");for(r=0;r<16;r++)e.viewMatrix[r]=f[r];let m=1/Math.tan(e.fov*Math.PI/360),l=e.near,p=e.far,u=[m/e.aspect,0,0,0,0,m,0,0,0,0,p/(l-p),-1,0,0,p*l/(l-p),0];for(r=0;r<16;r++)e.projectionMatrix[r]=u[r];let d=new DOMMatrix(e.projectionMatrix).multiply(new DOMMatrix(e.viewMatrix)).toFloat64Array();for(r=0;r<16;r++)e.projectionViewMatrix[r]=d[r]}function Ci(e,t){let r,o,i,n,a,s,f;for(r of t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`)||[])if(!(e.x<r.min[0]||e.x>r.max[0]||e.y<r.min[1]||e.y>r.max[1])){for([o,i,n]of r.triangles)if(a=(i[1]-n[1])*(o[0]-n[0])+(n[0]-i[0])*(o[1]-n[1]),s=((i[1]-n[1])*(e.x-n[0])+(n[0]-i[0])*(e.y-n[1]))/a,f=((n[1]-o[1])*(e.x-n[0])+(o[0]-n[0])*(e.y-n[1]))/a,s>=0&&f>=0&&s+f<=1)return s*o[2]+f*i[2]+(1-s-f)*n[2]}return null}function zt(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Ei(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,f=[zt(t,i,n),zt(t,i+1,n),zt(t,i,n+1),zt(t,i+1,n+1)],m=0,l=null,p;for(p of f)Number.isFinite(p)&&(m||(l=p),m++);return m<4?l:(f[0]*(1-a)+f[1]*a)*(1-s)+(f[2]*(1-a)+f[3]*a)*s}function Y(e,t){if(!e._map||!e._terrainReady)return null;let r=t instanceof L.Point?t:e._map.project(t,e._terrainZoom);return Ci(r,e._bridges)??Ei(r,e._terrainTiles)}function Bi(e,t){let r=e._map,o=r._cameraView?.zoom??r.getZoom(),i=r._cameraView?.center??r.getCenter(),n=r.options.crs.scale(o)/(4007501668557849e-8*Math.cos(e._sceneOrigin.lat*Math.PI/180)),a=r.project(i,o).subtract(r.project(e._sceneOrigin,o)),s=t.y*1.5/n,f=[a.x/n,(r._terrain3D?Y(r._terrain3D,i):void 0)??0,a.y/n],m=r.getPitch()*Math.PI/180,l=r.getBearing()*Math.PI/180,p=e.camera;p.fov=2*Math.atan(1/3)*180/Math.PI,p.aspect=t.x/t.y,p.near=Math.max(.1,s/1e4),p.far=Math.max(1e4,s*10),p.position[0]=f[0]+Math.sin(l)*Math.sin(m)*s,p.position[1]=f[1]+Math.cos(m)*s,p.position[2]=f[2]+Math.cos(l)*Math.sin(m)*s,p.up[0]=-Math.sin(l)*Math.cos(m),p.up[1]=Math.sin(m),p.up[2]=-Math.cos(l)*Math.cos(m),p.target[0]=f[0],p.target[1]=f[1],p.target[2]=f[2],tt(p)}function ae(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n,a,s;if(e.matrix){let l=e._matrixState||=new Float64Array(16);for(n=0;n<16;n++)l[n]!==e.matrix[n]&&(i=!0),l[n]=e.matrix[n]}else{let l=e._transformState||=new Float64Array(9);for(n=0;n<9;n++)a=n<3?e.position[n]:n<6?e.rotation[n-3]:e.scale[n-6],l[n]!==a&&(i=!0),l[n]=a}if(!i){for(s of e.children)ae(s);return}let f;if(e.matrix)f=e.matrix;else{let l=180/Math.PI,p=new DOMMatrix().translate(...e.position);p.rotateAxisAngleSelf(0,1,0,e.rotation[1]*l),p.rotateAxisAngleSelf(1,0,0,e.rotation[0]*l),p.rotateAxisAngleSelf(0,0,1,e.rotation[2]*l),f=p.scale(...e.scale).toFloat64Array()}let m=t?new DOMMatrix(t.worldMatrix).multiply(new DOMMatrix(f)).toFloat64Array():f;for(n=0;n<16;n++)e.worldMatrix[n]=m[n];e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(s of e.children)ae(s)}function oe(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i;for(i=0;i<o.length;i++)t[i%3]=Math.min(t[i%3],o[i]),r[i%3]=Math.max(r[i%3],o[i]);let n=e.attributes.instanceOffset;if(n){let f,m,l,p;for(f=0;f<3;f++){for(l=1/0,p=-1/0,m=f;m<n.data.length;m+=n.size)l=Math.min(l,n.data[m]),p=Math.max(p,n.data[m]);t[f]=Math.fround(t[f]+l),r[f]=Math.fround(r[f]+p)}}let a=[];for(i=0;i<t.length;i++)a.push((t[i]+r[i])/2);let s=n?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:0;for(i=0;!n&&i<o.length;i+=3)s=Math.max(s,Math.hypot(o[i]-a[0],o[i+1]-a[1],o[i+2]-a[2]));e.bounds={min:t,max:r,center:a,radius:s}}function bo(e,t,r,o,i,n,a){if(!e.visible)return;if(e.geometry){t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),e.geometry.bounds||oe(e.geometry);let f=e.geometry.bounds,m=e.worldMatrix,l=f.center,p=m[0]*l[0]+m[4]*l[1]+m[8]*l[2]+m[12],u=m[1]*l[0]+m[5]*l[1]+m[9]*l[2]+m[13],d=m[2]*l[0]+m[6]*l[1]+m[10]*l[2]+m[14],c=r[2]*p+r[6]*u+r[10]*d+r[14],h=r[3]*p+r[7]*u+r[11]*d+r[15];e._sortDepth=c/h;let g=f.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));e._visibleInFrame=o[0][0]*p+o[0][1]*u+o[0][2]*d+o[0][3]>=-g*i[0]&&o[1][0]*p+o[1][1]*u+o[1][2]*d+o[1][3]>=-g*i[1]&&o[2][0]*p+o[2][1]*u+o[2][2]*d+o[2][3]>=-g*i[2]&&o[3][0]*p+o[3][1]*u+o[3][2]*d+o[3][3]>=-g*i[3]&&o[4][0]*p+o[4][1]*u+o[4][2]*d+o[4][3]>=-g*i[4]&&o[5][0]*p+o[5][1]*u+o[5][2]*d+o[5][3]>=-g*i[5],e._visibleInFrame&&n.push(e)}let s;for(s of e.children)bo(s,t,r,o,i,n,a)}function Ai(e,t,r){let i=e.camera.projectionViewMatrix,n=e.renderer,a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),f,m,l,p,u;for(f=0;f<6;f++){for(m=Math.floor(f/2),l=a[f],p=0;p<4;p++)u=p*4,l[p]=f===4?i[u+2]:f%2?i[u+3]-i[u+m]:i[u+3]+i[u+m];s[f]=Math.hypot(l[0],l[1],l[2])}let d=e._visibleMeshes||=[];d.length=0;let c=e._shadowMeshes||=[];c.length=0,r&&ae(e.scene),bo(e.scene,t,i,a,s,d,c)}function zi(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule({code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"});e.roofBlit={pipeline:t.createRenderPipeline({layout:"auto",vertex:{module:r,entryPoint:"vertexMain"},fragment:{module:r,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}}),sampler:t.createSampler({magFilter:"linear",minFilter:"linear"})}}}function rt(){return new L.Point(256,256)}function Ii(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Di(e,t,r,o,i,n,a){let s=e.renderer,f=s.device,m=e._map,l=new Float32Array(Math.max(1,t.length)*64),p=f.createBuffer({size:l.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),u=f.createCommandEncoder(),d=u.beginRenderPass({colorAttachments:[{view:e._roofRaster.texture.texture.createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]});d.setPipeline(s.roofBlit.pipeline),t.sort(Ii);let c,h,g,y,x,v,w,P,M,S;for([c,{tile:h,layer:g}]of t.entries())({coords:y,image:x}=h),v=h.texture,v.uploaded!==v.image&&(f.queue.copyExternalImageToTexture({source:x},{texture:v.texture},[v.texture.width,v.texture.height]),v.uploaded=v.image),l[c*64]=g.options.opacity,w=rt().multiplyBy(m.getZoomScale(r,y.z)),P=new L.Point(y.x,y.y).scaleBy(w).subtract(o),M=P.x*n/i.x,S=P.y*a/i.y,d.setViewport(M,S,Math.min(w.x*n/i.x,n-M),Math.min(w.y*a/i.y,a-S),0,1),d.setBindGroup(0,f.createBindGroup({layout:s.roofBlit.pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:v.texture.createView()},{binding:1,resource:s.roofBlit.sampler},{binding:2,resource:{buffer:p,offset:c*256,size:4}}]})),d.draw(4);d.end(),f.queue.writeBuffer(p,0,l),f.queue.submit([u.finish()]),p.destroy()}function Ri(e,t,r,o){let i=e._map,n=e.renderer,a=[],s=-1/0,f,m,l,p;for(f of t)for(m of f._rasterTiles.values())m.done&&!m.request.signal.aborted&&m.image&&(a.push({tile:m,layer:f}),s=Math.max(s,m.coords.z));a.length||(s=i.getZoom());let u=new L.Bounds;for({tile:{coords:l},layer:f}of a)p=rt().multiplyBy(i.getZoomScale(s,l.z)),u.extend(new L.Point(l.x,l.y).scaleBy(p)),u.extend(new L.Point(l.x+1,l.y+1).scaleBy(p));let d=u.min||i.project(e._sceneOrigin,s),c=u.isValid()?u.getSize():new L.Point(1,1),g=Math.min(1,4096/Math.max(c.x,c.y)),y=Math.max(1,Math.ceil(c.x*g)),x=Math.max(1,Math.ceil(c.y*g)),v=i.project(e._sceneOrigin,s),w=i.options.crs.scale(s)/(4007501668557849e-8*Math.cos(e._sceneOrigin.lat*Math.PI/180)),P=new DOMMatrix;P.m11=w/c.x,P.m33=w/c.y,P.m41=(v.x-d.x)/c.x,P.m43=(v.y-d.y)/c.y;let M=e._roofRaster?.texture;M&&(M.width!==y||M.height!==x)&&(O(e,M.texture),M.texture=n.device.createTexture({size:[y,x],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),M.width=y,M.height=x),e._roofRaster={signature:r,updatedAt:o,matrix:Array.from(P.toFloat64Array()),texture:M||{device:n.device,texture:n.device.createTexture({size:[y,x],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:n.device.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:y,height:x,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}},zi(n),Di(e,a,s,d,c,y,x)}function Ui(e,t){let r=e._map,o=[],i=!1,n;for(n of e._layers)if(n.options.roofTexture){i=!0;break}if(i){for(n of Object.values(r._layers))n._type==="pmtiles"&&n._rasterTiles&&n.options.opacity>0&&o.push(n);let a=[],s=!1;for(n of o)a.push(`${L.Util.stamp(n)}:${n._rasterVersion||0}:${n.options.opacity}:${n.options.zIndex}`),s||=!!n._loadingTiles;let f=a.join("|");(!e._roofRaster||e._roofRaster.signature!==f&&(!s||t-e._roofRaster.updatedAt>=50))&&Ri(e,o,f,t)}else e._roofRaster&&(O(e,e._roofRaster.texture.texture),e._roofRaster=null);return o}function Oi(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||(e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id)}function Gi(e){return e.sort(Oi)}function Fi(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=!1,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V;for(s of r){for(f=s._tileZoom,m=o.project(t._sceneOrigin,f),l=o.options.crs.scale(f)/(4007501668557849e-8*Math.cos(t._sceneOrigin.lat*Math.PI/180)),p=[1/0,1/0],u=[-1/0,-1/0],d=0;d<8;d++)c=d&1?i.max[0]:i.min[0],h=d&2?i.max[1]:i.min[1],g=d&4?i.max[2]:i.min[2],y=m.x+(n[0]*c+n[4]*h+n[8]*g+n[12])*l,x=m.y+(n[2]*c+n[6]*h+n[10]*g+n[14])*l,p[0]=Math.min(p[0],y),p[1]=Math.min(p[1],x),u[0]=Math.max(u[0],y),u[1]=Math.max(u[1],x);if(!(s.header.maxLat!==void 0&&s.header.minLon!==void 0&&s.header.minLat!==void 0&&s.header.maxLon!==void 0&&(v=o.project([s.header.maxLat,s.header.minLon],f),w=o.project([s.header.minLat,s.header.maxLon],f),p[0]=Math.max(p[0],v.x),p[1]=Math.max(p[1],v.y),u[0]=Math.min(u[0],w.x),u[1]=Math.min(u[1],w.y),p[0]>=u[0]||p[1]>=u[1]))){a=!0,P=[[p[0],p[1],u[0],u[1]]];for(M of s._rasterTiles.values())if(!(!M.done&&!M.error)){S=256*2**(f-M.coords.z),z=M.coords.x*S,T=M.coords.y*S,E=[];for([b,R,D,U]of P){if(G=Math.max(b,z),$=Math.max(R,T),H=Math.min(D,z+S),V=Math.min(U,T+S),G>=H||$>=V){E.push([b,R,D,U]);continue}R<$&&E.push([b,R,D,$]),V<U&&E.push([b,V,D,U]),b<G&&E.push([b,$,G,V]),H<D&&E.push([H,$,D,V])}if(P=E,!P.length)return!0}}}return!a}function Ni(e,t,r,o){let i=e._visibleMeshes,n=e._shadowMeshes,a=e.renderer,s=!1,f,m;for(f of i){if(f.program.uniforms.roofTexture&&!t.length&&(f._roofRevealed=!0),f.program.uniforms.roofTexture&&!f._roofRevealed&&t.length){if(f._roofCoverageSignature!==e._roofRaster?.signature&&(f._roofCoverageSignature=e._roofRaster?.signature,f._roofCovered=Fi(f,e,t)),!f._roofCovered){f._appearance=0;continue}f._roofRevealed=!0}f.fadeDuration&&(f.fadeStart??=f.tile?.loadedAt??r,m=Math.min(1,(r-f.fadeStart)/f.fadeDuration),f._appearance=m*m*(3-2*m),s||=m<1),o.push(f)}i.length=0,Gi(o);let l=1/0,p=-1/0;for(f of o)f.ground&&(l=Math.min(l,f.tile.coords.z),p=Math.max(p,f.tile.coords.z));a.groundOverlap=l!==p;let u=0;for(f of n)f.visible&&f._appearance!==0&&(n[u++]=f);return n.length=u,s}function Qt(e){let t=e.renderer.sunlight;t.bindGroup=e.renderer.device.createBindGroup({layout:t.layout,entries:[{binding:0,resource:{buffer:t.buffer}},{binding:1,resource:t.texture.createView()},{binding:2,resource:t.sampler},{binding:3,resource:{buffer:t.lights}}]})}function Co(e,t,r,o,i,n,a){let s,f,m,l,p,u,d,c,h,g;for(s of e)for(f=0;f<s.length;f+=8)for(m=s[f+3],l=s[f]-t,p=s[f+2]-r,u=Math.floor((p-m)/o);u<=Math.floor((p+m)/o);u++)for(d=Math.floor((l-m)/o);d<=Math.floor((l+m)/o);d++)if(c=u*i+d,a){for(h=0,g=n[c]*4;h<8;h++)a[g+h]=s[f+h];n[c]+=2}else n[c]++}function ji(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,f=new Float32Array(8);if(r){let m=1/0,l=1/0,p=-1/0,u=-1/0;for(o of e)for(i=0;i<o.length;i+=8)m=Math.min(m,o[i]-o[i+3]),p=Math.max(p,o[i]+o[i+3]),l=Math.min(l,o[i+2]-o[i+3]),u=Math.max(u,o[i+2]+o[i+3]);let d=Math.ceil((p-m)/s)+1,c=Math.ceil((u-l)/s)+1,h=new Uint32Array(d*c),g=new Uint32Array(d*c);Co(e,m,l,s,d,h);let y=0;for(n of h)y+=n;let x=(2+d*c+y*2)*4;if(x*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");f=new Float32Array(x),f.set([m,l,s,d,c,r,0,0]);let v=2+d*c;for(a=0;a<h.length;a++)h[a]&&(f[(2+a)*4]=g[a]=v,f[(2+a)*4+1]=h[a],v+=h[a]*2);Co(e,m,l,s,d,g,f)}return{data:f,count:r}}function Zi(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,f,m,l;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:f,flux:m}=e[o]),l=t[3]*i+t[7]*n+t[11]*a+t[15],r.set([(t[0]*i+t[4]*n+t[8]*a+t[12])/l,(t[1]*i+t[5]*n+t[9]*a+t[13])/l,(t[2]*i+t[6]*n+t[10]*a+t[14])/l,s,...f,m/(4*Math.PI)*.03],o*8);return r}function Eo(e,t,r){let o=t?.meshes.length===e.length,i=[],n=[],a,s,f,m,l,p,u;for(a=0;a<e.length;a++){for(s=e[a],f=s.worldMatrix,m=s.extras.lights,l=s._worldLights,p=!!l,u=0;u<f.length&&p;u++)p=f[u]===l.matrix[u];(!p||l.lights!==m)&&(l=s._worldLights={lights:m,matrix:[...f],data:Zi(m,f)}),o&&=t.meshes[a].mesh===s&&t.meshes[a].cache===l,i.push(l.data),n.push({mesh:s,cache:l})}return o?t:{...ji(i,r),meshes:n}}function Bo(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||[])Bo(o,t,r)}function $i(e){let{device:t,sunlight:r}=e.renderer,o=[],i=[],n;for(n of e._layers)!n.options.nightLight||!n.root.visible||Bo(n.root,o,i);let a=t.limits.maxStorageBufferBindingSize,s=Eo(o,r.staticLightGrid,a),f=Eo(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&f===r.dynamicLightGrid)return;let m=s.data.byteLength+f.data.byteLength;if(m>a)throw new Error("Streetlight grid exceeds GPU storage limit");let l=s!==r.staticLightGrid;r.lights.size<m&&(O(e,r.lights),r.lights=t.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Qt(e),l=!0),s.data[6]=s.data.length/4,l&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,f.data),r.lightCount=s.count+f.count,r.staticLightGrid=s,r.dynamicLightGrid=f}function Vi(e,t,r,o){let i=e.renderer,n=e.camera,a=n.viewMatrix,s=o?.direction,f=s?s[0]:-300,m=s?s[1]:500,l=s?s[2]:300,p=a[0]*f+a[4]*m+a[8]*l,u=a[1]*f+a[5]*m+a[9]*l,d=a[2]*f+a[6]*m+a[10]*l,c=Math.hypot(p,u,d)||1,h=Math.hypot(a[4],a[5],a[6])||1;(!i.uniformBuffer||i.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(i.uniformBuffer&&O(e,i.uniformBuffer),i.uniformBuffer=i.device.createBuffer({size:Math.max(64,t.length*4+r.length*2)*256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.uniformData=new Float32Array(i.uniformBuffer.size/4));let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),e._roofRaster?.matrix?g.set(e._roofRaster.matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=p/c,g[49]=u/c,g[50]=d/c,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/h,g[53]=a[5]/h,g[54]=a[6]/h;let y=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=y*y*(3-2*y);let x=o?.tint;g[56]=x?x[0]:1,g[57]=x?x[1]:1,g[58]=x?x[2]:1,g[59]=0,y>0&&$i(e),i.uniformSlot=1}function kt(e,t,r,o,i){let{geometry:n,program:a}=t,s=e.renderer.device,f=a.depthTest===!1||t.ground&&e.renderer.groundOverlap?"always":"less-equal",m=`${o}:${i}:${f}`,l=a.pipelineCache.get(m);l||(l=s.createRenderPipeline({layout:a.pipelineLayout,vertex:{module:a.vertex,entryPoint:"vertexMain",buffers:a.vertexBuffers},fragment:{module:a.fragment,entryPoint:"fragmentMain",targets:[{format:e.renderer.format,blend:a.transparent?{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}:void 0,writeMask:GPUColorWrite.ALL}]},primitive:{topology:"triangle-list",cullMode:o,frontFace:i},depthStencil:{format:"depth24plus",depthWriteEnabled:a.depthWrite,depthCompare:f}}),a.pipelineCache.set(m,l));let p=a.uniforms,u=e.renderer,d=u.uniformSlot++*256,c=u.uniformData,h=d/4;c.set(t.worldMatrix,h),c.set(p.baseColor.value,h+16),c[h+19]=1,c[h+20]=p.metallic.value,c[h+21]=p.roughness.value,c[h+22]=p.opacity.value*(t.ground?t._appearance??1:1),c[h+23]=p.alphaCutoff.value,c.set(p.emissive.value,h+24),c[h+27]=p.occlusionStrength.value,c[h+28]=t.terrain?.[0]??0,c[h+29]=t.terrain?.[1]??0,c[h+30]=t.terrain?.[2]??0,c[h+31]=t.terrain?.[3]??0,c[h+32]=t.highlight?.[0]??0,c[h+33]=t.highlight?.[1]??0,c[h+34]=a.nightSparkle?c[55]:0,c[h+35]=t.ground?1:t._appearance??1;let g=t._textures||=[];g.length=0;let y,x,v,w;for(y of a.bindings){if(x=p[y.name]?.value,!x)throw new Error(`Missing Layer3D texture: ${y.name}`);x.uploaded!==x.image&&(s.queue.copyExternalImageToTexture({source:x.image,flipY:!!x.flipY},{texture:x.texture},[x.image.width,x.image.height]),x.uploaded=x.image),g.push(x)}let P=!t.bindGroup||t.boundBuffer!==u.uniformBuffer||g.length!==t.boundTextures.length;for(v=0;!P&&v<g.length;v++)(g[v].texture!==t.boundTextures[v][0]||g[v].sampler!==t.boundTextures[v][1])&&(P=!0);if(P){let z=[{binding:0,resource:{buffer:u.uniformBuffer,size:144}},{binding:1,resource:{buffer:u.uniformBuffer,size:240}}];a.terrain&&z.push({binding:2,resource:a.terrain.texture.createView()}),t.boundBuffer=u.uniformBuffer;let T=t.boundTextures||=[];for(T.length=g.length,v=0;v<g.length;v++)y=a.bindings[v],x=g[v],z.push({binding:y.texture,resource:x.texture.createView()}),z.push({binding:y.sampler,resource:x.sampler}),T[v]||=[],T[v][0]=x.texture,T[v][1]=x.sampler;t.bindGroup=s.createBindGroup({layout:a.bindGroupLayout,entries:z})}r.setPipeline(l),r.setBindGroup(0,t.bindGroup,[d]),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let M=n.attributes.instanceOffset;M&&r.setVertexBuffer(4,M.buffer);for(w of Object.values(n.attributes))w.needsUpdate&&(s.queue.writeBuffer(w.buffer,0,w.data),w.needsUpdate=!1,n.bounds=null);let S=n.attributes.index;S?(r.setIndexBuffer(S.buffer,S.indexFormat),r.drawIndexed(n.drawRange.count,M?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,M?.count??1,n.drawRange.start,0)}function qi(e,t,r){let o=e.renderer,i=t.beginRenderPass({colorAttachments:[{view:o.context.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.depthTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,f,m,l;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=e._roofRaster?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(f=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(f)||f===0)throw new Error("Singular 3D transform");n._frontFace=f<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}m=n._frontFace,l=n.program,l.transparent&&l._layerMaterial.doubleSided&&!n._nativeSource?(kt(e,n,i,"front",m),kt(e,n,i,"back",m)):kt(e,n,i,l.cullMode,m)}i.end()}function Hi(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a,s,f,m;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i)for(a of t){if(s=o.meshes.get(a),f=a.geometry.drawRange,!(s&&s.world===a._worldMatrixVersion&&s.geometry===a.geometry&&s.start===f.start&&s.count===f.count&&s.appearance===(a._appearance??1))){i=!1;break}for(m of Object.values(a.geometry.attributes))if(m.needsUpdate){i=!1;break}if(!i)break}return i}function Wi(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o,i,n,a,s,f,m,l,p,u,d;for(o of e){if((!o.geometry.bounds||o.geometry.attributes.position.needsUpdate)&&oe(o.geometry),i=o.geometry.bounds,n=o.worldMatrix,a=o._shadowBounds,!a||a.version!==o._worldMatrixVersion||a.bounds!==i)for(a=o._shadowBounds={version:o._worldMatrixVersion,bounds:i,min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},s=0;s<8;s++)for(f=s&1?i.max[0]:i.min[0],m=s&2?i.max[1]:i.min[1],l=s&4?i.max[2]:i.min[2],p=n[3]*f+n[7]*m+n[11]*l+n[15],u=0;u<3;u++)d=(n[u]*f+n[u+4]*m+n[u+8]*l+n[u+12])/p,a.min[u]=Math.min(a.min[u],d),a.max[u]=Math.max(a.max[u],d);for(u=0;u<3;u++)t[u]=Math.min(t[u],a.min[u]),r[u]=Math.max(r[u],a.max[u])}return t[1]=Math.min(0,t[1]),{min:t,max:r}}function Yi(e,t){let{min:r,max:o}=Wi(e),i=[],n=[],a=[],s,f,m,l,p,u;for(s=0;s<3;s++)i[s]=o[s]-r[s],n[s]=(r[s]+o[s])/2;let d=Math.max(100,Math.hypot(...i));for(s=0;s<3;s++)a[s]=n[s]+t.direction[s]*d*2;let c={position:a,target:n,up:[0,0,-1],fov:45,aspect:1,near:1,far:d*5,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};tt(c);let h=new DOMMatrix(c.viewMatrix),g=[1/0,1/0,1/0],y=[-1/0,-1/0,-1/0];for(s=0;s<8;s++){for(f=[],m=0;m<3;m++)f[m]=s&1<<m?o[m]:r[m];for(l=new DOMPoint(...f,1).matrixTransform(h),p=[l.x,l.y,l.z],m=0;m<3;m++)u=p[m],g[m]=Math.min(g[m],u-20),y[m]=Math.max(y[m],u+20)}for(s=0;s<3;s++)i[s]=y[s]-g[s];return new DOMMatrix([2/i[0],0,0,0,0,2/i[1],0,0,0,0,-1/i[2],0,-(y[0]+g[0])/i[0],-(y[1]+g[1])/i[1],y[2]/i[2],1]).multiply(h).toFloat32Array()}function Ao(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}}]}),t.depthLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}}]}),t.depthBindGroup=e.createBindGroup({layout:t.depthLayout,entries:[{binding:0,resource:{buffer:t.buffer}}]}));let i=e.createShaderModule({code:` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`}),n=[{arrayStride:12,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]}];r&&n.push({arrayStride:16,stepMode:"instance",attributes:[{shaderLocation:4,offset:0,format:"float32x4"}]}),t[o]=e.createRenderPipeline({layout:e.createPipelineLayout({bindGroupLayouts:[t.meshLayout,t.depthLayout]}),vertex:{module:i,entryPoint:"main",buffers:n},fragment:{module:i,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}})}}function Xi(e,t,r){let o=e.renderer,i=o.device,n=o.sunlight,a=t.beginRenderPass({colorAttachments:[],depthStencilAttachment:{view:n.texture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}}),s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let f,m,l,p,u,d,c;for(f of r){m=f.geometry.attributes.instanceOffset,l=m?n.instancePipeline:n.pipeline,l!==s&&(s=l,a.setPipeline(s)),p=o.uniformSlot++*256,o.uniformData.set(f.worldMatrix,p/4),o.uniformData[p/4+35]=f._appearance??1,f._shadowBuffer!==o.uniformBuffer&&(f._shadowBuffer=o.uniformBuffer,f._shadowBindGroup=i.createBindGroup({layout:n.meshLayout,entries:[{binding:0,resource:{buffer:o.uniformBuffer,size:144}}]}));for(u of Object.values(f.geometry.attributes))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,f._shadowBindGroup,[p]),a.setVertexBuffer(0,f.geometry.attributes.position.buffer),m&&a.setVertexBuffer(1,m.buffer),d=f.geometry.attributes.index,c=f.geometry.drawRange,d?(a.setIndexBuffer(d.buffer,d.indexFormat),a.drawIndexed(c.count,m?.count??1,c.start,0,0)):a.draw(c.count,m?.count??1,c.start,0)}a.end()}function er(e,t){let r=e.renderer.device,o=e.renderer.sunlight;o.size!==t&&(o.texture&&O(e,o.texture),o.size=t,o.texture=r.createTexture({size:[t,t],format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}),Qt(e))}function Ki(e,t,r,o){let i=e.renderer,n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;let p=new Float32Array(20);p.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),n.queue.writeBuffer(a.buffer,0,p),a.enabled=!1,a.cache=null;return}if(Hi(a,r,o))return;let s=new Float32Array(20);a.enabled=!0,er(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Yi(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),Ao(n,a);let f;for(f of r)if(f.geometry.attributes.instanceOffset){Ao(n,a,!0);break}Xi(e,t,r);let m=new Map,l;for(l of r)m.set(l,{world:l._worldMatrixVersion,geometry:l.geometry,start:l.geometry.drawRange.start,count:l.geometry.drawRange.count,appearance:l._appearance??1});a.cache={direction:[...o.direction],meshes:m}}var Le=new Set;function tr(e){let t=e._frame;Le.delete(e),e._frame=null,!Le.size&&t!=null&&cancelAnimationFrame(t)}function j(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function ot(e,t){e._terrainRequest?.abort();let r=e._rasterTiles.get(t);r&&(j(r,null),B(e),r.texture!==t.texture&&O(e,r.texture.texture),e._rasterTiles.delete(t))}function it(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;e._rasterTiles.get(r)===t&&(e._rasterTiles.delete(r),e._rasterVersion=(e._rasterVersion||0)+1,t.request.abort(),e._terrain3D&&ot(e._terrain3D,t),t.mesh&&j(t.mesh,null),t.texture&&O(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),B(e))}function nt(e){let t=e._wantedRasterTiles,r=performance.now();if(e._pruneVersion===e._rasterVersion&&e._pruneWanted===t&&r<e._pruneAfter)return Number.isFinite(e._pruneAfter);e._pruneVersion=e._rasterVersion,e._pruneWanted=t,e._pruneAfter=1/0;let o=[],i,n,a,s,f,m;for(i of t)n=e._rasterTiles.get(i),n?.done&&r-n.loadedAt<250&&(e._pruneAfter=Math.min(e._pruneAfter,n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of e._rasterTiles)if(!t.has(i)){s=!1;for(f of o)if(m=Math.min(f.z,n.coords.z),Math.floor(f.x/2**(f.z-m))===Math.floor(n.coords.x/2**(n.coords.z-m))&&Math.floor(f.y/2**(f.z-m))===Math.floor(n.coords.y/2**(n.coords.z-m))){s=!0;break}s||it(e,n)}return Number.isFinite(e._pruneAfter)}function Oe(e){if(tr(e),e._shared!==e||!e.renderer)return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Li(e,r),bi(e,o),Bi(e,o),ae(e.scene);let i=!1,n;for(n of e._layers)n._beforeRender&&(n._beforeRender(),i=!0);let a=t._sunlight;Ai(e,a,i);let s=e._shadowMeshes,f=e.renderer,m=Ui(e,r),l=f.frameMeshes||=[];l.length=0;let p=Ni(e,m,r,l),u=f.device.createCommandEncoder();Vi(e,l,s,a),Ki(e,u,s,a),qi(e,u,l),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit([u.finish()]);for(n of e._layers)n._wantedRasterTiles&&(p=nt(n)||p);(t._animatingZoom||p)&&B(e)}function Ji(){let e=[...Le];Le.clear();let t,r;for(r of e)if(r._frame=null,!(r._shared!==r||!r.renderer))try{Oe(r)}catch(o){t||=o}if(t)throw t}function B(e){let t=e._shared;if(!t)return e;if(t!==e)return B(t),e;if(e._frame!=null)return e;let r=Le.values().next().value;return Le.add(e),e._frame=r?r._frame:requestAnimationFrame(Ji),e}function re(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.hide();let t=[e.source._icon,e.source._shadow,e.source._image],r;for(r of e.images)t.includes(r)||(r.removeEventListener("load",Bt),r.removeEventListener("error",At),Jt(r,e),e.images.delete(r));for(r of t)!(r instanceof HTMLImageElement)||e.images.has(r)||(e.images.add(r),Ti(r,e),r.addEventListener("load",Bt),r.addEventListener("error",At));e.backend._shared&&B(e.backend)}function Z(e,t,r){let o=t._nativeGPU,n=o.originalMethods.get(e).apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof L.GridLayer){let f=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof L.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,f=e==="bringToFront"?Math.max(f,s):Math.min(f,s));let m=e==="bringToFront"?f+1:f-1;Number.isFinite(m)&&t.setZIndex(m)}return e==="bringToFront"&&(o.order=++o.map._nativeGPUOrder),e==="bringToBack"&&(o.order=--o.map._nativeGPUBack),re(o),n}function Qi(...e){return Z("setLatLng",this,e)}function ki(...e){return Z("setLatLngs",this,e)}function en(...e){return Z("addLatLng",this,e)}function tn(...e){return Z("setRadius",this,e)}function rn(...e){return Z("setStyle",this,e)}function on(...e){return Z("redraw",this,e)}function nn(...e){return Z("setIcon",this,e)}function an(...e){return Z("setUrl",this,e)}function sn(...e){return Z("setBounds",this,e)}function fn(...e){return Z("setOpacity",this,e)}function mn(...e){return Z("setZIndex",this,e)}function ln(...e){return Z("setZIndexOffset",this,e)}function pn(...e){return Z("bringToFront",this,e)}function un(...e){return Z("bringToBack",this,e)}var cn={setLatLng:Qi,setLatLngs:ki,addLatLng:en,setRadius:tn,setStyle:rn,redraw:on,setIcon:nn,setUrl:an,setBounds:sn,setOpacity:fn,setZIndex:mn,setZIndexOffset:ln,bringToFront:pn,bringToBack:un};var dn=new WeakMap;var F={renderers:dn,nextId:0};function J(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0}}function at(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function hn(e={},t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!e.roofTexture,f=!!e.terrain,m=o||i||n||a||e.nightLight,l=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${f?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${e.instanced?" + input.instanceOffset.xyz":""};${f?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${e.instanced?" + input.instanceOffset.xyz":""};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${m?"output.uv = input.uv;":""} ${s?" output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,1.0,input.normal.y >= 0.5 && !highlighted);":""} output.position = frame.projectionMatrix * viewPosition;return output;}`,p=[],u=at(p,"baseTexture",o),d=at(p,"metalTexture",i),c=at(p,"emissiveTexture",n),h=at(p,"occlusionTexture",a),g=at(p,"roofTexture",s),y=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${u}${d}${c}${h}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${e.unlit?` let rasterTexel = ${o?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${o?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${s?" if(input.roof > 0.5 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a);}":""} let mr = ${i?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${a?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${n?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}}`;return{vertex:l,fragment:y,bindings:p,textured:m,hasTerrain:f}}var gn=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";async function xn(e,t){let r,o;try{let i=await Promise.all(t),n=[];for(r of i)for(o of r.messages)o.type==="error"&&n.push(o.message);n.length&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n.join(`
|
|
2
|
-
`)}`)})}catch(i){e.fire("error",{error:i})}}function se(e,t={}){let r=hn(t,!!e.options.nightSparkle,t.terrain?gn:""),o=e.renderer.device.createShaderModule({code:r.vertex}),i=e.renderer.device.createShaderModule({code:r.fragment});xn(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[{arrayStride:12,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]},{arrayStride:12,attributes:[{shaderLocation:1,offset:0,format:"float32x3"}]},t.vertexColors?{arrayStride:12,attributes:[{shaderLocation:2,offset:0,format:"float32x3"}]}:null,r.textured?{arrayStride:8,attributes:[{shaderLocation:3,offset:0,format:"float32x2"}]}:null];t.instanced&&n.push({arrayStride:16,stepMode:"instance",attributes:[{shaderLocation:4,offset:0,format:"float32x4"}]});let a=[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}];r.hasTerrain&&a.push({binding:2,visibility:GPUShaderStage.VERTEX,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}});let s;for(s of r.bindings)a.push({binding:s.texture,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d"}}),a.push({binding:s.sampler,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}});let f=e.renderer.device.createBindGroupLayout({entries:a}),m=e.renderer.device.createPipelineLayout({bindGroupLayouts:[f,e.renderer.sunlight.layout]});return{device:e.renderer.device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:f,pipelineLayout:m,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:{baseColor:{value:t.color||[1,1,1]},metallic:{value:t.metallic??0},roughness:{value:t.roughness??.85},opacity:{value:t.opacity??1},alphaCutoff:{value:t.alphaCutoff??.5},occlusionStrength:{value:t.occlusionStrength??1},emissive:{value:t.emissive||[0,0,0]},...t.baseTexture?{baseTexture:{value:t.baseTexture}}:{},...t.metalTexture?{metalTexture:{value:t.metalTexture}}:{},...t.emissiveTexture?{emissiveTexture:{value:t.emissiveTexture}}:{},...t.occlusionTexture?{occlusionTexture:{value:t.occlusionTexture}}:{},...t.roofTexture?{roofTexture:{value:null}}:{}},_layerMaterial:t}}function Ge(e,t,r={},o=0,i){let{device:n}=e.renderer,a={},s,f,m,l,p;for([s,f]of Object.entries(t))m=new Float32Array(f),l=s==="uv"?2:3,p=n.createBuffer({size:Math.max(4,m.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o}),n.queue.writeBuffer(p,0,m),a[s]={size:l,data:m,count:m.length/l,buffer:p};let u={...J(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||se(e,{vertexColors:!0,doubleSided:!0,...r}),id:F.nextId++,renderOrder:0,extras:{}};return j(u,e.root),B(e),u}function k(e,t){if(!t)return;j(t,null),B(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}function rr(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function Q(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ue(e,t){return e.x===t.x&&e.y===t.y}function Mn(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],ue(o,i)||Math.abs(Q(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function or(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function wn(e,t){let r;for(r=1;r<t.length;r++)if(or(e,t[r]))return!0;return!1}function It(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function _n(e,t,r,o){if(ue(e,r)||ue(e,o)||ue(t,r)||ue(t,o))return!1;let i=Q(e,t,r),n=Q(e,t,o),a=Q(r,o,e),s=Q(r,o,t);return i*n<0&&a*s<0||i===0&&It(e,t,r)||n===0&&It(e,t,o)||a===0&&It(r,o,e)||s===0&&It(r,o,t)}function zo(e,t,r){let o;for(o=0;o<r.length;o++)if(_n(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function Pn(e,t,r,o){if(zo(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(zo(e,t,o[i]))return!0;return!1}function Tn(e,t,r,o){let i;for(i of e)if(!ue(i,t)&&!ue(i,r)&&!ue(i,o)&&Q(t,r,i)>=0&&Q(r,o,i)>=0&&Q(o,t,i)>=0)return!0;return!1}function Io(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function Ln(e){let t=[],r;for(r of e)t.push(r.x);return Math.min(...t)}function Sn(e){let t=new Array(e.length),r=[],o,i,n,a,s,f,m,l,p,u;for(o of e)r.push({ring:o,x:Ln(o)});let d=r,c=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)for(a=Math.min(n+i,r.length),s=Math.min(n+i*2,r.length),f=n,m=a,l=n;l<s;l++)f<a&&(m>=s||d[f].x<=d[m].x)?c[l]=d[f++]:c[l]=d[m++];p=d,d=c,c=p}for(u=0;u<e.length;u++)e[u]=d[u].ring;return e}function st(e,t=[]){let r=[e,...t].flat(),o,i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w;for(o of r)if(!Number.isFinite(o.x)||!Number.isFinite(o.y))throw new Error("Invalid polygon coordinates");let P=[];for(i=0;i<r.length;i++)o=r[i],P.push({x:o.x-e[0].x,y:o.y-e[0].y,index:i});let M=0,S=[],z=[e,...t];for(i=0;i<z.length;i++)n=z[i],a=Mn(P.slice(M,M+=n.length)),rr(a)!==!!i&&a.reverse(),S.push(a);let T=S[0].slice(),E=Sn(S.slice(1));for(s of E){for(f=void 0,m=1/0,l=0;l<s.length;l++)for(o=0;o<T.length;o++)p=s[l],u=T[o],d=(p.x-u.x)**2+(p.y-u.y)**2,!(d>=m)&&(c={x:(p.x+u.x)/2,y:(p.y+u.y)/2},!(!or(c,S[0])||wn(c,S))&&(Pn(p,u,T,S)||(f=[l,o],m=d)));if(!f)throw new Error("Unable to connect polygon hole");[h,g]=f,T=[...T.slice(0,g+1),...s.slice(h),...s.slice(0,h+1),T[g],...T.slice(g+1)]}let b=[];for(;T.length>3;){for(y=!1,x=0;x<T.length;x++)if(p=T[(x+T.length-1)%T.length],u=T[x],v=T[(x+1)%T.length],!(Q(p,u,v)<=1e-10)&&!Tn(T,p,u,v)){b.push([p.index,u.index,v.index]),T.splice(x,1),y=!0;break}if(!y)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Q(...T)>1e-10){let G=[];for(o of T)G.push(o.index);b.push(G)}let R=0,D=0;for(x=1;x<S.length;x++)R+=Io(S[x]);let U=Io(S[0])-R;for(w of b)D+=Q(P[w[0]],P[w[1]],P[w[2]])/2;if(U<=0||Math.abs(D-U)>Math.max(1e-7,U*1e-8))throw new Error("Polygon triangulation area mismatch");return b}function ve(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}function Do(e,t,r,o,i){return new L.Point(e.x+t*Math.cos(i*2*Math.PI/o),e.y+r*Math.sin(i*2*Math.PI/o))}function Ye(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)ve(e,o,t,Do(t,r,i,n,a),Do(t,r,i,n,a+1))}function Fe(e,t,r,o,i,n=0){let a=i*Math.PI*2/o;return new L.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function Ro(e,t,r,o,i){let{options:n,width:a,stroke:s,point:f}=e,m=a/2,l=t.distanceTo(r);if(!l)return;let p=r.subtract(t).divideBy(l),u=new L.Point(-p.y*m,p.x*m);n.lineCap==="square"&&(o&&(t=t.subtract(p.multiplyBy(m))),i&&(r=r.add(p.multiplyBy(m)))),ve(f,s,t.add(u),t.subtract(u),r.add(u)),ve(f,s,r.add(u),t.subtract(u),r.subtract(u)),n.lineCap==="round"&&(o&&Ye(f,t,m,s),i&&Ye(f,r,m,s))}function ir(e,t,r){let{options:o,width:i,dash:n,stroke:a,point:s}=e;if(!o.stroke||i<=0||t.length<2)return;let f=i/2,m=Number(o.dashOffset)||0,l=0,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G;for(p of n)l+=p;for(u=0;u<t.length-(r?0:1);u++){if(d=t[u],c=t[(u+1)%t.length],h=d.distanceTo(c),!n.length)Ro(e,d,c,!r&&u===0,!r&&u===t.length-2),(r||u>0)&&(o.lineJoin==="round"?Ye(s,d,f,a):(g=d.subtract(t[(u+t.length-1)%t.length]),y=Math.hypot(g.x,g.y),y&&h&&(x=g.divideBy(y),v=c.subtract(d).divideBy(h),w=x.x*v.y-x.y*v.x>0?-1:1,P=new L.Point(-x.y*w,x.x*w),M=new L.Point(-v.y*w,v.x*w),S=d.add(P.multiplyBy(f)),z=d.add(M.multiplyBy(f)),T=1+P.x*M.x+P.y*M.y,E=T>0?P.add(M).multiplyBy(f/T):null,ve(s,a,S,d,z),o.lineJoin==="miter"&&E&&Math.hypot(E.x,E.y)<=f*4&&ve(s,a,S,d.add(E),z))));else for(b=0;b<h;){for(R=((m+b)%l+l)%l,D=0;R>=n[D];)R-=n[D++];U=Math.min(h,b+n[D]-R),D%2===0&&(G=c.subtract(d).divideBy(h),Ro(e,d.add(G.multiplyBy(b)),d.add(G.multiplyBy(U)),!0,!0)),b=U}m+=h}}function Uo(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],f,m,l,p;for(f of t){m=[];for(l of f)m.push(a.project(l));s.push(m)}if(r&&o.fill&&s[0]?.length>=3){let u=[];for(f of s)f.length>=3&&u.push(f);let d=u.flat();for(p of st(u[0],u.slice(1)))ve(n,i,d[p[0]],d[p[1]],d[p[2]])}for(f of s)ir(e,f,r)}function Oo(e,t,r){if(!t.length)return;let o;if(t[0]instanceof L.LatLng)Uo(e,[t],r);else if(r&&t[0][0]instanceof L.LatLng)Uo(e,t,r);else for(o of t)Oo(e,o,r)}function bn(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Array.isArray(n.dashArray)?n.dashArray:String(n.dashArray||"").trim().split(/[ ,]+/),f=[],m,l,p;for(m of s)f.push(Number(m));let u=!0;for(m of f){if(!Number.isFinite(m)||m<0)throw new Error("Invalid Leaflet dashArray");m!==0&&(u=!1)}u&&(f.length=0),f.length%2&&f.push(...f);let d={fill:o,stroke:i,options:n,width:a,dash:f,point:r,map:t};if(e instanceof L.CircleMarker){let c=t.project(e.getLatLng()),h=e.getRadius(),g=h;if(e instanceof L.Circle){e._project();let x=e._point.add(t.getPixelOrigin());c.x=x.x,c.y=x.y,h=e._radius,g=e._radiusY||h}n.fill&&Ye(r,c,h,o,g);let y=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(h,g)))));if(f.length){let x=[];for(l=0;l<y;l++)x.push(Fe(c,h,g,y,l));ir(d,x,!0)}else if(n.stroke&&a>0)for(p=0;p<y;p++)triangle(r,i,Fe(c,h,g,y,p,a/2),Fe(c,h,g,y,p,-a/2),Fe(c,h,g,y,p+1,a/2)),triangle(r,i,Fe(c,h,g,y,p+1,a/2),Fe(c,h,g,y,p,-a/2),Fe(c,h,g,y,p+1,-a/2))}else{let c=e instanceof L.Polygon;Oo(d,e.getLatLngs(),c)}return{fill:o,stroke:i}}function nr(e,t){let r=[],o;for(o=0;o<e.length;o++)r.push(e[o]-t[o]);return r}function Dt(e,t){let r=0,o;for(o=0;o<e.length;o++)r+=e[o]*t[o];return r}function Cn(e){let t=new Array(e.length),r=e,o=t,i,n,a,s,f,m,l,p,u;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)for(a=Math.min(n+i,e.length),s=Math.min(n+i*2,e.length),f=n,m=a,l=n;l<s;l++)f<a&&(m>=s||!(r[m].distance<r[f].distance))?o[l]=r[f++]:o[l]=r[m++];p=r,r=o,o=p}if(r!==e)for(u=0;u<e.length;u++)e[u]=r[u];return e}function En(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V,ee,he,Ie,ge,De,X,xe,te,le,pe,Te,ne,Re,ye,Ue;for(s of t){f=new DOMMatrix(s.worldMatrix).inverse(),m=f.toFloat64Array();for(l of m)if(!Number.isFinite(l))throw new Error("Singular 3D transform");for(p=new DOMPoint(...e.origin,1).matrixTransform(f),u=[p.x/p.w,p.y/p.w,p.z/p.w],d=new DOMPoint(...e.direction,0).matrixTransform(f),c=[d.x,d.y,d.z],h=Math.hypot(...c)||1,c[0]/=h,c[1]/=h,c[2]/=h,s.geometry.bounds||oe(s.geometry),g=0,y=1/0,x=0;x<3;x++)if(Math.abs(c[x])<1e-12){if(u[x]<s.geometry.bounds.min[x]||u[x]>s.geometry.bounds.max[x]){y=-1/0;break}}else v=(s.geometry.bounds.min[x]-u[x])/c[x],w=(s.geometry.bounds.max[x]-u[x])/c[x],g=Math.max(g,Math.min(v,w)),y=Math.min(y,Math.max(v,w));if(!(y<g)){for({position:P,index:M,instanceOffset:S}=s.geometry.attributes,z=M?.count||P.count,T=1/0,E=void 0,x=0;x<z*(S?.count??1);x+=3)b=S?x%z:x,R=S?Math.floor(x/z)*S.size:0,D=S?.data[R]??0,U=S?.data[R+1]??0,G=S?.data[R+2]??0,$=(M?M.data[b]:b)*P.size,H=(M?M.data[b+1]:b+1)*P.size,V=(M?M.data[b+2]:b+2)*P.size,i[0]=P.data[$],i[1]=P.data[$+1],i[2]=P.data[$+2],n[0]=P.data[H],n[1]=P.data[H+1],n[2]=P.data[H+2],a[0]=P.data[V],a[1]=P.data[V+1],a[2]=P.data[V+2],S&&(i[0]=Math.fround(i[0]+D),i[1]=Math.fround(i[1]+U),i[2]=Math.fround(i[2]+G),n[0]=Math.fround(n[0]+D),n[1]=Math.fround(n[1]+U),n[2]=Math.fround(n[2]+G),a[0]=Math.fround(a[0]+D),a[1]=Math.fround(a[1]+U),a[2]=Math.fround(a[2]+G)),ee=nr(n,i),he=nr(a,i),Ie=et(c,he),ge=Dt(ee,Ie),!(s.program.cullMode==="none"||s.program.cullFace===null?Math.abs(ge)<1e-9:ge<1e-9)&&(De=nr(u,i),X=Dt(De,Ie)/ge,!(X<0||X>1)&&(xe=et(De,ee),te=Dt(c,xe)/ge,!(te<0||X+te>1)&&(s.program.nightLight&&(le=s.geometry.attributes.uv.data,pe=M?[M.data[x],M.data[x+1],M.data[x+2]]:[x,x+1,x+2],Te=le[pe[0]*2]*(1-X-te)+le[pe[1]*2]*X+le[pe[2]*2]*te,ne=le[pe[0]*2+1]*(1-X-te)+le[pe[1]*2+1]*X+le[pe[2]*2+1]*te,Te<=2&&(!r||Te*Te+ne*ne>.9))||(Re=Dt(he,xe)/ge,Re>0&&Re<T&&(T=Re,E=x/3)))));E!==void 0&&(ye=new DOMPoint(c[0]*T+u[0],c[1]*T+u[1],c[2]*T+u[2],1).matrixTransform(new DOMMatrix(s.worldMatrix)),Ue=[ye.x/ye.w,ye.y/ye.w,ye.z/ye.w],o.push({faceIndex:E,object:s,point:Ue,distance:Math.hypot(Ue[0]-e.origin[0],Ue[1]-e.origin[1],Ue[2]-e.origin[2])}))}}return Cn(o)}function Rt(e,t,r){if(t(e,r))return;let o;for(o of e.children)Rt(o,t,r)}function Bn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function ar(e,t,r=e.root.children,o=!0){if(!e.renderer)return[];e._beforeRaycast?.();let i=e._map.getContainer().getBoundingClientRect();ae(e.scene),tt(e.camera);let n=new DOMMatrix(e.camera.projectionViewMatrix).inverse(),a=n.toFloat64Array(),s,f;for(s of a)if(!Number.isFinite(s))throw new Error("Singular 3D transform");e.raycaster.origin[0]=e.camera.position[0],e.raycaster.origin[1]=e.camera.position[1],e.raycaster.origin[2]=e.camera.position[2];let m=new DOMPoint((t.clientX-i.left)/i.width*2-1,-((t.clientY-i.top)/i.height)*2+1,0,1).matrixTransform(n),l=[m.x/m.w,m.y/m.w,m.z/m.w];e.raycaster.direction[0]=l[0]-e.raycaster.origin[0],e.raycaster.direction[1]=l[1]-e.raycaster.origin[1],e.raycaster.direction[2]=l[2]-e.raycaster.origin[2];let p=Math.hypot(...e.raycaster.direction)||1;e.raycaster.direction[0]/=p,e.raycaster.direction[1]/=p,e.raycaster.direction[2]/=p;let u=[];for(f of r)o?Rt(f,Bn,u):f.geometry&&f.visible&&f._appearance!==0&&u.push(f);return En(e.raycaster,u,e.renderer.uniformData?.[55])}var Xe=new WeakMap;function An(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}function zn(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function Go(e,t=e.type,r){let o=this,i=Xe.get(o),n=i.fireDOMEvent;if(!F.renderers.get(o)?.renderer||r||!["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"].includes(t))return n.call(this,e,t,r);let s=e.target,f=s instanceof Element&&s.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");if(f&&i.hovered&&(t===i.move||t===i.out)&&(n.call(o,e,i.out,[i.hovered]),i.hovered=null,o.getContainer().style.cursor=""),f||t===i.move&&(o.dragging?.moving()||o._animatingZoom))return n.call(this,e,t,r);let m=[],l,p,u;if(t!==i.out)for(l of i.states)({source:p,backend:u}=l),!(p instanceof L.Marker||p.options.interactive===!1||!(p instanceof L.Path)&&!p.options.interactive)&&m.push(...ar(u,e,l.meshes.values(),!1));m.sort(zn);let d=m[0]?.object._nativeSource||null;return(t==="click"||t==="preclick")&&d&&o._draggableMoved(d)&&(d=null),(t===i.move||t===i.out)&&i.hovered!==d&&(i.hovered&&n.call(o,e,i.out,[i.hovered]),i.hovered=d,d&&n.call(o,e,i.over,[d]),o.getContainer().style.cursor=d?"pointer":""),n.call(this,e,t,d?[d]:void 0)}function In(e){let{map:t}=e,r=Xe.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=L.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Go,r.restore=An,Xe.set(t,r),t._fireDOMEvent=Go}r.states.add(e),e._nativeEventContext=r}function Dn(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Xe.delete(r))}function sr(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function fr(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function ce(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:sr(fr(0,e.h,e.l,n)),g:sr(fr(8,e.h,e.l,n)),b:sr(fr(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function ft(e){return e.source._nativeGPU===e&&e.map.hasLayer(e.source)}function mt(){re(this)}function Rn(e){this.order=e?++this.map._nativeGPUOrder:--this.map._nativeGPUBack,re(this)}function mr(){this.viewDirty=!0,this.backend._shared&&B(this.backend)}function lr(){let e=this,{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",mt,e),r.off("zoomend",mt,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",mr,e),Dn(e),e.refresh=e.reorder=null;let f,m,l,p,u;for([f,m]of e.methods)m.own?Object.defineProperty(t,f,m.own):delete t[f];for(l of i.values())k(o,l);i.clear();for(p of n.values())O(o,p.texture);n.clear();for(u of a)u.removeEventListener("load",Bt),u.removeEventListener("error",At),Jt(u,e);o._beforeRender=null,o.remove()}function Un(){this.ready.resolve()}function On({error:e}){this.ready.reject(e)}function Gn({error:e}){this.source.fire("error",{error:e})}function pr(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof L.GridLayer&&(t.opacity=o);let f=n?i._zIndex+(i._cameraZIndexOffset||0):i.options.zIndex;t.renderOrder=a*1e6+(f||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}async function Fn(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!ft(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,re(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function Nn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let p=n.get(t);p&&k(o,p),n.delete(t),O(o,a.texture),i.delete(t)}let f=r.naturalWidth||r.width,m=r.naturalHeight||r.height;if(!f||!m)return;let{device:l}=o.renderer;if(a={device:l,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:l.createTexture({size:[f,m],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:l.createSampler({minFilter:"linear",magFilter:"linear"})},i.set(t,a),r instanceof HTMLCanvasElement)a.pending=!0,Fn(e,t,a,r,l,f,m);else{try{l.queue.copyExternalImageToTexture({source:r},{texture:a.texture},[f,m])}catch(p){throw a.texture.destroy(),i.delete(t),p}a.uploaded=r}}return a.used=!0,a.uploaded===r?a:void 0}function ur(e,t,r,o,i,n,a){let{backend:s,source:f,meshes:m}=e;if(!r.length)return;let l=m.get(t),p=[],u;for(u=0;u<r.length;u++)p.push(u%3===1?1:0);let d={position:r,normal:p,...a?{uv:a}:{}};if(!l||l.geometry.attributes.position.data.length!==r.length||l.program.uniforms.baseTexture?.value!==n)l&&k(s,l),l=Ge(s,d,{vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",...n?{baseTexture:n}:{}},0,f instanceof L.GridLayer?e.rasterProgram:void 0),f instanceof L.GridLayer&&(e.rasterProgram||=l.program,l.texture=n),m.set(t,l);else{let c=l.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,l.geometry.bounds=null}return pr(e,l,o,i),l}function lt(e,t,r,o,i){let n=Nn(e,t,r);if(!n)return;let a=[0,2,1,1,2,3],s=[],f=[],m=[[0,0],[1,0],[0,1],[1,1]],l;for(l of a)s.push(...o[l]),f.push(...m[l]);return ur(e,t,s,[1,1,1],i,n,f)}function pt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(o.location),a=i.project(t),s=Math.cos(o.location.lat*Math.PI/180);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function cr(e,t){let r=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],o=[],i;for(i of r)o.push(pt(e,i));return o}function jn(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,f,m,l;for([i,n]of Object.entries(t._tiles||{}))!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth||(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),f=o.get(i),f&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,pr(e,f,[1,1,1],a)):([m,l]=t._tileCoordsToNwSe(n.coords),f=lt(e,i,n.el,cr(e,new L.LatLngBounds(m,l)),a)),f&&(f.renderOrder+=n.coords.z/100))}function Zn(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&<(e,"image",t._image,cr(e,t.getBounds()),t.options.opacity??1)}function $n(e,t,r){let{source:o,map:i,backend:n}=e,s=new DOMPoint(...pt(e,o.getLatLng()),1).matrixTransform(new DOMMatrix(n.root.worldMatrix)).matrixTransform(new DOMMatrix(n.camera.projectionViewMatrix)),f=new DOMMatrix(n.camera.projectionViewMatrix).inverse(),m=new DOMMatrix(n.root.worldMatrix).inverse(),l=o.options.icon.options,p=i.getSize(),u=l[t==="shadow"?"shadowSize":"iconSize"]||[r.naturalWidth,r.naturalHeight],d=u.x??u[0],c=u.y??u[1],h=t==="shadow"&&l.shadowAnchor||l.iconAnchor||[Math.floor(d/2),Math.floor(c/2)],g=new L.Point((s.x/s.w+1)*p.x/2,(1-s.y/s.w)*p.y/2),y=g.x-(h.x??h[0]),x=g.y-(h.y??h[1]),v=[[y,x],[y+d,x],[y,x+c],[y+d,x+c]],w=[],P,M,S,z,T,E,b;for([P,M]of v)S=o._cameraIconPoint(P-g.x,M-g.y),z=g.x+S.x,T=g.y+S.y,E=new DOMPoint(z/p.x*2-1,1-T/p.y*2,s.z/s.w,1).matrixTransform(f),b=new DOMPoint(E.x/E.w,E.y/E.w,E.z/E.w,1).matrixTransform(m),w.push([b.x,b.y,b.z]);return w}function Vn(e){let{source:t}=e,r,o,i;for([r,o]of[["shadow",t._shadow],["icon",t._icon]])!(o instanceof HTMLImageElement)||!o.complete||!o.naturalWidth||(i=lt(e,r,o,$n(e,r,o),t.options.opacity??1),r==="shadow"&&i&&(i.renderOrder-=100*1e6))}function qn(e,t){return pt(e,e.map.unproject(t))}function Hn(e){return qn(W.geometryPixelStates[W.geometryPixelStates.length-1],e)}function Wn(e){let{source:t}=e;W.geometryPixelStates.push(e);let r;try{r=bn(t,e.map,Hn)}finally{W.geometryPixelStates.pop()}let{fill:o,stroke:i}=r,n,a,s,f,m,l,p;for([n,a,s,f]of[["fill",o,t.options.fillColor||t.options.color,t.options.fillOpacity],["stroke",i,t.options.color,t.options.opacity]])a.length&&({r:m,g:l,b:p}=ce(s),ur(e,n,a,[m,l,p],f??1))}function dr(e){let{source:t,meshes:r,textures:o}=e;if(!ft(e)||!e.backend.renderer||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n,a;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof L.GridLayer?jn(e):t instanceof L.ImageOverlay?Zn(e):e.marker?Vn(e):Wn(e);for([a,i]of r)i._nativeUsed||(k(e.backend,i),r.delete(a),n=o.get(a),n&&O(e.backend,n.texture),o.delete(a));for([a,n]of o)n.used||(O(e.backend,n.texture),o.delete(a))}function Yn(e){try{dr(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}W.imageStates=new WeakMap;W.geometryPixelStates=[];async function Xn(e){let{source:t,map:r}=e,o=e.backend=new L.Layer({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.originalMethods=new Map,e.images=new Set,r._nativeGPUOrder||=0,r._nativeGPUBack||=0,e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=++r._nativeGPUOrder,e.marker=t instanceof L.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.refresh=re,e.reorder=Rn,e.dispose=lr,t.on("load tileload tileunload move drag",mt,e),r.on("zoomend",mt,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",mr,e),In(e);let n,a,s;for(n of["setLatLng","setLatLngs","addLatLng","setRadius","setStyle","redraw","setIcon","setUrl","setBounds","setOpacity","setZIndex","setZIndexOffset","bringToFront","bringToBack"])typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),e.originalMethods.set(n,s),t[n]=cn[n]);let f=e.ready=Promise.withResolvers();o.once("ready",Un,e),o.once("error",On,e),o.on("error",Gn,e),re(e),o.addTo(r);try{await f.promise}catch(m){throw lr.call(e),m}if(!ft(e))return t;o._beforeRender=Yn.bind(null,e);try{dr(e)}catch(m){throw lr.call(e),m}return B(e.backend),t}function Kn(e){let{source:t}=e,r=t instanceof L.Marker&&t.options.icon instanceof L.DivIcon,o=[r?null:t._icon,r?null:t._shadow],i;for(i of e.hidden)o.includes(i)||(i.classList.remove("leaflet-webgpu-target"),e.hidden.delete(i));for(i of o)!i||e.hidden.has(i)||(i.classList.add("leaflet-webgpu-target"),e.hidden.add(i))}function Jn(e){e.source._nativeGPU===e&&(e.source._nativeGPU=null),e.dispose?.();let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function Qn(e){return e.source._nativeGPU!==e?e.source:Xn(e)}function kn(e,t){e.fire("error",{error:t})}function hr(e,t){if(e._nativeGPU)return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r=e._nativeGPU={source:e,map:t,hidden:new Set};r.hide=Kn.bind(null,r),r.hide(),e.once("remove",Jn.bind(null,r)),e.ready=Promise.resolve().then(Qn.bind(null,r)),e.ready.catch(kn.bind(null,e))}var _={};function ea(){return this._cameraBearing??0}function ta(){return this._cameraPitch??0}function ut(e){_.cameraAnimations.delete(e),e._cameraAnimation=null,e._cameraFrame=null,!_.cameraAnimations.size&&_.cameraAnimationFrame!==null&&(cancelAnimationFrame(_.cameraAnimationFrame),_.cameraAnimationFrame=null)}function ra(){return ut(this),this}function gr(){let e=this.getSize().y,t=this.getPitch()*_.radians,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.cos(t)*o/(o+Math.sin(t)*r);i>0&&!this._pitchSky&&(this._pitchSky=L.DomUtil.create("div","leaflet-pitch-sky",this.getContainer()),this._pitchSky.setAttribute("aria-hidden","true"),this._pitchSky.style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),this._pitchSky&&(this._pitchSky.style.height=`${Math.max(0,Math.ceil(i))}px`,this._pitchSky.style.display=i>0?"":"none")}function oa(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");let r=this.getPitch(),o=this.getBearing();return this._cameraPitch=Math.max(0,Math.min(85,e)),this._cameraBearing=(t%360+360)%360,this._loaded&&(gr.call(this),o!==this.getBearing()&&this.fire("rotate",{bearing:this.getBearing()}),r!==this.getPitch()&&this.fire("pitch",{pitch:this.getPitch()})),this}function ia(e){_.cameraAnimationFrame=null;let t=[..._.cameraAnimations];_.cameraAnimations.clear();let r,o,i,n,a;for([o,i]of t)if(o._cameraFrame=null,o._cameraAnimation===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{o._setPitchAndBearing(i.fromPitch+(Math.max(0,Math.min(85,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&o._cameraAnimation===i?xr(o,i):o._cameraAnimation===i&&(o._cameraAnimation=null)}catch(s){r||=s}}if(r)throw r}function xr(e,t){_.cameraAnimations.set(e,t),_.cameraAnimationFrame===null&&(_.cameraAnimationFrame=requestAnimationFrame(ia)),e._cameraFrame=_.cameraAnimationFrame}function na(e,t,r={}){if(ut(this),!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");if(!r.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return this._setPitchAndBearing(e,t);let o=r.duration??.3;if(!Number.isFinite(o)||o<0)throw new TypeError("Camera duration must be nonnegative");let i=performance.now(),n=this.getPitch(),a=this.getBearing(),s=((t-a)%360+540)%360-180,f=this._cameraAnimation={duration:o,start:i,fromPitch:n,fromBearing:a,pitch:e,delta:s};return xr(this,f),this}function aa(e,t){return this._animateCamera(this.getPitch(),e,t)}function sa(e,t){return this._animateCamera(e,this.getBearing(),t)}function fa(e={animate:!0}){return this.setBearing(0,e)}function ma(e={animate:!0}){return this._animateCamera(0,0,e)}function q(e){return Array.isArray(e)?new L.Point(e[0],e[1]):new L.Point(e.x,e.y)}function yr(e){let t=e.getBearing()*_.radians,r=e.getPitch()*_.radians;return[Math.cos(t),Math.sin(t),Math.cos(r),Math.sin(r)]}function ie(e,t,r=!1,o=!1){let i=e.getSize().divideBy(2),n=e.getSize().y*1.5;if(!n)return q(t);let[a,s,f,m]=yr(e),l=q(t).subtract(i);if(r){let c=e.getSize().y*e.options.pitchMaxDistance,h=f*n+m*l.y,g=h>0?l.y*n/h:-c;o&&(g=Math.max(-c,Math.min(c,g)));let y=l.x*(n-m*g)/n;return new L.Point(a*y+s*g,-s*y+a*g).add(i)}let p=a*l.x-s*l.y,u=s*l.x+a*l.y,d=n/(n-m*u);return new L.Point(p*d,f*u*d).add(i)}function ct(e,t,r=!1){let o=e._cameraView;if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function la(e){return ie(this,ct(this,_.mapMethods.layerPointToContainerPoint.call(this,e)))}function pa(e){return _.mapMethods.containerPointToLayerPoint.call(this,ct(this,ie(this,e,!0),!0))}function ua(){return _.mapMethods.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function ca(){let e;for(e of Object.values(this._layers))e instanceof L.Marker?e.update():(e instanceof L.Popup||e instanceof L.Tooltip)&&e._updatePosition()}function da(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ie(this,r.subtract(q(e)),!0));return _.mapMethods.panBy.call(this,o,t)}function ha(e,t,r){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof L.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),f=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(f),t,{zoom:r})}function ga(e,t={}){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.panInside.call(this,e,t);let r=q(t.paddingTopLeft||t.padding||[0,0]),o=this.getSize().subtract(q(t.paddingBottomRight||t.padding||[0,0])),i=this.latLngToContainerPoint(e),n=new L.Point(Math.max(r.x,Math.min(o.x,i.x)),Math.max(r.y,Math.min(o.y,i.y)));if(n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}function dt(e,t=[0,0]){let r=q(t).divideBy(2),o=e.getSize().subtract(r),i=[[r.x,r.y],[o.x,r.y],[r.x,o.y],[o.x,o.y]],n=[],a;for(a of i)n.push(ie(e,a,!0,!0));return new L.Bounds(n)}function xa(e,t,r){if(!r||!this._loaded||!this.getPitch()&&!this.getBearing())return _.mapMethods._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=dt(this),n=this.project(e,t),a=new L.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}function ya(e,t){if(!t||!this.getPitch()&&!this.getBearing())return _.mapMethods._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ie(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ie(this,r.subtract(n.subtract(i))))}function Fo(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function vr(e,t,r={}){t=t.getBounds?t.getBounds():t instanceof L.LatLngBounds?t:new L.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=q(r.paddingTopLeft||r.padding||[0,0]).subtract(i),s=i.subtract(q(r.paddingBottomRight||r.padding||[0,0])),[f,m,l,p]=yr(e),u=e.getSize().y*e.options.pitchMaxDistance,d=Fo(a.y,l,n,p,u),c=Fo(s.y,l,n,p,u),h=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=[],y,x,v;for(y of[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()])x=e.project(y,o).subtract(h),g.push(new L.Point(f*x.x-m*x.y,m*x.x+f*x.y));let w=1/0,P=-1/0;for(v of g)w=Math.min(w,v.y),P=Math.max(P,v.y);let M=a.x*p/n,S=s.x*p/n,z=S-M,T=1/0,E=-1/0;for(v of g)T=Math.min(T,v.x+M*v.y),E=Math.max(E,v.x+S*v.y);let b=Math.min((c-d)/(P-w),(s.x-a.x-z*d)/(E-T-z*w)),R=e.getScaleZoom(b,o),D=e.options.zoomSnap;if(D&&(R=Math.floor(Math.round(R/(D/100))/100)*D),R=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,R)),!Number.isFinite(R))return{center:t.getCenter(),zoom:R};let U=e.getZoomScale(R,o),G=P*U-c,$=w*U-d,H=Math.max(G,z?(U*(E-T)-s.x+a.x)/z:G),V=(Math.min($,H)+$)/2,ee=(U*(T+E)-a.x-s.x-(M+S)*V)/2,he=h.add(new L.Point(f*ee+m*V,-m*ee+f*V).divideBy(U));return{center:e.unproject(he,o),zoom:R}}function va(e,t){return this.getPitch()||this.getBearing()?vr(this,e,t):_.mapMethods._getBoundsCenterZoom.call(this,e,t)}function Ma(e,t,r){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.getBoundsZoom.call(this,e,t,r);if(!t)return vr(this,e,{padding:q(r||[0,0]).divideBy(2)}).zoom;e=e instanceof L.LatLngBounds?e:new L.LatLngBounds(e);let o=dt(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function wa(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(_.mapMethods.panBy.call(this,r,t),!0)}function _a(){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.getBounds.call(this);let e=dt(this),t=new L.LatLngBounds,r,o;for(r of[e.min,e.max])o=_.mapMethods.containerPointToLayerPoint.call(this,ct(this,r,!0)),t.extend(this.layerPointToLatLng(o));return t}function Pa(){this.options.maxBounds&&this._panInsideMaxBounds()}function Mr(){let e=this,t=e._cameraDraggable;if(!e.getPitch()&&!e.getBearing())return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ie(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Ta(){ut(this),this._pitchSky?.remove(),this._cameraDraggable&&(this._cameraDraggable.off("predrag",Mr,this),delete this._cameraDraggable)}function La(){let e=this.dragging?._draggable;e&&(this._cameraDraggable=e,e.on("predrag",Mr,this))}async function vs(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(ys(),xs));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function me(){}function Ms(){if(!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}this._setPitchAndBearing(this.options.pitch,this.options.bearing),this.on("load resize pitch",gr),this.on("rotate pitch",Pa,this),this.once("unload",Ta,this),this.whenReady(La,this),(this.options.rotate||this.options.trackContainerMutation)&&(this.cameraReady=vs(this),this.cameraReady.catch(me))}function ws(e){e instanceof L.DivIcon||(e.options.crossOrigin||=!0);let t=_.markerMethods.setIcon.call(this,e);return this._map&&!(e instanceof L.DivIcon)&&hr(this,this._map),t}function _s(e){if(!Number.isFinite(e))throw new TypeError("Marker rotation must be finite");return this.options.rotation=e,this.update(),this._nativeGPU?.refresh?.(),this}function Ps(e,t){let r=this.options.rotation+(this.options.rotateWithView?this._map.getBearing()*_.radians:0);this.options.keepUpright&&Math.cos(r)<0&&(r+=Math.PI);let o=this.options.scale;return new L.Point((e*Math.cos(r)-t*Math.sin(r))*o,(e*Math.sin(r)+t*Math.cos(r))*o)}function Ts(){return{..._.markerMethods.getEvents.call(this),rotate:this.update,pitch:this.update,move:this.update}}function xt(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Ls(e){_.markerMethods._setPos.call(this,xt(this._map,e));let t,r,o,i,n;for([t,r]of[[this._icon,"iconAnchor"],[this._shadow,"shadowAnchor"]])t&&(o=this._cameraIconPoint(1,0),i=this.options.icon.options,n=i[r]||i.iconAnchor,t.style.transformOrigin=n?`${n.x??n[0]}px ${n.y??n[1]}px`:"center",t.style.transform+=` rotate(${Math.atan2(o.y,o.x)}rad) scale(${this.options.scale})`)}function Ss(e){_.markerMethods._updateZIndex.call(this,e);let t=this._cameraZIndexOffset!==e;this._cameraZIndexOffset=e,t&&this._nativeGPU?.refresh?.()}function bs(e){let t=this._marker._map,r=L.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);L.DomUtil.setPosition(this._marker._icon,o),this._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}function Cs(){_.markerPanFrame=null;let e=[..._.pendingMarkerPan];_.pendingMarkerPan.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Es(e,t){_.pendingMarkerPan.set(e,t),_.markerPanFrame===null&&(_.markerPanFrame=requestAnimationFrame(Cs)),e._panRequest=_.markerPanFrame}function Bs(e){let t=this._marker,r=t._map;if(!r.getPitch()&&!r.getBearing())return this._cameraOriginalAdjustPan.call(this,e);let o=L.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=q(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=new L.Point((Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a);if(!s.x&&!s.y)return;let f=r._getMapPanePos();r.panBy(s,{animate:!1});let m=f.subtract(r._getMapPanePos());this._draggable._newPos._add(m),this._draggable._startPos._add(m),L.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Es(this,e)}function As(){if(!this.dragging||this.dragging._cameraDrag)return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;e._cameraOriginalOnDrag=t,e._cameraOriginalAdjustPan=r,e._onDrag=bs,e._adjustPan=Bs,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e)),e._cameraDrag=!0}function zs(){let e=_.markerMethods._initInteraction.call(this);return As.call(this),e}function Is(){return{..._.popupEvents.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}function Ds(){return{..._.tooltipEvents.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}function Rs(){let e=this._map;if(!e.getPitch()&&!e.getBearing())return _.popupPan.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=q(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(q(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,f=t.bottom-r.top,m=Math.min(0,n-o.x)||Math.max(0,s-i.x),l=Math.min(0,a-o.y)||Math.max(0,f-i.y);if(!m&&!l)return;this.options.keepInView&&(this._autopanning=!0);let p=e.latLngToContainerPoint(this._latlng).subtract(new L.Point(m,l)),u=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(p));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(u)))}function Us(){if(_.popupPosition.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=xt(this._map,e).subtract(e);this._zoomAnimated?L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}function Os(e){_.tooltipPosition.call(this,e);let t=xt(this._map,e).subtract(e);L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(t))}function Gs(){let e=_.gridEvents.call(this);return this._cameraGridUpdate||=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),{...e,rotate:this._cameraGridUpdate,pitch:this._cameraGridUpdate}}function Fs(e){if(!this._map.getBearing()&&!this._map.getPitch())return _.tiledBounds.call(this,e);let t=this._map.getBounds();return new L.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}_.mapMethods=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Map.prototype));_.radians=Math.PI/180;_.cameraAnimations=new Map;_.cameraAnimationFrame=null;L.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});L.Map.include({getBearing:ea,getPitch:ta,_stopPitchBearingAnimation:ra,_setPitchAndBearing:oa,_animateCamera:na,setBearing:aa,setPitch:sa,resetNorth:fa,resetNorthPitch:ma,layerPointToContainerPoint:la,containerPointToLayerPoint:pa,_getCenterLayerPoint:ua,_updateCameraOverlays:ca,panBy:da,setZoomAround:ha,panInside:ga,_limitCenter:xa,_limitOffset:ya,_getBoundsCenterZoom:va,getBoundsZoom:Ma,_tryAnimatedPan:wa,getBounds:_a});L.Map.addInitHook(Ms);_.markerMethods=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Marker.prototype));L.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});L.Marker.include({setIcon:ws,setRotation:_s,_cameraIconPoint:Ps,getEvents:Ts,_setPos:Ls,_updateZIndex:Ss,_initInteraction:zs});_.pendingMarkerPan=new Map;_.markerPanFrame=null;_.popupEvents=L.Popup.prototype.getEvents;L.Popup.include({getEvents:Is});_.tooltipEvents=L.Tooltip.prototype.getEvents;L.Tooltip.include({getEvents:Ds});_.popupPosition=L.Popup.prototype._updatePosition;_.popupPan=L.Popup.prototype._adjustPan;L.Popup.include({_adjustPan:Rs,_updatePosition:Us});_.tooltipPosition=L.Tooltip.prototype._setPosition;L.Tooltip.include({_setPosition:Os});_.tiledBounds=L.GridLayer.prototype._getTiledPixelBounds;_.gridEvents=L.GridLayer.prototype.getEvents;L.GridLayer.include({getEvents:Gs,_getTiledPixelBounds:Fs});function Ot(){let e=this,t;for(t of e._zoomTransitions?.keys()||[])t.finish();e._zoomTransitions=null,e._zoomView=null,delete e._map._cameraView,e._map.getContainer().classList.remove("leaflet-camera-zoom"),e._map._updateCameraOverlays(),e._zoomLevel=null,B(e)}var Gt={};function Ns(){let e=Gt.pendingMapChanges.shift();e._queued=!1,!(e._shared!==e||!e.renderer)&&(e._map._animatingZoom?B(e):Oe(e))}Gt.pendingMapChanges=[];function Ft(){let e=this;e._queued||(e._queued=!0,Gt.pendingMapChanges.push(e),queueMicrotask(Ns))}var Nt={};function js(){let e=Nt.pendingZoomAnimations.shift();e._shared===e&&e.renderer&&Oe(e)}Nt.pendingZoomAnimations=[];function jt(e){let t=this._map;e&&!this._zoomView&&(this._zoomView={from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()},t.getContainer().classList.add("leaflet-camera-zoom")),Nt.pendingZoomAnimations.push(this),queueMicrotask(js)}function Zt(){this._zoomLevel=null}function Zs(e,t){let r=[],o;for(o=0;o<6;o++)r.push({x:e.x+Math.cos(o*Math.PI/3)*t,y:e.y+Math.sin(o*Math.PI/3)*t,ground:e.ground,uv:[3,3]});return r}function $s(e,t,r){let o=ce(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,f,m,l,p,u,d,c,h;for([a,s,f]of[[i,0,t.top],[i*2.5,t.top-.25,t.top+.15]])for(m=Zs(e,a),l=0;l<6;l++)p=m[l],u=m[(l+1)%6],d=(l+.5)*Math.PI/3,c=Math.cos(d),h=-Math.sin(d),r(p,s,u,s,u,f,c,0,h,o),r(p,s,u,f,p,f,c,0,h,o),r(n,f,p,f,u,f,0,1,0,o),r(n,s,u,s,p,s,0,-1,0,o)}function Vs(e,t,r,o,i,n,a,s){e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)}function $t(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function qs(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=ce(t.color),i;for(i=0;i<3;i++)Vs(r,o,$t(e,-1,-1,i),$t(e,1,-1,i),$t(e,1,1,i),$t(e,-1,1,i),t.top,i===0?[0,1,0]:i===1?[0,0,1]:[1,0,0])}var Ur=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Or=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Vt(e,t){let r=[],o;for(o of Or)r.push({x:e.x+o.x*t,y:e.y+o.y*t,ground:e.ground});return r}function Gr(e,t,r,o,i,n,a){let s=Vt(e,r),f=Vt(e,i),m,l,p,u,d,c,h,g,y;for(m=0;m<8;m++)l=(m+1)%8,p=(r-i)/(n-o),u=Math.hypot(1,p),{nx:d,nz:c}=Or[m],h=p/u,g=d/u,y=c/u,r&&t(s[m],o,s[l],o,f[l],n,g,h,y,a),i&&t(s[m],o,f[l],n,f[m],n,g,h,y,a)}function Hs(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:f="round"}=t;if(!Number.isFinite(n)||!Number.isFinite(a)||!Number.isFinite(s)||n<=0||a<n||s<=i||s>=o||!["round","cone"].includes(f))throw new Error("Invalid tree dimensions or crown shape");let m=ce(t.trunkColor??7491898),l=ce(t.color??5210683);Gr(e,r,n,i,n,s+(o-s)*.25,m);let p,u,d,c,h;if(f==="cone"){let g=Vt(e,a);for(p=0;p<8;p++)r(e,s,g[p],s,g[(p+1)%8],s,0,-1,0,l);Gr(e,r,a,s,0,o,l)}else for(p=1;p<Ur.length;p++)[u,d]=Ur[p-1],[c,h]=Ur[p],Gr(e,r,d*a,s+u*(o-s),h*a,s+c*(o-s),l)}function Fr(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of e._areas.values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function yt(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function Ws(e){let t=new Uint8Array(e),r={bytes:t,cursor:0},o=yt(r);if(o>(t.length-r.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=[],n=0,a,s,f;for(a=0;a<o;a++){if(n+=yt(r),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i.push({tileId:n})}for(s of i)s.runLength=yt(r);for(s of i)if(s.length=yt(r),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],f=yt(r),!f&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=f?f-1:i[a-1].offset+i[a-1].length}if(r.cursor!==t.length)throw new Error("Trailing PMTiles directory data");return i}async function Nr(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);return new Response(new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"))).arrayBuffer()}async function Ze(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(e.url,{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(e._etag&&n!==e._etag)throw new Error("PMTiles archive changed; recreate the layer");n&&(e._etag=n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}async function Ys(e,t,r,o){return Ws(await Nr(await Ze(e,t,r),o))}function Xs(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),[t,r]=[r,t]);return o}function Ks(e){if(e.byteLength<127||new TextDecoder().decode(new Uint8Array(e,0,7))!=="PMTiles"||new Uint8Array(e)[7]!==3)throw new Error("Expected a PMTiles v3 archive");let t=new DataView(e),r={},o=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"],i=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"],n=["minLon","minLat","maxLon","maxLat"],a;for(a=0;a<o.length;a++)r[o[a]]=Number(t.getBigUint64(8+a*8,!0));for(a=0;a<i.length;a++)r[i[a]]=t.getUint8(96+a);for(a=0;a<n.length;a++)r[n[a]]=t.getInt32(102+a*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}function vt(e){return e.options.archive&&e.options.archive!==e?e.options.archive.getHeader():e._header||=Ze(e,0,127).then(Ks)}async function jr(e,t,r,o,i){if(e.options.archive&&e.options.archive!==e&&e.options.archive.getZxy)return e.options.archive.getZxy(t,r,o,i);let n=Xs(t,r,o);i?.throwIfAborted();let a=await vt(e);if(i?.throwIfAborted(),t<a.minZoom||t>a.maxZoom)return;let s=a.rootDirectoryOffset,f=a.rootDirectoryLength,m=new Set,l,p,u,d,c,h,g,y,x;for(l=0;l<4;l++){if(m.has(s))throw new Error("Cyclic PMTiles directory");m.add(s),p=`${s}:${f}`,e._directories.has(p)||(e._directories.size>=32&&e._directories.delete(e._directories.keys().next().value),e._directories.set(p,Ys(e,s,f,a.internalCompression))),u=e._directories.get(p),d=void 0;try{d=await u}catch(v){throw e._directories.get(p)===u&&e._directories.delete(p),v}for(i?.throwIfAborted(),c=0,h=d.length-1;c<=h;)g=c+h>>1,d[g].tileId<=n?c=g+1:h=g-1;if(y=d[h],!y)return;if(y.runLength){if(n-y.tileId>=y.runLength)return;if(y.offset+y.length>a.tileDataLength)throw new Error("PMTiles tile outside data section");return x=await Nr(await Ze(e,a.tileDataOffset+y.offset,y.length,i),a.tileCompression),i?.throwIfAborted(),{data:x}}if(y.offset+y.length>a.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");s=a.leafDirectoryOffset+y.offset,f=y.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Js(e,t){if(e._geojson){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=await fetch(new URL(i,document.baseURI),{signal:t.request.signal});if(!n.ok)throw new Error(`Unable to load GeoJSON: HTTP ${n.status}`);return n.json()}let r=await jr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(new TextDecoder().decode(r.data)):{type:"FeatureCollection",features:[]}}var $e={};function Zr(e,t){return e.distance-t.distance}function Qs(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,f=i.project(new L.LatLng(r,t)),m=s._terrain3D?Y(s._terrain3D,[r,t]):void 0;return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(m)&&Number.isFinite(o.root.position[1])?m-o.root.position[1]:0}}function $r(e){return e.ground||0}function Ke(e,t,r,o,i,n,a,s,f,m,l){let{backend:p,positions:u,normals:d,colors:c,uvs:h}=e,g=o.x-t.x,y=i-r,x=t.y-o.y,v=n.x-t.x,w=a-r,P=t.y-n.y;if((y*P-x*w)*s+(x*v-g*P)*f+(g*w-y*v)*m<0){let M=o,S=i;o=n,i=a,n=M,a=S}u.push(t.x,r+$r(t),-t.y,o.x,i+$r(o),-o.y,n.x,a+$r(n),-n.y),d.push(s,f,m,s,f,m,s,f,m),c.push(l.r,l.g,l.b,l.r,l.g,l.b,l.r,l.g,l.b),p.options.nightLight&&h.push(...t.uv,...o.uv,...n.uv)}function ks(...e){Ke($e.triangleContexts[$e.triangleContexts.length-1],...e)}function Vr(e,t,r,o){$e.triangleContexts.push(e);try{t(r,o,ks)}finally{$e.triangleContexts.pop()}}function ef(e,t,r,o,i,n){let{backend:a}=e,{top:s}=i,f=Qs(e,r,o);if(a.options.nightLight){if(!Number.isFinite(i.lightFlux)||i.lightFlux<=0)throw new Error("Invalid light flux");let m=t.properties?.cod_ouvrag||`${r},${o}`;i.poleRadius>0&&!e.supports.has(m)&&(Vr(e,$s,f,i),e.supports.add(m)),Vr(e,qs,f,i),e.lights.push({position:[f.x,f.ground+s,-f.y],radius:Math.hypot(s,i.lightRadius),color:[n.r,n.g,n.b],flux:i.lightFlux})}else Vr(e,Hs,f,i)}function tf(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],f,m,l,p;for([f,m]of t.slice(0,-1)){if(!Number.isFinite(f)||!Number.isFinite(m))throw new Error("Invalid GeoJSON coordinates");l=o.project(new L.LatLng(m,f)),p=a._terrain3D?Y(a._terrain3D,[m,f]):void 0,s.push({x:(l.x-i.x)*n,y:(l.y-i.y)*n,ground:Number.isFinite(p)&&Number.isFinite(r.root.position[1])?p-r.root.position[1]:0})}return s}function rf(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a,s,f,m,l,p,u,d,c,h,g,y;for(a of t)n.push(tf(e,a));let x=[];for(s of n)for(f of s)x.push(f);for([m,l,p]of st(n[0],n.slice(1)))Ke(e,x[m],r,x[l],r,x[p],r,0,1,0,i),o>0&&Ke(e,x[m],o,x[l],o,x[p],o,0,-1,0,i);for(u=0;u<n.length;u++)for(s=n[u],d=rr(s)===(u===0)?-1:1,c=0;c<s.length;c++)m=s[c],l=s[(c+1)%s.length],h=Math.hypot(l.x-m.x,l.y-m.y),h&&(g=d*(l.y-m.y)/h,y=d*(l.x-m.x)/h,Ke(e,m,o,l,o,l,r,g,0,y,i),Ke(e,m,o,l,r,m,r,g,0,y,i))}function of(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=t?.geometry,s=a?.type==="Point";if(r.options.nightLight&&!s)throw new Error("Night lights require Point geometry");let f=a?.type==="Polygon"?[a.coordinates]:a?.type==="MultiPolygon"?a.coordinates:null;if(!f&&!s)throw new Error("Unsupported GeoJSON geometry");let[m,l]=(s?a.coordinates:f[0]?.[0]?.[0])??[];if(!Number.isFinite(m)||!Number.isFinite(l))throw new Error("Invalid GeoJSON coordinates");if(n){let v=i.project(new L.LatLng(l,m),n.z);if(Math.floor(v.x/256)!==n.x||Math.floor(v.y/256)!==n.y)return}let p=r.options.style(t);if(p===null){e.skipped++;return}if(!p||typeof p!="object")throw new Error("style must return an extrusion style or null");let{top:u,bottom:d=0,color:c=14267276}=p;if(!Number.isFinite(u)||!Number.isFinite(d)||d<0||u<=d)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");let h=ce(c),g=e.positions.length/3;s&&ef(e,t,m,l,p,h);let y;for(y of f||[])rf(e,y,u,d,h);let x=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(a),properties:t.properties,baseColor:h,faceStart:g/3,faceEnd:x/3,vertexStart:g,vertexEnd:x})}function nf(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=[Math.trunc(t[0]),Math.trunc(t[1]),Math.trunc(t[2])],f=new Float32Array(a),m,l,p,u,d;for(m=0;m<a;m++)f[m]=t[m]-s[m%3];let c=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(p=0;p<3;p++)c[l*4+p]=s[p]+t[d+p]-t[p];for(c[l*4+3]=l*n,m=0;m<a;m++)if(Math.fround(f[m]+c[l*4+m%3])!==Math.fround(t[d+m])||Math.fround(r[m])!==Math.fround(r[d+m])||Math.fround(o[m])!==Math.fround(o[d+m]))return e}return{positions:f,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:c}}function af(e){let{backend:t,area:r}=e;if(!e.positions.length){Object.assign(r,{mesh:null,buildings:0,skipped:e.skipped,done:!0});return}let o=t.renderer.device,i=nf(e),n={position:{size:3,data:new Float32Array(i.positions)},normal:{size:3,data:new Float32Array(i.normals)},color:{size:3,data:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:new Float32Array(e.uvs)});let a,s;for([a,s]of Object.entries(n))s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let f={device:o,attributes:n,drawRange:{start:0,count:n.position.count}};Object.assign(r,{mesh:{...J(),device:o,geometry:f,program:se(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:!!t.options.roofTexture,...t.options.nightLight?{nightLight:!0,alphaMode:"BLEND",doubleSided:!0}:{}}),id:F.nextId++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},buildings:e.featureFaces.length,skipped:e.skipped,done:!0}),j(r.mesh,t.root),B(t)}function sf(e,t,r){let o=r.options.crs,i=o.project(e.location);return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(e.location.lat*Math.PI/180),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}async function ff(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await r._terrain3D?._terrainPromise,t.request.signal.aborted)return;let i=await Js(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(e._geojson&&typeof e.options.style!="function")throw new Error("style must be a function");let n=sf(e,t,r),a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}of(n,o)}af(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{e._inflight--,qt(e,r)}}$e.triangleContexts=[];function qt(e,t=e._map){let r=t&&F.renderers.get(t);if(!r)return;let o=[],i,n,a,s;for(i of r._layers)Number.isFinite(i._inflight)&&i._areas&&(i.url||i._geojson)&&o.push(i);let f=[];for(i of o)for(n of i._areas.values())n.started||n.request.signal.aborted||(a=n.coords&&t.project(t.getCenter(),n.coords.z).divideBy(256),f.push({layer:i,area:n,distance:a?Math.hypot(n.coords.x+.5-a.x,n.coords.y+.5-a.y)/2**n.coords.z:0}));f.sort(Zr);let m=0;for(i of o)m+=i._inflight;for({layer:s,area:n}of f){if(m>=4)break;s._inflight>=2||(n.started=!0,s._inflight++,m++,ff(s,n,t))}for(i of o)Fr(i)}function Me(e,t){t?.model&&(t=null),!(e.highlightedFeature?.mesh===t?.mesh&&e.highlightedFeature?.vertexStart===t?.vertexStart)&&(e.highlightedFeature&&(e.highlightedFeature.mesh.highlight=null),e.highlightedFeature=t,t&&(t.mesh.highlight=[t.vertexStart,t.vertexEnd]),B(e))}function we(e,t,r){let o=e._tooltip;if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=e.container.getBoundingClientRect(),s=r.clientX-a.left,f=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${f+o.offsetHeight+16>a.height?f-o.offsetHeight-12:f+12}px`}else o.hidden=!0;let i=e._shared,n;if(i){let a=!1;for(n of i._layers)if(n._tooltip&&!n._tooltip.hidden){a=!0;break}a?(i._cursor===void 0&&(i._cursor=e.container.style.cursor),e.container.style.cursor="pointer"):i._cursor!==void 0&&(e.container.style.cursor=i._cursor,delete i._cursor)}}function Ve(e,t){t.request.abort();let r;if(t.mesh){e.highlightedFeature?.mesh===t.mesh&&(Me(e,null),e.hoveredFeature=null,we(e,null)),j(t.mesh,null),B(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function mf(e,t){return Math.hypot(e[1].x-e[2].x,e[1].y-e[2].y)-Math.hypot(t[1].x-t[2].x,t[1].y-t[2].y)}function qe(e){if(!e._map||!e._shared)return;if(e._geojson){e._areas.has("geojson")||e._areas.set("geojson",{request:new AbortController}),qt(e);return}if(!e.header)return;let t=e.header.minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([e.header.maxLat,e.header.minLon],t).divideBy(256).floor(),s=e._map.project([e.header.minLat,e.header.maxLon],t).divideBy(256).floor(),f=new Map,m,l,p,u,d;for(m=Math.max(0,i.x-1,a.x);m<=Math.min(2**t-1,n.x+1,s.x);m++)for(l=Math.max(0,i.y-1,a.y);l<=Math.min(2**t-1,n.y+1,s.y);l++)f.set(`${m}/${l}`,{z:t,x:m,y:l});for([p,u]of e._areas)f.has(p)||(Ve(e,u),e._areas.delete(p));let c=[];for([p,d]of f)c.push([p,d,r]);c.sort(mf);for([p,d]of c)e._areas.has(p)||e._areas.set(p,{coords:d,request:new AbortController});qt(e)}function Mt(e){if(!e.root||!e.location)return;e._terrainBaseY??=e.root.position[1];let t=e._map?._terrain3D,r=t&&Y(t,e.location),o=Number.isFinite(r)?e.options.terrainOffset??0:0;e.root.position[1]=e._terrainBaseY+(r??0)+o}var Je={};function lf(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function He(e,t,r){throw lf(r),t._rendererReady.reject(e),F.renderers.delete(r),e}async function pf(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){He(o,e,t)}return r||He(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function uf(e,t,r){try{return await e.requestDevice()}catch(o){He(o,t,r)}}function cf(e){let t=Je.rendererDevices.get(e.currentTarget),r=F.renderers.get(t);if(r?.renderer?.device!==e.currentTarget)return;let o;for(o of r._layers||[])o.fire("error",{error:e.error})}function df([e,t]){let r=Je.rendererDevices.get(t),o=F.renderers.get(r);if(!o||o.renderer?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of o._layers)n.fire("error",{error:i})}function hf(e,t,r){let o,i,n,a,s,f,m,l;if(r.geometry&&r.geometry.device!==t.renderer.device){let p=r.geometry,u=r.program._layerMaterial,d={};for(o of["position","normal","color","uv","index","instanceOffset"])i=p.attributes[o],i&&({data:n,size:a,count:s,normalized:f}=i,d[o]={data:n.slice(0,s*a),size:a,normalized:f});let c=t.renderer.device;d.index?.data instanceof Uint8Array&&(d.index.data=Uint16Array.from(d.index.data));for([o,i]of Object.entries(d))i.size||=1,i.count=i.data.length/i.size,i.indexFormat=i.data instanceof Uint32Array?"uint32":"uint16",i.buffer=c.createBuffer({size:Math.max(4,i.data.byteLength),usage:o==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),c.queue.writeBuffer(i.buffer,0,i.data);r.geometry={device:c,attributes:d,drawRange:{start:0,count:d.index?.count||d.position.count}};for(i of Object.values(p.attributes))i.buffer.destroy();r.bindGroup=null,r.boundTextures=[];for(m of["baseTexture","metalTexture","emissiveTexture","occlusionTexture"])l=u[m],!(!l||l.device===c)&&(u[m]={...l,device:c,texture:c.createTexture({size:[l.image.width,l.image.height],format:l.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:c.createSampler(l.samplerOptions),uploaded:null});r.program.pipelineCache.clear(),r.program=se(e,u),r.device=c}r.texture&&r.texture.device!==t.renderer.device&&(r.texture={...r.texture,device:t.renderer.device,texture:t.renderer.device.createTexture({size:[r.texture.image.width,r.texture.image.height],format:r.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.renderer.device.createSampler(r.texture.samplerOptions),uploaded:null})}Je.rendererDevices=new WeakMap;async function wt(e,t){let r=F.renderers.get(t);if(r?._rendererReady&&await r._rendererReady.promise,!r){r=e,e._rendererReady=Promise.withResolvers(),e._rendererReady.promise.catch(me),F.renderers.set(t,r);let m=document.createElement("canvas");navigator.gpu||He(new Error("Layer3D requires WebGPU"),e,t);let l=await pf(e,t),p=await uf(l,e,t);Je.rendererDevices.set(p,t),p.addEventListener("uncapturederror",cf),Promise.all([p.lost,Promise.resolve(p)]).then(df);let u=m.getContext("webgpu");u||(p.destroy(),He(new Error("Unable to create a WebGPU canvas context"),e,t));let d=navigator.gpu.getPreferredCanvasFormat();u.configure({device:p,format:d,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),e._shared=e,e._layers=new Set,e._sceneOrigin=e.location,e.scene=J(),e.camera={position:[0,0,0],up:[0,1,0],target:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],fov:45,aspect:1,near:.1,far:1e4},e.renderer={device:p,context:u,format:d,canvas:m,dpr:Math.min(window.devicePixelRatio,2)};let c=p.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),h=e.renderer.device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),g=e.renderer.device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),y=e.renderer.device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});e.renderer.sunlight={layout:c,buffer:h,sampler:g,lights:y,size:0};let x=new Float32Array(20);x.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),e.renderer.device.queue.writeBuffer(h,0,x),er(e,1);let v=document.createElement("canvas");v.width=1,v.height=1,e.renderer.roofFallbackTexture={device:p,texture:p.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:v,format:"rgba8unorm",srgb:!1,uploaded:null},r._size=null,m.className="leaflet-3d",m.style.cssText="position:absolute;top:0;left:0;pointer-events:none",m.setAttribute("role","img"),m.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let w=t.getPane("webgpuPane");w||(w=t.createPane("webgpuPane",t.getContainer()),w.style.zIndex=1,w.style.pointerEvents="none"),w.append(m),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,r),t.on("zoomstart",Zt,r),t.on("zoomanim",jt,r),t.on("zoomend",Ot,r),e._rendererReady.resolve(),delete r._rendererReady,Oe(r),F.renderers.set(t,r)}let o=t.options.crs.project(r._sceneOrigin),i=t.options.crs.project(e.location),n=Math.cos(r._sceneOrigin.lat*Math.PI/180);e._terrainBaseY??=e.root.position[1],e.root.position[0]=(i.x-o.x)*n,e.root.position[1]=e._terrainBaseY,e.root.position[2]=-(i.y-o.y)*n,Mt(e),e.root.scale.fill(n/Math.cos(e.location.lat*Math.PI/180)),e._shared=r,e.renderer=r.renderer,e.scene=r.scene,e.camera=r.camera,r._layers.add(e),j(e.root,r.scene);let a=[e.root],s,f;for(;a.length;)for(s=a.pop(),hf(e,r,s),f=s.children.length-1;f>=0;f--)a.push(s.children[f]);B(r),(e.header&&e._type!=="pmtiles"||e._geojson)&&qe(e)}function qr(e,t){if(!e.root||!e.camera)return null;let r,o,i,n,a,s,f;for(r of ar(e,t,e.root.children,!!e.model)){if(e.model){for(o=r.object;o&&o!==e.model;)o=o.parent;if(o===e.model)return{id:e.model.id,properties:e.model.extras,model:e.model,mesh:r.object,point:r.point}}if(i=r.object.extras?.featureFaces,!!i)for(n=0,a=i.length-1;n<=a;)if(s=n+a>>1,f=i[s],r.faceIndex<f.faceStart)a=s-1;else if(r.faceIndex>=f.faceEnd)n=s+1;else return{...f,mesh:r.object,point:r.point}}return null}function gf(e,t){let r=qr(e,t);e.hoveredFeature=r,Me(e,r),we(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Hr(e){e.hoveredFeature=null,Me(e,null),we(e,null),e.fire("featurehover",{feature:null})}function yf(e,t){e.hoveredFeature=qr(e,t),Me(e,e.hoveredFeature),we(e,e.hoveredFeature,t),e.fire("featurehover",{feature:e.hoveredFeature,originalEvent:t})}function vf(e){yf(this,e)}function Mf(e){gf(this,e)}function wf(){Hr(this)}async function _f(e,t){try{await wt(e,t),e._added.resolve()}catch(r){e.fire("error",{error:r})}}function Wr(e,t){if(!e.location){let r=t.getCenter();e.location=new L.LatLng(r.lat,r.lng)}(e.url||e._geojson||e.options.tooltip||e.modelUrl)&&(e.container=t.getContainer(),e._pointerEvents||={mousemove:vf,click:Mf,mouseleave:wf},e.options.tooltip&&(e._tooltip=L.DomUtil.create("div","leaflet-3d-tooltip",e.container),e._tooltip.hidden=!0,e._tooltip.setAttribute("role","tooltip"),e._tooltip.setAttribute("aria-live","polite"),e._tooltip.style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),L.DomEvent.on(e.container,e._pointerEvents,e)),e.root&&_f(e,t)}async function Pf(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function _t(e,t){e._added=Promise.withResolvers(),e.container&&(Hr(e),L.DomEvent.off(e.container,e._pointerEvents,e),e.container=null);let r,o,i,n;for(r of e._areas.values())Ve(e,r);e._areas.clear(),e._tooltip?.remove(),e._tooltip=null,(e.url||e._geojson)&&Fr(e,!1);let a=e._shared;if(a){if(j(e.root,null),a._layers.delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,e),t.off("zoomstart",Zt,e),t.off("zoomanim",jt,e),t.off("zoomend",Ot,e),tr(e),e._layers.size){let s=e._layers.values().next().value;for(o of["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"])s[o]=e[o],delete e[o];for(i of s._layers)i._shared=s;F.renderers.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,s),t.on("zoomstart",Zt,s),t.on("zoomanim",jt,s),t.on("zoomend",Ot,s),B(s)}else{e._roofRaster&&O(e,e._roofRaster.texture.texture),e._roofRaster=null;for(n of e._zoomTransitions?.keys()||[])n.play();e._zoomTransitions=null,e._zoomView=null,delete t._cameraView,t.getContainer().classList.remove("leaflet-camera-zoom");let s=e.renderer;s.canvas.remove(),Pf(s,e),F.renderers.delete(t);for(o of["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"])delete e[o]}else B(a);e._shared=e.renderer=e.scene=e.camera=null}}function Tf(e){if(!e._map)return;let t;for(t of e._areas.values())Ve(e,t);e._areas.clear(),qe(e)}function Lf(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Sf(e){let t=new DataView(e),r=new TextDecoder,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let f;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(f=s),i+=n}if(!o)throw new Error("Missing GLB JSON");f&&(o.buffers[0].binary=f)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Lf(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}function Yr(e,t){let r=new Float32Array(e.length),o,i,n,a,s,f,m,l,p,u;for(o=0;o<(t?.length||e.length/3);o+=3){for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=[],f=[],m=0;m<3;m++)s.push(e[n*3+m]-e[i*3+m]),f.push(e[a*3+m]-e[i*3+m]);l=[s[1]*f[2]-s[2]*f[1],s[2]*f[0]-s[0]*f[2],s[0]*f[1]-s[1]*f[0]];for(p of[i,n,a])for(m=0;m<3;m++)r[p*3+m]+=l[m]}for(o=0;o<r.length;o+=3)for(u=Math.hypot(...r.subarray(o,o+3))||1,m=0;m<3;m++)r[o+m]/=u;return r}function mi(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)mi(r,t)}function Pt(e,t){if(!e.model)return;let r=[];mi(e.model,r);let o,i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M;if(!t?._terrainReady||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),oe(n));return}ae(e.root);let S=e._map,z=S.options.crs,T=z.project(e._shared._sceneOrigin),E=Math.cos(e._shared._sceneOrigin.lat*Math.PI/180),b=z.scale(t._terrainZoom);for(o of r){for(n=o.geometry,f=n.attributes.position,n._terrainBasePositions||=f.data.slice(),m=n.attributes.normal,n._terrainBaseNormals||=m.data.slice(),f.data.set(n._terrainBasePositions),l=o.worldMatrix,p=new DOMMatrix(l).inverse().toFloat64Array(),u=0;u<f.data.length;u+=3)d=f.data[u],c=f.data[u+1],h=f.data[u+2],g=l[1]*d+l[5]*c+l[9]*h+l[13],y=Math.max(0,Math.min(1,1-(g-e.root.position[1])/8)),y&&(x=l[0]*d+l[4]*c+l[8]*h+l[12],v=l[2]*d+l[6]*c+l[10]*h+l[14],w=z.transformation.transform(new L.Point(T.x+x/E,T.y-v/E),b),P=Y(t,w),Number.isFinite(P)&&(M=(P-g)*y,f.data[u]+=p[4]*M,f.data[u+1]+=p[5]*M,f.data[u+2]+=p[6]*M));o.device.queue.writeBuffer(f.buffer,0,f.data),m.data.set(Yr(f.data,n.attributes.index?.data)),o.device.queue.writeBuffer(m.buffer,0,m.data),oe(n)}B(e)}async function bf(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}async function Cf(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}function Ef(e){return{addressModeU:e.wrapS===33071?"clamp-to-edge":e.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e.wrapT===33071?"clamp-to-edge":e.wrapT===33648?"mirror-repeat":"repeat",magFilter:e.magFilter===9728?"nearest":"linear",minFilter:e.minFilter===9728||e.minFilter===9984||e.minFilter===9986?"nearest":"linear"}}function Ht(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=o.renderer.device,f=`${t.index}:${r}`;if(!a.has(f)){let m=i.textures[t.index],l=i.samplers?.[m.sampler]||{},p=n[m.source],u=r?"rgba8unorm-srgb":"rgba8unorm",d=Ef(l);a.set(f,{device:s,texture:s.createTexture({size:[p.width,p.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(d),samplerOptions:d,format:u,srgb:r,image:p,flipY:!1,uploaded:null})}return a.get(f)}function Bf(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness||{};return{color:(o.baseColorFactor||[1,1,1,1]).slice(0,3),opacity:o.baseColorFactor?.[3]??1,metallic:o.metallicFactor??1,roughness:o.roughnessFactor??1,baseTexture:Ht(e,o.baseColorTexture,!0),metalTexture:Ht(e,o.metallicRoughnessTexture),emissiveTexture:Ht(e,t.emissiveTexture,!0),occlusionTexture:Ht(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function Af(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||[0,0,0,1],[n,a,s]=e.scale||[1,1,1];return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||[0,0,0],1]}var li={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var zf={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function pi(e,t,r,o,i,n,a,s,f,m){let l=e.bufferViews[a],p=t.BYTES_PER_ELEMENT,u=e.buffers[l.buffer].binary;if(m||=r*p,!u||m<r*p||s<0||(l.byteOffset||0)+l.byteLength>u.byteLength||(f-1)*m+r*p+s>l.byteLength)throw new Error("glTF accessor outside buffer view");let d,c,h;for(d=0;d<f;d++){if(c=new t(u.slice((l.byteOffset||0)+s+d*m,(l.byteOffset||0)+s+d*m+r*p)),h=n?n[d]:d,n&&h>=i)throw new Error("Invalid sparse glTF index");o.set(c,h*r)}}function ui(e,t){let r=e.accessors[t],o=li[r.componentType],i=zf[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);if(r.bufferView!==void 0&&pi(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse){let f=r.sparse,m=li[f.indices.componentType];if(![Uint8Array,Uint16Array,Uint32Array].includes(m))throw new Error("Invalid sparse glTF indices");let l=e.bufferViews[f.indices.bufferView],p=(l.byteOffset||0)+(f.indices.byteOffset||0);if(f.count>r.count||(f.indices.byteOffset||0)+f.count*m.BYTES_PER_ELEMENT>l.byteLength)throw new Error("Invalid sparse glTF indices");let u=new m(e.buffers[l.buffer].binary.slice(p,p+f.count*m.BYTES_PER_ELEMENT));pi(e,o,i,n,r.count,u,f.values.bufferView,f.values.byteOffset||0,f.count,0)}if(r.componentType===5126)return{data:n,size:i};let a=new Float32Array(n.length),s;for(s=0;s<n.length;s++)a[s]=r.normalized?Math.max(-1,n[s]/(o===Int8Array?127:o===Int16Array?32767:o===Uint8Array?255:o===Uint32Array?4294967295:65535)):n[s];return{data:a,size:i,indices:n}}function ci(e,t){let{backend:r,description:o,materials:i,active:n,resources:a}=e;if(n.has(t))throw new Error("Cyclic glTF nodes");let s=o.nodes[t];if(!s)throw new Error("Invalid glTF node");n.add(t);let f={...J(),name:s.name};f.matrix=Af(s);let m,l,p,u,d,c,h,g,y,x,v,w,P,M,S;if(s.mesh!==void 0)for(m of o.meshes[s.mesh].primitives){l={};for([p,u]of[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]])m.attributes[p]!==void 0&&(l[u]=ui(o,m.attributes[p]));if(!l.position)throw new Error("glTF mesh has no positions");if(d=l.position.data.length/3,l.position.size!==3||d<3)throw new Error("Invalid glTF vertex attributes");for(c of Object.values(l))if(c.data.length/c.size!==d)throw new Error("Invalid glTF vertex attributes");if(m.indices!==void 0){if(h=ui(o,m.indices),l.index={size:1,data:h.indices},!(h.indices instanceof Uint8Array||h.indices instanceof Uint16Array||h.indices instanceof Uint32Array)||h.size!==1||h.indices.length%3)throw new Error("Invalid glTF triangle indices");for(g of h.indices)if(g>=d)throw new Error("Invalid glTF triangle indices")}if(!l.index&&d%3)throw new Error("Incomplete glTF triangle");if(l.normal||(y=Yr(l.position.data,l.index?.data),l.normal={size:3,data:y}),x=i[m.material]||{color:[1,1,1],metallic:1},(x.baseTexture||x.metalTexture||x.emissiveTexture||x.occlusionTexture)&&!l.uv)throw new Error("Textured model mesh requires UV coordinates");v=se(r,x),a.push(v),w=r.renderer.device,l.index?.data instanceof Uint8Array&&(l.index.data=Uint16Array.from(l.index.data));for([u,c]of Object.entries(l))c.size||=1,c.count=c.data.length/c.size,c.indexFormat=c.data instanceof Uint32Array?"uint32":"uint16",c.buffer=w.createBuffer({size:Math.max(4,c.data.byteLength),usage:u==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),w.queue.writeBuffer(c.buffer,0,c.data);P={device:w,attributes:l,drawRange:{start:0,count:l.index?.count||l.position.count}},a.push(P),M={...J(),device:w,geometry:P,program:v,fadeDuration:250,id:F.nextId++,renderOrder:0},M.name=o.meshes[s.mesh].name,M.extras=s.extras||{},j(M,f)}for(S of s.children||[])j(ci(e,S),f);return n.delete(t),f}async function If(e){await e._added.promise;let t=new URL(e.modelUrl,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Sf(o),n=new URL(".",t).href,a=[],s,f,m,l,p,u,d;for(s of i.buffers||[])a.push(bf(s,n));await Promise.all(a),await e._added.promise;let c=[];for(f of i.images||[])c.push(Cf(i,n,f));let h=await Promise.all(c);await e._map?._terrain3D?._terrainPromise;let g={backend:e,description:i,images:h,textures:new Map,materials:[],active:new Set,resources:[]};for(m of i.materials||[])g.materials.push(Bf(g,m));let y=i.scenes?.[i.scene||0];if(!y)throw new Error("Missing glTF scene");let x=[];try{for(l of y.nodes)x.push(ci(g,l))}catch(w){for(p of g.resources)if(p.attributes)for(u of Object.values(p.attributes))u.buffer.destroy();else p.pipelineCache.clear();throw w}let v={...J(),id:t,extras:i.extras||{}};if(!x.length)throw new Error("Expected a glTF model with a non-empty scene");for(d of x)j(d,v);if(e.model=v,e.options.rotation){let[w,P=w,M=w]=e.options.rotation;e.model.rotation[0]=w,e.model.rotation[1]=P,e.model.rotation[2]=M}if(e.options.scale){let[w,P=w,M=w]=e.options.scale;e.model.scale[0]=w,e.model.scale[1]=P,e.model.scale[2]=M}j(e.model,e.root),Pt(e,e._map?._terrain3D)}function Df(e){let t={};return e.url&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=qe.bind(null,e)),(e._geojson||e.url)&&(t.terrainchange=Tf.bind(null,e)),t}async function Rf(e){try{e.root=J(),e.raycaster={origin:[0,0,0],direction:[0,0,0]},(e.url||e._geojson)&&(e.group=e.root,e.url&&(e.header=await vt(e))),e._map&&(await wt(e,e._map),e._added.resolve()),e.modelUrl&&await If(e),e._shared&&B(e),e.fire("ready")}catch(t){e.fire("error",{error:t})}}function _e(e,t={}){e._3d=!0,L.Util.setOptions(e,{ariaLabel:"3D scene",...t}),e.onAdd=Wr.bind(null,e),e.onRemove=_t.bind(null,e),e.getEvents=Df.bind(null,e);let r=!e._geojson&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);e.modelUrl=r?e.options.url:null,e.url=e.options.url&&!r&&!e._geojson?new URL(e.options.url,document.baseURI).href:null,e._directories=new Map,e.options.center&&(e.location=new L.LatLng(e.options.center[0],e.options.center[1])),e._areas=new Map,e._inflight=0,e._added=Promise.withResolvers(),queueMicrotask(Rf.bind(null,e))}function Uf(e){return e._loadingTiles>0}function Of(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}function Gf(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,i=new Float32Array(r*o*65536).fill(-1e9),n=1/0,a=-1/0,s,f,m,l,p,u,d,c,h;for([s,f]of e)for(m=s.split("/"),l=Number(m[0]),p=Number(m[1]),u=(p-t.min.y)*256*r*256+(l-t.min.x)*256,d=0;d<256;d++)for(c=0;c<256;c++)h=f[d*256+c],!(!Number.isFinite(h)||h<=-1e3)&&(i[u+d*r*256+c]=h,n=Math.min(n,h),a=Math.max(a,h));return{elevations:i,low:n,high:a}}function Ff(e){let t=[],r=[],o=[],i=[],n,a,s,f,m,l;for(n=0;n<=e;n++)for(a=0;a<=e;a++)t.push(a/e,0,n/e),r.push(0,1,0),o.push(a/e,n/e),n<e&&a<e&&(s=n*(e+1)+a,f=s+1,m=s+e+1,l=m+1,i.push(s,m,f,f,m,l));return{position:{size:3,data:new Float32Array(t)},normal:{size:3,data:new Float32Array(r)},uv:{size:2,data:new Float32Array(o)},index:{data:new Uint16Array(i)}}}async function Nf(e,t,r,o){if(!await e._terrainPromise||!e._map||e._map._terrain3D!==e||t._terrain3D!==e||o.request.signal.aborted||!t._rasterTiles.has(`${r.z}/${r.x}/${r.y}`)||e._rasterTiles.has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-e._terrainZoom))),a=e._map,s=a.options.crs,f=s.project(e.location),m=Math.cos(e.location.lat*Math.PI/180),l=s.scale(r.z),p=2**(e._terrainZoom-r.z),u=s.transformation.untransform(new L.Point(r.x*256,r.y*256),l),d=s.transformation.untransform(new L.Point((r.x+1)*256,(r.y+1)*256),l),c=e.renderer.device,h=o.texture;if(!e._rasterProgram||e._rasterProgram.device!==c){let E=e._terrainBounds,b=E.max.x-E.min.x+1,R=E.max.y-E.min.y+1,{elevations:D,low:U,high:G}=Gf(e._terrainTiles,E);e._dem&&O(e,e._dem.texture),e._dem={texture:c.createTexture({size:[b*256,R*256],format:"r32float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),low:Number.isFinite(U)?U:e._terrainOriginElevation,high:Number.isFinite(G)?G:e._terrainOriginElevation},c.queue.writeTexture({texture:e._dem.texture},D,{bytesPerRow:b*1024},[b*256,R*256]),e._terrainGrids=new Map,e._rasterProgram=se(e,{baseTexture:h,unlit:!0,terrain:e._dem,alphaMode:"BLEND",depthWrite:!0})}let g=e._terrainGrids.get(n),y,x;if(!g){g=Ff(n);for([y,x]of Object.entries(g))x.size||=1,x.count=x.data.length/x.size,x.indexFormat="uint16",x.buffer=c.createBuffer({size:Math.max(4,x.data.byteLength),usage:y==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),c.queue.writeBuffer(x.buffer,0,x.data);e._terrainGrids.set(n,g)}let v=e._terrainOriginElevation,w=Math.min(e._dem.low,v)-v,P=Math.max(e._dem.high,v)-v,M=(d.x-u.x)*m,S=-(d.y-u.y)*m,z={device:c,attributes:g,drawRange:{start:0,count:g.index.count},bounds:{min:[0,w,0],max:[1,P,1],center:[.5,(w+P)/2,.5],radius:Math.hypot(M,P-w,S)/2/Math.max(M,1,S)}},T={position:[(u.x-f.x)*m,0,-(u.y-f.y)*m],rotation:[0,0,0],scale:[M,1,S],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:c,geometry:z,program:e._rasterProgram,texture:h,terrain:[r.x*256*p-e._terrainBounds.min.x*256,r.y*256*p-e._terrainBounds.min.y*256,256*p,v],tile:o,opacity:t.options.opacity??1,id:F.nextId++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0};o.mesh.visible=!1,j(T,e.root),B(e),e._rasterTiles.set(o,T)}async function Xr(e,t,r){if(e._terrain3D&&r.done&&!r.request.signal.aborted&&e._rasterTiles.get(`${t.z}/${t.x}/${t.y}`)===r)try{await Nf(e._terrain3D,e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function jf(e){let t={position:{size:3,data:new Float32Array([0,0,0,1,0,0,0,0,1,1,0,1])},normal:{size:3,data:new Float32Array([0,1,0,0,1,0,0,1,0,0,1,0])},uv:{size:2,data:new Float32Array([0,0,1,0,0,1,1,1])},index:{data:new Uint16Array([0,2,1,1,2,3])}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer({size:o.data.byteLength,usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Zf(e,t){let r=e.renderer.device,o={device:r,texture:r.createTexture({size:[t.image.width,t.image.height],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:r.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"}),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null};e._rasterProgram||(e._rasterProgram=se(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND"})),e._rasterGeometry||(e._rasterGeometry=jf(r));let{coords:i}=t,n=e._map.options.crs,a=n.project(e.location),s=Math.cos(e.location.lat*Math.PI/180),f=n.scale(i.z),m=n.transformation.untransform(new L.Point(i.x*256,i.y*256),f),l=n.transformation.untransform(new L.Point((i.x+1)*256,(i.y+1)*256),f),p=(l.x-m.x)*s,u=-(l.y-m.y)*s;t.texture=o,t.mesh={position:[(m.x-a.x)*s,0,-(m.y-a.y)*s],rotation:[0,0,0],scale:[p,1,u],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:e._rasterGeometry,program:e._rasterProgram,texture:o,opacity:e.options.opacity,id:F.nextId++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0},j(t.mesh,e.root)}async function $f(e,t){try{await e.ready;let r=await e.options.archive.getZxy(t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted)return;if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{t.image=await createImageBitmap(new Blob([r.data]))}catch{throw new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Zf(e,t),t.loadedAt=performance.now(),t.done=!0,e._rasterVersion=(e._rasterVersion||0)+1,Xr(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),B(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,e._rasterVersion=(e._rasterVersion||0)+1,e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{e._loadingTiles--,e._map&&(Kr(e),nt(e),e._loadingTiles||e.fire("load"),B(e))}}function Vf(e,t){t.started=!0;let r=e._loadingTiles===0;return e._loadingTiles++,e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),$f(e,t)}function Kr(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of e._rasterTiles.values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Of);for({tile:i}of o){if(e._loadingTiles>=4)break;Vf(e,i)}}function Qr(e){let t=e._map;if(!t||!e._shared||!e.header)return;let r=Math.max(e.header.minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));e._tileZoom=r;let o=t.getBounds(),i=t.project(o.getNorthWest(),r).divideBy(256).floor(),n=t.project(o.getSouthEast(),r).divideBy(256).floor(),a=e.header.maxLat===void 0||e.header.minLon===void 0?new L.Point(0,0):t.project([e.header.maxLat,e.header.minLon],r).divideBy(256).floor(),s=e.header.minLat===void 0||e.header.maxLon===void 0?new L.Point(2**r-1,2**r-1):t.project([e.header.minLat,e.header.maxLon],r).divideBy(256).floor(),f=t.project(t.getCenter(),r).divideBy(256).floor(),m=new Map,l,p,u,d,c,h;for(l=Math.max(0,i.x,a.x,f.x-6);l<=Math.min(2**r-1,n.x,s.x,f.x+6);l++)for(p=Math.max(0,i.y,a.y,f.y-6);p<=Math.min(2**r-1,n.y,s.y,f.y+6);p++)m.set(`${r}/${l}/${p}`,{z:r,x:l,y:p});e._wantedRasterTiles=new Set(m.keys());let g=new Map,y=Math.max(e.header.minZoom??0,r-2),x=2**(r-y);if(y<r)for([u,d]of m)e._rasterTiles.get(u)?.done||(c={z:y,x:Math.floor(d.x/x),y:Math.floor(d.y/x)},g.set(`${c.z}/${c.x}/${c.y}`,c));let v=new Map([...g,...m]);for([u,h]of e._rasterTiles)!v.has(u)&&!h.done&&it(e,h);for([u,d]of v)e._rasterTiles.has(u)||(h={coords:d,request:new AbortController,done:!1},e._rasterTiles.set(u,h));Kr(e),nt(e)}function qf(e){let t=Qr.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Hf(e,t){let r=await t.getHeader();return e.options.archive=t,e.header=r,e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Wf(e,t){throw e.fire("error",{error:t}),t}function Tt(e,t){if(e._terrain3D===t)return;let r;for(r of e._rasterTiles.values())e._terrain3D&&ot(e._terrain3D,r),r.mesh&&(r.mesh.visible=!0,j(r.mesh,e.root));if(e._terrain3D=t||null,t)for(r of e._rasterTiles.values())r.done&&Xr(e,r.coords,r)}async function Yf(e,t,r){try{await r,e._added.resolve(),Tt(e,t._terrain3D)}catch(o){e.fire("error",{error:o})}}async function Xf(e,t,r){try{await Promise.all([r,e.ready]),e._map===t&&t.hasLayer(e)&&Qr(e)}catch(o){e.fire("error",{error:o})}}function Kf(e,t){e.location||(e.location=t.getCenter());let r=wt(e,t);Yf(e,t,r),Xf(e,t,r)}function Jf(e){let t,r;for(t of e._rasterTiles.values())it(e,t);if(e._rasterProgram?.pipelineCache.clear(),e._rasterProgram=null,e._rasterGeometry){for(r of Object.values(e._rasterGeometry.attributes))O(e,r.buffer);e._rasterGeometry=null}}function Qf(e,t){Jf(e),e._terrain3D=null,_t(e,t)}function kf(e,t){let r,o;for(r of e._rasterTiles.values())r.mesh&&(r.mesh.opacity=t),o=e._terrain3D?._rasterTiles.get(r),o&&(o.opacity=t);B(e)}function em(e,t){return e.options.opacity=t,kf(e,t),e}function tm(e,t){let r,o;for(r of e._rasterTiles.values())r.mesh&&(r.mesh.renderOrder=t),o=e._terrain3D?._rasterTiles.get(r),o&&(o.renderOrder=t);B(e)}function rm(e,t){return e.options.zIndex=t,tm(e,t),e}function om(e,t){e._read=Ze.bind(null,e),e.getHeader=vt.bind(null,e),e.getZxy=jr.bind(null,e),e.getTileSize=rt,e.isLoading=Uf.bind(null,e),e.setOpacity=em.bind(null,e),e.setZIndex=rm.bind(null,e),e.onAdd=Kf.bind(null,e),e.onRemove=Qf.bind(null,e),e.getEvents=qf.bind(null,e),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},L.Util.setOptions(e,t),e.root=J(),e._areas=new Map,e._rasterTiles=new Map,e._loadingTiles=0,e._added=Promise.withResolvers(),e.url=new URL(t.url,document.baseURI).href,e._directories=new Map,e.ready=Promise.resolve(e.options.archive||e).then(Hf.bind(null,e)).catch(Wf.bind(null,e))}function im(e,t){e.options.data=t,delete e.options.url;let r;for(r of e._areas.values())Ve(e,r);return e._areas.clear(),qe(e),e}function nm(e){e._type==="pmtiles"&&Tt(e,null)}function am(e,t){e._terrainController?.abort(),e._terrainLoading=!1,e._terrainReady=!1,t.eachLayer(nm);let r,o,i,n;for(r of e._rasterTiles.keys())ot(e,r);t._terrain3D===e&&delete t._terrain3D;for(o of Object.values(t._layers))Pt(o,null),Mt(o);t.fire("terrainchange"),e._terrainTiles.clear(),e._terrainOriginElevation=0,e._terrainPromise=null,e._rasterProgram&&e._rasterProgram.pipelineCache.clear(),e._rasterProgram=null,e._dem&&O(e,e._dem.texture),e._dem=null;for(i of e._terrainGrids?.values()||[])for(n of Object.values(i))O(e,n.buffer);e._terrainGrids=null,e._bridges=null,k(e,e._bridgeMesh),e._bridgeMesh=null,_t(e,t)}function sm([e,t,r],o,i,n,a){let s=o.project(new L.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function kr(e,t,r,o,i){e.push(...o),t.push(...i),r.push(.6,.58,.54)}function Wt(e){return[e[0],e[1]-1.2,e[2]]}function fm(e,t){let r=e._map,o=r.options.crs,i=e._terrainZoom,n=o.project(e.location),a=Math.cos(e.location.lat*Math.PI/180),s=e.root.position[1],f=[],m=[],l=[];e._bridges=new Map;let p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V,ee,he,Ie,ge,De,X,xe,te,le,pe,Te,ne,Re,ye,Ue;for({geometry:p}of t.features){u=p.type==="Polygon"?[p.coordinates]:p.type==="MultiPolygon"?p.coordinates:[];for(d of u){c=[];for(h of d)g=h.slice(0,-1),g.length>=3&&c.push(g);if(c.length){y=[],x=[];for(h of c)for([v,w,P]of h)M=r.project([w,v],i),y.push([M.x,M.y,P]);for(h of c)for(S of h)x.push(sm(S,o,n,a,s));z=void 0;try{T=[],E=0;for(h of c){for(g=[],b=0;b<h.length;b++)g.push({x:y[E+b][0],y:y[E+b][1]});T.push(g),E+=h.length}[R,...D]=T,z=st(R,D)}catch{continue}U=[],G=[],$=[];for(H of z){V=[];for(b of H)V.push(y[b]);U.push(V)}for(M of y)G.push(M[0]),$.push(M[1]);for(ee={triangles:U,min:[Math.min(...G),Math.min(...$)],max:[Math.max(...G),Math.max(...$)]},he=Math.floor(ee.min[0]/64);he<=Math.floor(ee.max[0]/64);he++)for(Ie=Math.floor(ee.min[1]/64);Ie<=Math.floor(ee.max[1]/64);Ie++)ge=`${he}/${Ie}`,e._bridges.set(ge,[...e._bridges.get(ge)||[],ee]);for([De,X,xe]of z){[te,le,pe]=[x[De],x[X],x[xe]],(le[2]-te[2])*(pe[0]-te[0])-(le[0]-te[0])*(pe[2]-te[2])<0&&([X,xe]=[xe,X]);for(b of[De,X,xe])kr(f,m,l,x[b],[0,1,0]);for(b of[De,xe,X])kr(f,m,l,Wt(x[b]),[0,-1,0])}Te=0;for(h of c){for(b=0;b<h.length;b++){M=x[Te+b],ne=x[Te+(b+1)%h.length],Re=Math.hypot(ne[0]-M[0],ne[2]-M[2])||1,ye=[(ne[2]-M[2])/Re,0,-(ne[0]-M[0])/Re];for(Ue of[M,ne,Wt(ne),M,Wt(ne),Wt(M)])kr(f,m,l,Ue,ye)}Te+=h.length}}}}f.length&&(e._bridgeMesh=Ge(e,{position:f,normal:m,color:l}))}async function mm(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await r.getZxy(n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);t._terrainTiles.set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function lm(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}async function eo(e){if(e._terrainLoading||!e._map)return;e._terrainLoading=!0,e._terrainReady=!1;let t=e._terrainController=new AbortController,r,o,i,n;try{if(!e.terrainSource)throw new Error("Terrain layer requires a PMTiles elevation archive");let a=e._terrainArchive=new L.Layer({source:{type:"pmtiles",url:e.terrainSource}});await a.ready;let s=a.header;if(s.tileType!==0||s.minZoom!==s.maxZoom)throw new Error("Expected a single-zoom Float32 PMTiles terrain archive");e._terrainZoom=s.maxZoom;let f=e._map,m=f.project([s.maxLat,s.minLon],e._terrainZoom).divideBy(256).floor(),l=f.project([s.minLat,s.maxLon],e._terrainZoom).divideBy(256).floor();e._terrainBounds=new L.Bounds(m,l);let p=[],u=f.project(f.getCenter(),e._terrainZoom).divideBy(256);for(r=m.x;r<=l.x;r++)for(o=m.y;o<=l.y;o++)p.push({z:e._terrainZoom,x:r,y:o,distance:Math.hypot(r+.5-u.x,o+.5-u.y)});p.sort(Zr);let d={backend:e,archive:a,controller:t,tiles:p,next:0},c=[];for(i=0;i<Math.min(4,p.length);i++)c.push(mm(d));await Promise.all(c);let h=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(lm);if(t.signal.aborted||e._map!==f)return;e._terrainReady=!0,e._terrainOriginElevation=Y(e,e.location)??0;for(n of Object.values(f._layers))Mt(n),Pt(n,e);return h&&fm(e,h),f.fire("terrainchange"),B(e),e.fire("terrainready"),!0}catch(a){return t.signal.aborted||e.fire("error",{error:a}),!1}finally{e._terrainLoading=!1}}function pm(){eo(this.backend).then(this.resolve,this.reject)}function um(e){e._type==="pmtiles"&&Tt(e,this)}function cm(e,t){if(t._terrain3D&&t._terrain3D!==e)throw new Error("Only one terrain layer can be active per map");if(t._terrain3D=e,Wr(e,t),e.root)e._terrainPromise=eo(e);else{let r=Promise.withResolvers();e._terrainPromise=r.promise,e.once("ready",pm,{backend:e,...r})}t.eachLayer(um,e),t.fire("terrainchange")}function dm(e,t){let r=t.url,o={...t};delete o.url,_e(e,o),e.terrainSource=r,e._terrainTiles=new Map,e._rasterTiles=new Map,e._terrainReady=!1,e.onAdd=cm.bind(null,e),e.onRemove=am.bind(null,e)}function to(e,t,r){let o=[],i;for(i=0;i<e.length;i++)o.push(e[i]+(t[i]-e[i])*r);return o}function di(e){let t=[],r;for(r of e)t.push(Math.round(r));return`rgb(${t.join(", ")})`}function hm(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]],r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${di(to(n[1],i[1],a))}, ${di(to(n[2],i[2],a))})`,tint:to(n[3],i[3],a)}}function ro(e,t,r,o,i){let n=Math.PI/180,a=(280.16+360.9856235*e+r)*n-o,s=t*n,f=Math.asin(Math.sin(s)*Math.sin(i)+Math.cos(s)*Math.cos(i)*Math.cos(a)),l=(Math.atan2(Math.sin(a),Math.cos(a)*Math.sin(s)-Math.tan(i)*Math.cos(s))/n+180+360)%360;return{altitude:f/n,azimuth:l,direction:[Math.sin(l*n)*Math.cos(f),Math.sin(f),-Math.cos(l*n)*Math.cos(f)]}}function oo(e,t,r){let o=new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");let i=Math.PI/180,n=o/864e5-10957.5,a=(357.5291+.98560028*n)*i,s=a+(1.9148*Math.sin(a)+.02*Math.sin(2*a)+3e-4*Math.sin(3*a)+102.9372+180)*i,f=23.4397*i,m=Math.asin(Math.sin(s)*Math.sin(f)),l=Math.atan2(Math.sin(s)*Math.cos(f),Math.cos(s));return ro(n,t,r,l,m)}function gm(e,t,r){oo(e,t,r);let o=Math.PI/180,i=new Date(e).getTime()/864e5-10957.5,n=(134.963+13.064993*i)*o,a=(218.316+13.176396*i+6.289*Math.sin(n))*o,s=5.128*Math.sin((93.272+13.22935*i)*o)*o,f=23.4397*o,m=Math.cos(s)*Math.cos(a),l=Math.cos(s)*Math.sin(a)*Math.cos(f)-Math.sin(s)*Math.sin(f),p=Math.cos(s)*Math.sin(a)*Math.sin(f)+Math.sin(s)*Math.cos(f);return ro(i,t,r,Math.atan2(l,m),Math.asin(p))}function xm(e,t,r,o){let[i,n,a]=e,s=-i*Math.sin(o)*Math.sin(r)-n*Math.cos(r)-a*Math.cos(o)*Math.sin(r);return s>0?{left:t.x/2+t.y*1.5*(i*Math.cos(o)-a*Math.sin(o))/s,top:t.y/2-t.y*1.5*(-i*Math.sin(o)*Math.cos(r)+n*Math.sin(r)-a*Math.cos(o)*Math.cos(r))/s}:null}function Se({map:e,originalSky:t,sunDisc:r,moonDisc:o}){let i=e._sunlight,n=e._pitchSky;i?e.getContainer().style.setProperty("--leaflet-sky-background",i.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let a=e.getSize(),s=e.getPitch()*Math.PI/180,f=e.getBearing()*Math.PI/180,m,l,p,u,d;for([m,l]of[[r,i],[o,i?.moon]])m.hidden=!0,!(!n||!l||l.altitude<=0||!i)&&(m.parentNode!==n&&n.append(m),p=xm(l.direction,a,s,f),p&&({left:u,top:d}=p,m.hidden=u<0||u>a.x||d<0||d>n.clientHeight||n.style.display==="none",m.style.left=`${u}px`,m.style.top=`${d}px`))}function Qe(e){let t=F.renderers.get(e);t&&B(t)}function We(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let f=r.getCenter(),m=r._sunlight=oo(t.time,f.lat,f.lng);Object.assign(m,hm(m.altitude)),m.moon=gm(t.time,f.lat,f.lng),a.textContent=m.altitude<=0?"Night \xB7 no direct sunlight":m.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${m.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Se(e),Qe(r)}catch(s){delete r._sunlight,Se(e),Qe(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function ym(e){e.control.live=!0,We(e)}function vm(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),delete r._sunlight,Se(e),Qe(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),We(e)}function Mm(e){e.control.live&&We(e)}function wm(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e;clearInterval(r),delete t._timeControl,t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),delete t._sunlight,Se(e),o.remove(),i.remove(),Qe(t)}function _m(e,t){t._timeControl=e;let r=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),o="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",i=L.DomUtil.create("div","sunlight-sun"),n=L.DomUtil.create("div","sunlight-moon");i.style.cssText=o+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",n.style.cssText=o+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",i.setAttribute("role","img"),i.setAttribute("aria-label","Sun"),n.setAttribute("role","img"),n.setAttribute("aria-label","Moon");let a=L.DomUtil.create("div","sunlight-control");a.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let s=document.createElement("input");s.type="date",s.style.cssText="width:100%;box-sizing:border-box;",s.setAttribute("aria-label","Solar date (UTC)");let f=document.createElement("input");f.type="range",f.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",f.min="0",f.max="1439",f.step="1",f.setAttribute("aria-label","Time of day (UTC)");let m=document.createElement("output");m.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",m.setAttribute("aria-live","off");let l=document.createElement("button");l.type="button",l.textContent="Now";let p=document.createElement("div");p.className="sunlight-time",p.style.cssText="display:flex;justify-content:space-between;align-items:center;",p.append(m,l);let u=document.createElement("div");u.className="sunlight-status",u.style.marginTop="5px",u.setAttribute("role","status");let d=document.createElement("small");d.style.color="#555",d.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",a.append(s,f,p,u,d);let c={control:e,map:t,originalSky:r,sunDisc:i,moonDisc:n,date:s,slider:f,output:m,status:u};return c.update=We.bind(null,c),c.updateSky=Se.bind(null,c),l.onclick=ym.bind(null,c),s.onchange=f.oninput=vm.bind(null,c),L.DomEvent.disableClickPropagation(a),L.DomEvent.disableScrollPropagation(a),c.update(),c.timer=setInterval(Mm,6e4,c),t.on("moveend",c.update),t.on("move rotate pitch resize",c.updateSky),e.onRemove=wm.bind(null,c),a}var Lt={};function Pm(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===L.Util.stamp(t)||i instanceof L.LayerGroup&&i.hasLayer(t))return o.closest("label").after(r),!0;return!1}function io(e){let t=Pm(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}function Tm(){let e=Lt.pendingPlacements.shift();e?.map.hasLayer(e.layer)&&io(e)}function no(){Lt.pendingPlacements.push(this),queueMicrotask(Tm)}function Lm(){this.map.off("layeradd layerremove",no,this),this.element.remove()}Lt.pendingPlacements=[];function ao(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",no,o),e.once("remove",Lm,o),io(o)}function Sm(e){return this.control.addTo(e)}function bm(){return L.Control.prototype.remove.call(this.control)}function Cm(e){L.Util.setOptions(this,e),this.live=!0,this.layer=new L.Layer,this.layer.control=this,this.layer.onAdd=Sm,this.layer.onRemove=bm}function Em(e){return _m(this,e)}function hi(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),Object.assign(e.style,t?{background:"",padding:"2px 0 6px 20px",margin:"0"}:{background:"#fff",padding:"8px",margin:""})}function Bm(e){L.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?ao(this.layer,t,hi.bind(null,t)):hi(t,!1),this}function Am(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):L.Control.prototype.remove.call(this)}L.Control.Time=L.Control.extend({options:{position:"bottomright"},initialize:Cm,onAdd:Em,addTo:Bm,remove:Am});function Yt(e,t,r,o,i,n,a){let s=[],f=[],m,l,p;for(m=0;m<i.length;m++)s.push(i[m]-o[m]);for(m=0;m<n.length;m++)f.push(n[m]-o[m]);let u=[s[1]*f[2]-s[2]*f[1],s[2]*f[0]-s[0]*f[2],s[0]*f[1]-s[1]*f[0]],d=Math.hypot(...u);for(l of[o,i,n]){e.push(...l);for(p of u)t.push(p/d);r.push(...a)}}function St(e){let t=[],r=[],o=[],i,n,a,s,f,m,l,p,u,d,c;for([i,n,a,s,f=i]of e){m=[],l=[];for([p,u]of i)m.push([p,n,u]);for([p,u]of f)l.push([p,a,u]);for(d=0;d<i.length;d++)c=(d+1)%i.length,Yt(t,r,o,m[d],m[c],l[c],s),Yt(t,r,o,m[d],l[c],l[d],s);for(d=1;d<i.length-1;d++)Yt(t,r,o,l[0],l[d],l[d+1],s),Yt(t,r,o,m[0],m[d+1],m[d],s)}return{position:t,normal:r,color:o}}function zm({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=[],o;for(o of[e.name,e.departure&&`Departure ${e.departure} ${e.timetable.timeZone}`,e.description])o&&r.push(o);return t.textContent=r.join(`
|
|
3
|
-
`),t}function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var ke=[.12,.15,.18];var bt=[.05,.05,.05];function be(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}var Ce=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var so=[1.9,1.85,1.7];var fo=[1.7,.06,.05];function Im(e){let t=Ce[e%Ce.length];return[...be(.7,.92,-1.68,-1.02,0,.64,bt),...be(.7,.92,1.02,1.68,0,.64,bt),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,ke,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...be(.38,.8,-2.3,-2.16,.56,.76,so),[C(-.78,.78,2.16,2.3),.6,.76,fo]]}var gi=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];var Pe=[.92,.93,.92];function Dm(){let e=[],t;for(t=0;t<12;t++)e.push(...be(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Rm(){return[[gi,0,.8,[.1,.16,.26]],[gi,.8,1.4,Pe],[C(-5,5,-18,26),1.4,3.7,ke,C(-4.6,4.6,-17.4,25.6)],...be(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Pe],...Dm(),...be(4.65,4.8,-13.6,25.8,3.9,4.8,Pe),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Pe],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Pe],[C(-2.2,2.2,-17.6,-14),4.7,5.5,ke],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Pe],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Pe],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}function Ct(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}function Et(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,ke],[C(-1.25,1.25,o,i),2.65,3.1,Pe],[C(-1.15,-.85,o+1,o+2),0,.7,bt],[C(.85,1.15,i-2,i-1),0,.7,bt],[C(-.9,.9,o-.03,o),.8,1.05,so],[C(-.9,.9,i,i+.03),.8,1.05,fo]]}function Um(e,t){return Et(0,12,Ct(t))}function Om(e,t){let r=Ct(t),o=[],i;for(i=0;i<5;i++)o.push(...Et((i-2)*6.5,6,r));return o}function Gm(e,t){let r=Ct(t),o=[],i;for(i=0;i<5;i++)o.push(...Et((i-2)*15,14,r));return o}var de=[.85,.64,.5];var Ee=[.16,.2,.32];var Be=[.08,.07,.06];function Fm(e){let t=Ce[e%Ce.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Be],[C(-.045,.045,.25,.85),.02,.62,Be],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Be],[C(-.1,.1,.15,.4),.85,.92,Be],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,de],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,de],[C(.15,.25,-.5,-.05),1,1.25,de],[C(-.2,-.08,0,.32),.3,1,Ee],[C(.08,.2,-.25,.07),.3,1,Ee]]}var xi=[.75,.2,.15];var mo={body:[[C(-.17,.17,-.1,.1),.82,.95,Ee],[C(-.19,.19,-.11,.11),.95,1.44,xi],[C(-.05,.05,-.05,.05),1.44,1.5,de],[C(-.1,.1,-.11,.1),1.5,1.72,de],[C(-.105,.105,-.06,.115),1.58,1.77,Be],[C(-.105,.105,-.115,-.06),1.7,1.77,Be]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ee],[C(-.07,.07,-.17,.07),-.9,-.82,Be]],arm:[[C(-.05,.05,-.05,.05),-.55,0,xi],[C(-.045,.045,-.045,.045),-.66,-.55,de]]};function Nm(e){let t=mo.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Ce[e%Ce.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ee],[C(.02,.16,-.07,.07),.08,.9,Ee],[C(-.3,-.2,-.05,.05),.76,1.42,de],[C(.2,.3,-.05,.05),.76,1.42,de]),t}var jm={bicycle:{side:.4,model:Fm},pedestrian:{side:.3,model:Nm},bus:{side:1.5,model:Um},tram:{side:0,model:Om},metro:{side:0,model:Gm},car:{side:1.8,model:Im,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Rm,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Zm=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function $m(e,t,r){let o=1,i=t.length-1,n;for(;o<i;)n=o+Math.floor((i-o)/2),t[n]<r?o=n+1:i=n;let a=e[o-1],s=e[o],f=t[o]-t[o-1]||1,m=(r-t[o-1])/f;return{x:a[0]+(s[0]-a[0])*m,y:(a[2]??0)+((s[2]??0)-(a[2]??0))*m,z:a[1]+(s[1]-a[1])*m,dx:(s[0]-a[0])/f,dz:(s[1]-a[1])/f}}function lo(e,t){let{points:r,lengths:o,length:i}=t.lane,n=t.distance+e.elapsed*t.speed;n-=i*Math.floor(n/i);let{x:a,y:s,z:f,dx:m,dz:l}=$m(r,o,n);return{x:a-l*e.side,y:s,z:f+m*e.side,dx:m,dz:l}}function po(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o,i,n,a,s,f,m,l,p,u,d,c,h;for(o=0;o<e.trips.length;o++)for(i=e.trips[o],{x:n,y:a,z:s,dx:f,dz:m}=lo(e,i),l=0,p=o*e.stride;l<e.stride;l+=3,p+=3)u=e.template.position[l],d=e.template.position[l+2],c=e.template.normal[l],h=e.template.normal[l+2],t.data[p]=n-u*m-d*f,t.data[p+1]=a+e.template.position[l+1],t.data[p+2]=s+u*f-d*m,r.data[p]=-c*m-h*f,r.data[p+1]=e.template.normal[l+1],r.data[p+2]=c*f-h*m}function uo(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),ao(e.layer,e.status),e.update()}function Vm(e){e.layer._beforeRaycast=po.bind(null,e),e.ready&&uo(e)}function Ae(e,t){t&&(e.layer.highlightedFeature?.mesh===t&&(Me(e.layer,null),e.layer.hoveredFeature=null,we(e.layer,null)),k(e.layer,t))}function co(e){let t;for(t of[e.gpu?.params,e.gpu?.template,e.gpu?.points,e.gpu?.vehicles])t?.destroy();e.gpu=null}function qm(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),Ae(e,e.mesh),Ae(e,e.route),e.mesh=e.route=null,delete e.layer._beforeRaycast,co(e),e.lanes=[],e.trips=[],e.tripsKey=e.loaded=null}function Hm(e){e.ready=!0,e.layer._map&&uo(e)}function Wm(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}function vi(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function Ym(e,t){return e-t}function Xm(e,{timeZone:t,duration:r,services:o}){let i=new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),a={},s,f,m,l,p,u,d;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let c=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,h=new Date(Date.UTC(a.year,a.month-1,a.day)).getUTCDay(),g=[];for({from:f,to:m,every:l=1/0,months:p,weekdays:u}of o)if(!(p?.includes(a.month)===!1||u?.includes(h)===!1))for(d=vi(f);d<=vi(m);d+=l)g.push(d);g.sort(Ym);let y=[];for(d of g)c>=d&&c<d+r&&y.push({id:`${a.year}-${a.month}-${a.day}-${d}`,departure:`${String(Math.floor(d/60)).padStart(2,"0")}:${String(d%60).padStart(2,"0")}`,progress:(c-d)/r});return y}function Km(e,t,r){let o=[],i,n,a,s,f,m,l,p;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(f of Xm(e,a))o.push({id:`${i}-${f.id}`,lane:n,distance:f.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:f.departure}});else for(m=e/1e3*r,l=n.offsets||=Wm(n.length,s,r),p=0;p<l.length;p++)o.push({id:`${i}-${p}`,lane:n,distance:(l[p]+m)%n.length,speed:r,properties:n.properties});return o}function ho(e){let t=e.layer._map?._timeControl||{live:!0};return{live:t.live,time:t.live?new Date:t.time}}function go(e,t){e.error=t,e.status.textContent=`Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}function Jm(e){let t=[],r=[],o=[],i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,f=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,m=f===null?[.08,.7,.85]:[(f>>16&255)/255,(f>>8&255)/255,(f&255)/255],l=1;l<i.length;l++)if(p=i[l-1],u=i[l],d=u[0]-p[0],c=u[1]-p[1],h=n[l]-n[l-1],!!h){for(g=-c/h*2.5,y=d/h*2.5,x=Math.floor(n[l-1]/30)*30;x<n[l];x+=30)if(v=Math.max(0,(x-n[l-1])/h),w=Math.min(1,(x+18-n[l-1])/h),!(w<=v)){P=[p[0]+d*v,p[1]+c*v,p[2]+(u[2]-p[2])*v+.4],M=[p[0]+d*w,p[1]+c*w,p[2]+(u[2]-p[2])*w+.4];for(S of[[P[0]-g,P[2],P[1]-y],[P[0]+g,P[2],P[1]+y],[M[0]+g,M[2],M[1]+y],[P[0]-g,P[2],P[1]-y],[M[0]+g,M[2],M[1]+y],[M[0]-g,M[2],M[1]-y]])t.push(...S),r.push(0,1,0),o.push(...m)}}return{position:t,normal:r,color:o}}function xo(e,t,r,o,i=0){let n=Ge(e.layer,t,o,i);return n.extras.featureFaces=r,n}function Qm(e){e.route=xo(e,Jm(e.lanes),[],{unlit:!0})}function yo(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let f=[];for(i of e.lanes)for([n,a,s]of i.points)f.push(n-t,s,a-t,n+t,s+r,a+t);let m={attributes:{position:{data:f}}};oe(m),e.mesh.geometry.bounds=m.bounds}function km(e){let{trips:t,model:r,vertices:o}=e;if(Ae(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,f;for(a=0;a<t.length;a++){s=t[a];for(f of St(r(a,s.properties)).color)i.push(f);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let m=i.length/3;e.mesh=xo(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,{},GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=m,e.mesh.extras.dynamicLights=!0,yo(e)}function vo(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function el(e){let{device:t}=e.layer.renderer;e.gpu?.device!==t&&(co(e),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:vo(t,new Float32Array([...e.template.position,...e.template.normal]))},e.lanesDirty=!0);let r,o,i,n,a;if(e.lanesDirty){let d=0;for(r of e.lanes)d+=r.points.length;let c=new Float32Array(d*4),h=0;for(r of e.lanes)for(r.start=h/4,o=0;o<r.points.length;o++)i=r.points[o],c[h++]=i[0],c[h++]=i[1],c[h++]=i[2],c[h++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=vo(t,c),e.lanesDirty=!1}let s=new Float32Array(e.trips.length*4),f=new Uint32Array(s.buffer);for(o=0;o<e.trips.length;o++)n=e.trips[o],f[o*4]=n.lane.start,f[o*4+1]=n.lane.points.length,s[o*4+2]=n.distance,s[o*4+3]=n.speed,e.mesh.extras.featureFaces[o].properties=n.properties;e.gpu.vehicles?.size>=s.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,s):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=vo(t,s));let{position:m,normal:l}=e.mesh.geometry.attributes,p=[e.gpu.params,e.gpu.template,e.gpu.points,e.gpu.vehicles,m.buffer,l.buffer],u=[];for(a=0;a<p.length;a++)u.push({binding:a,resource:{buffer:p[a]}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:u})}function tl(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function rl(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!e.layer.renderer){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=ho(e),o=r?.getTime(),i=Number.isFinite(o),n=!1,a,s,f,m,l,p,u,d,c,h;if(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck)){let g;try{e.trips=i?Km(r,e.lanes,e.velocity):[],g=i?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:"Loading\u2026":"Select a valid simulation date"}catch(v){return go(e,v)}e.rebasedAt=o,e.nextCheck=o+1e3;let y=[];for(a of e.trips)y.push(a.id);let x=y.join();n=x!==e.tripsKey||e.outline&&!e.route&&e.lanes.length,e.outline&&!e.route&&e.lanes.length&&Qm(e),x!==e.tripsKey&&(km(e),e.tripsKey=x),e.mesh&&el(e),e.error||(e.status.textContent!==g&&(e.status.textContent=g),e.status.removeAttribute("role"))}if(e.mesh&&tl(e,(o-e.rebasedAt)/1e3),e.mesh&&e.lights&&(!t||!(performance.now()-e.litAt<100))){e.litAt=performance.now();let g=[];for(a of e.trips){({x:s,y:f,z:m,dx:l,dz:p}=lo(e,a));for({position:[u,d,c],...h}of e.lights)g.push({...h,position:[s-u*p-c*l,f+d,m+u*l-c*p]})}e.mesh.extras.lights=g}(e.mesh||n)&&B(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick))}async function ol(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}function il({features:e=[]}){let t=[],r,o,i,n,a,s,f;for({geometry:r,properties:o}of e){i=r?.type==="LineString"?[r.coordinates]:r?.type==="MultiLineString"?r.coordinates:[];for(n of i){a=[];for([s,f]of n)a.push([f,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}}return t}function Mo(e){let{layer:t,lanes:r}=e,o=t._map._terrain3D?._terrainReady&&t._map._terrain3D,i=t.root.position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??Y(o,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function nl(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(t.location),n=Math.cos(t.location.lat*Math.PI/180),a,s,f,m,l;for(a of r){a.points=[];for([s,f]of a.latlngs)m=o.project(new L.LatLng(s,f)),a.points.push([(m.x-i.x)*n,-(m.y-i.y)*n,0]);for(a.lengths=[0],l=1;l<a.points.length;l++)a.lengths.push(a.lengths[l-1]+Math.hypot(a.points[l][0]-a.points[l-1][0],a.points[l][1]-a.points[l-1][1]));a.length=a.lengths.at(-1)}Mo(e),Ae(e,e.route),e.route=null,e.tripsKey=null}function al(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=il(r),nl(e),e.frame||e.tick()}}function sl(e,t,r){!t.aborted&&r.name!=="AbortError"&&go(e,r)}function fl(e){let{time:t}=ho(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;ol(e,t,r).then(al.bind(null,e,r),sl.bind(null,e,r))}function ml(e,t){t?.layer&&!t.layer.control?.time||(cancelAnimationFrame(e.frame),fl(e),e.tick())}function ll(e){e.lanes.length&&(Mo(e),Ae(e,e.route),e.route=null,e.mesh&&yo(e),e.frame||e.tick())}function pl(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}={}){let{model:s,lights:f,side:m}=jm[r];o??=m,_e(e,{tooltip:zm,nightLight:!!f,...a});let l=L.DomUtil.create("small","traffic-status");l.style.cssText="display:block;max-width:200px;margin:0 0 4px 20px;color:#555;";let p=St(s(0)),u=p.position.length,d=u/3,c=new ArrayBuffer(16),h=new Float32Array(c),g=new Uint32Array(c),y={layer:e,url:t,model:s,lights:f,side:o,outline:i,velocity:n,vehicle:r,status:l,template:p,stride:u,vertices:d,params:c,paramFloats:h,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};y.shader=Zm,y.tick=rl.bind(null,y),y.update=ml.bind(null,y),y.terrain=ll.bind(null,y),e._beforeRaycast=po.bind(null,y),e.on("ready",Hm.bind(null,y)),e.on("add",Vm.bind(null,y)),e.on("remove",qm.bind(null,y))}function ul(){this.keys.clear()}var Xt={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};function cl(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.drag={x:e.clientX,y:e.clientY},t.getContainer().setPointerCapture(e.pointerId)}else this.drag&&e.type==="pointermove"?(t._setPitchAndBearing(Math.max(20,Math.min(85,t.getPitch()-(e.clientY-this.drag.y)*.2)),t.getBearing()-(e.clientX-this.drag.x)*.25),this.drag={x:e.clientX,y:e.clientY}):this.drag=null}var Kt=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];function wo(){let{layer:e,state:t}=this,r=e._map,o=r.options.crs,i=o.project(e.location),n=Math.cos(e.location.lat*Math.PI/180),a=o.project(t.latlng),s=r._terrain3D?._terrainReady&&r._terrain3D,f=s&&Y(s,t.latlng)||0;return[(a.x-i.x)*n,f-e.root.position[1],-(a.y-i.y)*n]}function _o(){let[e,t,r]=wo.call(this),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,f,m,l;for(a=0;a<Kt.length;a++)[,s,f,m]=Kt[a],l=this.meshes[a],l.position[0]=e+s*i,l.position[1]=t+f,l.position[2]=r-s*n,l.rotation[0]=m*this.swing*Math.sin(this.state.phase),l.rotation[1]=o;B(this.layer)}function dl(){this.meshes&&_o.call(this)}function Po(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.drag=null,L.DomEvent.off(document,"keydown keyup",this.onKey),L.DomEvent.off(window,"blur",this.onBlur);let t,r;for(t of this.meshes||[])k(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){L.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),e.setPitch(this.saved.pitch),this.saved=null}}function hl(e){if(!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}Xt[e.code]&&(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}function Mi(e){return Math.atan2(Math.sin(e),Math.cos(e))}var wi=new WeakMap;function gl(e){let t=wi.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a}=e.geometry.attributes,s=i?i.count:o.length/3,f=[],m=[],l=new Map,p=[],u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V;for(u=0;u<s;u+=3)if(d=i?i.data[u]:u,!(e.program.nightLight&&a&&a.data[d*2]<=2)){for(c=0;c<3;c++)h=(i?i.data[u+c]:u+c)*3,g=o[h],y=o[h+1],x=o[h+2],p[c*3]=r[0]*g+r[4]*y+r[8]*x+r[12],p[c*3+1]=r[1]*g+r[5]*y+r[9]*x+r[13],p[c*3+2]=r[2]*g+r[6]*y+r[10]*x+r[14];if(v=p[3]-p[0],w=p[4]-p[1],P=p[5]-p[2],M=p[6]-p[0],S=p[7]-p[1],z=p[8]-p[2],T=w*z-P*S,E=v*S-w*M,b=P*M-v*z,R=Math.hypot(T,b,E),!(!R||Math.abs(b)>.9*R))for(n&&(h=d*3,D=n.data,(r[0]*D[h]+r[4]*D[h+1]+r[8]*D[h+2])*T+(r[2]*D[h]+r[6]*D[h+1]+r[10]*D[h+2])*E<0&&(T=-T,E=-E)),U=Math.hypot(T,E),G=m.length/2,f.push(...p),m.push(T/U,E/U),$=Math.floor(Math.min(p[0],p[3],p[6])/8);$<=Math.floor(Math.max(p[0],p[3],p[6])/8);$++)for(H=Math.floor(Math.min(p[2],p[5],p[8])/8);H<=Math.floor(Math.max(p[2],p[5],p[8])/8);H++)V=$+","+H,l.has(V)||l.set(V,[]),l.get(V).push(G)}return t={tri:Float32Array.from(f),nrm:Float32Array.from(m),cells:l,origin:[r[12],r[13],r[14]]},wi.set(e.geometry,t),t}function xl(e,t,r,o,i,n,a){let s=t*9,f=e[s+3]-e[s],m=e[s+4]-e[s+1],l=e[s+5]-e[s+2],p=e[s+6]-e[s],u=e[s+7]-e[s+1],d=e[s+8]-e[s+2],c=-a*u,h=a*p-n*d,g=n*u,y=f*c+m*h+l*g;if(Math.abs(y)<1e-9)return-1;let x=r-e[s],v=o-e[s+1],w=i-e[s+2],P=(x*c+v*h+w*g)/y;if(P<0||P>1)return-1;let M=v*l-w*m,S=w*f-x*l,z=x*m-v*f,T=(n*M+a*z)/y;return T<0||P+T>1?-1:(p*M+u*S+d*z)/y}function yl(e,t){return e===t||e._type==="terrain"||e._type==="traffic"}function vl(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||oe(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:f,dz:m,reach:l}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+l)return;let p=gl(e),u=n-r[12]+p.origin[0],d=a-r[13]+p.origin[1],c=s-r[14]+p.origin[2],h=new Set,g,y,x,v,w;for(g=Math.floor(Math.min(u,u+f*l)/8);g<=Math.floor(Math.max(u,u+f*l)/8);g++)for(y=Math.floor(Math.min(c,c+m*l)/8);y<=Math.floor(Math.max(c,c+m*l)/8);y++)for(x of p.cells.get(g+","+y)||[])if(!(h.has(x)||f*p.nrm[x*2]+m*p.nrm[x*2+1]>=0)){h.add(x);for(v of[.4,1.5])w=xl(p.tri,x,u,d+v,c,f,m),w>=0&&w<t.best&&(t.best=w,t.found=[p.nrm[x*2],p.nrm[x*2+1]])}}function Ml(e,t,r,o,i,n,a){ae(e.scene);let s={x:t,y:r,z:o,dx:i,dz:n,reach:a,best:a,found:null},f;for(f of e._shared._layers)yl(f,e)||Rt(f.root,vl,s);return s.found}function _i(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Ml(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3)}function wl(e){let t=this.layer,r=t._map;this.frame=requestAnimationFrame(this.step);let o=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!t.renderer)return;let i=!1,n,a,s;if(!this.meshes){this.meshes=[];for([n]of Kt)this.meshes.push(Ge(t,St(mo[n])));i=!0}let f=0,m=0;for(a of this.keys)f+=Xt[a]?.[0]||0,m+=Xt[a]?.[1]||0;if(f=Math.sign(f),m=Math.sign(m),m&&(this.state.heading=Mi(this.state.heading+m*2.5*o),i=!0),f){let p=f*this.speed*o,{lat:u,lng:d}=this.state.latlng,{position:c,scale:h}=t.root,g=Math.sin(this.state.heading)*p,y=Math.cos(this.state.heading)*p,x=wo.call(this);for(s=0;s<x.length;s++)x[s]=c[s]+h[s]*x[s];let v=_i.call(this,g,y,x);if(v){let w=g*v[0]-y*v[1];g-=w*v[0],y+=w*v[1],_i.call(this,g,y,x)&&(g=y=0)}this.state.latlng=new L.LatLng(u+y/111320,d+g/(111320*Math.cos(u*Math.PI/180))),this.state.phase+=Math.hypot(g,y)/1.6*Math.PI,i=!0}if(f||m){let p=r.getBearing()*Math.PI/180,u=Mi(-this.state.heading-p);Math.abs(u)>.001&&r._setPitchAndBearing(r.getPitch(),(p+u*Math.min(1,o*4))*180/Math.PI),r.setView(this.state.latlng,r.getZoom(),{animate:!1})}let l=f?.9:0;Math.abs(this.swing-l)>.001&&(this.swing+=(l-this.swing)*Math.min(1,o*10),i=!0),i&&_o.call(this)}function To(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter();let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*4007501668557849e-8*Math.cos(this.state.latlng.lat*Math.PI/180)/256)),o=[],i;for(i of["dragging","keyboard","doubleClickZoom","boxZoom"])e[i]?.enabled()&&o.push(i);this.saved={zoom:e.getZoom(),pitch:e.getPitch(),scrollWheelZoom:e.options.scrollWheelZoom,handlers:o};for(i of this.saved.handlers)e[i].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-e.getBearing()*Math.PI/180,e.setView(this.state.latlng,r,{animate:!1}),e.setPitch(75),L.DomEvent.on(document,"keydown keyup",this.onKey),L.DomEvent.on(window,"blur",this.onBlur),L.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.frame=requestAnimationFrame(this.step)}function _l(){this.saved?Po.call(this):To.call(this)}function Pl(e,{speed:t,distance:r,...o}={}){let i=new L.Layer;i._type="walk",_e(i,o);let n=new Set,a=L.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=L.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let f=L.DomUtil.create("small","",a);f.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",f.textContent="W/S: run \xB7 A/D: turn \xB7 drag: look around \xB7 Esc: exit",L.DomEvent.disableClickPropagation(a);let m={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:f,meshes:null,frame:null,last:void 0,swing:0,saved:null,drag:null,state:e.walker=i.walker={latlng:null,heading:0,phase:0}};m.step=wl.bind(m),m.onKey=hl.bind(m),m.onBlur=ul.bind(m),m.onPointer=cl.bind(m),m.onTerrain=dl.bind(m),m.start=To.bind(m),m.stop=Po.bind(m),m.toggle=_l.bind(m),e._walk=m,L.DomEvent.on(s,"click",m.toggle)}function Tl(e){L.Util.setOptions(this,e),Pl(this,this.options)}function Ll(e){return this._walk.layer.addTo(e),this._walk.container}function Sl(){this._walk.stop(),this._walk.layer.remove()}L.Control.Walk=L.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Tl,onAdd:Ll,onRemove:Sl});var A={};function Pi(){return{}}function Lo(e=this){e?._nativeGPU?.refresh?.()}function bl(e=this){e?._nativeGPU?.reorder?.(!0)}function Cl(e=this){e?._nativeGPU?.reorder?.(!1)}function El(e){return this._project(),this._parts=this._rings,A.closestMethods.get(this).call(this,e)}function Bl(){return this._project(),A.boundsMethods.get(this).call(this)}function Al(){A.gridInitializers.get(this).call(this),this._container.remove()}function zl(e){A.pendingGridFades.delete(e),e._fadeFrame=null,!A.pendingGridFades.size&&A.gridFadeFrame!==null&&(cancelAnimationFrame(A.gridFadeFrame),A.gridFadeFrame=null)}function Il(){A.gridFadeFrame=null;let e=[...A.pendingGridFades],t,r;for([t,r]of e)A.pendingGridFades.get(t)===r&&(A.pendingGridFades.delete(t),t._fadeFrame=null,So.call(t))}function Dl(e){e._fadeVersion=(e._fadeVersion||0)+1,A.pendingGridFades.set(e,e._fadeVersion),A.gridFadeFrame===null&&(A.gridFadeFrame=requestAnimationFrame(Il)),e._fadeFrame=A.gridFadeFrame}function So(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i;for(i of Object.values(this._tiles||{}))!i.current||!i.loaded||(i._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-i.loaded)/200):1,i._gpuOpacity<1?r=!0:i.active||(this._onOpaqueTile(i),i.active=!0,o=!0));o&&!this._noPrune&&this._pruneTiles(),this._nativeGPU?.refresh?.(),zl(e),r&&Dl(e)}function Rl(){A.pendingRasterLoads.shift()?.fire("load")}function Ul(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(A.pendingRasterLoads.push(this),queueMicrotask(Rl))}function Ol(){this instanceof L.Polyline||this instanceof L.CircleMarker?(this.beforeAdd=this.onAdd=this.onRemove=this._updateBounds=me,this.getEvents=Pi,this._renderer={options:{tolerance:0},_updatePath:Lo,_updateStyle:Lo,_bringToFront:bl,_bringToBack:Cl},this instanceof L.Polyline&&(A.closestMethods.set(this,this.closestLayerPoint),this.closestLayerPoint=El),this instanceof L.Circle&&(A.boundsMethods.set(this,this.getBounds),this.getBounds=Bl)):this instanceof L.GridLayer?(A.gridInitializers.set(this,this._initContainer),this._initContainer=Al,this._updateOpacity=So):this instanceof L.ImageOverlay&&!(this instanceof L.VideoOverlay)&&!(this instanceof L.SVGOverlay)&&(this.onAdd=Ul,this.onRemove=me,this.getEvents=Pi,this._reset=Lo)}function Gl(e){let t=!this._3d&&(this instanceof L.GridLayer||this instanceof L.Polyline||this instanceof L.CircleMarker||this instanceof L.Marker&&!(this.options.icon instanceof L.DivIcon)||this instanceof L.ImageOverlay&&!(this instanceof L.VideoOverlay)&&!(this instanceof L.SVGOverlay));t&&((this instanceof L.GridLayer||this instanceof L.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof L.Marker&&(this.options.icon.options.crossOrigin||=!0)),A.layerProto._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&hr(this,e.target)}function Fl(e){return im(this,e)}function Nl(e,t){e._geojson=!0,e.setData=Fl,_e(e,t)}function jl(e){switch(e){case"geojson":return Nl;case"pmtiles":return om;case"terrain":return dm;case"traffic":return pl;default:throw new Error(`Unknown layer type: ${e}`)}}function Zl(){let e=A.pendingInitializations.shift();try{e.initialize=jl(e.type)}catch(t){e.error=t}return e}function $l(e){let{layer:t,ready:r}=e;try{if(e.error)throw e.error;let o=t._map;return o?.removeLayer(t),delete t.onAdd,delete t.onRemove,e.initialize(t,e.settings),o?.addLayer(t),t.ready===r?t:t.ready}catch(o){throw t.fire("error",{error:o}),o}}function Vl(e={}){if(Object.getPrototypeOf(this)!==L.Layer.prototype||!e.source){if(A.layerProto.initialize)return A.layerProto.initialize.apply(this,arguments);L.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":"3d",...r},...o}=e,i={...r,...o};if(L.Util.setOptions(this,o),this._type=t,t==="3d"){_e(this,i);return}this.onAdd=me,this.onRemove=me;let n={layer:this,type:t,settings:i,ready:null};A.pendingInitializations.push(n),A.loading=A.loading.catch(me).then(Zl);let a=this.ready=A.loading.then($l);n.ready=a,a.catch(me)}A.layerProto=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Layer.prototype));A.loading=Promise.resolve();A.pendingInitializations=[];A.closestMethods=new WeakMap;A.boundsMethods=new WeakMap;A.gridInitializers=new WeakMap;A.pendingGridFades=new Map;A.gridFadeFrame=null;A.pendingRasterLoads=[];L.Layer.include({_layerAdd:Gl,initialize:Vl});L.Layer.addInitHook(Ol);})();
|
|
1
|
+
(()=>{var rx=Object.defineProperty;var T=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var ox=(e,t)=>{for(var r in t)rx(e,r,{get:t[r],enumerable:!0})};var g,L=T(()=>{g=globalThis.L});var w,I=T(()=>{w=new WeakMap});var P,N=T(()=>{P=Math.PI/180});var me,bt=T(()=>{me=180/Math.PI});function E(e){return w.get(e)?._cameraPitch??0}var F=T(()=>{I()});function S(e){return w.get(e)?._cameraBearing??0}var G=T(()=>{I()});var Jt,pi=T(()=>{Jt=Object.freeze({})});function ui(){let e=this.getSize().y,t=E(this)*P,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!w.get(this)._pitchSky&&(w.get(this)._pitchSky=g.DomUtil.create("div","leaflet-pitch-sky",this.getContainer()),w.get(this)._pitchSky.setAttribute("aria-hidden","true"),w.get(this)._pitchSky.style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),w.get(this)._pitchSky&&(w.get(this)._pitchSky.style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",w.get(this)._pitchSky.style.height=`${Math.max(0,Math.ceil(i))}px`,w.get(this)._pitchSky.style.display=i>0?"":"none")}var da=T(()=>{L();N();I();F()});function ee(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=E(e),i=S(e);return w.get(e)._cameraPitch=Math.max(0,Math.min(e.options.maxPitch,t)),w.get(e)._cameraBearing=(r%360+360)%360,e._loaded&&(ui.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==E(e)&&e.fire("pitch",{pitch:E(e)})),e}var Ke=T(()=>{I();F();G();da()});var Je,di=T(()=>{Je=new Map});var Te,hi=T(()=>{Te={value:null}});function Qt(e){Je.delete(e),w.get(e)._cameraAnimation=null,w.get(e)._cameraFrame=null,!Je.size&&Te.value!==null&&(cancelAnimationFrame(Te.value),Te.value=null)}var gi=T(()=>{di();I();hi()});var ha,Ll=T(()=>{ha={value:void 0}});var ga,Pl=T(()=>{ga={value:void 0}});var xa,bl=T(()=>{xa={value:void 0}});var ya,Bl=T(()=>{ya={value:void 0}});var yi,Sl=T(()=>{yi={value:void 0}});var Le,kt=T(()=>{Le=new WeakMap});var ct,vi=T(()=>{ct=new Set});var Gr,va=T(()=>{Gr=Object.freeze({capture:!0,passive:!1})});function wa(){this._map.fire("cameratouchchange")}var Cl=T(()=>{});var er,wi=T(()=>{er=Object.freeze([.8,.5])});var El,zl=T(()=>{El=Object.freeze([.8,0])});var Mi,Ma=T(()=>{Mi=Object.freeze({preventScroll:!0})});var _i,_a=T(()=>{_i=Object.freeze({animate:!0})});function Il(e){Te.value=null;let t=[...Je];Je.clear();let r,o,i,n,a;for([o,i]of t)if(w.get(o)._cameraFrame=null,w.get(o)._cameraAnimation===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ee(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&w.get(o)._cameraAnimation===i?Ti(o,i):w.get(o)._cameraAnimation===i&&(w.get(o)._cameraAnimation=null)}catch(s){r||=s}}if(r)throw r}var Al=T(()=>{hi();di();I();Ke();Ta()});function Ti(e,t){Je.set(e,t),Te.value===null&&(Te.value=requestAnimationFrame(Il)),w.get(e)._cameraFrame=Te.value}var Ta=T(()=>{di();hi();I();Al()});function tr(e,t,r,o=Jt){if(Qt(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ee(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=E(e),s=S(e),f=((r-s)%360+540)%360-180,l=w.get(e)._cameraAnimation={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:f};return Ti(e,l),e}var Li=T(()=>{pi();I();Ke();F();G();gi();Ta()});function Dl(e,t=_i){return tr(e,0,0,t)}var Ol=T(()=>{_a();Li()});function De(e,t,r){return tr(e,E(e),t,r)}var Rr=T(()=>{Li();F()});function Gl(e,t=_i){return De(e,0,t)}var Rl=T(()=>{_a();Rr()});function Ul(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Dl(r):Gl(r),e.detail&&r.getContainer().focus(Mi)}var Fl=T(()=>{Ma();Ol();Rl()});function ut(e,t,r){return tr(e,t,S(e),r)}var Pi=T(()=>{Li();G()});function Nl(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")De(r,S(r)-o);else if(e.key==="ArrowRight")De(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)ut(r,E(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)ut(r,E(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var jl=T(()=>{Rr();G();Pi();F()});function bi(){let e=this._map,t=this.options.visualizePitch?E(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*P))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(E(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var La=T(()=>{N();F();G()});var te,Qe=T(()=>{te={value:new WeakMap}});var dt,Bi=T(()=>{dt={value:new Set}});function Si(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var Pa=T(()=>{});function Ci(e){let t=te.value.get(this);if(t.drag||!t.accept(e)||Si(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(Mi),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var ba=T(()=>{Qe();Ma();Pa()});function Ei(e){return Qt(e),e}var Ba=T(()=>{gi()});function zi(e){let t=te.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Ei(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*me}else i*=e.clientY<t.drag.cy?1:-1;ee(t.map,E(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Sa=T(()=>{bt();Qe();Ba();Ke();F();G()});function rr(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Ii=T(()=>{});function ke(e){rr(te.value.get(this),e)}var Ca=T(()=>{Qe();Ii()});function Ai(e){let t=te.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Ea=T(()=>{Qe()});function Di(e){let t=te.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var za=T(()=>{Qe()});function Oi(){let e;for(e of dt.value)rr(e)}var Ia=T(()=>{Bi();Ii()});function Gi(e,t,r,o=er,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return te.value.set(t,n),dt.value.add(n),t.addEventListener("pointerdown",Ci,!0),t.addEventListener("pointermove",zi),t.addEventListener("pointerup",ke),t.addEventListener("pointercancel",ke),t.addEventListener("lostpointercapture",ke),t.addEventListener("click",Ai,!0),t.addEventListener("contextmenu",Di),window.addEventListener("blur",Oi),n}var Aa=T(()=>{wi();Qe();Bi();ba();Sa();Ca();Ea();za();Ia()});function Zl(e){return e.button===0}var $l=T(()=>{});function Vl(){bi.call(this._rotateControl)}var Hl=T(()=>{La()});function ql(e){let t=g.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=g.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=g.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Ul,r.onkeydown=Nl,this._refresh=bi,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Gi(e,r,Zl,this.options.visualizePitch?er:El),r.addEventListener("focusout",Vl),g.DomEvent.on(r,"dblclick contextmenu",g.DomEvent.stop),g.DomEvent.disableClickPropagation(t),g.DomEvent.disableScrollPropagation(t),t}var Wl=T(()=>{L();wi();zl();Fl();jl();La();Aa();$l();Hl()});function Yl(e){rr(e);let{element:t}=e;t.removeEventListener("pointerdown",Ci,!0),t.removeEventListener("pointermove",zi),t.removeEventListener("pointerup",ke),t.removeEventListener("pointercancel",ke),t.removeEventListener("lostpointercapture",ke),t.removeEventListener("click",Ai,!0),t.removeEventListener("contextmenu",Di),te.value.delete(t),dt.value.delete(e),dt.value.size||window.removeEventListener("blur",Oi)}var Xl=T(()=>{Qe();Bi();Ii();ba();Sa();Ca();Ea();za();Ia()});function Ri(){Yl(this._dragState)}var Da=T(()=>{Xl()});function Kl(e){e.off("rotate pitch",this._refresh,this),Ri.call(this)}var Jl=T(()=>{Da()});function Ql(e){return new g.Control.Rotate(e)}var kl=T(()=>{L()});function ep(e){let t=this._cameraShiftRotate;!e.shiftKey||Si(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),De(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var tp=T(()=>{Rr();G();Pa()});function rp(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=ep,e.addEventListener("wheel",this._wheel,Gr)}var op=T(()=>{va();tp()});function ip(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var np=T(()=>{});function ap(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var sp=T(()=>{});function mp(){this._dragState=Gi(this._map,this._map.getContainer(),ap,er,!0)}var fp=T(()=>{wi();Aa();sp()});function lp(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&De(t._map,r-o)}var pp=T(()=>{Rr()});function Oa(e,t){e.disable(),e._map.fire("error",{error:t})}var cp=T(()=>{});function up([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Oa(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Oa(r,i)}}}var dp=T(()=>{cp()});function hp(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:lp};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(up)}var gp=T(()=>{pp();dp()});function xp(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var yp=T(()=>{});function vp(e){e[0]?.target._containerResizeMap.invalidateSize()}var wp=T(()=>{});function Mp(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(vp),this._observer.observe(e)}var _p=T(()=>{wp()});function Tp(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Lp=T(()=>{});function Ui(e){let t=Le.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!w.get(r).touchRotate.enabled()&&!w.get(r).touchPitch.enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Ei(r);let a=o.getBoundingClientRect(),s=new g.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:E(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new g.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Ga=T(()=>{L();kt();I();Ba();G();F()});function Fi(e){let t=Le.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),f=o.getBoundingClientRect(),l=i.currentMiddle;l.x=(n.clientX+a.clientX)/2-f.left,l.y=(n.clientY+a.clientY)/2-f.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*me;ee(r,w.get(r).touchPitch.enabled()?i.pitch-(l.y-i.middle.y)*.25:i.pitch,w.get(r).touchRotate.enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let u=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),u,{animate:!1}),r.options.touchZoom!=="center"){let d=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(l)));r.setView(r.unproject(r.project(r.getCenter()).add(d)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var Ra=T(()=>{bt();kt();I();Ke()});function et(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Ur=T(()=>{});function or(e){et(Le.get(this),e)}var Ua=T(()=>{kt();Ur()});function Ni(){let e=w.get(this)._cameraTouchState,{map:t,container:r}=e,o=w.get(t).touchRotate.enabled()||w.get(t).touchPitch.enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(et(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Fa=T(()=>{I();Ur()});function ji(){let e;for(e of ct)et(e)}var Na=T(()=>{vi();Ur()});function Pp(){let e=w.get(this)._cameraTouchState;if(!e)return;let{container:t,map:r}=e;et(e),t.removeEventListener("touchstart",Ui,!0),t.removeEventListener("touchmove",Fi,!0),t.removeEventListener("touchend",or,!0),t.removeEventListener("touchcancel",or,!0),ct.delete(e),ct.size||window.removeEventListener("blur",ji),r.off("cameratouchchange",Ni,r),w.get(r).rotateControl?.remove(),Le.delete(t),delete w.get(r)._cameraTouchState}var bp=T(()=>{I();vi();kt();Ur();Ga();Ra();Ua();Na();Fa()});function ht(e,t,r){let o=w.get(e)[t]=new r(e);e._handlers.push(o),e.options[t]&&o.enable()}var Bp=T(()=>{I()});var Sp={};ox(Sp,{cameraControls:()=>ix});function ix(e){if(ht(e,"trackContainerMutation",ga.value),!e.options.rotate)return;ht(e,"shiftKeyRotate",ya.value),ht(e,"pitchDrag",xa.value),ht(e,"compassBearing",ha.value),ht(e,"touchRotate",yi.value),ht(e,"touchPitch",yi.value);let t=e.getContainer(),r=w.get(e)._cameraTouchState={map:e,container:t,touch:null,nativeZoom:void 0};Le.set(t,r),ct.add(r),t.addEventListener("touchstart",Ui,Gr),t.addEventListener("touchmove",Fi,Gr),t.addEventListener("touchend",or,!0),t.addEventListener("touchcancel",or,!0),window.addEventListener("blur",ji),e.on("cameratouchchange",Ni,e),e.options.rotateControl&&(w.get(e).rotateControl=new g.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:Jt),w.get(e).rotateControl.addTo(e)),e.once("unload",Pp,e)}var Cp=T(()=>{L();Ll();Pl();bl();Bl();Sl();I();kt();vi();va();pi();Cl();Wl();Jl();kl();op();np();fp();Da();gp();yp();_p();Lp();Ga();Ra();Ua();Fa();bp();Na();Bp();ha.value=g.Handler.extend({addHooks:hp,removeHooks:xp});ga.value=g.Handler.extend({addHooks:Mp,removeHooks:Tp});xa.value=g.Handler.extend({addHooks:mp,removeHooks:Ri});ya.value=g.Handler.extend({addHooks:rp,removeHooks:ip});yi.value=g.Handler.extend({addHooks:wa,removeHooks:wa});g.Control.Rotate=g.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:ql,onRemove:Kl});g.control&&(g.control.rotate=Ql)});L();var st={value:void 0};var ao={value:void 0};var so={value:void 0};L();var O={value:void 0};var se={value:void 0};var mo={value:void 0};var fo={value:void 0};var lo={value:void 0};var po={value:void 0};var co={value:void 0};var uo={value:void 0};var ho={value:void 0};var m=new WeakMap;L();I();L();I();var ve=new WeakMap;function Pr(e){let t=ve.get(e.currentTarget);if(!t)return;let r;for(r of t)re(r)}function br(e){let t=ve.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function go(e,t){let r=ve.get(e);r&&(r.delete(t),r.size||ve.delete(e))}function ms(e,t){let r=ve.get(e);r||ve.set(e,r=new Set),r.add(t)}var Ie=new Set;var xo=[null];var Pt=new WeakMap;I();var fs={subtree:!0};I();L();function yo(e){let t;for(t of Object.values(e._layers))t instanceof g.Marker?t.update():(t instanceof g.Popup||t instanceof g.Tooltip)&&t._updatePosition()}function ls(e,t){let r=e._map,o=m.get(e)._zoomView,i,n;for(n of m.get(e)._zoomTransitions.keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),f=1+(s-1)*a,l=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);w.get(r)._cameraView={zoom:r.getScaleZoom(f,o.zoom),center:r.unproject(l.add(p.subtract(l).multiplyBy(s*a/f)),o.zoom)},yo(r)}function ps(e,t){let r=e._map,o,i,n;if(r._animatingZoom){m.get(e)._zoomTransitions||=new Map;for(o of r.getContainer().getAnimations(fs))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||m.get(e)._zoomTransitions.has(o)||(i=o.currentTime||0,o.pause(),m.get(e)._zoomTransitions.set(o,{start:t,time:i}));for([o,{start:n,time:i}]of m.get(e)._zoomTransitions)o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);m.get(e)._zoomView&&ls(e,t)}}var Br={size:[null,null],format:"depth24plus",usage:null};async function cs(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function D(e,t){cs(e,t,m.get(e).renderer.device.queue.onSubmittedWorkDone())}function us(e,t){(!m.get(e)._size||!m.get(e)._size.equals(t))&&(m.get(e).renderer.width=t.x,m.get(e).renderer.height=t.y,m.get(e).renderer.canvas.width=Math.round(t.x*m.get(e).renderer.dpr),m.get(e).renderer.canvas.height=Math.round(t.y*m.get(e).renderer.dpr),m.get(e).renderer.canvas.style.width=`${t.x}px`,m.get(e).renderer.canvas.style.height=`${t.y}px`,m.get(e).renderer.depthTexture&&D(e,m.get(e).renderer.depthTexture),m.get(e).renderer.depthTexture=m.get(e).renderer.device.createTexture((Br.size[0]=m.get(e).renderer.canvas.width,Br.size[1]=m.get(e).renderer.canvas.height,Br.usage=GPUTextureUsage.RENDER_ATTACHMENT,Br)),m.get(e)._size=t)}N();bt();var ds=2*Math.atan(1/3)*me;var Ve=2*Math.PI*6378137;I();var mt=new WeakMap;F();G();var hs=Math.PI/360;function Bt(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:f,projectionViewMatrix:l}=e,p,c;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let u=Math.hypot(a[0],a[1],a[2])||1;a[0]/=u,a[1]/=u,a[2]/=u,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let d=Math.hypot(i[0],i[1],i[2])||1;i[0]/=d,i[1]/=d,i[2]/=d,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let h=e.viewTransform;h.m11=i[0],h.m12=i[1],h.m13=i[2],h.m14=0,h.m21=n[0],h.m22=n[1],h.m23=n[2],h.m24=0,h.m31=a[0],h.m32=a[1],h.m33=a[2],h.m34=0,h.m41=t[0],h.m42=t[1],h.m43=t[2],h.m44=1,h.invertSelf(),s[0]=h.m11,s[1]=h.m12,s[2]=h.m13,s[3]=h.m14,s[4]=h.m21,s[5]=h.m22,s[6]=h.m23,s[7]=h.m24,s[8]=h.m31,s[9]=h.m32,s[10]=h.m33,s[11]=h.m34,s[12]=h.m41,s[13]=h.m42,s[14]=h.m43,s[15]=h.m44;for(c of s)if(!Number.isFinite(c))throw new Error("Singular 3D transform");let y=1/Math.tan(e.fov*hs),x=e.near,v=e.far;f[0]=y/e.aspect,f[1]=0,f[2]=0,f[3]=0,f[4]=0,f[5]=y,f[6]=0,f[7]=0,f[8]=0,f[9]=0,f[10]=v/(x-v),f[11]=-1,f[12]=0,f[13]=0,f[14]=v*x/(x-v),f[15]=0;let M=e.projectionTransform;M.m11=f[0],M.m12=f[1],M.m13=f[2],M.m14=f[3],M.m21=f[4],M.m22=f[5],M.m23=f[6],M.m24=f[7],M.m31=f[8],M.m32=f[9],M.m33=f[10],M.m34=f[11],M.m41=f[12],M.m42=f[13],M.m43=f[14],M.m44=f[15];let _=e.projectionViewTransform;_.m11=M.m11,_.m12=M.m12,_.m13=M.m13,_.m14=M.m14,_.m21=M.m21,_.m22=M.m22,_.m23=M.m23,_.m24=M.m24,_.m31=M.m31,_.m32=M.m32,_.m33=M.m33,_.m34=M.m34,_.m41=M.m41,_.m42=M.m42,_.m43=M.m43,_.m44=M.m44,_.multiplySelf(h),l[0]=_.m11,l[1]=_.m12,l[2]=_.m13,l[3]=_.m14,l[4]=_.m21,l[5]=_.m22,l[6]=_.m23,l[7]=_.m24,l[8]=_.m31,l[9]=_.m32,l[10]=_.m33,l[11]=_.m34,l[12]=_.m41,l[13]=_.m42,l[14]=_.m43,l[15]=_.m44}L();function gs(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,f,l;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),f=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,l=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,f>=0&&l>=0&&f+l<=1)return f*i[2]+l*n[2]+(1-f-l)*a[2]}return null}function Sr(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function xs(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,f=Sr(t,i,n),l=Sr(t,i+1,n),p=Sr(t,i,n+1),c=Sr(t,i+1,n+1);return!Number.isFinite(f)||!Number.isFinite(l)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(f)?f:Number.isFinite(l)?l:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(f*(1-a)+l*a)*(1-s)+(p*(1-a)+c*a)*s}function Y(e,t){if(!e._map||!m.get(e)._terrainReady)return null;let r=t instanceof g.Point?t:e._map.project(t,m.get(e)._terrainZoom);return gs(r,m.get(e)._bridges)??xs(r,m.get(e)._terrainTiles)}I();function He(e,t,r=!1){let o=w.get(e)._cameraView;if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function ys(e,t){let r=e._map,o=w.get(r)._cameraView?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Ve*Math.cos(m.get(e)._sceneOrigin.lat*P)),n=He(r,O.value.layerPointToContainerPoint.call(r,r.project(m.get(e)._sceneOrigin).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,f=mt.get(r)?.control?._walk,l=((w.get(r)._terrain3D?Y(w.get(r)._terrain3D,r.getCenter()):void 0)??0)+(f?.saved?f.state.height:0),p=(t.y/2-n.y)/i,c=E(r)*P,u=S(r)*P,d=m.get(e).camera;d.fov=ds,d.aspect=t.x/t.y,d.near=Math.max(.1,a/1e4),d.far=Math.max(1e4,a*10),d.position[0]=s+Math.sin(u)*Math.sin(c)*a,d.position[1]=l+Math.cos(c)*a,d.position[2]=p+Math.cos(u)*Math.sin(c)*a,d.up[0]=-Math.sin(u)*Math.cos(c),d.up[1]=Math.sin(c),d.up[2]=-Math.cos(u)*Math.cos(c),d.target[0]=s,d.target[1]=l,d.target[2]=p,Bt(d)}function vs(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}bt();function ws(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*me),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*me),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*me),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Q(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=vs(e,i),!i){for(n of e.children)Q(n);return}let a,s;e.matrix?a=e.matrix:a=ws(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)Q(n)}function oe(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i;for(i=0;i<o.length;i++)t[i%3]=Math.min(t[i%3],o[i]),r[i%3]=Math.max(r[i%3],o[i]);let n=e.attributes.instanceOffset;if(n){let f,l,p,c;for(f=0;f<3;f++){for(p=1/0,c=-1/0,l=f;l<n.data.length;l+=n.size)p=Math.min(p,n.data[l]),c=Math.max(c,n.data[l]);t[f]=Math.fround(t[f]+p),r[f]=Math.fround(r[f]+c)}}let a=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],s=n?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:0;for(i=0;!n&&i<o.length;i+=3)s=Math.max(s,Math.hypot(o[i]-a[0],o[i+1]-a[1],o[i+2]-a[2]));e.bounds={min:t,max:r,center:a,radius:s}}function Ms(e,t,r,o,i){e.geometry.bounds||oe(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=n.center,f=a[0]*s[0]+a[4]*s[1]+a[8]*s[2]+a[12],l=a[1]*s[0]+a[5]*s[1]+a[9]*s[2]+a[13],p=a[2]*s[0]+a[6]*s[1]+a[10]*s[2]+a[14],c=t[2]*f+t[6]*l+t[10]*p+t[14],u=t[3]*f+t[7]*l+t[11]*p+t[15];e._sortDepth=c/u;let d=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10]));e._visibleInFrame=r[0][0]*f+r[0][1]*l+r[0][2]*p+r[0][3]>=-d*o[0]&&r[1][0]*f+r[1][1]*l+r[1][2]*p+r[1][3]>=-d*o[1]&&r[2][0]*f+r[2][1]*l+r[2][2]*p+r[2][3]>=-d*o[2]&&r[3][0]*f+r[3][1]*l+r[3][2]*p+r[3][3]>=-d*o[3]&&r[4][0]*f+r[4][1]*l+r[4][2]*p+r[4][3]>=-d*o[4]&&r[5][0]*f+r[5][1]*l+r[5][2]*p+r[5][3]>=-d*o[5],e._visibleInFrame&&i.push(e)}function Wn(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),Ms(e,r,o,i,n));let s;for(s of e.children)Wn(s,t,r,o,i,n,a)}function _s(e,t,r){let i=m.get(e).camera.projectionViewMatrix,n=m.get(e).renderer,a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),f,l,p,c,u;for(f=0;f<6;f++){for(l=Math.floor(f/2),p=a[f],c=0;c<4;c++)u=c*4,p[c]=f===4?i[u+2]:f%2?i[u+3]-i[u+l]:i[u+3]+i[u+l];s[f]=Math.hypot(p[0],p[1],p[2])}let d=m.get(e)._visibleMeshes||=[];d.length=0;let h=m.get(e)._shadowMeshes||=[];h.length=0,r&&Q(m.get(e).scene),Wn(m.get(e).scene,t,i,a,s,d,h)}L();var Ts=[];N();var Ls=[];var Ps={x:0,y:0};var bs={x:1,y:1};var Bs={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var St={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Ss={magFilter:"linear",minFilter:"linear"};function Cs(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Bs);e.roofBlit={pipeline:t.createRenderPipeline((St.vertex.module=r,St.fragment.module=r,St)),sampler:t.createSampler(Ss)},St.vertex.module=null,St.fragment.module=null}}var vo={size:null,usage:null};var wo={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Mo={source:null};var _o={texture:null};var To=[null,null];function Es(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Mo.source=t.image,Mo),(_o.texture=r.texture,_o),(To[0]=r.texture.width,To[1]=r.texture.height,To)),Mo.source=null,_o.texture=null,r.uploaded=r.image)}var ce={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var Lo=[null];var Po={value:new Float32Array(64)};function zs(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Is(e,t,r,o,i,n,a){let s=m.get(e).renderer,f=s.device,l=e._map,p=Math.max(1,t.length)*64;Po.value.length<p&&(Po.value=new Float32Array(p));let c=Po.value,u=f.createBuffer((vo.size=c.byteLength,vo.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,vo)),d=f.createCommandEncoder(),h=d.beginRenderPass((wo.colorAttachments[0].view=m.get(e)._roofRaster.texture.texture.createView(),wo));wo.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(zs);let y,x,v,M,_,B,b,A;for([y,{tile:x,layer:v}]of t.entries())({coords:M}=x),_=x.texture,Es(f,x),c[y*64]=v.options.opacity,B=256*l.getZoomScale(r,M.z),b=(M.x*B-o.x)*n/i.x,A=(M.y*B-o.y)*a/i.y,h.setViewport(b,A,Math.min(B*n/i.x,n-b),Math.min(B*a/i.y,a-A),0,1),h.setBindGroup(0,f.createBindGroup((ce.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ce.entries[0].resource=_.texture.createView(),ce.entries[1].resource=s.roofBlit.sampler,ce.entries[2].resource.buffer=u,ce.entries[2].resource.offset=y*256,ce))),ce.layout=null,ce.entries[0].resource=null,ce.entries[1].resource=null,ce.entries[2].resource.buffer=null,h.draw(4);h.end(),f.queue.writeBuffer(u,0,c),f.queue.submit((Lo[0]=d.finish(),Lo)),Lo[0]=null,u.destroy()}function As(e,t){let r=-1/0,o,i;for(o of e)for(i of m.get(o)._rasterTiles.values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Ds={size:[null,null],format:"rgba8unorm",usage:null};var Os={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Gs(e,t,r,o){let i=m.get(e).renderer,n=Ds;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(D(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Os),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Rs(e,t,r,o){let i=e._map,n=m.get(e).renderer,a=Ls;a.length=0;let s=As(t,a),f=1/0,l=1/0,p=-1/0,c=-1/0,u,d;a.length||(s=i.getZoom());for({tile:{coords:u}}of a)d=256*i.getZoomScale(s,u.z),f=Math.min(f,u.x*d),l=Math.min(l,u.y*d),p=Math.max(p,(u.x+1)*d),c=Math.max(c,(u.y+1)*d);let h=i.project(m.get(e)._sceneOrigin,s),y=Ps,x=bs;y.x=a.length?f:h.x,y.y=a.length?l:h.y,x.x=a.length?p-f:1,x.y=a.length?c-l:1;let v=Math.min(1,4096/Math.max(x.x,x.y)),M=Math.max(1,Math.ceil(x.x*v)),_=Math.max(1,Math.ceil(x.y*v)),B=i.options.crs.scale(s)/(Ve*Math.cos(m.get(e)._sceneOrigin.lat*P)),b={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:m.get(e)._roofRaster?.texture};m.get(e)._roofRaster=b,b.signature=r,b.updatedAt=o,b.matrix[0]=B/x.x,b.matrix[10]=B/x.y,b.matrix[12]=(h.x-y.x)/x.x,b.matrix[14]=(h.y-y.y)/x.y,Gs(e,b,M,_),Cs(n);try{Is(e,a,s,y,x,M,_)}finally{a.length=0}}function Us(e,t,r){let o=Ts;o.length=0;let i=!1,n;for(n of t)o.push(`${g.Util.stamp(n)}:${m.get(n)._rasterVersion||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!m.get(n)._loadingTiles;let a=o.join("|");o.length=0,(!m.get(e)._roofRaster||m.get(e)._roofRaster.signature!==a&&(!i||r-m.get(e)._roofRaster.updatedAt>=50))&&Rs(e,t,a,r)}function Fs(e,t){let r=e._map,o=m.get(e)._roofRasters||=[];o.length=0;let i=!1,n;for(n of m.get(e)._layers)if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(n of Object.values(r._layers))m.get(n).kind==="raster"&&m.get(n)._rasterTiles&&n.options.opacity>0&&o.push(n);Us(e,o,t)}else m.get(e)._roofRaster&&(D(e,m.get(e)._roofRaster.texture.texture),m.get(e)._roofRaster=null);return o}function Ns(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function js(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Ns(e,t)}function Zs(e){return e.sort(js)}N();function $s(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=m.get(r),s=a._tileZoom,f=o.project(m.get(t)._sceneOrigin,s),l=o.options.crs.scale(s)/(Ve*Math.cos(m.get(t)._sceneOrigin.lat*P)),p=1/0,c=1/0,u=-1/0,d=-1/0,h,y,x,v,M,_,B,b;for(h=0;h<8;h++)y=h&1?i.max[0]:i.min[0],x=h&2?i.max[1]:i.min[1],v=h&4?i.max[2]:i.min[2],M=f.x+(n[0]*y+n[4]*x+n[8]*v+n[12])*l,_=f.y+(n[2]*y+n[6]*x+n[10]*v+n[14])*l,p=Math.min(p,M),c=Math.min(c,_),u=Math.max(u,M),d=Math.max(d,_);return a.header.maxLat!==void 0&&a.header.minLon!==void 0&&a.header.minLat!==void 0&&a.header.maxLon!==void 0&&(B=o.project([a.header.maxLat,a.header.minLon],s),b=o.project([a.header.minLat,a.header.maxLon],s),p=Math.max(p,B.x),c=Math.max(c,B.y),u=Math.min(u,b.x),d=Math.min(d,b.y),p>=u||c>=d)?null:[p,c,u,d]}function Vs(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,f,l,p,c,u,d,h;for([s,f,l,p]of e){if(c=Math.max(s,i),u=Math.max(f,n),d=Math.min(l,i+o),h=Math.min(p,n+o),c>=d||u>=h){a.push([s,f,l,p]);continue}f<u&&a.push([s,f,l,u]),h<p&&a.push([s,h,l,p]),s<c&&a.push([s,u,c,h]),d<l&&a.push([d,u,l,h])}return a}function Hs(e,t,r){let o=!1,i=!1,n,a,s,f;for(n of r){if(!m.get(n).header){i=!0;continue}if(a=$s(e,t,n),!!a){o=!0,s=[a];for(f of m.get(n)._rasterTiles.values())if(!(!f.done&&!f.error)&&(s=Vs(s,f,m.get(n)._tileZoom),!s.length))return!0}}return!o&&!i}function qs(e,t,r){if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){if(t._roofCoverageSignature!==m.get(e)._roofRaster?.signature&&(t._roofCoverageSignature=m.get(e)._roofRaster?.signature,t._roofCovered=Hs(t,e,r)),!t._roofCovered)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Ws(e,t,r,o){let i=m.get(e)._visibleMeshes,n=m.get(e)._shadowMeshes,a=m.get(e).renderer,s=!1,f,l;for(f of i)qs(e,f,t)&&(f.fadeDuration&&(f.fadeStart??=f.tile?.loadedAt??r,l=Math.min(1,(r-f.fadeStart)/f.fadeDuration),f._appearance=l*l*(3-2*l),s||=l<1),o.push(f));i.length=0,Zs(o);let p=1/0,c=-1/0;for(f of o)f.ground&&(p=Math.min(p,f.tile.coords.z),c=Math.max(c,f.tile.coords.z));a.groundOverlap=p!==c;let u=0;for(f of n)f.visible&&f._appearance!==0&&(n[u++]=f);return n.length=u,s}var bo={size:null,usage:null};function Ys(e,t,r){let o=m.get(e).renderer;(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&D(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((bo.size=Math.max(64,t.length*4+r.length*2)*256,bo.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,bo)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var fe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Bo(e){let t=m.get(e).renderer.sunlight;t.bindGroup=m.get(e).renderer.device.createBindGroup((fe.layout=t.layout,fe.entries[0].resource.buffer=t.buffer,fe.entries[1].resource=t.texture.createView(),fe.entries[2].resource=t.sampler,fe.entries[3].resource.buffer=t.lights,fe)),fe.layout=null,fe.entries[0].resource.buffer=null,fe.entries[1].resource=null,fe.entries[2].resource=null,fe.entries[3].resource.buffer=null}function Xs(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function Ks(e,t,r,o,i,n,a,s){let f=e[t+3],l=e[t]-r,p=e[t+2]-o,c,u,d;for(c=Math.floor((p-f)/i);c<=Math.floor((p+f)/i);c++)for(u=Math.floor((l-f)/i);u<=Math.floor((l+f)/i);u++)d=c*n+u,s?Xs(e,t,d,a,s):a[d]++}function Yn(e,t,r,o,i,n,a){let s,f;for(s of e)for(f=0;f<s.length;f+=8)Ks(s,f,t,r,o,i,n,a)}function Js(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,f;if(r){let l=1/0,p=1/0,c=-1/0,u=-1/0;for(o of e)for(i=0;i<o.length;i+=8)l=Math.min(l,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),u=Math.max(u,o[i+2]+o[i+3]);let d=Math.ceil((c-l)/s)+1,h=Math.ceil((u-p)/s)+1,y=new Uint32Array(d*h),x=new Uint32Array(d*h);Yn(e,l,p,s,d,y);let v=0;for(n of y)v+=n;let M=(2+d*h+v*2)*4;if(M*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");f=new Float32Array(M),f[0]=l,f[1]=p,f[2]=s,f[3]=d,f[4]=h,f[5]=r;let _=2+d*h;for(a=0;a<y.length;a++)y[a]&&(f[(2+a)*4]=x[a]=_,f[(2+a)*4+1]=y[a],_+=y[a]*2);Yn(e,l,p,s,d,x,f)}else f=new Float32Array(8);return{data:f,count:r}}var Qs=.03/(4*Math.PI);function ks(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,f,l,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:f,flux:l}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=f[0],r[o*8+5]=f[1],r[o*8+6]=f[2],r[o*8+7]=l*Qs;return r}function Xn(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,f,l,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,f=n._worldLights,l=!!f,p=0;p<a.length&&l;p++)l=a[p]===f.matrix[p];(!l||f.lights!==s)&&(f=n._worldLights={lights:s,matrix:[...a],data:ks(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===f}if(o)return t;let c=new Array(e.length),u=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],f=n._worldLights,c[i]=f.data,u[i]={mesh:n,cache:f};return{...Js(c,r),meshes:u}}var ue=[];function Kn(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||ue)Kn(o,t,r)}function em(e){let{device:t,sunlight:r}=m.get(e).renderer,o=[],i=[],n;for(n of m.get(e)._layers)!n.options.nightLight||!m.get(n).root.visible||Kn(m.get(n).root,o,i);let a=t.limits.maxStorageBufferBindingSize,s=Xn(o,r.staticLightGrid,a),f=Xn(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&f===r.dynamicLightGrid)return;let l=s.data.byteLength+f.data.byteLength;if(l>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<l&&(D(e,r.lights),r.lights=t.createBuffer({size:l,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Bo(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,f.data),r.lightCount=s.count+f.count,r.staticLightGrid=s,r.dynamicLightGrid=f}function tm(e,t,r,o){let i=m.get(e).renderer,n=m.get(e).camera,a=n.viewMatrix,s=o?.direction,f=s?s[0]:-300,l=s?s[1]:500,p=s?s[2]:300,c=a[0]*f+a[4]*l+a[8]*p,u=a[1]*f+a[5]*l+a[9]*p,d=a[2]*f+a[6]*l+a[10]*p,h=Math.hypot(c,u,d)||1,y=Math.hypot(a[4],a[5],a[6])||1;Ys(e,t,r);let x=i.uniformData;x.set(n.viewMatrix,0),x.set(n.projectionMatrix,16),m.get(e)._roofRaster?.matrix?x.set(m.get(e)._roofRaster.matrix,32):(x.fill(0,32,48),x[32]=x[37]=x[42]=x[47]=1),x[48]=c/h,x[49]=u/h,x[50]=d/h,x[51]=o&&o.altitude<=0?0:1,x[52]=a[4]/y,x[53]=a[5]/y,x[54]=a[6]/y;let v=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;x[55]=v*v*(3-2*v);let M=o?.tint;x[56]=M?M[0]:1,x[57]=M?M[1]:1,x[58]=M?M[2]:1,x[59]=0,v>0&&em(e),i.uniformSlot=1}var Ct={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Jn=[null];var W={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var rm={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function om(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((W.layout=i.pipelineLayout,W.vertex.module=i.vertex,W.vertex.buffers=i.vertexBuffers,W.fragment.module=i.fragment,W.fragment.targets[0].format=e.format,W.fragment.targets[0].blend=i.transparent?rm:void 0,W.fragment.targets[0].writeMask=GPUColorWrite.ALL,W.primitive.cullMode=r,W.primitive.frontFace=o,W.depthStencil.depthWriteEnabled=i.depthWrite,W.depthStencil.depthCompare=n,W)),W.layout=null,W.vertex.module=null,W.vertex.buffers=null,W.fragment.module=null,i.pipelineCache.set(a,s)),s}function im(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function nm(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,im(e,t,n),o}var ft={source:null,flipY:null};var Et={texture:null};var zt=[null,null];function am(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((ft.source=t.image,ft.flipY=!!t.flipY,ft),(Et.texture=t.texture,Et),(zt[0]=t.image.width,zt[1]=t.image.height,zt)),ft.source=null,Et.texture=null,t.uploaded=t.image)}var It={layout:null,entries:null};var sm=[];var So={binding:0,resource:{buffer:null,size:160}};var Co={binding:1,resource:{buffer:null,size:240}};var Eo={binding:2,resource:null};var Cr=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var Er=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function mm(e,t,r){let{program:o}=t,i=sm;i.length=0,So.resource.buffer=e.uniformBuffer,Co.resource.buffer=e.uniformBuffer,i.push(So,Co),o.terrain&&(Eo.resource=o.terrain.texture.createView(),i.push(Eo)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,f;for(a=0;a<r.length;a++)s=o.bindings[a],f=r[a],Cr[a].binding=s.texture,Cr[a].resource=f.texture.createView(),Er[a].binding=s.sampler,Er[a].resource=f.sampler,i.push(Cr[a],Er[a]),n[a]||=[],n[a][0]=f.texture,n[a][1]=f.sampler;for(t.bindGroup=e.device.createBindGroup((It.layout=o.bindGroupLayout,It.entries=i,It)),It.layout=null,It.entries=null,So.resource.buffer=null,Co.resource.buffer=null,Eo.resource=null,a=0;a<r.length;a++)Cr[a].resource=null,Er[a].resource=null;i.length=0}function fm(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);am(o,a),i.push(a)}let f=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!f&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(f=!0);f&&mm(e,t,i)}function zo(e,t,r,o,i){let{geometry:n}=t,a=m.get(e).renderer,{device:s}=a,f=om(a,t,o,i),l=nm(a,t);fm(a,t),r.setPipeline(f),r.setBindGroup(0,t.bindGroup,(Jn[0]=l,Jn)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c;for(c of Object.values(n.attributes))c.needsUpdate&&(s.queue.writeBuffer(c.buffer,0,c.data),c.needsUpdate=!1,n.bounds=null);let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function lm(e,t,r){let o=m.get(e).renderer,i=t.beginRenderPass((Ct.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Ct.depthStencilAttachment.view=o.depthTexture.createView(),Ct));Ct.colorAttachments[0].view=null,Ct.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,f,l,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=m.get(e)._roofRaster?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(f=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(f)||f===0)throw new Error("Singular 3D transform");n._frontFace=f<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}l=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(zo(e,n,i,"front",l),zo(e,n,i,"back",l)):zo(e,n,i,p.cullMode,l)}i.end()}var pm=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var cm=new Float32Array(20);function um(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function dm(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!um(o,a)){i=!1;break}}return i}var hm={min:[0,0,0],max:[0,0,0]};var gm={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var xm=[0,0,0];var ym=[0,0,0];function vm(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,f,l,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],f=r[3]*n+r[7]*a+r[11]*s+r[15],l=0;l<3;l++)p=(r[l]*n+r[l+4]*a+r[l+8]*s+r[l+12])/f,o.min[l]=Math.min(o.min[l],p),o.max[l]=Math.max(o.max[l],p)}return o}function wm(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,f;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&oe(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=vm(i,n,a),f=0;f<3;f++)r[f]=Math.min(r[f],s.min[f]),o[f]=Math.max(o[f],s.max[f]);return r[1]=Math.min(0,r[1]),t}function Mm(e,t){let{min:r,max:o}=wm(e,hm),i=gm;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=xm,a=ym,s,f,l,p,c,u,d=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*d*2;i.far=d*5,Bt(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(l=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],f=0;f<3;f++)u=h[f]*l+h[f+4]*p+h[f+8]*c+h[f+12],n[f]=Math.min(n[f],u-20),a[f]=Math.max(a[f],u+20);let y=2/(a[0]-n[0]),x=2/(a[1]-n[1]),v=-1/(a[2]-n[2]),M=new Float32Array(16);for(s=0;s<16;s+=4)M[s]=h[s]*y,M[s+1]=h[s+1]*x,M[s+2]=h[s+2]*v,M[s+3]=h[s+3];return M[12]-=(a[0]+n[0])/(a[0]-n[0]),M[13]-=(a[1]+n[1])/(a[1]-n[1]),M[14]+=a[2]/(a[2]-n[2]),M}var Qn={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var kn={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var At={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Io={code:null};var we={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var Dt={bindGroupLayouts:[null,null]};var Ot=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Ao=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var _m=[Ot,Ao];var Tm=[Ot];function ea(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Qn.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Qn)),t.depthLayout=e.createBindGroupLayout((kn.entries[0].visibility=GPUShaderStage.VERTEX,kn)),t.depthBindGroup=e.createBindGroup((At.layout=t.depthLayout,At.entries[0].resource.buffer=t.buffer,At)),At.layout=null,At.entries[0].resource.buffer=null);let i=e.createShaderModule((Io.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,Io));Io.code=null;let n=r?_m:Tm;t[o]=e.createRenderPipeline((we.layout=e.createPipelineLayout((Dt.bindGroupLayouts[0]=t.meshLayout,Dt.bindGroupLayouts[1]=t.depthLayout,Dt)),we.vertex.module=i,we.vertex.buffers=n,we.fragment.module=i,we)),Dt.bindGroupLayouts[0]=null,Dt.bindGroupLayouts[1]=null,we.layout=null,we.vertex.module=null,we.vertex.buffers=null,we.fragment.module=null}}var Do={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Gt={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var ta=[null];function Lm(e,t,r){let o=m.get(e).renderer,i=o.device,n=o.sunlight,a=t.beginRenderPass((Do.depthStencilAttachment.view=n.texture.createView(),Do));Do.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let f,l,p,c,u,d,h;for(f of r){l=f.geometry.attributes.instanceOffset,p=l?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(f.worldMatrix,c/4),o.uniformData[c/4+35]=f._appearance??1,f._shadowBuffer!==o.uniformBuffer&&(f._shadowBuffer=o.uniformBuffer,f._shadowBindGroup=i.createBindGroup((Gt.layout=n.meshLayout,Gt.entries[0].resource.buffer=o.uniformBuffer,Gt)),Gt.layout=null,Gt.entries[0].resource.buffer=null);for(u of Object.values(f.geometry.attributes))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,f._shadowBindGroup,(ta[0]=c,ta)),a.setVertexBuffer(0,f.geometry.attributes.position.buffer),l&&a.setVertexBuffer(1,l.buffer),d=f.geometry.attributes.index,h=f.geometry.drawRange,d?(a.setIndexBuffer(d.buffer,d.indexFormat),a.drawIndexed(h.count,l?.count??1,h.start,0,0)):a.draw(h.count,l?.count??1,h.start,0)}a.end()}var zr={size:[null,null],format:"depth32float",usage:null};function Oo(e,t){let r=m.get(e).renderer.device,o=m.get(e).renderer.sunlight;o.size!==t&&(o.texture&&D(e,o.texture),o.size=t,o.texture=r.createTexture((zr.size[0]=t,zr.size[1]=t,zr.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,zr)),Bo(e))}function Pm(e,t,r,o){let i=m.get(e).renderer,n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,pm),a.enabled=!1,a.cache=null;return}if(dm(a,r,o))return;let s=cm;a.enabled=!0,Oo(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Mm(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),ea(n,a);let f;for(f of r)if(f.geometry.attributes.instanceOffset){ea(n,a,!0);break}Lm(e,t,r);let l=new Map,p;for(p of r)l.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:l}}function Go(e){let t=m.get(e)._frame;Ie.delete(e),m.get(e)._frame=null,!Ie.size&&t!=null&&cancelAnimationFrame(t)}function R(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function Rt(e,t){m.get(e)._terrainRequest?.abort();let r=m.get(e)._rasterTiles.get(t);r&&(R(r,null),z(e),r.texture!==t.texture&&D(e,r.texture.texture),m.get(e)._rasterTiles.delete(t))}function Ut(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;m.get(e)._rasterTiles.get(r)===t&&(m.get(e)._rasterTiles.delete(r),m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,t.request.abort(),m.get(e)._terrain3D&&Rt(m.get(e)._terrain3D,t),t.mesh&&R(t.mesh,null),t.texture&&D(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),z(e))}function Ft(e){let t=m.get(e)._wantedRasterTiles,r=performance.now();if(m.get(e)._pruneVersion===m.get(e)._rasterVersion&&m.get(e)._pruneWanted===t&&r<m.get(e)._pruneAfter)return Number.isFinite(m.get(e)._pruneAfter);m.get(e)._pruneVersion=m.get(e)._rasterVersion,m.get(e)._pruneWanted=t,m.get(e)._pruneAfter=1/0;let o=[],i,n,a,s,f,l;for(i of t)n=m.get(e)._rasterTiles.get(i),n?.done&&r-n.loadedAt<250&&(m.get(e)._pruneAfter=Math.min(m.get(e)._pruneAfter,n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of m.get(e)._rasterTiles)if(!t.has(i)){s=!1;for(f of o)if(l=Math.min(f.z,n.coords.z),Math.floor(f.x/2**(f.z-l))===Math.floor(n.coords.x/2**(n.coords.z-l))&&Math.floor(f.y/2**(f.z-l))===Math.floor(n.coords.y/2**(n.coords.z-l))){s=!0;break}s||Ut(e,n)}return Number.isFinite(m.get(e)._pruneAfter)}L();function Nt(e){return m.get(e.source)._nativeGPU===e&&e.map.hasLayer(e.source)}L();var Ro=Object.freeze([1,1,1]);L();function Uo(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof g.GridLayer&&(t.opacity=o);let f=n?i._zIndex+(m.get(i)._cameraZIndexOffset||0):i.options.zIndex;t.renderOrder=a*1e6+(f||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var bm=Object.freeze([0,2,1,1,2,3]);var ra=Object.freeze([0,0,1,0,0,1,1,1]);var Bm=Object.freeze({minFilter:"linear",magFilter:"linear"});function k(e,t){if(!t)return;R(t,null),z(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Cm(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!Nt(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,re(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function Em(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function zm(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&k(o,c),n.delete(t),D(o,a.texture),i.delete(t)}let f=r.naturalWidth||r.width,l=r.naturalHeight||r.height;if(!f||!l)return;let{device:p}=m.get(o).renderer;a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[f,l],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(Bm)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Cm(e,t,a,r,p,f,l)):Em(e,t,a,r,p,f,l)}return a.used=!0,a.uploaded===r?a:void 0}L();var jt=Object.freeze({});var Fo={size:null,usage:null};var Me={value:0};function K(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var No={code:null};var jo={code:null};var Zt={bindGroupLayouts:[null,null]};var Im=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Am=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Dm=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Om=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Zo={entries:null};var Gm=[];var oa={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var ia={binding:1,visibility:null,buffer:{type:"uniform"}};var na={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Rm=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Um=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function Fm(e,t){let r=Gm;r.length=0,oa.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,ia.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(oa,ia),t.hasTerrain&&(na.visibility=GPUShaderStage.VERTEX,r.push(na));let o,i,n=0;for(o of t.bindings)i=Rm[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Um[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Zo.entries=r,Zo));return Zo.entries=null,a}function Nm(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function $t(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function jm(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Zm(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function $m(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Zm(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Vm(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Hm(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Vm(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function qm(e=jt,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);jm(e);let f=!!e.terrain,l=o||i||n||a||e.nightLight,p=$m(e,t,r,f,l,s),c=[],u=$t(c,"baseTexture",o),d=$t(c,"metalTexture",i),h=$t(c,"emissiveTexture",n),y=$t(c,"occlusionTexture",a),x=$t(c,"roofTexture",s),v=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${u}${d}${h}${y}${x} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${l?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Hm(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:v,bindings:c,textured:l,hasTerrain:f}}async function Wm(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
+
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function le(e,t=jt){let r=qm(t,!!e.options.nightSparkle,t.terrain?Im:""),o=m.get(e).renderer.device.createShaderModule((No.code=r.vertex,No));No.code=null;let i=m.get(e).renderer.device.createShaderModule((jo.code=r.fragment,jo));jo.code=null,Wm(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[Ot,Am,t.vertexColors?Dm:null,r.textured?Om:null];t.instanced&&n.push(Ao);let a=Fm(m.get(e).renderer.device,r),s=m.get(e).renderer.device.createPipelineLayout((Zt.bindGroupLayouts[0]=a,Zt.bindGroupLayouts[1]=m.get(e).renderer.sunlight.layout,Zt));Zt.bindGroupLayouts[0]=null,Zt.bindGroupLayouts[1]=null;let f=Nm(t);return{device:m.get(e).renderer.device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:f,_layerMaterial:t}}function qe(e,t,r=jt,o=0,i){let{device:n}=m.get(e).renderer,a={},s,f,l,p,c;for([s,f]of Object.entries(t))l=new Float32Array(f),p=s==="uv"?2:3,c=n.createBuffer((Fo.size=Math.max(4,l.byteLength),Fo.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Fo)),n.queue.writeBuffer(c,0,l),a[s]={size:p,data:l,count:l.length/p,buffer:c};let u={...K(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||le(e,{vertexColors:!0,doubleSided:!0,...r}),id:Me.value++,renderOrder:0,extras:{}};return R(u,m.get(e).root),z(e),u}function $o(e,t,r,o,i,n,a){let{backend:s,source:f,meshes:l}=e;if(!r.length)return;let p=l.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],u;for(u=0;u<r.length;u++)c.push(u%3===1?1:0);let d={position:r,normal:c};a&&(d.uv=a);let h={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(h.baseTexture=n),p&&k(s,p),p=qe(s,d,h,0,f instanceof g.GridLayer?e.rasterProgram:void 0),f instanceof g.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),l.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Uo(e,p,o,i),p}function Vt(e,t,r,o,i){let n=zm(e,t,r);if(!n)return;let a=bm,s=[],f=[],l;for(l of a)s.push(...o[l]),f.push(ra[l*2],ra[l*2+1]);return $o(e,t,s,Ro,i,n,f)}N();function Ht(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(m.get(o).location),a=i.project(t),s=Math.cos(m.get(o).location.lat*P);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function Vo(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(Ht(e,i));return r}function Xm(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,f,l,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),f=o.get(i),f&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Uo(e,f,Ro,a)):([l,p]=t._tileCoordsToNwSe(n.coords),f=Vt(e,i,n.el,Vo(e,new g.LatLngBounds(l,p)),a)),f&&(f.renderOrder+=n.coords.z/100)))}function Km(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Vt(e,"image",t._image,Vo(e,t.getBounds()),t.options.opacity??1)}var Jm=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();N();G();function Ho(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*P:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new g.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Ir(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function Qm(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function km(e,t,r){let{source:o,map:i,backend:n}=e,a=Ht(e,o.getLatLng()),s=i.getSize(),f=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},l=f.root,p=f.camera,c=f.point,u=m.get(n).root.worldMatrix,d=m.get(n).camera.projectionViewMatrix,h,y;for(h=0;h<16;h++)y=Jm[h],l[y]=u[h],p[y]=d[h];Ir(c,l,a[0],a[1],a[2],1),Ir(c,p,c.x,c.y,c.z,c.w);let x=c.x,v=c.y,M=c.z,_=c.w;p.invertSelf(),l.invertSelf();let[B,b,A,V]=Qm(e,t,r),Z=(x/_+1)*s.x/2,j=(1-v/_)*s.y/2,J=Z-A,ye=j-V,$e=[],no,pe,at,ze,Lr;for(h=0;h<4;h++)no=J+(h%2?B:0),pe=ye+(h<2?0:b),at=Ho(o,no-Z,pe-j),ze=Z+at.x,Lr=j+at.y,Ir(c,p,ze/s.x*2-1,1-Lr/s.y*2,M/_,1),Ir(c,l,c.x/c.w,c.y/c.w,c.z/c.w,1),$e.push([c.x,c.y,c.z]);return $e}function ef(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=Vt(e,o,i,km(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var qt=[];L();L();function ie(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}L();var Ar=2*Math.PI;L();function aa(e,t,r,o,i){return new g.Point(e.x+t*Math.cos(i*Ar/o),e.y+r*Math.sin(i*Ar/o))}function lt(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)ie(e,o,t,aa(t,r,i,n,a),aa(t,r,i,n,a+1))}function qo(e,t,r,o,i){let{options:n,width:a,stroke:s,point:f}=e,l=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),u=new g.Point(-c.y*l,c.x*l);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(l))),i&&(r=r.add(c.multiplyBy(l)))),ie(f,s,t.add(u),t.subtract(u),r.add(u)),ie(f,s,r.add(u),t.subtract(u),r.subtract(u)),n.lineCap==="round"&&(o&<(f,t,l,s),i&<(f,r,l,s))}L();function tf(e,t,r,o,i){let{options:n,width:a,point:s,stroke:f}=e,l=t[r],p=a/2;if(n.lineJoin==="round"){lt(s,l,p,f);return}let c=l.subtract(t[(r+t.length-1)%t.length]),u=Math.hypot(c.x,c.y);if(!u||!i)return;let d=c.divideBy(u),h=o.subtract(l).divideBy(i),y=d.x*h.y-d.y*h.x>0?-1:1,x=new g.Point(-d.y*y,d.x*y),v=new g.Point(-h.y*y,h.x*y),M=l.add(x.multiplyBy(p)),_=l.add(v.multiplyBy(p)),B=1+x.x*v.x+x.y*v.y,b=B>0?x.add(v).multiplyBy(p/B):null;ie(s,f,M,l,_),n.lineJoin==="miter"&&b&&Math.hypot(b.x,b.y)<=p*4&&ie(s,f,M,l.add(b),_)}function rf(e,t,r,o,i,n){let a=e.dash,s=0,f,l,p,c;for(;s<o;){for(f=((i+s)%n+n)%n,l=0;f>=a[l];)f-=a[l++];p=Math.min(o,s+a[l]-f),l%2===0&&(c=r.subtract(t).divideBy(o),qo(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function Wo(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,f,l,p,c,u;for(f of n)s+=f;for(l=0;l<t.length-(r?0:1);l++)p=t[l],c=t[(l+1)%t.length],u=p.distanceTo(c),n.length?rf(e,p,c,u,a,s):(qo(e,p,c,!r&&l===0,!r&&l===t.length-2),(r||l>0)&&tf(e,t,l,c,u)),a+=u}function of(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function nf(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,f;for(f=r;f<n;f++)a<i&&(s>=n||e[a].x<=e[s].x)?t[f]=e[a++]:t[f]=e[s++]}function af(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:of(o)});let f=r,l=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)nf(f,l,n,i);a=f,f=l,l=a}for(s=0;s<e.length;s++)e[s]=f[s].ring;return e}function X(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function de(e,t){return e.x===t.x&&e.y===t.y}function sf(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],de(o,i)||Math.abs(X(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function Yo(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function mf(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=sf(t.slice(o,o+=n.length)),Yo(a)!==!!i&&a.reverse(),r.push(a);return r}function Xo(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function ff(e,t){let r;for(r=1;r<t.length;r++)if(Xo(e,t[r]))return!0;return!1}function Dr(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function lf(e,t,r,o){if(de(e,r)||de(e,o)||de(t,r)||de(t,o))return!1;let i=X(e,t,r),n=X(e,t,o),a=X(r,o,e),s=X(r,o,t);return i*n<0&&a*s<0||i===0&&Dr(e,t,r)||n===0&&Dr(e,t,o)||a===0&&Dr(r,o,e)||s===0&&Dr(r,o,t)}function sa(e,t,r){let o;for(o=0;o<r.length;o++)if(lf(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function pf(e,t,r,o){if(sa(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(sa(e,t,o[i]))return!0;return!1}function cf(e,t,r,o){let i=-1,n=-1,a=1/0,s,f,l,p,c;for(s=0;s<t.length;s++)for(f=0;f<e.length;f++)l=t[s],p=e[f],c=(l.x-p.x)**2+(l.y-p.y)**2,!(c>=a)&&(o.x=(l.x+p.x)/2,o.y=(l.y+p.y)/2,!(!Xo(o,r[0])||ff(o,r))&&(pf(l,p,e,r)||(i=s,n=f,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function uf(e,t,r,o){let i;for(i of e)if(!de(i,t)&&!de(i,r)&&!de(i,o)&&X(t,r,i)>=0&&X(r,o,i)>=0&&X(o,t,i)>=0)return!0;return!1}function df(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(X(i,n,a)<=1e-10)&&!uf(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(X(...e)>1e-10){let f=[];for(s of e)f.push(s.index);t.push(f)}return t}function ma(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function hf(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=ma(e[n]);let s=ma(e[0])-o;for(a of r)i+=X(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function Wt(e,t=ue){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let f=mf(r,s),l=f[0].slice(),p=af(f.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)l=cf(l,a,f,c);let u=df(l);return hf(f,s,u),u}function fa(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],f,l,p,c;for(f of t){l=[];for(p of f)l.push(a.project(p));s.push(l)}if(r&&o.fill&&s[0]?.length>=3){let u=[];for(f of s)f.length>=3&&u.push(f);let d=u.flat();for(c of Wt(u[0],u.slice(1)))ie(n,i,d[c[0]],d[c[1]],d[c[2]])}for(f of s)Wo(e,f,r)}function la(e,t,r){if(!t.length)return;let o;if(t[0]instanceof g.LatLng)fa(e,[t],r);else if(r&&t[0][0]instanceof g.LatLng)fa(e,t,r);else for(o of t)la(e,o,r)}function gf(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}L();L();function We(e,t,r,o,i,n=0){let a=i*Ar/o;return new g.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function xf(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:f}=t,l=r.project(e.getLatLng()),p=e.getRadius(),c=p,u,d;if(e instanceof g.Circle){e._project();let y=e._point.add(r.getPixelOrigin());l.x=y.x,l.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&<(o,l,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(u=0;u<h;u++)y.push(We(l,p,c,h,u));Wo(t,y,!0)}else if(a.stroke&&f>0)for(d=0;d<h;d++)ie(o,n,We(l,p,c,h,d,f/2),We(l,p,c,h,d,-f/2),We(l,p,c,h,d+1,f/2)),ie(o,n,We(l,p,c,h,d+1,f/2),We(l,p,c,h,d,-f/2),We(l,p,c,h,d+1,-f/2))}function yf(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=gf(n),f={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof g.CircleMarker)xf(e,f);else{let l=e instanceof g.Polygon;la(f,e.getLatLngs(),l)}return{fill:o,stroke:i}}function vf(e,t){return Ht(e,e.map.unproject(t))}function wf(e){return vf(qt[qt.length-1],e)}function Ko(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Jo(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function he(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Ko(Jo(0,e.h,e.l,n)),g:Ko(Jo(8,e.h,e.l,n)),b:Ko(Jo(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Mf(e){let{source:t}=e;qt.push(e);let r;try{r=yf(t,e.map,wf)}finally{qt.pop()}let{fill:o,stroke:i}=r,n,a,s,f,l,p,c,u;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,f=n?t.options.color:t.options.fillColor||t.options.color,l=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:u}=he(f),$o(e,a,s,[p,c,u],l??1))}function _f(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(k(o,i),t.delete(a),n=r.get(a),n&&D(o,n.texture),r.delete(a));for([a,n]of r)n.used||(D(o,n.texture),r.delete(a))}function Qo(e){let{source:t,meshes:r,textures:o}=e;if(!Nt(e)||!m.get(e.backend).renderer||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof g.GridLayer?Xm(e):t instanceof g.ImageOverlay?Km(e):e.marker?ef(e):Mf(e),_f(e)}function Tf(e){try{Qo(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function Ye(e){if(Go(e),m.get(e)._shared!==e||!m.get(e).renderer)return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;ps(e,r),us(e,o),ys(e,o),Q(m.get(e).scene);let i=!1,n,a;for(n of m.get(e)._layers)a=Pt.get(n),a&&(Tf(a),i=!0);let s=w.get(t)._sunlight;_s(e,s,i);let f=m.get(e)._shadowMeshes,l=m.get(e).renderer,p=Fs(e,r),c=l.frameMeshes||=[];c.length=0;let u=Ws(e,p,r,c),d=l.device.createCommandEncoder();tm(e,c,f,s),Pm(e,d,f,s),lm(e,d,c),l.device.queue.writeBuffer(l.uniformBuffer,0,l.uniformData,0,l.uniformSlot*64),l.device.queue.submit((xo[0]=d.finish(),xo)),xo[0]=null;for(n of m.get(e)._layers)m.get(n)._wantedRasterTiles&&(u=Ft(n)||u);(t._animatingZoom||u)&&z(e)}function Lf(){let e=[...Ie];Ie.clear();let t,r;for(r of e)if(m.get(r)._frame=null,!(m.get(r)._shared!==r||!m.get(r).renderer))try{Ye(r)}catch(o){t||=o}if(t)throw t}function z(e){let t=m.get(e)._shared;if(!t)return e;if(t!==e)return z(t),e;if(m.get(e)._frame!=null)return e;let r=Ie.values().next().value;return Ie.add(e),m.get(e)._frame=r?m.get(r)._frame:requestAnimationFrame(Lf),e}L();function ko(e){let{source:t}=e,r=t instanceof g.Marker&&t.options.icon instanceof g.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function re(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,ko(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",Pr),o.removeEventListener("error",br),go(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),ms(o,e),o.addEventListener("load",Pr),o.addEventListener("error",br));m.get(e.backend)._shared&&z(e.backend)}function U(e,t,r){let o=m.get(t)._nativeGPU,n=o.originalMethods.get(e).apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof g.GridLayer){let f=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof g.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,f=e==="bringToFront"?Math.max(f,s):Math.min(f,s));let l=e==="bringToFront"?f+1:f-1;Number.isFinite(l)&&t.setZIndex(l)}return e==="bringToFront"&&(o.order=++w.get(o.map)._nativeGPUOrder),e==="bringToBack"&&(o.order=--w.get(o.map)._nativeGPUBack),re(o),n}function Pf(...e){return U("setLatLng",this,e)}function bf(...e){return U("setLatLngs",this,e)}function Bf(...e){return U("addLatLng",this,e)}function Sf(...e){return U("setRadius",this,e)}function Cf(...e){return U("setStyle",this,e)}function Ef(...e){return U("redraw",this,e)}function zf(...e){return U("setIcon",this,e)}function If(...e){return U("setUrl",this,e)}function Af(...e){return U("setBounds",this,e)}function Df(...e){return U("setOpacity",this,e)}function Of(...e){return U("setZIndex",this,e)}function Gf(...e){return U("setZIndexOffset",this,e)}function Rf(...e){return U("bringToFront",this,e)}function Uf(...e){return U("bringToBack",this,e)}var pa={setLatLng:Pf,setLatLngs:bf,addLatLng:Bf,setRadius:Sf,setStyle:Cf,redraw:Ef,setIcon:zf,setUrl:If,setBounds:Af,setOpacity:Df,setZIndex:Of,setZIndexOffset:Gf,bringToFront:Rf,bringToBack:Uf};L();var Yt=Object.freeze({});function ei(e=Yt){return new g.Layer(e)}L();var pt=new WeakMap;var Xe=new WeakMap;function Ff(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,f;for(f=r;f<n;f++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[f]=e[a++]:t[f]=e[s++]}function Nf(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Ff(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function jf(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,f,l,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],f=e.origin[1],l=e.origin[2],p=n[3]*s+n[7]*f+n[11]*l+n[15],r[0]=(n[0]*s+n[4]*f+n[8]*l+n[12])/p,r[1]=(n[1]*s+n[5]*f+n[9]*l+n[13])/p,r[2]=(n[2]*s+n[6]*f+n[10]*l+n[14])/p,s=e.direction[0],f=e.direction[1],l=e.direction[2],o[0]=n[0]*s+n[4]*f+n[8]*l,o[1]=n[1]*s+n[5]*f+n[9]*l,o[2]=n[2]*s+n[6]*f+n[10]*l;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Zf(e,t,r){e.geometry.bounds||oe(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function $f(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,f=a?.count||n.count,l=s?t%f:t,p=s?Math.floor(t/f)*s.size:0,c=s?.data[p]??0,u=s?.data[p+1]??0,d=s?.data[p+2]??0,h=(a?a.data[l]:l)*n.size,y=(a?a.data[l+1]:l+1)*n.size,x=(a?a.data[l+2]:l+2)*n.size;r[0]=n.data[h],r[1]=n.data[h+1],r[2]=n.data[h+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[x],i[1]=n.data[x+1],i[2]=n.data[x+2],s&&(r[0]=Math.fround(r[0]+c),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+d),o[0]=Math.fround(o[0]+c),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+d),i[0]=Math.fround(i[0]+c),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+d))}function Vf(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,f=n?n.data[t+1]:t+1,l=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[f*2]*r+a[l*2]*o,c=a[s*2+1]*(1-r-o)+a[f*2+1]*r+a[l*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Hf(e,t,r,o,i,n,a,s){let f=o[0]-r[0],l=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],u=i[1]-r[1],d=i[2]-r[2],h=a[1]*d-a[2]*u,y=a[2]*c-a[0]*d,x=a[0]*u-a[1]*c,v=f*h+l*y+p*x;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(v)<1e-9:v<1e-9)return 1/0;let M=n[0]-r[0],_=n[1]-r[1],B=n[2]-r[2],b=(M*h+_*y+B*x)/v;if(b<0||b>1)return 1/0;let A=_*p-B*l,V=B*f-M*p,Z=M*l-_*f,j=(a[0]*A+a[1]*V+a[2]*Z)/v;return j<0||b+j>1||Vf(e,t,b,j,s)?1/0:(c*A+u*V+d*Z)/v}function qf(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],f=o[2]*i+r[2],l=t.worldMatrix,p=l[3]*a+l[7]*s+l[11]*f+l[15],c=[(l[0]*a+l[4]*s+l[8]*f+l[12])/p,(l[1]*a+l[5]*s+l[9]*f+l[13])/p,(l[2]*a+l[6]*s+l[10]*f+l[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function ti(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],f=[0,0,0],l,p,c,u,d,h,y,x,v;for(l of t)if(jf(e,l,s,f),!!Zf(l,s,f)){for({position:p,index:c,instanceOffset:u}=l.geometry.attributes,d=c?.count||p.count,h=1/0,y=void 0,x=0;x<d*(u?.count??1);x+=3)$f(l,x,i,n,a),v=Hf(l,x,i,n,a,s,f,r),v>0&&v<h&&(h=v,y=x/3);y!==void 0&&o.push(qf(e,l,s,f,h,y))}return Nf(o)}function Ae(e,t,r){if(t(e,r))return;let o;for(o of e.children)Ae(o,t,r)}function ri(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Wf(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],f=e[i],l=t[i]-t[i-1]||1,p=(r-t[i-1])/l;return o||={},o.x=s[0]+(f[0]-s[0])*p,o.y=(s[2]??0)+((f[2]??0)-(s[2]??0))*p,o.z=s[1]+(f[1]-s[1])*p,o.dx=(f[0]-s[0])/l,o.dz=(f[1]-s[1])/l,o}function oi(e,t){let{points:r,lengths:o,length:i}=t.lane,n=t.distance+e.elapsed*t.speed;n-=i*Math.floor(n/i);let a=Wf(r,o,n);return a.x-=a.dz*e.side,a.z+=a.dx*e.side,a}function Yf(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o,i,n,a,s,f,l,p,c,u,d,h,y;for(o=0;o<e.trips.length;o++)for(i=e.trips[o],{x:n,y:a,z:s,dx:f,dz:l}=oi(e,i),p=0,c=o*e.stride;p<e.stride;p+=3,c+=3)u=e.template.position[p],d=e.template.position[p+2],h=e.template.normal[p],y=e.template.normal[p+2],t.data[c]=n-u*l-d*f,t.data[c+1]=a+e.template.position[p+1],t.data[c+2]=s+u*f-d*l,r.data[c]=-h*l-y*f,r.data[c+1]=e.template.normal[p+1],r.data[c+2]=h*f-y*l}function Xf(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function ii(e,t,r=m.get(e).root.children,o=!0){if(!m.get(e).renderer)return[];let i=Xe.get(e);i&&Yf(i);let n=e._map.getContainer().getBoundingClientRect();Q(m.get(e).scene),Bt(m.get(e).camera);let a=m.get(e).raycaster.inverse,s=m.get(e).camera.projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let f=(t.clientX-n.left)/n.width*2-1,l=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*f+a.m21*l+a.m41,c=a.m12*f+a.m22*l+a.m42,u=a.m13*f+a.m23*l+a.m43,d=a.m14*f+a.m24*l+a.m44,h;Xf(a),m.get(e).raycaster.origin[0]=m.get(e).camera.position[0],m.get(e).raycaster.origin[1]=m.get(e).camera.position[1],m.get(e).raycaster.origin[2]=m.get(e).camera.position[2],m.get(e).raycaster.direction[0]=p/d-m.get(e).raycaster.origin[0],m.get(e).raycaster.direction[1]=c/d-m.get(e).raycaster.origin[1],m.get(e).raycaster.direction[2]=u/d-m.get(e).raycaster.origin[2];let y=m.get(e).raycaster.direction,x=Math.hypot(y[0],y[1],y[2])||1;m.get(e).raycaster.direction[0]/=x,m.get(e).raycaster.direction[1]/=x,m.get(e).raycaster.direction[2]/=x;let v=m.get(e).raycaster.meshes;v.length=0;for(h of r)o?Ae(h,ri,v):h.geometry&&h.visible&&h._appearance!==0&&v.push(h);return ti(m.get(e).raycaster,v,m.get(e).renderer.uniformData?.[55])}function Kf(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var $=new WeakMap;var Jf=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function Qf(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function kf(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof g.Marker||n.options.interactive===!1||!(n instanceof g.Path)&&!n.options.interactive)&&o.push(...ii(a,t,i.meshes.values(),!1));return o.sort(Qf),o[0]?.object._nativeSource||null}function ni(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function el(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&ni(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function ca(e,t=e.type,r){let o=this,i=pt.get(o),n=i.fireDOMEvent,a=$.get(o);if(!m.get(a)?.renderer||r||!Jf.has(t))return n.call(this,e,t,r);if(el(o,i,e,t))return n.call(this,e,t,r);let s=kf(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&ni(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function tl(e){let{map:t}=e,r=pt.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=g.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=ca,r.restore=Kf,pt.set(t,r),t._fireDOMEvent=ca}r.states.add(e),e._nativeEventContext=r}function rl(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),pt.delete(r))}function Xt(){re(this)}I();function ai(){this.viewDirty=!0,m.get(this.backend)._shared&&z(this.backend)}function Or(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",Xt,e),r.off("zoomend",Xt,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",ai,e),rl(e);let f,l,p,c,u;for([f,l]of e.methods)l.own?Object.defineProperty(t,f,l.own):delete t[f];for(p of i.values())k(o,p);i.clear();for(c of n.values())D(o,c.texture);n.clear();for(u of a)u.removeEventListener("load",Pr),u.removeEventListener("error",br),go(u,e);Pt.delete(o),o.remove()}function ol(){this.ready.resolve()}function il({error:e}){this.ready.reject(e)}function nl({error:e}){this.source.fire("error",{error:e})}async function al(e){let{source:t,map:r}=e,o=e.backend=ei({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.originalMethods=new Map,e.images=new Set,w.get(r)._nativeGPUOrder||=0,w.get(r)._nativeGPUBack||=0,e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=++w.get(r)._nativeGPUOrder,e.marker=t instanceof g.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Xt,e),r.on("zoomend",Xt,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",ai,e),tl(e);let n,a,s;for(n in pa)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),e.originalMethods.set(n,s),t[n]=pa[n]);let f=e.ready=Promise.withResolvers();o.once("ready",ol,e),o.once("error",il,e),o.on("error",nl,e),re(e),o.addTo(r);try{await f.promise}catch(l){throw Or.call(e),l}if(!Nt(e))return t;Pt.set(o,e);try{Qo(e)}catch(l){throw Or.call(e),l}return z(e.backend),t}function sl(e){m.get(e.source)._nativeGPU===e&&(m.get(e.source)._nativeGPU=null),e.backend&&Or.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function ml(e){return m.get(e.source)._nativeGPU!==e?e.source:al(e)}function si(e,t){e.fire("error",{error:t})}function mi(e,t){if(m.get(e)._nativeGPU)return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r=m.get(e)._nativeGPU={source:e,map:t,hidden:new Set};ko(r),e.once("remove",sl.bind(null,r)),m.get(e).ready=Promise.resolve().then(ml.bind(null,r)),m.get(e).ready.catch(si.bind(null,e))}var fi=[1,0,1,0];L();function H(e){return new g.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}N();G();F();function li(e,t){let r=S(e)*P,o=E(e)*P;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function ne(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,f=H(t);if(!s)return f;let[l,p,c,u]=li(e,fi),d=f.x-n,h=f.y-a;if(r){let M=i.y*e.options.pitchMaxDistance,_=c*s+u*h,B=_*c>0?h*s/_:-M;o&&(B=Math.max(-M,Math.min(M,B)));let b=d*(s-u*B)/s;return f.x=l*b+p*B+n,f.y=-p*b+l*B+a,f}let y=l*d-p*h,x=p*d+l*h,v=s/(s-u*x);return f.x=y*v+n,f.y=c*x*v+a,f}function fl(e){return ne(this,He(this,O.value.layerPointToContainerPoint.call(this,e)))}function ll(e){return O.value.containerPointToLayerPoint.call(this,He(this,ne(this,e,!0),!0))}function pl(){return O.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function cl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ne(this,r.subtract(H(e)),!0));return O.value.panBy.call(this,o,t)}L();F();G();function ul(e,t,r){if(!E(this)&&!S(this))return O.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof g.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),f=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(f),t,{zoom:r})}var _e=Object.freeze([0,0]);F();G();function dl(e,t={}){if(!E(this)&&!S(this))return O.value.panInside.call(this,e,t);let r=H(t.paddingTopLeft||t.padding||_e),o=this.getSize().subtract(H(t.paddingBottomRight||t.padding||_e)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}L();F();G();L();function Kt(e,t=_e){let r=H(t).divideBy(2),o=e.getSize().subtract(r),i=new g.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(ne(e,r,!0,!0));return i}function hl(e,t,r){if(!r||!this._loaded||!E(this)&&!S(this))return O.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=Kt(this),n=this.project(e,t),a=new g.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}F();G();function gl(e,t){if(!t||!E(this)&&!S(this))return O.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ne(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ne(this,r.subtract(n.subtract(i))))}F();G();L();pi();function ua(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function ci(e,t,r=Jt){t=t.getBounds?t.getBounds():t instanceof g.LatLngBounds?t:new g.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=H(r.paddingTopLeft||r.padding||_e).subtract(i),s=i.subtract(H(r.paddingBottomRight||r.padding||_e)),[f,l,p,c]=li(e,fi);if(p<0){let tx=a.y;a.y=-s.y,s.y=-tx}let u=e.getSize().y*e.options.pitchMaxDistance,d=ua(a.y,Math.abs(p),n,c,u),h=ua(s.y,Math.abs(p),n,c,u),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),x=1/0,v=-1/0,M=a.x*c/n,_=s.x*c/n,B=_-M,b=1/0,A=-1/0,V=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],Z,j,J,ye,$e;for(Z=0;Z<4;Z++)j=V[Z],J=e.project(j,o).subtract(y),ye=f*J.x-l*J.y,$e=l*J.x+f*J.y,x=Math.min(x,$e),v=Math.max(v,$e),b=Math.min(b,ye+M*$e),A=Math.max(A,ye+_*$e);let no=Math.min((h-d)/(v-x),(s.x-a.x-B*d)/(A-b-B*x)),pe=e.getScaleZoom(no,o),at=e.options.zoomSnap;if(at&&(pe=Math.floor(Math.round(pe/(at/100))/100)*at),pe=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,pe)),!Number.isFinite(pe))return{center:t.getCenter(),zoom:pe};let ze=e.getZoomScale(pe,o),Lr=v*ze-h,as=x*ze-d,ex=Math.max(Lr,B?(ze*(A-b)-s.x+a.x)/B:Lr),qn=(Math.min(as,ex)+as)/2,ss=(ze*(b+A)-a.x-s.x-(M+_)*qn)/2;return y.x+=(f*ss+l*qn)/ze,y.y+=(-l*ss+f*qn)/ze,{center:e.unproject(y,o),zoom:pe}}function xl(e,t){return E(this)||S(this)?ci(this,e,t):O.value._getBoundsCenterZoom.call(this,e,t)}L();F();G();function yl(e,t,r){if(!E(this)&&!S(this))return O.value.getBoundsZoom.call(this,e,t,r);if(!t)return ci(this,e,{padding:H(r||_e).divideBy(2)}).zoom;e=e instanceof g.LatLngBounds?e:new g.LatLngBounds(e);let o=Kt(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function vl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(O.value.panBy.call(this,r,t),!0)}L();F();G();function wl(){if(!E(this)&&!S(this))return O.value.getBounds.call(this);let e=Kt(this),t=new g.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=O.value.containerPointToLayerPoint.call(this,He(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}I();Ke();da();function Ml(){this.options.maxBounds&&this._panInsideMaxBounds()}I();gi();I();F();G();function xi(){let e=this,t=w.get(e)._cameraDraggable;if(!E(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ne(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function _l(){Qt(this),w.get(this)._pitchSky?.remove(),w.get(this)._cameraDraggable&&(w.get(this)._cameraDraggable.off("predrag",xi,this),delete w.get(this)._cameraDraggable)}I();function Tl(){let e=this.dragging?._draggable;e&&(w.get(this)._cameraDraggable=e,e.on("predrag",xi,this))}async function Ep(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Cp(),Sp));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function ge(){}function zp(){if(w.set(this,{}),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ee(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ui),this.on("rotate pitch",Ml,this),this.once("unload",_l,this),this.whenReady(Tl,this),(this.options.rotate||this.options.trackContainerMutation)&&(w.get(this).cameraReady=Ep(this),w.get(this).cameraReady.catch(ge))}L();function Ip(e){e instanceof g.DivIcon||(e.options.crossOrigin||=!0);let t=se.value.setIcon.call(this,e);return this._map&&!(e instanceof g.DivIcon)&&mi(this,this._map),t}function Ap(){let e=se.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function ir(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Dp(e){se.value._setPos.call(this,ir(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=Ho(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function Pe(e=this){let t=m.get(e)?._nativeGPU;t?.backend&&!t.disposed&&re(t)}function Op(e){se.value._updateZIndex.call(this,e);let t=m.get(this)._cameraZIndexOffset!==e;m.get(this)._cameraZIndexOffset=e,t&&Pe(this)}var gt=new WeakMap;L();function Gp(e){let t=this._marker._map,r=g.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);g.DomUtil.setPosition(this._marker._icon,o),gt.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();F();G();var Fr=new Map;var nr={value:null};function Rp(){nr.value=null;let e=[...Fr];Fr.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Up(e,t){Fr.set(e,t),nr.value===null&&(nr.value=requestAnimationFrame(Rp)),e._panRequest=nr.value}function Fp(e){let t=this._marker,r=t._map;if(!E(r)&&!S(r))return gt.get(this)._cameraOriginalAdjustPan.call(this,e);let o=g.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=H(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let f=r._getMapPanePos();r.panBy(s,{animate:!1});let l=f.subtract(r._getMapPanePos());this._draggable._newPos._add(l),this._draggable._startPos._add(l),g.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Up(this,e)}function Np(){if(!this.dragging||gt.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;gt.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Gp,e._adjustPan=Fp,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function jp(){let e=se.value._initInteraction.call(this);return Np.call(this),e}function Zp(){let e=mo.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function $p(){let e=fo.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}F();G();function Vp(){let e=this._map;if(!E(e)&&!S(e))return po.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=H(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(H(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,f=t.bottom-r.top,l=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,f-i.y);if(!l&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=l,c.y-=p;let u=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(u)))}L();function Hp(){if(lo.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ir(this._map,e).subtract(e);this._zoomAnimated?g.DomUtil.setPosition(this._container,g.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function qp(e){co.value.call(this,e);let t=ir(this._map,e).subtract(e);g.DomUtil.setPosition(this._container,g.DomUtil.getPosition(this._container).add(t))}L();function Wp(){let e=ho.value.call(this);return e.rotate=e.pitch=g.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();G();F();function Yp(e){if(!S(this._map)&&!E(this._map))return uo.value.call(this,e);let t=this._map.getBounds();return new g.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}O.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Map.prototype));g.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});g.Map.include({layerPointToContainerPoint:fl,containerPointToLayerPoint:ll,_getCenterLayerPoint:pl,panBy:cl,setZoomAround:ul,panInside:dl,_limitCenter:hl,_limitOffset:gl,_getBoundsCenterZoom:xl,getBoundsZoom:yl,_tryAnimatedPan:vl,getBounds:wl});g.Map.addInitHook(zp);se.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Marker.prototype));g.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});g.Marker.include({setIcon:Ip,getEvents:Ap,_setPos:Dp,_updateZIndex:Op,_initInteraction:jp});mo.value=g.Popup.prototype.getEvents;g.Popup.include({getEvents:Zp});fo.value=g.Tooltip.prototype.getEvents;g.Tooltip.include({getEvents:$p});lo.value=g.Popup.prototype._updatePosition;po.value=g.Popup.prototype._adjustPan;g.Popup.include({_adjustPan:Vp,_updatePosition:Hp});co.value=g.Tooltip.prototype._setPosition;g.Tooltip.include({_setPosition:qp});uo.value=g.GridLayer.prototype._getTiledPixelBounds;ho.value=g.GridLayer.prototype.getEvents;g.GridLayer.include({getEvents:Wp,_getTiledPixelBounds:Yp});L();N();var xt=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function Xp(e,t){let r=new Array(xt.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+xt[o].x*t,y:e.y+xt[o].y*t,ground:e.ground,uv:[3,3]};return r}function Kp(e,t,r){let o=he(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,f,l,p,c,u,d,h,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,f=y?t.top+.15:t.top,l=Xp(e,a),p=0;p<6;p++)c=l[p],u=l[(p+1)%6],d=xt[p].nx,h=xt[p].nz,r(c,s,u,s,u,f,d,0,h,o),r(c,s,u,f,c,f,d,0,h,o),r(n,f,c,f,u,f,0,1,0,o),r(n,s,u,s,c,s,0,-1,0,o)}function Jp(e,t,r,o,i,n,a,s,f,l){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,f,l,t),e(r,a,i,a,n,a,s,f,l,t))}function Nr(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function Qp(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=he(t.color),i;for(i=0;i<3;i++)Jp(r,o,Nr(e,-1,-1,i),Nr(e,1,-1,i),Nr(e,1,1,i),Nr(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Zi=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var ar=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function jr(e,t){let r=new Array(ar.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+ar[o].x*t,y:e.y+ar[o].y*t,ground:e.ground};return r}function $i(e,t,r,o,i,n,a){let s=jr(e,r),f=jr(e,i),l,p,c,u,d,h,y,x,v;for(l=0;l<8;l++)p=(l+1)%8,c=(r-i)/(n-o),u=Math.hypot(1,c),{nx:d,nz:h}=ar[l],y=c/u,x=d/u,v=h/u,r&&t(s[l],o,s[p],o,f[p],n,x,y,v,a),i&&t(s[l],o,f[p],n,f[l],n,x,y,v,a)}function kp(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function ec(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:f="round"}=t;kp(n,a,s,i,o,f);let l=he(t.trunkColor??7491898),p=he(t.color??5210683);$i(e,r,n,i,n,s+(o-s)*.25,l);let c,u,d,h,y;if(f==="cone"){let x=jr(e,a);for(c=0;c<8;c++)r(e,s,x[c],s,x[(c+1)%8],s,0,-1,0,p);$i(e,r,a,s,0,o,p)}else for(c=1;c<Zi.length;c++)[u,d]=Zi[c-1],[h,y]=Zi[c],$i(e,r,d*a,s+u*(o-s),y*a,s+h*(o-s),p)}function Vi(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of m.get(e)._areas.values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}var tc=new TextDecoder;function rc(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,f;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),f=t,t=r,r=f);return o}var ja=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var Za=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var $a=["minLon","minLat","maxLon","maxLat"];function Hi(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<ja.length;o++)r[ja[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<Za.length;o++)r[Za[o]]=t.getUint8(96+o);for(o=0;o<$a.length;o++)r[$a[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}async function sr(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(m.get(e).url,{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(m.get(e)._etag&&n!==m.get(e)._etag)throw new Error("PMTiles archive changed; recreate the layer");n&&(m.get(e)._etag=n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function yt(e){return m.has(e)?e.options.archive&&e.options.archive!==e?yt(e.options.archive):m.get(e)._header||=sr(e,0,127).then(Hi):e.getHeader()}var oc={bytes:null,cursor:0};function mr(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function ic(e){let t=oc,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=mr(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,f;for(a=0;a<o;a++){if(n+=mr(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=mr(t);for(s of i)if(s.length=mr(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],f=mr(t),!f&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=f?f-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function fr(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function nc(e,t,r,o){return ic(await fr(await sr(e,t,r),o))}async function ac(e,t,r,o){let i=m.get(e)._directories,n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,nc(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function sc(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function mc(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await fr(await sr(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function fc(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,f=-1,l,p,c,u;for(l=0;l<4;l++){if(i===a||i===s||i===f)throw new Error("Cyclic PMTiles directory");if(l===0?a=i:l===1?s=i:l===2&&(f=i),p=await ac(e,i,n,t.internalCompression),o?.throwIfAborted(),c=sc(p,r),!c)return;if(c.runLength)return u=await mc(e,t,c,r,o),u;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function vt(e,t,r,o,i){if(!m.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return vt(e.options.archive,t,r,o,i);let n=rc(t,r,o);i?.throwIfAborted();let a=await yt(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return fc(e,a,n,i)}async function lc(e,t){if(m.get(e)._geojson){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await vt(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(tc.decode(r.data)):{type:"FeatureCollection",features:[]}}I();L();L();I();function pc(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,f=new g.LatLng(r,t),l=i.project(f),p=w.get(s)._terrain3D?Y(w.get(s)._terrain3D,f):void 0;return{x:(l.x-n.x)*a,y:(l.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(m.get(o).root.position[1])?p-m.get(o).root.position[1]:0}}var lr=[];function qi(e){return e.ground||0}function wt(e,t,r,o,i,n,a,s,f,l,p){let{backend:c,positions:u,normals:d,colors:h,uvs:y}=e,x=o.x-t.x,v=i-r,M=t.y-o.y,_=n.x-t.x,B=a-r,b=t.y-n.y;if((v*b-M*B)*s+(M*_-x*b)*f+(x*B-v*_)*l<0){let A=o,V=i;o=n,i=a,n=A,a=V}u.push(t.x,r+qi(t),-t.y,o.x,i+qi(o),-o.y,n.x,a+qi(n),-n.y),d.push(s,f,l,s,f,l,s,f,l),h.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function cc(...e){wt(lr[lr.length-1],...e)}function Wi(e,t,r,o){lr.push(e);try{t(r,o,cc)}finally{lr.pop()}}function uc(e,t,r,o,i,n){let{backend:a}=e,{top:s}=i,f=pc(e,r,o);if(a.options.nightLight){if(!Number.isFinite(i.lightFlux)||i.lightFlux<=0)throw new Error("Invalid light flux");let l=t.properties?.cod_ouvrag||`${r},${o}`;i.poleRadius>0&&!e.supports.has(l)&&(Wi(e,Kp,f,i),e.supports.add(l)),Wi(e,Qp,f,i),e.lights.push({position:[f.x,f.ground+s,-f.y],radius:Math.hypot(s,i.lightRadius),color:[n.r,n.g,n.b],flux:i.lightFlux})}else Wi(e,ec,f,i)}L();I();function dc(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],f,l,p,c,u,d;for(f=0;f<t.length-1;f++){if(l=t[f][0],p=t[f][1],!Number.isFinite(l)||!Number.isFinite(p))throw new Error("Invalid GeoJSON coordinates");c=new g.LatLng(p,l),u=o.project(c),d=w.get(a)._terrain3D?Y(w.get(a)._terrain3D,c):void 0,s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.get(r).root.position[1])?d-m.get(r).root.position[1]:0})}return s}function Va(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a,s,f,l,p,c,u,d,h,y,x,v;for(a of t)n.push(dc(e,a));let M=[];for(s of n)for(f of s)M.push(f);for([l,p,c]of Wt(n[0],n.slice(1)))wt(e,M[l],r,M[p],r,M[c],r,0,1,0,i),o>0&&wt(e,M[l],o,M[p],o,M[c],o,0,-1,0,i);for(u=0;u<n.length;u++)for(s=n[u],d=Yo(s)===(u===0)?-1:1,h=0;h<s.length;h++)l=s[h],p=s[(h+1)%s.length],y=Math.hypot(p.x-l.x,p.y-l.y),y&&(x=d*(p.y-l.y)/y,v=d*(p.x-l.x)/y,wt(e,l,o,p,o,p,r,x,0,v,i),wt(e,l,o,p,r,l,r,x,0,v,i))}function hc(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function gc(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function xc(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=hc(t,r.options.nightLight),s=t.geometry,f=s.type==="Point",l=a[0],p=a[1];if(n){let _=i.project(new g.LatLng(p,l),n.z);if(Math.floor(_.x/256)!==n.x||Math.floor(_.y/256)!==n.y)return}let c=gc(r,t);if(c===null){e.skipped++;return}let{top:u,bottom:d=0,color:h=14267276}=c,y=he(h),x=e.positions.length/3;f&&uc(e,t,l,p,c,y);let v;if(s.type==="Polygon")Va(e,s.coordinates,u,d,y);else if(s.type==="MultiPolygon")for(v of s.coordinates)Va(e,v,u,d,y);let M=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:x/3,faceEnd:M/3,vertexStart:x,vertexEnd:M})}function yc(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),f=Math.trunc(t[1]),l=Math.trunc(t[2]),p=new Float32Array(a),c,u,d,h;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?f:l);let y=new Float32Array(i.length*4);for(u=0;u<i.length;u++){if(d=i[u],h=u*a,d.vertexStart!==u*n||d.vertexEnd!==(u+1)*n)return e;for(y[u*4]=s+t[h]-t[0],y[u*4+1]=f+t[h+1]-t[1],y[u*4+2]=l+t[h+2]-t[2],y[u*4+3]=u*n,c=0;c<a;c++)if(Math.fround(p[c]+y[u*4+c%3])!==Math.fround(t[h+c])||Math.fround(r[c])!==Math.fround(r[h+c])||Math.fround(o[c])!==Math.fround(o[h+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function vc(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=m.get(t).renderer.device,i=yc(e),n={position:{size:3,data:new Float32Array(i.positions)},normal:{size:3,data:new Float32Array(i.normals)},color:{size:3,data:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let f={device:o,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...K(),device:o,geometry:f,program:le(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:Me.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,R(r.mesh,m.get(t).root),z(t)}N();function wc(e,t,r){let o=r.options.crs,i=o.project(m.get(e).location);return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(m.get(e).location.lat*P),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}async function Mc(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await m.get(w.get(r)._terrain3D)?._terrainPromise,t.request.signal.aborted)return;let i=await lc(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(m.get(e)._geojson&&typeof e.options.style!="function")throw new Error("style must be a function");let n=wc(e,t,r),a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}xc(n,o)}vc(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{m.get(e)._inflight--,Zr(e,r)}}function Yi(e,t){return e.distance-t.distance}function _c(e,t){let r=[],o,i,n;for(o of e)for(i of m.get(o)._areas.values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(Yi),r}function Zr(e,t=e._map){let r=t&&$.get(t);if(!r)return;let o=[],i,n,a;for(i of m.get(r)._layers)Number.isFinite(m.get(i)._inflight)&&m.get(i)._areas&&(m.get(i).url||m.get(i)._geojson)&&o.push(i);let s=_c(o,t),f=0;for(i of o)f+=m.get(i)._inflight;for({layer:a,area:n}of s){if(f>=4)break;m.get(a)._inflight>=2||(n.started=!0,m.get(a)._inflight++,f++,Mc(a,n,t))}for(i of o)Vi(i)}function be(e,t){t?.model&&(t=null),!(m.get(e).highlightedFeature?.mesh===t?.mesh&&m.get(e).highlightedFeature?.vertexStart===t?.vertexStart)&&(m.get(e).highlightedFeature&&(m.get(e).highlightedFeature.mesh.highlight=null),m.get(e).highlightedFeature=t,t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),z(e))}function Be(e,t,r){let o=m.get(e)._tooltip;if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=m.get(e).container.getBoundingClientRect(),s=r.clientX-a.left,f=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${f+o.offsetHeight+16>a.height?f-o.offsetHeight-12:f+12}px`}else o.hidden=!0;let i=m.get(e)._shared,n;if(i){let a=!1;for(n of m.get(i)._layers)if(m.get(n)._tooltip&&!m.get(n)._tooltip.hidden){a=!0;break}a?(m.get(i)._cursor===void 0&&(m.get(i)._cursor=m.get(e).container.style.cursor),m.get(e).container.style.cursor="pointer"):m.get(i)._cursor!==void 0&&(m.get(e).container.style.cursor=m.get(i)._cursor,delete m.get(i)._cursor)}}function Mt(e,t){t.request.abort();let r;if(t.mesh){m.get(e).highlightedFeature?.mesh===t.mesh&&(be(e,null),m.get(e).hoveredFeature=null,Be(e,null)),R(t.mesh,null),z(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Tc(e,t){return e.distance-t.distance}function _t(e){if(!e._map||!m.get(e)._shared)return;if(m.get(e)._geojson){m.get(e)._areas.has("geojson")||m.get(e)._areas.set("geojson",{request:new AbortController}),Zr(e);return}if(!m.get(e).header)return;let t=m.get(e).header.minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([m.get(e).header.maxLat,m.get(e).header.minLon],t).divideBy(256).floor(),s=e._map.project([m.get(e).header.minLat,m.get(e).header.maxLon],t).divideBy(256).floor(),f=new Map,l,p,c,u,d;for(l=Math.max(0,i.x-1,a.x);l<=Math.min(2**t-1,n.x+1,s.x);l++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)f.set(`${l}/${p}`,{z:t,x:l,y:p});for([c,u]of m.get(e)._areas)f.has(c)||(Mt(e,u),m.get(e)._areas.delete(c));let h=[];for([c,d]of f)d.distance=Math.hypot(d.x+.5-r.x,d.y+.5-r.y)/2**t,h.push(d);h.sort(Tc);for(d of h)c=`${d.x}/${d.y}`,m.get(e)._areas.has(c)||m.get(e)._areas.set(c,{coords:d,request:new AbortController});Zr(e)}I();function pr(e){if(!m.get(e).root||!m.get(e).location)return;m.get(e)._terrainBaseY??=m.get(e).root.position[1];let t=w.get(e._map)?._terrain3D,r=t&&Y(t,m.get(e).location),o=Number.isFinite(r)?e.options.terrainOffset??0:0;m.get(e).root.position[1]=m.get(e)._terrainBaseY+(r??0)+o}function Lc(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Pc(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function bc(e,t){let r=m.get(t)._shared,o;if(e.geometry&&e.geometry.device!==m.get(r).renderer.device){let i=e.geometry,n=e.program._layerMaterial,a=m.get(r).renderer.device;Lc(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Pc(n,a),e.program.pipelineCache.clear(),e.program=le(t,n),e.device=a}e.texture&&e.texture.device!==m.get(r).renderer.device&&(o=e.texture,o.device=m.get(r).renderer.device,o.texture=m.get(r).renderer.device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=m.get(r).renderer.device.createSampler(o.samplerOptions),o.uploaded=null)}var cr=new WeakMap;function Bc(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function tt(e,t,r){throw Bc(r),m.get(t)._rendererReady.reject(e),$.delete(r),e}async function Sc(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){tt(o,e,t)}return r||tt(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function Cc(e,t,r){try{return await e.requestDevice()}catch(o){tt(o,t,r)}}function Ec(e){let t=cr.get(e.currentTarget),r=$.get(t);if(m.get(r)?.renderer?.device!==e.currentTarget||!m.get(r)._layers)return;let o;for(o of m.get(r)._layers)o.fire("error",{error:e.error})}function zc([e,t]){let r=cr.get(t),o=$.get(r);if(!o||m.get(o).renderer?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of m.get(o)._layers)n.fire("error",{error:i})}function Ic(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var ur=new Float32Array(20);ur[0]=ur[5]=ur[10]=ur[15]=1;function Ac(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=m.get(e).renderer.device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=m.get(e).renderer.device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=m.get(e).renderer.device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});m.get(e).renderer.sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},m.get(e).renderer.device.queue.writeBuffer(o,0,ur),Oo(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,m.get(e).renderer.roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var Xi=[];function Dc(){let e=Xi.shift();m.get(e)._queued=!1,!(m.get(e)._shared!==e||!m.get(e).renderer)&&(e._map._animatingZoom?z(e):Ye(e))}function $r(){let e=this;m.get(e)._queued||(m.get(e)._queued=!0,Xi.push(e),queueMicrotask(Dc))}function Vr(){m.get(this)._zoomLevel=null}var Ki=[];function Oc(){let e=Ki.shift();m.get(e)._shared===e&&m.get(e).renderer&&Ye(e)}function Hr(e){let t=this._map;e&&!m.get(this)._zoomView&&(m.get(this)._zoomView={from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()},t.getContainer().classList.add("leaflet-camera-zoom")),Ki.push(this),queueMicrotask(Oc)}I();function qr(){let e=this,t;if(m.get(e)._zoomTransitions)for(t of m.get(e)._zoomTransitions.keys())t.finish();m.get(e)._zoomTransitions=null,m.get(e)._zoomView=null,delete w.get(e._map)._cameraView,e._map.getContainer().classList.remove("leaflet-camera-zoom"),yo(e._map),m.get(e)._zoomLevel=null,z(e)}function Gc(e,t,r){m.get(e)._size=null,r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",$r,e),t.on("zoomstart",Vr,e),t.on("zoomanim",Hr,e),t.on("zoomend",qr,e)}async function Rc(e,t){let r=document.createElement("canvas");navigator.gpu||tt(new Error("Layer3D requires WebGPU"),e,t);let o=await Sc(e,t),i=await Cc(o,e,t);cr.set(i,t),i.addEventListener("uncapturederror",Ec),Promise.all([i.lost,Promise.resolve(i)]).then(zc);let n=r.getContext("webgpu");n||(i.destroy(),tt(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),m.get(e)._shared=e,m.get(e)._layers=new Set,m.get(e)._sceneOrigin=m.get(e).location,m.get(e).scene=K(),m.get(e).camera=Ic(),m.get(e).renderer={device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)},Ac(e,i),Gc(e,t,r)}async function dr(e,t){let r=$.get(t);m.get(r)?._rendererReady&&await m.get(r)._rendererReady.promise,r||(r=e,m.get(e)._rendererReady=Promise.withResolvers(),m.get(e)._rendererReady.promise.catch(ge),$.set(t,r),await Rc(e,t),m.get(e)._rendererReady.resolve(),delete m.get(r)._rendererReady,Ye(r),$.set(t,r));let o=t.options.crs.project(m.get(r)._sceneOrigin),i=t.options.crs.project(m.get(e).location),n=Math.cos(m.get(r)._sceneOrigin.lat*P);m.get(e)._terrainBaseY??=m.get(e).root.position[1],m.get(e).root.position[0]=(i.x-o.x)*n,m.get(e).root.position[1]=m.get(e)._terrainBaseY,m.get(e).root.position[2]=-(i.y-o.y)*n,pr(e),m.get(e).root.scale.fill(n/Math.cos(m.get(e).location.lat*P)),m.get(e)._shared=r,m.get(e).renderer=m.get(r).renderer,m.get(e).scene=m.get(r).scene,m.get(e).camera=m.get(r).camera,m.get(r)._layers.add(e),R(m.get(e).root,m.get(r).scene),Ae(m.get(e).root,bc,e),z(r),(m.get(e).header&&m.get(e).kind!=="raster"||m.get(e)._geojson)&&_t(e)}L();function Ji(e,t){if(!m.get(e).root||!m.get(e).camera)return null;let r,o,i,n,a,s,f;for(r of ii(e,t,m.get(e).root.children,!!m.get(e).model)){if(m.get(e).model){for(o=r.object;o&&o!==m.get(e).model;)o=o.parent;if(o===m.get(e).model)return{id:m.get(e).model.id,properties:m.get(e).model.extras,model:m.get(e).model,mesh:r.object,point:r.point}}if(i=r.object.extras?.featureFaces,!!i)for(n=0,a=i.length-1;n<=a;)if(s=n+a>>1,f=i[s],r.faceIndex<f.faceStart)a=s-1;else if(r.faceIndex>=f.faceEnd)n=s+1;else return{...f,mesh:r.object,point:r.point}}return null}function Uc(e,t){let r=Ji(e,t);m.get(e).hoveredFeature=r,be(e,r),Be(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Qi(e){m.get(e).hoveredFeature=null,be(e,null),Be(e,null),e.fire("featurehover",{feature:null})}function Nc(e,t){m.get(e).hoveredFeature=Ji(e,t),be(e,m.get(e).hoveredFeature),Be(e,m.get(e).hoveredFeature,t),e.fire("featurehover",{feature:m.get(e).hoveredFeature,originalEvent:t})}function jc(e){Nc(this,e)}function Zc(e){Uc(this,e)}function $c(){Qi(this)}async function Vc(e,t){try{await dr(e,t),m.get(e)._added.resolve()}catch(r){e.fire("error",{error:r})}}function ki(e,t){if(!m.get(e).location){let r=t.getCenter();m.get(e).location=new g.LatLng(r.lat,r.lng)}(m.get(e).url||m.get(e)._geojson||e.options.tooltip||m.get(e).modelUrl)&&(m.get(e).container=t.getContainer(),m.get(e)._pointerEvents||={mousemove:jc,click:Zc,mouseleave:$c},e.options.tooltip&&(m.get(e)._tooltip=g.DomUtil.create("div","leaflet-3d-tooltip",m.get(e).container),m.get(e)._tooltip.hidden=!0,m.get(e)._tooltip.setAttribute("role","tooltip"),m.get(e)._tooltip.setAttribute("aria-live","polite"),m.get(e)._tooltip.style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),g.DomEvent.on(m.get(e).container,m.get(e)._pointerEvents,e)),m.get(e).root&&Vc(e,t)}L();var Hc=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];I();var qc=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function Wc(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function Yc(e,t){if(m.get(e)._roofRaster&&D(e,m.get(e)._roofRaster.texture.texture),m.get(e)._roofRaster=null,m.get(e)._zoomTransitions){let i;for(i of m.get(e)._zoomTransitions.keys())i.play()}m.get(e)._zoomTransitions=null,m.get(e)._zoomView=null,delete w.get(t)._cameraView,t.getContainer().classList.remove("leaflet-camera-zoom");let r=m.get(e).renderer;r.canvas.remove(),Wc(r,e),$.delete(t);let o;for(o of qc)delete m.get(e)[o]}function hr(e,t){m.get(e)._added=Promise.withResolvers(),m.get(e).container&&(Qi(e),g.DomEvent.off(m.get(e).container,m.get(e)._pointerEvents,e),m.get(e).container=null);let r,o,i;for(r of m.get(e)._areas.values())Mt(e,r);m.get(e)._areas.clear(),m.get(e)._tooltip?.remove(),m.get(e)._tooltip=null,(m.get(e).url||m.get(e)._geojson)&&Vi(e,!1);let n=m.get(e)._shared;if(n){if(R(m.get(e).root,null),m.get(n)._layers.delete(e),n===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",$r,e),t.off("zoomstart",Vr,e),t.off("zoomanim",Hr,e),t.off("zoomend",qr,e),Go(e),m.get(e)._layers.size){let a=m.get(e)._layers.values().next().value;for(o of Hc)m.get(a)[o]=m.get(e)[o],delete m.get(e)[o];for(i of m.get(a)._layers)m.get(i)._shared=a;$.set(t,a),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",$r,a),t.on("zoomstart",Vr,a),t.on("zoomanim",Hr,a),t.on("zoomend",qr,a),z(a)}else Yc(e,t);else z(n);m.get(e)._shared=m.get(e).renderer=m.get(e).scene=m.get(e).camera=null}}function Xc(e){if(!e._map)return;let t;for(t of m.get(e)._areas.values())Mt(e,t);m.get(e)._areas.clear(),_t(e)}I();var Kc=new TextDecoder;function Jc(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Qc(e){let t=new DataView(e),r=Kc,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let f;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(f=s),i+=n}if(!o)throw new Error("Missing GLB JSON");f&&(o.buffers[0].binary=f)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Jc(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}N();L();function en(e,t){let r=new Float32Array(e.length),o,i,n,a,s,f,l,p,c,u,d,h,y,x,v,M;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],f=e[n*3+1]-e[i*3+1],l=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],u=e[a*3+2]-e[i*3+2],h=f*u-l*c,y=l*p-s*u,x=s*c-f*p,d=0;d<3;d++)v=d===0?i:d===1?n:a,r[v*3]+=h,r[v*3+1]+=y,r[v*3+2]+=x;for(o=0;o<r.length;o+=3)for(M=Math.hypot(r[o],r[o+1],r[o+2])||1,d=0;d<3;d++)r[o+d]/=M;return r}function Ha(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Ha(r,t)}function gr(e,t){if(!m.get(e).model)return;let r=[];Ha(m.get(e).model,r);let o,i,n,a,s,f,l,p,c,u,d,h,y,x,v,M,_,B,b,A;if(!m.get(t)?._terrainReady||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),oe(n));return}Q(m.get(e).root);let V=e._map,Z=V.options.crs,j=Z.project(m.get(m.get(e)._shared)._sceneOrigin),J=Math.cos(m.get(m.get(e)._shared)._sceneOrigin.lat*P),ye=Z.scale(m.get(t)._terrainZoom);for(o of r){for(n=o.geometry,f=n.attributes.position,n._terrainBasePositions||=f.data.slice(),l=n.attributes.normal,n._terrainBaseNormals||=l.data.slice(),f.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),u=0;u<f.data.length;u+=3)d=f.data[u],h=f.data[u+1],y=f.data[u+2],x=p[1]*d+p[5]*h+p[9]*y+p[13],v=Math.max(0,Math.min(1,1-(x-m.get(e).root.position[1])/8)),v&&(M=p[0]*d+p[4]*h+p[8]*y+p[12],_=p[2]*d+p[6]*h+p[10]*y+p[14],B=Z.transformation.transform(new g.Point(j.x+M/J,j.y-_/J),ye),b=Y(t,B),Number.isFinite(b)&&(A=(b-x)*v,f.data[u]+=c[4]*A,f.data[u+1]+=c[5]*A,f.data[u+2]+=c[6]*A));o.device.queue.writeBuffer(f.buffer,0,f.data),l.data.set(en(f.data,n.attributes.index?.data)),o.device.queue.writeBuffer(l.buffer,0,l.data),oe(n)}z(e)}I();async function kc(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var eu={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function tu(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,eu)}async function ru(e,t,r){let o=[],i;for(i of t.buffers||ue)o.push(kc(i,r));await Promise.all(o),await m.get(e)._added.promise;let n=[],a;for(a of t.images||ue)n.push(tu(t,r,a));let s=await Promise.all(n);return await m.get(w.get(e._map)?._terrain3D)?._terrainPromise,s}function ou(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function Wr(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=m.get(o).renderer.device,f=`${t.index}:${r}`;if(!a.has(f)){let l=i.textures[t.index],p=i.samplers?.[l.sampler],c=n[l.source],u=r?"rgba8unorm-srgb":"rgba8unorm",d=ou(p);a.set(f,{device:s,texture:s.createTexture({size:[c.width,c.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(d),samplerOptions:d,format:u,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(f)}function iu(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:Wr(e,o?.baseColorTexture,!0),metalTexture:Wr(e,o?.metallicRoughnessTexture),emissiveTexture:Wr(e,t.emissiveTexture,!0),occlusionTexture:Wr(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function nu(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||ue)o.materials.push(iu(o,i));return o}var au=[0,0,0,1];var su=[1,1,1];var mu=[0,0,0];function fu(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||au,[n,a,s]=e.scale||su;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||mu,1]}var lu=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var tn={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var pu={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function cu(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function rn(e,t,r,o,i,n,a,s,f,l){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,u=e.buffers[p.buffer].binary;if(l||=r*c,!u||l<r*c||s<0||(p.byteOffset||0)+p.byteLength>u.byteLength||(f-1)*l+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let d=new DataView(u),h,y,x,v;for(h=0;h<f;h++){if(v=n?n[h]:h,n&&v>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)x=(p.byteOffset||0)+s+h*l+y*c,o[v*r+y]=cu(d,t,x)}}function uu(e,t,r,o,i){let n=t.sparse,a=tn[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],f=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let l=new a(e.buffers[s.buffer].binary.slice(f,f+n.count*a.BYTES_PER_ELEMENT));rn(e,r,o,i,t.count,l,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function du(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function on(e,t){let r=e.accessors[t],o=tn[r.componentType],i=pu[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&rn(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&uu(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:du(r,o,n,i)}function hu(e,t){let r={},o,i;for([o,i]of lu)t.attributes[o]!==void 0&&(r[i]=on(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function gu(e,t,r,o){if(t.indices!==void 0){let i=on(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function xu(e,t,r){let o;r.normal||(o=en(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=le(e.backend,i);e.resources.push(n);let a=m.get(e.backend).renderer.device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,f;for([s,f]of Object.entries(r))f.size||=1,f.count=f.data.length/f.size,f.indexFormat=f.data instanceof Uint32Array?"uint32":"uint16",f.buffer=a.createBuffer({size:Math.max(4,f.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(f.buffer,0,f.data);let l={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(l),{device:a,geometry:l,program:n}}function qa(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...K(),name:n.name};a.matrix=fu(n);let s,f,l,p,c,u,d;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)f=hu(o,s),l=f.attributes,p=f.vertexCount,gu(o,s,l,p),c=xu(e,s,l),u={...K(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:Me.value++,renderOrder:0},u.name=o.meshes[n.mesh].name,u.extras=n.extras||{},R(u,a);for(d of n.children||ue)R(qa(e,d),a);return i.delete(t),a}function yu(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function vu(e,t){let r=[],o;try{for(o of t.nodes)r.push(qa(e,o))}catch(i){throw yu(e),i}return r}function wu(e){let t=m.get(e).model;if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Mu(e){await m.get(e)._added.promise;let t=new URL(m.get(e).modelUrl,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Qc(o),n=new URL(".",t).href,a=await ru(e,i,n),s=nu(e,i,a),f=i.scenes?.[i.scene||0];if(!f)throw new Error("Missing glTF scene");let l=vu(s,f),p={...K(),id:t,extras:i.extras||{}};if(!l.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of l)R(c,p);m.get(e).model=p,wu(e),R(m.get(e).model,m.get(e).root),gr(e,w.get(e._map)?._terrain3D)}function _u(e){let t={};return m.get(e).url&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=_t.bind(null,e)),(m.get(e)._geojson||m.get(e).url)&&(t.terrainchange=Xc.bind(null,e)),t}async function Tu(e){try{return m.get(e).root=K(),m.get(e).raycaster={origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]},(m.get(e).url||m.get(e)._geojson)&&(m.get(e).group=m.get(e).root,m.get(e).url&&(m.get(e).header=await yt(e))),e._map&&(await dr(e,e._map),m.get(e)._added.resolve()),m.get(e).modelUrl&&await Mu(e),m.get(e)._shared&&z(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}L();L();function Lu(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${g.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=g.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function Pu(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===g.Util.stamp(t)||i instanceof g.LayerGroup&&i.hasLayer(t))return Lu(o,t,r),!0;return!1}function nn(e){let t=Pu(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var an=[];function bu(){let e=an.shift();e?.map.hasLayer(e.layer)&&nn(e)}function sn(){an.push(this),queueMicrotask(bu)}function Bu(){this.map.off("layeradd layerremove",sn,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function xr(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",sn,o),e.once("remove",Bu,o),nn(o)}function Su(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${e.modelUrl?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Cu(e,t,r,o){let i=e._countStatus;e.modelUrl&&(t=e.model?1:0);let n=r||(e.modelUrl?!e.model:!e.header&&!e._geojson),a=t.toLocaleString("en-US"),s=o?"Error":`${a}${n?"\u2026":""}`,f=Su(e,a,r,o);i.textContent!==s&&(i.textContent=s),i.title!==f&&(i.title=f),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Wa(e){let t=e.target,r=m.get(t),o=r._countStatus;if(!t._map)return;e.type==="add"&&xr(t,o);let i=0,n=0,a=e.error,s;if(Number.isFinite(e.loaded))i=e.loaded,n=e.pending??0,a||=e.errors?.[0];else for(s of r._areas.values())i+=s.buildings??0,!s.done&&!s.error&&n++,a||=s.error;Cu(r,i,n,a)}function Se(e,t=Yt){m.get(e)._3d=!0,g.Util.setOptions(e,{ariaLabel:"3D scene",...t}),m.get(e).kind="3d";let r=!m.get(e)._geojson&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(m.get(e).modelUrl=r?e.options.url:null,m.get(e).url=e.options.url&&!r&&!m.get(e)._geojson?new URL(e.options.url,document.baseURI).href:null,m.get(e)._directories=new Map,e.options.center&&(m.get(e).location=new g.LatLng(e.options.center[0],e.options.center[1])),m.get(e)._areas=new Map,m.get(e)._inflight=0,m.get(e).url||m.get(e)._geojson||r){let o=g.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",m.get(e)._countStatus=o,e.on("add error",Wa),e.on("ready progress",g.Util.throttle(Wa,250,e))}m.get(e)._added=Promise.withResolvers(),m.get(e).ready=Promise.resolve().then(Tu.bind(null,e)),m.get(e).ready.catch(ge)}L();var Eu=new Map;var zu=new Map;function Iu(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var Yr=[null];N();I();var mn={x:0,y:0};var Xr={size:[null,null],format:"r32float",usage:null};var fn={texture:null};var Ya={bytesPerRow:null};var ln=[null,null];function Au(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Du(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,f,l,p,c;for([a,s]of e)f=a.split("/"),l=Number(f[0]),p=Number(f[1]),c=(p-t.min.y)*256*r*256+(l-t.min.x)*256,Au(n,s,c,r);return n}function Ou(e,t){let r=m.get(e),o=r.renderer.device;if(r._rasterProgram?.device===o)return r._rasterProgram;let i=r._terrainBounds,n=i.max.x-i.min.x+1,a=i.max.y-i.min.y+1,{elevations:s,low:f,high:l}=Du(r._terrainTiles,i);return r._dem&&D(e,r._dem.texture),r._dem={texture:o.createTexture((Xr.size[0]=n*256,Xr.size[1]=a*256,Xr.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Xr)),low:Number.isFinite(f)?f:r._terrainOriginElevation,high:Number.isFinite(l)?l:r._terrainOriginElevation},o.queue.writeTexture((fn.texture=r._dem.texture,fn),s,(Ya.bytesPerRow=n*1024,Ya),(ln[0]=n*256,ln[1]=a*256,ln)),fn.texture=null,r._terrainGrids=new Map,r._rasterProgram=le(e,{baseTexture:t,unlit:!0,terrain:r._dem,alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided}),r._rasterProgram}var pn={size:null,usage:null};function Gu(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,f,l,p,c,u=0,d=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[u*3]=s/e,r[u*3+2]=a/e,o[u*3+1]=1,i[u*2]=s/e,i[u*2+1]=a/e,u++,a<e&&s<e&&(f=a*(e+1)+s,l=f+1,p=f+e+1,c=p+1,n[d++]=f,n[d++]=p,n[d++]=l,n[d++]=l,n[d++]=p,n[d++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Ru(e,t){let r=m.get(e),o=r.renderer.device,i=r._terrainGrids.get(t);if(!i){i=Gu(t);let n,a;for([n,a]of Object.entries(i))a.size||=1,a.count=a.data.length/a.size,a.indexFormat="uint16",a.buffer=o.createBuffer((pn.size=Math.max(4,a.data.byteLength),pn.usage=n==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,pn)),o.queue.writeBuffer(a.buffer,0,a.data);r._terrainGrids.set(t,i)}return i}function Uu(e,t,r,o){let i=m.get(e),n=i._terrainOriginElevation,a=Math.min(i._dem.low,n)-n,s=Math.max(i._dem.high,n)-n;return{device:i.renderer.device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,a,0],max:[1,s,1],center:[.5,(a+s)/2,.5],radius:Math.hypot(r,s-a,o)/2/Math.max(r,1,o)}}}async function Fu(e,t,r,o){if(!await m.get(e)._terrainPromise||!e._map||w.get(e._map)._terrain3D!==e||m.get(t)._terrain3D!==e||o.request.signal.aborted||!m.get(t)._rasterTiles.has(`${r.z}/${r.x}/${r.y}`)||m.get(e)._rasterTiles.has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-m.get(e)._terrainZoom))),a=e._map,s=a.options.crs,f=s.project(m.get(e).location),l=Math.cos(m.get(e).location.lat*P),p=s.scale(r.z),c=2**(m.get(e)._terrainZoom-r.z),u=mn;u.x=r.x*256,u.y=r.y*256;let d=s.transformation.untransform(u,p);u.x=(r.x+1)*256,u.y=(r.y+1)*256;let h=s.transformation.untransform(u,p),y=m.get(e).renderer.device,x=o.texture,v=Ou(e,x),M=Ru(e,n),_=m.get(e)._terrainOriginElevation,B=(h.x-d.x)*l,b=-(h.y-d.y)*l,A=Uu(e,M,B,b),V={position:[(d.x-f.x)*l,0,-(d.y-f.y)*l],rotation:[0,0,0],scale:[B,1,b],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:A,program:v,texture:x,terrain:[r.x*256*c-m.get(e)._terrainBounds.min.x*256,r.y*256*c-m.get(e)._terrainBounds.min.y*256,256*c,_],tile:o,opacity:t.options.opacity??1,id:Me.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,R(V,m.get(e).root),z(e),m.get(e)._rasterTiles.set(o,V)}async function cn(e,t,r){if(m.get(e)._terrain3D&&r.done&&!r.request.signal.aborted&&m.get(e)._rasterTiles.get(`${t.z}/${t.x}/${t.y}`)===r)try{await Fu(m.get(e)._terrain3D,e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}N();var Kr={size:[null,null],format:"rgba8unorm",usage:null};var Nu={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var un={size:null,usage:null};var ju=[0,0,0,1,0,0,0,0,1,1,0,1];var Zu=[0,1,0,0,1,0,0,1,0,0,1,0];var $u=[0,0,1,0,0,1,1,1];var Vu=[0,2,1,1,2,3];function Hu(e){let t={position:{size:3,data:new Float32Array(ju)},normal:{size:3,data:new Float32Array(Zu)},uv:{size:2,data:new Float32Array($u)},index:{data:new Uint16Array(Vu)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((un.size=o.data.byteLength,un.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,un)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function qu(e,t){let r=m.get(e).renderer.device,o={device:r,texture:r.createTexture((Kr.size[0]=t.image.width,Kr.size[1]=t.image.height,Kr.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,Kr)),sampler:r.createSampler(Nu),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=ft,n=Et,a=zt;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,m.get(e)._rasterProgram||(m.get(e)._rasterProgram=le(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),m.get(e)._rasterGeometry||(m.get(e)._rasterGeometry=Hu(r));let{coords:s}=t,f=e._map.options.crs,l=f.project(m.get(e).location),p=Math.cos(m.get(e).location.lat*P),c=f.scale(s.z),u=mn;u.x=s.x*256,u.y=s.y*256;let d=f.transformation.untransform(u,c);u.x=(s.x+1)*256,u.y=(s.y+1)*256;let h=f.transformation.untransform(u,c),y=(h.x-d.x)*p,x=-(h.y-d.y)*p;t.texture=o,t.mesh={position:[(d.x-l.x)*p,0,-(d.y-l.y)*p],rotation:[0,0,0],scale:[y,1,x],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:m.get(e)._rasterGeometry,program:m.get(e)._rasterProgram,texture:o,opacity:e.options.opacity,id:Me.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},R(t.mesh,m.get(e).root)}async function Wu(e,t){try{await m.get(e).ready;let r=await vt(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{Yr[0]=r.data;let o=new Blob(Yr);Yr[0]=null,t.image=await createImageBitmap(o)}}catch{throw Yr[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}qu(e,t),t.loadedAt=performance.now(),t.done=!0,m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,cn(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),z(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{m.get(e)._loadingTiles--,e._map&&(dn(e),Ft(e),m.get(e)._loadingTiles||e.fire("load"),z(e))}}function Yu(e,t){t.started=!0;let r=m.get(e)._loadingTiles===0;return m.get(e)._loadingTiles++,e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Wu(e,t)}function dn(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of m.get(e)._rasterTiles.values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Iu);for({tile:i}of o){if(m.get(e)._loadingTiles>=4)break;Yu(e,i)}}function Xu(e,t){let r=m.get(e)._rasterTiles,o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&Ut(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var rt=[0,0];var ot=[0,0];function Ku(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();rt[0]=t.maxLat,rt[1]=t.minLon,ot[0]=t.minLat,ot[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(rt,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(ot,r).divideBy(256).floor(),f=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,f.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,f.x+6),minY:Math.max(0,i.y,a?.y??0,f.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,f.y+6)}}function gn(e){let t=e._map;if(!t||!m.get(e)._shared||!m.get(e).header)return;let r=Math.max(m.get(e).header.minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));m.get(e)._tileZoom=r;let o=Ku(t,m.get(e).header,r),i=Eu;i.clear();let n,a,s,f,l;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});m.get(e)._wantedRasterTiles=new Set(i.keys());let p=zu;p.clear();let c=Math.max(m.get(e).header.minZoom??0,r-2),u=2**(r-c);if(c<r)for([s,f]of i)m.get(e)._rasterTiles.get(s)?.done||(l={z:c,x:Math.floor(f.x/u),y:Math.floor(f.y/u)},p.set(`${l.z}/${l.x}/${l.y}`,l));let d=new Map(p);for([s,f]of i)d.set(s,f);i.clear(),p.clear(),Xu(e,d),dn(e),Ft(e)}function Ju(e){let t=gn.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Qu(e,t){let r=await yt(t);return e.options.archive=t,m.get(e).header=r,e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function ku(e,t){throw e.fire("error",{error:t}),t}I();function yr(e,t){if(!m.get(e)._rasterTiles||m.get(e)._terrain3D===t)return;let r;for(r of m.get(e)._rasterTiles.values())m.get(e)._terrain3D&&Rt(m.get(e)._terrain3D,r),r.mesh&&(r.mesh.visible=!0,R(r.mesh,m.get(e).root));if(m.get(e)._terrain3D=t||null,t)for(r of m.get(e)._rasterTiles.values())r.done&&cn(e,r.coords,r)}async function ed(e,t,r){try{await r,m.get(e)._added.resolve(),yr(e,w.get(t)._terrain3D)}catch(o){e.fire("error",{error:o})}}async function td(e,t,r){try{await Promise.all([r,m.get(e).ready]),e._map===t&&t.hasLayer(e)&&gn(e)}catch(o){e.fire("error",{error:o})}}function rd(e,t){m.get(e).location||(m.get(e).location=t.getCenter());let r=dr(e,t);ed(e,t,r),td(e,t,r)}function od(e){let t,r;for(t of m.get(e)._rasterTiles.values())Ut(e,t);if(m.get(e)._rasterProgram?.pipelineCache.clear(),m.get(e)._rasterProgram=null,m.get(e)._rasterGeometry){for(r of Object.values(m.get(e)._rasterGeometry.attributes))D(e,r.buffer);m.get(e)._rasterGeometry=null}}function id(e,t){od(e),m.get(e)._terrain3D=null,hr(e,t)}L();function xn(e,t){m.get(e).kind="raster",t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},g.Util.setOptions(e,t),m.get(e).root=K(),m.get(e)._areas=new Map,m.get(e)._rasterTiles=new Map,m.get(e)._loadingTiles=0,m.get(e)._added=Promise.withResolvers(),m.get(e).url=new URL(t.url,document.baseURI).href,m.get(e)._directories=new Map,m.get(e).ready=Promise.resolve(e.options.archive||e).then(Qu.bind(null,e)).catch(ku.bind(null,e))}I();var nd=Object.freeze([]);function ad(e){m.get(e).kind==="raster"&&yr(e,null)}function sd(e,t){m.get(e)._terrainController?.abort(),m.get(e)._terrainLoading=!1,m.get(e)._terrainReady=!1,t.eachLayer(ad);let r,o,i,n;for(r of m.get(e)._rasterTiles.keys())Rt(e,r);w.get(t)._terrain3D===e&&delete w.get(t)._terrain3D;for(o of Object.values(t._layers))gr(o,null),pr(o);t.fire("terrainchange"),m.get(e)._terrainTiles.clear(),m.get(e)._terrainOriginElevation=0,m.get(e)._terrainPromise=null,m.get(e)._rasterProgram&&m.get(e)._rasterProgram.pipelineCache.clear(),m.get(e)._rasterProgram=null,m.get(e)._dem&&D(e,m.get(e)._dem.texture),m.get(e)._dem=null;for(i of m.get(e)._terrainGrids?.values()||nd)for(n of Object.values(i))D(e,n.buffer);m.get(e)._terrainGrids=null,m.get(e)._bridges=null,k(e,m.get(e)._bridgeMesh),m.get(e)._bridgeMesh=null,hr(e,t)}I();async function md(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await vt(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);m.get(t)._terrainTiles.set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function fd(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ld(e,t){let r=m.get(e),o=e._map;r._terrainZoom=t.maxZoom,rt[0]=t.maxLat,rt[1]=t.minLon;let i=o.project(rt,r._terrainZoom).divideBy(256).floor();ot[0]=t.minLat,ot[1]=t.maxLon;let n=o.project(ot,r._terrainZoom).divideBy(256).floor();r._terrainBounds=new g.Bounds(i,n);let a=[],s=o.project(o.getCenter(),r._terrainZoom).divideBy(256),f,l;for(f=i.x;f<=n.x;f++)for(l=i.y;l<=n.y;l++)a.push({z:r._terrainZoom,x:f,y:l,distance:Math.hypot(f+.5-s.x,l+.5-s.y)});return a.sort(Yi),a}N();L();function pd([e,t,r],o,i,n,a){let s=o.project(new g.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function cd(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function ud(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,f,l,p,c,u,d,h,y;for(f of r){l=[];for(p of f)l.push(t[p]);o.push(l)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let x={triangles:o,min:[i,n],max:[a,s]};for(u=Math.floor(x.min[0]/64);u<=Math.floor(x.max[0]/64);u++)for(d=Math.floor(x.min[1]/64);d<=Math.floor(x.max[1]/64);d++)h=`${u}/${d}`,y=m.get(e)._bridges.get(h),y||m.get(e)._bridges.set(h,y=[]),y.push(x)}function dd(e,t,r){let{position:o,normal:i,color:n}=e,a,s,f,l,p,c,u,d,h;for([a,s,f]of r)for(l=t[a],p=t[s],c=t[f],(p[2]-l[2])*(c[0]-l[0])-(p[0]-l[0])*(c[2]-l[2])<0&&(u=s,s=f,f=u),d=0;d<6;d++)u=d===0||d===3?a:d===1||d===5?s:f,h=t[u],o.push(h[0],h[1]-(d>=3?1.2:0),h[2]),i.push(0,d>=3?-1:1,0),n.push(.6,.58,.54)}function hd(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,f=-(r[0]-t[0])/a,l,p;for(l=0;l<6;l++)p=l===0||l===3||l===5?t:r,o.push(p[0],p[1]-(l===2||l>=4?1.2:0),p[2]),i.push(s,0,f),n.push(.6,.58,.54)}function gd(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)hd(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function xd(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:f}=e,l=[],p,c,u,d,h,y,x,v,M,_,B;for(p of t)c=p.slice(0,-1),c.length>=3&&l.push(c);if(!l.length)return;let b=[],A=[];for(p of l)for([u,d,h]of p)y=o.project([d,u],i),b.push([y.x,y.y,h]);for(p of l)for(x of p)A.push(pd(x,n,a,s,f));try{v=cd(l,b),[M,..._]=v,B=Wt(M,_)}catch{return}ud(r,b,B),dd(e,A,B),gd(e,A,l)}function yd(e,t){let r=e._map,o=r.options.crs,i=m.get(e)._terrainZoom,n=o.project(m.get(e).location),a=Math.cos(m.get(e).location.lat*P),s=m.get(e).root.position[1],f=[],l=[],p=[];m.get(e)._bridges=new Map;let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:f,normal:l,color:p},u,d,h;for({geometry:u}of t.features)if(!(u.type!=="Polygon"&&u.type!=="MultiPolygon"))for(d=u.coordinates,h=0;h<(u.type==="Polygon"?1:d.length);h++)xd(c,u.type==="Polygon"?d:d[h]);f.length&&(m.get(e)._bridgeMesh=qe(e,{position:f,normal:l,color:p}))}function vd(e,t,r){let o=m.get(e);o._terrainReady=!0,o._terrainOriginElevation=Y(e,o.location)??0;let i;for(i of Object.values(t._layers))pr(i),gr(i,e);r&&yd(e,r),t.fire("terrainchange"),z(e),e.fire("terrainready")}async function yn(e){if(m.get(e)._terrainLoading||!e._map)return;m.get(e)._terrainLoading=!0,m.get(e)._terrainReady=!1;let t=m.get(e)._terrainController=new AbortController,r;try{if(!m.get(e).terrainSource)throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=m.get(e)._terrainArchive=ei({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(m.get(e).terrainSource)?"cog":"pmtiles",url:m.get(e).terrainSource,archive:e.options.archive,asset:e.options.asset}});await m.get(o).ready;let i=m.get(o).header;if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=ld(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},f=[];for(r=0;r<Math.min(4,a.length);r++)f.push(md(s));await Promise.all(f);let l=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(fd);return t.signal.aborted||e._map!==n?void 0:(vd(e,n,l),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{m.get(e)._terrainLoading=!1}}function wd(){yn(this.backend).then(this.resolve,this.reject)}function Md(e){m.get(e).kind==="raster"&&yr(e,this)}function _d(e,t){if(w.get(t)._terrain3D&&w.get(t)._terrain3D!==e)throw new Error("Only one terrain layer can be active per map");if(w.get(t)._terrain3D=e,ki(e,t),m.get(e).root)m.get(e)._terrainPromise=yn(e);else{let r=Promise.withResolvers();m.get(e)._terrainPromise=r.promise,e.once("ready",wd,{backend:e,...r})}t.eachLayer(Md,e),t.fire("terrainchange")}function Td(e,t){let r=t.url,o={...t};delete o.url,Se(e,o),m.get(e).terrainSource=r,m.get(e)._terrainTiles=new Map,m.get(e)._rasterTiles=new Map,m.get(e)._terrainReady=!1,m.get(e).kind="terrain"}L();I();var Jr=new WeakMap;var Qr=new WeakMap;L();N();I();F();G();function Ld(e,t,r,o,i){let[n,a,s]=e,f=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return f>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/f,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/f,i):null}function Xa(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Ld(t.direction,o,i,n,a);if(!s)return;let{left:f,top:l}=s;e.hidden=f<0||f>o.x||l<0||l>r.clientHeight||r.style.display==="none",e.style.left=`${f}px`,e.style.top=`${l}px`}function Oe({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=w.get(e)._sunlight,a=w.get(e)._pitchSky;n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),f=E(e)*P,l=S(e)*P;Xa(r,n,a,s,f,l,i),Xa(o,n?.moon,a,s,f,l,i)}I();var Pd=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var Ka=[0,0,0];function vn(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function Ja(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function bd(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Pd,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${Ja(vn(n[1],i[1],a,Ka))}, ${Ja(vn(n[2],i[2],a,Ka))})`,tint:vn(n[3],i[3],a)}}function wn(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}N();function Mn(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*P-o,a=t*P,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),l=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/P+180+360)%360;return{altitude:s/P,azimuth:l,direction:[Math.sin(l*P)*Math.cos(s),Math.sin(s),-Math.cos(l*P)*Math.cos(s)]}}N();N();var kr=Math.sin(23.4397*P);N();var eo=Math.cos(23.4397*P);function Bd(e,t,r){let o=wn(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*P,n=(218.316+13.176396*o+6.289*Math.sin(i))*P,a=5.128*Math.sin((93.272+13.22935*o)*P)*P,s=Math.cos(a)*Math.cos(n),f=Math.cos(a)*Math.sin(n)*eo-Math.sin(a)*kr,l=Math.cos(a)*Math.sin(n)*kr+Math.sin(a)*eo;return Mn(o,t,r,Math.atan2(f,s),Math.asin(l))}N();function Sd(e,t,r){let i=wn(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*P,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*P,s=Math.asin(Math.sin(a)*kr),f=Math.atan2(Math.sin(a)*eo,Math.cos(a));return Mn(i,t,r,f,s)}function Tt(e){let t=$.get(e);t&&z(t)}function it(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let f=r.getCenter(),l=w.get(r)._sunlight=Sd(t.time,f.lat,f.lng);Object.assign(l,bd(l.altitude)),l.moon=Bd(t.time,f.lat,f.lng),a.textContent=l.altitude<=0?"Night \xB7 no direct sunlight":l.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${l.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Oe(e),Tt(r)}catch(s){delete w.get(r)._sunlight,Oe(e),Tt(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Cd(e){e.control.live=!0,it(e)}I();function Ed(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),delete w.get(r)._sunlight,Oe(e),Tt(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),it(e)}function zd(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=g.DomUtil.create("div","sunlight-sun"),o=g.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=g.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let f=document.createElement("button");f.type="button",f.textContent="Now";let l=document.createElement("div");l.className="sunlight-time",l.style.cssText="display:flex;justify-content:space-between;align-items:center;",l.append(s,f);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,l,p,c);let u={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return u.update=it.bind(null,u),u.updateSky=Oe.bind(null,u),f.onclick=Cd.bind(null,u),n.onchange=a.oninput=Ed.bind(null,u),g.DomEvent.disableClickPropagation(i),g.DomEvent.disableScrollPropagation(i),u}function Id(e){e.control.live&&it(e)}function Ad(e,t){let r=Qr.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=zd(t),Qr.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),w.get(t)._timeControl=e,Jr.set(e,r),r.update(),r.timer=setInterval(Id,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();function Dd(e){return m.get(this).control.addTo(e)}L();function Od(){return g.Control.prototype.remove.call(m.get(this).control)}function Gd(e){g.Util.setOptions(this,e),this.live=!0,this.layer=new g.Layer,m.get(this.layer).control=this,m.get(this.layer).kind="time"}function Rd(e){return Ad(this,e)}L();function Qa(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function Ud(e){g.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?xr(this.layer,t,Qa.bind(null,t)):Qa(t,!1),this}L();function Fd(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):g.Control.prototype.remove.call(this)}I();function Nd(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Qr.get(t);clearInterval(r),delete w.get(t)._timeControl,t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),delete w.get(t)._sunlight,Oe(e),o.remove(),i.remove(),Tt(t),n===e&&(n.control=null)}function jd(){let e=Jr.get(this);e&&(Nd(e),Jr.delete(this))}g.Control.Time=g.Control.extend({options:{position:"bottomright"},initialize:Gd,onAdd:Rd,onRemove:jd,addTo:Ud,remove:Fd});L();var _n=Object.freeze({});var Ge=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var Re=[.08,.07,.06];var xe=[.85,.64,.5];var Ue=[.16,.2,.32];function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function Zd(e){let t=Ge[e%Ge.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Re],[C(-.045,.045,.25,.85),.02,.62,Re],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Re],[C(-.1,.1,.15,.4),.85,.92,Re],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,xe],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,xe],[C(.15,.25,-.5,-.05),1,1.25,xe],[C(-.2,-.08,0,.32),.3,1,Ue],[C(.08,.2,-.25,.07),.3,1,Ue]]}var ka=[.75,.2,.15];var Tn={body:[[C(-.17,.17,-.1,.1),.82,.95,Ue],[C(-.19,.19,-.11,.11),.95,1.44,ka],[C(-.05,.05,-.05,.05),1.44,1.5,xe],[C(-.1,.1,-.11,.1),1.5,1.72,xe],[C(-.105,.105,-.06,.115),1.58,1.77,Re],[C(-.105,.105,-.115,-.06),1.7,1.77,Re]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ue],[C(-.07,.07,-.17,.07),-.9,-.82,Re]],arm:[[C(-.05,.05,-.05,.05),-.55,0,ka],[C(-.045,.045,-.045,.045),-.66,-.55,xe]]};function $d(e){let t=Tn.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Ge[e%Ge.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ue],[C(.02,.16,-.07,.07),.08,.9,Ue],[C(-.3,-.2,-.05,.05),.76,1.42,xe],[C(.2,.3,-.05,.05),.76,1.42,xe]),t}function vr(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Lt=[.12,.15,.18];var Ce=[.92,.93,.92];var wr=[.05,.05,.05];var Ln=[1.9,1.85,1.7];var Pn=[1.7,.06,.05];function Mr(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,Lt],[C(-1.25,1.25,o,i),2.65,3.1,Ce],[C(-1.15,-.85,o+1,o+2),0,.7,wr],[C(.85,1.15,i-2,i-1),0,.7,wr],[C(-.9,.9,o-.03,o),.8,1.05,Ln],[C(-.9,.9,i,i+.03),.8,1.05,Pn]]}function Vd(e,t){return Mr(0,12,vr(t))}function Hd(e,t){let r=vr(t),o=[],i;for(i=0;i<5;i++)o.push(...Mr((i-2)*6.5,6,r));return o}function qd(e,t){let r=vr(t),o=[],i;for(i=0;i<5;i++)o.push(...Mr((i-2)*15,14,r));return o}function Fe(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function Wd(e){let t=Ge[e%Ge.length];return[...Fe(.7,.92,-1.68,-1.02,0,.64,wr),...Fe(.7,.92,1.02,1.68,0,.64,wr),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,Lt,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...Fe(.38,.8,-2.3,-2.16,.56,.76,Ln),[C(-.78,.78,2.16,2.3),.6,.76,Pn]]}var es=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function Yd(){let e=[],t;for(t=0;t<12;t++)e.push(...Fe(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Xd(){return[[es,0,.8,[.1,.16,.26]],[es,.8,1.4,Ce],[C(-5,5,-18,26),1.4,3.7,Lt,C(-4.6,4.6,-17.4,25.6)],...Fe(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Ce],...Yd(),...Fe(4.65,4.8,-13.6,25.8,3.9,4.8,Ce),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Ce],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Ce],[C(-2.2,2.2,-17.6,-14),4.7,5.5,Lt],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Ce],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Ce],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var Kd={bicycle:{side:.4,model:Zd},pedestrian:{side:.3,model:$d},bus:{side:1.5,model:Vd},tram:{side:0,model:Hd},metro:{side:0,model:qd},car:{side:1.8,model:Wd,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Xd,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Jd=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function to(e,t,r,o,i,n,a){let s=i[0]-o[0],f=i[1]-o[1],l=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],u=n[2]-o[2],d=f*u-l*c,h=l*p-s*u,y=s*c-f*p,x=Math.hypot(d,h,y),v,M;for(v=0;v<3;v++)M=v===0?o:v===1?i:n,e.push(...M),t.push(d/x,h/x,y/x),r.push(...a)}function _r(e){let t=[],r=[],o=[],i=[],n=[],a,s,f,l,p,c,u,d,h;for([a,s,f,l,p=a]of e){i.length=n.length=0;for([c,u]of a)i.push([c,s,u]);for([c,u]of p)n.push([c,f,u]);for(d=0;d<a.length;d++)h=(d+1)%a.length,to(t,r,o,i[d],i[h],n[h],l),to(t,r,o,i[d],n[h],n[d],l);for(d=1;d<a.length-1;d++)to(t,r,o,n[0],n[d],n[d+1],l),to(t,r,o,i[0],i[d+1],i[d],l)}return{position:t,normal:r,color:o}}function Qd({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
3
|
+
`:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
|
|
4
|
+
`:""}${e.description}`),t.textContent=r,t}function bn(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),xr(e.layer,e.status),e.update()}function kd(e){Xe.set(e.layer,e),e.ready&&bn(e)}function Ne(e,t){t&&(m.get(e.layer).highlightedFeature?.mesh===t&&(be(e.layer,null),m.get(e.layer).hoveredFeature=null,Be(e.layer,null)),k(e.layer,t))}function Bn(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function eh(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),Ne(e,e.mesh),Ne(e,e.route),e.mesh=e.route=null,Xe.delete(e.layer),Bn(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function th(e){e.ready=!0,e.layer._map&&bn(e)}I();function Sn(e){let t=w.get(e.layer._map)?._timeControl,r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function rh(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var Tr=new Map;function rs(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function oh(e,t){return e-t}function ih(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=Tr.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),Tr.size>=32&&Tr.delete(Tr.keys().next().value),Tr.set(t,n));let a={},s,f,l,p,c,u,d;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,x=[];for({from:f,to:l,every:p=1/0,months:c,weekdays:u}of o)if(!(c?.includes(a.month)===!1||u?.includes(y)===!1))for(d=rs(f);d<=rs(l);d+=p)x.push(d);x.sort(oh);let v=[];for(d of x)h>=d&&h<d+r&&v.push({id:`${a.year}-${a.month}-${a.day}-${d}`,departure:`${String(Math.floor(d/60)).padStart(2,"0")}:${String(d%60).padStart(2,"0")}`,progress:(h-d)/r});return v}function nh(e,t,r){let o=[],i,n,a,s,f,l,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(f of ih(e,a))o.push({id:`${i}-${f.id}`,lane:n,distance:f.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:f.departure}});else for(l=e/1e3*r,p=n.offsets||=rh(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+l)%n.length,speed:r,properties:n.properties});return o}function Cn(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var ah=Object.freeze({unlit:!0});function sh(e,t,r,o,i,n,a,s,f,l,p,c,u,d){let h=o[0]+n*l,y=o[1]+a*l,x=o[2]+(i[2]-o[2])*l+.4,v=o[0]+n*p,M=o[1]+a*p,_=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(h-s,x,y-f):B===1?e.push(h+s,x,y+f):B===5?e.push(v-s,_,M-f):e.push(v+s,_,M+f),t.push(0,1,0),r.push(c,u,d)}function mh(e,t,r,o,i,n,a,s,f){let l=o[n-1],p=o[n],c=p[0]-l[0],u=p[1]-l[1],d=i[n]-i[n-1];if(!d)return;let h=-u/d*2.5,y=c/d*2.5,x,v,M;for(x=Math.floor(i[n-1]/30)*30;x<i[n];x+=30)v=Math.max(0,(x-i[n-1])/d),M=Math.min(1,(x+18-i[n-1])/d),!(M<=v)&&sh(e,t,r,l,p,c,u,h,y,v,M,a,s,f)}function fh(e){let t=[],r=[],o=[],i,n,a,s,f,l,p,c,u;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,f=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,l=f===null?.08:(f>>16&255)/255,p=f===null?.7:(f>>8&255)/255,c=f===null?.85:(f&255)/255,u=1;u<i.length;u++)mh(t,r,o,i,n,u,l,p,c);return{position:t,normal:r,color:o}}function En(e,t,r,o,i=0){let n=qe(e.layer,t,o,i);return n.extras.featureFaces=r,n}function lh(e){e.route=En(e,fh(e.lanes),[],ah)}function zn(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let f=[];for(i of e.lanes)for([n,a,s]of i.points)f.push(n-t,s,a-t,n+t,s+r,a+t);let l={attributes:{position:{data:f}}};oe(l),e.mesh.geometry.bounds=l.bounds}function ph(e){let{trips:t,model:r,vertices:o}=e;if(Ne(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,f;for(a=0;a<t.length;a++){s=t[a];for(f of _r(r(a,s.properties)).color)i.push(f);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let l=i.length/3;e.mesh=En(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,_n,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=l,e.mesh.extras.dynamicLights=!0,zn(e)}function ro(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function ch(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=ro(t,a),e.lanesDirty=!1}function uh(e){let{device:t}=m.get(e.layer).renderer;if(e.gpu?.device!==t){Bn(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:ro(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&ch(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=ro(t,n));let{position:s,normal:f}=e.mesh.geometry.attributes,l=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:f.buffer,l.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:l})}function dh(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function hh(e,t,r,o){let i;try{o?e.trips=nh(t,e.lanes,e.velocity):e.trips.length=0,i=dh(e,o)}catch(l){Cn(e,l);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,f=n!==e.tripsKey||!!s;return s&&lh(e),n!==e.tripsKey&&(ph(e),e.tripsKey=n),e.mesh&&uh(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),f}function gh(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function xh(e){e.litAt=performance.now();let t=[],r,o,i,n,a,s,f,l,p,c;for(r of e.trips){({x:o,y:i,z:n,dx:a,dz:s}=oi(e,r));for({position:[f,l,p],...c}of e.lights)t.push({...c,position:[o-f*s-p*a,i+l,n+f*a-p*s]})}e.mesh.extras.lights=t}function yh(e,t,r){e.mesh&&(gh(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&xh(e))}function vh(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!m.get(e.layer).renderer){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Sn(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=hh(e,r,o,i),n===void 0)||(yh(e,o,t),(e.mesh||n)&&z(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function wh(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Mh=Object.freeze([]);function _h({features:e=Mh}){let t=[],r,o,i,n,a,s,f,l;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,l=0;l<(i?i.length:1);l++){n=i?i[l]:r.coordinates,a=[];for([s,f]of n)a.push([f,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}N();L();I();function In(e){let{layer:t,lanes:r}=e,o=m.get(w.get(t._map)._terrain3D)?._terrainReady&&w.get(t._map)._terrain3D,i=m.get(t).root.position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??Y(o,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Th(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(m.get(t).location),n=Math.cos(m.get(t).location.lat*P),a,s,f,l,p;for(a of r){a.points=[];for([s,f]of a.latlngs)l=o.project(new g.LatLng(s,f)),a.points.push([(l.x-i.x)*n,-(l.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}In(e),Ne(e,e.route),e.route=null,e.tripsKey=null}function Lh(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=_h(r),Th(e),e.frame||e.tick()}}function Ph(e,t,r){!t.aborted&&r.name!=="AbortError"&&Cn(e,r)}function bh(e){let{time:t}=Sn(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;wh(e,t,r).then(Lh.bind(null,e,r),Ph.bind(null,e,r))}function Bh(e,t){t?.layer&&!m.get(t.layer).control?.time||(cancelAnimationFrame(e.frame),bh(e),e.tick())}function Sh(e){e.lanes.length&&(In(e),Ne(e,e.route),e.route=null,e.mesh&&zn(e),e.frame||e.tick())}function Ch(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=_n){let{model:s,lights:f,side:l}=Kd[r];o??=l,Se(e,{tooltip:Qd,nightLight:!!f,...a});let p=g.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=_r(s(0)),u=c.position.length,d=u/3,h=new ArrayBuffer(16),y=new Float32Array(h),x=new Uint32Array(h),v={layer:e,url:t,model:s,lights:f,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:u,vertices:d,params:h,paramFloats:y,paramInts:x,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};v.shader=Jd,v.tick=vh.bind(null,v),v.update=Bh.bind(null,v),v.terrain=Sh.bind(null,v),Xe.set(e,v),e.on("ready",th.bind(null,v)),e.on("add",kd.bind(null,v)),e.on("remove",eh.bind(null,v))}L();L();L();function Eh(){this.keys.clear()}var oo={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();Pi();Ke();F();G();function zh(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ee(t,Math.max(20,Math.min(85,E(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var io=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];N();I();function nt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=i.project(m.get(t).location),a=Math.cos(m.get(t).location.lat*P),s=i.project(r.latlng),f=m.get(w.get(o)._terrain3D)?._terrainReady&&w.get(o)._terrain3D,l=f&&Y(f,r.latlng)||0;return e[0]=(s.x-n.x)*a,e[1]=l+(r.height??0)-m.get(t).root.position[1],e[2]=-(s.y-n.y)*a,e}function An(){let[e,t,r]=nt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,f,l,p;for(a=0;a<io.length;a++)[,s,f,l]=io[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+f,p.position[2]=r-s*n,p.rotation[0]=l*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;z(this.layer)}function Ih(){this.meshes&&An.call(this)}function Dn(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,g.DomEvent.off(document,"keydown keyup",this.onKey),g.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)k(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){g.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),ut(e,this.saved.pitch),this.saved=null}}function Ah(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!oo[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}N();L();var Dh=["dragging","keyboard","doubleClickZoom","boxZoom"];F();G();Pi();function On(e){return Math.atan2(Math.sin(e),Math.cos(e))}function Gn(e,t){return e===t||m.get(e)._type==="terrain"||m.get(e)._type==="traffic"}function Oh(e){let t=m.get(this.layer),r=t.raycaster,o=nt.call(this,this.local),i=t.root,n=i.position[0]+o[0]*i.scale[0],a=i.position[1]+o[1]*i.scale[1],s=i.position[2]+o[2]*i.scale[2];if(a>e||this.verticalSpeed>0)return;Q(t.scene),r.origin[0]=n,r.origin[1]=e+.01,r.origin[2]=s,r.direction[0]=0,r.direction[1]=-1,r.direction[2]=0,r.meshes.length=0;let f,l;for(f of m.get(t._shared)._layers)Gn(f,this.layer)||m.get(f).kind==="raster"||f.options.nightLight||Ae(m.get(f).root,ri,r.meshes);for(l of ti(r,r.meshes)){if(l.point[1]<a-.001)break;this.state.height+=(l.point[1]-a)/i.scale[1],this.verticalSpeed=0;break}r.meshes.length=0}L();N();var os=new WeakMap;function Gh(e,t,r,o,i){let n,a,s,f,l;for(n=0;n<3;n++)a=(r?r.data[o+n]:o+n)*3,s=t[a],f=t[a+1],l=t[a+2],e[n*3]=i[0]*s+i[4]*f+i[8]*l+i[12],e[n*3+1]=i[1]*s+i[5]*f+i[9]*l+i[13],e[n*3+2]=i[2]*s+i[6]*f+i[10]*l+i[14]}function Rh(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function Uh(e){let t=os.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a}=e.geometry.attributes,s=i?i.count:o.length/3,f=[],l=[],p=new Map,c=[],u,d,h,y,x,v,M,_,B,b,A,V,Z,j,J,ye;for(u=0;u<s;u+=3)d=i?i.data[u]:u,!(e.program.nightLight&&a&&a.data[d*2]<=2)&&(Gh(c,o,i,u,r),y=c[3]-c[0],x=c[4]-c[1],v=c[5]-c[2],M=c[6]-c[0],_=c[7]-c[1],B=c[8]-c[2],b=x*B-v*_,A=y*_-x*M,V=v*M-y*B,Z=Math.hypot(b,V,A),!(!Z||Math.abs(V)>.9*Z)&&(n&&(h=d*3,j=n.data,(r[0]*j[h]+r[4]*j[h+1]+r[8]*j[h+2])*b+(r[2]*j[h]+r[6]*j[h+1]+r[10]*j[h+2])*A<0&&(b=-b,A=-A)),J=Math.hypot(b,A),ye=l.length/2,f.push(...c),l.push(b/J,A/J),Rh(p,c,ye)));return t={tri:Float32Array.from(f),nrm:Float32Array.from(l),cells:p,origin:[r[12],r[13],r[14]]},os.set(e.geometry,t),t}function Fh(e,t,r,o,i,n,a){let s=t*9,f=e[s+3]-e[s],l=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],u=e[s+7]-e[s+1],d=e[s+8]-e[s+2],h=-a*u,y=a*c-n*d,x=n*u,v=f*h+l*y+p*x;if(Math.abs(v)<1e-9)return-1;let M=r-e[s],_=o-e[s+1],B=i-e[s+2],b=(M*h+_*y+B*x)/v;if(b<0||b>1)return-1;let A=_*p-B*l,V=B*f-M*p,Z=M*l-_*f,j=(n*A+a*Z)/v;return j<0||b+j>1?-1:(c*A+u*V+d*Z)/v}function Nh(e,t,r,o,i,n){let{dx:a,dz:s,seen:f}=r,l,p,c;for(l of e)if(!(f.has(l)||a*t.nrm[l*2]+s*t.nrm[l*2+1]>=0))for(f.add(l),p=.4;p<2;p+=1.1)c=Fh(t.tri,l,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[l*2],r.normal[1]=t.nrm[l*2+1])}function jh(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||oe(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:f,dz:l,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=Uh(e),u=n-r[12]+c.origin[0],d=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let x,v,M;for(x=Math.floor(Math.min(u,u+f*p)/8);x<=Math.floor(Math.max(u,u+f*p)/8);x++)for(v=Math.floor(Math.min(h,h+l*p)/8);v<=Math.floor(Math.max(h,h+l*p)/8);v++)M=c.cells.get(x+","+v),M&&Nh(M,c,t,u,d,h)}function Zh(e,t,r,o,i,n,a,s){Q(m.get(e).scene),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let f;for(f of m.get(m.get(e)._shared)._layers)Gn(f,e)||Ae(m.get(f).root,jh,s);return s.found?s.normal:null}function is(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Zh(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function $h(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=m.get(this.layer).root,s=Math.sin(this.state.heading)*r,f=Math.cos(this.state.heading)*r,l=nt.call(this,this.local),p;for(p=0;p<l.length;p++)l[p]=n[p]+a[p]*l[p];let c=is.call(this,s,f,l);if(c){let u=s*c[0]-f*c[1];s-=u*c[0],f+=u*c[1],is.call(this,s,f,l)&&(s=f=0)}this.state.latlng=new g.LatLng(o+f/111320,i+s/(111320*Math.cos(o*P))),this.state.phase+=Math.hypot(s,f)/1.6*Math.PI}function Vh(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}bt();N();G();Ke();F();function Hh(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*P,a=On(-this.state.heading-n);Math.abs(a)>.001&&ee(o,E(o),(n+a*Math.min(1,r*4))*me),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function qh(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!m.get(t).renderer)return;let o=!1,i,n;if(!this.meshes){this.meshes=[];for([i]of io)this.meshes.push(qe(t,_r(Tn[i])));o=!0}let a=m.get(t).root.position[1]+nt.call(this,this.local)[1]*m.get(t).root.scale[1];Vh.call(this,r)&&(o=!0);let s=0,f=0;for(n of this.keys)s+=oo[n]?.[0]||0,f+=oo[n]?.[1]||0;s=Math.sign(s),f=Math.sign(f),f&&(this.state.heading=On(this.state.heading+f*2.5*r),o=!0),s&&($h.call(this,s,r),o=!0),o&&Oh.call(this,a),Hh.call(this,s,f,r)&&(o=!0),o&&An.call(this)}function Rn(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Ve*Math.cos(this.state.latlng.lat*P)/256)),o;this.saved={zoom:e.getZoom(),pitch:E(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Dh)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*P,e.setView(this.state.latlng,r,{animate:!1}),ut(e,75),g.DomEvent.on(document,"keydown keyup",this.onKey),g.DomEvent.on(window,"blur",this.onBlur),g.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.frame=requestAnimationFrame(this.step)}function Wh(){this.saved?Dn.call(this):Rn.call(this)}function Yh(e,{speed:t,distance:r,...o}){let i=new g.Layer;m.get(i)._type="walk",Se(i,o);let n=new Set,a=g.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=g.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let f=g.DomUtil.create("small","",a);f.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",f.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",g.DomEvent.disableClickPropagation(a);let l={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:f,meshes:null,frame:null,last:void 0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker=m.get(i).walker={latlng:null,heading:0,phase:0,height:0}};l.step=qh.bind(l),l.onKey=Ah.bind(l),l.onBlur=Eh.bind(l),l.onPointer=zh.bind(l),l.onTerrain=Ih.bind(l),l.start=Rn.bind(l),l.stop=Dn.bind(l),l.toggle=Wh.bind(l),e._walk=l,g.DomEvent.on(s,"click",l.toggle)}function Xh(e){g.Util.setOptions(this,e),Yh(this,this.options)}function Kh(e){let t=mt.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,normal:[0,0]},local:[0,0,0]},mt.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function Jh(e){let t=mt.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}g.Control.Walk=g.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Xh,onAdd:Kh,onRemove:Jh});L();var Un=new WeakMap;var Fn=new WeakMap;var Nn=new WeakMap;function Qh(){return{}}function kh(e){return this._project(),this._parts=this._rings,Un.get(this).call(this,e)}function eg(){return this._project(),Fn.get(this).call(this)}function tg(){Nn.get(this).call(this),this._container.remove()}var Ze=new Map;var Ee={value:null};function rg(e){Ze.delete(e),m.get(e)._fadeFrame=null,!Ze.size&&Ee.value!==null&&(cancelAnimationFrame(Ee.value),Ee.value=null)}function og(){Ee.value=null;let e=[...Ze],t,r;for([t,r]of e)Ze.get(t)===r&&(Ze.delete(t),m.get(t)._fadeFrame=null,jn.call(t))}function ig(e){m.get(e)._fadeVersion=(m.get(e)._fadeVersion||0)+1,Ze.set(e,m.get(e)._fadeVersion),Ee.value===null&&(Ee.value=requestAnimationFrame(og)),m.get(e)._fadeFrame=Ee.value}function jn(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),Pe(this),rg(e),r&&ig(e)}var Zn=[];function ng(){Zn.shift()?.fire("load")}function ag(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Zn.push(this),queueMicrotask(ng))}function sg(){return Pe(this),this}function mg(){this instanceof g.Polyline||this instanceof g.CircleMarker?(this.beforeAdd=this._updateBounds=ge,this.redraw=sg,m.get(this).kind="path",this instanceof g.Polyline&&(Un.set(this,this.closestLayerPoint),this.closestLayerPoint=kh),this instanceof g.Circle&&(Fn.set(this,this.getBounds),this.getBounds=eg)):this instanceof g.GridLayer?(Nn.set(this,this._initContainer),this._initContainer=tg,this._updateOpacity=jn):this instanceof g.ImageOverlay&&!(this instanceof g.VideoOverlay)&&!(this instanceof g.SVGOverlay)&&(m.get(this).kind="image",this._reset=Pe)}L();function fg(){let e=m.get(this);e.eventMap.off(e.events,this),e.events=e.eventMap=null}function lg(e,t){switch(m.get(e).kind){case"3d":return ki(e,t);case"raster":return rd(e,t);case"terrain":return _d(e,t);case"image":return ag.call(e,t);case"time":return Dd.call(e,t)}}L();function pg(e){return!m.get(e)._3d&&(e instanceof g.GridLayer||e instanceof g.Polyline||e instanceof g.CircleMarker||e instanceof g.Marker&&!(e.options.icon instanceof g.DivIcon)||e instanceof g.ImageOverlay&&!(e instanceof g.VideoOverlay)&&!(e instanceof g.SVGOverlay))}function cg(e){let t=pg(this);t&&((this instanceof g.GridLayer||this instanceof g.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof g.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target,o=m.get(this);r.hasLayer(this)&&(o.kind?(this._map=r,this._zoomAnimated=r._zoomAnimated,o.kind!=="pending"&&o.kind!=="time"&&(o.events=o.kind==="raster"?Ju(this):o._3d?_u(this):Qh(),o.eventMap=r,r.on(o.events,this),this.once("remove",fg,this)),lg(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):st.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&mi(this,e.target))}L();var $n=[];var Vn={value:Promise.resolve()};function ug(e,t){m.get(e)._geojson=!0,Se(e,t)}function dg(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function hg(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function gg(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function xg(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)hg(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(gg(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function yg(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,f;for(f of o)a.set(f,s),s+=f.length;return a}async function ae(e,t,r,o){if(o?.throwIfAborted(),dg(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);xg(e,n,i,r);let a=await yg(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var vg=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function wg(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let f=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await ae(e,t.getUint32(r*12+8,i),a*s)),l=[],p;for(p=0;p<s;p++)l.push(n===3?f.getUint16(p*a,i):n===4?f.getUint32(p*a,i):f.getFloat64(p*a,i));return l}async function Mg(e,t){let r=e.little,o=new DataView(await ae(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await ae(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(vg.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await wg(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function _g(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Tg(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function Lg(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,f=!0,l;for(l of i||[])a&&=l===8;for(l of n)s&&=l===1,f&&=l===3;let p=o===1&&i?.length===1&&i[0]===32&&f;if(!_g(e,t,r)||!Tg(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Pg(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function ns(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function bg(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&ns(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&ns(r)&&r[0]===0&&r[1]===0}function Bg(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!bg(i,n,a)||!Pg(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Sg(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Cg(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function Eg(e,t,r){let o=t.tags,i=Lg(o);r.base||(r.base=Bg(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),f=20037508342789244e-9*2/2**s,l=(n.left+20037508342789244e-9)/f,p=(20037508342789244e-9-n.top)/f;if(Math.abs(l-Math.round(l))<1e-6&&(l=Math.round(l)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Sg(e,n,i,s,l,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:l,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Cg(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function zg(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await Mg(e,t),Eg(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Ig(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function Hn(e,t,r,o,i){let n=o*t.columns+r;return Ig(await ae(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function Ag(e,t,r,o,i){let n=await Hn(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),f,l;for(f=0;f<s.length;f++){if(l=a.getFloat32(f*4,e.little),!Number.isFinite(l)||l<-12e3||l>1e4)throw new Error("Invalid or missing COG elevation sample");s[f]=l}return{data:s.buffer}}async function Dg(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,f=(o-t.y)*256,l,p,c,u,d,h,y;for(p=Math.max(0,Math.floor(f/256));p<Math.min(t.rows,Math.ceil(f/256+1));p++)for(l=Math.max(0,Math.floor(s/256));l<Math.min(t.columns,Math.ceil(s/256+1));l++){for(c=new Uint8Array(await Hn(e,t,l,p,i)),i?.throwIfAborted(),u=new Uint8ClampedArray(256*256*4),d=0,h=0;d<c.length;d+=t.samples,h+=4)u[h]=c[d],u[h+1]=c[d+1],u[h+2]=c[d+2],u[h+3]=t.samples===4?c[d+3]:255;y=await createImageBitmap(new ImageData(u,256,256)),a.drawImage(y,l*256-s,p*256-f),y.close()}let x=n.transferToImageBitmap();return i?.aborted&&(x.close(),i.throwIfAborted()),{image:x}}function Og(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function Gg(e,t,r,o,i){if(i?.throwIfAborted(),!Og(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?Ag(e,n,r,o,i):Dg(e,n,r,o,i)}function Rg(e){return e.header}function Ug(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function Fg(e,t,r){let o=JSON.parse(new TextDecoder().decode(await fr(await ae(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function Ng(e,t){let r={url:e},o=Hi(await ae(r,0,127));Ug(r,o);let i=await Fg(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function jg(e,t){let r=t===void 0?{url:e}:await Ng(e,t);r.levels=new Map;let o=new DataView(await ae(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await zg(r,o.getUint32(4,r.little)),f=20037508342789244e-9,l=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,u=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:l/f*180,maxLon:p/f*180,minLat:Math.atan(Math.sinh(u/f*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/f*Math.PI))*180/Math.PI},{getHeader:Rg.bind(null,r),getZxy:Gg.bind(null,r)}}function Zg(e,t){xn(e,{ariaLabel:"COG raster",...t,archive:t.archive||jg(new URL(t.url,document.baseURI).href,t.asset)})}function $g(e){switch(e){case"geojson":return ug;case"pmtiles":return xn;case"cog":return Zg;case"terrain":return Td;case"traffic":return Ch;default:return null}}function Vg(){let e=$n.shift();return e.initialize=$g(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function Hg(e){let{layer:t,ready:r}=e;if(e.error)return si(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),delete m.get(t).kind,e.initialize(t,e.settings),o?.addLayer(t),m.get(t).ready===r?t:m.get(t).ready}catch(o){throw t.fire("error",{error:o}),o}}function qg(e=Yt){if(m.has(this)||m.set(this,{}),Object.getPrototypeOf(this)!==g.Layer.prototype||!e?.source){if(st.value.initialize)return st.value.initialize.apply(this,arguments);g.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(g.Util.setOptions(this,o),m.get(this)._type=t,t==="3d"){Se(this,i);return}m.get(this).kind="pending";let n={layer:this,type:t,settings:i,ready:null};$n.push(n),Vn.value=Vn.value.catch(ge).then(Vg);let a=m.get(this).ready=Vn.value.then(Hg);n.ready=a,a.catch(ge)}L();function Wg(e,t){switch(m.get(e).kind){case"3d":return hr(e,t);case"raster":return id(e,t);case"terrain":return sd(e,t);case"time":return Od.call(e,t)}}function Yg(e){let t=g.Util.stamp(e);return this._layers[t]?m.get(e).kind?(this._loaded&&Wg(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):so.value.call(this,e):this}F();function Xg(){return E(this)}G();function Kg(){return S(this)}function Jg(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Pe(e),e}function Qg(e){return Jg(this,e)}function kg(){m.has(this)||m.set(this,{});let e=this._initHooksCalled;ao.value.call(this),e||mg.call(this)}st.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Layer.prototype));ao.value=g.Layer.prototype.callInitHooks;g.Layer.include({initialize:qg,_layerAdd:cg,callInitHooks:kg});so.value=g.Map.prototype.removeLayer;g.Map.include({removeLayer:Yg,getPitch:Xg,getBearing:Kg});g.Marker.include({setRotation:Qg});})();
|
|
4
5
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|