leaflet-city-mapper 0.0.2 → 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.
Files changed (1283) hide show
  1. package/README.md +56 -14
  2. package/cucumber.mjs +2 -2
  3. package/dist/leaflet-city-mapper-src.js +15326 -0
  4. package/dist/leaflet-city-mapper-src.js.map +7 -0
  5. package/dist/leaflet-city-mapper.js +4 -1
  6. package/dist/leaflet-city-mapper.js.map +4 -4
  7. package/libs/leaflet-lens.js +122 -0
  8. package/libs/leaflet.js +76 -0
  9. package/libs/openlayers-bindings.js +1128 -0
  10. package/libs/openlayers-bindings.min.js +99 -0
  11. package/libs/openlayers-bindings.min.js.map +7 -0
  12. package/package.json +5 -3
  13. package/src/archives/decodeDirectory.js +50 -0
  14. package/src/archives/decodeHeader.js +23 -0
  15. package/src/archives/decompress.js +10 -0
  16. package/src/archives/findDirectoryEntry.js +9 -0
  17. package/src/archives/findTile.js +31 -0
  18. package/src/archives/getDirectoryEntries.js +18 -0
  19. package/src/archives/getHeader.js +13 -0
  20. package/src/archives/getTileData.js +13 -0
  21. package/src/archives/getZxy.js +19 -0
  22. package/src/archives/loadDirectory.js +7 -0
  23. package/src/archives/loadSource.js +31 -0
  24. package/src/archives/read.js +32 -0
  25. package/src/archives/tileId.js +23 -0
  26. package/src/archives/varint.js +19 -0
  27. package/src/camera/angles.js +14 -0
  28. package/src/camera/animationPoint.js +11 -0
  29. package/src/camera/cameraMapReady.js +11 -0
  30. package/src/camera/cancelCameraAnimation.js +15 -0
  31. package/src/camera/cleanupCameraMap.js +14 -0
  32. package/src/camera/constrainCameraToBounds.js +3 -0
  33. package/src/camera/displayPoint.js +3 -0
  34. package/src/camera/fitCameraBounds.js +58 -0
  35. package/src/camera/getBearing.js +5 -0
  36. package/src/camera/getPitch.js +5 -0
  37. package/src/camera/groundBounds.js +18 -0
  38. package/src/camera/initializeCameraMap.js +30 -0
  39. package/src/camera/mapAnimateCamera.js +24 -0
  40. package/src/camera/mapCamera.js +103 -0
  41. package/src/camera/mapContainerPointToLayerPoint.js +9 -0
  42. package/src/camera/mapGetBearing.js +4 -0
  43. package/src/camera/mapGetBounds.js +20 -0
  44. package/src/camera/mapGetBoundsCenterZoom.js +10 -0
  45. package/src/camera/mapGetBoundsZoom.js +24 -0
  46. package/src/camera/mapGetCenterLayerPoint.js +6 -0
  47. package/src/camera/mapGetPitch.js +4 -0
  48. package/src/camera/mapLayerPointToContainerPoint.js +8 -0
  49. package/src/camera/mapLimitCenter.js +17 -0
  50. package/src/camera/mapLimitOffset.js +14 -0
  51. package/src/camera/mapPanBy.js +10 -0
  52. package/src/camera/mapPanInside.js +20 -0
  53. package/src/camera/mapResetNorth.js +4 -0
  54. package/src/camera/mapResetNorthPitch.js +4 -0
  55. package/src/camera/mapSetBearing.js +3 -0
  56. package/src/camera/mapSetPitch.js +3 -0
  57. package/src/camera/mapSetPitchAndBearing.js +22 -0
  58. package/src/camera/mapSetZoomAround.js +15 -0
  59. package/src/camera/mapStopPitchBearingAnimation.js +6 -0
  60. package/src/camera/mapTryAnimatedPan.js +10 -0
  61. package/src/camera/mapUpdateCameraOverlays.js +8 -0
  62. package/src/camera/pointOf.js +5 -0
  63. package/src/camera/project.js +27 -0
  64. package/src/camera/runCameraAnimations.js +31 -0
  65. package/src/camera/scheduleCameraAnimation.js +13 -0
  66. package/src/camera/updateSky.js +22 -0
  67. package/src/camera/verticalGroundY.js +4 -0
  68. package/src/cog/decodeCogTile.js +24 -0
  69. package/src/cog/finiteCogValues.js +5 -0
  70. package/src/cog/getCogAssetEntry.js +15 -0
  71. package/src/cog/getCogBase.js +10 -0
  72. package/src/cog/getCogHeader.js +3 -0
  73. package/src/cog/getCogProfile.js +16 -0
  74. package/src/cog/getCogTile.js +12 -0
  75. package/src/cog/getColorTile.js +25 -0
  76. package/src/cog/getElevationTile.js +16 -0
  77. package/src/cog/hasCogProjection.js +9 -0
  78. package/src/cog/initCog.js +7 -0
  79. package/src/cog/invalidCogFullResponse.js +3 -0
  80. package/src/cog/openCog.js +30 -0
  81. package/src/cog/openCogAsset.js +14 -0
  82. package/src/cog/readCog.js +25 -0
  83. package/src/cog/readCogBlock.js +8 -0
  84. package/src/cog/readCogBody.js +20 -0
  85. package/src/cog/readCogDirectories.js +20 -0
  86. package/src/cog/readCogDirectory.js +21 -0
  87. package/src/cog/readCogLevel.js +27 -0
  88. package/src/cog/readCogTag.js +15 -0
  89. package/src/cog/validCogDimensions.js +6 -0
  90. package/src/cog/validCogEncoding.js +5 -0
  91. package/src/cog/validCogGeoArrays.js +8 -0
  92. package/src/cog/validCogGrid.js +9 -0
  93. package/src/cog/validCogTileCoordinates.js +4 -0
  94. package/src/cog/validateCogContainer.js +9 -0
  95. package/src/cog/validateCogContentRange.js +8 -0
  96. package/src/cog/validateCogOffsets.js +10 -0
  97. package/src/cog/validateCogRange.js +7 -0
  98. package/src/cog/validateCogResponse.js +15 -0
  99. package/src/collision/collectMeshes.js +5 -0
  100. package/src/collision/collider.js +56 -0
  101. package/src/collision/hiddenLightHit.js +8 -0
  102. package/src/collision/indexTriangle.js +11 -0
  103. package/src/collision/intersectMeshes.js +32 -0
  104. package/src/collision/localRay.js +21 -0
  105. package/src/collision/mergeHits.js +11 -0
  106. package/src/collision/rayBounds.js +19 -0
  107. package/src/collision/readTriangle.js +20 -0
  108. package/src/collision/sortHits.js +17 -0
  109. package/src/collision/transformTriangle.js +9 -0
  110. package/src/collision/triangleDistance.js +21 -0
  111. package/src/collision/worldHit.js +18 -0
  112. package/src/controls/acceptPitchDrag.js +4 -0
  113. package/src/controls/acceptRotateDrag.js +3 -0
  114. package/src/controls/addCameraHandler.js +9 -0
  115. package/src/controls/adjustCameraDrag.js +15 -0
  116. package/src/controls/cameraControls.js +91 -0
  117. package/src/controls/cameraDragClick.js +10 -0
  118. package/src/controls/cameraDragContextMenu.js +9 -0
  119. package/src/controls/cameraDragDown.js +23 -0
  120. package/src/controls/cameraDragEnd.js +7 -0
  121. package/src/controls/cameraDragMove.js +28 -0
  122. package/src/controls/changeCameraTouch.js +17 -0
  123. package/src/controls/cleanupCameraTouch.js +29 -0
  124. package/src/controls/compassAddHooks.js +18 -0
  125. package/src/controls/compassOrientation.js +7 -0
  126. package/src/controls/compassRemoveHooks.js +5 -0
  127. package/src/controls/containerResizeAddHooks.js +8 -0
  128. package/src/controls/containerResizeRemoveHooks.js +5 -0
  129. package/src/controls/dragCamera.js +26 -0
  130. package/src/controls/editable.js +3 -0
  131. package/src/controls/endAllCameraDrags.js +9 -0
  132. package/src/controls/endAllCameraTouches.js +9 -0
  133. package/src/controls/endCameraTouch.js +12 -0
  134. package/src/controls/endCameraTouchEvent.js +8 -0
  135. package/src/controls/failCompassPermission.js +4 -0
  136. package/src/controls/finishCameraDrag.js +9 -0
  137. package/src/controls/finishCompassPermission.js +17 -0
  138. package/src/controls/loadCameraControls.js +9 -0
  139. package/src/controls/moveCameraTouch.js +29 -0
  140. package/src/controls/notifyCameraTouchChange.js +1 -0
  141. package/src/controls/pitchDragAddHooks.js +8 -0
  142. package/src/controls/pitchDragRemoveHooks.js +5 -0
  143. package/src/controls/refreshRotateControl.js +10 -0
  144. package/src/controls/refreshRotateFocus.js +5 -0
  145. package/src/controls/removeCameraDrag.js +26 -0
  146. package/src/controls/resizeMap.js +3 -0
  147. package/src/controls/rotateButtonClick.js +11 -0
  148. package/src/controls/rotateButtonKeydown.js +15 -0
  149. package/src/controls/rotateControl.js +4 -0
  150. package/src/controls/rotateOnAdd.js +42 -0
  151. package/src/controls/rotateOnRemove.js +6 -0
  152. package/src/controls/shiftRotateAddHooks.js +10 -0
  153. package/src/controls/shiftRotateRemoveHooks.js +5 -0
  154. package/src/controls/shiftRotateWheel.js +11 -0
  155. package/src/controls/startCameraTouch.js +33 -0
  156. package/src/core/addImageState.js +8 -0
  157. package/src/core/addRasterImage.js +12 -0
  158. package/src/core/adjustCameraMarkerPan.js +28 -0
  159. package/src/core/beforeNativeRender.js +10 -0
  160. package/src/core/boundsQuad.js +12 -0
  161. package/src/core/bringNativeLayerToBack.js +8 -0
  162. package/src/core/bringNativeLayerToFront.js +8 -0
  163. package/src/core/bypassNativeEvent.js +11 -0
  164. package/src/core/cameraCircleBounds.js +7 -0
  165. package/src/core/cameraMarkerDrag.js +21 -0
  166. package/src/core/cameraMarkerOnDrag.js +13 -0
  167. package/src/core/cancelGridFade.js +14 -0
  168. package/src/core/closestCameraLayerPoint.js +8 -0
  169. package/src/core/compareNativeHits.js +3 -0
  170. package/src/core/current.js +6 -0
  171. package/src/core/disposeNativeLayer.js +39 -0
  172. package/src/core/fireRasterLoad.js +6 -0
  173. package/src/core/forwardNativeError.js +3 -0
  174. package/src/core/gridlayerGetEvents.js +10 -0
  175. package/src/core/gridlayerGetTiledPixelBounds.js +12 -0
  176. package/src/core/handleNativeMapEvent.js +27 -0
  177. package/src/core/hideTargets.js +18 -0
  178. package/src/core/initNativeGPU.js +25 -0
  179. package/src/core/initializeGridContainer.js +7 -0
  180. package/src/core/initializeNativeLayer.js +40 -0
  181. package/src/core/layerCallInitHooks.js +14 -0
  182. package/src/core/localPixel.js +5 -0
  183. package/src/core/localPixelForGeometry.js +7 -0
  184. package/src/core/localPosition.js +10 -0
  185. package/src/core/markerCameraIconPoint.js +12 -0
  186. package/src/core/markerGetEvents.js +9 -0
  187. package/src/core/markerImageBounds.js +11 -0
  188. package/src/core/markerInitInteraction.js +10 -0
  189. package/src/core/markerQuadCorners.js +48 -0
  190. package/src/core/markerSetIcon.js +12 -0
  191. package/src/core/markerSetPos.js +19 -0
  192. package/src/core/markerSetRotation.js +9 -0
  193. package/src/core/markerUpdateZIndex.js +12 -0
  194. package/src/core/nativeAddLatLng.js +3 -0
  195. package/src/core/nativeBringToBack.js +3 -0
  196. package/src/core/nativeBringToFront.js +3 -0
  197. package/src/core/nativeEventSource.js +18 -0
  198. package/src/core/nativeEvents.js +31 -0
  199. package/src/core/nativeImageError.js +13 -0
  200. package/src/core/nativeImageRefresh.js +11 -0
  201. package/src/core/nativeLayer.js +100 -0
  202. package/src/core/nativeLayerMethod.js +26 -0
  203. package/src/core/nativeRedraw.js +3 -0
  204. package/src/core/nativeSetBounds.js +3 -0
  205. package/src/core/nativeSetIcon.js +3 -0
  206. package/src/core/nativeSetLatLng.js +3 -0
  207. package/src/core/nativeSetLatLngs.js +3 -0
  208. package/src/core/nativeSetOpacity.js +3 -0
  209. package/src/core/nativeSetRadius.js +3 -0
  210. package/src/core/nativeSetStyle.js +3 -0
  211. package/src/core/nativeSetUrl.js +3 -0
  212. package/src/core/nativeSetZIndex.js +3 -0
  213. package/src/core/nativeSetZIndexOffset.js +3 -0
  214. package/src/core/popupAdjustPan.js +29 -0
  215. package/src/core/popupGetEvents.js +8 -0
  216. package/src/core/popupUpdatePosition.js +17 -0
  217. package/src/core/pruneNativeResources.js +20 -0
  218. package/src/core/putNativeMesh.js +36 -0
  219. package/src/core/quadNativeMesh.js +20 -0
  220. package/src/core/readyNativeGPU.js +9 -0
  221. package/src/core/redrawPath.js +6 -0
  222. package/src/core/refreshNativeEvent.js +5 -0
  223. package/src/core/refreshNativeLayer.js +34 -0
  224. package/src/core/refreshNativeLayerContract.js +8 -0
  225. package/src/core/rejectNativeReady.js +4 -0
  226. package/src/core/removeImageState.js +9 -0
  227. package/src/core/removeLayer.js +22 -0
  228. package/src/core/removeNativeEvents.js +17 -0
  229. package/src/core/removeTargets.js +12 -0
  230. package/src/core/reorderNativeLayer.js +9 -0
  231. package/src/core/resolveNativeReady.js +4 -0
  232. package/src/core/restoreNativeEvents.js +6 -0
  233. package/src/core/runGridFades.js +19 -0
  234. package/src/core/runMarkerPanFrame.js +14 -0
  235. package/src/core/scheduleGridFade.js +14 -0
  236. package/src/core/scheduleMarkerPan.js +11 -0
  237. package/src/core/setRotation.js +5 -0
  238. package/src/core/styleNativeMesh.js +14 -0
  239. package/src/core/syncGridLayer.js +29 -0
  240. package/src/core/syncImageOverlay.js +9 -0
  241. package/src/core/syncMarker.js +14 -0
  242. package/src/core/syncVectorLayer.js +29 -0
  243. package/src/core/synchronizeNativeLayer.js +26 -0
  244. package/src/core/textureFor.js +46 -0
  245. package/src/core/tooltipGetEvents.js +8 -0
  246. package/src/core/tooltipSetPosition.js +11 -0
  247. package/src/core/transformNativePoint.js +7 -0
  248. package/src/core/updateGridOpacity.js +27 -0
  249. package/src/core/updateNativeHover.js +7 -0
  250. package/src/core/updateNativeLayerView.js +9 -0
  251. package/src/core/uploadCanvasTexture.js +22 -0
  252. package/src/core/uploadNativeImage.js +13 -0
  253. package/src/geometry/addBridges.js +29 -0
  254. package/src/geometry/below.js +3 -0
  255. package/src/geometry/box.js +8 -0
  256. package/src/geometry/bridgeEdge.js +11 -0
  257. package/src/geometry/bridgeElevation.js +21 -0
  258. package/src/geometry/bridgeFaces.js +15 -0
  259. package/src/geometry/bridgeLocal.js +5 -0
  260. package/src/geometry/bridgePaths.js +11 -0
  261. package/src/geometry/bridgePolygon.js +31 -0
  262. package/src/geometry/bridgeSides.js +11 -0
  263. package/src/geometry/build.js +23 -0
  264. package/src/geometry/circleAt.js +7 -0
  265. package/src/geometry/circleGeometry.js +34 -0
  266. package/src/geometry/clipLine.js +23 -0
  267. package/src/geometry/clipSegment.js +23 -0
  268. package/src/geometry/computeBounds.js +38 -0
  269. package/src/geometry/conformModelToTerrain.js +72 -0
  270. package/src/geometry/cross.js +7 -0
  271. package/src/geometry/dashValues.js +14 -0
  272. package/src/geometry/dashedSegment.js +16 -0
  273. package/src/geometry/disk.js +11 -0
  274. package/src/geometry/diskAt.js +6 -0
  275. package/src/geometry/dot.js +6 -0
  276. package/src/geometry/emitter.js +8 -0
  277. package/src/geometry/indexBridge.js +29 -0
  278. package/src/geometry/lampPostGeometry.js +30 -0
  279. package/src/geometry/lampRing.js +14 -0
  280. package/src/geometry/lightGeometry.js +15 -0
  281. package/src/geometry/line.js +21 -0
  282. package/src/geometry/lineJoin.js +26 -0
  283. package/src/geometry/nativeGeometry.js +21 -0
  284. package/src/geometry/nativeTriangle.js +3 -0
  285. package/src/geometry/polygon.js +23 -0
  286. package/src/geometry/push.js +3 -0
  287. package/src/geometry/quad.js +9 -0
  288. package/src/geometry/roofCoverage.js +23 -0
  289. package/src/geometry/roofFootprint.js +29 -0
  290. package/src/geometry/samePoint.js +3 -0
  291. package/src/geometry/segment.js +22 -0
  292. package/src/geometry/setVertexColor.js +17 -0
  293. package/src/geometry/sub.js +6 -0
  294. package/src/geometry/subtractRoofTile.js +19 -0
  295. package/src/geometry/surface.js +18 -0
  296. package/src/geometry/treeGeometry.js +30 -0
  297. package/src/geometry/treeRing.js +15 -0
  298. package/src/geometry/triangle.js +13 -0
  299. package/src/geometry/validateTree.js +7 -0
  300. package/src/geometry/vertexNormals.js +26 -0
  301. package/src/geometry/visit.js +10 -0
  302. package/src/globals/CELL.js +3 -0
  303. package/src/globals/Compass.js +1 -0
  304. package/src/globals/ContainerResize.js +1 -0
  305. package/src/globals/HEIGHT.js +1 -0
  306. package/src/globals/L.js +1 -0
  307. package/src/globals/PitchDrag.js +1 -0
  308. package/src/globals/ShiftRotate.js +1 -0
  309. package/src/globals/TILE_RADIUS.js +1 -0
  310. package/src/globals/TILE_SIZE.js +1 -0
  311. package/src/globals/TouchMode.js +1 -0
  312. package/src/globals/alphaBlend.js +12 -0
  313. package/src/globals/archiveDecoder.js +1 -0
  314. package/src/globals/archiveNorthWest.js +1 -0
  315. package/src/globals/archiveSouthEast.js +1 -0
  316. package/src/globals/atmosphereColor.js +1 -0
  317. package/src/globals/atmosphereStops.js +22 -0
  318. package/src/globals/blobParts.js +1 -0
  319. package/src/globals/boundsMethods.js +1 -0
  320. package/src/globals/cameraAngles.js +1 -0
  321. package/src/globals/cameraAnimatedOptions.js +3 -0
  322. package/src/globals/cameraAnimationFrame.js +1 -0
  323. package/src/globals/cameraAnimations.js +1 -0
  324. package/src/globals/cameraBearingSensitivity.js +1 -0
  325. package/src/globals/cameraByMap.js +1 -0
  326. package/src/globals/cameraDragSensitivity.js +1 -0
  327. package/src/globals/cameraDrags.js +1 -0
  328. package/src/globals/cameraEmptyOptions.js +1 -0
  329. package/src/globals/cameraFocusOptions.js +3 -0
  330. package/src/globals/cameraFov.js +3 -0
  331. package/src/globals/cameraListenerOptions.js +4 -0
  332. package/src/globals/cameraTouchStates.js +1 -0
  333. package/src/globals/cameraZeroPadding.js +1 -0
  334. package/src/globals/closestMethods.js +1 -0
  335. package/src/globals/cogTags.js +1 -0
  336. package/src/globals/colliders.js +1 -0
  337. package/src/globals/colorLayout.js +8 -0
  338. package/src/globals/coreEventTypes.js +4 -0
  339. package/src/globals/coreMatrixKeys.js +4 -0
  340. package/src/globals/coreQuadIndices.js +1 -0
  341. package/src/globals/coreQuadUV.js +1 -0
  342. package/src/globals/coreSampler.js +4 -0
  343. package/src/globals/coreWhite.js +1 -0
  344. package/src/globals/cosObliquity.js +3 -0
  345. package/src/globals/coverageTiles.js +1 -0
  346. package/src/globals/dark.js +1 -0
  347. package/src/globals/defaultMaterial.js +1 -0
  348. package/src/globals/degrees.js +1 -0
  349. package/src/globals/demBuffer.js +4 -0
  350. package/src/globals/demLayout.js +3 -0
  351. package/src/globals/demSize.js +1 -0
  352. package/src/globals/demTarget.js +3 -0
  353. package/src/globals/demTexture.js +5 -0
  354. package/src/globals/depthBindGroup.js +9 -0
  355. package/src/globals/depthTexture.js +5 -0
  356. package/src/globals/directoryReader.js +4 -0
  357. package/src/globals/disabledShadow.js +1 -0
  358. package/src/globals/dragByHandler.js +1 -0
  359. package/src/globals/dragStates.js +1 -0
  360. package/src/globals/drawEntries.js +1 -0
  361. package/src/globals/drawFrameEntry.js +7 -0
  362. package/src/globals/drawMeshEntry.js +7 -0
  363. package/src/globals/drawSamplerEntries.js +18 -0
  364. package/src/globals/drawTerrainEntry.js +4 -0
  365. package/src/globals/drawTextureEntries.js +18 -0
  366. package/src/globals/earthCirc.js +1 -0
  367. package/src/globals/elevationWGSL.js +27 -0
  368. package/src/globals/fragmentShader.js +3 -0
  369. package/src/globals/frameBuffer.js +4 -0
  370. package/src/globals/frameCommands.js +1 -0
  371. package/src/globals/frameLayoutEntry.js +7 -0
  372. package/src/globals/geometryDecoder.js +1 -0
  373. package/src/globals/geometryEmpty.js +1 -0
  374. package/src/globals/geometryImageOptions.js +4 -0
  375. package/src/globals/geometryPixelStates.js +1 -0
  376. package/src/globals/geometryQuaternion.js +1 -0
  377. package/src/globals/geometryScale.js +1 -0
  378. package/src/globals/geometrySemantics.js +5 -0
  379. package/src/globals/geometryTranslation.js +1 -0
  380. package/src/globals/glass.js +1 -0
  381. package/src/globals/gridEvents.js +1 -0
  382. package/src/globals/gridFadeFrame.js +1 -0
  383. package/src/globals/gridInitializers.js +1 -0
  384. package/src/globals/halfRadians.js +1 -0
  385. package/src/globals/headerBounds.js +1 -0
  386. package/src/globals/headerFlags.js +1 -0
  387. package/src/globals/headerOffsets.js +5 -0
  388. package/src/globals/hull.js +10 -0
  389. package/src/globals/imageStates.js +1 -0
  390. package/src/globals/instanceLayout.js +9 -0
  391. package/src/globals/lampDirections.js +8 -0
  392. package/src/globals/layerCallInitHooks.js +1 -0
  393. package/src/globals/layerProto.js +1 -0
  394. package/src/globals/lightScale.js +1 -0
  395. package/src/globals/limbs.js +8 -0
  396. package/src/globals/loading.js +1 -0
  397. package/src/globals/mapMethods.js +1 -0
  398. package/src/globals/markerMethods.js +1 -0
  399. package/src/globals/markerPanFrame.js +1 -0
  400. package/src/globals/meshBindGroup.js +4 -0
  401. package/src/globals/meshBuffer.js +4 -0
  402. package/src/globals/meshCopySize.js +1 -0
  403. package/src/globals/meshImage.js +4 -0
  404. package/src/globals/meshLayoutEntry.js +8 -0
  405. package/src/globals/meshOffsets.js +1 -0
  406. package/src/globals/meshPipeline.js +27 -0
  407. package/src/globals/meshStack.js +3 -0
  408. package/src/globals/meshTarget.js +3 -0
  409. package/src/globals/nativeEventMaps.js +1 -0
  410. package/src/globals/nativeMethodHandlers.js +31 -0
  411. package/src/globals/nativeRenderByLayer.js +1 -0
  412. package/src/globals/nextId.js +1 -0
  413. package/src/globals/normalLayout.js +8 -0
  414. package/src/globals/parts.js +24 -0
  415. package/src/globals/pendingGridFades.js +1 -0
  416. package/src/globals/pendingInitializations.js +1 -0
  417. package/src/globals/pendingMapChanges.js +1 -0
  418. package/src/globals/pendingMarkerPan.js +1 -0
  419. package/src/globals/pendingPlacements.js +1 -0
  420. package/src/globals/pendingRasterLoads.js +1 -0
  421. package/src/globals/pendingUpdates.js +1 -0
  422. package/src/globals/pendingZoomAnimations.js +1 -0
  423. package/src/globals/pipelineLayout.js +3 -0
  424. package/src/globals/popupEvents.js +1 -0
  425. package/src/globals/popupPan.js +1 -0
  426. package/src/globals/popupPosition.js +1 -0
  427. package/src/globals/positionLayout.js +8 -0
  428. package/src/globals/programEntries.js +1 -0
  429. package/src/globals/programLayout.js +3 -0
  430. package/src/globals/radians.js +1 -0
  431. package/src/globals/rasterBuffer.js +4 -0
  432. package/src/globals/rasterIndices.js +1 -0
  433. package/src/globals/rasterNormals.js +1 -0
  434. package/src/globals/rasterPoint.js +4 -0
  435. package/src/globals/rasterPositions.js +1 -0
  436. package/src/globals/rasterSampler.js +6 -0
  437. package/src/globals/rasterTexture.js +5 -0
  438. package/src/globals/rasterUVs.js +1 -0
  439. package/src/globals/removeLayer.js +1 -0
  440. package/src/globals/renderEmpty.js +1 -0
  441. package/src/globals/rendererDevices.js +1 -0
  442. package/src/globals/ringDirections.js +49 -0
  443. package/src/globals/roofBindGroup.js +17 -0
  444. package/src/globals/roofBlitSampler.js +4 -0
  445. package/src/globals/roofBuffer.js +4 -0
  446. package/src/globals/roofCommands.js +1 -0
  447. package/src/globals/roofCopySize.js +1 -0
  448. package/src/globals/roofImage.js +3 -0
  449. package/src/globals/roofMin.js +4 -0
  450. package/src/globals/roofOpacities.js +1 -0
  451. package/src/globals/roofPass.js +13 -0
  452. package/src/globals/roofPipeline.js +29 -0
  453. package/src/globals/roofSampler.js +4 -0
  454. package/src/globals/roofShader.js +16 -0
  455. package/src/globals/roofSignatures.js +1 -0
  456. package/src/globals/roofSize.js +4 -0
  457. package/src/globals/roofTarget.js +3 -0
  458. package/src/globals/roofTexture.js +5 -0
  459. package/src/globals/roofTiles.js +1 -0
  460. package/src/globals/roundProfile.js +7 -0
  461. package/src/globals/samplerLayoutEntries.js +36 -0
  462. package/src/globals/sceneByLayer.js +1 -0
  463. package/src/globals/sceneCleanupFields.js +1 -0
  464. package/src/globals/sceneEmptyOptions.js +1 -0
  465. package/src/globals/scenePass.js +19 -0
  466. package/src/globals/sceneSunlightUniforms.js +3 -0
  467. package/src/globals/sceneTransferFields.js +1 -0
  468. package/src/globals/sceneWalkHandlers.js +1 -0
  469. package/src/globals/shadowBindGroup.js +10 -0
  470. package/src/globals/shadowBounds.js +4 -0
  471. package/src/globals/shadowCamera.js +15 -0
  472. package/src/globals/shadowDepthLayout.js +9 -0
  473. package/src/globals/shadowHigh.js +1 -0
  474. package/src/globals/shadowInstanceLayouts.js +4 -0
  475. package/src/globals/shadowLayouts.js +3 -0
  476. package/src/globals/shadowLow.js +1 -0
  477. package/src/globals/shadowMeshLayout.js +10 -0
  478. package/src/globals/shadowOffsets.js +1 -0
  479. package/src/globals/shadowPass.js +9 -0
  480. package/src/globals/shadowPipeline.js +24 -0
  481. package/src/globals/shadowPipelineLayout.js +3 -0
  482. package/src/globals/shadowShader.js +3 -0
  483. package/src/globals/shadowTexture.js +5 -0
  484. package/src/globals/shadowValues.js +1 -0
  485. package/src/globals/shirt.js +1 -0
  486. package/src/globals/sinObliquity.js +3 -0
  487. package/src/globals/sizes.js +6 -0
  488. package/src/globals/skin.js +2 -0
  489. package/src/globals/sunBindGroup.js +20 -0
  490. package/src/globals/sunByMap.js +1 -0
  491. package/src/globals/sunlightByControl.js +1 -0
  492. package/src/globals/tau.js +1 -0
  493. package/src/globals/terrainLayoutEntry.js +8 -0
  494. package/src/globals/textureLayoutEntries.js +41 -0
  495. package/src/globals/tiledBounds.js +1 -0
  496. package/src/globals/tooltipEvents.js +1 -0
  497. package/src/globals/tooltipPosition.js +1 -0
  498. package/src/globals/touchByContainer.js +1 -0
  499. package/src/globals/trafficByLayer.js +1 -0
  500. package/src/globals/trafficClocks.js +1 -0
  501. package/src/globals/trafficEmptyList.js +1 -0
  502. package/src/globals/trafficEmptyOptions.js +1 -0
  503. package/src/globals/trafficRouteMaterial.js +1 -0
  504. package/src/globals/trafficShader.js +49 -0
  505. package/src/globals/triangleContexts.js +1 -0
  506. package/src/globals/trousers.js +1 -0
  507. package/src/globals/tyre.js +1 -0
  508. package/src/globals/uVLayout.js +8 -0
  509. package/src/globals/vehicles.js +55 -0
  510. package/src/globals/vertexShader.js +3 -0
  511. package/src/globals/walkByMap.js +1 -0
  512. package/src/globals/wantedTiles.js +1 -0
  513. package/src/index.js +48 -328
  514. package/src/lighting/cacheLightGrid.js +32 -0
  515. package/src/lighting/collectLightMeshes.js +9 -0
  516. package/src/lighting/lightGrid.js +43 -0
  517. package/src/lighting/updatePointLights.js +38 -0
  518. package/src/lighting/visitCells.js +8 -0
  519. package/src/lighting/visitLightCells.js +13 -0
  520. package/src/lighting/worldLights.js +25 -0
  521. package/src/lighting/writeLightCell.js +5 -0
  522. package/src/models/applyModelTransform.js +13 -0
  523. package/src/models/buildModelNodes.js +14 -0
  524. package/src/models/createModelContext.js +15 -0
  525. package/src/models/createModelGeometry.js +40 -0
  526. package/src/models/decodeModel.js +48 -0
  527. package/src/models/hasUnsupportedPrimitives.js +10 -0
  528. package/src/models/loadBuffer.js +6 -0
  529. package/src/models/loadImage.js +19 -0
  530. package/src/models/loadModel.js +44 -0
  531. package/src/models/loadModelResources.js +19 -0
  532. package/src/models/materialFor.js +21 -0
  533. package/src/models/modelNode.js +49 -0
  534. package/src/models/nodeMatrix.js +27 -0
  535. package/src/models/normalizeAccessor.js +11 -0
  536. package/src/models/readAccessor.js +33 -0
  537. package/src/models/readAccessorValue.js +7 -0
  538. package/src/models/readAccessorValues.js +20 -0
  539. package/src/models/readModelAttributes.js +20 -0
  540. package/src/models/readModelIndices.js +16 -0
  541. package/src/models/readSparseAccessor.js +19 -0
  542. package/src/models/releaseModelResources.js +10 -0
  543. package/src/models/textureFor.js +38 -0
  544. package/src/models/textureSampler.js +10 -0
  545. package/src/picking/collectVisibleMesh.js +4 -0
  546. package/src/picking/findFeature.js +52 -0
  547. package/src/picking/hit.js +24 -0
  548. package/src/picking/hitColliderCell.js +19 -0
  549. package/src/picking/hitMesh.js +26 -0
  550. package/src/picking/onClick.js +16 -0
  551. package/src/picking/onPointerLeave.js +14 -0
  552. package/src/picking/onPointerMove.js +18 -0
  553. package/src/picking/pointerClick.js +5 -0
  554. package/src/picking/pointerLeave.js +5 -0
  555. package/src/picking/pointerMove.js +5 -0
  556. package/src/picking/raycast.js +66 -0
  557. package/src/picking/setHighlight.js +20 -0
  558. package/src/picking/shouldSkipOther.js +6 -0
  559. package/src/picking/showFeature.js +37 -0
  560. package/src/picking/validateCameraInverse.js +8 -0
  561. package/src/raster/addRasterTile.js +69 -0
  562. package/src/raster/comparePendingTiles.js +5 -0
  563. package/src/raster/createGeometry.js +29 -0
  564. package/src/raster/createRasterMesh.js +76 -0
  565. package/src/raster/finishAttachment.js +15 -0
  566. package/src/raster/finishRasterTile.js +61 -0
  567. package/src/raster/getRasterEvents.js +6 -0
  568. package/src/raster/getRasterTileSize.js +7 -0
  569. package/src/raster/initRaster.js +33 -0
  570. package/src/raster/isLoading.js +7 -0
  571. package/src/raster/loadRasterTile.js +13 -0
  572. package/src/raster/onPMTileAdd.js +13 -0
  573. package/src/raster/onPMTileRemove.js +11 -0
  574. package/src/raster/pruneRasterTiles.js +40 -0
  575. package/src/raster/pumpRasterTiles.js +26 -0
  576. package/src/raster/rasterTileRange.js +23 -0
  577. package/src/raster/readyRaster.js +16 -0
  578. package/src/raster/registerTerrainTile.js +15 -0
  579. package/src/raster/releaseRasterTile.js +21 -0
  580. package/src/raster/releaseRasterTiles.js +18 -0
  581. package/src/raster/removeRasterTile.js +16 -0
  582. package/src/raster/reportError.js +6 -0
  583. package/src/raster/retainRasterTiles.js +15 -0
  584. package/src/raster/setPMTileOpacity.js +7 -0
  585. package/src/raster/setPMTileZIndex.js +7 -0
  586. package/src/raster/setRasterOpacity.js +14 -0
  587. package/src/raster/setRasterTerrain.js +25 -0
  588. package/src/raster/setRasterZIndex.js +14 -0
  589. package/src/raster/terrainTileGeometry.js +16 -0
  590. package/src/raster/updateAttachedTiles.js +13 -0
  591. package/src/raster/updateRasterTiles.js +51 -0
  592. package/src/rendering/bindMeshTextures.js +50 -0
  593. package/src/rendering/collectFrameMeshes.js +38 -0
  594. package/src/rendering/collectMeshes.js +14 -0
  595. package/src/rendering/collectRoofTiles.js +15 -0
  596. package/src/rendering/collectVisibleMesh.js +27 -0
  597. package/src/rendering/compareMeshDepth.js +6 -0
  598. package/src/rendering/compareMeshes.js +8 -0
  599. package/src/rendering/compareRoofTiles.js +4 -0
  600. package/src/rendering/composeRoofAtlas.js +69 -0
  601. package/src/rendering/createMesh.js +44 -0
  602. package/src/rendering/createProgram.js +75 -0
  603. package/src/rendering/createProgramLayout.js +36 -0
  604. package/src/rendering/createProgramUniforms.js +17 -0
  605. package/src/rendering/destroyAfterSubmission.js +8 -0
  606. package/src/rendering/destroyTexture.js +9 -0
  607. package/src/rendering/disposeMesh.js +14 -0
  608. package/src/rendering/drawGeometry.js +41 -0
  609. package/src/rendering/drawPipeline.js +34 -0
  610. package/src/rendering/drawSceneMeshes.js +48 -0
  611. package/src/rendering/ensureRoofBlit.js +20 -0
  612. package/src/rendering/prepareFrameBuffer.js +17 -0
  613. package/src/rendering/prepareFrameMeshes.js +37 -0
  614. package/src/rendering/prepareFrameUniforms.js +44 -0
  615. package/src/rendering/prepareMeshCutout.js +12 -0
  616. package/src/rendering/prepareMeshTextures.js +23 -0
  617. package/src/rendering/prepareMeshUniforms.js +25 -0
  618. package/src/rendering/rebuildRoofAtlas.js +52 -0
  619. package/src/rendering/render.js +69 -0
  620. package/src/rendering/reportCompilation.js +17 -0
  621. package/src/rendering/resizeRenderer.js +24 -0
  622. package/src/rendering/resizeRoofTexture.js +24 -0
  623. package/src/rendering/revealRoofMesh.js +15 -0
  624. package/src/rendering/sortMeshes.js +6 -0
  625. package/src/rendering/synchronizeZoomView.js +26 -0
  626. package/src/rendering/textureBinding.js +7 -0
  627. package/src/rendering/updateMapCamera.js +46 -0
  628. package/src/rendering/updateRoofAtlas.js +20 -0
  629. package/src/rendering/updateRoofRaster.js +25 -0
  630. package/src/rendering/updateZoomCamera.js +18 -0
  631. package/src/rendering/uploadMeshTexture.js +26 -0
  632. package/src/rendering/uploadRoofTile.js +23 -0
  633. package/src/scene/addSceneLayer.js +17 -0
  634. package/src/scene/attach.js +54 -0
  635. package/src/scene/attachLayer.js +13 -0
  636. package/src/scene/callLayer.js +26 -0
  637. package/src/scene/cancelUpdate.js +13 -0
  638. package/src/scene/composeLocalTransform.js +16 -0
  639. package/src/scene/createLayer.js +7 -0
  640. package/src/scene/createSceneCamera.js +21 -0
  641. package/src/scene/emptyEvents.js +3 -0
  642. package/src/scene/emptyNode.js +12 -0
  643. package/src/scene/endZoom.js +23 -0
  644. package/src/scene/failAttachment.js +12 -0
  645. package/src/scene/get3DEvents.js +16 -0
  646. package/src/scene/getLocation.js +7 -0
  647. package/src/scene/init3D.js +43 -0
  648. package/src/scene/initializeLayer.js +22 -0
  649. package/src/scene/initializeRendererResources.js +35 -0
  650. package/src/scene/initializeSharedRenderer.js +45 -0
  651. package/src/scene/initializerFor.js +16 -0
  652. package/src/scene/isNativeLayer.js +12 -0
  653. package/src/scene/layerCountTitle.js +4 -0
  654. package/src/scene/layerInitialize.js +48 -0
  655. package/src/scene/layerLayerAdd.js +43 -0
  656. package/src/scene/mountRenderer.js +25 -0
  657. package/src/scene/onAdd3DLayer.js +39 -0
  658. package/src/scene/onMapChange.js +18 -0
  659. package/src/scene/onRemove3DLayer.js +63 -0
  660. package/src/scene/onZoomAnim.js +18 -0
  661. package/src/scene/placeEntry.js +13 -0
  662. package/src/scene/placeEntryElement.js +22 -0
  663. package/src/scene/placeUnderEntry.js +8 -0
  664. package/src/scene/ready.js +9 -0
  665. package/src/scene/ready3D.js +35 -0
  666. package/src/scene/releaseRenderer.js +14 -0
  667. package/src/scene/releaseSharedScene.js +25 -0
  668. package/src/scene/removeEntry.js +8 -0
  669. package/src/scene/removeLayerEvents.js +9 -0
  670. package/src/scene/removeSceneLayer.js +15 -0
  671. package/src/scene/renderLayerCount.js +13 -0
  672. package/src/scene/renderPendingMapChange.js +15 -0
  673. package/src/scene/renderPendingUpdates.js +23 -0
  674. package/src/scene/renderPendingZoomAnimation.js +11 -0
  675. package/src/scene/rendererDeviceError.js +14 -0
  676. package/src/scene/rendererDeviceLost.js +14 -0
  677. package/src/scene/replaceEntry.js +9 -0
  678. package/src/scene/reportError.js +3 -0
  679. package/src/scene/requestAdapter.js +12 -0
  680. package/src/scene/requestDevice.js +9 -0
  681. package/src/scene/resolveNextInitialization.js +13 -0
  682. package/src/scene/restoreGeometry.js +23 -0
  683. package/src/scene/restoreMaterialTextures.js +16 -0
  684. package/src/scene/restoreObject.js +35 -0
  685. package/src/scene/runPlacements.js +9 -0
  686. package/src/scene/showWebGPUWarning.js +16 -0
  687. package/src/scene/startZoom.js +8 -0
  688. package/src/scene/traverse.js +7 -0
  689. package/src/scene/underEntry.js +16 -0
  690. package/src/scene/update.js +23 -0
  691. package/src/scene/updateCamera.js +57 -0
  692. package/src/scene/updateLayerCount.js +22 -0
  693. package/src/scene/updateWorldMatrix.js +43 -0
  694. package/src/scene/worldMatrixChanged.js +18 -0
  695. package/src/shaders/materialBaseShader.js +17 -0
  696. package/src/shaders/materialShaders.js +130 -0
  697. package/src/shaders/materialSurfaceShader.js +47 -0
  698. package/src/shaders/materialVertexShader.js +72 -0
  699. package/src/shaders/roofVertexShader.js +9 -0
  700. package/src/shaders/validateRoofMaterial.js +10 -0
  701. package/src/shadows/bindSunlight.js +21 -0
  702. package/src/shadows/drawShadowMeshes.js +58 -0
  703. package/src/shadows/ensureShadowPipeline.js +64 -0
  704. package/src/shadows/meshShadowBounds.js +24 -0
  705. package/src/shadows/renderSunlight.js +48 -0
  706. package/src/shadows/resizeSunlight.js +21 -0
  707. package/src/shadows/shadowBounds.js +23 -0
  708. package/src/shadows/shadowCacheMatches.js +17 -0
  709. package/src/shadows/shadowMatrix.js +49 -0
  710. package/src/shadows/shadowMeshMatches.js +11 -0
  711. package/src/sources/addGeneratedTriangle.js +7 -0
  712. package/src/sources/addTriangle.js +17 -0
  713. package/src/sources/attachAreaMesh.js +64 -0
  714. package/src/sources/buildArea.js +46 -0
  715. package/src/sources/buildAreaFeature.js +36 -0
  716. package/src/sources/buildAreaPoint.js +25 -0
  717. package/src/sources/buildAreaPolygon.js +29 -0
  718. package/src/sources/compareAreaDistance.js +3 -0
  719. package/src/sources/extrusionStyle.js +10 -0
  720. package/src/sources/featureAnchor.js +9 -0
  721. package/src/sources/generateTreeGeometry.js +13 -0
  722. package/src/sources/groundOffset.js +3 -0
  723. package/src/sources/initializeGeoJSON.js +10 -0
  724. package/src/sources/instanceAreaGeometry.js +31 -0
  725. package/src/sources/pendingSourceAreas.js +20 -0
  726. package/src/sources/projectRing.js +27 -0
  727. package/src/sources/projectedTree.js +19 -0
  728. package/src/sources/pump.js +44 -0
  729. package/src/sources/releaseArea.js +25 -0
  730. package/src/sources/setGeoJSONData.js +15 -0
  731. package/src/sources/setGeoJSONLayerData.js +5 -0
  732. package/src/sources/sourceAreaContext.js +19 -0
  733. package/src/sources/updateArea.js +52 -0
  734. package/src/sources/updateStatus.js +15 -0
  735. package/src/sunlight/addTimeLayer.js +6 -0
  736. package/src/sunlight/addTo.js +11 -0
  737. package/src/sunlight/atmosphere.js +25 -0
  738. package/src/sunlight/createSun.js +54 -0
  739. package/src/sunlight/horizontalPosition.js +16 -0
  740. package/src/sunlight/initSunlight.js +17 -0
  741. package/src/sunlight/initialize.js +14 -0
  742. package/src/sunlight/mix.js +7 -0
  743. package/src/sunlight/moonPosition.js +18 -0
  744. package/src/sunlight/onAdd.js +5 -0
  745. package/src/sunlight/onAddSun.js +27 -0
  746. package/src/sunlight/onRemoveSun.js +10 -0
  747. package/src/sunlight/projectCelestialBody.js +13 -0
  748. package/src/sunlight/remove.js +8 -0
  749. package/src/sunlight/removeSun.js +21 -0
  750. package/src/sunlight/removeTimeLayer.js +7 -0
  751. package/src/sunlight/render.js +9 -0
  752. package/src/sunlight/rgb.js +8 -0
  753. package/src/sunlight/solarPosition.js +18 -0
  754. package/src/sunlight/solarTime.js +11 -0
  755. package/src/sunlight/styleTimeControl.js +7 -0
  756. package/src/sunlight/tickSun.js +5 -0
  757. package/src/sunlight/updateCelestialDisc.js +12 -0
  758. package/src/sunlight/updateSky.js +17 -0
  759. package/src/sunlight/updateSun.js +40 -0
  760. package/src/sunlight/useLiveTime.js +6 -0
  761. package/src/sunlight/useSelectedTime.js +23 -0
  762. package/src/terrain/applyTerrain.js +21 -0
  763. package/src/terrain/clearLayerTerrain.js +8 -0
  764. package/src/terrain/copyTerrainTile.js +12 -0
  765. package/src/terrain/getElevation.js +14 -0
  766. package/src/terrain/initTerrain.js +23 -0
  767. package/src/terrain/loadReadyTerrain.js +5 -0
  768. package/src/terrain/loadTerrain.js +43 -0
  769. package/src/terrain/loadTerrainTiles.js +17 -0
  770. package/src/terrain/onTerrainAdd.js +25 -0
  771. package/src/terrain/onTerrainChange.js +17 -0
  772. package/src/terrain/onTerrainRemove.js +45 -0
  773. package/src/terrain/rasterProgram.js +51 -0
  774. package/src/terrain/readBridges.js +4 -0
  775. package/src/terrain/sample.js +7 -0
  776. package/src/terrain/setLayerTerrain.js +8 -0
  777. package/src/terrain/setTerrainHeight.js +14 -0
  778. package/src/terrain/terrainAtlas.js +17 -0
  779. package/src/terrain/terrainBuffers.js +27 -0
  780. package/src/terrain/terrainElevation.js +15 -0
  781. package/src/terrain/terrainGrid.js +32 -0
  782. package/src/terrain/terrainTileQueue.js +25 -0
  783. package/src/traffic/addTraffic.js +10 -0
  784. package/src/traffic/along.js +20 -0
  785. package/src/traffic/appendRouteDash.js +15 -0
  786. package/src/traffic/appendRouteSegment.js +15 -0
  787. package/src/traffic/clockMinutes.js +6 -0
  788. package/src/traffic/compareDepartures.js +5 -0
  789. package/src/traffic/createTrafficMesh.js +7 -0
  790. package/src/traffic/destroyTrafficGpu.js +7 -0
  791. package/src/traffic/disposeTrafficObject.js +16 -0
  792. package/src/traffic/drawTrafficRoute.js +9 -0
  793. package/src/traffic/failTraffic.js +6 -0
  794. package/src/traffic/failedTrafficLoad.js +5 -0
  795. package/src/traffic/fetchTrafficLanes.js +10 -0
  796. package/src/traffic/groundTraffic.js +19 -0
  797. package/src/traffic/initTraffic.js +66 -0
  798. package/src/traffic/loadTraffic.js +15 -0
  799. package/src/traffic/loadedTrafficLanes.js +16 -0
  800. package/src/traffic/locateTraffic.js +11 -0
  801. package/src/traffic/moveTraffic.js +15 -0
  802. package/src/traffic/placeTraffic.js +21 -0
  803. package/src/traffic/prepareTraffic.js +30 -0
  804. package/src/traffic/readyTraffic.js +6 -0
  805. package/src/traffic/rebaseTraffic.js +60 -0
  806. package/src/traffic/rebuildTrafficMesh.js +32 -0
  807. package/src/traffic/refreshTrafficTrips.js +32 -0
  808. package/src/traffic/removeTraffic.js +20 -0
  809. package/src/traffic/routeColor.js +6 -0
  810. package/src/traffic/routeGeometry.js +21 -0
  811. package/src/traffic/scheduledTrips.js +51 -0
  812. package/src/traffic/startTraffic.js +8 -0
  813. package/src/traffic/tickTraffic.js +26 -0
  814. package/src/traffic/toLanes.js +24 -0
  815. package/src/traffic/tooltip.js +9 -0
  816. package/src/traffic/trafficBounds.js +21 -0
  817. package/src/traffic/trafficNow.js +10 -0
  818. package/src/traffic/trafficStatusText.js +5 -0
  819. package/src/traffic/trafficStorage.js +5 -0
  820. package/src/traffic/tripsAt.js +27 -0
  821. package/src/traffic/updateTraffic.js +11 -0
  822. package/src/traffic/updateTrafficLights.js +16 -0
  823. package/src/traffic/updateTrafficPose.js +8 -0
  824. package/src/traffic/updateTrafficTerrain.js +12 -0
  825. package/src/traffic/uploadTrafficLanes.js +21 -0
  826. package/src/traffic/vehicleOffsets.js +12 -0
  827. package/src/triangulation/area.js +9 -0
  828. package/src/triangulation/clean.js +18 -0
  829. package/src/triangulation/clipEars.js +23 -0
  830. package/src/triangulation/connectHole.js +18 -0
  831. package/src/triangulation/containsVertex.js +11 -0
  832. package/src/triangulation/cross.js +3 -0
  833. package/src/triangulation/crossesBoundary.js +8 -0
  834. package/src/triangulation/crossesRing.js +9 -0
  835. package/src/triangulation/equal.js +3 -0
  836. package/src/triangulation/inside.js +10 -0
  837. package/src/triangulation/insideHole.js +7 -0
  838. package/src/triangulation/intersects.js +11 -0
  839. package/src/triangulation/isClockWise.js +13 -0
  840. package/src/triangulation/mergeHoles.js +11 -0
  841. package/src/triangulation/minimumX.js +6 -0
  842. package/src/triangulation/on.js +4 -0
  843. package/src/triangulation/polygonRings.js +14 -0
  844. package/src/triangulation/sortHoles.js +21 -0
  845. package/src/triangulation/triangulate.js +48 -0
  846. package/src/triangulation/validateArea.js +10 -0
  847. package/src/utils/channel.js +2 -2
  848. package/src/utils/compareDistance.js +3 -0
  849. package/src/utils/noOperation.js +1 -0
  850. package/src/utils/parseColor.js +4 -4
  851. package/src/utils/toSRGB.js +3 -1
  852. package/src/utils/wrap.js +3 -1
  853. package/src/vehicles/bicycleModel.js +24 -0
  854. package/src/vehicles/boatBenches.js +9 -0
  855. package/src/vehicles/boatModel.js +35 -0
  856. package/src/vehicles/busModel.js +6 -0
  857. package/src/vehicles/carModel.js +38 -0
  858. package/src/vehicles/carriage.js +20 -0
  859. package/src/vehicles/metroModel.js +9 -0
  860. package/src/vehicles/mirror.js +8 -0
  861. package/src/vehicles/pedestrianModel.js +18 -0
  862. package/src/vehicles/tramModel.js +9 -0
  863. package/src/walk/blocked.js +6 -0
  864. package/src/walk/createWalk.js +66 -0
  865. package/src/walk/initWalk.js +19 -0
  866. package/src/walk/initialize.js +7 -0
  867. package/src/walk/land.js +32 -0
  868. package/src/walk/local.js +18 -0
  869. package/src/walk/moveWalker.js +23 -0
  870. package/src/walk/onAdd.js +29 -0
  871. package/src/walk/onBlur.js +3 -0
  872. package/src/walk/onKey.js +15 -0
  873. package/src/walk/onPointer.js +18 -0
  874. package/src/walk/onRemove.js +12 -0
  875. package/src/walk/onTerrain.js +5 -0
  876. package/src/walk/place.js +20 -0
  877. package/src/walk/start.js +46 -0
  878. package/src/walk/step.js +45 -0
  879. package/src/walk/stepWalkerHeight.js +11 -0
  880. package/src/walk/stop.js +30 -0
  881. package/src/walk/toggle.js +6 -0
  882. package/src/walk/updateWalkerView.js +22 -0
  883. package/dist/utils/CELL.js +0 -2
  884. package/dist/utils/CELL.js.map +0 -7
  885. package/dist/utils/addBridges.js +0 -2
  886. package/dist/utils/addBridges.js.map +0 -7
  887. package/dist/utils/addRasterTile.js +0 -2
  888. package/dist/utils/addRasterTile.js.map +0 -7
  889. package/dist/utils/along.js +0 -2
  890. package/dist/utils/along.js.map +0 -7
  891. package/dist/utils/atmosphere.js +0 -2
  892. package/dist/utils/atmosphere.js.map +0 -7
  893. package/dist/utils/attach.js +0 -2
  894. package/dist/utils/attach.js.map +0 -7
  895. package/dist/utils/bindSunlight.js +0 -2
  896. package/dist/utils/bindSunlight.js.map +0 -7
  897. package/dist/utils/box.js +0 -2
  898. package/dist/utils/box.js.map +0 -7
  899. package/dist/utils/bridgeElevation.js +0 -2
  900. package/dist/utils/bridgeElevation.js.map +0 -7
  901. package/dist/utils/build.js +0 -2
  902. package/dist/utils/build.js.map +0 -7
  903. package/dist/utils/cameraControls.js +0 -2
  904. package/dist/utils/cameraControls.js.map +0 -7
  905. package/dist/utils/channel.js +0 -2
  906. package/dist/utils/channel.js.map +0 -7
  907. package/dist/utils/collider.js +0 -2
  908. package/dist/utils/collider.js.map +0 -7
  909. package/dist/utils/colliders.js +0 -2
  910. package/dist/utils/colliders.js.map +0 -7
  911. package/dist/utils/computeBounds.js +0 -2
  912. package/dist/utils/computeBounds.js.map +0 -7
  913. package/dist/utils/conformModelToTerrain.js +0 -2
  914. package/dist/utils/conformModelToTerrain.js.map +0 -7
  915. package/dist/utils/createMesh.js +0 -2
  916. package/dist/utils/createMesh.js.map +0 -7
  917. package/dist/utils/createProgram.js +0 -3
  918. package/dist/utils/createProgram.js.map +0 -7
  919. package/dist/utils/decodeDirectory.js +0 -2
  920. package/dist/utils/decodeDirectory.js.map +0 -7
  921. package/dist/utils/decodeHeader.js +0 -2
  922. package/dist/utils/decodeHeader.js.map +0 -7
  923. package/dist/utils/decodeModel.js +0 -2
  924. package/dist/utils/decodeModel.js.map +0 -7
  925. package/dist/utils/decompress.js +0 -2
  926. package/dist/utils/decompress.js.map +0 -7
  927. package/dist/utils/destroyTexture.js +0 -2
  928. package/dist/utils/destroyTexture.js.map +0 -7
  929. package/dist/utils/disposeMesh.js +0 -2
  930. package/dist/utils/disposeMesh.js.map +0 -7
  931. package/dist/utils/drawGeometry.js +0 -2
  932. package/dist/utils/drawGeometry.js.map +0 -7
  933. package/dist/utils/elevationWGSL.js +0 -24
  934. package/dist/utils/elevationWGSL.js.map +0 -7
  935. package/dist/utils/emptyNode.js +0 -2
  936. package/dist/utils/emptyNode.js.map +0 -7
  937. package/dist/utils/endZoom.js +0 -2
  938. package/dist/utils/endZoom.js.map +0 -7
  939. package/dist/utils/findFeature.js +0 -2
  940. package/dist/utils/findFeature.js.map +0 -7
  941. package/dist/utils/geometry.js +0 -1
  942. package/dist/utils/geometry.js.map +0 -7
  943. package/dist/utils/getElevation.js +0 -2
  944. package/dist/utils/getElevation.js.map +0 -7
  945. package/dist/utils/getHeader.js +0 -2
  946. package/dist/utils/getHeader.js.map +0 -7
  947. package/dist/utils/getZxy.js +0 -2
  948. package/dist/utils/getZxy.js.map +0 -7
  949. package/dist/utils/glass.js +0 -2
  950. package/dist/utils/glass.js.map +0 -7
  951. package/dist/utils/headlight.js +0 -2
  952. package/dist/utils/headlight.js.map +0 -7
  953. package/dist/utils/hit.js +0 -2
  954. package/dist/utils/hit.js.map +0 -7
  955. package/dist/utils/horizontalPosition.js +0 -2
  956. package/dist/utils/horizontalPosition.js.map +0 -7
  957. package/dist/utils/horizontalRay.js +0 -2
  958. package/dist/utils/horizontalRay.js.map +0 -7
  959. package/dist/utils/hull.js +0 -2
  960. package/dist/utils/hull.js.map +0 -7
  961. package/dist/utils/initSunlight.js +0 -2
  962. package/dist/utils/initSunlight.js.map +0 -7
  963. package/dist/utils/initTerrain.js +0 -2
  964. package/dist/utils/initTerrain.js.map +0 -7
  965. package/dist/utils/initTraffic.js +0 -40
  966. package/dist/utils/initTraffic.js.map +0 -7
  967. package/dist/utils/initWalk.js +0 -2
  968. package/dist/utils/initWalk.js.map +0 -7
  969. package/dist/utils/intersectMeshes.js +0 -2
  970. package/dist/utils/intersectMeshes.js.map +0 -7
  971. package/dist/utils/isClockWise.js +0 -2
  972. package/dist/utils/isClockWise.js.map +0 -7
  973. package/dist/utils/lampPostGeometry.js +0 -2
  974. package/dist/utils/lampPostGeometry.js.map +0 -7
  975. package/dist/utils/lightGeometry.js +0 -2
  976. package/dist/utils/lightGeometry.js.map +0 -7
  977. package/dist/utils/lightGrid.js +0 -2
  978. package/dist/utils/lightGrid.js.map +0 -7
  979. package/dist/utils/limbs.js +0 -2
  980. package/dist/utils/limbs.js.map +0 -7
  981. package/dist/utils/loadModel.js +0 -2
  982. package/dist/utils/loadModel.js.map +0 -7
  983. package/dist/utils/loadSource.js +0 -2
  984. package/dist/utils/loadSource.js.map +0 -7
  985. package/dist/utils/loadTerrain.js +0 -2
  986. package/dist/utils/loadTerrain.js.map +0 -7
  987. package/dist/utils/mapCamera.js +0 -2
  988. package/dist/utils/mapCamera.js.map +0 -7
  989. package/dist/utils/materialShaders.js +0 -211
  990. package/dist/utils/materialShaders.js.map +0 -7
  991. package/dist/utils/mirror.js +0 -2
  992. package/dist/utils/mirror.js.map +0 -7
  993. package/dist/utils/moonPosition.js +0 -2
  994. package/dist/utils/moonPosition.js.map +0 -7
  995. package/dist/utils/moves.js +0 -2
  996. package/dist/utils/moves.js.map +0 -7
  997. package/dist/utils/nativeEvents.js +0 -2
  998. package/dist/utils/nativeEvents.js.map +0 -7
  999. package/dist/utils/nativeGeometry.js +0 -2
  1000. package/dist/utils/nativeGeometry.js.map +0 -7
  1001. package/dist/utils/nativeLayer.js +0 -2
  1002. package/dist/utils/nativeLayer.js.map +0 -7
  1003. package/dist/utils/nodeMatrix.js +0 -2
  1004. package/dist/utils/nodeMatrix.js.map +0 -7
  1005. package/dist/utils/onAdd3DLayer.js +0 -2
  1006. package/dist/utils/onAdd3DLayer.js.map +0 -7
  1007. package/dist/utils/onAddSun.js +0 -2
  1008. package/dist/utils/onAddSun.js.map +0 -7
  1009. package/dist/utils/onClick.js +0 -2
  1010. package/dist/utils/onClick.js.map +0 -7
  1011. package/dist/utils/onMapChange.js +0 -2
  1012. package/dist/utils/onMapChange.js.map +0 -7
  1013. package/dist/utils/onPMTileAdd.js +0 -2
  1014. package/dist/utils/onPMTileAdd.js.map +0 -7
  1015. package/dist/utils/onPMTileRemove.js +0 -2
  1016. package/dist/utils/onPMTileRemove.js.map +0 -7
  1017. package/dist/utils/onPointerLeave.js +0 -2
  1018. package/dist/utils/onPointerLeave.js.map +0 -7
  1019. package/dist/utils/onPointerMove.js +0 -2
  1020. package/dist/utils/onPointerMove.js.map +0 -7
  1021. package/dist/utils/onRemove3DLayer.js +0 -2
  1022. package/dist/utils/onRemove3DLayer.js.map +0 -7
  1023. package/dist/utils/onRemoveSun.js +0 -2
  1024. package/dist/utils/onRemoveSun.js.map +0 -7
  1025. package/dist/utils/onTerrainAdd.js +0 -2
  1026. package/dist/utils/onTerrainAdd.js.map +0 -7
  1027. package/dist/utils/onTerrainChange.js +0 -2
  1028. package/dist/utils/onTerrainChange.js.map +0 -7
  1029. package/dist/utils/onTerrainRemove.js +0 -2
  1030. package/dist/utils/onTerrainRemove.js.map +0 -7
  1031. package/dist/utils/onZoomAnim.js +0 -2
  1032. package/dist/utils/onZoomAnim.js.map +0 -7
  1033. package/dist/utils/paints.js +0 -2
  1034. package/dist/utils/paints.js.map +0 -7
  1035. package/dist/utils/parseColor.js +0 -2
  1036. package/dist/utils/parseColor.js.map +0 -7
  1037. package/dist/utils/parts.js +0 -2
  1038. package/dist/utils/parts.js.map +0 -7
  1039. package/dist/utils/projectCelestialBody.js +0 -2
  1040. package/dist/utils/projectCelestialBody.js.map +0 -7
  1041. package/dist/utils/pump.js +0 -2
  1042. package/dist/utils/pump.js.map +0 -7
  1043. package/dist/utils/rasterTiles.js +0 -2
  1044. package/dist/utils/rasterTiles.js.map +0 -7
  1045. package/dist/utils/raycast.js +0 -2
  1046. package/dist/utils/raycast.js.map +0 -7
  1047. package/dist/utils/read.js +0 -2
  1048. package/dist/utils/read.js.map +0 -7
  1049. package/dist/utils/readAccessor.js +0 -2
  1050. package/dist/utils/readAccessor.js.map +0 -7
  1051. package/dist/utils/releaseArea.js +0 -2
  1052. package/dist/utils/releaseArea.js.map +0 -7
  1053. package/dist/utils/removeRasterTile.js +0 -2
  1054. package/dist/utils/removeRasterTile.js.map +0 -7
  1055. package/dist/utils/render.js +0 -15
  1056. package/dist/utils/render.js.map +0 -7
  1057. package/dist/utils/renderSunlight.js +0 -13
  1058. package/dist/utils/renderSunlight.js.map +0 -7
  1059. package/dist/utils/renderers.js +0 -2
  1060. package/dist/utils/renderers.js.map +0 -7
  1061. package/dist/utils/resizeSunlight.js +0 -2
  1062. package/dist/utils/resizeSunlight.js.map +0 -7
  1063. package/dist/utils/roofCoverage.js +0 -2
  1064. package/dist/utils/roofCoverage.js.map +0 -7
  1065. package/dist/utils/routeGeometry.js +0 -2
  1066. package/dist/utils/routeGeometry.js.map +0 -7
  1067. package/dist/utils/scheduledTrips.js +0 -2
  1068. package/dist/utils/scheduledTrips.js.map +0 -7
  1069. package/dist/utils/setGeoJSONData.js +0 -2
  1070. package/dist/utils/setGeoJSONData.js.map +0 -7
  1071. package/dist/utils/setHighlight.js +0 -2
  1072. package/dist/utils/setHighlight.js.map +0 -7
  1073. package/dist/utils/setPMTileOpacity.js +0 -2
  1074. package/dist/utils/setPMTileOpacity.js.map +0 -7
  1075. package/dist/utils/setPMTileZIndex.js +0 -2
  1076. package/dist/utils/setPMTileZIndex.js.map +0 -7
  1077. package/dist/utils/setParent.js +0 -2
  1078. package/dist/utils/setParent.js.map +0 -7
  1079. package/dist/utils/setTerrainHeight.js +0 -2
  1080. package/dist/utils/setTerrainHeight.js.map +0 -7
  1081. package/dist/utils/setVertexColor.js +0 -2
  1082. package/dist/utils/setVertexColor.js.map +0 -7
  1083. package/dist/utils/showFeature.js +0 -2
  1084. package/dist/utils/showFeature.js.map +0 -7
  1085. package/dist/utils/sizes.js +0 -2
  1086. package/dist/utils/sizes.js.map +0 -7
  1087. package/dist/utils/skin.js +0 -2
  1088. package/dist/utils/skin.js.map +0 -7
  1089. package/dist/utils/solarPosition.js +0 -2
  1090. package/dist/utils/solarPosition.js.map +0 -7
  1091. package/dist/utils/sortMeshes.js +0 -2
  1092. package/dist/utils/sortMeshes.js.map +0 -7
  1093. package/dist/utils/speed.js +0 -2
  1094. package/dist/utils/speed.js.map +0 -7
  1095. package/dist/utils/startZoom.js +0 -2
  1096. package/dist/utils/startZoom.js.map +0 -7
  1097. package/dist/utils/taillight.js +0 -2
  1098. package/dist/utils/taillight.js.map +0 -7
  1099. package/dist/utils/terrainAtlas.js +0 -2
  1100. package/dist/utils/terrainAtlas.js.map +0 -7
  1101. package/dist/utils/terrainElevation.js +0 -2
  1102. package/dist/utils/terrainElevation.js.map +0 -7
  1103. package/dist/utils/terrainGrid.js +0 -2
  1104. package/dist/utils/terrainGrid.js.map +0 -7
  1105. package/dist/utils/textureSampler.js +0 -2
  1106. package/dist/utils/textureSampler.js.map +0 -7
  1107. package/dist/utils/tileId.js +0 -2
  1108. package/dist/utils/tileId.js.map +0 -7
  1109. package/dist/utils/toLanes.js +0 -2
  1110. package/dist/utils/toLanes.js.map +0 -7
  1111. package/dist/utils/toSRGB.js +0 -2
  1112. package/dist/utils/toSRGB.js.map +0 -7
  1113. package/dist/utils/tooltip.js +0 -3
  1114. package/dist/utils/tooltip.js.map +0 -7
  1115. package/dist/utils/traffic.js +0 -2
  1116. package/dist/utils/traffic.js.map +0 -7
  1117. package/dist/utils/traverse.js +0 -2
  1118. package/dist/utils/traverse.js.map +0 -7
  1119. package/dist/utils/treeGeometry.js +0 -2
  1120. package/dist/utils/treeGeometry.js.map +0 -7
  1121. package/dist/utils/triangulate.js +0 -2
  1122. package/dist/utils/triangulate.js.map +0 -7
  1123. package/dist/utils/tripsAt.js +0 -2
  1124. package/dist/utils/tripsAt.js.map +0 -7
  1125. package/dist/utils/types.js +0 -2
  1126. package/dist/utils/types.js.map +0 -7
  1127. package/dist/utils/underEntry.js +0 -2
  1128. package/dist/utils/underEntry.js.map +0 -7
  1129. package/dist/utils/update.js +0 -2
  1130. package/dist/utils/update.js.map +0 -7
  1131. package/dist/utils/updateArea.js +0 -2
  1132. package/dist/utils/updateArea.js.map +0 -7
  1133. package/dist/utils/updateCamera.js +0 -2
  1134. package/dist/utils/updateCamera.js.map +0 -7
  1135. package/dist/utils/updatePointLights.js +0 -2
  1136. package/dist/utils/updatePointLights.js.map +0 -7
  1137. package/dist/utils/updateWorldMatrix.js +0 -2
  1138. package/dist/utils/updateWorldMatrix.js.map +0 -7
  1139. package/dist/utils/vehicleOffsets.js +0 -2
  1140. package/dist/utils/vehicleOffsets.js.map +0 -7
  1141. package/dist/utils/vehicles.js +0 -2
  1142. package/dist/utils/vehicles.js.map +0 -7
  1143. package/dist/utils/vertexNormals.js +0 -2
  1144. package/dist/utils/vertexNormals.js.map +0 -7
  1145. package/dist/utils/walk.js +0 -2
  1146. package/dist/utils/walk.js.map +0 -7
  1147. package/dist/utils/white.js +0 -2
  1148. package/dist/utils/white.js.map +0 -7
  1149. package/dist/utils/worldLights.js +0 -2
  1150. package/dist/utils/worldLights.js.map +0 -7
  1151. package/dist/utils/wrap.js +0 -2
  1152. package/dist/utils/wrap.js.map +0 -7
  1153. package/src/utils/CELL.js +0 -4
  1154. package/src/utils/addBridges.js +0 -66
  1155. package/src/utils/addRasterTile.js +0 -112
  1156. package/src/utils/along.js +0 -9
  1157. package/src/utils/atmosphere.js +0 -20
  1158. package/src/utils/attach.js +0 -255
  1159. package/src/utils/bindSunlight.js +0 -12
  1160. package/src/utils/box.js +0 -1
  1161. package/src/utils/bridgeElevation.js +0 -18
  1162. package/src/utils/build.js +0 -20
  1163. package/src/utils/cameraControls.js +0 -287
  1164. package/src/utils/collider.js +0 -62
  1165. package/src/utils/colliders.js +0 -2
  1166. package/src/utils/computeBounds.js +0 -17
  1167. package/src/utils/conformModelToTerrain.js +0 -69
  1168. package/src/utils/createMesh.js +0 -31
  1169. package/src/utils/createProgram.js +0 -92
  1170. package/src/utils/decodeDirectory.js +0 -40
  1171. package/src/utils/decodeHeader.js +0 -15
  1172. package/src/utils/decodeModel.js +0 -43
  1173. package/src/utils/decompress.js +0 -5
  1174. package/src/utils/destroyTexture.js +0 -7
  1175. package/src/utils/disposeMesh.js +0 -13
  1176. package/src/utils/drawGeometry.js +0 -122
  1177. package/src/utils/elevationWGSL.js +0 -27
  1178. package/src/utils/emptyNode.js +0 -9
  1179. package/src/utils/endZoom.js +0 -15
  1180. package/src/utils/findFeature.js +0 -49
  1181. package/src/utils/geometry.js +0 -2
  1182. package/src/utils/getElevation.js +0 -10
  1183. package/src/utils/getHeader.js +0 -9
  1184. package/src/utils/getZxy.js +0 -76
  1185. package/src/utils/glass.js +0 -1
  1186. package/src/utils/hit.js +0 -41
  1187. package/src/utils/horizontalPosition.js +0 -16
  1188. package/src/utils/hull.js +0 -1
  1189. package/src/utils/initSunlight.js +0 -9
  1190. package/src/utils/initTerrain.js +0 -19
  1191. package/src/utils/initTraffic.js +0 -93
  1192. package/src/utils/initWalk.js +0 -72
  1193. package/src/utils/intersectMeshes.js +0 -121
  1194. package/src/utils/isClockWise.js +0 -12
  1195. package/src/utils/lampPostGeometry.js +0 -26
  1196. package/src/utils/lightGeometry.js +0 -22
  1197. package/src/utils/lightGrid.js +0 -50
  1198. package/src/utils/limbs.js +0 -9
  1199. package/src/utils/loadModel.js +0 -217
  1200. package/src/utils/loadSource.js +0 -17
  1201. package/src/utils/loadTerrain.js +0 -65
  1202. package/src/utils/mapCamera.js +0 -432
  1203. package/src/utils/materialShaders.js +0 -243
  1204. package/src/utils/mirror.js +0 -6
  1205. package/src/utils/moonPosition.js +0 -17
  1206. package/src/utils/nativeEvents.js +0 -77
  1207. package/src/utils/nativeGeometry.js +0 -131
  1208. package/src/utils/nativeLayer.js +0 -317
  1209. package/src/utils/nodeMatrix.js +0 -22
  1210. package/src/utils/onAdd3DLayer.js +0 -31
  1211. package/src/utils/onAddSun.js +0 -147
  1212. package/src/utils/onClick.js +0 -13
  1213. package/src/utils/onMapChange.js +0 -16
  1214. package/src/utils/onPMTileAdd.js +0 -15
  1215. package/src/utils/onPMTileRemove.js +0 -8
  1216. package/src/utils/onPointerLeave.js +0 -11
  1217. package/src/utils/onPointerMove.js +0 -15
  1218. package/src/utils/onRemove3DLayer.js +0 -78
  1219. package/src/utils/onRemoveSun.js +0 -3
  1220. package/src/utils/onTerrainAdd.js +0 -18
  1221. package/src/utils/onTerrainChange.js +0 -13
  1222. package/src/utils/onTerrainRemove.js +0 -40
  1223. package/src/utils/onZoomAnim.js +0 -14
  1224. package/src/utils/parts.js +0 -16
  1225. package/src/utils/projectCelestialBody.js +0 -13
  1226. package/src/utils/pump.js +0 -226
  1227. package/src/utils/rasterTiles.js +0 -285
  1228. package/src/utils/raycast.js +0 -60
  1229. package/src/utils/read.js +0 -29
  1230. package/src/utils/readAccessor.js +0 -68
  1231. package/src/utils/releaseArea.js +0 -34
  1232. package/src/utils/removeRasterTile.js +0 -13
  1233. package/src/utils/render.js +0 -406
  1234. package/src/utils/renderSunlight.js +0 -170
  1235. package/src/utils/resizeSunlight.js +0 -15
  1236. package/src/utils/roofCoverage.js +0 -47
  1237. package/src/utils/routeGeometry.js +0 -22
  1238. package/src/utils/scheduledTrips.js +0 -29
  1239. package/src/utils/setGeoJSONData.js +0 -11
  1240. package/src/utils/setHighlight.js +0 -13
  1241. package/src/utils/setPMTileOpacity.js +0 -7
  1242. package/src/utils/setPMTileZIndex.js +0 -7
  1243. package/src/utils/setTerrainHeight.js +0 -10
  1244. package/src/utils/setVertexColor.js +0 -14
  1245. package/src/utils/showFeature.js +0 -27
  1246. package/src/utils/sizes.js +0 -1
  1247. package/src/utils/skin.js +0 -2
  1248. package/src/utils/solarPosition.js +0 -17
  1249. package/src/utils/sortMeshes.js +0 -12
  1250. package/src/utils/startZoom.js +0 -5
  1251. package/src/utils/terrainAtlas.js +0 -21
  1252. package/src/utils/terrainElevation.js +0 -20
  1253. package/src/utils/terrainGrid.js +0 -23
  1254. package/src/utils/textureSampler.js +0 -10
  1255. package/src/utils/tileId.js +0 -18
  1256. package/src/utils/toLanes.js +0 -7
  1257. package/src/utils/tooltip.js +0 -6
  1258. package/src/utils/traffic.js +0 -315
  1259. package/src/utils/traverse.js +0 -6
  1260. package/src/utils/treeGeometry.js +0 -45
  1261. package/src/utils/triangulate.js +0 -100
  1262. package/src/utils/tripsAt.js +0 -16
  1263. package/src/utils/underEntry.js +0 -17
  1264. package/src/utils/update.js +0 -18
  1265. package/src/utils/updateArea.js +0 -40
  1266. package/src/utils/updateCamera.js +0 -32
  1267. package/src/utils/updatePointLights.js +0 -38
  1268. package/src/utils/updateWorldMatrix.js +0 -47
  1269. package/src/utils/vehicleOffsets.js +0 -8
  1270. package/src/utils/vehicles.js +0 -65
  1271. package/src/utils/vertexNormals.js +0 -30
  1272. package/src/utils/walk.js +0 -187
  1273. package/src/utils/worldLights.js +0 -25
  1274. /package/src/{utils → collision}/horizontalRay.js +0 -0
  1275. /package/src/{utils → globals}/headlight.js +0 -0
  1276. /package/src/{utils → globals}/moves.js +0 -0
  1277. /package/src/{utils → globals}/paints.js +0 -0
  1278. /package/src/{utils → globals}/renderers.js +0 -0
  1279. /package/src/{utils → globals}/speed.js +0 -0
  1280. /package/src/{utils → globals}/taillight.js +0 -0
  1281. /package/src/{utils → globals}/types.js +0 -0
  1282. /package/src/{utils → globals}/white.js +0 -0
  1283. /package/src/{utils → scene}/setParent.js +0 -0
@@ -1,2 +1,5 @@
1
- var f=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Map.prototype)),k=Math.PI/180,_=e=>Array.isArray(e)?new L.Point(e[0],e[1]):new L.Point(e.x,e.y);L.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});function H(e){let t=e.getBearing()*k,i=e.getPitch()*k;return[Math.cos(t),Math.sin(t),Math.cos(i),Math.sin(i)]}function B(e,t,i=!1,a=!1){let n=e.getSize().divideBy(2),o=e.getSize().y*1.5;if(!o)return _(t);let[s,r,d,h]=H(e),l=_(t).subtract(n);if(i){let p=e.getSize().y*e.options.pitchMaxDistance,P=d*o+h*l.y,y=P>0?l.y*o/P:-p;a&&(y=Math.max(-p,Math.min(p,y)));let v=l.x*(o-h*y)/o;return new L.Point(s*v+r*y,-r*v+s*y).add(n)}let u=s*l.x-r*l.y,g=r*l.x+s*l.y,c=o/(o-h*g);return new L.Point(u*c,d*g*c).add(n)}function R(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function I(e,t,i=!1){let a=e._cameraView;if(!a)return t;let n=e.getSize().divideBy(2),o=e.getZoomScale(a.zoom),s=e.project(e.getCenter(),a.zoom).subtract(e.project(a.center,a.zoom));return i?t.subtract(n).subtract(s).divideBy(o).add(n):t.subtract(n).multiplyBy(o).add(s).add(n)}function Z(e,t=[0,0]){let i=_(t).divideBy(2),a=e.getSize().subtract(i);return new L.Bounds([[i.x,i.y],[a.x,i.y],[i.x,a.y],[a.x,a.y]].map(n=>B(e,n,!0,!0)))}function V(e,t,i={}){t=t.getBounds?t.getBounds():t instanceof L.LatLngBounds?t:new L.LatLngBounds(t);let a=e.getZoom()??0,n=e.getSize().divideBy(2),o=e.getSize().y*1.5,s=_(i.paddingTopLeft||i.padding||[0,0]).subtract(n),r=n.subtract(_(i.paddingBottomRight||i.padding||[0,0])),[d,h,l,u]=H(e),g=e.getSize().y*e.options.pitchMaxDistance,c=m=>l*o+u*m>0?Math.max(-g,Math.min(g,m*o/(l*o+u*m))):-g,p=c(s.y),P=c(r.y),y=e.project(t.getNorthWest(),a).add(e.project(t.getSouthEast(),a)).divideBy(2),v=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()].map(m=>{let S=e.project(m,a).subtract(y);return new L.Point(d*S.x-h*S.y,h*S.x+d*S.y)}),O=Math.min(...v.map(m=>m.y)),N=Math.max(...v.map(m=>m.y)),j=s.x*u/o,z=r.x*u/o,T=z-j,C=Math.min(...v.map(m=>m.x+j*m.y)),U=Math.max(...v.map(m=>m.x+z*m.y)),X=Math.min((P-p)/(N-O),(r.x-s.x-T*p)/(U-C-T*O)),x=e.getScaleZoom(X,a),A=e.options.zoomSnap;if(A&&(x=Math.floor(Math.round(x/(A/100))/100)*A),x=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),i.maxZoom??1/0,x)),!Number.isFinite(x))return{center:t.getCenter(),zoom:x};let w=e.getZoomScale(x,a),$=N*w-P,W=O*w-p,Y=Math.max($,T?(w*(U-C)-r.x+s.x)/T:$),D=(Math.min(W,Y)+W)/2,q=(w*(C+U)-s.x-r.x-(j+z)*D)/2,Q=y.add(new L.Point(d*q+h*D,-h*q+d*D).divideBy(w));return{center:e.unproject(Q,a),zoom:x}}function J(){let e=this.getSize().y,t=this.getPitch()*k,i=e*this.options.pitchMaxDistance,a=e*1.5,n=e/2-i*Math.cos(t)*a/(a+Math.sin(t)*i);n>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(n))}px`,this._pitchSky.style.display=n>0?"":"none")}L.Map.include({getBearing(){return this._cameraBearing??0},getPitch(){return this._cameraPitch??0},_stopPitchBearingAnimation(){return cancelAnimationFrame(this._cameraFrame),this._cameraFrame=null,this},_setPitchAndBearing(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");let i=this.getPitch(),a=this.getBearing();return this._cameraPitch=Math.max(0,Math.min(85,e)),this._cameraBearing=(t%360+360)%360,this._loaded&&(J.call(this),a!==this.getBearing()&&this.fire("rotate",{bearing:this.getBearing()}),i!==this.getPitch()&&this.fire("pitch",{pitch:this.getPitch()})),this},_animateCamera(e,t,i={}){if(cancelAnimationFrame(this._cameraFrame),!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");if(!i.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return this._setPitchAndBearing(e,t);let a=i.duration??.3;if(!Number.isFinite(a)||a<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),o=this.getPitch(),s=this.getBearing(),r=((t-s)%360+540)%360-180,d=h=>{let l=a?Math.min(1,(h-n)/(a*1e3)):1,u=1-(1-l)**3;this._setPitchAndBearing(o+(Math.max(0,Math.min(85,e))-o)*u,s+r*u),l<1&&(this._cameraFrame=requestAnimationFrame(d))};return this._cameraFrame=requestAnimationFrame(d),this},setBearing(e,t){return this._animateCamera(this.getPitch(),e,t)},setPitch(e,t){return this._animateCamera(e,this.getBearing(),t)},resetNorth(e={animate:!0}){return this.setBearing(0,e)},resetNorthPitch(e={animate:!0}){return this._animateCamera(0,0,e)},layerPointToContainerPoint(e){return B(this,I(this,f.layerPointToContainerPoint.call(this,e)))},containerPointToLayerPoint(e){return f.containerPointToLayerPoint.call(this,I(this,B(this,e,!0),!0))},_getCenterLayerPoint(){return f.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))},_updateCameraOverlays(){for(let e of Object.values(this._layers))e instanceof L.Marker?e.update():(e instanceof L.Popup||e instanceof L.Tooltip)&&e._updatePosition()},panBy(e,t){let i=this.getSize().divideBy(2),a=i.subtract(B(this,i.subtract(_(e)),!0));return f.panBy.call(this,a,t)},setZoomAround(e,t,i){if(!this.getPitch()&&!this.getBearing())return f.setZoomAround.call(this,e,t,i);t=this._limitZoom(t);let a=this.getZoomScale(t),n=this.getSize().divideBy(2),o=e instanceof L.Point?e:this.latLngToContainerPoint(e),s=this.containerPointToLayerPoint(n),r=this.containerPointToLayerPoint(o),d=s.add(r.subtract(s).multiplyBy(1-1/a));return this.setView(this.layerPointToLatLng(d),t,{zoom:i})},panInside(e,t={}){if(!this.getPitch()&&!this.getBearing())return f.panInside.call(this,e,t);let i=_(t.paddingTopLeft||t.padding||[0,0]),a=this.getSize().subtract(_(t.paddingBottomRight||t.padding||[0,0])),n=this.latLngToContainerPoint(e),o=new L.Point(Math.max(i.x,Math.min(a.x,n.x)),Math.max(i.y,Math.min(a.y,n.y)));if(o.equals(n))return this;let s=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(o));return this.panTo(this.unproject(this.project(this.getCenter()).add(s)),t)},_limitCenter(e,t,i){if(!i||!this._loaded||!this.getPitch()&&!this.getBearing())return f._limitCenter.call(this,e,t,i);let a=this.getSize().divideBy(2),n=Z(this),o=this.project(e,t),s=new L.Bounds(o.add(n.min.subtract(a)),o.add(n.max.subtract(a))),r=this._getBoundsOffset(s,i,t);return Math.abs(r.x)<=1&&Math.abs(r.y)<=1?e:this.unproject(o.add(r),t)},_limitOffset(e,t){if(!t||!this.getPitch()&&!this.getBearing())return f._limitOffset.call(this,e,t);let i=this.getSize().divideBy(2),a=i.subtract(B(this,i.subtract(e),!0)),n=this.project(this.getCenter()),o=this.project(this._limitCenter(this.unproject(n.add(a)),this.getZoom(),t));return i.subtract(B(this,i.subtract(o.subtract(n))))},_getBoundsCenterZoom(e,t){return this.getPitch()||this.getBearing()?V(this,e,t):f._getBoundsCenterZoom.call(this,e,t)},getBoundsZoom(e,t,i){if(!this.getPitch()&&!this.getBearing())return f.getBoundsZoom.call(this,e,t,i);if(!t)return V(this,e,{padding:_(i||[0,0]).divideBy(2)}).zoom;e=e instanceof L.LatLngBounds?e:new L.LatLngBounds(e);let a=Z(this,i).getSize(),n=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),o=this.getScaleZoom(Math.max(a.x/n.x,a.y/n.y)),s=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),s?Math.ceil(o/s)*s:o))},_tryAnimatedPan(e,t){let i=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(i)?!1:(f.panBy.call(this,i,t),!0)},getBounds(){if(!this.getPitch()&&!this.getBearing())return f.getBounds.call(this);let e=Z(this),t=new L.LatLngBounds;for(let i of[e.min,e.max]){let a=f.containerPointToLayerPoint.call(this,I(this,i,!0));t.extend(this.layerPointToLatLng(a))}return t}});L.Map.addInitHook(function(){if(!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=[".leaflet-marker-icon",".leaflet-marker-shadow",".leaflet-popup",".leaflet-tooltip"].map(t=>`.leaflet-camera-zoom ${t}`).join(",")+"{transition:none!important}",document.head.append(e)}this._setPitchAndBearing(this.options.pitch,this.options.bearing),this.on("load resize pitch",J),this.on("rotate pitch",()=>{this.options.maxBounds&&this._panInsideMaxBounds()}),this.once("unload",()=>{cancelAnimationFrame(this._cameraFrame),this._pitchSky?.remove()}),this.whenReady(()=>{let e=this.dragging?._draggable;if(!e)return;let t=()=>{if(!this.getPitch()&&!this.getBearing())return;let i=this.getSize().divideBy(2),a=e._newPos.subtract(e._startPos),n=i.subtract(B(this,i.subtract(a),!0));e._newPos=e._startPos.add(n)};e.on("predrag",t),this.once("unload",()=>e.off("predrag",t))}),(this.options.rotate||this.options.trackContainerMutation)&&(this.cameraReady=import("./utils/cameraControls.js").then(({cameraControls:e})=>{this._container?._leaflet_id&&e(this)}),this.cameraReady.catch(e=>this.fire("error",{error:e})))});var b=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Marker.prototype));L.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});L.Marker.include({setIcon(e){e instanceof L.DivIcon||(e.options.crossOrigin||=!0);let t=b.setIcon.call(this,e);return this._map&&!(e instanceof L.DivIcon)&&this._initNativeGPU(this._map),t},setRotation(e){if(!Number.isFinite(e))throw new TypeError("Marker rotation must be finite");return this.options.rotation=e,this.update(),this._nativeGPU?.refresh?.(),this},_cameraIconPoint(e,t){let i=this.options.rotation+(this.options.rotateWithView?this._map.getBearing()*k:0);this.options.keepUpright&&Math.cos(i)<0&&(i+=Math.PI);let a=this.options.scale;return new L.Point((e*Math.cos(i)-t*Math.sin(i))*a,(e*Math.sin(i)+t*Math.cos(i))*a)},getEvents(){return{...b.getEvents.call(this),rotate:this.update,pitch:this.update,move:this.update}},_setPos(e){b._setPos.call(this,R(this._map,e));for(let[t,i]of[[this._icon,"iconAnchor"],[this._shadow,"shadowAnchor"]]){if(!t)continue;let a=this._cameraIconPoint(1,0),n=this.options.icon.options,o=n[i]||n.iconAnchor;t.style.transformOrigin=o?`${o.x??o[0]}px ${o.y??o[1]}px`:"center",t.style.transform+=` rotate(${Math.atan2(a.y,a.x)}rad) scale(${this.options.scale})`}},_updateZIndex(e){b._updateZIndex.call(this,e);let t=this._cameraZIndexOffset!==e;this._cameraZIndexOffset=e,t&&this._nativeGPU?.refresh?.()},_initInteraction(){let e=b._initInteraction.call(this);return tt.call(this),e}});function tt(){if(!this.dragging||this.dragging._cameraDrag)return;let e=this.dragging,t=e._onDrag,i=e._adjustPan;e._onDrag=function(n){let o=this._marker._map,s=L.DomUtil.getPosition(this._marker._icon).add(o._getMapPanePos()),r=o.containerPointToLayerPoint(s),d=this._marker._icon;L.DomUtil.setPosition(d,r),t.call(this,n),this._marker._setPos(r)},e._adjustPan=function(n){let o=this._marker,s=o._map;if(!s.getPitch()&&!s.getBearing())return i.call(this,n);let r=L.DomUtil.getPosition(o._icon).add(s._getMapPanePos()),d=s.getSize(),h=_(o.options.autoPanPadding),l=o.options.autoPanSpeed,u=new L.Point((Math.max(0,r.x-d.x+h.x)-Math.max(0,h.x-r.x))/Math.max(1,h.x)*l,(Math.max(0,r.y-d.y+h.y)-Math.max(0,h.y-r.y))/Math.max(1,h.y)*l);if(!u.x&&!u.y)return;let g=s._getMapPanePos();s.panBy(u,{animate:!1});let c=g.subtract(s._getMapPanePos());this._draggable._newPos._add(c),this._draggable._startPos._add(c),L.DomUtil.setPosition(o._icon,this._draggable._newPos),this._onDrag(n),this._panRequest=requestAnimationFrame(()=>this._adjustPan(n))},e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e)),e._cameraDrag=!0}for(let e of[L.Popup,L.Tooltip]){let t=e.prototype.getEvents;e.include({getEvents(){return{...t.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}})}var et=L.Popup.prototype._updatePosition,it=L.Popup.prototype._adjustPan;L.Popup.include({_adjustPan(){let e=this._map;if(!e.getPitch()&&!e.getBearing())return it.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),i=e.getContainer().getBoundingClientRect(),a=_(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),n=e.getSize().subtract(_(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),o=t.left-i.left,s=t.top-i.top,r=t.right-i.left,d=t.bottom-i.top,h=Math.min(0,o-a.x)||Math.max(0,r-n.x),l=Math.min(0,s-a.y)||Math.max(0,d-n.y);if(!h&&!l)return;this.options.keepInView&&(this._autopanning=!0);let u=e.latLngToContainerPoint(this._latlng).subtract(new L.Point(h,l)),g=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(u));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(g)))},_updatePosition(){if(et.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=R(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`)}});var nt=L.Tooltip.prototype._setPosition;L.Tooltip.include({_setPosition(e){nt.call(this,e);let t=R(this._map,e).subtract(e);L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(t))}});var at=L.GridLayer.prototype._getTiledPixelBounds,ot=L.GridLayer.prototype.getEvents;L.GridLayer.include({getEvents(){let e=ot.call(this);return this._cameraGridUpdate||=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),{...e,rotate:this._cameraGridUpdate,pitch:this._cameraGridUpdate}},_getTiledPixelBounds(e){if(!this._map.getBearing()&&!this._map.getPitch())return at.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))}});var G=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Layer.prototype)),E=Promise.resolve(),M,st,F,K;L.Layer._renderers=new WeakMap;L.Layer._nextId=0;L.Layer.include({_layerAdd(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)),G._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&this._initNativeGPU(e.target)},_initNativeGPU(e){if(this._nativeGPU)return;if(!document.getElementById("leaflet-webgpu-targets")){let i=document.createElement("style");i.id="leaflet-webgpu-targets",i.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(i)}let t=this._nativeGPU={source:this,map:e,hidden:new Set};t.hide=()=>{let i=this instanceof L.Marker&&this.options.icon instanceof L.DivIcon,a=[i?null:this._icon,i?null:this._shadow];for(let n of t.hidden)a.includes(n)||(n.classList.remove("leaflet-webgpu-target"),t.hidden.delete(n));for(let n of a)!n||t.hidden.has(n)||(n.classList.add("leaflet-webgpu-target"),t.hidden.add(n))},t.hide(),this.once("remove",()=>{this._nativeGPU===t&&(this._nativeGPU=null),t.dispose?.();for(let i of t.hidden)i.classList.remove("leaflet-webgpu-target")}),K||=import("./utils/nativeLayer.js"),this.ready=K.then(({nativeLayer:i})=>this._nativeGPU!==t?this:i(t)),this.ready.catch(i=>this.fire("error",{error:i}))},_init3D(e={}){let t=this,i=st||=Promise.all([import("./utils/onAdd3DLayer.js"),import("./utils/onRemove3DLayer.js"),import("./utils/updateArea.js"),import("./utils/onTerrainChange.js")]).then(([n,o,s,r])=>M={...n,...o,...s,...r});t._3d=!0,L.Util.setOptions(t,{ariaLabel:"3D scene",...e}),t.onAdd=n=>{if(M)return M.onAdd3DLayer(t,n);i.then(({onAdd3DLayer:o})=>{t._map===n&&o(t,n)}).catch(o=>t.fire("error",{error:o}))},t.onRemove=n=>{if(M)return M.onRemove3DLayer(t,n);i.then(({onRemove3DLayer:o})=>o(t,n)).catch(o=>t.fire("error",{error:o}))},t.getEvents=()=>{let n={};return t.url&&(n.moveend=n.zoomend=n.rotate=n.pitch=n.resize=()=>M?M.updateArea(t):i.then(({updateArea:o})=>o(t))),(t._geojson||t.url)&&(n.terrainchange=()=>M?M.onTerrainChange(t):i.then(({onTerrainChange:o})=>o(t))),n};let a=!t._geojson&&/\.(glb|gltf)(?:[?#]|$)/i.test(t.options.url);t.modelUrl=a?t.options.url:null,t.url=t.options.url&&!a&&!t._geojson?new URL(t.options.url,document.baseURI).href:null,t._directories=new Map,t.options.center&&(t.location=new L.LatLng(t.options.center[0],t.options.center[1])),t._areas=new Map,t._inflight=0,t._added=Promise.withResolvers(),queueMicrotask(async()=>{try{await i,t.root=(await import("./utils/emptyNode.js")).emptyNode(),t.raycaster={origin:[0,0,0],direction:[0,0,0]},(t.url||t._geojson)&&(t.group=t.root,t.url&&(t.header=await(await import("./utils/getHeader.js")).getHeader(t))),t._map&&(await(await import("./utils/attach.js")).attach(t,t._map),t._added.resolve()),t.modelUrl&&await(await import("./utils/loadModel.js")).loadModel(t),t._shared&&(await import("./utils/update.js")).update(t),t.fire("ready")}catch(n){t.fire("error",{error:n})}})},_initRaster(e){let t=this,[{read:i},{getHeader:a},{getZxy:n},{onPMTileAdd:o},{onPMTileRemove:s},{getRasterTileSize:r,updateRasterTiles:d},{setPMTileOpacity:h},{setPMTileZIndex:l},{emptyNode:u}]=F;t._read=(c,p,P)=>i(t,c,p,P),t.getHeader=()=>a(t),t.getZxy=(c,p,P,y)=>n(t,c,p,P,y),t.getTileSize=()=>r(),t.isLoading=()=>t._loadingTiles>0,t.setOpacity=c=>h(t,c),t.setZIndex=c=>l(t,c),t.onAdd=c=>o(t,c),t.onRemove=c=>s(t,c);let g=()=>d(t);t.getEvents=()=>({moveend:g,zoomend:g,rotate:g,pitch:g,resize:g}),e={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...e},L.Util.setOptions(t,e),t.root=u(),t._areas=new Map,t._rasterTiles=new Map,t._loadingTiles=0,t._added=Promise.withResolvers(),t.url=new URL(e.url,document.baseURI).href,t._directories=new Map,t.ready=Promise.resolve(t.options.archive||t).then(async c=>{let p=await c.getHeader();return t.options.archive=c,t.header=p,t.options.maxNativeZoom===void 0&&(t.options.maxNativeZoom=p.maxZoom),t.options.maxZoom=Math.max(t.options.minZoom||0,t.options.maxZoom),t.fire("ready"),t}).catch(c=>{throw t.fire("error",{error:c}),c})},initialize(e={}){if(Object.getPrototypeOf(this)!==L.Layer.prototype||!e.source){if(G.initialize)return G.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",...i},...a}=e,n={...i,...a};if(L.Util.setOptions(this,a),this._type=t,t==="3d"){this._init3D(n);return}if(t==="pmtiles"&&F){this._initRaster(n);return}this.onAdd=()=>{},this.onRemove=()=>{},E=E.catch(()=>{}).then(async()=>{switch(t){case"geojson":{let{setGeoJSONData:s}=await import("./utils/setGeoJSONData.js");return(r,d)=>{r._geojson=!0,r.setData=h=>s(r,h),r._init3D(d)}}case"pmtiles":return F=await Promise.all([import("./utils/read.js"),import("./utils/getHeader.js"),import("./utils/getZxy.js"),import("./utils/onPMTileAdd.js"),import("./utils/onPMTileRemove.js"),import("./utils/rasterTiles.js"),import("./utils/setPMTileOpacity.js"),import("./utils/setPMTileZIndex.js"),import("./utils/emptyNode.js")]),(s,r)=>s._initRaster(r);case"terrain":return(await import("./utils/initTerrain.js")).initTerrain;case"sunlight":return(await import("./utils/initSunlight.js")).initSunlight;case"traffic":return(await import("./utils/initTraffic.js")).initTraffic;case"walk":return(await import("./utils/initWalk.js")).initWalk;default:throw new Error(`Unknown layer type: ${t}`)}});let o=this.ready=E.then(s=>{let r=this._map;return r?.removeLayer(this),delete this.onAdd,delete this.onRemove,s(this,n),r?.addLayer(this),this.ready===o?this:this.ready});o.catch(s=>this.fire("error",{error:s}))}});L.Layer.addInitHook(function(){if(this instanceof L.Polyline||this instanceof L.CircleMarker){let e=()=>this._nativeGPU?.refresh?.();if(this.beforeAdd=this.onAdd=this.onRemove=this._updateBounds=()=>{},this.getEvents=()=>({}),this._renderer={options:{tolerance:0},_updatePath:e,_updateStyle:e,_bringToFront:()=>this._nativeGPU?.reorder?.(!0),_bringToBack:()=>this._nativeGPU?.reorder?.(!1)},this instanceof L.Polyline){let t=this.closestLayerPoint;this.closestLayerPoint=function(i){return this._project(),this._parts=this._rings,t.call(this,i)}}if(this instanceof L.Circle){let t=this.getBounds;this.getBounds=function(){return this._project(),t.call(this)}}}else if(this instanceof L.GridLayer){let e=this._initContainer;this._initContainer=function(){e.call(this),this._container.remove()},this._updateOpacity=function(){if(!this._map)return;let t=Date.now(),i=!1,a=!1;for(let n of Object.values(this._tiles||{}))!n.current||!n.loaded||(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?i=!0:n.active||(this._onOpaqueTile(n),n.active=!0,a=!0));a&&!this._noPrune&&this._pruneTiles(),this._nativeGPU?.refresh?.(),cancelAnimationFrame(this._fadeFrame),i&&(this._fadeFrame=requestAnimationFrame(()=>this._updateOpacity()))}}else this instanceof L.ImageOverlay&&!(this instanceof L.VideoOverlay)&&!(this instanceof L.SVGOverlay)&&(this.onAdd=function(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&queueMicrotask(()=>this.fire("load"))},this.onRemove=()=>{},this.getEvents=()=>({}),this._reset=()=>this._nativeGPU?.refresh?.())});
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&&lt(f,t,l,s),i&&lt(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&&lt(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});})();
2
5
  //# sourceMappingURL=leaflet-city-mapper.js.map