leaflet-city-mapper 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/README.md +22 -26
  2. package/cucumber.mjs +1 -1
  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 -3
  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 +4 -3
  13. package/src/archives/decodeDirectory.js +43 -25
  14. package/src/archives/decodeHeader.js +15 -11
  15. package/src/archives/decompress.js +7 -2
  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 +7 -3
  20. package/src/archives/getTileData.js +13 -0
  21. package/src/archives/getZxy.js +7 -63
  22. package/src/archives/loadSource.js +24 -10
  23. package/src/archives/read.js +12 -9
  24. package/src/archives/tileId.js +7 -3
  25. package/src/archives/varint.js +7 -3
  26. package/src/camera/angles.js +12 -4
  27. package/src/camera/animationPoint.js +4 -1
  28. package/src/camera/cameraMapReady.js +4 -1
  29. package/src/camera/cancelCameraAnimation.js +11 -7
  30. package/src/camera/cleanupCameraMap.js +7 -4
  31. package/src/camera/fitCameraBounds.js +33 -23
  32. package/src/camera/getBearing.js +5 -0
  33. package/src/camera/getPitch.js +5 -0
  34. package/src/camera/groundBounds.js +13 -6
  35. package/src/camera/initializeCameraMap.js +8 -3
  36. package/src/camera/mapAnimateCamera.js +20 -13
  37. package/src/camera/mapCamera.js +22 -42
  38. package/src/camera/mapContainerPointToLayerPoint.js +4 -2
  39. package/src/camera/mapGetBearing.js +4 -1
  40. package/src/camera/mapGetBounds.js +12 -6
  41. package/src/camera/mapGetBoundsCenterZoom.js +6 -3
  42. package/src/camera/mapGetBoundsZoom.js +17 -7
  43. package/src/camera/mapGetCenterLayerPoint.js +3 -2
  44. package/src/camera/mapGetPitch.js +4 -1
  45. package/src/camera/mapLayerPointToContainerPoint.js +3 -2
  46. package/src/camera/mapLimitCenter.js +12 -7
  47. package/src/camera/mapLimitOffset.js +6 -2
  48. package/src/camera/mapPanBy.js +3 -2
  49. package/src/camera/mapPanInside.js +16 -10
  50. package/src/camera/mapResetNorth.js +4 -1
  51. package/src/camera/mapResetNorthPitch.js +4 -1
  52. package/src/camera/mapSetBearing.js +3 -1
  53. package/src/camera/mapSetPitch.js +3 -1
  54. package/src/camera/mapSetPitchAndBearing.js +19 -11
  55. package/src/camera/mapSetZoomAround.js +12 -8
  56. package/src/camera/mapStopPitchBearingAnimation.js +3 -3
  57. package/src/camera/mapTryAnimatedPan.js +3 -2
  58. package/src/camera/mapUpdateCameraOverlays.js +3 -2
  59. package/src/camera/pointOf.js +4 -2
  60. package/src/camera/project.js +23 -16
  61. package/src/camera/runCameraAnimations.js +15 -12
  62. package/src/camera/scheduleCameraAnimation.js +9 -4
  63. package/src/camera/updateSky.js +20 -14
  64. package/src/cog/decodeCogTile.js +24 -0
  65. package/src/cog/finiteCogValues.js +5 -0
  66. package/src/cog/getCogAssetEntry.js +15 -0
  67. package/src/cog/getCogBase.js +10 -0
  68. package/src/cog/getCogHeader.js +3 -0
  69. package/src/cog/getCogProfile.js +16 -0
  70. package/src/cog/getCogTile.js +12 -0
  71. package/src/cog/getColorTile.js +25 -0
  72. package/src/cog/getElevationTile.js +16 -0
  73. package/src/cog/hasCogProjection.js +9 -0
  74. package/src/cog/initCog.js +7 -0
  75. package/src/cog/invalidCogFullResponse.js +3 -0
  76. package/src/cog/openCog.js +30 -0
  77. package/src/cog/openCogAsset.js +14 -0
  78. package/src/cog/readCog.js +25 -0
  79. package/src/cog/readCogBlock.js +8 -0
  80. package/src/cog/readCogBody.js +20 -0
  81. package/src/cog/readCogDirectories.js +20 -0
  82. package/src/cog/readCogDirectory.js +21 -0
  83. package/src/cog/readCogLevel.js +27 -0
  84. package/src/cog/readCogTag.js +15 -0
  85. package/src/cog/validCogDimensions.js +6 -0
  86. package/src/cog/validCogEncoding.js +5 -0
  87. package/src/cog/validCogGeoArrays.js +8 -0
  88. package/src/cog/validCogGrid.js +9 -0
  89. package/src/cog/validCogTileCoordinates.js +4 -0
  90. package/src/cog/validateCogContainer.js +9 -0
  91. package/src/cog/validateCogContentRange.js +8 -0
  92. package/src/cog/validateCogOffsets.js +10 -0
  93. package/src/cog/validateCogRange.js +7 -0
  94. package/src/cog/validateCogResponse.js +15 -0
  95. package/src/collision/collider.js +13 -20
  96. package/src/collision/hiddenLightHit.js +8 -0
  97. package/src/collision/indexTriangle.js +11 -0
  98. package/src/collision/intersectMeshes.js +32 -133
  99. package/src/collision/localRay.js +21 -0
  100. package/src/collision/mergeHits.js +11 -0
  101. package/src/collision/rayBounds.js +19 -0
  102. package/src/collision/readTriangle.js +20 -0
  103. package/src/collision/sortHits.js +5 -11
  104. package/src/collision/transformTriangle.js +9 -0
  105. package/src/collision/triangleDistance.js +21 -0
  106. package/src/collision/worldHit.js +18 -0
  107. package/src/controls/addCameraHandler.js +9 -0
  108. package/src/controls/adjustCameraDrag.js +7 -2
  109. package/src/controls/cameraControls.js +53 -22
  110. package/src/controls/cameraDragClick.js +3 -2
  111. package/src/controls/cameraDragContextMenu.js +3 -2
  112. package/src/controls/cameraDragDown.js +20 -17
  113. package/src/controls/cameraDragEnd.js +3 -2
  114. package/src/controls/cameraDragMove.js +11 -6
  115. package/src/controls/changeCameraTouch.js +5 -2
  116. package/src/controls/cleanupCameraTouch.js +21 -16
  117. package/src/controls/compassAddHooks.js +13 -10
  118. package/src/controls/compassOrientation.js +2 -1
  119. package/src/controls/containerResizeAddHooks.js +3 -3
  120. package/src/controls/dragCamera.js +18 -14
  121. package/src/controls/endAllCameraDrags.js +4 -2
  122. package/src/controls/endAllCameraTouches.js +4 -2
  123. package/src/controls/endCameraTouch.js +3 -2
  124. package/src/controls/endCameraTouchEvent.js +5 -2
  125. package/src/controls/failCompassPermission.js +4 -0
  126. package/src/controls/finishCompassPermission.js +10 -9
  127. package/src/controls/loadCameraControls.js +2 -2
  128. package/src/controls/moveCameraTouch.js +16 -9
  129. package/src/controls/pitchDragAddHooks.js +3 -1
  130. package/src/controls/refreshRotateControl.js +9 -6
  131. package/src/controls/removeCameraDrag.js +7 -4
  132. package/src/controls/rotateButtonClick.js +8 -4
  133. package/src/controls/rotateButtonKeydown.js +8 -4
  134. package/src/controls/rotateControl.js +3 -2
  135. package/src/controls/rotateOnAdd.js +32 -28
  136. package/src/controls/shiftRotateAddHooks.js +6 -4
  137. package/src/controls/shiftRotateWheel.js +3 -1
  138. package/src/controls/startCameraTouch.js +32 -22
  139. package/src/core/addImageState.js +6 -5
  140. package/src/core/addRasterImage.js +4 -2
  141. package/src/core/adjustCameraMarkerPan.js +24 -18
  142. package/src/core/beforeNativeRender.js +1 -1
  143. package/src/core/boundsQuad.js +7 -6
  144. package/src/core/bringNativeLayerToBack.js +6 -1
  145. package/src/core/bringNativeLayerToFront.js +6 -1
  146. package/src/core/bypassNativeEvent.js +11 -0
  147. package/src/core/cameraCircleBounds.js +3 -2
  148. package/src/core/cameraMarkerDrag.js +16 -13
  149. package/src/core/cameraMarkerOnDrag.js +7 -2
  150. package/src/core/cancelGridFade.js +10 -6
  151. package/src/core/closestCameraLayerPoint.js +3 -2
  152. package/src/core/current.js +4 -1
  153. package/src/core/disposeNativeLayer.js +6 -2
  154. package/src/core/fireRasterLoad.js +3 -2
  155. package/src/core/forwardNativeError.js +2 -2
  156. package/src/core/gridlayerGetEvents.js +7 -4
  157. package/src/core/gridlayerGetTiledPixelBounds.js +8 -4
  158. package/src/core/handleNativeMapEvent.js +16 -36
  159. package/src/core/hideTargets.js +6 -4
  160. package/src/core/initNativeGPU.js +10 -6
  161. package/src/core/initializeGridContainer.js +3 -2
  162. package/src/core/initializeNativeLayer.js +16 -18
  163. package/src/core/layerCallInitHooks.js +14 -0
  164. package/src/core/localPixelForGeometry.js +3 -2
  165. package/src/core/localPosition.js +8 -4
  166. package/src/core/markerCameraIconPoint.js +9 -6
  167. package/src/core/markerGetEvents.js +6 -2
  168. package/src/core/markerImageBounds.js +11 -0
  169. package/src/core/markerInitInteraction.js +4 -2
  170. package/src/core/markerQuadCorners.js +41 -24
  171. package/src/core/markerSetIcon.js +5 -2
  172. package/src/core/markerSetPos.js +10 -5
  173. package/src/core/markerSetRotation.js +9 -7
  174. package/src/core/markerUpdateZIndex.js +9 -5
  175. package/src/core/nativeEventSource.js +18 -0
  176. package/src/core/nativeEvents.js +8 -3
  177. package/src/core/nativeImageError.js +8 -3
  178. package/src/core/nativeImageRefresh.js +6 -2
  179. package/src/core/nativeLayer.js +24 -21
  180. package/src/core/nativeLayerMethod.js +8 -3
  181. package/src/core/popupAdjustPan.js +24 -18
  182. package/src/core/popupGetEvents.js +5 -2
  183. package/src/core/popupUpdatePosition.js +5 -2
  184. package/src/core/pruneNativeResources.js +20 -0
  185. package/src/core/putNativeMesh.js +11 -8
  186. package/src/core/quadNativeMesh.js +9 -4
  187. package/src/core/readyNativeGPU.js +4 -1
  188. package/src/core/redrawPath.js +6 -0
  189. package/src/core/refreshNativeLayer.js +11 -6
  190. package/src/core/refreshNativeLayerContract.js +6 -1
  191. package/src/core/rejectNativeReady.js +1 -0
  192. package/src/core/removeImageState.js +4 -3
  193. package/src/core/removeLayer.js +22 -0
  194. package/src/core/removeNativeEvents.js +2 -1
  195. package/src/core/removeTargets.js +6 -2
  196. package/src/core/reorderNativeLayer.js +4 -1
  197. package/src/core/resolveNativeReady.js +1 -0
  198. package/src/core/runGridFades.js +11 -6
  199. package/src/core/runMarkerPanFrame.js +6 -4
  200. package/src/core/scheduleGridFade.js +10 -5
  201. package/src/core/scheduleMarkerPan.js +7 -4
  202. package/src/core/setRotation.js +5 -0
  203. package/src/core/styleNativeMesh.js +5 -1
  204. package/src/core/syncGridLayer.js +10 -3
  205. package/src/core/syncMarker.js +4 -2
  206. package/src/core/syncVectorLayer.js +12 -9
  207. package/src/core/synchronizeNativeLayer.js +8 -17
  208. package/src/core/textureFor.js +41 -43
  209. package/src/core/tooltipGetEvents.js +5 -2
  210. package/src/core/tooltipSetPosition.js +5 -2
  211. package/src/core/transformNativePoint.js +7 -0
  212. package/src/core/updateGridOpacity.js +7 -3
  213. package/src/core/updateNativeHover.js +7 -0
  214. package/src/core/updateNativeLayerView.js +4 -1
  215. package/src/core/uploadCanvasTexture.js +18 -15
  216. package/src/core/uploadNativeImage.js +13 -0
  217. package/src/geometry/addBridges.js +29 -88
  218. package/src/geometry/below.js +1 -1
  219. package/src/geometry/box.js +6 -1
  220. package/src/geometry/bridgeEdge.js +11 -0
  221. package/src/geometry/bridgeElevation.js +3 -1
  222. package/src/geometry/bridgeFaces.js +15 -0
  223. package/src/geometry/bridgeLocal.js +3 -2
  224. package/src/geometry/bridgePaths.js +11 -0
  225. package/src/geometry/bridgePolygon.js +31 -0
  226. package/src/geometry/bridgeSides.js +11 -0
  227. package/src/geometry/build.js +10 -6
  228. package/src/geometry/circleAt.js +4 -2
  229. package/src/geometry/circleGeometry.js +34 -0
  230. package/src/geometry/clipLine.js +1 -1
  231. package/src/geometry/clipSegment.js +11 -7
  232. package/src/geometry/computeBounds.js +9 -4
  233. package/src/geometry/conformModelToTerrain.js +17 -12
  234. package/src/geometry/cross.js +5 -1
  235. package/src/geometry/dashValues.js +14 -0
  236. package/src/geometry/dashedSegment.js +16 -0
  237. package/src/geometry/diskAt.js +4 -2
  238. package/src/geometry/emitter.js +2 -2
  239. package/src/geometry/indexBridge.js +29 -0
  240. package/src/geometry/lampPostGeometry.js +12 -6
  241. package/src/geometry/lampRing.js +9 -6
  242. package/src/geometry/lightGeometry.js +2 -2
  243. package/src/geometry/line.js +21 -54
  244. package/src/geometry/lineJoin.js +26 -0
  245. package/src/geometry/nativeGeometry.js +10 -44
  246. package/src/geometry/polygon.js +4 -3
  247. package/src/geometry/quad.js +8 -3
  248. package/src/geometry/roofCoverage.js +23 -52
  249. package/src/geometry/roofFootprint.js +29 -0
  250. package/src/geometry/segment.js +2 -1
  251. package/src/geometry/setVertexColor.js +3 -1
  252. package/src/geometry/sub.js +2 -2
  253. package/src/geometry/subtractRoofTile.js +19 -0
  254. package/src/geometry/surface.js +2 -1
  255. package/src/geometry/treeGeometry.js +5 -6
  256. package/src/geometry/treeRing.js +9 -8
  257. package/src/geometry/triangle.js +8 -7
  258. package/src/geometry/validateTree.js +7 -0
  259. package/src/geometry/vertexNormals.js +10 -16
  260. package/src/geometry/visit.js +2 -1
  261. package/src/{constants → globals}/CELL.js +0 -1
  262. package/src/globals/Compass.js +1 -0
  263. package/src/globals/ContainerResize.js +1 -0
  264. package/src/{constants → globals}/HEIGHT.js +1 -1
  265. package/src/globals/L.js +1 -0
  266. package/src/globals/PitchDrag.js +1 -0
  267. package/src/globals/ShiftRotate.js +1 -0
  268. package/src/globals/TouchMode.js +1 -0
  269. package/src/globals/alphaBlend.js +12 -0
  270. package/src/globals/archiveDecoder.js +1 -0
  271. package/src/globals/archiveNorthWest.js +1 -0
  272. package/src/globals/archiveSouthEast.js +1 -0
  273. package/src/globals/atmosphereColor.js +1 -0
  274. package/src/globals/atmosphereStops.js +22 -0
  275. package/src/globals/blobParts.js +1 -0
  276. package/src/globals/boundsMethods.js +1 -0
  277. package/src/globals/cameraAngles.js +1 -0
  278. package/src/globals/cameraAnimatedOptions.js +3 -0
  279. package/src/globals/cameraAnimationFrame.js +1 -0
  280. package/src/globals/cameraAnimations.js +1 -0
  281. package/src/globals/cameraBearingSensitivity.js +1 -0
  282. package/src/globals/cameraByMap.js +1 -0
  283. package/src/globals/cameraDragSensitivity.js +1 -0
  284. package/src/globals/cameraDrags.js +1 -0
  285. package/src/globals/cameraEmptyOptions.js +1 -0
  286. package/src/globals/cameraFocusOptions.js +3 -0
  287. package/src/globals/cameraFov.js +3 -0
  288. package/src/globals/cameraListenerOptions.js +4 -0
  289. package/src/globals/cameraTouchStates.js +1 -0
  290. package/src/globals/cameraZeroPadding.js +1 -0
  291. package/src/globals/closestMethods.js +1 -0
  292. package/src/globals/cogTags.js +1 -0
  293. package/src/{constants → globals}/colliders.js +0 -1
  294. package/src/globals/colorLayout.js +8 -0
  295. package/src/globals/coreEventTypes.js +4 -0
  296. package/src/globals/coreMatrixKeys.js +4 -0
  297. package/src/globals/coreQuadIndices.js +1 -0
  298. package/src/globals/coreQuadUV.js +1 -0
  299. package/src/globals/coreSampler.js +4 -0
  300. package/src/globals/coreWhite.js +1 -0
  301. package/src/globals/cosObliquity.js +3 -0
  302. package/src/globals/coverageTiles.js +1 -0
  303. package/src/globals/defaultMaterial.js +1 -0
  304. package/src/globals/degrees.js +1 -0
  305. package/src/globals/demBuffer.js +4 -0
  306. package/src/globals/demLayout.js +3 -0
  307. package/src/globals/demSize.js +1 -0
  308. package/src/globals/demTarget.js +3 -0
  309. package/src/globals/demTexture.js +5 -0
  310. package/src/globals/depthBindGroup.js +9 -0
  311. package/src/globals/depthTexture.js +5 -0
  312. package/src/globals/directoryReader.js +4 -0
  313. package/src/globals/disabledShadow.js +1 -0
  314. package/src/globals/dragByHandler.js +1 -0
  315. package/src/globals/dragStates.js +1 -0
  316. package/src/globals/drawEntries.js +1 -0
  317. package/src/globals/drawFrameEntry.js +7 -0
  318. package/src/globals/drawMeshEntry.js +7 -0
  319. package/src/globals/drawSamplerEntries.js +18 -0
  320. package/src/globals/drawTerrainEntry.js +4 -0
  321. package/src/globals/drawTextureEntries.js +18 -0
  322. package/src/globals/earthCirc.js +1 -0
  323. package/src/{constants → globals}/elevationWGSL.js +1 -1
  324. package/src/globals/fragmentShader.js +3 -0
  325. package/src/globals/frameBuffer.js +4 -0
  326. package/src/globals/frameCommands.js +1 -0
  327. package/src/globals/frameLayoutEntry.js +7 -0
  328. package/src/globals/geometryDecoder.js +1 -0
  329. package/src/globals/geometryEmpty.js +1 -0
  330. package/src/globals/geometryImageOptions.js +4 -0
  331. package/src/globals/geometryPixelStates.js +1 -0
  332. package/src/globals/geometryQuaternion.js +1 -0
  333. package/src/globals/geometryScale.js +1 -0
  334. package/src/globals/geometrySemantics.js +5 -0
  335. package/src/globals/geometryTranslation.js +1 -0
  336. package/src/globals/gridEvents.js +1 -0
  337. package/src/globals/gridFadeFrame.js +1 -0
  338. package/src/globals/gridInitializers.js +1 -0
  339. package/src/globals/halfRadians.js +1 -0
  340. package/src/globals/headerBounds.js +1 -0
  341. package/src/globals/headerFlags.js +1 -0
  342. package/src/globals/headerOffsets.js +5 -0
  343. package/src/globals/hull.js +10 -0
  344. package/src/globals/imageStates.js +1 -0
  345. package/src/globals/instanceLayout.js +9 -0
  346. package/src/globals/lampDirections.js +8 -0
  347. package/src/globals/layerCallInitHooks.js +1 -0
  348. package/src/globals/layerProto.js +1 -0
  349. package/src/globals/lightScale.js +1 -0
  350. package/src/{constants → globals}/limbs.js +0 -1
  351. package/src/globals/loading.js +1 -0
  352. package/src/globals/mapMethods.js +1 -0
  353. package/src/globals/markerMethods.js +1 -0
  354. package/src/globals/markerPanFrame.js +1 -0
  355. package/src/globals/meshBindGroup.js +4 -0
  356. package/src/globals/meshBuffer.js +4 -0
  357. package/src/globals/meshCopySize.js +1 -0
  358. package/src/globals/meshImage.js +4 -0
  359. package/src/globals/meshLayoutEntry.js +8 -0
  360. package/src/globals/meshOffsets.js +1 -0
  361. package/src/globals/meshPipeline.js +27 -0
  362. package/src/globals/meshStack.js +3 -0
  363. package/src/globals/meshTarget.js +3 -0
  364. package/src/globals/nativeRenderByLayer.js +1 -0
  365. package/src/globals/nextId.js +1 -0
  366. package/src/globals/normalLayout.js +8 -0
  367. package/src/globals/parts.js +24 -0
  368. package/src/globals/pendingGridFades.js +1 -0
  369. package/src/globals/pendingInitializations.js +1 -0
  370. package/src/globals/pendingMapChanges.js +1 -0
  371. package/src/globals/pendingMarkerPan.js +1 -0
  372. package/src/globals/pendingPlacements.js +1 -0
  373. package/src/globals/pendingRasterLoads.js +1 -0
  374. package/src/globals/pendingZoomAnimations.js +1 -0
  375. package/src/globals/pipelineLayout.js +3 -0
  376. package/src/globals/popupEvents.js +1 -0
  377. package/src/globals/popupPan.js +1 -0
  378. package/src/globals/popupPosition.js +1 -0
  379. package/src/globals/positionLayout.js +8 -0
  380. package/src/globals/programEntries.js +1 -0
  381. package/src/globals/programLayout.js +3 -0
  382. package/src/globals/radians.js +1 -0
  383. package/src/globals/rasterBuffer.js +4 -0
  384. package/src/globals/rasterIndices.js +1 -0
  385. package/src/globals/rasterNormals.js +1 -0
  386. package/src/globals/rasterPoint.js +4 -0
  387. package/src/globals/rasterPositions.js +1 -0
  388. package/src/globals/rasterSampler.js +6 -0
  389. package/src/globals/rasterTexture.js +5 -0
  390. package/src/globals/rasterUVs.js +1 -0
  391. package/src/globals/removeLayer.js +1 -0
  392. package/src/globals/renderEmpty.js +1 -0
  393. package/src/globals/rendererDevices.js +1 -0
  394. package/src/globals/ringDirections.js +49 -0
  395. package/src/globals/roofBindGroup.js +17 -0
  396. package/src/globals/roofBlitSampler.js +4 -0
  397. package/src/globals/roofBuffer.js +4 -0
  398. package/src/globals/roofCommands.js +1 -0
  399. package/src/globals/roofCopySize.js +1 -0
  400. package/src/globals/roofImage.js +3 -0
  401. package/src/globals/roofMin.js +4 -0
  402. package/src/globals/roofOpacities.js +1 -0
  403. package/src/globals/roofPass.js +13 -0
  404. package/src/globals/roofPipeline.js +29 -0
  405. package/src/globals/roofSampler.js +4 -0
  406. package/src/globals/roofShader.js +16 -0
  407. package/src/globals/roofSignatures.js +1 -0
  408. package/src/globals/roofSize.js +4 -0
  409. package/src/globals/roofTarget.js +3 -0
  410. package/src/globals/roofTexture.js +5 -0
  411. package/src/globals/roofTiles.js +1 -0
  412. package/src/globals/roundProfile.js +7 -0
  413. package/src/globals/samplerLayoutEntries.js +36 -0
  414. package/src/globals/sceneByLayer.js +1 -0
  415. package/src/globals/sceneCleanupFields.js +1 -0
  416. package/src/globals/sceneEmptyOptions.js +1 -0
  417. package/src/globals/scenePass.js +19 -0
  418. package/src/globals/sceneSunlightUniforms.js +3 -0
  419. package/src/globals/sceneTransferFields.js +1 -0
  420. package/src/globals/sceneWalkHandlers.js +1 -0
  421. package/src/globals/shadowBindGroup.js +10 -0
  422. package/src/globals/shadowBounds.js +4 -0
  423. package/src/globals/shadowCamera.js +15 -0
  424. package/src/globals/shadowDepthLayout.js +9 -0
  425. package/src/globals/shadowHigh.js +1 -0
  426. package/src/globals/shadowInstanceLayouts.js +4 -0
  427. package/src/globals/shadowLayouts.js +3 -0
  428. package/src/globals/shadowLow.js +1 -0
  429. package/src/globals/shadowMeshLayout.js +10 -0
  430. package/src/globals/shadowOffsets.js +1 -0
  431. package/src/globals/shadowPass.js +9 -0
  432. package/src/globals/shadowPipeline.js +24 -0
  433. package/src/globals/shadowPipelineLayout.js +3 -0
  434. package/src/globals/shadowShader.js +3 -0
  435. package/src/globals/shadowTexture.js +5 -0
  436. package/src/globals/shadowValues.js +1 -0
  437. package/src/globals/sinObliquity.js +3 -0
  438. package/src/globals/sizes.js +6 -0
  439. package/src/globals/sunBindGroup.js +20 -0
  440. package/src/globals/sunByMap.js +1 -0
  441. package/src/globals/sunlightByControl.js +1 -0
  442. package/src/globals/tau.js +1 -0
  443. package/src/globals/terrainLayoutEntry.js +8 -0
  444. package/src/globals/textureLayoutEntries.js +41 -0
  445. package/src/globals/tiledBounds.js +1 -0
  446. package/src/globals/tooltipEvents.js +1 -0
  447. package/src/globals/tooltipPosition.js +1 -0
  448. package/src/globals/touchByContainer.js +1 -0
  449. package/src/globals/trafficByLayer.js +1 -0
  450. package/src/globals/trafficClocks.js +1 -0
  451. package/src/globals/trafficEmptyList.js +1 -0
  452. package/src/globals/trafficEmptyOptions.js +1 -0
  453. package/src/globals/trafficRouteMaterial.js +1 -0
  454. package/src/{constants → globals}/trafficShader.js +49 -49
  455. package/src/globals/triangleContexts.js +1 -0
  456. package/src/globals/uVLayout.js +8 -0
  457. package/src/{constants → globals}/vehicles.js +24 -9
  458. package/src/globals/vertexShader.js +3 -0
  459. package/src/globals/walkByMap.js +1 -0
  460. package/src/globals/wantedTiles.js +1 -0
  461. package/src/index.js +27 -25
  462. package/src/lighting/cacheLightGrid.js +14 -5
  463. package/src/lighting/collectLightMeshes.js +4 -1
  464. package/src/lighting/lightGrid.js +9 -8
  465. package/src/lighting/updatePointLights.js +11 -7
  466. package/src/lighting/visitCells.js +4 -11
  467. package/src/lighting/visitLightCells.js +13 -0
  468. package/src/lighting/worldLights.js +10 -12
  469. package/src/lighting/writeLightCell.js +5 -0
  470. package/src/models/applyModelTransform.js +13 -0
  471. package/src/models/buildModelNodes.js +14 -0
  472. package/src/models/createModelContext.js +15 -0
  473. package/src/models/createModelGeometry.js +40 -0
  474. package/src/models/decodeModel.js +9 -6
  475. package/src/models/loadBuffer.js +2 -2
  476. package/src/models/loadImage.js +9 -5
  477. package/src/models/loadModel.js +24 -49
  478. package/src/models/loadModelResources.js +19 -0
  479. package/src/models/materialFor.js +9 -9
  480. package/src/models/modelNode.js +25 -69
  481. package/src/models/nodeMatrix.js +8 -3
  482. package/src/models/normalizeAccessor.js +11 -0
  483. package/src/models/readAccessor.js +11 -31
  484. package/src/models/readAccessorValue.js +7 -0
  485. package/src/models/readAccessorValues.js +10 -6
  486. package/src/models/readModelAttributes.js +20 -0
  487. package/src/models/readModelIndices.js +16 -0
  488. package/src/models/readSparseAccessor.js +19 -0
  489. package/src/models/releaseModelResources.js +10 -0
  490. package/src/models/textureFor.js +9 -6
  491. package/src/models/textureSampler.js +5 -5
  492. package/src/picking/findFeature.js +12 -9
  493. package/src/picking/hit.js +11 -10
  494. package/src/picking/hitColliderCell.js +19 -0
  495. package/src/picking/hitMesh.js +12 -16
  496. package/src/picking/onClick.js +5 -2
  497. package/src/picking/onPointerLeave.js +5 -2
  498. package/src/picking/onPointerMove.js +8 -5
  499. package/src/picking/raycast.js +42 -35
  500. package/src/picking/setHighlight.js +12 -5
  501. package/src/picking/shouldSkipOther.js +4 -1
  502. package/src/picking/showFeature.js +13 -10
  503. package/src/picking/validateCameraInverse.js +8 -0
  504. package/src/raster/addRasterTile.js +39 -84
  505. package/src/raster/comparePendingTiles.js +2 -2
  506. package/src/raster/createGeometry.js +17 -10
  507. package/src/raster/createRasterMesh.js +71 -42
  508. package/src/raster/finishAttachment.js +7 -3
  509. package/src/raster/finishRasterTile.js +54 -40
  510. package/src/raster/getRasterEvents.js +3 -3
  511. package/src/raster/getRasterTileSize.js +5 -3
  512. package/src/raster/initRaster.js +14 -19
  513. package/src/raster/isLoading.js +4 -2
  514. package/src/raster/loadRasterTile.js +10 -7
  515. package/src/raster/onPMTileAdd.js +4 -1
  516. package/src/raster/onPMTileRemove.js +4 -1
  517. package/src/raster/pruneRasterTiles.js +15 -12
  518. package/src/raster/pumpRasterTiles.js +9 -5
  519. package/src/raster/rasterTileRange.js +23 -0
  520. package/src/raster/readyRaster.js +13 -10
  521. package/src/raster/registerTerrainTile.js +12 -9
  522. package/src/raster/releaseRasterTile.js +15 -12
  523. package/src/raster/releaseRasterTiles.js +9 -6
  524. package/src/raster/removeRasterTile.js +6 -3
  525. package/src/raster/reportError.js +3 -3
  526. package/src/raster/retainRasterTiles.js +15 -0
  527. package/src/raster/setRasterOpacity.js +5 -2
  528. package/src/raster/setRasterTerrain.js +10 -6
  529. package/src/raster/setRasterZIndex.js +5 -2
  530. package/src/raster/terrainTileGeometry.js +16 -0
  531. package/src/raster/updateAttachedTiles.js +5 -2
  532. package/src/raster/updateRasterTiles.js +29 -37
  533. package/src/rendering/bindMeshTextures.js +50 -0
  534. package/src/rendering/collectFrameMeshes.js +17 -10
  535. package/src/rendering/collectMeshes.js +2 -24
  536. package/src/rendering/collectRoofTiles.js +15 -0
  537. package/src/rendering/collectVisibleMesh.js +27 -0
  538. package/src/rendering/compareMeshDepth.js +6 -0
  539. package/src/rendering/compareMeshes.js +8 -10
  540. package/src/rendering/compareRoofTiles.js +4 -4
  541. package/src/rendering/composeRoofAtlas.js +53 -36
  542. package/src/rendering/createMesh.js +22 -11
  543. package/src/rendering/createProgram.js +47 -64
  544. package/src/rendering/createProgramLayout.js +36 -0
  545. package/src/rendering/createProgramUniforms.js +17 -0
  546. package/src/rendering/destroyAfterSubmission.js +8 -8
  547. package/src/rendering/destroyTexture.js +4 -1
  548. package/src/rendering/drawGeometry.js +18 -106
  549. package/src/rendering/drawPipeline.js +34 -0
  550. package/src/rendering/drawSceneMeshes.js +14 -17
  551. package/src/rendering/ensureRoofBlit.js +14 -34
  552. package/src/rendering/prepareFrameBuffer.js +17 -0
  553. package/src/rendering/prepareFrameMeshes.js +6 -11
  554. package/src/rendering/prepareFrameUniforms.js +7 -12
  555. package/src/rendering/prepareMeshCutout.js +12 -0
  556. package/src/rendering/prepareMeshTextures.js +23 -0
  557. package/src/rendering/prepareMeshUniforms.js +25 -0
  558. package/src/rendering/rebuildRoofAtlas.js +41 -56
  559. package/src/rendering/render.js +25 -13
  560. package/src/rendering/reportCompilation.js +6 -6
  561. package/src/rendering/resizeRenderer.js +19 -14
  562. package/src/rendering/resizeRoofTexture.js +24 -0
  563. package/src/rendering/revealRoofMesh.js +15 -0
  564. package/src/rendering/synchronizeZoomView.js +10 -18
  565. package/src/rendering/textureBinding.js +7 -7
  566. package/src/rendering/updateMapCamera.js +30 -16
  567. package/src/rendering/updateRoofAtlas.js +20 -0
  568. package/src/rendering/updateRoofRaster.js +12 -19
  569. package/src/rendering/updateZoomCamera.js +18 -0
  570. package/src/rendering/uploadMeshTexture.js +26 -0
  571. package/src/rendering/uploadRoofTile.js +23 -0
  572. package/src/scene/addSceneLayer.js +17 -0
  573. package/src/scene/attach.js +54 -161
  574. package/src/scene/attachLayer.js +5 -2
  575. package/src/scene/callLayer.js +26 -0
  576. package/src/scene/cancelUpdate.js +6 -3
  577. package/src/scene/composeLocalTransform.js +16 -0
  578. package/src/scene/createLayer.js +7 -0
  579. package/src/scene/createSceneCamera.js +21 -0
  580. package/src/scene/emptyEvents.js +1 -1
  581. package/src/scene/emptyNode.js +8 -7
  582. package/src/scene/endZoom.js +13 -6
  583. package/src/scene/failAttachment.js +6 -3
  584. package/src/scene/get3DEvents.js +12 -9
  585. package/src/scene/getLocation.js +7 -0
  586. package/src/scene/init3D.js +28 -15
  587. package/src/scene/initializeLayer.js +11 -5
  588. package/src/scene/initializeRendererResources.js +35 -0
  589. package/src/scene/initializeSharedRenderer.js +45 -0
  590. package/src/scene/initializerFor.js +3 -1
  591. package/src/scene/isNativeLayer.js +12 -0
  592. package/src/scene/layerCountTitle.js +4 -0
  593. package/src/scene/layerInitialize.js +24 -14
  594. package/src/scene/layerLayerAdd.js +31 -9
  595. package/src/scene/mountRenderer.js +25 -0
  596. package/src/scene/onAdd3DLayer.js +16 -12
  597. package/src/scene/onMapChange.js +8 -6
  598. package/src/scene/onRemove3DLayer.js +30 -36
  599. package/src/scene/onZoomAnim.js +8 -6
  600. package/src/scene/placeEntry.js +3 -1
  601. package/src/scene/placeEntryElement.js +22 -0
  602. package/src/scene/ready.js +9 -0
  603. package/src/scene/ready3D.js +28 -18
  604. package/src/scene/releaseRenderer.js +1 -1
  605. package/src/scene/releaseSharedScene.js +25 -0
  606. package/src/scene/removeEntry.js +2 -0
  607. package/src/scene/removeLayerEvents.js +9 -0
  608. package/src/scene/removeSceneLayer.js +15 -0
  609. package/src/scene/renderLayerCount.js +13 -0
  610. package/src/scene/renderPendingMapChange.js +8 -4
  611. package/src/scene/renderPendingUpdates.js +8 -4
  612. package/src/scene/renderPendingZoomAnimation.js +7 -3
  613. package/src/scene/rendererDeviceError.js +10 -6
  614. package/src/scene/rendererDeviceLost.js +10 -7
  615. package/src/scene/replaceEntry.js +4 -2
  616. package/src/scene/reportError.js +2 -2
  617. package/src/scene/requestAdapter.js +1 -1
  618. package/src/scene/resolveNextInitialization.js +7 -6
  619. package/src/scene/restoreGeometry.js +23 -0
  620. package/src/scene/restoreMaterialTextures.js +16 -0
  621. package/src/scene/restoreObject.js +22 -58
  622. package/src/scene/runPlacements.js +4 -2
  623. package/src/scene/startZoom.js +4 -1
  624. package/src/scene/underEntry.js +2 -3
  625. package/src/scene/update.js +8 -4
  626. package/src/scene/updateCamera.js +51 -28
  627. package/src/scene/updateLayerCount.js +22 -0
  628. package/src/scene/updateWorldMatrix.js +23 -28
  629. package/src/scene/worldMatrixChanged.js +18 -0
  630. package/src/shaders/materialBaseShader.js +17 -0
  631. package/src/shaders/materialShaders.js +14 -130
  632. package/src/shaders/materialSurfaceShader.js +47 -0
  633. package/src/shaders/materialVertexShader.js +72 -0
  634. package/src/shaders/roofVertexShader.js +9 -0
  635. package/src/shaders/validateRoofMaterial.js +10 -0
  636. package/src/shadows/bindSunlight.js +18 -9
  637. package/src/shadows/drawShadowMeshes.js +24 -14
  638. package/src/shadows/ensureShadowPipeline.js +46 -35
  639. package/src/shadows/meshShadowBounds.js +24 -0
  640. package/src/shadows/renderSunlight.js +10 -8
  641. package/src/shadows/resizeSunlight.js +12 -6
  642. package/src/shadows/shadowBounds.js +10 -19
  643. package/src/shadows/shadowCacheMatches.js +3 -9
  644. package/src/shadows/shadowMatrix.js +36 -26
  645. package/src/shadows/shadowMeshMatches.js +11 -0
  646. package/src/sources/addGeneratedTriangle.js +3 -2
  647. package/src/sources/attachAreaMesh.js +32 -26
  648. package/src/sources/buildArea.js +12 -8
  649. package/src/sources/buildAreaFeature.js +12 -17
  650. package/src/sources/buildAreaPoint.js +4 -4
  651. package/src/sources/buildAreaPolygon.js +3 -3
  652. package/src/sources/compareAreaDistance.js +1 -2
  653. package/src/sources/extrusionStyle.js +10 -0
  654. package/src/sources/featureAnchor.js +9 -0
  655. package/src/sources/generateTreeGeometry.js +5 -3
  656. package/src/sources/initializeGeoJSON.js +4 -2
  657. package/src/sources/instanceAreaGeometry.js +9 -7
  658. package/src/sources/pendingSourceAreas.js +20 -0
  659. package/src/sources/projectRing.js +17 -10
  660. package/src/sources/projectedTree.js +16 -10
  661. package/src/sources/pump.js +16 -26
  662. package/src/sources/releaseArea.js +5 -2
  663. package/src/sources/setGeoJSONData.js +5 -2
  664. package/src/sources/sourceAreaContext.js +16 -6
  665. package/src/sources/updateArea.js +23 -16
  666. package/src/sources/updateStatus.js +5 -2
  667. package/src/sunlight/addTimeLayer.js +4 -1
  668. package/src/sunlight/addTo.js +1 -0
  669. package/src/sunlight/atmosphere.js +7 -10
  670. package/src/sunlight/createSun.js +54 -0
  671. package/src/sunlight/horizontalPosition.js +8 -8
  672. package/src/sunlight/initSunlight.js +3 -0
  673. package/src/sunlight/initialize.js +7 -4
  674. package/src/sunlight/mix.js +4 -3
  675. package/src/sunlight/moonPosition.js +10 -9
  676. package/src/sunlight/onAddSun.js +27 -66
  677. package/src/sunlight/onRemoveSun.js +10 -0
  678. package/src/sunlight/projectCelestialBody.js +5 -5
  679. package/src/sunlight/remove.js +1 -0
  680. package/src/sunlight/removeSun.js +9 -3
  681. package/src/sunlight/removeTimeLayer.js +5 -1
  682. package/src/sunlight/render.js +4 -2
  683. package/src/sunlight/rgb.js +6 -4
  684. package/src/sunlight/solarPosition.js +10 -9
  685. package/src/sunlight/solarTime.js +11 -0
  686. package/src/sunlight/styleTimeControl.js +3 -3
  687. package/src/sunlight/updateCelestialDisc.js +12 -0
  688. package/src/sunlight/updateSky.js +12 -15
  689. package/src/sunlight/updateSun.js +10 -4
  690. package/src/sunlight/useSelectedTime.js +7 -4
  691. package/src/terrain/applyTerrain.js +21 -0
  692. package/src/terrain/clearLayerTerrain.js +8 -5
  693. package/src/terrain/copyTerrainTile.js +12 -0
  694. package/src/terrain/getElevation.js +7 -3
  695. package/src/terrain/initTerrain.js +12 -9
  696. package/src/terrain/loadTerrain.js +25 -45
  697. package/src/terrain/loadTerrainTiles.js +7 -3
  698. package/src/terrain/onTerrainAdd.js +10 -6
  699. package/src/terrain/onTerrainChange.js +5 -2
  700. package/src/terrain/onTerrainRemove.js +22 -18
  701. package/src/terrain/rasterProgram.js +51 -0
  702. package/src/terrain/readBridges.js +1 -1
  703. package/src/terrain/setLayerTerrain.js +8 -5
  704. package/src/terrain/setTerrainHeight.js +9 -5
  705. package/src/terrain/terrainAtlas.js +7 -13
  706. package/src/terrain/terrainBuffers.js +27 -0
  707. package/src/terrain/terrainElevation.js +5 -10
  708. package/src/terrain/terrainGrid.js +19 -11
  709. package/src/terrain/terrainTileQueue.js +25 -0
  710. package/src/traffic/addTraffic.js +6 -3
  711. package/src/traffic/along.js +8 -2
  712. package/src/traffic/appendRouteDash.js +15 -0
  713. package/src/traffic/appendRouteSegment.js +15 -0
  714. package/src/traffic/destroyTrafficGpu.js +4 -2
  715. package/src/traffic/disposeTrafficObject.js +5 -2
  716. package/src/traffic/drawTrafficRoute.js +5 -2
  717. package/src/traffic/failTraffic.js +2 -2
  718. package/src/traffic/fetchTrafficLanes.js +4 -4
  719. package/src/traffic/groundTraffic.js +5 -1
  720. package/src/traffic/initTraffic.js +60 -48
  721. package/src/traffic/loadTraffic.js +9 -9
  722. package/src/traffic/locateTraffic.js +7 -5
  723. package/src/traffic/moveTraffic.js +2 -2
  724. package/src/traffic/prepareTraffic.js +11 -6
  725. package/src/traffic/rebaseTraffic.js +32 -30
  726. package/src/traffic/rebuildTrafficMesh.js +9 -5
  727. package/src/traffic/refreshTrafficTrips.js +32 -0
  728. package/src/traffic/removeTraffic.js +16 -13
  729. package/src/traffic/routeColor.js +3 -3
  730. package/src/traffic/routeGeometry.js +11 -21
  731. package/src/traffic/scheduledTrips.js +22 -11
  732. package/src/traffic/tickTraffic.js +9 -40
  733. package/src/traffic/toLanes.js +16 -8
  734. package/src/traffic/tooltip.js +4 -6
  735. package/src/traffic/trafficBounds.js +6 -2
  736. package/src/traffic/trafficNow.js +9 -3
  737. package/src/traffic/trafficStatusText.js +5 -0
  738. package/src/traffic/trafficStorage.js +2 -2
  739. package/src/traffic/tripsAt.js +4 -4
  740. package/src/traffic/updateTraffic.js +4 -1
  741. package/src/traffic/updateTrafficLights.js +16 -0
  742. package/src/traffic/updateTrafficPose.js +8 -0
  743. package/src/traffic/uploadTrafficLanes.js +21 -0
  744. package/src/traffic/vehicleOffsets.js +3 -2
  745. package/src/triangulation/clean.js +1 -1
  746. package/src/triangulation/clipEars.js +23 -0
  747. package/src/triangulation/connectHole.js +18 -0
  748. package/src/triangulation/mergeHoles.js +11 -0
  749. package/src/triangulation/minimumX.js +3 -3
  750. package/src/triangulation/polygonRings.js +14 -0
  751. package/src/triangulation/sortHoles.js +7 -12
  752. package/src/triangulation/triangulate.js +18 -56
  753. package/src/triangulation/validateArea.js +10 -0
  754. package/src/utils/parseColor.js +4 -4
  755. package/src/vehicles/bicycleModel.js +21 -20
  756. package/src/vehicles/boatBenches.js +3 -2
  757. package/src/vehicles/boatModel.js +25 -17
  758. package/src/vehicles/carModel.js +26 -10
  759. package/src/vehicles/carriage.js +17 -16
  760. package/src/vehicles/metroModel.js +1 -1
  761. package/src/vehicles/mirror.js +3 -3
  762. package/src/vehicles/pedestrianModel.js +15 -14
  763. package/src/vehicles/tramModel.js +1 -1
  764. package/src/walk/blocked.js +4 -4
  765. package/src/walk/createWalk.js +66 -60
  766. package/src/walk/initWalk.js +1 -0
  767. package/src/walk/initialize.js +1 -0
  768. package/src/walk/land.js +32 -0
  769. package/src/walk/local.js +15 -7
  770. package/src/walk/moveWalker.js +23 -0
  771. package/src/walk/onAdd.js +25 -0
  772. package/src/walk/onKey.js +12 -9
  773. package/src/walk/onPointer.js +17 -12
  774. package/src/walk/onRemove.js +9 -1
  775. package/src/walk/place.js +4 -2
  776. package/src/walk/start.js +19 -10
  777. package/src/walk/step.js +21 -29
  778. package/src/walk/stepWalkerHeight.js +11 -0
  779. package/src/walk/stop.js +7 -4
  780. package/src/walk/updateWalkerView.js +22 -0
  781. package/src/constants/Compass.js +0 -7
  782. package/src/constants/ContainerResize.js +0 -7
  783. package/src/constants/PitchDrag.js +0 -7
  784. package/src/constants/ShiftRotate.js +0 -7
  785. package/src/constants/TouchMode.js +0 -6
  786. package/src/constants/accessorSizes.js +0 -1
  787. package/src/constants/attachState.js +0 -1
  788. package/src/constants/cameraControlsState.js +0 -1
  789. package/src/constants/cityMapper.js +0 -6
  790. package/src/constants/hull.js +0 -1
  791. package/src/constants/indexState.js +0 -1
  792. package/src/constants/mapCameraState.js +0 -1
  793. package/src/constants/nativeLayerState.js +0 -1
  794. package/src/constants/onMapChangeState.js +0 -1
  795. package/src/constants/onZoomAnimState.js +0 -1
  796. package/src/constants/parts.js +0 -19
  797. package/src/constants/pumpState.js +0 -1
  798. package/src/constants/ringDirections.js +0 -10
  799. package/src/constants/roundProfile.js +0 -1
  800. package/src/constants/underEntryState.js +0 -1
  801. /package/src/{constants → globals}/TILE_RADIUS.js +0 -0
  802. /package/src/{constants → globals}/TILE_SIZE.js +0 -0
  803. /package/src/{constants → globals}/dark.js +0 -0
  804. /package/src/{constants → globals}/glass.js +0 -0
  805. /package/src/{constants → globals}/headlight.js +0 -0
  806. /package/src/{constants → globals}/moves.js +0 -0
  807. /package/src/{constants → globals}/nativeEventMaps.js +0 -0
  808. /package/src/{constants → globals}/nativeMethodHandlers.js +0 -0
  809. /package/src/{constants → globals}/paints.js +0 -0
  810. /package/src/{constants → globals}/pendingUpdates.js +0 -0
  811. /package/src/{constants → globals}/renderers.js +0 -0
  812. /package/src/{constants → globals}/shirt.js +0 -0
  813. /package/src/{constants → globals}/skin.js +0 -0
  814. /package/src/{constants → globals}/speed.js +0 -0
  815. /package/src/{constants → globals}/taillight.js +0 -0
  816. /package/src/{constants → globals}/trousers.js +0 -0
  817. /package/src/{constants/accessorTypes.js → globals/types.js} +0 -0
  818. /package/src/{constants → globals}/tyre.js +0 -0
  819. /package/src/{constants → globals}/white.js +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/controls/editable.js", "../src/controls/shiftRotateWheel.js", "../src/controls/shiftRotateAddHooks.js", "../src/controls/shiftRotateRemoveHooks.js", "../src/constants/ShiftRotate.js", "../src/constants/cameraControlsState.js", "../src/controls/cameraDragDown.js", "../src/controls/cameraDragMove.js", "../src/controls/finishCameraDrag.js", "../src/controls/cameraDragEnd.js", "../src/controls/cameraDragClick.js", "../src/controls/cameraDragContextMenu.js", "../src/controls/endAllCameraDrags.js", "../src/controls/dragCamera.js", "../src/controls/acceptPitchDrag.js", "../src/controls/pitchDragAddHooks.js", "../src/controls/removeCameraDrag.js", "../src/controls/pitchDragRemoveHooks.js", "../src/constants/PitchDrag.js", "../src/controls/compassOrientation.js", "../src/controls/finishCompassPermission.js", "../src/controls/compassAddHooks.js", "../src/controls/compassRemoveHooks.js", "../src/constants/Compass.js", "../src/controls/resizeMap.js", "../src/controls/containerResizeAddHooks.js", "../src/controls/containerResizeRemoveHooks.js", "../src/constants/ContainerResize.js", "../src/controls/notifyCameraTouchChange.js", "../src/constants/TouchMode.js", "../src/controls/rotateButtonClick.js", "../src/controls/rotateButtonKeydown.js", "../src/controls/refreshRotateControl.js", "../src/controls/acceptRotateDrag.js", "../src/controls/refreshRotateFocus.js", "../src/controls/rotateOnAdd.js", "../src/controls/rotateOnRemove.js", "../src/controls/rotateControl.js", "../src/controls/startCameraTouch.js", "../src/controls/moveCameraTouch.js", "../src/controls/endCameraTouch.js", "../src/controls/endCameraTouchEvent.js", "../src/controls/changeCameraTouch.js", "../src/controls/endAllCameraTouches.js", "../src/controls/cleanupCameraTouch.js", "../src/controls/cameraControls.js", "../src/constants/nativeLayerState.js", "../src/core/nativeImageRefresh.js", "../src/core/nativeImageError.js", "../src/core/removeImageState.js", "../src/core/addImageState.js", "../src/rendering/synchronizeZoomView.js", "../src/rendering/destroyAfterSubmission.js", "../src/rendering/destroyTexture.js", "../src/rendering/resizeRenderer.js", "../src/geometry/cross.js", "../src/scene/updateCamera.js", "../src/geometry/bridgeElevation.js", "../src/terrain/sample.js", "../src/terrain/terrainElevation.js", "../src/terrain/getElevation.js", "../src/rendering/updateMapCamera.js", "../src/scene/updateWorldMatrix.js", "../src/geometry/computeBounds.js", "../src/rendering/collectMeshes.js", "../src/rendering/collectFrameMeshes.js", "../src/rendering/ensureRoofBlit.js", "../src/raster/getRasterTileSize.js", "../src/rendering/compareRoofTiles.js", "../src/rendering/composeRoofAtlas.js", "../src/rendering/rebuildRoofAtlas.js", "../src/rendering/updateRoofRaster.js", "../src/rendering/compareMeshes.js", "../src/rendering/sortMeshes.js", "../src/geometry/roofCoverage.js", "../src/rendering/prepareFrameMeshes.js", "../src/shadows/bindSunlight.js", "../src/lighting/visitCells.js", "../src/lighting/lightGrid.js", "../src/lighting/worldLights.js", "../src/lighting/cacheLightGrid.js", "../src/lighting/collectLightMeshes.js", "../src/lighting/updatePointLights.js", "../src/rendering/prepareFrameUniforms.js", "../src/rendering/drawGeometry.js", "../src/rendering/drawSceneMeshes.js", "../src/shadows/shadowCacheMatches.js", "../src/shadows/shadowBounds.js", "../src/shadows/shadowMatrix.js", "../src/shadows/ensureShadowPipeline.js", "../src/shadows/drawShadowMeshes.js", "../src/shadows/resizeSunlight.js", "../src/shadows/renderSunlight.js", "../src/constants/pendingUpdates.js", "../src/scene/cancelUpdate.js", "../src/scene/setParent.js", "../src/raster/removeRasterTile.js", "../src/raster/releaseRasterTile.js", "../src/raster/pruneRasterTiles.js", "../src/rendering/render.js", "../src/scene/renderPendingUpdates.js", "../src/scene/update.js", "../src/core/refreshNativeLayer.js", "../src/core/nativeLayerMethod.js", "../src/core/nativeSetLatLng.js", "../src/core/nativeSetLatLngs.js", "../src/core/nativeAddLatLng.js", "../src/core/nativeSetRadius.js", "../src/core/nativeSetStyle.js", "../src/core/nativeRedraw.js", "../src/core/nativeSetIcon.js", "../src/core/nativeSetUrl.js", "../src/core/nativeSetBounds.js", "../src/core/nativeSetOpacity.js", "../src/core/nativeSetZIndex.js", "../src/core/nativeSetZIndexOffset.js", "../src/core/nativeBringToFront.js", "../src/core/nativeBringToBack.js", "../src/constants/nativeMethodHandlers.js", "../src/constants/renderers.js", "../src/constants/cityMapper.js", "../src/scene/emptyNode.js", "../src/rendering/textureBinding.js", "../src/shaders/materialShaders.js", "../src/constants/elevationWGSL.js", "../src/rendering/reportCompilation.js", "../src/rendering/createProgram.js", "../src/rendering/createMesh.js", "../src/rendering/disposeMesh.js", "../src/triangulation/isClockWise.js", "../src/triangulation/cross.js", "../src/triangulation/equal.js", "../src/triangulation/clean.js", "../src/triangulation/inside.js", "../src/triangulation/insideHole.js", "../src/triangulation/on.js", "../src/triangulation/intersects.js", "../src/triangulation/crossesRing.js", "../src/triangulation/crossesBoundary.js", "../src/triangulation/containsVertex.js", "../src/triangulation/area.js", "../src/triangulation/minimumX.js", "../src/triangulation/sortHoles.js", "../src/triangulation/triangulate.js", "../src/geometry/nativeTriangle.js", "../src/geometry/diskAt.js", "../src/geometry/disk.js", "../src/geometry/circleAt.js", "../src/geometry/segment.js", "../src/geometry/line.js", "../src/geometry/polygon.js", "../src/geometry/visit.js", "../src/geometry/nativeGeometry.js", "../src/geometry/sub.js", "../src/geometry/dot.js", "../src/collision/sortHits.js", "../src/collision/intersectMeshes.js", "../src/scene/traverse.js", "../src/picking/collectVisibleMesh.js", "../src/picking/raycast.js", "../src/constants/nativeEventMaps.js", "../src/core/restoreNativeEvents.js", "../src/core/compareNativeHits.js", "../src/core/handleNativeMapEvent.js", "../src/core/nativeEvents.js", "../src/core/removeNativeEvents.js", "../src/utils/toSRGB.js", "../src/utils/channel.js", "../src/utils/parseColor.js", "../src/core/current.js", "../src/core/refreshNativeEvent.js", "../src/core/reorderNativeLayer.js", "../src/core/updateNativeLayerView.js", "../src/core/disposeNativeLayer.js", "../src/core/resolveNativeReady.js", "../src/core/rejectNativeReady.js", "../src/core/forwardNativeError.js", "../src/core/styleNativeMesh.js", "../src/core/uploadCanvasTexture.js", "../src/core/textureFor.js", "../src/core/putNativeMesh.js", "../src/core/quadNativeMesh.js", "../src/core/localPosition.js", "../src/core/boundsQuad.js", "../src/core/syncGridLayer.js", "../src/core/syncImageOverlay.js", "../src/core/markerQuadCorners.js", "../src/core/syncMarker.js", "../src/core/localPixel.js", "../src/core/localPixelForGeometry.js", "../src/core/syncVectorLayer.js", "../src/core/synchronizeNativeLayer.js", "../src/core/beforeNativeRender.js", "../src/core/nativeLayer.js", "../src/core/hideTargets.js", "../src/core/removeTargets.js", "../src/core/readyNativeGPU.js", "../src/scene/reportError.js", "../src/core/initNativeGPU.js", "../src/constants/mapCameraState.js", "../src/camera/mapGetBearing.js", "../src/camera/mapGetPitch.js", "../src/camera/cancelCameraAnimation.js", "../src/camera/mapStopPitchBearingAnimation.js", "../src/camera/updateSky.js", "../src/camera/mapSetPitchAndBearing.js", "../src/camera/runCameraAnimations.js", "../src/camera/scheduleCameraAnimation.js", "../src/camera/mapAnimateCamera.js", "../src/camera/mapSetBearing.js", "../src/camera/mapSetPitch.js", "../src/camera/mapResetNorth.js", "../src/camera/mapResetNorthPitch.js", "../src/camera/pointOf.js", "../src/camera/angles.js", "../src/camera/project.js", "../src/camera/animationPoint.js", "../src/camera/mapLayerPointToContainerPoint.js", "../src/camera/mapContainerPointToLayerPoint.js", "../src/camera/mapGetCenterLayerPoint.js", "../src/camera/mapUpdateCameraOverlays.js", "../src/camera/mapPanBy.js", "../src/camera/mapSetZoomAround.js", "../src/camera/mapPanInside.js", "../src/camera/groundBounds.js", "../src/camera/mapLimitCenter.js", "../src/camera/mapLimitOffset.js", "../src/camera/verticalGroundY.js", "../src/camera/fitCameraBounds.js", "../src/camera/mapGetBoundsCenterZoom.js", "../src/camera/mapGetBoundsZoom.js", "../src/camera/mapTryAnimatedPan.js", "../src/camera/mapGetBounds.js", "../src/camera/constrainCameraToBounds.js", "../src/controls/adjustCameraDrag.js", "../src/camera/cleanupCameraMap.js", "../src/camera/cameraMapReady.js", "../src/controls/loadCameraControls.js", "../src/utils/noOperation.js", "../src/camera/initializeCameraMap.js", "../src/core/markerSetIcon.js", "../src/core/markerSetRotation.js", "../src/core/markerCameraIconPoint.js", "../src/core/markerGetEvents.js", "../src/camera/displayPoint.js", "../src/core/markerSetPos.js", "../src/core/markerUpdateZIndex.js", "../src/core/cameraMarkerOnDrag.js", "../src/core/runMarkerPanFrame.js", "../src/core/scheduleMarkerPan.js", "../src/core/adjustCameraMarkerPan.js", "../src/core/cameraMarkerDrag.js", "../src/core/markerInitInteraction.js", "../src/core/popupGetEvents.js", "../src/core/tooltipGetEvents.js", "../src/core/popupAdjustPan.js", "../src/core/popupUpdatePosition.js", "../src/core/tooltipSetPosition.js", "../src/core/gridlayerGetEvents.js", "../src/core/gridlayerGetTiledPixelBounds.js", "../src/camera/mapCamera.js", "../src/scene/endZoom.js", "../src/constants/onMapChangeState.js", "../src/scene/renderPendingMapChange.js", "../src/scene/onMapChange.js", "../src/constants/onZoomAnimState.js", "../src/scene/renderPendingZoomAnimation.js", "../src/scene/onZoomAnim.js", "../src/scene/startZoom.js", "../src/geometry/lampRing.js", "../src/geometry/lampPostGeometry.js", "../src/geometry/quad.js", "../src/geometry/emitter.js", "../src/geometry/lightGeometry.js", "../src/constants/roundProfile.js", "../src/constants/ringDirections.js", "../src/geometry/treeRing.js", "../src/geometry/surface.js", "../src/geometry/treeGeometry.js", "../src/sources/updateStatus.js", "../src/archives/varint.js", "../src/archives/decodeDirectory.js", "../src/archives/decompress.js", "../src/archives/read.js", "../src/archives/loadDirectory.js", "../src/archives/tileId.js", "../src/archives/decodeHeader.js", "../src/archives/getHeader.js", "../src/archives/getZxy.js", "../src/archives/loadSource.js", "../src/constants/pumpState.js", "../src/utils/compareDistance.js", "../src/sources/projectedTree.js", "../src/sources/groundOffset.js", "../src/sources/addTriangle.js", "../src/sources/addGeneratedTriangle.js", "../src/sources/generateTreeGeometry.js", "../src/sources/buildAreaPoint.js", "../src/sources/projectRing.js", "../src/sources/buildAreaPolygon.js", "../src/sources/buildAreaFeature.js", "../src/sources/instanceAreaGeometry.js", "../src/sources/attachAreaMesh.js", "../src/sources/sourceAreaContext.js", "../src/sources/buildArea.js", "../src/sources/pump.js", "../src/picking/setHighlight.js", "../src/picking/showFeature.js", "../src/sources/releaseArea.js", "../src/sources/compareAreaDistance.js", "../src/sources/updateArea.js", "../src/terrain/setTerrainHeight.js", "../src/constants/attachState.js", "../src/scene/showWebGPUWarning.js", "../src/scene/failAttachment.js", "../src/scene/requestAdapter.js", "../src/scene/requestDevice.js", "../src/scene/rendererDeviceError.js", "../src/scene/rendererDeviceLost.js", "../src/scene/restoreObject.js", "../src/scene/attach.js", "../src/picking/findFeature.js", "../src/picking/onClick.js", "../src/picking/onPointerLeave.js", "../src/picking/onPointerMove.js", "../src/picking/pointerMove.js", "../src/picking/pointerClick.js", "../src/picking/pointerLeave.js", "../src/scene/attachLayer.js", "../src/scene/onAdd3DLayer.js", "../src/scene/releaseRenderer.js", "../src/scene/onRemove3DLayer.js", "../src/terrain/onTerrainChange.js", "../src/models/hasUnsupportedPrimitives.js", "../src/models/decodeModel.js", "../src/geometry/vertexNormals.js", "../src/collision/collectMeshes.js", "../src/geometry/conformModelToTerrain.js", "../src/models/loadBuffer.js", "../src/models/loadImage.js", "../src/models/textureSampler.js", "../src/models/textureFor.js", "../src/models/materialFor.js", "../src/models/nodeMatrix.js", "../src/constants/accessorTypes.js", "../src/constants/accessorSizes.js", "../src/models/readAccessorValues.js", "../src/models/readAccessor.js", "../src/models/modelNode.js", "../src/models/loadModel.js", "../src/scene/get3DEvents.js", "../src/scene/ready3D.js", "../src/scene/init3D.js", "../src/raster/isLoading.js", "../src/raster/comparePendingTiles.js", "../src/terrain/terrainAtlas.js", "../src/terrain/terrainGrid.js", "../src/raster/addRasterTile.js", "../src/raster/registerTerrainTile.js", "../src/raster/createGeometry.js", "../src/raster/createRasterMesh.js", "../src/raster/finishRasterTile.js", "../src/raster/loadRasterTile.js", "../src/raster/pumpRasterTiles.js", "../src/raster/updateRasterTiles.js", "../src/raster/getRasterEvents.js", "../src/raster/readyRaster.js", "../src/raster/reportError.js", "../src/raster/setRasterTerrain.js", "../src/raster/finishAttachment.js", "../src/raster/updateAttachedTiles.js", "../src/raster/onPMTileAdd.js", "../src/raster/releaseRasterTiles.js", "../src/raster/onPMTileRemove.js", "../src/raster/setRasterOpacity.js", "../src/raster/setPMTileOpacity.js", "../src/raster/setRasterZIndex.js", "../src/raster/setPMTileZIndex.js", "../src/raster/initRaster.js", "../src/sources/setGeoJSONData.js", "../src/terrain/clearLayerTerrain.js", "../src/terrain/onTerrainRemove.js", "../src/geometry/bridgeLocal.js", "../src/geometry/push.js", "../src/geometry/below.js", "../src/geometry/addBridges.js", "../src/terrain/loadTerrainTiles.js", "../src/terrain/readBridges.js", "../src/terrain/loadTerrain.js", "../src/terrain/loadReadyTerrain.js", "../src/terrain/setLayerTerrain.js", "../src/terrain/onTerrainAdd.js", "../src/terrain/initTerrain.js", "../src/sunlight/mix.js", "../src/sunlight/rgb.js", "../src/sunlight/atmosphere.js", "../src/sunlight/horizontalPosition.js", "../src/sunlight/solarPosition.js", "../src/sunlight/moonPosition.js", "../src/sunlight/projectCelestialBody.js", "../src/sunlight/updateSky.js", "../src/sunlight/render.js", "../src/sunlight/updateSun.js", "../src/sunlight/useLiveTime.js", "../src/sunlight/useSelectedTime.js", "../src/sunlight/tickSun.js", "../src/sunlight/removeSun.js", "../src/sunlight/onAddSun.js", "../src/constants/underEntryState.js", "../src/scene/placeEntry.js", "../src/scene/placeUnderEntry.js", "../src/scene/runPlacements.js", "../src/scene/replaceEntry.js", "../src/scene/removeEntry.js", "../src/scene/underEntry.js", "../src/sunlight/addTimeLayer.js", "../src/sunlight/removeTimeLayer.js", "../src/sunlight/initialize.js", "../src/sunlight/onAdd.js", "../src/sunlight/styleTimeControl.js", "../src/sunlight/addTo.js", "../src/sunlight/remove.js", "../src/sunlight/initSunlight.js", "../src/geometry/triangle.js", "../src/geometry/build.js", "../src/traffic/tooltip.js", "../src/geometry/box.js", "../src/constants/glass.js", "../src/constants/tyre.js", "../src/vehicles/mirror.js", "../src/constants/paints.js", "../src/constants/headlight.js", "../src/constants/taillight.js", "../src/vehicles/carModel.js", "../src/constants/hull.js", "../src/constants/white.js", "../src/vehicles/boatBenches.js", "../src/vehicles/boatModel.js", "../src/traffic/routeColor.js", "../src/vehicles/carriage.js", "../src/vehicles/busModel.js", "../src/vehicles/tramModel.js", "../src/vehicles/metroModel.js", "../src/constants/skin.js", "../src/constants/trousers.js", "../src/constants/dark.js", "../src/vehicles/bicycleModel.js", "../src/constants/shirt.js", "../src/constants/parts.js", "../src/vehicles/pedestrianModel.js", "../src/constants/vehicles.js", "../src/constants/trafficShader.js", "../src/traffic/along.js", "../src/traffic/locateTraffic.js", "../src/traffic/placeTraffic.js", "../src/traffic/startTraffic.js", "../src/traffic/addTraffic.js", "../src/traffic/disposeTrafficObject.js", "../src/traffic/destroyTrafficGpu.js", "../src/traffic/removeTraffic.js", "../src/traffic/readyTraffic.js", "../src/traffic/vehicleOffsets.js", "../src/traffic/clockMinutes.js", "../src/traffic/compareDepartures.js", "../src/traffic/scheduledTrips.js", "../src/traffic/tripsAt.js", "../src/traffic/trafficNow.js", "../src/traffic/failTraffic.js", "../src/traffic/routeGeometry.js", "../src/traffic/createTrafficMesh.js", "../src/traffic/drawTrafficRoute.js", "../src/traffic/trafficBounds.js", "../src/traffic/rebuildTrafficMesh.js", "../src/traffic/trafficStorage.js", "../src/traffic/rebaseTraffic.js", "../src/traffic/moveTraffic.js", "../src/traffic/tickTraffic.js", "../src/traffic/fetchTrafficLanes.js", "../src/traffic/toLanes.js", "../src/traffic/groundTraffic.js", "../src/traffic/prepareTraffic.js", "../src/traffic/loadedTrafficLanes.js", "../src/traffic/failedTrafficLoad.js", "../src/traffic/loadTraffic.js", "../src/traffic/updateTraffic.js", "../src/traffic/updateTrafficTerrain.js", "../src/traffic/initTraffic.js", "../src/walk/onBlur.js", "../src/constants/moves.js", "../src/walk/onPointer.js", "../src/constants/limbs.js", "../src/walk/local.js", "../src/walk/place.js", "../src/walk/onTerrain.js", "../src/walk/stop.js", "../src/walk/onKey.js", "../src/utils/wrap.js", "../src/constants/colliders.js", "../src/collision/collider.js", "../src/collision/horizontalRay.js", "../src/picking/shouldSkipOther.js", "../src/picking/hitMesh.js", "../src/picking/hit.js", "../src/walk/blocked.js", "../src/walk/step.js", "../src/walk/start.js", "../src/walk/toggle.js", "../src/walk/createWalk.js", "../src/walk/initialize.js", "../src/walk/onAdd.js", "../src/walk/onRemove.js", "../src/walk/initWalk.js", "../src/constants/indexState.js", "../src/scene/emptyEvents.js", "../src/core/refreshNativeLayerContract.js", "../src/core/bringNativeLayerToFront.js", "../src/core/bringNativeLayerToBack.js", "../src/core/closestCameraLayerPoint.js", "../src/core/cameraCircleBounds.js", "../src/core/initializeGridContainer.js", "../src/core/cancelGridFade.js", "../src/core/runGridFades.js", "../src/core/scheduleGridFade.js", "../src/core/updateGridOpacity.js", "../src/core/fireRasterLoad.js", "../src/core/addRasterImage.js", "../src/core/initializeNativeLayer.js", "../src/scene/layerLayerAdd.js", "../src/sources/setGeoJSONLayerData.js", "../src/sources/initializeGeoJSON.js", "../src/scene/initializerFor.js", "../src/scene/resolveNextInitialization.js", "../src/scene/initializeLayer.js", "../src/scene/layerInitialize.js", "../src/index.js"],
4
- "sourcesContent": ["export function editable(target) {\r\n return target.closest?.('input,textarea,select,[contenteditable=\"true\"]');\r\n}\n", "import { editable } from './editable.js';\n\nexport function shiftRotateWheel(event) {\r\n const handler = this._cameraShiftRotate;\r\n if (!event.shiftKey || editable(event.target) || event.target.closest('.leaflet-control')) return;\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n handler._map.setBearing(handler._map.getBearing() + Math.sign(event.deltaY) * 5);\r\n}\n", "import { shiftRotateWheel } from './shiftRotateWheel.js';\n\nexport function shiftRotateAddHooks() {\n const container = this._map.getContainer();\r\n container._cameraShiftRotate = this;\r\n this._wheel = shiftRotateWheel;\r\n container.addEventListener('wheel', this._wheel, { passive: false, capture: true });\n}\n", "export function shiftRotateRemoveHooks() {\n const container = this._map.getContainer();\r\n container.removeEventListener('wheel', this._wheel, true);\r\n delete container._cameraShiftRotate;\n}\n", "import { shiftRotateAddHooks } from '../controls/shiftRotateAddHooks.js';\nimport { shiftRotateRemoveHooks } from '../controls/shiftRotateRemoveHooks.js';\n\nexport const ShiftRotate = L.Handler.extend({\n addHooks: shiftRotateAddHooks,\n removeHooks: shiftRotateRemoveHooks,\n});\n", "export const cameraControlsState = {};\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { editable } from './editable.js';\n\nexport function cameraDragDown(event) {\r\n const state = cameraControlsState.dragStates.get(this);\r\n if (state.drag || !state.accept(event) || editable(event.target)) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n state.moved = false;\r\n const rect = state.map.getContainer().getBoundingClientRect();\r\n state.drag = {\r\n id: event.pointerId, x: event.clientX, y: event.clientY, cursor: state.element.style.cursor,\r\n cx: rect.left + rect.width / 2, cy: rect.top + rect.height / 2,\r\n dragging: state.map.dragging?.enabled(),\r\n };\r\n state.map.dragging?.disable();\r\n state.element.focus?.({ preventScroll: true });\r\n state.element.setPointerCapture(event.pointerId);\r\n state.element.style.cursor = 'grabbing';\r\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\n\nexport function cameraDragMove(event) {\r\n const state = cameraControlsState.dragStates.get(this);\r\n if (!state.drag || state.drag.id !== event.pointerId) return;\r\n const x = event.clientX - state.drag.x, y = event.clientY - state.drag.y;\r\n if (Math.hypot(x, y) < 3 && !state.moved) return;\r\n state.map._stopPitchBearingAnimation();\r\n state.moved = true;\r\n event.preventDefault();\r\n let bearing = x * state.sensitivity[0];\r\n if (state.orbit) {\r\n if (Math.abs(state.drag.cy - state.drag.y) > 100) {\r\n const angle = Math.atan2(event.clientY - state.drag.cy, event.clientX - state.drag.cx) -\r\n Math.atan2(event.clientY - state.drag.cy, state.drag.x - state.drag.cx);\r\n bearing = Math.atan2(Math.sin(angle), Math.cos(angle)) * 180 / Math.PI;\r\n } else bearing *= event.clientY < state.drag.cy ? 1 : -1;\r\n }\r\n state.map._setPitchAndBearing(state.map.getPitch() - y * state.sensitivity[1],\r\n state.map.getBearing() + bearing);\r\n state.drag.x = event.clientX;\r\n state.drag.y = event.clientY;\r\n}\n", "export function finishCameraDrag(state, event) {\r\n if (!state?.drag) return;\r\n if (event?.pointerId !== undefined && event.pointerId !== state.drag.id) return;\r\n const finished = state.drag;\r\n state.drag = null;\r\n if (state.element.hasPointerCapture?.(finished.id)) state.element.releasePointerCapture(finished.id);\r\n if (finished.dragging && state.map.getContainer()._leaflet_id) state.map.dragging.enable();\r\n state.element.style.cursor = finished.cursor;\r\n}\n", "import { finishCameraDrag } from './finishCameraDrag.js';\nimport { cameraControlsState } from '../constants/cameraControlsState.js';\n\nexport function cameraDragEnd(event) {\r\n finishCameraDrag(cameraControlsState.dragStates.get(this), event);\r\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\n\nexport function cameraDragClick(event) {\r\n const state = cameraControlsState.dragStates.get(this);\r\n if (!state.moved) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n state.moved = false;\r\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\n\nexport function cameraDragContextMenu(event) {\r\n const state = cameraControlsState.dragStates.get(this);\r\n if (!state.drag && !state.moved) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { finishCameraDrag } from './finishCameraDrag.js';\n\nexport function endAllCameraDrags() {\n let state;\n for (state of cameraControlsState.cameraDrags) finishCameraDrag(state);\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { cameraDragDown } from './cameraDragDown.js';\nimport { cameraDragMove } from './cameraDragMove.js';\nimport { cameraDragEnd } from './cameraDragEnd.js';\nimport { cameraDragClick } from './cameraDragClick.js';\nimport { cameraDragContextMenu } from './cameraDragContextMenu.js';\nimport { endAllCameraDrags } from './endAllCameraDrags.js';\n\nexport function dragCamera(map, element, accept, sensitivity = [0.8, 0.5], orbit = false) {\r\n const state = { map, element, accept, sensitivity, orbit, drag: null, moved: false };\r\n cameraControlsState.dragStates.set(element, state);\r\n cameraControlsState.cameraDrags.add(state);\r\n element.addEventListener('pointerdown', cameraDragDown, true);\r\n element.addEventListener('pointermove', cameraDragMove);\r\n element.addEventListener('pointerup', cameraDragEnd);\r\n element.addEventListener('pointercancel', cameraDragEnd);\r\n element.addEventListener('lostpointercapture', cameraDragEnd);\r\n element.addEventListener('click', cameraDragClick, true);\r\n element.addEventListener('contextmenu', cameraDragContextMenu);\r\n window.addEventListener('blur', endAllCameraDrags);\r\n return state;\r\n}\n", "export function acceptPitchDrag(event) {\r\n return !event.target.closest('.leaflet-control,.leaflet-marker-icon,.leaflet-popup') &&\r\n (event.button === 2 || event.button === 0 && event.ctrlKey);\r\n}\n", "import { dragCamera } from './dragCamera.js';\nimport { acceptPitchDrag } from './acceptPitchDrag.js';\n\nexport function pitchDragAddHooks() {\n this._dragState = dragCamera(this._map, this._map.getContainer(), acceptPitchDrag, [0.8, 0.5], true);\n}\n", "import { finishCameraDrag } from './finishCameraDrag.js';\nimport { cameraDragDown } from './cameraDragDown.js';\nimport { cameraDragMove } from './cameraDragMove.js';\nimport { cameraDragEnd } from './cameraDragEnd.js';\nimport { cameraDragClick } from './cameraDragClick.js';\nimport { cameraDragContextMenu } from './cameraDragContextMenu.js';\nimport { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { endAllCameraDrags } from './endAllCameraDrags.js';\n\nexport function removeCameraDrag(state) {\r\n finishCameraDrag(state);\r\n const { element } = state;\r\n element.removeEventListener('pointerdown', cameraDragDown, true);\r\n element.removeEventListener('pointermove', cameraDragMove);\r\n element.removeEventListener('pointerup', cameraDragEnd);\r\n element.removeEventListener('pointercancel', cameraDragEnd);\r\n element.removeEventListener('lostpointercapture', cameraDragEnd);\r\n element.removeEventListener('click', cameraDragClick, true);\r\n element.removeEventListener('contextmenu', cameraDragContextMenu);\r\n cameraControlsState.dragStates.delete(element);\r\n cameraControlsState.cameraDrags.delete(state);\r\n if (!cameraControlsState.cameraDrags.size) window.removeEventListener('blur', endAllCameraDrags);\r\n}\n", "import { removeCameraDrag } from './removeCameraDrag.js';\n\nexport function pitchDragRemoveHooks() {\n removeCameraDrag(this._dragState);\n}\n", "import { pitchDragAddHooks } from '../controls/pitchDragAddHooks.js';\nimport { pitchDragRemoveHooks } from '../controls/pitchDragRemoveHooks.js';\n\nexport const PitchDrag = L.Handler.extend({\n addHooks: pitchDragAddHooks,\n removeHooks: pitchDragRemoveHooks,\n});\n", "export function compassOrientation(event) {\r\n const handler = this.handler;\r\n const bearing = Number.isFinite(event.webkitCompassHeading) ? -event.webkitCompassHeading : event.alpha;\r\n const orientation = event.absolute ? 0 : (screen.orientation?.angle ?? window.orientation ?? 0);\r\n if (Number.isFinite(bearing)) handler._map.setBearing(bearing - orientation);\r\n}\n", "export function finishCompassPermission([handlerResult, permissionResult]) {\r\n const { handler, generation } = handlerResult.value;\r\n try {\r\n if (!handler.enabled() || handler._generation !== generation) return;\r\n if (!window.DeviceOrientationEvent || permissionResult.status !== 'fulfilled' ||\r\n permissionResult.value !== 'granted') {\r\n throw permissionResult.status === 'rejected' ? permissionResult.reason :\r\n new Error('Device compass permission unavailable or denied');\r\n }\r\n window.addEventListener('deviceorientation', handler._orientation);\r\n window.addEventListener('deviceorientationabsolute', handler._orientation);\r\n } catch (error) {\r\n handler.disable();\r\n handler._map.fire('error', { error });\r\n }\r\n}\n", "import { compassOrientation } from './compassOrientation.js';\nimport { finishCompassPermission } from './finishCompassPermission.js';\n\nexport function compassAddHooks() {\n this._compassGeneration = (this._generation = (this._generation || 0) + 1);\r\n this._orientation = { handler: this, handleEvent: compassOrientation };\r\n const permission = window.DeviceOrientationEvent?.requestPermission;\r\n let request;\r\n try {\r\n request = permission ? permission.call(window.DeviceOrientationEvent) : 'granted';\r\n } catch (error) {\r\n request = Promise.reject(error);\r\n }\r\n Promise.allSettled([Promise.resolve({ handler: this, generation: this._generation }), request]).then(finishCompassPermission);\n}\n", "export function compassRemoveHooks() {\n this._generation++;\r\n window.removeEventListener('deviceorientation', this._orientation);\r\n window.removeEventListener('deviceorientationabsolute', this._orientation);\n}\n", "import { compassAddHooks } from '../controls/compassAddHooks.js';\nimport { compassRemoveHooks } from '../controls/compassRemoveHooks.js';\n\nexport const Compass = L.Handler.extend({\n addHooks: compassAddHooks,\n removeHooks: compassRemoveHooks,\n});\n", "export function resizeMap(entries) {\r\n entries[0]?.target._containerResizeMap.invalidateSize();\r\n}\n", "import { resizeMap } from './resizeMap.js';\n\nexport function containerResizeAddHooks() {\n const container = this._map.getContainer();\r\n container._containerResizeMap = this._map;\r\n this._observer = new ResizeObserver(resizeMap);\r\n this._observer.observe(container);\n}\n", "export function containerResizeRemoveHooks() {\n const container = this._map.getContainer();\r\n this._observer.disconnect();\r\n delete container._containerResizeMap;\n}\n", "import { containerResizeAddHooks } from '../controls/containerResizeAddHooks.js';\nimport { containerResizeRemoveHooks } from '../controls/containerResizeRemoveHooks.js';\n\nexport const ContainerResize = L.Handler.extend({\n addHooks: containerResizeAddHooks,\n removeHooks: containerResizeRemoveHooks,\n});\n", "export function notifyCameraTouchChange() { this._map.fire('cameratouchchange'); }\n", "import { notifyCameraTouchChange } from '../controls/notifyCameraTouchChange.js';\n\nexport const TouchMode = L.Handler.extend({\n addHooks: notifyCameraTouchChange,\n removeHooks: notifyCameraTouchChange,\n});\n", "export function rotateButtonClick(event) {\r\n const control = this._rotateControl, map = control._map;\r\n event.preventDefault();\r\n if (control.options.visualizePitch) map.resetNorthPitch();\r\n else map.resetNorth();\r\n if (event.detail) map.getContainer().focus({ preventScroll: true });\r\n}\n", "export function rotateButtonKeydown(event) {\r\n const control = this._rotateControl, map = control._map, step = event.shiftKey ? 15 : 5;\r\n if (event.key === 'ArrowLeft') map.setBearing(map.getBearing() - step);\r\n else if (event.key === 'ArrowRight') map.setBearing(map.getBearing() + step);\r\n else if (event.key === 'ArrowUp' && control.options.visualizePitch) map.setPitch(map.getPitch() + step);\r\n else if (event.key === 'ArrowDown' && control.options.visualizePitch) map.setPitch(map.getPitch() - step);\r\n else if (event.key === 'Home' || event.key === ' ') this.click();\r\n else return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n}\n", "export function refreshRotateControl() {\r\n const map = this._map, pitch = this.options.visualizePitch ? map.getPitch() : 0;\r\n this._arrow.style.transform = `scale(${1 / Math.sqrt(Math.cos(pitch * Math.PI / 180))}) rotateX(${pitch}deg) rotate(${map.getBearing()}deg)`;\r\n this._button.setAttribute('aria-description', `Bearing ${Math.round(map.getBearing())} degrees, pitch ${Math.round(map.getPitch())} degrees. Arrow keys adjust the camera; Home resets it.`);\r\n this._container.style.display = this.options.closeOnZeroBearing && !map.getBearing() && !pitch &&\r\n !this._container.contains(document.activeElement) ? 'none' : '';\r\n}\n", "export function acceptRotateDrag(event) {\r\n return event.button === 0;\r\n}\n", "import { refreshRotateControl } from './refreshRotateControl.js';\n\nexport function refreshRotateFocus() {\r\n refreshRotateControl.call(this._rotateControl);\r\n}\n", "import { rotateButtonClick } from './rotateButtonClick.js';\nimport { rotateButtonKeydown } from './rotateButtonKeydown.js';\nimport { refreshRotateControl } from './refreshRotateControl.js';\nimport { dragCamera } from './dragCamera.js';\nimport { acceptRotateDrag } from './acceptRotateDrag.js';\nimport { refreshRotateFocus } from './refreshRotateFocus.js';\n\nexport function rotateOnAdd(map) {\n const container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\r\n const button = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\r\n this._map = map;\r\n this._container = container;\r\n this._button = button;\r\n button._rotateControl = this;\r\n button.href = '#';\r\n button.draggable = false;\r\n button.setAttribute('role', 'button');\r\n button.title = this.options.visualizePitch ? 'Reset bearing and pitch' : 'Reset bearing to north';\r\n button.setAttribute('aria-label', button.title);\r\n button.style.cssText = 'cursor:grab;touch-action:none';\r\n const arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow', button);\r\n this._arrow = arrow;\r\n arrow.setAttribute('aria-hidden', 'true');\r\n arrow.style.cssText = 'display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px';\r\n arrow.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\n button.onclick = rotateButtonClick;\r\n button.onkeydown = rotateButtonKeydown;\r\n this._refresh = refreshRotateControl;\r\n map.on('rotate pitch', this._refresh, this);\r\n this._refresh();\r\n this._dragState = dragCamera(map, button, acceptRotateDrag,\r\n [0.8, this.options.visualizePitch ? 0.5 : 0]);\r\n button.addEventListener('focusout', refreshRotateFocus);\r\n L.DomEvent.on(button, 'dblclick contextmenu', L.DomEvent.stop);\r\n L.DomEvent.disableClickPropagation(container);\r\n L.DomEvent.disableScrollPropagation(container);\r\n return container;\n}\n", "import { pitchDragRemoveHooks } from './pitchDragRemoveHooks.js';\n\nexport function rotateOnRemove(map) {\n map.off('rotate pitch', this._refresh, this);\n pitchDragRemoveHooks.call(this);\n}\n", "export function rotateControl(options) {\r\n return new L.Control.Rotate(options);\r\n}\n", "export function startCameraTouch(event) {\r\n const state = this._cameraTouchState, { map, container } = state;\r\n if (state.touch || event.touches.length !== 2 || event.target.closest('.leaflet-control')) return;\r\n if (!map.touchRotate.enabled() && !map.touchPitch.enabled()) return;\r\n const [a, b] = event.touches;\r\n if (Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY) < 1) return;\r\n map._stopPitchBearingAnimation();\r\n const middle = new L.Point((a.clientX + b.clientX) / 2, (a.clientY + b.clientY) / 2)\r\n .subtract(new L.Point(container.getBoundingClientRect().left, container.getBoundingClientRect().top));\r\n state.touch = {\r\n angle: Math.atan2(b.clientY - a.clientY, b.clientX - a.clientX),\r\n distance: Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY), middle,\r\n anchor: map.containerPointToLatLng(middle), zoom: map.getZoom(),\r\n bearing: map.getBearing(), pitch: map.getPitch(), zooming: map.touchZoom?.enabled(),\r\n dragging: map.dragging?.enabled(),\r\n };\r\n map.dragging?.disable();\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n if (state.nativeZoom !== undefined) state.touch.zooming = state.nativeZoom;\r\n state.touch.snap = map.options.zoomSnap;\r\n map.options.zoomSnap = 0;\r\n}\n", "export function moveCameraTouch(event) {\r\n const state = this._cameraTouchState, { map, container, touch } = state;\r\n if (!touch || event.touches.length !== 2) return;\r\n const [a, b] = event.touches;\r\n const angle = Math.atan2(b.clientY - a.clientY, b.clientX - a.clientX);\r\n const middle = new L.Point((a.clientX + b.clientX) / 2, (a.clientY + b.clientY) / 2)\r\n .subtract(new L.Point(container.getBoundingClientRect().left, container.getBoundingClientRect().top));\r\n const delta = Math.atan2(Math.sin(angle - touch.angle), Math.cos(angle - touch.angle)) * 180 / Math.PI;\r\n map._setPitchAndBearing(map.touchPitch.enabled() ? touch.pitch - (middle.y - touch.middle.y) * 0.25 : touch.pitch,\r\n map.touchRotate.enabled() ? touch.bearing + delta : touch.bearing);\r\n const distance = Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY);\r\n if (distance < 1) return;\r\n const zoom = touch.zooming ? Math.max(map.getMinZoom(), Math.min(map.getMaxZoom(),\r\n touch.zoom + Math.log2(distance / touch.distance))) : touch.zoom;\r\n map.setView(map.getCenter(), zoom, { animate: false });\r\n if (map.options.touchZoom !== 'center') {\r\n const projected = map.project(touch.anchor).subtract(map.project(map.containerPointToLatLng(middle)));\r\n map.setView(map.unproject(map.project(map.getCenter()).add(projected)), map.getZoom(), { animate: false });\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n}\n", "export function endCameraTouch(state, event) {\r\n if (!state.touch) return;\r\n if (event?.touches?.length >= 2) return;\r\n const { map, container, touch } = state;\r\n if (touch.dragging && container._leaflet_id) map.dragging.enable();\r\n map.options.zoomSnap = touch.snap;\r\n if (touch.zooming && touch.snap && container._leaflet_id) {\r\n map.setZoom(Math.round(map.getZoom() / touch.snap) * touch.snap, { animate: false });\r\n }\r\n state.touch = null;\r\n}\n", "import { endCameraTouch } from './endCameraTouch.js';\n\nexport function endCameraTouchEvent(event) {\r\n endCameraTouch(this._cameraTouchState, event);\r\n}\n", "import { endCameraTouch } from './endCameraTouch.js';\n\nexport function changeCameraTouch() {\r\n const state = this._cameraTouchState, { map, container } = state;\r\n const active = map.touchRotate.enabled() || map.touchPitch.enabled();\r\n if (active && state.nativeZoom === undefined) {\r\n state.nativeZoom = map.touchZoom?.enabled();\r\n map.touchZoom?.disable();\r\n } else if (!active && state.nativeZoom !== undefined) {\r\n endCameraTouch(state);\r\n if (state.nativeZoom && container._leaflet_id) map.touchZoom.enable();\r\n state.nativeZoom = undefined;\r\n }\r\n}\n", "import { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { endCameraTouch } from './endCameraTouch.js';\n\nexport function endAllCameraTouches() {\n let state;\n for (state of cameraControlsState.cameraTouchStates) endCameraTouch(state);\n}\n", "import { endCameraTouch } from './endCameraTouch.js';\nimport { startCameraTouch } from './startCameraTouch.js';\nimport { moveCameraTouch } from './moveCameraTouch.js';\nimport { endCameraTouchEvent } from './endCameraTouchEvent.js';\nimport { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { endAllCameraTouches } from './endAllCameraTouches.js';\nimport { changeCameraTouch } from './changeCameraTouch.js';\n\nexport function cleanupCameraTouch() {\r\n const state = this._cameraTouchState;\r\n if (!state) return;\r\n const { container, map } = state;\r\n endCameraTouch(state);\r\n container.removeEventListener('touchstart', startCameraTouch, true);\r\n container.removeEventListener('touchmove', moveCameraTouch, true);\r\n container.removeEventListener('touchend', endCameraTouchEvent, true);\r\n container.removeEventListener('touchcancel', endCameraTouchEvent, true);\r\n cameraControlsState.cameraTouchStates.delete(state);\r\n if (!cameraControlsState.cameraTouchStates.size) window.removeEventListener('blur', endAllCameraTouches);\r\n map.off('cameratouchchange', changeCameraTouch, map);\r\n map.rotateControl?.remove();\r\n delete container._cameraTouchState;\r\n delete map._cameraTouchState;\r\n}\n", "import { ShiftRotate } from '../constants/ShiftRotate.js';\nimport { PitchDrag } from '../constants/PitchDrag.js';\nimport { Compass } from '../constants/Compass.js';\nimport { ContainerResize } from '../constants/ContainerResize.js';\nimport { TouchMode } from '../constants/TouchMode.js';\nimport { cameraControlsState } from '../constants/cameraControlsState.js';\nimport { rotateOnAdd } from './rotateOnAdd.js';\nimport { rotateOnRemove } from './rotateOnRemove.js';\nimport { rotateControl } from './rotateControl.js';\nimport { shiftRotateAddHooks } from './shiftRotateAddHooks.js';\nimport { shiftRotateRemoveHooks } from './shiftRotateRemoveHooks.js';\nimport { pitchDragAddHooks } from './pitchDragAddHooks.js';\nimport { pitchDragRemoveHooks } from './pitchDragRemoveHooks.js';\nimport { compassAddHooks } from './compassAddHooks.js';\nimport { compassRemoveHooks } from './compassRemoveHooks.js';\nimport { containerResizeAddHooks } from './containerResizeAddHooks.js';\nimport { containerResizeRemoveHooks } from './containerResizeRemoveHooks.js';\nimport { startCameraTouch } from './startCameraTouch.js';\nimport { moveCameraTouch } from './moveCameraTouch.js';\nimport { endCameraTouchEvent } from './endCameraTouchEvent.js';\nimport { changeCameraTouch } from './changeCameraTouch.js';\nimport { cleanupCameraTouch } from './cleanupCameraTouch.js';\nimport { endAllCameraTouches } from './endAllCameraTouches.js';\n\ncameraControlsState.cameraDrags = new Set();\ncameraControlsState.dragStates = new WeakMap();\ncameraControlsState.cameraTouchStates = new Set();\n\nL.Control.Rotate = L.Control.extend({\n options: { position: 'topleft', closeOnZeroBearing: true, visualizePitch: true },\n onAdd: rotateOnAdd,\n onRemove: rotateOnRemove,\n});\n\nif (L.control) L.control.rotate = rotateControl;\n\nexport function cameraControls(map) {\n map.addHandler('trackContainerMutation', ContainerResize);\n if (!map.options.rotate) return;\n map.addHandler('shiftKeyRotate', ShiftRotate);\n map.addHandler('pitchDrag', PitchDrag);\n map.addHandler('compassBearing', Compass);\n map.addHandler('touchRotate', TouchMode);\n map.addHandler('touchPitch', TouchMode);\n const container = map.getContainer();\n const state = map._cameraTouchState = { map, container, touch: null, nativeZoom: undefined };\n container._cameraTouchState = state;\n cameraControlsState.cameraTouchStates.add(state);\n container.addEventListener('touchstart', startCameraTouch, { capture: true, passive: false });\n container.addEventListener('touchmove', moveCameraTouch, { capture: true, passive: false });\n container.addEventListener('touchend', endCameraTouchEvent, true);\n container.addEventListener('touchcancel', endCameraTouchEvent, true);\n window.addEventListener('blur', endAllCameraTouches);\n map.on('cameratouchchange', changeCameraTouch, map);\n if (map.options.rotateControl) {\n map.rotateControl = new L.Control.Rotate(typeof map.options.rotateControl === 'object' ? map.options.rotateControl : {});\n map.rotateControl.addTo(map);\n }\n map.once('unload', cleanupCameraTouch, map);\n}\n", "export const nativeLayerState = {};\n", "import { nativeLayerState } from '../constants/nativeLayerState.js';\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function nativeImageRefresh(event) {\n let state;\n for (state of nativeLayerState.imageStates.get(event.currentTarget) || []) refreshNativeLayer(state);\n}\n", "import { nativeLayerState } from '../constants/nativeLayerState.js';\n\nexport function nativeImageError(event) {\n let state;\n for (state of nativeLayerState.imageStates.get(event.currentTarget) || []) {\n state.source.fire('error', { error: new Error('Unable to load native layer image') });\n }\n}\n", "import { nativeLayerState } from '../constants/nativeLayerState.js';\n\nexport function removeImageState(image, state) {\r\n const states = nativeLayerState.imageStates.get(image);\r\n if (!states) return;\r\n states.delete(state);\r\n if (!states.size) nativeLayerState.imageStates.delete(image);\r\n}\n", "import { nativeLayerState } from '../constants/nativeLayerState.js';\n\nexport function addImageState(image, state) {\r\n let states = nativeLayerState.imageStates.get(image);\r\n if (!states) nativeLayerState.imageStates.set(image, states = new Set());\r\n states.add(state);\r\n}\n", "export function synchronizeZoomView(backend, now) {\n const map = backend._map;\n let animation, time, start;\n if (map._animatingZoom) {\n backend._zoomTransitions ||= new Map();\n for (animation of map.getContainer().getAnimations({ subtree: true })) {\n if (!(animation instanceof CSSTransition) || animation.transitionProperty !== 'transform' ||\n !animation.effect.target.classList.contains('leaflet-zoom-animated') ||\n backend._zoomTransitions.has(animation)) {\n continue;\n }\n time = animation.currentTime || 0;\n animation.pause();\n backend._zoomTransitions.set(animation, { start: now, time });\n }\n // Freeze CSS between rendered frames: the compositor must not outrun the canvas.\n for ([animation, { start, time }] of backend._zoomTransitions) {\n animation.currentTime = Math.min(animation.effect.getComputedTiming().endTime, time + now - start);\n }\n if (backend._zoomView) {\n const view = backend._zoomView;\n let proxy;\n for (animation of backend._zoomTransitions.keys()) {\n if (animation.effect.target === map._proxy) { proxy = animation; break; }\n }\n const progress = proxy?.effect.getComputedTiming().progress ?? Math.min(1, (now - view.start) / 250);\n const targetScale = map.getZoomScale(view.targetZoom, view.zoom), scale = 1 + (targetScale - 1) * progress;\n const from = map.project(view.from, view.zoom), to = map.project(view.to, view.zoom);\n map._cameraView = { zoom: map.getScaleZoom(scale, view.zoom),\n center: map.unproject(from.add(to.subtract(from).multiplyBy(targetScale * progress / scale)), view.zoom) };\n map._updateCameraOverlays();\n }\n }\n}\n", "export async function destroyAfterSubmission(layer, texture, submitted) {\r\n try {\r\n await submitted;\r\n } catch (error) {\r\n layer.fire('error', { error });\r\n }\r\n texture.destroy();\r\n}\r\n", "\nimport { destroyAfterSubmission } from './destroyAfterSubmission.js';\n\nexport function destroyTexture(layer, texture) {\n destroyAfterSubmission(layer, texture, layer.renderer.device.queue.onSubmittedWorkDone());\n}\n", "import { destroyTexture } from './destroyTexture.js';\n\nexport function resizeRenderer(backend, size) {\n if (!backend._size || !backend._size.equals(size)) {\n backend.renderer.width = size.x;\n backend.renderer.height = size.y;\n backend.renderer.canvas.width = Math.round(size.x * backend.renderer.dpr);\n backend.renderer.canvas.height = Math.round(size.y * backend.renderer.dpr);\n backend.renderer.canvas.style.width = `${size.x}px`;\n backend.renderer.canvas.style.height = `${size.y}px`;\n if (backend.renderer.depthTexture) destroyTexture(backend, backend.renderer.depthTexture);\n backend.renderer.depthTexture = backend.renderer.device.createTexture({\n size: [backend.renderer.canvas.width, backend.renderer.canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n });\n backend._size = size;\n }\n}\n", "export function cross(a, b) {\r\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\r\n}\r\n", "import { cross } from '../geometry/cross.js';\n\n/** Orthonormal view basis plus perspective matrices, refreshed before projecting/drawing. */\n\nexport function updateCamera(camera) {\n const z = [];\n let i, value;\n for (i = 0; i < camera.position.length; i++) z.push(camera.position[i] - camera.target[i]);\n const zLength = Math.hypot(...z) || 1;\n for (i = 0; i < 3; i++) {\n z[i] /= zLength;\n }\n const x = cross(camera.up, z), xLength = Math.hypot(...x) || 1;\n for (i = 0; i < 3; i++) {\n x[i] /= xLength;\n }\n const y = cross(z, x);\n const view = new DOMMatrix([x[0], x[1], x[2], 0, y[0], y[1], y[2], 0, z[0], z[1], z[2], 0, ...camera.position, 1]).inverse().toFloat64Array();\n for (value of view) {\n if (!Number.isFinite(value)) throw new Error('Singular 3D transform');\n }\n for (i = 0; i < 16; i++) {\n camera.viewMatrix[i] = view[i];\n }\n const f = 1 / Math.tan(camera.fov * Math.PI / 360), n = camera.near, r = camera.far;\n const projection = [f / camera.aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, r / (n - r), -1, 0, 0, r * n / (n - r), 0];\n for (i = 0; i < 16; i++) {\n camera.projectionMatrix[i] = projection[i];\n }\n const projectionView = new DOMMatrix(camera.projectionMatrix).multiply(new DOMMatrix(camera.viewMatrix)).toFloat64Array();\n for (i = 0; i < 16; i++) {\n camera.projectionViewMatrix[i] = projectionView[i];\n }\n}\n", "/** Height inside a bridge deck, or null outside its triangles. */\nexport function bridgeElevation(point, bridges) {\n // Bridges bucketed by 64 DEM pixels.\n let bridge, a, b, c, d, u, v;\n for (bridge of bridges?.get(`${Math.floor(point.x / 64)}/${Math.floor(point.y / 64)}`) || []) {\n if (point.x < bridge.min[0] || point.x > bridge.max[0] || point.y < bridge.min[1] || point.y > bridge.max[1]) {\n continue;\n }\n for ([a, b, c] of bridge.triangles) {\n d = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n u = ((b[1] - c[1]) * (point.x - c[0]) + (c[0] - b[0]) * (point.y - c[1])) / d;\n v = ((c[1] - a[1]) * (point.x - c[0]) + (a[0] - c[0]) * (point.y - c[1])) / d;\n if (u >= 0 && v >= 0 && u + v <= 1) {\n return u * a[2] + v * b[2] + (1 - u - v) * c[2];\n }\n }\n }\n return null;\n}\n", "export function sample(tiles, px, py) {\r\n const tileX = Math.floor(px / 256), tileY = Math.floor(py / 256);\r\n const tile = tiles.get(`${tileX}/${tileY}`);\r\n if (!tile) return null;\r\n const elevation = tile[(py - tileY * 256) * 256 + px - tileX * 256];\r\n return Number.isFinite(elevation) && elevation > -1000 ? elevation : null;\r\n}\r\n", "import { sample } from './sample.js';\n\n/** Bilinear DEM sampling, with the original first-valid-neighbour no-data rule. */\n\nexport function terrainElevation(point, tiles) {\n const x = point.x - 0.5, y = point.y - 0.5;\n const x0 = Math.floor(x), y0 = Math.floor(y);\n const fx = x - x0, fy = y - y0;\n const values = [sample(tiles, x0, y0), sample(tiles, x0 + 1, y0), sample(tiles, x0, y0 + 1), sample(tiles, x0 + 1, y0 + 1)];\n let valid = 0, first = null;\n let value;\n for (value of values) {\n if (!Number.isFinite(value)) continue;\n if (!valid) first = value;\n valid++;\n }\n if (valid < 4) return first;\n return (values[0] * (1 - fx) + values[1] * fx) * (1 - fy) +\n (values[2] * (1 - fx) + values[3] * fx) * fy;\n}\n", "import { bridgeElevation } from '../geometry/bridgeElevation.js';\nimport { terrainElevation } from './terrainElevation.js';\n\n/** @param {L.LatLng|L.Point} location LatLng, or a pixel point at the terrain zoom. */\n\nexport function getElevation(backend, location) {\n if (!backend._map || !backend._terrainReady) return null;\n const point = location instanceof L.Point ? location : backend._map.project(location, backend._terrainZoom);\n return bridgeElevation(point, backend._bridges) ?? terrainElevation(point, backend._terrainTiles);\n}\n", "import { updateCamera } from \"../scene/updateCamera.js\";\nimport { getElevation } from \"../terrain/getElevation.js\";\n\nexport function updateMapCamera(backend, size) {\n const map = backend._map;\n // Match the map's perspective, including the intermediate view of an animated zoom.\n const zoom = map._cameraView?.zoom ?? map.getZoom(), center = map._cameraView?.center ?? map.getCenter();\n const pixelsPerMeter = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\n const offset = map.project(center, zoom).subtract(map.project(backend._sceneOrigin, zoom));\n const distance = size.y * 1.5 / pixelsPerMeter;\n const target = [\n offset.x / pixelsPerMeter,\n (map._terrain3D ? getElevation(map._terrain3D, center): undefined) ?? 0,\n offset.y / pixelsPerMeter\n ];\n const pitch = map.getPitch() * Math.PI / 180;\n const bearing = map.getBearing() * Math.PI / 180;\n const camera = backend.camera;\n camera.fov = 2 * Math.atan(1 / 3) * 180 / Math.PI;\n camera.aspect = size.x / size.y;\n camera.near = Math.max(0.1, distance / 10000);\n camera.far = Math.max(10000, distance * 10);\n camera.position[0] = target[0] + Math.sin(bearing) * Math.sin(pitch) * distance;\n camera.position[1] = target[1] + Math.cos(pitch) * distance;\n camera.position[2] = target[2] + Math.cos(bearing) * Math.sin(pitch) * distance;\n camera.up[0] = -Math.sin(bearing) * Math.cos(pitch);\n camera.up[1] = Math.sin(pitch);\n camera.up[2] = -Math.cos(bearing) * Math.cos(pitch);\n camera.target[0] = target[0]; camera.target[1] = target[1]; camera.target[2] = target[2];\n // Refresh the camera view, projection and combined projection-view matrices.\n updateCamera(camera);\n}\n", "/** Compose parent*local matrices; a node.matrix overrides its position/rotation/scale. */\n\nexport function updateWorldMatrix(node) {\n const parent = node.parent;\n const parentVersion = parent?._worldMatrixVersion || 0;\n const matrixMode = Boolean(node.matrix);\n let changed = node._worldParent !== parent || node._parentWorldVersion !== parentVersion ||\n node._worldMatrixMode !== matrixMode;\n let i, value, child;\n if (node.matrix) {\n const state = node._matrixState ||= new Float64Array(16);\n for (i = 0; i < 16; i++) {\n if (state[i] !== node.matrix[i]) changed = true;\n state[i] = node.matrix[i];\n }\n } else {\n const state = node._transformState ||= new Float64Array(9);\n for (i = 0; i < 9; i++) {\n value = i < 3 ? node.position[i] : i < 6 ? node.rotation[i - 3] : node.scale[i - 6];\n if (state[i] !== value) changed = true;\n state[i] = value;\n }\n }\n if (!changed) {\n for (child of node.children) updateWorldMatrix(child);\n return;\n }\n let local;\n if (node.matrix) local = node.matrix;\n else {\n const degrees = 180 / Math.PI;\n const matrix = new DOMMatrix().translate(...node.position);\n // Node rotations use YXZ, as did the previous renderer.\n matrix.rotateAxisAngleSelf(0, 1, 0, node.rotation[1] * degrees);\n matrix.rotateAxisAngleSelf(1, 0, 0, node.rotation[0] * degrees);\n matrix.rotateAxisAngleSelf(0, 0, 1, node.rotation[2] * degrees);\n local = matrix.scale(...node.scale).toFloat64Array();\n }\n const world = parent\n ? new DOMMatrix(parent.worldMatrix).multiply(new DOMMatrix(local)).toFloat64Array()\n : local;\n for (i = 0; i < 16; i++) node.worldMatrix[i] = world[i];\n node._worldParent = parent;\n node._parentWorldVersion = parentVersion;\n node._worldMatrixMode = matrixMode;\n node._worldMatrixVersion = (node._worldMatrixVersion || 0) + 1;\n for (child of node.children) updateWorldMatrix(child);\n}\n", "/** Cache local AABB and center for ray picking and transparent mesh sorting. */\n\nexport function computeBounds(geometry) {\n const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity], data = geometry.attributes.position.data;\n let i;\n for (i = 0; i < data.length; i++) {\n min[i % 3] = Math.min(min[i % 3], data[i]);\n max[i % 3] = Math.max(max[i % 3], data[i]);\n }\n const instances = geometry.attributes.instanceOffset;\n if (instances) {\n let axis, offset, low, high;\n for (axis = 0; axis < 3; axis++) {\n low = Infinity;\n high = -Infinity;\n for (offset = axis; offset < instances.data.length; offset += instances.size) {\n low = Math.min(low, instances.data[offset]);\n high = Math.max(high, instances.data[offset]);\n }\n min[axis] = Math.fround(min[axis] + low);\n max[axis] = Math.fround(max[axis] + high);\n }\n }\n const center = [];\n for (i = 0; i < min.length; i++) center.push((min[i] + max[i]) / 2);\n let radius = instances ? Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) / 2 : 0;\n for (i = 0; !instances && i < data.length; i += 3) {\n radius = Math.max(radius, Math.hypot(\n data[i] - center[0], data[i + 1] - center[1], data[i + 2] - center[2]\n ));\n }\n geometry.bounds = { min, max, center, radius };\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\n\nexport function collectMeshes(mesh, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes) {\n if (!mesh.visible) return;\n if (mesh.geometry) {\n if (sunlight?.altitude >= 3 && !mesh.tile && mesh._appearance !== 0 &&\n !mesh.program.nightLight && mesh.program.depthTest !== false) shadowMeshes.push(mesh);\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\n const bounds = mesh.geometry.bounds;\n const world = mesh.worldMatrix;\n const center = bounds.center;\n const x = world[0] * center[0] + world[4] * center[1] + world[8] * center[2] + world[12];\n const y = world[1] * center[0] + world[5] * center[1] + world[9] * center[2] + world[13];\n const z = world[2] * center[0] + world[6] * center[1] + world[10] * center[2] + world[14];\n const clipZ = projection[2] * x + projection[6] * y + projection[10] * z + projection[14];\n const clipW = projection[3] * x + projection[7] * y + projection[11] * z + projection[15];\n mesh._sortDepth = clipZ / clipW;\n const radius = bounds.radius * Math.max(\n Math.hypot(world[0], world[1], world[2]),\n Math.hypot(world[4], world[5], world[6]),\n Math.hypot(world[8], world[9], world[10])\n );\n mesh._visibleInFrame =\n frustum[0][0] * x + frustum[0][1] * y + frustum[0][2] * z + frustum[0][3] >= -radius * frustumLengths[0] &&\n frustum[1][0] * x + frustum[1][1] * y + frustum[1][2] * z + frustum[1][3] >= -radius * frustumLengths[1] &&\n frustum[2][0] * x + frustum[2][1] * y + frustum[2][2] * z + frustum[2][3] >= -radius * frustumLengths[2] &&\n frustum[3][0] * x + frustum[3][1] * y + frustum[3][2] * z + frustum[3][3] >= -radius * frustumLengths[3] &&\n frustum[4][0] * x + frustum[4][1] * y + frustum[4][2] * z + frustum[4][3] >= -radius * frustumLengths[4] &&\n frustum[5][0] * x + frustum[5][1] * y + frustum[5][2] * z + frustum[5][3] >= -radius * frustumLengths[5];\n if (mesh._visibleInFrame) candidates.push(mesh);\n }\n let child;\n for (child of mesh.children) {\n collectMeshes(child, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes);\n }\n}\n", "import { updateWorldMatrix } from \"../scene/updateWorldMatrix.js\";\nimport { collectMeshes } from './collectMeshes.js';\n\nexport function collectFrameMeshes(backend, sunlight, sceneChanged) {\n const camera = backend.camera;\n const projection = camera.projectionViewMatrix;\n const renderer = backend.renderer;\n const frustum = renderer.frustum ||= [\n new Float64Array(4), new Float64Array(4), new Float64Array(4),\n new Float64Array(4), new Float64Array(4), new Float64Array(4),\n ];\n const frustumLengths = renderer.frustumLengths ||= new Float64Array(6);\n let i, axis, plane, j, offset;\n for (i = 0; i < 6; i++) {\n axis = Math.floor(i / 2);\n plane = frustum[i];\n for (j = 0; j < 4; j++) {\n offset = j * 4;\n plane[j] = i === 4 ? projection[offset + 2]\n : i % 2 ? projection[offset + 3] - projection[offset + axis]\n : projection[offset + 3] + projection[offset + axis];\n }\n frustumLengths[i] = Math.hypot(plane[0], plane[1], plane[2]);\n }\n const candidates = backend._visibleMeshes ||= [];\n candidates.length = 0;\n const shadowMeshes = backend._shadowMeshes ||= [];\n shadowMeshes.length = 0;\n if (sceneChanged) updateWorldMatrix(backend.scene);\n collectMeshes(backend.scene, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes);\n}\n", "export function ensureRoofBlit(renderer) {\n const device = renderer.device;\n if (!renderer.roofBlit) {\n const module = device.createShaderModule({\n code: /* wgsl */ `@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);}`\n });\n renderer.roofBlit = {\n pipeline: device.createRenderPipeline({\n layout: 'auto',\n vertex: { module, entryPoint: 'vertexMain' },\n fragment: {\n module,\n entryPoint: 'fragmentMain',\n targets: [{\n format: 'rgba8unorm',\n blend: {\n color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n },\n }],\n },\n primitive: { topology: 'triangle-strip' },\n }),\n sampler: device.createSampler({ magFilter: 'linear', minFilter: 'linear' }),\n };\n }\n}\n", "import { TILE_SIZE } from '../constants/TILE_SIZE.js';\n\nexport function getRasterTileSize() {\r\n return new L.Point(TILE_SIZE, TILE_SIZE);\r\n}\n", "export function compareRoofTiles(a, b) {\r\n return (a.layer.options.zIndex || 0) - (b.layer.options.zIndex || 0) ||\r\n a.tile.coords.z - b.tile.coords.z;\r\n}\r\n", "import { getRasterTileSize } from '../raster/getRasterTileSize.js';\nimport { compareRoofTiles } from './compareRoofTiles.js';\n\nexport function composeRoofAtlas(backend, tiles, zoom, min, size, width, height) {\n const renderer = backend.renderer, device = renderer.device, map = backend._map;\n const opacities = new Float32Array(Math.max(1, tiles.length) * 64);\n const opacityBuffer = device.createBuffer({\n size: opacities.byteLength,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n const encoder = device.createCommandEncoder();\n const atlasPass = encoder.beginRenderPass({\n colorAttachments: [{\n view: backend._roofRaster.texture.texture.createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n }],\n });\n atlasPass.setPipeline(renderer.roofBlit.pipeline);\n tiles.sort(compareRoofTiles);\n let i, tile, layer, coords, image, source, tileSize, offset, x, y;\n for ([i, { tile, layer }] of tiles.entries()) {\n ({ coords, image } = tile);\n source = tile.texture;\n if (source.uploaded !== source.image) {\n device.queue.copyExternalImageToTexture({ source: image }, { texture: source.texture },\n [source.texture.width, source.texture.height]);\n source.uploaded = source.image;\n }\n\n opacities[i * 64] = layer.options.opacity;\n tileSize = getRasterTileSize().multiplyBy(map.getZoomScale(zoom, coords.z));\n offset = new L.Point(coords.x, coords.y).scaleBy(tileSize).subtract(min);\n x = offset.x * width / size.x, y = offset.y * height / size.y;\n atlasPass.setViewport(x, y, Math.min(tileSize.x * width / size.x, width - x),\n Math.min(tileSize.y * height / size.y, height - y), 0, 1);\n atlasPass.setBindGroup(0, device.createBindGroup({\n layout: renderer.roofBlit.pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: source.texture.createView() },\n { binding: 1, resource: renderer.roofBlit.sampler },\n { binding: 2, resource: { buffer: opacityBuffer, offset: i * 256, size: 4 } },\n ],\n }));\n atlasPass.draw(4);\n }\n atlasPass.end();\n device.queue.writeBuffer(opacityBuffer, 0, opacities);\n device.queue.submit([encoder.finish()]);\n opacityBuffer.destroy();\n}\n", "import { ensureRoofBlit } from './ensureRoofBlit.js';\nimport { composeRoofAtlas } from './composeRoofAtlas.js';\nimport { destroyTexture } from './destroyTexture.js';\nimport { getRasterTileSize } from '../raster/getRasterTileSize.js';\n\nexport function rebuildRoofAtlas(backend, rasters, signature, now) {\n const map = backend._map, renderer = backend.renderer;\n const tiles = [];\n let zoom = -Infinity;\n let layer, tile, coords, size2;\n for (layer of rasters) for (tile of layer._rasterTiles.values()) {\n if (tile.done && !tile.request.signal.aborted && tile.image) {\n tiles.push({ tile, layer });\n zoom = Math.max(zoom, tile.coords.z);\n }\n }\n if (!tiles.length) zoom = map.getZoom();\n const bounds = new L.Bounds();\n for ({ tile: { coords }, layer } of tiles) {\n size2 = getRasterTileSize().multiplyBy(map.getZoomScale(zoom, coords.z));\n bounds.extend(new L.Point(coords.x, coords.y).scaleBy(size2));\n bounds.extend(new L.Point(coords.x + 1, coords.y + 1).scaleBy(size2));\n }\n const min = bounds.min || map.project(backend._sceneOrigin, zoom);\n const size = bounds.isValid() ? bounds.getSize() : new L.Point(1, 1);\n // ponytail: cap at 4096 px; virtual textures if wide views need native detail.\n const limit = 4096;\n const scale = Math.min(1, limit / Math.max(size.x, size.y));\n const width = Math.max(1, Math.ceil(size.x * scale));\n const height = Math.max(1, Math.ceil(size.y * scale));\n const origin = map.project(backend._sceneOrigin, zoom);\n const pixels = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\n const matrix = new DOMMatrix();\n matrix.m11 = pixels / size.x; matrix.m33 = pixels / size.y;\n matrix.m41 = (origin.x - min.x) / size.x; matrix.m43 = (origin.y - min.y) / size.y;\n const texture = backend._roofRaster?.texture;\n if (texture && (texture.width !== width || texture.height !== height)) {\n destroyTexture(backend, texture.texture);\n texture.texture = renderer.device.createTexture({\n size: [width, height],\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n });\n texture.width = width;\n texture.height = height;\n }\n backend._roofRaster = {\n signature, updatedAt: now, matrix: Array.from(matrix.toFloat64Array()),\n texture: texture || {\n device: renderer.device,\n texture: renderer.device.createTexture({\n size: [width, height],\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: renderer.device.createSampler({\n addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\n }),\n samplerOptions: { addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' },\n image: null, width, height,\n format: 'rgba8unorm', srgb: false, flipY: false, uploaded: null,\n },\n };\n // Compose the atlas on the GPU: re-uploading a large canvas stalls Firefox for hundreds of ms.\n ensureRoofBlit(renderer);\n composeRoofAtlas(backend, tiles, zoom, min, size, width, height);\n}\n", "import { rebuildRoofAtlas } from './rebuildRoofAtlas.js';\nimport { destroyTexture } from './destroyTexture.js';\n\nexport function updateRoofRaster(backend, now) {\n const map = backend._map;\n const rasters = [];\n let hasRoofTexture = false;\n let layer;\n for (layer of backend._layers) {\n if (layer.options.roofTexture) { hasRoofTexture = true; break; }\n }\n if (hasRoofTexture) {\n for (layer of Object.values(map._layers)) {\n if (layer._type === 'pmtiles' && layer._rasterTiles && layer.options.opacity > 0) rasters.push(layer);\n }\n const signatures = [];\n let loading = false;\n for (layer of rasters) {\n signatures.push(`${L.Util.stamp(layer)}:${layer._rasterVersion || 0}:${layer.options.opacity}:${layer.options.zIndex}`);\n loading ||= Boolean(layer._loadingTiles);\n }\n const signature = signatures.join('|');\n if (!backend._roofRaster || backend._roofRaster.signature !== signature &&\n (!loading || now - backend._roofRaster.updatedAt >= 50)) {\n rebuildRoofAtlas(backend, rasters, signature, now);\n }\n } else if (backend._roofRaster) {\n destroyTexture(backend, backend._roofRaster.texture.texture);\n backend._roofRaster = null;\n }\n return rasters;\n}\n", "export function compareMeshes(a, b) {\r\n return Number(Boolean(b.ground)) - Number(Boolean(a.ground)) ||\r\n (a.ground && b.ground ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\r\n a.tile.coords.z - b.tile.coords.z : 0) ||\r\n Number(a.program.transparent) - Number(b.program.transparent) ||\r\n (a.program.transparent\r\n ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\r\n b._sortDepth - a._sortDepth || a.id - b.id\r\n : (a._sortDepth ?? 0) - (b._sortDepth ?? 0) || a.id - b.id);\r\n}\r\n", "\nimport { compareMeshes } from './compareMeshes.js';\n\nexport function sortMeshes(meshes) {\n return meshes.sort(compareMeshes);\n}\n", "/** Test the mesh's ground footprint against loaded imagery, including coarse parent tiles. */\nexport function roofCoverage(mesh, backend, rasters) {\n const map = backend._map, bounds = mesh.geometry.bounds, world = mesh.worldMatrix;\n let intersectsArchive = false;\n let layer, zoom, origin, scale, min, max, i, x, y, z, px, py, nw, se, remaining, tile, size, left;\n let top, pieces, x0, y0, x1, y1, l, t, r, b;\n for (layer of rasters) {\n zoom = layer._tileZoom, origin = map.project(backend._sceneOrigin, zoom);\n scale = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\n min = [Infinity, Infinity], max = [-Infinity, -Infinity];\n for (i = 0; i < 8; i++) {\n x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\n z = i & 4 ? bounds.max[2] : bounds.min[2];\n px = origin.x + (world[0] * x + world[4] * y + world[8] * z + world[12]) * scale;\n py = origin.y + (world[2] * x + world[6] * y + world[10] * z + world[14]) * scale;\n min[0] = Math.min(min[0], px); min[1] = Math.min(min[1], py);\n max[0] = Math.max(max[0], px); max[1] = Math.max(max[1], py);\n }\n if (layer.header.maxLat !== undefined && layer.header.minLon !== undefined &&\n layer.header.minLat !== undefined && layer.header.maxLon !== undefined) {\n nw = map.project([layer.header.maxLat, layer.header.minLon], zoom);\n se = map.project([layer.header.minLat, layer.header.maxLon], zoom);\n min[0] = Math.max(min[0], nw.x); min[1] = Math.max(min[1], nw.y);\n max[0] = Math.min(max[0], se.x); max[1] = Math.min(max[1], se.y);\n if (min[0] >= max[0] || min[1] >= max[1]) continue;\n }\n intersectsArchive = true;\n remaining = [[min[0], min[1], max[0], max[1]]];\n for (tile of layer._rasterTiles.values()) {\n // Failed imagery already reports an error; do not hide the building indefinitely.\n if (!tile.done && !tile.error) continue;\n size = 256 * 2 ** (zoom - tile.coords.z);\n left = tile.coords.x * size, top = tile.coords.y * size;\n pieces = [];\n for ([x0, y0, x1, y1] of remaining) {\n l = Math.max(x0, left), t = Math.max(y0, top);\n r = Math.min(x1, left + size), b = Math.min(y1, top + size);\n if (l >= r || t >= b) {\n pieces.push([x0, y0, x1, y1]);\n continue;\n }\n if (y0 < t) pieces.push([x0, y0, x1, t]);\n if (b < y1) pieces.push([x0, b, x1, y1]);\n if (x0 < l) pieces.push([x0, t, l, b]);\n if (r < x1) pieces.push([r, t, x1, b]);\n }\n remaining = pieces;\n if (!remaining.length) return true;\n }\n }\n return !intersectsArchive;\n}\n", "import { sortMeshes } from \"./sortMeshes.js\";\nimport { roofCoverage } from \"../geometry/roofCoverage.js\";\n\nexport function prepareFrameMeshes(backend, rasters, now, meshes) {\n const candidates = backend._visibleMeshes, shadowMeshes = backend._shadowMeshes, renderer = backend.renderer;\n let appearing = false;\n // Visible meshes: opaque first, transparent surfaces back-to-front.\n let mesh, progress;\n for (mesh of candidates) {\n if (mesh.program.uniforms.roofTexture && !rasters.length) mesh._roofRevealed = true;\n if (mesh.program.uniforms.roofTexture && !mesh._roofRevealed && rasters.length) {\n if (mesh._roofCoverageSignature !== backend._roofRaster?.signature) {\n mesh._roofCoverageSignature = backend._roofRaster?.signature;\n mesh._roofCovered = roofCoverage(mesh, backend, rasters);\n }\n if (!mesh._roofCovered) { mesh._appearance = 0; continue; }\n mesh._roofRevealed = true;\n }\n if (mesh.fadeDuration) {\n mesh.fadeStart ??= mesh.tile?.loadedAt ?? now;\n progress = Math.min(1, (now - mesh.fadeStart) / mesh.fadeDuration);\n mesh._appearance = progress * progress * (3 - 2 * progress);\n appearing ||= progress < 1;\n }\n meshes.push(mesh);\n }\n candidates.length = 0;\n sortMeshes(meshes);\n let minGroundZoom = Infinity, maxGroundZoom = -Infinity;\n for (mesh of meshes) {\n if (!mesh.ground) continue;\n minGroundZoom = Math.min(minGroundZoom, mesh.tile.coords.z);\n maxGroundZoom = Math.max(maxGroundZoom, mesh.tile.coords.z);\n }\n renderer.groundOverlap = minGroundZoom !== maxGroundZoom;\n let shadowCount = 0;\n for (mesh of shadowMeshes) {\n if (mesh.visible && mesh._appearance !== 0) shadowMeshes[shadowCount++] = mesh;\n }\n shadowMeshes.length = shadowCount;\n return appearing;\n}\n", "\nexport function bindSunlight(layer) {\n const sun = layer.renderer.sunlight;\n sun.bindGroup = layer.renderer.device.createBindGroup({\n layout: sun.layout, entries: [\n { binding: 0, resource: { buffer: sun.buffer } },\n { binding: 1, resource: sun.texture.createView() },\n { binding: 2, resource: sun.sampler },\n { binding: 3, resource: { buffer: sun.lights } },\n ]\n });\n}\n", "export function visitCells(packed, minX, minZ, cellSize, columns, offsets, data) {\n let values, i, radius, x, z, y, c, key, j, o;\n for (values of packed) for (i = 0; i < values.length; i += 8) {\n radius = values[i + 3], x = values[i] - minX, z = values[i + 2] - minZ;\n for (y = Math.floor((z - radius) / cellSize); y <= Math.floor((z + radius) / cellSize); y++) {\n for (c = Math.floor((x - radius) / cellSize); c <= Math.floor((x + radius) / cellSize); c++) {\n key = y * columns + c;\n if (data) {\n for (j = 0, o = offsets[key] * 4; j < 8; j++) data[o + j] = values[i + j];\n offsets[key] += 2;\n } else offsets[key]++;\n }\n }\n }\n}\n", "import { visitCells } from './visitCells.js';\n\n/** Pack world-space point lights into the shader's spatial grid. */\nexport function lightGrid(packed, maxBytes) {\n let count = 0;\n let values, i, value, key;\n for (values of packed) count += values.length / 8;\n const cellSize = 32;\n let data = new Float32Array(8);\n if (count) {\n let minX = Infinity, minZ = Infinity, maxX = -Infinity, maxZ = -Infinity;\n for (values of packed) for (i = 0; i < values.length; i += 8) {\n minX = Math.min(minX, values[i] - values[i + 3]);\n maxX = Math.max(maxX, values[i] + values[i + 3]);\n minZ = Math.min(minZ, values[i + 2] - values[i + 3]);\n maxZ = Math.max(maxZ, values[i + 2] + values[i + 3]);\n }\n const columns = Math.ceil((maxX - minX) / cellSize) + 1,\n rows = Math.ceil((maxZ - minZ) / cellSize) + 1;\n // Counting sort: count the lights of each cell, then fill each cell's slice.\n const counts = new Uint32Array(columns * rows),\n next = new Uint32Array(columns * rows);\n visitCells(packed, minX, minZ, cellSize, columns, counts);\n let entries = 0;\n for (value of counts) entries += value;\n const length = (2 + columns * rows + entries * 2) * 4;\n if (length * 4 > maxBytes) {\n throw new Error('Streetlight grid exceeds GPU storage limit');\n }\n data = new Float32Array(length);\n data.set([minX, minZ, cellSize, columns, rows, count, 0, 0]);\n let offset = 2 + columns * rows;\n for (key = 0; key < counts.length; key++) if (counts[key]) {\n data[(2 + key) * 4] = next[key] = offset;\n data[(2 + key) * 4 + 1] = counts[key];\n offset += counts[key] * 2;\n }\n visitCells(packed, minX, minZ, cellSize, columns, next, data);\n }\n\n return { data, count };\n}\n", "\n/** World-space [x, y, z, radius, r, g, b, intensity] for one mesh's point lights. */\nexport function worldLights(lights, m) {\n const values = new Float32Array(lights.length * 8);\n let i, x, y, z, radius, color, flux, w;\n for (i = 0; i < lights.length; i++) {\n ({\n position: [x, y, z],\n radius,\n color,\n flux\n } = lights[i]);\n w = m[3] * x + m[7] * y + m[11] * z + m[15];\n values.set(\n [\n (m[0] * x + m[4] * y + m[8] * z + m[12]) / w,\n (m[1] * x + m[5] * y + m[9] * z + m[13]) / w,\n (m[2] * x + m[6] * y + m[10] * z + m[14]) / w,\n radius,\n ...color,\n flux / (4 * Math.PI) * 0.03\n ],\n i * 8\n );\n }\n return values;\n}", "import { lightGrid } from './lightGrid.js';\nimport { worldLights } from './worldLights.js';\n\n/** Keep fixed lamps cached when moving headlights change. */\nexport function cacheLightGrid(meshes, previous, maxBytes) {\n let unchanged = previous?.meshes.length === meshes.length;\n const packed = [], snapshots = [];\n let i, mesh, matrix, lights, cache, sameMatrix, j;\n for (i = 0; i < meshes.length; i++) {\n mesh = meshes[i], matrix = mesh.worldMatrix, lights = mesh.extras.lights;\n cache = mesh._worldLights;\n sameMatrix = Boolean(cache);\n for (j = 0; j < matrix.length && sameMatrix; j++) sameMatrix = matrix[j] === cache.matrix[j];\n if (!sameMatrix || cache.lights !== lights) {\n cache = mesh._worldLights = { lights, matrix: [...matrix], data: worldLights(lights, matrix) };\n }\n unchanged &&= previous.meshes[i].mesh === mesh && previous.meshes[i].cache === cache;\n packed.push(cache.data);\n snapshots.push({ mesh, cache });\n }\n if (unchanged) return previous;\n return { ...lightGrid(packed, maxBytes), meshes: snapshots };\n}\n", "export function collectLightMeshes(node, fixed, moving) {\n if (!node.visible) return;\n if (node.extras?.lights) (node.extras.dynamicLights ? moving : fixed).push(node);\n let child;\n for (child of node.children || []) collectLightMeshes(child, fixed, moving);\n}\n", "import { destroyTexture } from '../rendering/destroyTexture.js';\nimport { bindSunlight } from '../shadows/bindSunlight.js';\nimport { cacheLightGrid } from './cacheLightGrid.js';\nimport { collectLightMeshes } from './collectLightMeshes.js';\n\nexport function updatePointLights(backend) {\n const { device, sunlight: sun } = backend.renderer;\n const fixed = [], moving = [];\n let layer;\n for (layer of backend._layers) {\n if (!layer.options.nightLight || !layer.root.visible) continue;\n collectLightMeshes(layer.root, fixed, moving);\n }\n const maxBytes = device.limits.maxStorageBufferBindingSize;\n const staticGrid = cacheLightGrid(fixed, sun.staticLightGrid, maxBytes);\n const dynamicGrid = cacheLightGrid(moving, sun.dynamicLightGrid, maxBytes);\n if (staticGrid === sun.staticLightGrid && dynamicGrid === sun.dynamicLightGrid) return;\n const size = staticGrid.data.byteLength + dynamicGrid.data.byteLength;\n if (size > maxBytes) throw new Error('Streetlight grid exceeds GPU storage limit');\n let uploadStatic = staticGrid !== sun.staticLightGrid;\n if (sun.lights.size < size) {\n destroyTexture(backend, sun.lights);\n sun.lights = device.createBuffer({ size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\n bindSunlight(backend);\n uploadStatic = true;\n }\n // The spare header component points to a second grid in the same storage binding.\n staticGrid.data[6] = staticGrid.data.length / 4;\n if (uploadStatic) device.queue.writeBuffer(sun.lights, 0, staticGrid.data);\n device.queue.writeBuffer(sun.lights, staticGrid.data.byteLength, dynamicGrid.data);\n sun.lightCount = staticGrid.count + dynamicGrid.count;\n sun.staticLightGrid = staticGrid;\n sun.dynamicLightGrid = dynamicGrid;\n}\n", "import { destroyTexture } from './destroyTexture.js';\nimport { updatePointLights } from '../lighting/updatePointLights.js';\n\nexport function prepareFrameUniforms(backend, meshes, shadowMeshes, sunlight) {\n const renderer = backend.renderer, camera = backend.camera;\n const view = camera.viewMatrix, direction = sunlight?.direction;\n const x = direction ? direction[0] : -300;\n const y = direction ? direction[1] : 500;\n const z = direction ? direction[2] : 300;\n const lightX = view[0] * x + view[4] * y + view[8] * z;\n const lightY = view[1] * x + view[5] * y + view[9] * z;\n const lightZ = view[2] * x + view[6] * y + view[10] * z;\n const lightLength = Math.hypot(lightX, lightY, lightZ) || 1;\n const skyLength = Math.hypot(view[4], view[5], view[6]) || 1;\n // One uniform upload per frame: per-mesh writeBuffer calls dominate Firefox's GPU process.\n // Slot 0 holds the camera; 256-byte mesh slots follow (double-sided meshes use two).\n if (!renderer.uniformBuffer || renderer.uniformBuffer.size < (meshes.length * 2 + shadowMeshes.length + 1) * 256) {\n if (renderer.uniformBuffer) destroyTexture(backend, renderer.uniformBuffer);\n renderer.uniformBuffer = renderer.device.createBuffer({\n size: Math.max(64, meshes.length * 4 + shadowMeshes.length * 2) * 256,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n renderer.uniformData = new Float32Array(renderer.uniformBuffer.size / 4);\n }\n const frameData = renderer.uniformData;\n frameData.set(camera.viewMatrix, 0);\n frameData.set(camera.projectionMatrix, 16);\n if (backend._roofRaster?.matrix) frameData.set(backend._roofRaster.matrix, 32);\n else {\n frameData.fill(0, 32, 48);\n frameData[32] = frameData[37] = frameData[42] = frameData[47] = 1;\n }\n frameData[48] = lightX / lightLength;\n frameData[49] = lightY / lightLength;\n frameData[50] = lightZ / lightLength;\n frameData[51] = sunlight && sunlight.altitude <= 0 ? 0 : 1;\n frameData[52] = view[4] / skyLength;\n frameData[53] = view[5] / skyLength;\n frameData[54] = view[6] / skyLength;\n const night = sunlight ? Math.max(0, Math.min(1, (3 - sunlight.altitude) / 9)) : 0;\n frameData[55] = night * night * (3 - 2 * night);\n const tint = sunlight?.tint;\n frameData[56] = tint ? tint[0] : 1;\n frameData[57] = tint ? tint[1] : 1;\n frameData[58] = tint ? tint[2] : 1;\n frameData[59] = 0;\n if (night > 0) updatePointLights(backend);\n renderer.uniformSlot = 1;\n}\n", "/** Upload retained CPU data and draw one mesh in the active WebGPU render pass. */\n\nexport function drawGeometry(backend, mesh, pass, cullMode, frontFace) {\n const { geometry, program } = mesh;\n const device = backend.renderer.device;\n // Mixed-LOD imagery composites coarse-to-fine; its depth still occludes later 3D objects.\n // ponytail: self-occlusion during LOD blending needs separate per-LOD depth passes.\n const depthCompare = program.depthTest === false || (mesh.ground && backend.renderer.groundOverlap)\n ? 'always' : 'less-equal';\n const pipelineKey = `${cullMode}:${frontFace}:${depthCompare}`;\n let pipeline = program.pipelineCache.get(pipelineKey);\n if (!pipeline) {\n pipeline = device.createRenderPipeline({\n layout: program.pipelineLayout,\n vertex: {\n module: program.vertex,\n entryPoint: 'vertexMain',\n buffers: program.vertexBuffers,\n },\n fragment: {\n module: program.fragment,\n entryPoint: 'fragmentMain',\n targets: [{\n format: backend.renderer.format,\n blend: program.transparent ? {\n color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n } : undefined,\n writeMask: GPUColorWrite.ALL,\n }],\n },\n primitive: { topology: 'triangle-list', cullMode, frontFace },\n depthStencil: {\n format: 'depth24plus',\n depthWriteEnabled: program.depthWrite,\n depthCompare,\n },\n });\n program.pipelineCache.set(pipelineKey, pipeline);\n }\n\n const uniforms = program.uniforms;\n const renderer = backend.renderer;\n const offset = renderer.uniformSlot++ * 256;\n const data = renderer.uniformData, base = offset / 4;\n data.set(mesh.worldMatrix, base);\n data.set(uniforms.baseColor.value, base + 16);\n data[base + 19] = 1;\n data[base + 20] = uniforms.metallic.value;\n data[base + 21] = uniforms.roughness.value;\n data[base + 22] = uniforms.opacity.value * (mesh.ground ? mesh._appearance ?? 1 : 1);\n data[base + 23] = uniforms.alphaCutoff.value;\n data.set(uniforms.emissive.value, base + 24);\n data[base + 27] = uniforms.occlusionStrength.value;\n data[base + 28] = mesh.terrain?.[0] ?? 0;\n data[base + 29] = mesh.terrain?.[1] ?? 0;\n data[base + 30] = mesh.terrain?.[2] ?? 0;\n data[base + 31] = mesh.terrain?.[3] ?? 0;\n data[base + 32] = mesh.highlight?.[0] ?? 0;\n data[base + 33] = mesh.highlight?.[1] ?? 0;\n data[base + 34] = program.nightSparkle ? data[55] : 0;\n data[base + 35] = mesh.ground ? 1 : mesh._appearance ?? 1;\n\n const textures = mesh._textures ||= [];\n textures.length = 0;\n let binding, texture, i, attribute;\n for (binding of program.bindings) {\n texture = uniforms[binding.name]?.value;\n if (!texture) throw new Error(`Missing Layer3D texture: ${binding.name}`);\n if (texture.uploaded !== texture.image) {\n device.queue.copyExternalImageToTexture(\n { source: texture.image, flipY: Boolean(texture.flipY) },\n { texture: texture.texture },\n [texture.image.width, texture.image.height]\n );\n texture.uploaded = texture.image;\n }\n textures.push(texture);\n }\n let bindingsChanged = !mesh.bindGroup || mesh.boundBuffer !== renderer.uniformBuffer ||\n textures.length !== mesh.boundTextures.length;\n for (i = 0; !bindingsChanged && i < textures.length; i++) {\n if (textures[i].texture !== mesh.boundTextures[i][0] ||\n textures[i].sampler !== mesh.boundTextures[i][1]) bindingsChanged = true;\n }\n if (bindingsChanged) {\n const entries = [\n { binding: 0, resource: { buffer: renderer.uniformBuffer, size: 144 } },\n { binding: 1, resource: { buffer: renderer.uniformBuffer, size: 240 } },\n ];\n if (program.terrain) entries.push({ binding: 2, resource: program.terrain.texture.createView() });\n mesh.boundBuffer = renderer.uniformBuffer;\n const boundTextures = mesh.boundTextures ||= [];\n boundTextures.length = textures.length;\n for (i = 0; i < textures.length; i++) {\n binding = program.bindings[i], texture = textures[i];\n entries.push({ binding: binding.texture, resource: texture.texture.createView() });\n entries.push({ binding: binding.sampler, resource: texture.sampler });\n boundTextures[i] ||= [];\n boundTextures[i][0] = texture.texture;\n boundTextures[i][1] = texture.sampler;\n }\n mesh.bindGroup = device.createBindGroup({\n layout: program.bindGroupLayout,\n entries,\n });\n }\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, mesh.bindGroup, [offset]);\n pass.setVertexBuffer(0, geometry.attributes.position.buffer);\n pass.setVertexBuffer(1, geometry.attributes.normal.buffer);\n if (geometry.attributes.color) pass.setVertexBuffer(2, geometry.attributes.color.buffer);\n if (geometry.attributes.uv) pass.setVertexBuffer(3, geometry.attributes.uv.buffer);\n const instances = geometry.attributes.instanceOffset;\n if (instances) pass.setVertexBuffer(4, instances.buffer);\n for (attribute of Object.values(geometry.attributes)) {\n if (!attribute.needsUpdate) continue;\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n attribute.needsUpdate = false;\n geometry.bounds = null;\n }\n const index = geometry.attributes.index;\n if (index) {\n pass.setIndexBuffer(index.buffer, index.indexFormat);\n pass.drawIndexed(geometry.drawRange.count, instances?.count ?? 1, geometry.drawRange.start, 0, 0);\n } else {\n pass.draw(geometry.drawRange.count, instances?.count ?? 1, geometry.drawRange.start, 0);\n }\n}\n", "import { drawGeometry } from './drawGeometry.js';\n\nexport function drawSceneMeshes(backend, encoder, meshes) {\n const renderer = backend.renderer;\n const pass = encoder.beginRenderPass({\n colorAttachments: [{\n view: renderer.context.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n }],\n depthStencilAttachment: {\n view: renderer.depthTexture.createView(),\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n });\n pass.setViewport(0, 0, renderer.canvas.width, renderer.canvas.height, 0, 1);\n pass.setBindGroup(1, renderer.sunlight.bindGroup);\n let mesh, world, uniforms, determinant, frontFace, program;\n for (mesh of meshes) {\n world = mesh.worldMatrix;\n if (mesh.texture) {\n mesh.program.uniforms.baseTexture.value = mesh.texture;\n mesh.program.uniforms.opacity.value = mesh.opacity;\n }\n uniforms = mesh.program.uniforms;\n if (uniforms.roofTexture) uniforms.roofTexture.value = backend._roofRaster?.texture || renderer.roofFallbackTexture;\n if (!mesh._frontFace || mesh._frontFaceWorldVersion !== mesh._worldMatrixVersion ||\n mesh._worldMatrixVersion === undefined) {\n determinant = world[0] * (world[5] * world[10] - world[6] * world[9]) -\n world[4] * (world[1] * world[10] - world[2] * world[9]) +\n world[8] * (world[1] * world[6] - world[2] * world[5]);\n if (!Number.isFinite(determinant) || determinant === 0) {\n throw new Error('Singular 3D transform');\n }\n mesh._frontFace = determinant < 0 ? 'cw' : 'ccw';\n mesh._frontFaceWorldVersion = mesh._worldMatrixVersion;\n }\n frontFace = mesh._frontFace;\n program = mesh.program;\n if (program.transparent && program._layerMaterial.doubleSided && !mesh._nativeSource) {\n drawGeometry(backend, mesh, pass, 'front', frontFace);\n drawGeometry(backend, mesh, pass, 'back', frontFace);\n } else {\n drawGeometry(backend, mesh, pass, program.cullMode, frontFace);\n }\n }\n pass.end();\n}\n", "export function shadowCacheMatches(sun, meshes, sunlight) {\n const cache = sun.cache;\n let unchanged = sun.enabled && cache?.meshes.size === meshes.length;\n let i, mesh, previous, range, attribute;\n if (unchanged) {\n for (i = 0; i < sunlight.direction.length; i++) {\n if (sunlight.direction[i] !== cache.direction[i]) { unchanged = false; break; }\n }\n }\n if (unchanged) {\n for (mesh of meshes) {\n previous = cache.meshes.get(mesh), range = mesh.geometry.drawRange;\n if (!(previous && previous.world === mesh._worldMatrixVersion && previous.geometry === mesh.geometry &&\n previous.start === range.start && previous.count === range.count &&\n previous.appearance === (mesh._appearance ?? 1))) { unchanged = false; break; }\n for (attribute of Object.values(mesh.geometry.attributes)) {\n if (attribute.needsUpdate) { unchanged = false; break; }\n }\n if (!unchanged) break;\n }\n }\n return unchanged;\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\n\nexport function shadowBounds(meshes) {\n const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];\n let mesh, bounds, matrix, cached, i, x, y, z, w, axis, value;\n for (mesh of meshes) {\n if (!mesh.geometry.bounds || mesh.geometry.attributes.position.needsUpdate) computeBounds(mesh.geometry);\n bounds = mesh.geometry.bounds, matrix = mesh.worldMatrix;\n cached = mesh._shadowBounds;\n if (!cached || cached.version !== mesh._worldMatrixVersion || cached.bounds !== bounds) {\n cached = mesh._shadowBounds = { version: mesh._worldMatrixVersion, bounds,\n min: [Infinity, Infinity, Infinity], max: [-Infinity, -Infinity, -Infinity] };\n for (i = 0; i < 8; i++) {\n x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\n z = i & 4 ? bounds.max[2] : bounds.min[2];\n w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15];\n for (axis = 0; axis < 3; axis++) {\n value = (matrix[axis] * x + matrix[axis + 4] * y + matrix[axis + 8] * z + matrix[axis + 12]) / w;\n cached.min[axis] = Math.min(cached.min[axis], value);\n cached.max[axis] = Math.max(cached.max[axis], value);\n }\n }\n }\n for (axis = 0; axis < 3; axis++) {\n min[axis] = Math.min(min[axis], cached.min[axis]);\n max[axis] = Math.max(max[axis], cached.max[axis]);\n }\n }\n // Include ground receivers below/around the loaded buildings and trees.\n min[1] = Math.min(0, min[1]);\n return { min, max };\n}\n", "import { shadowBounds } from './shadowBounds.js';\nimport { updateCamera } from '../scene/updateCamera.js';\n\nexport function shadowMatrix(meshes, sunlight) {\n const { min, max } = shadowBounds(meshes);\n const span = [], center = [], position = [];\n let i, corner, axis, point, coordinates, value;\n for (i = 0; i < 3; i++) {\n span[i] = max[i] - min[i];\n center[i] = (min[i] + max[i]) / 2;\n }\n const radius = Math.max(100, Math.hypot(...span));\n for (i = 0; i < 3; i++) position[i] = center[i] + sunlight.direction[i] * radius * 2;\n const lightCamera = {\n position,\n target: center, up: [0, 0, -1], fov: 45, aspect: 1, near: 1, far: radius * 5,\n viewMatrix: [], projectionMatrix: [], projectionViewMatrix: [],\n };\n updateCamera(lightCamera);\n const view = new DOMMatrix(lightCamera.viewMatrix);\n const low = [Infinity, Infinity, Infinity], high = [-Infinity, -Infinity, -Infinity];\n for (i = 0; i < 8; i++) {\n corner = [];\n for (axis = 0; axis < 3; axis++) corner[axis] = i & (1 << axis) ? max[axis] : min[axis];\n point = new DOMPoint(...corner, 1).matrixTransform(view);\n coordinates = [point.x, point.y, point.z];\n for (axis = 0; axis < 3; axis++) {\n value = coordinates[axis];\n low[axis] = Math.min(low[axis], value - 20);\n high[axis] = Math.max(high[axis], value + 20);\n }\n }\n for (i = 0; i < 3; i++) span[i] = high[i] - low[i];\n const projection = new DOMMatrix([\n 2 / span[0], 0, 0, 0, 0, 2 / span[1], 0, 0, 0, 0, -1 / span[2], 0,\n -(high[0] + low[0]) / span[0], -(high[1] + low[1]) / span[1], high[2] / span[2], 1,\n ]);\n return projection.multiply(view).toFloat32Array();\n}\n", "export function ensureShadowPipeline(device, sun, instanced = false) {\n const key = instanced ? 'instancePipeline' : 'pipeline';\n if (!sun[key]) {\n if (!sun.meshLayout) {\n sun.meshLayout = device.createBindGroupLayout({\n entries: [\n { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: 'uniform', hasDynamicOffset: true } },\n ]\n });\n // Do not bind the sampled depth texture while it is a render attachment.\n sun.depthLayout = device.createBindGroupLayout({\n entries: [\n { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } },\n ]\n });\n sun.depthBindGroup = device.createBindGroup({\n layout: sun.depthLayout, entries: [{ binding: 0, resource: { buffer: sun.buffer } }],\n });\n }\n const shader = device.createShaderModule({\n code: /* wgsl */ ` 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>${instanced ? ', @location(4) offset: vec4<f32>' : ''})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${instanced ? ' + offset.xyz' : ''},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}` });\n const buffers = [\n { arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }] },\n ];\n if (instanced) buffers.push({\n arrayStride: 16, stepMode: 'instance',\n attributes: [{ shaderLocation: 4, offset: 0, format: 'float32x4' }],\n });\n sun[key] = device.createRenderPipeline({\n layout: device.createPipelineLayout({ bindGroupLayouts: [sun.meshLayout, sun.depthLayout] }),\n vertex: {\n module: shader, entryPoint: 'main', buffers\n },\n fragment: { module: shader, entryPoint: 'fragmentMain', targets: [] },\n primitive: { topology: 'triangle-list', cullMode: 'none' },\n depthStencil: {\n format: 'depth32float', depthWriteEnabled: true, depthCompare: 'less',\n depthBias: 2, depthBiasSlopeScale: 2\n },\n });\n }\n}\n", "export function drawShadowMeshes(backend, encoder, meshes) {\n const renderer = backend.renderer, device = renderer.device, sun = renderer.sunlight;\n const pass = encoder.beginRenderPass({\n colorAttachments: [],\n depthStencilAttachment: {\n view: sun.texture.createView(), depthClearValue: 1,\n depthLoadOp: 'clear', depthStoreOp: 'store'\n },\n });\n let pipeline = sun.pipeline;\n pass.setPipeline(pipeline);\n pass.setBindGroup(1, sun.depthBindGroup);\n let mesh, instances, nextPipeline, offset, attribute, index, range;\n for (mesh of meshes) {\n instances = mesh.geometry.attributes.instanceOffset;\n nextPipeline = instances ? sun.instancePipeline : sun.pipeline;\n if (nextPipeline !== pipeline) {\n pipeline = nextPipeline;\n pass.setPipeline(pipeline);\n }\n offset = renderer.uniformSlot++ * 256;\n renderer.uniformData.set(mesh.worldMatrix, offset / 4);\n renderer.uniformData[offset / 4 + 35] = mesh._appearance ?? 1;\n if (mesh._shadowBuffer !== renderer.uniformBuffer) {\n mesh._shadowBuffer = renderer.uniformBuffer;\n mesh._shadowBindGroup = device.createBindGroup({\n layout: sun.meshLayout, entries: [\n { binding: 0, resource: { buffer: renderer.uniformBuffer, size: 144 } },\n ]\n });\n }\n for (attribute of Object.values(mesh.geometry.attributes)) {\n if (attribute.needsUpdate) {\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n attribute.needsUpdate = false;\n }\n }\n pass.setBindGroup(0, mesh._shadowBindGroup, [offset]);\n pass.setVertexBuffer(0, mesh.geometry.attributes.position.buffer);\n if (instances) pass.setVertexBuffer(1, instances.buffer);\n index = mesh.geometry.attributes.index, range = mesh.geometry.drawRange;\n if (index) {\n pass.setIndexBuffer(index.buffer, index.indexFormat);\n pass.drawIndexed(range.count, instances?.count ?? 1, range.start, 0, 0);\n } else pass.draw(range.count, instances?.count ?? 1, range.start, 0);\n }\n pass.end();\n}\n", "import { bindSunlight } from './bindSunlight.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\n\n\nexport function resizeSunlight(backend, size) {\n const device = backend.renderer.device, sun = backend.renderer.sunlight;\n if (sun.size === size) return;\n if (sun.texture) destroyTexture(backend, sun.texture);\n sun.size = size;\n sun.texture = device.createTexture({\n size: [size, size], format: 'depth32float',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC,\n });\n bindSunlight(backend);\n}\n", "import { shadowCacheMatches } from './shadowCacheMatches.js';\nimport { shadowMatrix } from './shadowMatrix.js';\nimport { ensureShadowPipeline } from './ensureShadowPipeline.js';\nimport { drawShadowMeshes } from './drawShadowMeshes.js';\nimport { resizeSunlight } from './resizeSunlight.js';\n\n/** One shared directional depth map. Off-screen but loaded geometry can cast shadows. */\n\nexport function renderSunlight(backend, encoder, meshes, sunlight) {\n const renderer = backend.renderer, device = renderer.device, sun = renderer.sunlight;\n if (!meshes.length || !sunlight || sunlight.altitude < 3) {\n if (!sun.enabled) return;\n const values = new Float32Array(20);\n values.set([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n device.queue.writeBuffer(sun.buffer, 0, values);\n sun.enabled = false;\n sun.cache = null;\n return;\n }\n if (shadowCacheMatches(sun, meshes, sunlight)) return;\n const values = new Float32Array(20);\n sun.enabled = true;\n resizeSunlight(backend, Math.min(2048, device.limits.maxTextureDimension2D));\n values.set(shadowMatrix(meshes, sunlight));\n values[16] = 1;\n device.queue.writeBuffer(sun.buffer, 0, values);\n ensureShadowPipeline(device, sun);\n let mesh;\n for (mesh of meshes) {\n if (mesh.geometry.attributes.instanceOffset) {\n ensureShadowPipeline(device, sun, true);\n break;\n }\n }\n drawShadowMeshes(backend, encoder, meshes);\n const snapshots = new Map();\n let mesh2;\n for (mesh2 of meshes) {\n snapshots.set(mesh2, {\n world: mesh2._worldMatrixVersion, geometry: mesh2.geometry,\n start: mesh2.geometry.drawRange.start, count: mesh2.geometry.drawRange.count,\n appearance: mesh2._appearance ?? 1,\n });\n }\n sun.cache = { direction: [...sunlight.direction], meshes: snapshots };\n}\n", "export const pendingUpdates = new Set();\n", "import { pendingUpdates } from '../constants/pendingUpdates.js';\n\nexport function cancelUpdate(backend) {\n const frame = backend._frame;\n pendingUpdates.delete(backend);\n backend._frame = null;\n if (!pendingUpdates.size && frame != null) {\n cancelAnimationFrame(frame);\n }\n}\n", "/** Reparent/detach scene data without drawing or disposing GPU resources. */\n\nexport function setParent(node, parent) {\n if (node.parent) node.parent.children.splice(node.parent.children.indexOf(node), 1);\n node.parent = parent;\n if (parent) parent.children.push(node);\n}\n", "import { destroyTexture } from '../rendering/destroyTexture.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function removeRasterTile(layer, tile) {\n layer._terrainRequest?.abort();\n const mesh = layer._rasterTiles.get(tile);\n if (!mesh) return;\n setParent(mesh, null);\n update(layer);\n if (mesh.texture !== tile.texture) destroyTexture(layer, mesh.texture.texture);\n layer._rasterTiles.delete(tile);\n}\n", "import { destroyTexture } from '../rendering/destroyTexture.js';\nimport { removeRasterTile } from './removeRasterTile.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function releaseRasterTile(backend, tile) {\r\n const key = `${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`;\r\n if (backend._rasterTiles.get(key) !== tile) return;\r\n backend._rasterTiles.delete(key);\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n tile.request.abort();\r\n if(backend._terrain3D) removeRasterTile(backend._terrain3D, tile);\r\n if (tile.mesh) setParent(tile.mesh, null);\r\n if (tile.texture) destroyTexture(backend, tile.texture.texture);\r\n tile.image?.close();\r\n backend.fire('tileunload', { tile, coords: tile.coords });\r\n update(backend);\r\n}\n", "import { releaseRasterTile } from './releaseRasterTile.js';\n\nexport function pruneRasterTiles(backend) {\n const wanted = backend._wantedRasterTiles;\n const now = performance.now();\n if (backend._pruneVersion === backend._rasterVersion && backend._pruneWanted === wanted &&\n now < backend._pruneAfter) return Number.isFinite(backend._pruneAfter);\n backend._pruneVersion = backend._rasterVersion;\n backend._pruneWanted = wanted;\n backend._pruneAfter = Infinity;\n const pending = [];\n let key, tile, parts, overlaps, coords, zoom;\n for (key of wanted) {\n tile = backend._rasterTiles.get(key);\n if (tile?.done && now - tile.loadedAt < 250) {\n backend._pruneAfter = Math.min(backend._pruneAfter, tile.loadedAt + 250);\n }\n if (!tile?.done || now - tile.loadedAt < 250) {\n parts = key.split('/');\n pending.push({ z: Number(parts[0]), x: Number(parts[1]), y: Number(parts[2]) });\n }\n }\n for ([key, tile] of backend._rasterTiles) {\n if (wanted.has(key)) continue;\n overlaps = false;\n for (coords of pending) {\n zoom = Math.min(coords.z, tile.coords.z);\n if (Math.floor(coords.x / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.x / 2 ** (tile.coords.z - zoom)) &&\n Math.floor(coords.y / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.y / 2 ** (tile.coords.z - zoom))) {\n overlaps = true;\n break;\n }\n }\n if (!overlaps) releaseRasterTile(backend, tile);\n }\n return Number.isFinite(backend._pruneAfter);\n}\n", "import { synchronizeZoomView } from './synchronizeZoomView.js';\nimport { resizeRenderer } from './resizeRenderer.js';\nimport { updateMapCamera } from './updateMapCamera.js';\nimport { collectFrameMeshes } from './collectFrameMeshes.js';\nimport { updateRoofRaster } from './updateRoofRaster.js';\nimport { prepareFrameMeshes } from './prepareFrameMeshes.js';\nimport { prepareFrameUniforms } from './prepareFrameUniforms.js';\nimport { drawSceneMeshes } from './drawSceneMeshes.js';\nimport { updateWorldMatrix } from \"../scene/updateWorldMatrix.js\";\nimport { renderSunlight } from '../shadows/renderSunlight.js';\nimport { cancelUpdate } from '../scene/cancelUpdate.js';\nimport { update } from '../scene/update.js';\nimport { pruneRasterTiles } from '../raster/pruneRasterTiles.js';\n\n/**\n * Rendering owner: CSS pixels -> scene metres -> perspective camera.\n * Lights and transparent sort centers are converted into the current camera space.\n * Without raster tiles, logical map projection supplies the same static alignment.\n */\n\nexport function render(backend) {\n cancelUpdate(backend);\n if (backend._shared !== backend || !backend.renderer) return;\n const map = backend._map;\n const now = performance.now();\n const size = map.getSize();\n if (!size.x || !size.y) return;\n synchronizeZoomView(backend, now);\n resizeRenderer(backend, size);\n updateMapCamera(backend, size);\n updateWorldMatrix(backend.scene);\n let sceneChanged = false;\n let layer;\n for (layer of backend._layers) {\n if (!layer._beforeRender) continue;\n layer._beforeRender();\n sceneChanged = true;\n }\n const sunlight = map._sunlight;\n collectFrameMeshes(backend, sunlight, sceneChanged);\n const shadowMeshes = backend._shadowMeshes;\n const renderer = backend.renderer;\n const rasters = updateRoofRaster(backend, now);\n const meshes = renderer.frameMeshes ||= [];\n meshes.length = 0;\n let appearing = prepareFrameMeshes(backend, rasters, now, meshes);\n const encoder = renderer.device.createCommandEncoder();\n prepareFrameUniforms(backend, meshes, shadowMeshes, sunlight);\n renderSunlight(backend, encoder, shadowMeshes, sunlight);\n drawSceneMeshes(backend, encoder, meshes);\n renderer.device.queue.writeBuffer(renderer.uniformBuffer, 0, renderer.uniformData, 0, renderer.uniformSlot * 64);\n renderer.device.queue.submit([encoder.finish()]);\n for (layer of backend._layers) {\n if (layer._wantedRasterTiles) appearing = pruneRasterTiles(layer) || appearing;\n }\n if (map._animatingZoom || appearing) update(backend);\n}\n", "import { pendingUpdates } from '../constants/pendingUpdates.js';\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingUpdates() {\n const updates = [...pendingUpdates];\n pendingUpdates.clear();\n let failure;\n let backend;\n for (backend of updates) {\n backend._frame = null;\n if (backend._shared !== backend || !backend.renderer) continue;\n try {\n render(backend);\n } catch (error) {\n failure ||= error;\n }\n }\n if (failure) throw failure;\n}\n", "import { render } from \"../rendering/render.js\";\nimport { pendingUpdates } from '../constants/pendingUpdates.js';\nimport { renderPendingUpdates } from './renderPendingUpdates.js';\n\n/** Scene graph, shared camera and frame rendering. */\n/** Content changes: render once on the next animation frame. */\nexport function update(backend) {\n const shared = backend._shared;\n if (!shared) return backend;\n if (shared !== backend) {\n update(shared);\n return backend;\n }\n if (backend._frame != null) return backend;\n const first = pendingUpdates.values().next().value;\n pendingUpdates.add(backend);\n backend._frame = first ? first._frame : requestAnimationFrame(renderPendingUpdates);\n return backend;\n}\n", "import { nativeImageRefresh } from './nativeImageRefresh.js';\nimport { nativeImageError } from './nativeImageError.js';\nimport { removeImageState } from './removeImageState.js';\nimport { addImageState } from './addImageState.js';\nimport { update } from '../scene/update.js';\n\nexport function refreshNativeLayer(state = this) {\n state.dirty = true;\n state.viewDirty = true;\n state.failed = false;\n state.hide();\n const activeImages = [state.source._icon, state.source._shadow, state.source._image];\n let image;\n for (image of state.images) {\n if (activeImages.includes(image)) continue;\n image.removeEventListener('load', nativeImageRefresh);\n image.removeEventListener('error', nativeImageError);\n removeImageState(image, state);\n state.images.delete(image);\n }\n for (image of activeImages) {\n if (!(image instanceof HTMLImageElement) || state.images.has(image)) continue;\n state.images.add(image);\n addImageState(image, state);\n image.addEventListener('load', nativeImageRefresh);\n image.addEventListener('error', nativeImageError);\n }\n if (state.backend._shared) update(state.backend);\n}\n", "import { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function nativeLayerMethod(name, source, args) {\n const state = source._nativeGPU, original = state.originalMethods.get(name);\n const result = original.apply(source, args);\n let layer, zIndex;\n if ((name === 'bringToFront' || name === 'bringToBack') && source instanceof L.GridLayer) {\n let extreme = name === 'bringToFront' ? -Infinity : Infinity;\n for (layer of Object.values(state.map._layers)) {\n if (layer === source || !(layer instanceof L.GridLayer) || layer.getPane() !== source.getPane()) continue;\n zIndex = layer.options.zIndex || 0;\n extreme = name === 'bringToFront' ? Math.max(extreme, zIndex) : Math.min(extreme, zIndex);\n }\n const edge = name === 'bringToFront' ? extreme + 1 : extreme - 1;\n if (Number.isFinite(edge)) source.setZIndex(edge);\n }\n if (name === 'bringToFront') state.order = ++state.map._nativeGPUOrder;\n if (name === 'bringToBack') state.order = --state.map._nativeGPUBack;\n refreshNativeLayer(state);\n return result;\n}\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetLatLng(...args) { return nativeLayerMethod('setLatLng', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetLatLngs(...args) { return nativeLayerMethod('setLatLngs', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeAddLatLng(...args) { return nativeLayerMethod('addLatLng', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetRadius(...args) { return nativeLayerMethod('setRadius', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetStyle(...args) { return nativeLayerMethod('setStyle', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeRedraw(...args) { return nativeLayerMethod('redraw', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetIcon(...args) { return nativeLayerMethod('setIcon', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetUrl(...args) { return nativeLayerMethod('setUrl', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetBounds(...args) { return nativeLayerMethod('setBounds', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetOpacity(...args) { return nativeLayerMethod('setOpacity', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetZIndex(...args) { return nativeLayerMethod('setZIndex', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetZIndexOffset(...args) { return nativeLayerMethod('setZIndexOffset', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeBringToFront(...args) { return nativeLayerMethod('bringToFront', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeBringToBack(...args) { return nativeLayerMethod('bringToBack', this, args); }\n", "import { nativeSetLatLng } from '../core/nativeSetLatLng.js';\nimport { nativeSetLatLngs } from '../core/nativeSetLatLngs.js';\nimport { nativeAddLatLng } from '../core/nativeAddLatLng.js';\nimport { nativeSetRadius } from '../core/nativeSetRadius.js';\nimport { nativeSetStyle } from '../core/nativeSetStyle.js';\nimport { nativeRedraw } from '../core/nativeRedraw.js';\nimport { nativeSetIcon } from '../core/nativeSetIcon.js';\nimport { nativeSetUrl } from '../core/nativeSetUrl.js';\nimport { nativeSetBounds } from '../core/nativeSetBounds.js';\nimport { nativeSetOpacity } from '../core/nativeSetOpacity.js';\nimport { nativeSetZIndex } from '../core/nativeSetZIndex.js';\nimport { nativeSetZIndexOffset } from '../core/nativeSetZIndexOffset.js';\nimport { nativeBringToFront } from '../core/nativeBringToFront.js';\nimport { nativeBringToBack } from '../core/nativeBringToBack.js';\n\nexport const nativeMethodHandlers = {\n setLatLng: nativeSetLatLng,\n setLatLngs: nativeSetLatLngs,\n addLatLng: nativeAddLatLng,\n setRadius: nativeSetRadius,\n setStyle: nativeSetStyle,\n redraw: nativeRedraw,\n setIcon: nativeSetIcon,\n setUrl: nativeSetUrl,\n setBounds: nativeSetBounds,\n setOpacity: nativeSetOpacity,\n setZIndex: nativeSetZIndex,\n setZIndexOffset: nativeSetZIndexOffset,\n bringToFront: nativeBringToFront,\n bringToBack: nativeBringToBack,\n};\n", "/** Rendering owner per map; entries are removed on the last layer removal. */\nexport const renderers = new WeakMap();\n", "import { renderers } from './renderers.js';\r\n\r\nexport const cityMapper = {\r\n renderers,\r\n nextId: 0,\r\n};\r\n", "/** A fresh, empty scene-graph node. */\nexport function emptyNode() {\n return {\n position: [0, 0, 0],\n rotation: [0, 0, 0],\n scale: [1, 1, 1],\n worldMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n children: [],\n visible: true,\n };\n}\n", "export function textureBinding(bindings, name, enabled) {\r\n if (!enabled) return '';\r\n const current = 3 + bindings.length * 2;\r\n bindings.push({ name, texture: current, sampler: current + 1 });\r\n return /* wgsl */ `@group(0)@binding(${current})var ${name}:texture_2d<f32>;@group(0)@binding(${current + 1})var ${name}Sampler:sampler;`;\r\n}\r\n", "import { textureBinding } from '../rendering/textureBinding.js';\n\n/** Material WGSL and texture bindings, without a GPU device or Leaflet layer. */\nexport function materialShaders(material = {}, sparkle = false, elevationWGSL = '') {\n const hasBase = Boolean(material.baseTexture);\n const hasMetal = Boolean(material.metalTexture);\n const hasEmissive = Boolean(material.emissiveTexture);\n const hasOcclusion = Boolean(material.occlusionTexture);\n const hasRoof = Boolean(material.roofTexture);\n const hasTerrain = Boolean(material.terrain);\n const textured = hasBase || hasMetal || hasEmissive || hasOcclusion || material.nightLight;\n const vertex = /* wgsl */ ` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${hasTerrain ? /* wgsl */ `@group(0)@binding(2)var dem:texture_2d<f32>;${elevationWGSL}` : ''} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${material.instanced ? '@location(4) instanceOffset: vec4<f32>,' : ''} ${material.vertexColors ? '@location(2) color: vec3<f32>,' : ''} ${textured ? '@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>,${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''} ${textured ? '@location(3) uv: vec2<f32>,' : ''} ${hasRoof ? '@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${material.instanced ? ' + input.instanceOffset.xyz' : ''};${hasTerrain ? 'position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;' : ''} let featureVertex = f32(vertexIndex)${material.instanced ? ' + input.instanceOffset.w' : ''};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${material.vertexColors\n ? 'select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)'\n : '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;${sparkle ? `output.localPosition = input.position${material.instanced ? ' + input.instanceOffset.xyz' : ''};` : ''} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${textured ? 'output.uv = input.uv;' : ''} ${hasRoof ? /* wgsl */ ` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,1.0,input.normal.y >= 0.5 && !highlighted);` : ''} output.position = frame.projectionMatrix * viewPosition;return output;}`;\n const bindings = [];\n const baseBinding = textureBinding(bindings, 'baseTexture', hasBase);\n const metalBinding = textureBinding(bindings, 'metalTexture', hasMetal);\n const emissiveBinding = textureBinding(bindings, 'emissiveTexture', hasEmissive);\n const occlusionBinding = textureBinding(bindings, 'occlusionTexture', hasOcclusion);\n const roofBinding = textureBinding(bindings, 'roofTexture', hasRoof);\n const fragment = /* wgsl */ ` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${baseBinding}${metalBinding}${emissiveBinding}${occlusionBinding}${roofBinding} 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>,${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''} ${textured ? '@location(3) uv: vec2<f32>,' : ''} ${hasRoof ? '@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>{${material.nightLight ? /* wgsl */ ` 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);${material.unlit ? /* wgsl */ ` let rasterTexel = ${hasBase ? '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)),${material.alphaMode === 'BLEND' ? 'u.material.z * rasterTexel.a' : '1.0'});` : /* wgsl */ ` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${hasBase ? 'textureSample(baseTexture, baseTextureSampler, input.uv)' : 'vec4<f32>(1.0)'};let alpha = u.material.z * texel.a;${material.alphaMode === 'MASK' ? 'if (alpha < u.material.w) { discard; }' : ''} ${material.alphaMode === 'BLEND' ? 'if (alpha < 0.01) { discard; }' : ''} var base = ${material.vertexColors ? 'toLinear(min(input.color, vec3<f32>(1.0)))' : 'input.color'} * ${material.baseTexture?.srgb ? 'texel.rgb' : 'toLinear(texel.rgb)'};${hasRoof ? /* wgsl */ ` if(input.roof > 0.5 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a);}` : ''} let mr = ${hasMetal ? '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 = ${hasOcclusion ? 'mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)' : '1.0'};${sparkle ? /* wgsl */ ` 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 = ${sparkle ? 'vec3<f32>(3.0, 2.6, 1.8) * pointGlow +' : ''}${material.vertexColors\n ? ' max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +' : ''} u.emissive.rgb * ${hasEmissive\n ? material.emissiveTexture.srgb\n ? 'textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb'\n : 'toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)'\n : '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;${material.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),${material.alphaMode === 'BLEND' ? 'alpha' : '1.0'});`}}`;\n return { vertex, fragment, bindings, textured, hasTerrain };\n}\n", "/**\n * WGSL twin of getElevation for the vertex shader: bilinear DEM pixels, or the first valid\n * neighbour near no-data (stored as -1e9), else `base`. Expects `dem: texture_2d<f32>`.\n */\nexport const elevationWGSL = /* wgsl */ ` 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;}`;\n", "export async function reportCompilation(backend, pending) {\n let info, message;\n try {\n const infos = await Promise.all(pending);\n const errors = [];\n for (info of infos) {\n for (message of info.messages) if (message.type === 'error') errors.push(message.message);\n }\n if (errors.length) {\n backend.fire('error', {\n error: new Error(`Unable to compile Layer3D WGSL: ${errors.join('\\n')}`),\n });\n }\n } catch (error) {\n backend.fire('error', { error });\n }\n}\n", "import { materialShaders } from '../shaders/materialShaders.js';\nimport { elevationWGSL } from '../constants/elevationWGSL.js';\nimport { reportCompilation } from './reportCompilation.js';\n\n\nexport function createProgram(backend, material = {}) {\n const shaders = materialShaders(\n material,\n !!backend.options.nightSparkle,\n material.terrain ? elevationWGSL : ''\n );\n const vertex = backend.renderer.device.createShaderModule({ code: shaders.vertex });\n const fragment = backend.renderer.device.createShaderModule({ code: shaders.fragment });\n reportCompilation(backend, [\n vertex.getCompilationInfo(),\n fragment.getCompilationInfo()\n ]);\n const vertexBuffers = [\n { arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }] },\n { arrayStride: 12, attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x3' }] },\n material.vertexColors ? { arrayStride: 12, attributes: [{ shaderLocation: 2, offset: 0, format: 'float32x3' }] } : null,\n shaders.textured ? { arrayStride: 8, attributes: [{ shaderLocation: 3, offset: 0, format: 'float32x2' }] } : null,\n ];\n if (material.instanced) vertexBuffers.push({\n arrayStride: 16, stepMode: 'instance',\n attributes: [{ shaderLocation: 4, offset: 0, format: 'float32x4' }],\n });\n const bindGroupEntries = [{\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: 'uniform', hasDynamicOffset: true },\n }, {\n binding: 1,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: { type: 'uniform' },\n }];\n if (shaders.hasTerrain) {\n bindGroupEntries.push({\n binding: 2,\n visibility: GPUShaderStage.VERTEX,\n texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },\n });\n }\n\n let texture;\n for (texture of shaders.bindings) {\n bindGroupEntries.push({\n binding: texture.texture,\n visibility: GPUShaderStage.FRAGMENT,\n texture: { sampleType: 'float', viewDimension: '2d' },\n });\n bindGroupEntries.push({\n binding: texture.sampler,\n visibility: GPUShaderStage.FRAGMENT,\n sampler: { type: 'filtering' },\n });\n }\n const bindGroupLayout = backend.renderer.device.createBindGroupLayout({ entries: bindGroupEntries });\n const pipelineLayout = backend.renderer.device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout, backend.renderer.sunlight.layout] });\n return {\n device: backend.renderer.device,\n vertex,\n fragment,\n bindings: shaders.bindings,\n vertexBuffers,\n bindGroupLayout,\n pipelineLayout,\n pipelineCache: new Map(),\n cullMode: material.doubleSided ? 'none' : 'back',\n transparent: material.alphaMode === 'BLEND',\n depthWrite: material.depthWrite ?? material.alphaMode !== 'BLEND',\n depthTest: material.depthTest !== false,\n terrain: material.terrain,\n nightLight: Boolean(material.nightLight),\n nightSparkle: !!backend.options.nightSparkle,\n uniforms: {\n baseColor: { value: material.color || [1, 1, 1] },\n metallic: { value: material.metallic ?? 0 },\n roughness: { value: material.roughness ?? 0.85 },\n opacity: { value: material.opacity ?? 1 },\n alphaCutoff: { value: material.alphaCutoff ?? 0.5 },\n occlusionStrength: { value: material.occlusionStrength ?? 1 },\n emissive: { value: material.emissive || [0, 0, 0] },\n ...(material.baseTexture ? { baseTexture: { value: material.baseTexture } } : {}),\n ...(material.metalTexture ? { metalTexture: { value: material.metalTexture } } : {}),\n ...(material.emissiveTexture ? { emissiveTexture: { value: material.emissiveTexture } } : {}),\n ...(material.occlusionTexture ? { occlusionTexture: { value: material.occlusionTexture } } : {}),\n ...(material.roofTexture ? { roofTexture: { value: null } } : {}),\n },\n _layerMaterial: material,\n };\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { createProgram } from './createProgram.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\n/**\n * Add a non-indexed, vertex-coloured mesh from flat vec3 arrays `{ position, normal, color }` in layer-local metres.\n * `usage` adds GPUBufferUsage flags to the vertex buffers (e.g. STORAGE for compute passes).\n * A supplied `program` shares compiled shaders and pipelines across compatible meshes.\n */\n\nexport function createMesh(backend, data, material = {}, usage = 0, program) {\n const { device } = backend.renderer, attributes = {};\n let name, values, array, size, buffer;\n for ([name, values] of Object.entries(data)) {\n array = new Float32Array(values);\n size = name === 'uv' ? 2 : 3;\n buffer = device.createBuffer({ size: Math.max(4, array.byteLength), usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | usage });\n device.queue.writeBuffer(buffer, 0, array);\n attributes[name] = { size, data: array, count: array.length / size, buffer };\n }\n const mesh = {\n ...emptyNode(),\n device,\n geometry: { device, attributes, drawRange: { start: 0, count: attributes.position.count } },\n program: program || createProgram(backend, { vertexColors: true, doubleSided: true, ...material }),\n id: cityMapper.nextId++, renderOrder: 0, extras: {},\n };\n setParent(mesh, backend.root);\n update(backend);\n return mesh;\n}\n", "import { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function disposeMesh(backend, mesh) {\n if (!mesh) {\n return;\n }\n setParent(mesh, null);\n update(backend);\n let attribute;\n for (attribute of Object.values(mesh.geometry.attributes)) {\n attribute.buffer.destroy();\n }\n}\n", "/**\n * @returns {boolean} Whether the `{x, y}` points are in clockwise order.\n */\n\nexport function isClockWise(points) {\n let area = 0;\n let i, a, b;\n for (i = 0; i < points.length; i++) {\n a = points[i], b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n return area < 0;\n}\n", "export function cross(a, b, c) {\r\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\r\n}\r\n", "export function equal(a, b) {\r\n return a.x === b.x && a.y === b.y;\r\n}\r\n", "import { cross } from './cross.js';\nimport { equal } from './equal.js';\n\nexport function clean(ring) {\n let changed = true;\n let i, a, b, c;\n while (changed && ring.length > 3) {\n changed = false;\n for (i = 0; i < ring.length; i++) {\n a = ring[(i + ring.length - 1) % ring.length], b = ring[i], c = ring[(i + 1) % ring.length];\n if (equal(a, b) || Math.abs(cross(a, b, c)) < 1e-10) {\n ring.splice(i, 1); changed = true; break;\n }\n }\n }\n if (ring.length < 3) throw new Error('Degenerate polygon ring');\n return ring;\n}\n", "export function inside(point, ring) {\n let result = false;\n let i, j, a, b;\n for (i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n a = ring[i], b = ring[j];\n if ((a.y > point.y) !== (b.y > point.y) &&\n point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) result = !result;\n }\n return result;\n}\n", "import { inside } from './inside.js';\n\nexport function insideHole(point, rings) {\n let i;\n for (i = 1; i < rings.length; i++) if (inside(point, rings[i])) return true;\n return false;\n}\n", "export function on(p, q, r) {\r\n return Math.min(p.x, q.x) <= r.x && r.x <= Math.max(p.x, q.x) &&\r\n Math.min(p.y, q.y) <= r.y && r.y <= Math.max(p.y, q.y);\r\n}\r\n", "import { equal } from './equal.js';\r\nimport { cross } from './cross.js';\r\nimport { on } from './on.js';\r\n\r\nexport function intersects(a, b, c, d) {\r\n if (equal(a, c) || equal(a, d) || equal(b, c) || equal(b, d)) return false;\r\n const abC = cross(a, b, c), abD = cross(a, b, d), cdA = cross(c, d, a), cdB = cross(c, d, b);\r\n return abC * abD < 0 && cdA * cdB < 0 ||\r\n abC === 0 && on(a, b, c) || abD === 0 && on(a, b, d) ||\r\n cdA === 0 && on(c, d, a) || cdB === 0 && on(c, d, b);\r\n}\r\n", "import { intersects } from './intersects.js';\n\nexport function crossesRing(a, b, ring) {\n let i;\n for (i = 0; i < ring.length; i++) {\n if (intersects(a, b, ring[i], ring[(i + 1) % ring.length])) return true;\n }\n return false;\n}\n", "import { crossesRing } from './crossesRing.js';\n\nexport function crossesBoundary(a, b, polygon, rings) {\n if (crossesRing(a, b, polygon)) return true;\n let i;\n for (i = 1; i < rings.length; i++) if (crossesRing(a, b, rings[i])) return true;\n return false;\n}\n", "import { equal } from './equal.js';\nimport { cross } from './cross.js';\n\nexport function containsVertex(polygon, a, b, c) {\n let p;\n for (p of polygon) {\n if (!equal(p, a) && !equal(p, b) && !equal(p, c) &&\n cross(a, b, p) >= 0 && cross(b, c, p) >= 0 && cross(c, a, p) >= 0) return true;\n }\n return false;\n}\n", "export function area(ring) {\n let sum = 0;\n let i, p, q;\n for (i = 0; i < ring.length; i++) {\n p = ring[i], q = ring[(i + 1) % ring.length];\n sum += p.x * q.y - q.x * p.y;\n }\n return Math.abs(sum) / 2;\n}\n", "export function minimumX(ring) {\n const values = [];\n let point;\n for (point of ring) values.push(point.x);\n return Math.min(...values);\n}\n", "import { minimumX } from './minimumX.js';\n\nexport function sortHoles(holes) {\n const buffer = new Array(holes.length), entries = [];\n let ring, width, start, middle, end, left, right, output, previous, i;\n for (ring of holes) entries.push({ ring, x: minimumX(ring) });\n let source = entries, target = buffer;\n for (width = 1; width < entries.length; width *= 2) {\n for (start = 0; start < entries.length; start += width * 2) {\n middle = Math.min(start + width, entries.length), end = Math.min(start + width * 2, entries.length);\n left = start, right = middle;\n for (output = start; output < end; output++) {\n if (left < middle && (right >= end || source[left].x <= source[right].x)) {\n target[output] = source[left++];\n } else {\n target[output] = source[right++];\n }\n }\n }\n previous = source;\n source = target;\n target = previous;\n }\n for (i = 0; i < holes.length; i++) holes[i] = source[i].ring;\n return holes;\n}\n", "import { isClockWise } from \"./isClockWise.js\";\nimport { cross } from './cross.js';\nimport { clean } from './clean.js';\nimport { inside } from './inside.js';\nimport { insideHole } from './insideHole.js';\nimport { crossesBoundary } from './crossesBoundary.js';\nimport { containsVertex } from './containsVertex.js';\nimport { area } from './area.js';\nimport { sortHoles } from './sortHoles.js';\n\n/**\n * Triangulates a polygon given as `{x, y}` points.\n * Rings omit the repeated closing point; winding is normalized internally.\n * Vertex indices remain relative to the original inputs after duplicate/collinear\n * cleanup. Hole bridges duplicate endpoints, not source vertices.\n * @param {Object[]} contour Outer boundary.\n * @param {Object[][]} [holes] Interior boundaries.\n *\n * @returns {number[][]} Triangles as indices in `[...contour, ...holes.flat()]`.\n */\n\nexport function triangulate(contour, holes = []) {\n const points = [contour, ...holes].flat();\n let p, index, path, ring, hole, bridge, distance, h, a, b, d, mid, h2, p2, clipped, i, c, triangle2;\n for (p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) throw new Error('Invalid polygon coordinates');\n }\n // Translate near the origin to avoid cancellation with geographic coordinates.\n const vertices = [];\n for (index = 0; index < points.length; index++) {\n p = points[index];\n vertices.push({ x: p.x - contour[0].x, y: p.y - contour[0].y, index });\n }\n // Remove zero-area corners before connecting holes; keep original vertex indices.\n let offset = 0;\n const rings = [], paths = [contour, ...holes];\n for (index = 0; index < paths.length; index++) {\n path = paths[index];\n ring = clean(vertices.slice(offset, offset += path.length));\n if (isClockWise(ring) !== Boolean(index)) ring.reverse();\n rings.push(ring);\n }\n let polygon = rings[0].slice();\n // A bridge must stay inside the outer boundary, outside every hole, and cross no edge.\n // ponytail: quadratic ear clipping for building footprints; use spatial indexing for large rings.\n const holesToConnect = sortHoles(rings.slice(1));\n for (hole of holesToConnect) {\n bridge = void 0, distance = Infinity;\n for (h = 0; h < hole.length; h++) for (p = 0; p < polygon.length; p++) {\n a = hole[h], b = polygon[p], d = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\n if (d >= distance) continue;\n mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n if (!inside(mid, rings[0]) || insideHole(mid, rings)) continue;\n if (crossesBoundary(a, b, polygon, rings)) continue;\n bridge = [h, p]; distance = d;\n }\n if (!bridge) throw new Error('Unable to connect polygon hole');\n [h2, p2] = bridge;\n polygon = [...polygon.slice(0, p2 + 1), ...hole.slice(h2), ...hole.slice(0, h2 + 1),\n polygon[p2], ...polygon.slice(p2 + 1)];\n }\n // Clip a convex corner only when no other vertex is inside/on its triangle.\n const result = [];\n while (polygon.length > 3) {\n clipped = false;\n for (i = 0; i < polygon.length; i++) {\n a = polygon[(i + polygon.length - 1) % polygon.length], b = polygon[i], c = polygon[(i + 1) % polygon.length];\n if (cross(a, b, c) <= 1e-10) continue;\n if (containsVertex(polygon, a, b, c)) continue;\n result.push([a.index, b.index, c.index]); polygon.splice(i, 1); clipped = true; break;\n }\n if (!clipped) throw new Error('Unable to triangulate polygon: invalid or self-intersecting rings');\n }\n if (cross(...polygon) > 1e-10) {\n const triangle = [];\n for (p of polygon) triangle.push(p.index);\n result.push(triangle);\n }\n // Reject incomplete coverage instead of silently emitting a partial roof.\n let holeArea = 0, actual = 0;\n for (i = 1; i < rings.length; i++) holeArea += area(rings[i]);\n const expected = area(rings[0]) - holeArea;\n for (triangle2 of result) actual += cross(vertices[triangle2[0]], vertices[triangle2[1]], vertices[triangle2[2]]) / 2;\n if (expected <= 0 || Math.abs(actual - expected) > Math.max(1e-7, expected * 1e-8)) throw new Error('Polygon triangulation area mismatch');\n return result;\n}\n", "export function triangle(point, target, a, b, c) {\r\n return target.push(...point(a), ...point(b), ...point(c));\r\n}\r\n", "export function diskAt(center, radius, radiusY, count, index) {\r\n return new L.Point(center.x + radius * Math.cos(index * 2 * Math.PI / count),\r\n center.y + radiusY * Math.sin(index * 2 * Math.PI / count));\r\n}\r\n", "import { triangle } from './nativeTriangle.js';\nimport { diskAt } from './diskAt.js';\n\nexport function disk(point, center, radius, target, radiusY = radius) {\n if (!(radius > 0) || !(radiusY > 0)) return;\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(radius))));\n let i;\n for (i = 0; i < count; i++) {\n triangle(point, target, center, diskAt(center, radius, radiusY, count, i), diskAt(center, radius, radiusY, count, i + 1));\n }\n}\n", "export function circleAt(center, radius, radiusY, count, index, offset = 0) {\r\n const angle = index * Math.PI * 2 / count;\r\n return new L.Point(center.x + Math.max(0, radius + offset) * Math.cos(angle),\r\n center.y + Math.max(0, radiusY + offset) * Math.sin(angle));\r\n}\r\n", "import { triangle } from './nativeTriangle.js';\r\nimport { disk } from './disk.js';\r\n\r\nexport function segment(context, a, b, startCap, endCap) {\r\n const { options, width, stroke, point } = context;\r\n const radius = width / 2;\r\n const length = a.distanceTo(b);\r\n if (!length) return;\r\n const direction = b.subtract(a).divideBy(length);\r\n const normal = new L.Point(-direction.y * radius, direction.x * radius);\r\n if (options.lineCap === 'square') {\r\n if (startCap) a = a.subtract(direction.multiplyBy(radius));\r\n if (endCap) b = b.add(direction.multiplyBy(radius));\r\n }\r\n triangle(point, stroke, a.add(normal), a.subtract(normal), b.add(normal));\r\n triangle(point, stroke, b.add(normal), a.subtract(normal), b.subtract(normal));\r\n if (options.lineCap === 'round') {\r\n if (startCap) disk(point, a, radius, stroke);\r\n if (endCap) disk(point, b, radius, stroke);\r\n }\r\n}\r\n", "import { triangle } from './nativeTriangle.js';\nimport { disk } from './disk.js';\nimport { segment } from './segment.js';\n\nexport function line(context, points, closed) {\n const { options, width, dash, stroke, point } = context;\n if (!options.stroke || width <= 0 || points.length < 2) return;\n const radius = width / 2;\n let distance = Number(options.dashOffset) || 0;\n let period = 0;\n let value, i, a, b, length, previous, previousLength, incoming, outgoing, side, n1, n2, from, to;\n let denominator, miter, offset, phase, index, end, delta;\n for (value of dash) period += value;\n for (i = 0; i < points.length - (closed ? 0 : 1); i++) {\n a = points[i], b = points[(i + 1) % points.length], length = a.distanceTo(b);\n if (!dash.length) {\n segment(context, a, b, !closed && i === 0, !closed && i === points.length - 2);\n if (closed || i > 0) {\n if (options.lineJoin === 'round') disk(point, a, radius, stroke);\n else {\n previous = a.subtract(points[(i + points.length - 1) % points.length]);\n previousLength = Math.hypot(previous.x, previous.y);\n if (previousLength && length) {\n incoming = previous.divideBy(previousLength);\n outgoing = b.subtract(a).divideBy(length);\n side = incoming.x * outgoing.y - incoming.y * outgoing.x > 0 ? -1 : 1;\n n1 = new L.Point(-incoming.y * side, incoming.x * side);\n n2 = new L.Point(-outgoing.y * side, outgoing.x * side);\n from = a.add(n1.multiplyBy(radius)), to = a.add(n2.multiplyBy(radius));\n denominator = 1 + n1.x * n2.x + n1.y * n2.y;\n miter = denominator > 0 ? n1.add(n2).multiplyBy(radius / denominator) : null;\n triangle(point, stroke, from, a, to);\n if (options.lineJoin === 'miter' && miter && Math.hypot(miter.x, miter.y) <= radius * 4) {\n triangle(point, stroke, from, a.add(miter), to);\n }\n }\n }\n }\n } else {\n offset = 0;\n while (offset < length) {\n phase = ((distance + offset) % period + period) % period, index = 0;\n while (phase >= dash[index]) phase -= dash[index++];\n end = Math.min(length, offset + dash[index] - phase);\n if (index % 2 === 0) {\n delta = b.subtract(a).divideBy(length);\n segment(context, a.add(delta.multiplyBy(offset)), a.add(delta.multiplyBy(end)), true, true);\n }\n offset = end;\n }\n }\n distance += length;\n }\n}\n", "import { triangle } from './nativeTriangle.js';\nimport { line } from './line.js';\nimport { triangulate } from '../triangulation/triangulate.js';\n\nexport function polygon(context, rings, closed) {\n const { options, fill, point, map } = context, projected = [];\n let ring, path, latlng, indices;\n for (ring of rings) {\n path = [];\n for (latlng of ring) path.push(map.project(latlng));\n projected.push(path);\n }\n if (closed && options.fill && projected[0]?.length >= 3) {\n const valid = [];\n for (ring of projected) if (ring.length >= 3) valid.push(ring);\n const vertices = valid.flat();\n for (indices of triangulate(valid[0], valid.slice(1))) {\n triangle(point, fill, vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]);\n }\n }\n for (ring of projected) line(context, ring, closed);\n}\n", "import { polygon } from './polygon.js';\n\nexport function visit(context, coordinates, closed) {\n if (!coordinates.length) return;\n let child;\n if (coordinates[0] instanceof L.LatLng) polygon(context, [coordinates], closed);\n else if (closed && coordinates[0][0] instanceof L.LatLng) polygon(context, coordinates, closed);\n else for (child of coordinates) visit(context, child, closed);\n}\n", "import { triangulate } from '../triangulation/triangulate.js';\nimport { disk } from './disk.js';\nimport { circleAt } from './circleAt.js';\nimport { line } from './line.js';\nimport { visit } from './visit.js';\n\n/** Leaflet paths become flat triangles; pixel-sized strokes are rebuilt on zoom. */\nexport function nativeGeometry(source, map, point) {\n const fill = [], stroke = [], options = source.options;\n const width = Number(options.weight) || 0;\n const values = Array.isArray(options.dashArray) ? options.dashArray :\n String(options.dashArray || '').trim().split(/[ ,]+/);\n const dash = [];\n let value, index, i;\n for (value of values) dash.push(Number(value));\n let allZero = true;\n for (value of dash) {\n if (!Number.isFinite(value) || value < 0) throw new Error('Invalid Leaflet dashArray');\n if (value !== 0) allZero = false;\n }\n if (allZero) dash.length = 0;\n if (dash.length % 2) dash.push(...dash);\n const context = { fill, stroke, options, width, dash, point, map };\n if (source instanceof L.CircleMarker) {\n const center = map.project(source.getLatLng());\n let radius = source.getRadius(), radiusY = radius;\n if (source instanceof L.Circle) {\n source._project();\n const projected = source._point.add(map.getPixelOrigin());\n center.x = projected.x;\n center.y = projected.y;\n radius = source._radius;\n radiusY = source._radiusY || radius;\n }\n if (options.fill) disk(point, center, radius, fill, radiusY);\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(Math.max(radius, radiusY)))));\n if (dash.length) {\n const points = [];\n for (index = 0; index < count; index++) points.push(circleAt(center, radius, radiusY, count, index));\n line(context, points, true);\n }\n else if (options.stroke && width > 0) {\n for (i = 0; i < count; i++) {\n triangle(point, stroke, circleAt(center, radius, radiusY, count, i, width / 2),\n circleAt(center, radius, radiusY, count, i, -width / 2), circleAt(center, radius, radiusY, count, i + 1, width / 2));\n triangle(point, stroke, circleAt(center, radius, radiusY, count, i + 1, width / 2),\n circleAt(center, radius, radiusY, count, i, -width / 2), circleAt(center, radius, radiusY, count, i + 1, -width / 2));\n }\n }\n } else {\n const closed = source instanceof L.Polygon;\n visit(context, source.getLatLngs(), closed);\n }\n return { fill, stroke };\n}\n", "export function sub(a, b) {\n const result = [];\n let i;\n for (i = 0; i < a.length; i++) result.push(a[i] - b[i]);\n return result;\n}\n", "export function dot(a, b) {\n let sum = 0;\n let i;\n for (i = 0; i < a.length; i++) sum += a[i] * b[i];\n return sum;\n}\n", "export function sortHits(hits) {\n const buffer = new Array(hits.length);\n let source = hits, target = buffer;\n let width, start, middle, end, left, right, output, previous, i;\n for (width = 1; width < hits.length; width *= 2) {\n for (start = 0; start < hits.length; start += width * 2) {\n middle = Math.min(start + width, hits.length), end = Math.min(start + width * 2, hits.length);\n left = start, right = middle;\n for (output = start; output < end; output++) {\n if (left < middle && (right >= end || !(source[right].distance < source[left].distance))) {\n target[output] = source[left++];\n } else {\n target[output] = source[right++];\n }\n }\n }\n previous = source;\n source = target;\n target = previous;\n }\n if (source !== hits) for (i = 0; i < hits.length; i++) hits[i] = source[i];\n return hits;\n}\n", "import { computeBounds } from \"../geometry/computeBounds.js\";\nimport { sub } from '../geometry/sub.js';\nimport { cross } from '../geometry/cross.js';\nimport { dot } from '../geometry/dot.js';\nimport { sortHits } from './sortHits.js';\n\n/** Nearest triangle hit per mesh, sorted by world-space distance. */\n\nexport function intersectMeshes(ray, meshes, night = 0) {\n const hits = [],\n a = [0, 0, 0],\n b = [0, 0, 0],\n c = [0, 0, 0];\n let mesh, inverse, inverseValues, value, localOrigin, origin, localDirection, direction;\n let directionLength, near, far, i, a2, b2, position, index, instanceOffset, vertices, closest;\n let faceIndex, vertex, offset, x, y, z, ai, bi, ci, e, f, p, det, t, u, q, v, uv, ids, x2, y2;\n let distance, point, worldPoint;\n for (mesh of meshes) {\n // Test in mesh-local space; compare distances only after returning to shared world space.\n inverse = new DOMMatrix(mesh.worldMatrix).inverse();\n inverseValues = inverse.toFloat64Array();\n for (value of inverseValues) {\n if (!Number.isFinite(value)) throw new Error('Singular 3D transform');\n }\n localOrigin = new DOMPoint(...ray.origin, 1).matrixTransform(inverse);\n origin = [\n localOrigin.x / localOrigin.w,\n localOrigin.y / localOrigin.w,\n localOrigin.z / localOrigin.w\n ];\n localDirection = new DOMPoint(...ray.direction, 0).matrixTransform(inverse);\n direction = [\n localDirection.x,\n localDirection.y,\n localDirection.z\n ];\n directionLength = Math.hypot(...direction) || 1;\n direction[0] /= directionLength;\n direction[1] /= directionLength;\n direction[2] /= directionLength;\n // AABB slab test reuses the same local ray as the triangle test.\n if (!mesh.geometry.bounds) {\n computeBounds(mesh.geometry);\n }\n near = 0, far = Infinity;\n for (i = 0; i < 3; i++) {\n if (Math.abs(direction[i]) < 1e-12) {\n if (origin[i] < mesh.geometry.bounds.min[i] || origin[i] > mesh.geometry.bounds.max[i]) {\n far = -Infinity;\n break;\n }\n } else {\n a2 = (mesh.geometry.bounds.min[i] - origin[i]) / direction[i], b2 = (mesh.geometry.bounds.max[i] - origin[i]) / direction[i];\n near = Math.max(near, Math.min(a2, b2));\n far = Math.min(far, Math.max(a2, b2));\n }\n }\n if (far < near) {\n continue;\n }\n ({ position, index, instanceOffset } = mesh.geometry.attributes);\n vertices = index?.count || position.count;\n closest = Infinity, faceIndex = void 0;\n for (i = 0; i < vertices * (instanceOffset?.count ?? 1); i += 3) {\n vertex = instanceOffset ? i % vertices : i;\n offset = instanceOffset ? Math.floor(i / vertices) * instanceOffset.size : 0;\n x = instanceOffset?.data[offset] ?? 0;\n y = instanceOffset?.data[offset + 1] ?? 0;\n z = instanceOffset?.data[offset + 2] ?? 0;\n ai = (index ? index.data[vertex] : vertex) * position.size;\n bi = (index ? index.data[vertex + 1] : vertex + 1) * position.size;\n ci = (index ? index.data[vertex + 2] : vertex + 2) * position.size;\n a[0] = position.data[ai];\n a[1] = position.data[ai + 1];\n a[2] = position.data[ai + 2];\n b[0] = position.data[bi];\n b[1] = position.data[bi + 1];\n b[2] = position.data[bi + 2];\n c[0] = position.data[ci];\n c[1] = position.data[ci + 1];\n c[2] = position.data[ci + 2];\n if (instanceOffset) {\n a[0] = Math.fround(a[0] + x); a[1] = Math.fround(a[1] + y); a[2] = Math.fround(a[2] + z);\n b[0] = Math.fround(b[0] + x); b[1] = Math.fround(b[1] + y); b[2] = Math.fround(b[2] + z);\n c[0] = Math.fround(c[0] + x); c[1] = Math.fround(c[1] + y); c[2] = Math.fround(c[2] + z);\n }\n // Moller-Trumbore: barycentric triangle coordinates and local ray distance.\n e = sub(b, a), f = sub(c, a), p = cross(direction, f), det = dot(e, p);\n if (mesh.program.cullMode === 'none' || mesh.program.cullFace === null\n ? Math.abs(det) < 1e-9 : det < 1e-9) {\n continue;\n }\n t = sub(origin, a), u = dot(t, p) / det;\n if (u < 0 || u > 1) {\n continue;\n }\n q = cross(t, e), v = dot(direction, q) / det;\n if (v < 0 || u + v > 1) {\n continue;\n }\n if (mesh.program.nightLight) {\n uv = mesh.geometry.attributes.uv.data;\n ids = index ? [index.data[i], index.data[i + 1], index.data[i + 2]] : [i, i + 1, i + 2];\n x2 = uv[ids[0] * 2] * (1 - u - v) + uv[ids[1] * 2] * u + uv[ids[2] * 2] * v;\n y2 = uv[ids[0] * 2 + 1] * (1 - u - v) + uv[ids[1] * 2 + 1] * u + uv[ids[2] * 2 + 1] * v;\n if (x2 <= 2 && (!night || x2 * x2 + y2 * y2 > 0.9)) continue;\n }\n distance = dot(f, q) / det;\n if (distance > 0 && distance < closest) {\n closest = distance; faceIndex = i / 3;\n }\n }\n if (faceIndex === undefined) continue;\n point = new DOMPoint(\n direction[0] * closest + origin[0],\n direction[1] * closest + origin[1],\n direction[2] * closest + origin[2],\n 1\n ).matrixTransform(new DOMMatrix(mesh.worldMatrix));\n worldPoint = [point.x / point.w, point.y / point.w, point.z / point.w];\n hits.push({\n faceIndex,\n object: mesh,\n point: worldPoint,\n distance: Math.hypot(\n worldPoint[0] - ray.origin[0],\n worldPoint[1] - ray.origin[1],\n worldPoint[2] - ray.origin[2]\n )\n });\n }\n return sortHits(hits);\n}\n", "/** Depth-first walk; a truthy callback result skips that node's descendants. */\n\nexport function traverse(node, callback, context) {\n if (callback(node, context)) return;\n let child;\n for (child of node.children) traverse(child, callback, context);\n}\n", "export function collectVisibleMesh(mesh, meshes) {\n if (!mesh.visible) return true;\n if (mesh.geometry && mesh._appearance !== 0) meshes.push(mesh);\n}\n", "import { intersectMeshes } from '../collision/intersectMeshes.js';\nimport { traverse } from '../scene/traverse.js';\nimport { updateCamera } from '../scene/updateCamera.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { collectVisibleMesh } from './collectVisibleMesh.js';\n\n/** Raycasting, hover/click highlight and tooltips. */\n/**\n * Finds the objects under a mouse or pointer event, nearest first.\n *\n * @param {MouseEvent} event\n * @param {Object[]} [objects] Defaults to this layer's root children, not all map layers.\n * @param {boolean} [recursive] Also test the descendants of `objects`.\n * @returns {Object[]} Nearest hit per mesh: object, shared-world point/distance and triangle faceIndex.\n */\n\nexport function raycast(backend, event, objects = backend.root.children, recursive = true) {\n if (!backend.renderer) {\n return [];\n }\n backend._beforeRaycast?.();\n const rect = backend._map.getContainer().getBoundingClientRect();\n updateWorldMatrix(backend.scene);\n updateCamera(backend.camera);\n // Unproject the mouse (-1..1) into a world-space ray from the camera.\n const inverseCamera = new DOMMatrix(backend.camera.projectionViewMatrix).inverse();\n const inverseCameraValues = inverseCamera.toFloat64Array();\n let value, object;\n for (value of inverseCameraValues) {\n if (!Number.isFinite(value)) throw new Error('Singular 3D transform');\n }\n backend.raycaster.origin[0] = backend.camera.position[0];\n backend.raycaster.origin[1] = backend.camera.position[1];\n backend.raycaster.origin[2] = backend.camera.position[2];\n const unprojected = new DOMPoint(\n ((event.clientX - rect.left) / rect.width) * 2 - 1,\n -((event.clientY - rect.top) / rect.height) * 2 + 1,\n 0,\n 1\n ).matrixTransform(inverseCamera);\n const end = [\n unprojected.x / unprojected.w,\n unprojected.y / unprojected.w,\n unprojected.z / unprojected.w\n ];\n backend.raycaster.direction[0] = end[0] - backend.raycaster.origin[0];\n backend.raycaster.direction[1] = end[1] - backend.raycaster.origin[1];\n backend.raycaster.direction[2] = end[2] - backend.raycaster.origin[2];\n const rayLength = Math.hypot(...backend.raycaster.direction) || 1;\n backend.raycaster.direction[0] /= rayLength;\n backend.raycaster.direction[1] /= rayLength;\n backend.raycaster.direction[2] /= rayLength;\n const meshes = [];\n for (object of objects) {\n if (recursive) traverse(object, collectVisibleMesh, meshes);\n else if (object.geometry && object.visible && object._appearance !== 0) meshes.push(object);\n }\n return intersectMeshes(backend.raycaster, meshes, backend.renderer.uniformData?.[55]);\n}\n", "export const nativeEventMaps = new WeakMap();\n", "export function restoreNativeEvents() {\r\n const { map, descriptor, handle } = this;\r\n if (map._fireDOMEvent !== handle) return;\r\n if (descriptor) Object.defineProperty(map, '_fireDOMEvent', descriptor);\r\n else delete map._fireDOMEvent;\r\n}\n", "export function compareNativeHits(a, b) {\r\n return b.object.renderOrder - a.object.renderOrder || a.distance - b.distance;\r\n}\n", "import { nativeEventMaps } from '../constants/nativeEventMaps.js';\nimport { cityMapper } from '../constants/cityMapper.js';\nimport { raycast } from '../picking/raycast.js';\nimport { compareNativeHits } from './compareNativeHits.js';\n\nexport function handleNativeMapEvent(event, type = event.type, targets) {\n const map = this, context = nativeEventMaps.get(map), fireDOMEvent = context.fireDOMEvent;\n const owner = cityMapper.renderers.get(map);\n if (!owner?.renderer || targets || !['click', 'preclick', 'dblclick', 'contextmenu',\n 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout',\n 'pointerdown', 'pointerup', 'pointermove', 'pointerover', 'pointerout'].includes(type)) {\n return fireDOMEvent.call(this, event, type, targets);\n }\n const target = event.target;\n const dom = target instanceof Element &&\n target.closest('.leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control');\n if (dom && context.hovered && (type === context.move || type === context.out)) {\n fireDOMEvent.call(map, event, context.out, [context.hovered]);\n context.hovered = null;\n map.getContainer().style.cursor = '';\n }\n if (dom || type === context.move && (map.dragging?.moving() || map._animatingZoom)) {\n return fireDOMEvent.call(this, event, type, targets);\n }\n const hits = [];\n let candidate, source2, backend;\n if (type !== context.out) {\n for (candidate of context.states) {\n ({ source: source2, backend } = candidate);\n if (source2 instanceof L.Marker || source2.options.interactive === false ||\n !(source2 instanceof L.Path) && !source2.options.interactive) continue;\n hits.push(...raycast(backend, event, candidate.meshes.values(), false));\n }\n }\n hits.sort(compareNativeHits);\n let source = hits[0]?.object._nativeSource || null;\n if ((type === 'click' || type === 'preclick') && source && map._draggableMoved(source)) source = null;\n if (type === context.move || type === context.out) {\n if (context.hovered !== source) {\n if (context.hovered) fireDOMEvent.call(map, event, context.out, [context.hovered]);\n context.hovered = source;\n if (source) fireDOMEvent.call(map, event, context.over, [source]);\n map.getContainer().style.cursor = source ? 'pointer' : '';\n }\n }\n return fireDOMEvent.call(this, event, type, source ? [source] : undefined);\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { raycast } from '../picking/raycast.js';\nimport { nativeEventMaps } from '../constants/nativeEventMaps.js';\nimport { restoreNativeEvents } from './restoreNativeEvents.js';\nimport { handleNativeMapEvent } from './handleNativeMapEvent.js';\n\n/** One GPU hit test per map event, rather than one invisible SVG path per feature. */\nexport function nativeEvents(state) {\n const { map } = state;\n let context = nativeEventMaps.get(map);\n if (!context) {\n context = { map, states: new Set(), hovered: null };\n const pointer = L.version.startsWith('2');\n context.move = pointer ? 'pointermove' : 'mousemove';\n context.out = pointer ? 'pointerout' : 'mouseout';\n context.over = pointer ? 'pointerover' : 'mouseover';\n context.descriptor = Object.getOwnPropertyDescriptor(map, '_fireDOMEvent');\n context.fireDOMEvent = map._fireDOMEvent;\n context.handle = handleNativeMapEvent;\n context.restore = restoreNativeEvents;\n nativeEventMaps.set(map, context);\n map._fireDOMEvent = handleNativeMapEvent;\n }\n context.states.add(state);\n state._nativeEventContext = context;\n}\n", "import { nativeEventMaps } from '../constants/nativeEventMaps.js';\n\nexport function removeNativeEvents(state) {\r\n const context = state._nativeEventContext;\r\n if (!context) return;\r\n const { map } = context;\r\n context.states.delete(state);\r\n if (context.hovered === state.source) {\r\n context.hovered = null;\r\n map.getContainer().style.cursor = '';\r\n }\r\n state._nativeEventContext = null;\r\n if (context.states.size) return;\r\n context.restore();\r\n nativeEventMaps.delete(map);\r\n}\n", "export function toSRGB(value) {\n return value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055;\n}\n", "export function channel(n, h, l, a) {\n const k = (n + h * 12) % 12;\n return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n}\n", "import { toSRGB } from \"./toSRGB.js\";\nimport { channel } from \"./channel.js\";\n\n/**\n * HSL inputs are linear-space to preserve the original building styling.\n * Numeric/CSS/RGB inputs are already sRGB; CSS alpha is not used for extrusion.\n * @param {number|string|Object} value 0xRRGGBB, CSS color, {r,g,b}, or {h,s,l} in 0..1.\n * @returns {Object} sRGB {r,g,b} components in 0..1.\n */\n\nexport function parseColor(value) {\n if (value && typeof value === 'object' && 'h' in value) {\n const a = value.s * Math.min(value.l, 1 - value.l);\n return {\n r: toSRGB(channel(0, value.h, value.l, a)),\n g: toSRGB(channel(8, value.h, value.l, a)),\n b: toSRGB(channel(4, value.h, value.l, a))\n };\n }\n if (value && typeof value === 'object' && 'r' in value) {\n return value;\n }\n if (typeof value === 'number') {\n return {\n r: (value >> 16 & 255) / 255,\n g: (value >> 8 & 255) / 255,\n b: (value & 255) / 255,\n };\n }\n if (typeof value !== 'string' || !CSS.supports('color', value)) {\n throw new Error('Invalid 3D color');\n }\n const context = document.createElement('canvas').getContext('2d');\n context.fillStyle = value;\n context.fillRect(0, 0, 1, 1);\n const [r, g, b] = context.getImageData(0, 0, 1, 1).data;\n return {\n r: r / 255,\n g: g / 255,\n b: b / 255\n };\n}\n", "export function current(state) {\r\n return state.source._nativeGPU === state && state.map.hasLayer(state.source);\r\n}\n", "import { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function refreshNativeEvent() {\r\n refreshNativeLayer(this);\r\n}\n", "import { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function reorderNativeLayer(front) {\r\n this.order = front ? ++this.map._nativeGPUOrder : --this.map._nativeGPUBack;\r\n refreshNativeLayer(this);\r\n}\n", "import { update } from '../scene/update.js';\n\nexport function updateNativeLayerView() {\r\n this.viewDirty = true;\r\n if (this.backend._shared) update(this.backend);\r\n}\n", "import { refreshNativeEvent } from './refreshNativeEvent.js';\nimport { updateNativeLayerView } from './updateNativeLayerView.js';\nimport { removeNativeEvents } from './removeNativeEvents.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { nativeImageRefresh } from './nativeImageRefresh.js';\nimport { nativeImageError } from './nativeImageError.js';\nimport { removeImageState } from './removeImageState.js';\n\nexport function disposeNativeLayer() {\n const state = this;\n const { source, map, backend, meshes, textures, images } = state;\n const events = 'load tileload tileunload move drag';\n source.off(events, refreshNativeEvent, state);\n map.off('zoomend', refreshNativeEvent, state);\n if (state.marker) map.off('move zoom rotate pitch resize viewreset', updateNativeLayerView, state);\n removeNativeEvents(state);\n state.refresh = state.reorder = null;\n let name, methods, mesh, texture, image;\n for ([name, methods] of state.methods) {\n if (methods.own) Object.defineProperty(source, name, methods.own);\n else delete source[name];\n }\n for (mesh of meshes.values()) disposeMesh(backend, mesh);\n meshes.clear();\n for (texture of textures.values()) destroyTexture(backend, texture.texture);\n textures.clear();\n for (image of images) {\n image.removeEventListener('load', nativeImageRefresh);\n image.removeEventListener('error', nativeImageError);\n removeImageState(image, state);\n }\n backend._beforeRender = null;\n backend.remove();\n}\n", "export function resolveNativeReady() {\r\n this.ready.resolve();\r\n}\n", "export function rejectNativeReady({ error }) {\r\n this.ready.reject(error);\r\n}\n", "export function forwardNativeError({ error }) {\r\n this.source.fire('error', { error });\r\n}\n", "export function styleNativeMesh(state, mesh, color, opacity) {\r\n const { source, marker, paneOrder, order } = state;\r\n mesh.program.uniforms.baseColor.value = color;\r\n mesh.program.uniforms.opacity.value = opacity;\r\n if (source instanceof L.GridLayer) mesh.opacity = opacity;\r\n const zIndex = marker ? source._zIndex + (source._cameraZIndexOffset || 0) : source.options.zIndex;\r\n mesh.renderOrder = paneOrder * 1e6 + (zIndex || 0) * 1000 + order;\r\n mesh._nativeSource = source;\r\n mesh._nativeUsed = true;\r\n}\n", "import { current } from './current.js';\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport async function uploadCanvasTexture(state, key, texture, image, device, width, height) {\r\n let bitmap;\r\n try {\r\n bitmap = await createImageBitmap(image);\r\n if (!current(state) || state.textures.get(key) !== texture) return;\r\n device.queue.copyExternalImageToTexture({ source: bitmap }, { texture: texture.texture }, [width, height]);\r\n texture.uploaded = image;\r\n texture.pending = false;\r\n refreshNativeLayer(state);\r\n } catch (error) {\r\n state.failed = true;\r\n state.source.fire('error', { error });\r\n } finally {\r\n bitmap?.close();\r\n }\r\n}\n", "import { disposeMesh } from '../rendering/disposeMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { uploadCanvasTexture } from './uploadCanvasTexture.js';\n\nexport function textureFor(state, key, image) {\r\n if (!(image instanceof HTMLImageElement) && !(image instanceof HTMLCanvasElement)) {\r\n throw new Error('WebGPU native raster layers require image or canvas tiles');\r\n }\r\n const { backend, textures, meshes } = state;\r\n let texture = textures.get(key);\r\n const url = image.currentSrc || image.src;\r\n if (!texture || texture.image !== image || texture.url !== url) {\r\n if (texture) {\r\n const mesh = meshes.get(key);\r\n if (mesh) disposeMesh(backend, mesh);\r\n meshes.delete(key);\r\n destroyTexture(backend, texture.texture);\r\n textures.delete(key);\r\n }\r\n const width = image.naturalWidth || image.width, height = image.naturalHeight || image.height;\r\n if (!width || !height) return;\r\n const { device } = backend.renderer;\r\n texture = {\r\n device, image, url, format: 'rgba8unorm', uploaded: null,\r\n texture: device.createTexture({\r\n size: [width, height], format: 'rgba8unorm',\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler({ minFilter: 'linear', magFilter: 'linear' }),\r\n };\r\n textures.set(key, texture);\r\n if (image instanceof HTMLCanvasElement) {\r\n texture.pending = true;\r\n uploadCanvasTexture(state, key, texture, image, device, width, height);\r\n } else {\r\n try {\r\n device.queue.copyExternalImageToTexture({ source: image }, { texture: texture.texture }, [width, height]);\r\n } catch (error) {\r\n texture.texture.destroy();\r\n textures.delete(key);\r\n throw error;\r\n }\r\n texture.uploaded = image;\r\n }\r\n }\r\n texture.used = true;\r\n return texture.uploaded === image ? texture : undefined;\r\n}\n", "import { disposeMesh } from '../rendering/disposeMesh.js';\nimport { createMesh } from '../rendering/createMesh.js';\nimport { styleNativeMesh } from './styleNativeMesh.js';\n\nexport function putNativeMesh(state, key, position, color, opacity, texture, uv) {\n const { backend, source, meshes } = state;\n if (!position.length) return;\n let mesh = meshes.get(key);\n const normal = [];\n let index;\n for (index = 0; index < position.length; index++) normal.push(index % 3 === 1 ? 1 : 0);\n const data = { position, normal, ...(uv ? { uv } : {}) };\n if (!mesh || mesh.geometry.attributes.position.data.length !== position.length ||\n mesh.program.uniforms.baseTexture?.value !== texture) {\n if (mesh) disposeMesh(backend, mesh);\n mesh = createMesh(backend, data, {\n vertexColors: false, color, opacity, unlit: true, alphaMode: 'BLEND',\n ...(texture ? { baseTexture: texture } : {}),\n }, 0, source instanceof L.GridLayer ? state.rasterProgram : undefined);\n if (source instanceof L.GridLayer) {\n state.rasterProgram ||= mesh.program;\n mesh.texture = texture;\n }\n meshes.set(key, mesh);\n } else {\n const attribute = mesh.geometry.attributes.position;\n attribute.data.set(position);\n attribute.needsUpdate = true;\n mesh.geometry.bounds = null;\n }\n styleNativeMesh(state, mesh, color, opacity);\n return mesh;\n}\n", "import { textureFor } from './textureFor.js';\nimport { putNativeMesh } from './putNativeMesh.js';\n\nexport function quadNativeMesh(state, key, image, corners, opacity) {\n const texture = textureFor(state, key, image);\n if (!texture) return;\n const indices = [0, 2, 1, 1, 2, 3];\n const position = [], uv = [], textureCoords = [[0, 0], [1, 0], [0, 1], [1, 1]];\n let index;\n for (index of indices) {\n position.push(...corners[index]);\n uv.push(...textureCoords[index]);\n }\n return putNativeMesh(state, key, position, [1, 1, 1], opacity, texture, uv);\n}\n", "export function localPosition(state, latlng) {\r\n const { map, backend } = state, crs = map.options.crs;\r\n const origin = crs.project(backend.location), point = crs.project(latlng);\r\n const metres = Math.cos(backend.location.lat * Math.PI / 180);\r\n return [(point.x - origin.x) * metres, 0, -(point.y - origin.y) * metres];\r\n}\n", "import { localPosition } from './localPosition.js';\n\nexport function boundsQuad(state, bounds) {\n const corners = [\n bounds.getNorthWest(), bounds.getNorthEast(), bounds.getSouthWest(), bounds.getSouthEast(),\n ];\n const positions = [];\n let corner;\n for (corner of corners) positions.push(localPosition(state, corner));\n return positions;\n}\n", "import { styleNativeMesh } from './styleNativeMesh.js';\nimport { quadNativeMesh } from './quadNativeMesh.js';\nimport { boundsQuad } from './boundsQuad.js';\n\nexport function syncGridLayer(state) {\n const { source, textures, meshes } = state;\n let key, tile, opacity, retained, mesh, nw, se;\n for ([key, tile] of Object.entries(source._tiles || {})) {\n if (!tile.loaded || tile.el instanceof HTMLImageElement && !tile.el.naturalWidth) continue;\n opacity = (source.options.opacity ?? 1) * (tile._gpuOpacity ?? 1);\n retained = textures.get(key);\n mesh = meshes.get(key);\n if (mesh && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {\n retained.used = true;\n styleNativeMesh(state, mesh, [1, 1, 1], opacity);\n } else {\n [nw, se] = source._tileCoordsToNwSe(tile.coords);\n mesh = quadNativeMesh(state, key, tile.el, boundsQuad(state, new L.LatLngBounds(nw, se)), opacity);\n }\n if (mesh) mesh.renderOrder += tile.coords.z / 100;\n }\n}\n", "import { quadNativeMesh } from './quadNativeMesh.js';\nimport { boundsQuad } from './boundsQuad.js';\n\nexport function syncImageOverlay(state) {\r\n const { source } = state;\r\n if (source._image?.complete && source._image.naturalWidth) {\r\n quadNativeMesh(state, 'image', source._image, boundsQuad(state, source.getBounds()), source.options.opacity ?? 1);\r\n }\r\n}\n", "import { localPosition } from './localPosition.js';\n\nexport function markerQuadCorners(state, key, image) {\n const { source, map, backend } = state;\n const world = new DOMPoint(...localPosition(state, source.getLatLng()), 1)\n .matrixTransform(new DOMMatrix(backend.root.worldMatrix));\n const clip = world.matrixTransform(new DOMMatrix(backend.camera.projectionViewMatrix));\n const inverse = new DOMMatrix(backend.camera.projectionViewMatrix).inverse();\n const toLocal = new DOMMatrix(backend.root.worldMatrix).inverse();\n const options = source.options.icon.options, size = map.getSize();\n const dimensions = options[key === 'shadow' ? 'shadowSize' : 'iconSize'] ||\n [image.naturalWidth, image.naturalHeight];\n const width = dimensions.x ?? dimensions[0], height = dimensions.y ?? dimensions[1];\n const anchor = (key === 'shadow' && options.shadowAnchor) ||\n options.iconAnchor || [Math.floor(width / 2), Math.floor(height / 2)];\n const center = new L.Point((clip.x / clip.w + 1) * size.x / 2, (1 - clip.y / clip.w) * size.y / 2);\n const left = center.x - (anchor.x ?? anchor[0]), top = center.y - (anchor.y ?? anchor[1]);\n const screenCorners = [[left, top], [left + width, top],\n [left, top + height], [left + width, top + height]];\n const corners = [];\n let pointX, pointY, offset, x, y, p, result;\n for ([pointX, pointY] of screenCorners) {\n offset = source._cameraIconPoint(pointX - center.x, pointY - center.y);\n x = center.x + offset.x, y = center.y + offset.y;\n p = new DOMPoint(x / size.x * 2 - 1,\n 1 - y / size.y * 2, clip.z / clip.w, 1).matrixTransform(inverse);\n result = new DOMPoint(p.x / p.w, p.y / p.w, p.z / p.w, 1).matrixTransform(toLocal);\n corners.push([result.x, result.y, result.z]);\n }\n return corners;\n}\n", "import { quadNativeMesh } from './quadNativeMesh.js';\nimport { markerQuadCorners } from './markerQuadCorners.js';\n\nexport function syncMarker(state) {\n const { source } = state;\n let key, image, mesh;\n for ([key, image] of [['shadow', source._shadow], ['icon', source._icon]]) {\n if (!(image instanceof HTMLImageElement) || !image.complete || !image.naturalWidth) continue;\n mesh = quadNativeMesh(state, key, image, markerQuadCorners(state, key, image), source.options.opacity ?? 1);\n if (key === 'shadow' && mesh) mesh.renderOrder -= 100 * 1e6;\n }\n}\n", "import { localPosition } from './localPosition.js';\n\nexport function localPixel(state, point) {\r\n return localPosition(state, state.map.unproject(point));\r\n}\n", "import { localPixel } from './localPixel.js';\nimport { nativeLayerState } from '../constants/nativeLayerState.js';\n\nexport function localPixelForGeometry(point) {\r\n return localPixel(nativeLayerState.geometryPixelStates[nativeLayerState.geometryPixelStates.length - 1], point);\r\n}\n", "import { nativeLayerState } from '../constants/nativeLayerState.js';\nimport { nativeGeometry } from '../geometry/nativeGeometry.js';\nimport { localPixelForGeometry } from './localPixelForGeometry.js';\nimport { parseColor } from '../utils/parseColor.js';\nimport { putNativeMesh } from './putNativeMesh.js';\n\nexport function syncVectorLayer(state) {\n const { source } = state;\n nativeLayerState.geometryPixelStates.push(state);\n let geometry;\n try {\n geometry = nativeGeometry(source, state.map, localPixelForGeometry);\n } finally {\n nativeLayerState.geometryPixelStates.pop();\n }\n const { fill, stroke } = geometry;\n let key, positions, color, opacity, r, g, b;\n for ([key, positions, color, opacity] of [\n ['fill', fill, source.options.fillColor || source.options.color, source.options.fillOpacity],\n ['stroke', stroke, source.options.color, source.options.opacity],\n ]) {\n if (!positions.length) continue;\n ({ r, g, b } = parseColor(color));\n putNativeMesh(state, key, positions, [r, g, b], opacity ?? 1);\n }\n}\n", "import { current } from './current.js';\nimport { syncGridLayer } from './syncGridLayer.js';\nimport { syncImageOverlay } from './syncImageOverlay.js';\nimport { syncMarker } from './syncMarker.js';\nimport { syncVectorLayer } from './syncVectorLayer.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\n\nexport function synchronizeNativeLayer(state) {\n const { source, meshes, textures } = state;\n if (!current(state) || !state.backend.renderer || state.failed) return;\n if (!state.dirty && (!state.marker || !state.viewDirty)) return;\n state.dirty = false;\n state.viewDirty = false;\n let mesh, texture, key;\n for (mesh of meshes.values()) mesh._nativeUsed = false;\n for (texture of textures.values()) texture.used = false;\n if (source instanceof L.GridLayer) syncGridLayer(state);\n else if (source instanceof L.ImageOverlay) syncImageOverlay(state);\n else if (state.marker) syncMarker(state);\n else syncVectorLayer(state);\n for ([key, mesh] of meshes) {\n if (mesh._nativeUsed) continue;\n disposeMesh(state.backend, mesh);\n meshes.delete(key);\n texture = textures.get(key);\n if (texture) destroyTexture(state.backend, texture.texture);\n textures.delete(key);\n }\n for ([key, texture] of textures) {\n if (texture.used) continue;\n destroyTexture(state.backend, texture.texture);\n textures.delete(key);\n }\n}\n", "import { synchronizeNativeLayer } from './synchronizeNativeLayer.js';\r\n\r\nexport function beforeNativeRender(state) {\r\n try {\r\n synchronizeNativeLayer(state);\r\n } catch (error) {\r\n state.failed = true;\r\n state.source.fire('error', { error });\r\n }\r\n}\r\n", "import { nativeMethodHandlers } from '../constants/nativeMethodHandlers.js';\nimport { createMesh } from '../rendering/createMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { nativeGeometry } from '../geometry/nativeGeometry.js';\nimport { nativeEvents } from './nativeEvents.js';\nimport { removeNativeEvents } from './removeNativeEvents.js';\nimport { parseColor } from '../utils/parseColor.js';\nimport { update } from '../scene/update.js';\nimport { nativeLayerState } from '../constants/nativeLayerState.js';\nimport { current } from './current.js';\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\nimport { refreshNativeEvent } from './refreshNativeEvent.js';\nimport { reorderNativeLayer } from './reorderNativeLayer.js';\nimport { nativeSetLatLng } from './nativeSetLatLng.js';\nimport { nativeSetLatLngs } from './nativeSetLatLngs.js';\nimport { nativeAddLatLng } from './nativeAddLatLng.js';\nimport { nativeSetRadius } from './nativeSetRadius.js';\nimport { nativeSetStyle } from './nativeSetStyle.js';\nimport { nativeRedraw } from './nativeRedraw.js';\nimport { nativeSetIcon } from './nativeSetIcon.js';\nimport { nativeSetUrl } from './nativeSetUrl.js';\nimport { nativeSetBounds } from './nativeSetBounds.js';\nimport { nativeSetOpacity } from './nativeSetOpacity.js';\nimport { nativeSetZIndex } from './nativeSetZIndex.js';\nimport { nativeSetZIndexOffset } from './nativeSetZIndexOffset.js';\nimport { nativeBringToFront } from './nativeBringToFront.js';\nimport { nativeBringToBack } from './nativeBringToBack.js';\nimport { disposeNativeLayer } from './disposeNativeLayer.js';\nimport { resolveNativeReady } from './resolveNativeReady.js';\nimport { rejectNativeReady } from './rejectNativeReady.js';\nimport { forwardNativeError } from './forwardNativeError.js';\nimport { updateNativeLayerView } from './updateNativeLayerView.js';\nimport { synchronizeNativeLayer } from './synchronizeNativeLayer.js';\nimport { beforeNativeRender } from './beforeNativeRender.js';\n\nnativeLayerState.imageStates = new WeakMap();\nnativeLayerState.geometryPixelStates = [];\n\n/** Render from coordinates and detached raster sources; only accessible marker controls remain DOM. */\nexport async function nativeLayer(state) {\n const { source, map } = state;\n const backend = state.backend = new L.Layer({ source: { type: '3d' } });\n state.meshes = new Map();\n state.textures = new Map();\n state.methods = new Map();\n state.originalMethods = new Map();\n state.images = new Set();\n map._nativeGPUOrder ||= 0;\n map._nativeGPUBack ||= 0;\n state.dirty = true;\n state.viewDirty = true;\n state.failed = false;\n state.order = ++map._nativeGPUOrder;\n state.marker = source instanceof L.Marker;\n state.paneOrder = Number(getComputedStyle(source.getPane()).zIndex) || 0;\n state.refresh = refreshNativeLayer;\n state.reorder = reorderNativeLayer;\n state.dispose = disposeNativeLayer;\n const currentEvents = 'load tileload tileunload move drag';\n source.on(currentEvents, refreshNativeEvent, state);\n map.on('zoomend', refreshNativeEvent, state);\n if (state.marker) map.on('move zoom rotate pitch resize viewreset', updateNativeLayerView, state);\n nativeEvents(state);\n let name, own, original;\n for (name of ['setLatLng', 'setLatLngs', 'addLatLng', 'setRadius', 'setStyle', 'redraw',\n 'setIcon', 'setUrl', 'setBounds', 'setOpacity', 'setZIndex', 'setZIndexOffset', 'bringToFront', 'bringToBack']) {\n if (typeof source[name] !== 'function') continue;\n own = Object.getOwnPropertyDescriptor(source, name), original = source[name];\n state.methods.set(name, { own, original });\n state.originalMethods.set(name, original);\n source[name] = nativeMethodHandlers[name];\n }\n const ready = state.ready = Promise.withResolvers();\n backend.once('ready', resolveNativeReady, state);\n backend.once('error', rejectNativeReady, state);\n backend.on('error', forwardNativeError, state);\n refreshNativeLayer(state);\n backend.addTo(map);\n try {\n await ready.promise;\n } catch (error) {\n disposeNativeLayer.call(state);\n throw error;\n }\n if (!current(state)) return source;\n\n backend._beforeRender = beforeNativeRender.bind(null, state);\n try {\n synchronizeNativeLayer(state);\n } catch (error) {\n disposeNativeLayer.call(state);\n throw error;\n }\n update(state.backend);\n return source;\n}\n", "export function hideTargets(state) {\n const { source } = state;\n const htmlIcon = source instanceof L.Marker && source.options.icon instanceof L.DivIcon;\n const targets = [htmlIcon ? null : source._icon, htmlIcon ? null : source._shadow];\n let element;\n for (element of state.hidden) {\n if (targets.includes(element)) continue;\n element.classList.remove('leaflet-webgpu-target');\n state.hidden.delete(element);\n }\n for (element of targets) {\n if (!element || state.hidden.has(element)) continue;\n element.classList.add('leaflet-webgpu-target');\n state.hidden.add(element);\n }\n}\n", "export function removeTargets(state) {\n if (state.source._nativeGPU === state) state.source._nativeGPU = null;\n state.dispose?.();\n let element;\n for (element of state.hidden) {\n element.classList.remove('leaflet-webgpu-target');\n }\n}\n", "import { nativeLayer } from './nativeLayer.js';\n\nexport function readyNativeGPU(state) {\r\n if (state.source._nativeGPU !== state) return state.source;\r\n return nativeLayer(state);\r\n}\n", "export function reportError(source, error) {\r\n source.fire('error', { error });\r\n}\n", "import { nativeLayer } from './nativeLayer.js';\nimport { hideTargets } from './hideTargets.js';\nimport { removeTargets } from './removeTargets.js';\nimport { readyNativeGPU } from './readyNativeGPU.js';\nimport { reportError } from '../scene/reportError.js';\n\nexport function initNativeGPU(source, map) {\n if (source._nativeGPU) return;\n if (!document.getElementById('leaflet-webgpu-targets')) {\n const style = document.createElement('style');\n style.id = 'leaflet-webgpu-targets';\n style.textContent = '.leaflet-webgpu-target{opacity:0!important}';\n document.head.append(style);\n }\n const state = source._nativeGPU = { source, map, hidden: new Set() };\n state.hide = hideTargets.bind(null, state);\n state.hide();\n source.once('remove', removeTargets.bind(null, state));\n source.ready = Promise.resolve().then(readyNativeGPU.bind(null, state));\n source.ready.catch(reportError.bind(null, source));\n}\n", "export const mapCameraState = {};\n", "export function mapGetBearing() { return this._cameraBearing ?? 0; }\n", "export function mapGetPitch() { return this._cameraPitch ?? 0; }\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function cancelCameraAnimation(map) {\r\n mapCameraState.cameraAnimations.delete(map);\r\n map._cameraAnimation = null;\r\n map._cameraFrame = null;\r\n if (!mapCameraState.cameraAnimations.size && mapCameraState.cameraAnimationFrame !== null) {\r\n cancelAnimationFrame(mapCameraState.cameraAnimationFrame);\r\n mapCameraState.cameraAnimationFrame = null;\r\n }\r\n}\n", "import { cancelCameraAnimation } from './cancelCameraAnimation.js';\n\nexport function mapStopPitchBearingAnimation() {\n cancelCameraAnimation(this);\r\n return this;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function updateSky() {\r\n const height = this.getSize().y, pitch = this.getPitch() * mapCameraState.radians;\r\n const far = height * this.options.pitchMaxDistance, distance = height * 1.5;\r\n const top = height / 2 - far * Math.cos(pitch) * distance / (distance + Math.sin(pitch) * far);\r\n if (top > 0 && !this._pitchSky) {\r\n this._pitchSky = L.DomUtil.create('div', 'leaflet-pitch-sky', this.getContainer());\r\n this._pitchSky.setAttribute('aria-hidden', 'true');\r\n 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))';\r\n }\r\n if (this._pitchSky) {\r\n this._pitchSky.style.height = `${Math.max(0, Math.ceil(top))}px`;\r\n this._pitchSky.style.display = top > 0 ? '' : 'none';\r\n }\r\n}\n", "import { updateSky } from './updateSky.js';\n\nexport function mapSetPitchAndBearing(pitch, bearing) {\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw new TypeError('Camera angles must be finite numbers');\r\n const previousPitch = this.getPitch(), previousBearing = this.getBearing();\r\n this._cameraPitch = Math.max(0, Math.min(85, pitch));\r\n this._cameraBearing = ((bearing % 360) + 360) % 360;\r\n if (this._loaded) {\r\n updateSky.call(this);\r\n if (previousBearing !== this.getBearing()) this.fire('rotate', { bearing: this.getBearing() });\r\n if (previousPitch !== this.getPitch()) this.fire('pitch', { pitch: this.getPitch() });\r\n }\r\n return this;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { scheduleCameraAnimation } from './scheduleCameraAnimation.js';\n\nexport function runCameraAnimations(now) {\n mapCameraState.cameraAnimationFrame = null;\n const pending = [...mapCameraState.cameraAnimations];\n mapCameraState.cameraAnimations.clear();\n let failure;\n let map, animation, progress, eased;\n for ([map, animation] of pending) {\n map._cameraFrame = null;\n if (map._cameraAnimation !== animation) continue;\n progress = animation.duration\n ? Math.min(1, (now - animation.start) / (animation.duration * 1000)) : 1;\n eased = 1 - (1 - progress) ** 3;\n try {\n map._setPitchAndBearing(\n animation.fromPitch + (Math.max(0, Math.min(85, animation.pitch)) - animation.fromPitch) * eased,\n animation.fromBearing + animation.delta * eased,\n );\n if (progress < 1 && map._cameraAnimation === animation) scheduleCameraAnimation(map, animation);\n else if (map._cameraAnimation === animation) map._cameraAnimation = null;\n } catch (error) {\n failure ||= error;\n }\n }\n if (failure) throw failure;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { runCameraAnimations } from './runCameraAnimations.js';\n\nexport function scheduleCameraAnimation(map, animation) {\r\n mapCameraState.cameraAnimations.set(map, animation);\r\n if (mapCameraState.cameraAnimationFrame === null) mapCameraState.cameraAnimationFrame = requestAnimationFrame(runCameraAnimations);\r\n map._cameraFrame = mapCameraState.cameraAnimationFrame;\r\n}\n", "import { cancelCameraAnimation } from './cancelCameraAnimation.js';\nimport { scheduleCameraAnimation } from './scheduleCameraAnimation.js';\n\nexport function mapAnimateCamera(pitch, bearing, options = {}) {\n cancelCameraAnimation(this);\r\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw new TypeError('Camera angles must be finite numbers');\r\n if (!options.animate || matchMedia('(prefers-reduced-motion: reduce)').matches) {\r\n return this._setPitchAndBearing(pitch, bearing);\r\n }\r\n const duration = options.duration ?? 0.3;\r\n if (!Number.isFinite(duration) || duration < 0) throw new TypeError('Camera duration must be nonnegative');\r\n const start = performance.now(), fromPitch = this.getPitch(), fromBearing = this.getBearing();\r\n const delta = ((bearing - fromBearing) % 360 + 540) % 360 - 180;\r\n const animation = this._cameraAnimation = { duration, start, fromPitch, fromBearing, pitch, delta };\r\n scheduleCameraAnimation(this, animation);\r\n return this;\n}\n", "export function mapSetBearing(bearing, options) { return this._animateCamera(this.getPitch(), bearing, options); }\n", "export function mapSetPitch(pitch, options) { return this._animateCamera(pitch, this.getBearing(), options); }\n", "export function mapResetNorth(options = { animate: true }) { return this.setBearing(0, options); }\n", "export function mapResetNorthPitch(options = { animate: true }) { return this._animateCamera(0, 0, options); }\n", "export function pointOf(point) {\r\n return Array.isArray(point) ? new L.Point(point[0], point[1]) : new L.Point(point.x, point.y);\r\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function angles(map) {\r\n const bearing = map.getBearing() * mapCameraState.radians, pitch = map.getPitch() * mapCameraState.radians;\r\n return [Math.cos(bearing), Math.sin(bearing), Math.cos(pitch), Math.sin(pitch)];\r\n}\n", "import { pointOf } from './pointOf.js';\nimport { angles } from './angles.js';\n\nexport function project(map, point, inverse = false, limit = false) {\r\n const half = map.getSize().divideBy(2), distance = map.getSize().y * 1.5;\r\n if (!distance) return pointOf(point);\r\n const [cos, sin, tilt, rise] = angles(map);\r\n const p = pointOf(point).subtract(half);\r\n if (inverse) {\r\n const far = map.getSize().y * map.options.pitchMaxDistance;\r\n const denominator = tilt * distance + rise * p.y;\r\n let v = denominator > 0 ? p.y * distance / denominator : -far;\r\n if (limit) v = Math.max(-far, Math.min(far, v));\r\n const u = p.x * (distance - rise * v) / distance;\r\n return new L.Point(cos * u + sin * v, -sin * u + cos * v).add(half);\r\n }\r\n const u = cos * p.x - sin * p.y, v = sin * p.x + cos * p.y;\r\n const scale = distance / (distance - rise * v);\r\n return new L.Point(u * scale, tilt * v * scale).add(half);\r\n}\n", "export function animationPoint(map, point, inverse = false) {\r\n const view = map._cameraView;\r\n if (!view) return point;\r\n const half = map.getSize().divideBy(2), scale = map.getZoomScale(view.zoom);\r\n const shift = map.project(map.getCenter(), view.zoom).subtract(map.project(view.center, view.zoom));\r\n return inverse ? point.subtract(half).subtract(shift).divideBy(scale).add(half) :\r\n point.subtract(half).multiplyBy(scale).add(shift).add(half);\r\n}\n", "import { project } from './project.js';\nimport { animationPoint } from './animationPoint.js';\nimport { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapLayerPointToContainerPoint(point) {\n return project(this, animationPoint(this, mapCameraState.mapMethods.layerPointToContainerPoint.call(this, point)));\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { animationPoint } from './animationPoint.js';\nimport { project } from './project.js';\n\nexport function mapContainerPointToLayerPoint(point) {\n return mapCameraState.mapMethods.containerPointToLayerPoint.call(this, animationPoint(this, project(this, point, true), true));\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapGetCenterLayerPoint() {\n return mapCameraState.mapMethods.containerPointToLayerPoint.call(this, this.getSize().divideBy(2));\n}\n", "export function mapUpdateCameraOverlays() {\n let layer;\n for (layer of Object.values(this._layers)) {\n if (layer instanceof L.Marker) layer.update();\n else if (layer instanceof L.Popup || layer instanceof L.Tooltip) layer._updatePosition();\n }\n}\n", "import { project } from './project.js';\nimport { pointOf } from './pointOf.js';\nimport { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapPanBy(offset, options) {\n const half = this.getSize().divideBy(2);\r\n const ground = half.subtract(project(this, half.subtract(pointOf(offset)), true));\r\n return mapCameraState.mapMethods.panBy.call(this, ground, options);\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapSetZoomAround(latlng, zoom, options) {\n if (!this.getPitch() && !this.getBearing()) return mapCameraState.mapMethods.setZoomAround.call(this, latlng, zoom, options);\r\n zoom = this._limitZoom(zoom);\r\n const scale = this.getZoomScale(zoom), half = this.getSize().divideBy(2);\r\n const screen = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng);\r\n const center = this.containerPointToLayerPoint(half), anchor = this.containerPointToLayerPoint(screen);\r\n const next = center.add(anchor.subtract(center).multiplyBy(1 - 1 / scale));\r\n return this.setView(this.layerPointToLatLng(next), zoom, { zoom: options });\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { pointOf } from './pointOf.js';\n\nexport function mapPanInside(latlng, options = {}) {\n if (!this.getPitch() && !this.getBearing()) return mapCameraState.mapMethods.panInside.call(this, latlng, options);\r\n const min = pointOf(options.paddingTopLeft || options.padding || [0, 0]);\r\n const max = this.getSize().subtract(pointOf(options.paddingBottomRight || options.padding || [0, 0]));\r\n const screen = this.latLngToContainerPoint(latlng);\r\n const safe = new L.Point(Math.max(min.x, Math.min(max.x, screen.x)),\r\n Math.max(min.y, Math.min(max.y, screen.y)));\r\n if (safe.equals(screen)) return this;\r\n const delta = this.latLngToLayerPoint(latlng).subtract(this.containerPointToLayerPoint(safe));\r\n return this.panTo(this.unproject(this.project(this.getCenter()).add(delta)), options);\n}\n", "import { pointOf } from './pointOf.js';\nimport { project } from './project.js';\n\nexport function groundBounds(map, padding = [0, 0]) {\n const min = pointOf(padding).divideBy(2), max = map.getSize().subtract(min);\n const corners = [[min.x, min.y], [max.x, min.y], [min.x, max.y], [max.x, max.y]];\n const points = [];\n let point;\n for (point of corners) points.push(project(map, point, true, true));\n return new L.Bounds(points);\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { groundBounds } from './groundBounds.js';\n\nexport function mapLimitCenter(center, zoom, bounds) {\n if (!bounds || !this._loaded || !this.getPitch() && !this.getBearing()) {\r\n return mapCameraState.mapMethods._limitCenter.call(this, center, zoom, bounds);\r\n }\r\n const half = this.getSize().divideBy(2), footprint = groundBounds(this), point = this.project(center, zoom);\r\n const view = new L.Bounds(point.add(footprint.min.subtract(half)), point.add(footprint.max.subtract(half)));\r\n const offset = this._getBoundsOffset(view, bounds, zoom);\r\n return Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1 ? center : this.unproject(point.add(offset), zoom);\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { project } from './project.js';\n\nexport function mapLimitOffset(offset, bounds) {\n if (!bounds || !this.getPitch() && !this.getBearing()) return mapCameraState.mapMethods._limitOffset.call(this, offset, bounds);\r\n const half = this.getSize().divideBy(2), ground = half.subtract(project(this, half.subtract(offset), true));\r\n const center = this.project(this.getCenter());\r\n const limited = this.project(this._limitCenter(this.unproject(center.add(ground)), this.getZoom(), bounds));\r\n return half.subtract(project(this, half.subtract(limited.subtract(center))));\n}\n", "export function verticalGroundY(y, tilt, distance, rise, far) {\r\n return tilt * distance + rise * y > 0\r\n ? Math.max(-far, Math.min(far, y * distance / (tilt * distance + rise * y))) : -far;\r\n}\n", "import { pointOf } from './pointOf.js';\nimport { angles } from './angles.js';\nimport { verticalGroundY } from './verticalGroundY.js';\n\nexport function fitCameraBounds(map, bounds, options = {}) {\n bounds = bounds.getBounds ? bounds.getBounds() : bounds instanceof L.LatLngBounds ? bounds : new L.LatLngBounds(bounds);\n const zoom = map.getZoom() ?? 0, half = map.getSize().divideBy(2), distance = map.getSize().y * 1.5;\n const min = pointOf(options.paddingTopLeft || options.padding || [0, 0]).subtract(half);\n const max = half.subtract(pointOf(options.paddingBottomRight || options.padding || [0, 0]));\n const [cos, sin, tilt, rise] = angles(map);\n const far = map.getSize().y * map.options.pitchMaxDistance;\n const top = verticalGroundY(min.y, tilt, distance, rise, far);\n const bottom = verticalGroundY(max.y, tilt, distance, rise, far);\n const origin = map.project(bounds.getNorthWest(), zoom).add(map.project(bounds.getSouthEast(), zoom)).divideBy(2);\n const points = [];\n let latlng, p, point;\n for (latlng of [bounds.getNorthWest(), bounds.getNorthEast(), bounds.getSouthWest(), bounds.getSouthEast()]) {\n p = map.project(latlng, zoom).subtract(origin);\n points.push(new L.Point(cos * p.x - sin * p.y, sin * p.x + cos * p.y));\n }\n let low = Infinity, high = -Infinity;\n for (point of points) {\n low = Math.min(low, point.y);\n high = Math.max(high, point.y);\n }\n const leftSlope = min.x * rise / distance, rightSlope = max.x * rise / distance;\n const slope = rightSlope - leftSlope;\n let left = Infinity, right = -Infinity;\n for (point of points) {\n left = Math.min(left, point.x + leftSlope * point.y);\n right = Math.max(right, point.x + rightSlope * point.y);\n }\n // Perspective viewport edges are straight lines on the ground: fit all four corners, not their screen midpoint.\n const scale = Math.min((bottom - top) / (high - low),\n (max.x - min.x - slope * top) / (right - left - slope * low));\n let target = map.getScaleZoom(scale, zoom);\n const snap = map.options.zoomSnap;\n if (snap) target = Math.floor(Math.round(target / (snap / 100)) / 100) * snap;\n target = Math.max(map.getMinZoom(), Math.min(map.getMaxZoom(), options.maxZoom ?? Infinity, target));\n if (!Number.isFinite(target)) return { center: bounds.getCenter(), zoom: target };\n const actual = map.getZoomScale(target, zoom);\n const vMin = high * actual - bottom, vMax = low * actual - top;\n const v = Math.max(vMin, slope ? (actual * (right - left) - max.x + min.x) / slope : vMin);\n const centerY = (Math.min(vMax, v) + vMax) / 2;\n const centerX = (actual * (left + right) - min.x - max.x - (leftSlope + rightSlope) * centerY) / 2;\n const center = origin.add(new L.Point(cos * centerX + sin * centerY, -sin * centerX + cos * centerY).divideBy(actual));\n return { center: map.unproject(center, zoom), zoom: target };\n}\n", "import { fitCameraBounds } from './fitCameraBounds.js';\nimport { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapGetBoundsCenterZoom(bounds, options) {\n return this.getPitch() || this.getBearing() ? fitCameraBounds(this, bounds, options) :\r\n mapCameraState.mapMethods._getBoundsCenterZoom.call(this, bounds, options);\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { fitCameraBounds } from './fitCameraBounds.js';\nimport { pointOf } from './pointOf.js';\nimport { groundBounds } from './groundBounds.js';\n\nexport function mapGetBoundsZoom(bounds, inside, padding) {\n if (!this.getPitch() && !this.getBearing()) return mapCameraState.mapMethods.getBoundsZoom.call(this, bounds, inside, padding);\r\n if (!inside) return fitCameraBounds(this, bounds, { padding: pointOf(padding || [0, 0]).divideBy(2) }).zoom;\r\n bounds = bounds instanceof L.LatLngBounds ? bounds : new L.LatLngBounds(bounds);\r\n const footprint = groundBounds(this, padding).getSize(), size = this.project(bounds.getSouthEast()).subtract(this.project(bounds.getNorthWest()));\r\n const zoom = this.getScaleZoom(Math.max(footprint.x / size.x, footprint.y / size.y));\r\n const snap = this.options.zoomSnap;\r\n return Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), snap ? Math.ceil(zoom / snap) * snap : zoom));\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function mapTryAnimatedPan(center, options) {\n // Leaflet's geographic recentering already supplies ground pixels, not screen pixels.\r\n const offset = this._getCenterOffset(center)._trunc();\r\n if (options?.animate !== true && !this.getSize().contains(offset)) return false;\r\n mapCameraState.mapMethods.panBy.call(this, offset, options);\r\n return true;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { groundBounds } from './groundBounds.js';\nimport { animationPoint } from './animationPoint.js';\n\nexport function mapGetBounds() {\n if (!this.getPitch() && !this.getBearing()) return mapCameraState.mapMethods.getBounds.call(this);\n const footprint = groundBounds(this), bounds = new L.LatLngBounds();\n let point, raw;\n for (point of [footprint.min, footprint.max]) {\n raw = mapCameraState.mapMethods.containerPointToLayerPoint.call(this, animationPoint(this, point, true));\n bounds.extend(this.layerPointToLatLng(raw));\n }\n return bounds;\n}\n", "export function constrainCameraToBounds() {\r\n if (this.options.maxBounds) this._panInsideMaxBounds();\r\n}\n", "import { project } from '../camera/project.js';\n\nexport function adjustCameraDrag() {\r\n const map = this;\r\n const draggable = map._cameraDraggable;\r\n if (!map.getPitch() && !map.getBearing()) return;\r\n const half = map.getSize().divideBy(2), delta = draggable._newPos.subtract(draggable._startPos);\r\n const ground = half.subtract(project(map, half.subtract(delta), true));\r\n draggable._newPos = draggable._startPos.add(ground);\r\n}\n", "import { cancelCameraAnimation } from './cancelCameraAnimation.js';\nimport { adjustCameraDrag } from '../controls/adjustCameraDrag.js';\n\nexport function cleanupCameraMap() {\r\n cancelCameraAnimation(this);\r\n this._pitchSky?.remove();\r\n if (this._cameraDraggable) {\r\n this._cameraDraggable.off('predrag', adjustCameraDrag, this);\r\n delete this._cameraDraggable;\r\n }\r\n}\n", "import { adjustCameraDrag } from '../controls/adjustCameraDrag.js';\n\nexport function cameraMapReady() {\r\n const draggable = this.dragging?._draggable;\r\n if (!draggable) return;\r\n this._cameraDraggable = draggable;\r\n draggable.on('predrag', adjustCameraDrag, this);\r\n}\n", "export async function loadCameraControls(map) {\r\n try {\r\n const { cameraControls } = await import('./cameraControls.js');\r\n if (map._container?._leaflet_id) cameraControls(map);\r\n } catch (error) {\r\n map.fire('error', { error });\r\n throw error;\r\n }\r\n}\n", "export function noOperation() {}\n", "import { updateSky } from './updateSky.js';\nimport { constrainCameraToBounds } from './constrainCameraToBounds.js';\nimport { cleanupCameraMap } from './cleanupCameraMap.js';\nimport { cameraMapReady } from './cameraMapReady.js';\nimport { loadCameraControls } from '../controls/loadCameraControls.js';\nimport { noOperation } from '../utils/noOperation.js';\n\nexport function initializeCameraMap() {\n if (!document.getElementById('leaflet-camera-zoom-style')) {\n const style = document.createElement('style');\n style.id = 'leaflet-camera-zoom-style';\n style.textContent = '.leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,' +\n '.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}';\n document.head.append(style);\n }\n this._setPitchAndBearing(this.options.pitch, this.options.bearing);\n this.on('load resize pitch', updateSky);\n this.on('rotate pitch', constrainCameraToBounds, this);\n this.once('unload', cleanupCameraMap, this);\n this.whenReady(cameraMapReady, this);\n if (this.options.rotate || this.options.trackContainerMutation) {\n this.cameraReady = loadCameraControls(this);\n this.cameraReady.catch(noOperation);\n }\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { initNativeGPU } from './initNativeGPU.js';\n\nexport function markerSetIcon(icon) {\n if (!(icon instanceof L.DivIcon)) icon.options.crossOrigin ||= true;\r\n const result = mapCameraState.markerMethods.setIcon.call(this, icon);\r\n if (this._map && !(icon instanceof L.DivIcon)) initNativeGPU(this, this._map);\r\n return result;\n}\n", "export function markerSetRotation(rotation) {\n if (!Number.isFinite(rotation)) throw new TypeError('Marker rotation must be finite');\r\n this.options.rotation = rotation;\r\n this.update();\r\n this._nativeGPU?.refresh?.();\r\n return this;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function markerCameraIconPoint(x, y) {\n let rotation = this.options.rotation + (this.options.rotateWithView ? this._map.getBearing() * mapCameraState.radians : 0);\r\n if (this.options.keepUpright && Math.cos(rotation) < 0) rotation += Math.PI;\r\n const scale = this.options.scale;\r\n return new L.Point((x * Math.cos(rotation) - y * Math.sin(rotation)) * scale,\r\n (x * Math.sin(rotation) + y * Math.cos(rotation)) * scale);\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function markerGetEvents() {\n return { ...mapCameraState.markerMethods.getEvents.call(this), rotate: this.update, pitch: this.update, move: this.update };\n}\n", "export function displayPoint(map, point) {\r\n return map.layerPointToContainerPoint(point).subtract(map._getMapPanePos());\r\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function markerSetPos(point) {\n mapCameraState.markerMethods._setPos.call(this, displayPoint(this._map, point));\n let element, key, direction, options, anchor;\n for ([element, key] of [[this._icon, 'iconAnchor'], [this._shadow, 'shadowAnchor']]) {\n if (!element) continue;\n direction = this._cameraIconPoint(1, 0), options = this.options.icon.options;\n anchor = options[key] || options.iconAnchor;\n element.style.transformOrigin = anchor ? `${anchor.x ?? anchor[0]}px ${anchor.y ?? anchor[1]}px` : 'center';\n element.style.transform += ` rotate(${Math.atan2(direction.y, direction.x)}rad) scale(${this.options.scale})`;\n }\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function markerUpdateZIndex(offset) {\n mapCameraState.markerMethods._updateZIndex.call(this, offset);\r\n const changed = this._cameraZIndexOffset !== offset;\r\n this._cameraZIndexOffset = offset;\r\n if (changed) this._nativeGPU?.refresh?.();\n}\n", "export function cameraMarkerOnDrag(event) {\r\n const map = this._marker._map;\r\n const screen = L.DomUtil.getPosition(this._marker._icon).add(map._getMapPanePos());\r\n const point = map.containerPointToLayerPoint(screen);\r\n L.DomUtil.setPosition(this._marker._icon, point);\r\n this._cameraOriginalOnDrag.call(this, event);\r\n this._marker._setPos(point);\r\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function runMarkerPanFrame() {\n mapCameraState.markerPanFrame = null;\n const pending = [...mapCameraState.pendingMarkerPan];\n mapCameraState.pendingMarkerPan.clear();\n let drag, event;\n for ([drag, event] of pending) {\n drag._panRequest = null;\n drag._adjustPan(event);\n }\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { runMarkerPanFrame } from './runMarkerPanFrame.js';\n\nexport function scheduleMarkerPan(drag, event) {\r\n mapCameraState.pendingMarkerPan.set(drag, event);\r\n if (mapCameraState.markerPanFrame === null) mapCameraState.markerPanFrame = requestAnimationFrame(runMarkerPanFrame);\r\n drag._panRequest = mapCameraState.markerPanFrame;\r\n}\n", "import { pointOf } from '../camera/pointOf.js';\nimport { scheduleMarkerPan } from './scheduleMarkerPan.js';\n\nexport function adjustCameraMarkerPan(event) {\r\n const marker = this._marker, map = marker._map;\r\n if (!map.getPitch() && !map.getBearing()) return this._cameraOriginalAdjustPan.call(this, event);\r\n const screen = L.DomUtil.getPosition(marker._icon).add(map._getMapPanePos());\r\n const size = map.getSize(), padding = pointOf(marker.options.autoPanPadding);\r\n const speed = marker.options.autoPanSpeed;\r\n const movement = new L.Point(\r\n (Math.max(0, screen.x - size.x + padding.x) - Math.max(0, padding.x - screen.x)) / Math.max(1, padding.x) * speed,\r\n (Math.max(0, screen.y - size.y + padding.y) - Math.max(0, padding.y - screen.y)) / Math.max(1, padding.y) * speed);\r\n if (!movement.x && !movement.y) return;\r\n const pane = map._getMapPanePos();\r\n map.panBy(movement, { animate: false });\r\n const shift = pane.subtract(map._getMapPanePos());\r\n this._draggable._newPos._add(shift);\r\n this._draggable._startPos._add(shift);\r\n L.DomUtil.setPosition(marker._icon, this._draggable._newPos);\r\n this._onDrag(event);\r\n scheduleMarkerPan(this, event);\r\n}\n", "import { cameraMarkerOnDrag } from './cameraMarkerOnDrag.js';\nimport { adjustCameraMarkerPan } from './adjustCameraMarkerPan.js';\n\nexport function cameraMarkerDrag() {\n if (!this.dragging || this.dragging._cameraDrag) return;\r\n const drag = this.dragging, original = drag._onDrag, adjustPan = drag._adjustPan;\r\n drag._cameraOriginalOnDrag = original;\r\n drag._cameraOriginalAdjustPan = adjustPan;\r\n drag._onDrag = cameraMarkerOnDrag;\r\n drag._adjustPan = adjustCameraMarkerPan;\r\n // The handler may already be enabled and listening with its original method.\r\n const enabled = drag.enabled();\r\n if (enabled) {\r\n drag._draggable.off('drag', original, drag);\r\n drag._draggable.on('drag', drag._onDrag, drag);\r\n }\r\n drag._cameraDrag = true;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { cameraMarkerDrag } from './cameraMarkerDrag.js';\n\nexport function markerInitInteraction() {\n const result = mapCameraState.markerMethods._initInteraction.call(this);\r\n cameraMarkerDrag.call(this);\r\n return result;\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function popupGetEvents() {\n return { ...mapCameraState.popupEvents.call(this), rotate: this._updatePosition, pitch: this._updatePosition, move: this._updatePosition };\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function tooltipGetEvents() {\n return { ...mapCameraState.tooltipEvents.call(this), rotate: this._updatePosition, pitch: this._updatePosition, move: this._updatePosition };\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { pointOf } from '../camera/pointOf.js';\n\nexport function popupAdjustPan() {\n const map = this._map;\r\n if (!map.getPitch() && !map.getBearing()) return mapCameraState.popupPan.call(this);\r\n if (!this.options.autoPan) return;\r\n if (map._panAnim) map._panAnim.stop();\r\n if (this._autopanning) { this._autopanning = false; return; }\r\n const rect = this._container.getBoundingClientRect(), container = map.getContainer().getBoundingClientRect();\r\n const min = pointOf(this.options.autoPanPaddingTopLeft || this.options.autoPanPadding);\r\n const max = map.getSize().subtract(pointOf(this.options.autoPanPaddingBottomRight || this.options.autoPanPadding));\r\n const left = rect.left - container.left, top = rect.top - container.top;\r\n const right = rect.right - container.left, bottom = rect.bottom - container.top;\r\n const dx = Math.min(0, left - min.x) || Math.max(0, right - max.x);\r\n const dy = Math.min(0, top - min.y) || Math.max(0, bottom - max.y);\r\n if (!dx && !dy) return;\r\n if (this.options.keepInView) this._autopanning = true;\r\n const screen = map.latLngToContainerPoint(this._latlng).subtract(new L.Point(dx, dy));\r\n const delta = map.latLngToLayerPoint(this._latlng).subtract(map.containerPointToLayerPoint(screen));\r\n map.fire('autopanstart');\r\n map.panTo(map.unproject(map.project(map.getCenter()).add(delta)));\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function popupUpdatePosition() {\n mapCameraState.popupPosition.call(this);\r\n if (!this._map) return;\r\n const point = this._map.latLngToLayerPoint(this._latlng), delta = displayPoint(this._map, point).subtract(point);\r\n if (this._zoomAnimated) {\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\r\n } else {\r\n this._container.style.left = `${this._containerLeft + delta.x}px`;\r\n this._container.style.bottom = `${this._containerBottom - delta.y}px`;\r\n }\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function tooltipSetPosition(point) {\n mapCameraState.tooltipPosition.call(this, point);\r\n const delta = displayPoint(this._map, point).subtract(point);\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function gridlayerGetEvents() {\n const events = mapCameraState.gridEvents.call(this);\r\n this._cameraGridUpdate ||= L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\r\n return { ...events, rotate: this._cameraGridUpdate, pitch: this._cameraGridUpdate };\n}\n", "import { mapCameraState } from '../constants/mapCameraState.js';\n\nexport function gridlayerGetTiledPixelBounds(center) {\n if (!this._map.getBearing() && !this._map.getPitch()) return mapCameraState.tiledBounds.call(this, center);\r\n const bounds = this._map.getBounds();\r\n return new L.Bounds(this._map.project(bounds.getNorthWest(), this._tileZoom),\r\n this._map.project(bounds.getSouthEast(), this._tileZoom));\n}\n", "import { initNativeGPU } from '../core/initNativeGPU.js';\nimport { mapCameraState } from '../constants/mapCameraState.js';\nimport { mapGetBearing } from './mapGetBearing.js';\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapStopPitchBearingAnimation } from './mapStopPitchBearingAnimation.js';\nimport { mapSetPitchAndBearing } from './mapSetPitchAndBearing.js';\nimport { mapAnimateCamera } from './mapAnimateCamera.js';\nimport { mapSetBearing } from './mapSetBearing.js';\nimport { mapSetPitch } from './mapSetPitch.js';\nimport { mapResetNorth } from './mapResetNorth.js';\nimport { mapResetNorthPitch } from './mapResetNorthPitch.js';\nimport { mapLayerPointToContainerPoint } from './mapLayerPointToContainerPoint.js';\nimport { mapContainerPointToLayerPoint } from './mapContainerPointToLayerPoint.js';\nimport { mapGetCenterLayerPoint } from './mapGetCenterLayerPoint.js';\nimport { mapUpdateCameraOverlays } from './mapUpdateCameraOverlays.js';\nimport { mapPanBy } from './mapPanBy.js';\nimport { mapSetZoomAround } from './mapSetZoomAround.js';\nimport { mapPanInside } from './mapPanInside.js';\nimport { mapLimitCenter } from './mapLimitCenter.js';\nimport { mapLimitOffset } from './mapLimitOffset.js';\nimport { mapGetBoundsCenterZoom } from './mapGetBoundsCenterZoom.js';\nimport { mapGetBoundsZoom } from './mapGetBoundsZoom.js';\nimport { mapTryAnimatedPan } from './mapTryAnimatedPan.js';\nimport { mapGetBounds } from './mapGetBounds.js';\nimport { initializeCameraMap } from './initializeCameraMap.js';\nimport { markerSetIcon } from '../core/markerSetIcon.js';\nimport { markerSetRotation } from '../core/markerSetRotation.js';\nimport { markerCameraIconPoint } from '../core/markerCameraIconPoint.js';\nimport { markerGetEvents } from '../core/markerGetEvents.js';\nimport { markerSetPos } from '../core/markerSetPos.js';\nimport { markerUpdateZIndex } from '../core/markerUpdateZIndex.js';\nimport { markerInitInteraction } from '../core/markerInitInteraction.js';\nimport { popupGetEvents } from '../core/popupGetEvents.js';\nimport { tooltipGetEvents } from '../core/tooltipGetEvents.js';\nimport { popupAdjustPan } from '../core/popupAdjustPan.js';\nimport { popupUpdatePosition } from '../core/popupUpdatePosition.js';\nimport { tooltipSetPosition } from '../core/tooltipSetPosition.js';\nimport { gridlayerGetEvents } from '../core/gridlayerGetEvents.js';\nimport { gridlayerGetTiledPixelBounds } from '../core/gridlayerGetTiledPixelBounds.js';\n\nmapCameraState.mapMethods = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Map.prototype));\nmapCameraState.radians = Math.PI / 180;\n\nmapCameraState.cameraAnimations = new Map();\nmapCameraState.cameraAnimationFrame = null;\n\nL.Map.mergeOptions({\n rotate: true, bearing: 0, pitch: 0, pitchMaxDistance: 3,\n rotateControl: true, shiftKeyRotate: true, pitchDrag: true,\n touchRotate: false, touchPitch: false, compassBearing: false,\n});\n\n// Ground coordinates only: the GPU camera handles elevated geometry, never CSS transforms.\n\nL.Map.include({\n getBearing: mapGetBearing,\n getPitch: mapGetPitch,\n _stopPitchBearingAnimation: mapStopPitchBearingAnimation,\n _setPitchAndBearing: mapSetPitchAndBearing,\n _animateCamera: mapAnimateCamera,\n setBearing: mapSetBearing,\n setPitch: mapSetPitch,\n resetNorth: mapResetNorth,\n resetNorthPitch: mapResetNorthPitch,\n layerPointToContainerPoint: mapLayerPointToContainerPoint,\n containerPointToLayerPoint: mapContainerPointToLayerPoint,\n _getCenterLayerPoint: mapGetCenterLayerPoint,\n _updateCameraOverlays: mapUpdateCameraOverlays,\n panBy: mapPanBy,\n setZoomAround: mapSetZoomAround,\n panInside: mapPanInside,\n _limitCenter: mapLimitCenter,\n _limitOffset: mapLimitOffset,\n _getBoundsCenterZoom: mapGetBoundsCenterZoom,\n getBoundsZoom: mapGetBoundsZoom,\n _tryAnimatedPan: mapTryAnimatedPan,\n getBounds: mapGetBounds,\n});\n\nL.Map.addInitHook(initializeCameraMap);\n\nmapCameraState.markerMethods = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Marker.prototype));\nL.Marker.mergeOptions({ rotation: 0, rotateWithView: false, keepUpright: false, scale: 1 });\nL.Marker.include({\n setIcon: markerSetIcon,\n setRotation: markerSetRotation,\n _cameraIconPoint: markerCameraIconPoint,\n getEvents: markerGetEvents,\n _setPos: markerSetPos,\n _updateZIndex: markerUpdateZIndex,\n _initInteraction: markerInitInteraction,\n});\n\n// Keep Leaflet's focusable marker and its drag events; only translate its screen position back to ground.\n\nmapCameraState.pendingMarkerPan = new Map();\nmapCameraState.markerPanFrame = null;\n\nmapCameraState.popupEvents = L.Popup.prototype.getEvents;\nL.Popup.include({\n getEvents: popupGetEvents,\n});\nmapCameraState.tooltipEvents = L.Tooltip.prototype.getEvents;\nL.Tooltip.include({\n getEvents: tooltipGetEvents,\n});\nmapCameraState.popupPosition = L.Popup.prototype._updatePosition;\nmapCameraState.popupPan = L.Popup.prototype._adjustPan;\nL.Popup.include({\n _adjustPan: popupAdjustPan,\n _updatePosition: popupUpdatePosition,\n});\nmapCameraState.tooltipPosition = L.Tooltip.prototype._setPosition;\nL.Tooltip.include({\n _setPosition: tooltipSetPosition,\n});\n\nmapCameraState.tiledBounds = L.GridLayer.prototype._getTiledPixelBounds;\nmapCameraState.gridEvents = L.GridLayer.prototype.getEvents;\nL.GridLayer.include({\n getEvents: gridlayerGetEvents,\n _getTiledPixelBounds: gridlayerGetTiledPixelBounds,\n});\n", "import { update } from './update.js';\n\n/** Stop using the outgoing level after zoomend; the next redraw uses current tiles. */\n\nexport function endZoom() {\n const backend = this;\n let animation;\n for (animation of backend._zoomTransitions?.keys() || []) animation.finish();\n backend._zoomTransitions = null;\n backend._zoomView = null;\n delete backend._map._cameraView;\n backend._map.getContainer().classList.remove('leaflet-camera-zoom');\n backend._map._updateCameraOverlays();\n backend._zoomLevel = null;\n update(backend);\n}\n", "export const onMapChangeState = {};\n", "import { onMapChangeState } from '../constants/onMapChangeState.js';\nimport { update } from './update.js';\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingMapChange() {\n const layer = onMapChangeState.pendingMapChanges.shift();\n layer._queued = false;\n if (layer._shared !== layer || !layer.renderer) return;\n if (layer._map._animatingZoom) update(layer);\n else render(layer);\n}\n", "import { update } from './update.js';\nimport { render } from \"../rendering/render.js\";\nimport { onMapChangeState } from '../constants/onMapChangeState.js';\nimport { renderPendingMapChange } from './renderPendingMapChange.js';\n\n/** Map movement: render within the frame of Leaflet's CSS transforms, coalescing same-tick events. */\n\nonMapChangeState.pendingMapChanges = [];\n\nexport function onMapChange() {\n const layer = this;\n if (layer._queued) return;\n layer._queued = true;\n onMapChangeState.pendingMapChanges.push(layer);\n queueMicrotask(renderPendingMapChange);\n}\n", "export const onZoomAnimState = {};\n", "import { onZoomAnimState } from '../constants/onZoomAnimState.js';\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingZoomAnimation() {\n const layer = onZoomAnimState.pendingZoomAnimations.shift();\n if (layer._shared === layer && layer.renderer) render(layer);\n}\n", "import { render } from \"../rendering/render.js\";\nimport { onZoomAnimState } from '../constants/onZoomAnimState.js';\nimport { renderPendingZoomAnimation } from './renderPendingZoomAnimation.js';\n\nonZoomAnimState.pendingZoomAnimations = [];\n\nexport function onZoomAnim(event) {\n const map = this._map;\n if (event && !this._zoomView) {\n this._zoomView = { from: map.getCenter(), zoom: map.getZoom(), to: event.center,\n targetZoom: event.zoom, start: performance.now() };\n map.getContainer().classList.add('leaflet-camera-zoom');\n }\n onZoomAnimState.pendingZoomAnimations.push(this);\n queueMicrotask(renderPendingZoomAnimation);\n}\n", "/** Preserve the outgoing tile level before Leaflet changes its logical zoom. */\n\nexport function startZoom() {\n this._zoomLevel = null;\n}\n", "export function ring(point, radius) {\n const points = [];\n let i;\n for (i = 0; i < 6; i++) {\n points.push({\n x: point.x + Math.cos(i * Math.PI / 3) * radius,\n y: point.y + Math.sin(i * Math.PI / 3) * radius, ground: point.ground, uv: [3, 3],\n });\n }\n return points;\n}\n", "import { parseColor } from \"../utils/parseColor.js\";\nimport { ring } from './lampRing.js';\n\n/** Schematic support and lamp head; wall-mounted fixtures do not get an invented pole. */\n\nexport function lampPostGeometry(point, style, addTriangle) {\n const color = parseColor(0x50565a), radius = style.poleRadius;\n if (!Number.isFinite(radius) || radius <= 0) {\n throw new Error('Invalid lamp pole radius');\n }\n const center = { ...point, uv: [3, 3] };\n let r, low, high, points, i, a, b, angle, nx, nz;\n for ([r, low, high] of [[radius, 0, style.top], [radius * 2.5, style.top - 0.25, style.top + 0.15]]) {\n points = ring(point, r);\n for (i = 0; i < 6; i++) {\n a = points[i], b = points[(i + 1) % 6], angle = (i + 0.5) * Math.PI / 3;\n nx = Math.cos(angle), nz = -Math.sin(angle);\n addTriangle(a, low, b, low, b, high, nx, 0, nz, color);\n addTriangle(a, low, b, high, a, high, nx, 0, nz, color);\n addTriangle(center, high, a, high, b, high, 0, 1, 0, color);\n addTriangle(center, low, b, low, a, low, 0, -1, 0, color);\n }\n }\n}\n", "export function quad(addTriangle, color, a, b, c, d, height, normal) {\r\n addTriangle(a, height, b, height, c, height, ...normal, color);\r\n addTriangle(a, height, c, height, d, height, ...normal, color);\r\n}\r\n", "export function emitter(point, u, v, axis) {\r\n const r = 0.65;\r\n return {\r\n x: point.x + (axis === 2 ? 0 : u * r),\r\n y: point.y + (axis === 1 ? 0 : axis === 2 ? u * r : v * r),\r\n ground: point.ground + (axis === 0 ? 0 : v * r), uv: [u, v],\r\n };\r\n}\r\n", "import { parseColor } from \"../utils/parseColor.js\";\nimport { quad } from './quad.js';\nimport { emitter } from './emitter.js';\n\n/** Three crossed emitter discs; illumination itself is evaluated on receiving surfaces. */\n\nexport function lightGeometry(point, style, addTriangle) {\n if (!Number.isFinite(style.lightRadius) || style.lightRadius <= 0) throw new Error('Invalid light radius');\n const color = parseColor(style.color);\n let axis;\n for (axis = 0; axis < 3; axis++) {\n quad(addTriangle, color, emitter(point, -1, -1, axis), emitter(point, 1, -1, axis), emitter(point, 1, 1, axis), emitter(point, -1, 1, axis),\n style.top, axis === 0 ? [0, 1, 0] : axis === 1 ? [0, 0, 1] : [1, 0, 0]);\n }\n}\n", "export const roundProfile = [[0, 0], [0.35, 0.8], [0.6, 1], [0.85, 0.7], [1, 0]];\n", "export const ringDirections = [\r\n { x: Math.cos(0 * Math.PI / 4), y: Math.sin(0 * Math.PI / 4), nx: Math.cos((0 + 0.5) * Math.PI / 4), nz: -Math.sin((0 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(1 * Math.PI / 4), y: Math.sin(1 * Math.PI / 4), nx: Math.cos((1 + 0.5) * Math.PI / 4), nz: -Math.sin((1 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(2 * Math.PI / 4), y: Math.sin(2 * Math.PI / 4), nx: Math.cos((2 + 0.5) * Math.PI / 4), nz: -Math.sin((2 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(3 * Math.PI / 4), y: Math.sin(3 * Math.PI / 4), nx: Math.cos((3 + 0.5) * Math.PI / 4), nz: -Math.sin((3 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(4 * Math.PI / 4), y: Math.sin(4 * Math.PI / 4), nx: Math.cos((4 + 0.5) * Math.PI / 4), nz: -Math.sin((4 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(5 * Math.PI / 4), y: Math.sin(5 * Math.PI / 4), nx: Math.cos((5 + 0.5) * Math.PI / 4), nz: -Math.sin((5 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(6 * Math.PI / 4), y: Math.sin(6 * Math.PI / 4), nx: Math.cos((6 + 0.5) * Math.PI / 4), nz: -Math.sin((6 + 0.5) * Math.PI / 4) },\r\n { x: Math.cos(7 * Math.PI / 4), y: Math.sin(7 * Math.PI / 4), nx: Math.cos((7 + 0.5) * Math.PI / 4), nz: -Math.sin((7 + 0.5) * Math.PI / 4) },\r\n];\r\n", "import { ringDirections } from '../constants/ringDirections.js';\n\nexport function ring(point, radius) {\n const result = [];\n let direction;\n for (direction of ringDirections) {\n result.push({\n x: point.x + direction.x * radius,\n y: point.y + direction.y * radius,\n ground: point.ground,\n });\n }\n return result;\n}\n", "import { ring } from './treeRing.js';\nimport { ringDirections } from '../constants/ringDirections.js';\n\nexport function surface(point, addTriangle, lowRadius, low, highRadius, high, color) {\n const lower = ring(point, lowRadius), upper = ring(point, highRadius);\n let i, next, slope, length, nx, nz, ny, normalX, normalZ;\n for (i = 0; i < 8; i++) {\n next = (i + 1) % 8;\n slope = (lowRadius - highRadius) / (high - low);\n length = Math.hypot(1, slope);\n ({ nx, nz } = ringDirections[i]);\n ny = slope / length;\n normalX = nx / length, normalZ = nz / length;\n if (lowRadius) addTriangle(lower[i], low, lower[next], low, upper[next], high, normalX, ny, normalZ, color);\n if (highRadius) addTriangle(lower[i], low, upper[next], high, upper[i], high, normalX, ny, normalZ, color);\n }\n}\n", "import { roundProfile } from '../constants/roundProfile.js';\nimport { parseColor } from \"../utils/parseColor.js\";\nimport { ring } from './treeRing.js';\nimport { surface } from './surface.js';\n\n/** Low-poly tree, sharing the source block's buffers, picking and terrain offset. */\n\nexport function treeGeometry(point, style, addTriangle) {\n const { top, bottom = 0, trunkRadius, crownRadius, crownBottom, crownShape = 'round' } = style;\n if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||\n trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||\n !['round', 'cone'].includes(crownShape)) {\n throw new Error('Invalid tree dimensions or crown shape');\n }\n const trunk = parseColor(style.trunkColor ?? 0x72513a);\n const crown = parseColor(style.color ?? 0x4f823b);\n surface(point, addTriangle, trunkRadius, bottom, trunkRadius, crownBottom + (top - crownBottom) * 0.25, trunk);\n let i, low, lr, high, hr;\n if (crownShape === 'cone') {\n const base = ring(point, crownRadius);\n for (i = 0; i < 8; i++) addTriangle(point, crownBottom, base[i], crownBottom,\n base[(i + 1) % 8], crownBottom, 0, -1, 0, crown);\n surface(point, addTriangle, crownRadius, crownBottom, 0, top, crown);\n } else {\n for (i = 1; i < roundProfile.length; i++) {\n [low, lr] = roundProfile[i - 1], [high, hr] = roundProfile[i];\n surface(point, addTriangle, lr * crownRadius, crownBottom + low * (top - crownBottom),\n hr * crownRadius, crownBottom + high * (top - crownBottom), crown);\n }\n }\n}\n", "/** Emit a snapshot for consumers; ready does not wait for all neighborhood tasks. */\nexport function updateStatus(backend, enabled = true) {\n const progress = { enabled, loaded: 0, skipped: 0, pending: 0, errors: [] };\n let area;\n for (area of backend._areas.values()) {\n if (area.error) progress.errors.push(area.error);\n else if (!area.done) progress.pending++;\n progress.loaded += area.buildings ?? 0;\n progress.skipped += area.skipped ?? 0;\n }\n backend.fire('progress', progress);\n}\n", "\n\nexport function varint(reader) {\n const { bytes } = reader;\n let value = 0;\n let factor, byte;\n for (factor = 1; factor <= 2 ** 49; factor *= 128) {\n if (reader.cursor >= bytes.length) throw new Error('Truncated PMTiles directory');\n byte = bytes[reader.cursor++];\n value += (byte & 127) * factor;\n if (!Number.isSafeInteger(value)) throw new Error('Invalid PMTiles directory integer');\n if (byte < 128) return value;\n }\n throw new Error('Invalid PMTiles directory integer');\n}\n", "import { varint } from './varint.js';\n/** Decode delta/varint directory columns, rejecting malformed entries. */\n\nexport function decodeDirectory(data) {\n const bytes = new Uint8Array(data);\n const reader = { bytes, cursor: 0 };\n const count = varint(reader);\n if (count > (bytes.length - reader.cursor) / 4) throw new Error('Invalid PMTiles directory count');\n const entries = [];\n let tileId = 0;\n let i, entry, value;\n for (i = 0; i < count; i++) {\n tileId += varint(reader);\n if (!Number.isSafeInteger(tileId) || (i && tileId <= entries[i - 1].tileId)) {\n throw new Error('Invalid PMTiles directory tile IDs');\n }\n entries.push({ tileId });\n }\n for (entry of entries) entry.runLength = varint(reader);\n for (entry of entries) {\n entry.length = varint(reader);\n if (!entry.length) throw new Error('Invalid PMTiles directory length');\n }\n for (i = 0; i < entries.length; i++) {\n entry = entries[i];\n value = varint(reader);\n if (!value && !i) throw new Error('Invalid PMTiles directory offset');\n entry.offset = value ? value - 1 : entries[i - 1].offset + entries[i - 1].length;\n }\n if (reader.cursor !== bytes.length) throw new Error('Trailing PMTiles directory data');\n return entries;\n}\n", "export async function decompress(data, compression) {\n if (compression === 1) return data;\n if (compression !== 2) throw new Error(`Unsupported PMTiles compression: ${compression}`);\n return new Response(new Blob([data]).stream().pipeThrough(new DecompressionStream('gzip'))).arrayBuffer();\n}\n", "export async function read(backend, offset, length, signal) {\r\n signal?.throwIfAborted();\r\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) ||\r\n offset < 0 || length <= 0 || !Number.isSafeInteger(offset + length)) {\r\n throw new Error('Invalid PMTiles byte range');\r\n }\r\n const response = await fetch(backend.url, {\r\n headers: { Range: `bytes=${offset}-${offset + length - 1}` }, signal,\r\n });\r\n if (!response.ok) {\r\n throw new Error(`Unable to read PMTiles: HTTP ${response.status}`);\r\n }\r\n const etag = response.headers.get('ETag');\r\n if (backend._etag && etag !== backend._etag) {\r\n throw new Error('PMTiles archive changed; recreate the layer');\r\n }\r\n if (etag) backend._etag = etag;\r\n let data = await response.arrayBuffer();\r\n if (response.status === 200) {\r\n data = data.slice(offset, offset + length);\r\n } else if (response.status !== 206 ||\r\n !response.headers.get('Content-Range')?.startsWith(`bytes ${offset}-${offset + length - 1}/`)) {\r\n throw new Error('Invalid PMTiles range response');\r\n }\r\n if (data.byteLength !== length) {\r\n throw new Error('Truncated PMTiles range');\r\n }\r\n return data;\r\n}\r\n", "import { decodeDirectory } from \"./decodeDirectory.js\";\nimport { decompress } from \"./decompress.js\";\nimport { read } from \"./read.js\";\n\nexport async function loadDirectory(backend, offset, length, compression) {\n return decodeDirectory(await decompress(await read(backend, offset, length), compression));\n}\n", "/** Cumulative Hilbert ID for an archive tile. */\n\nexport function tileId(z, x, y) {\n if (!Number.isInteger(z) || !Number.isInteger(x) || !Number.isInteger(y) || z < 0 || z > 26 ||\n x < 0 || y < 0 || x >= 2 ** z || y >= 2 ** z) throw new Error('Invalid PMTiles tile coordinates');\n let id = (4 ** z - 1) / 3;\n const n = 2 ** z;\n // Same cumulative Hilbert ordering used by build/pmtiles.js.\n let s, rx, ry;\n for (s = n / 2; s >= 1; s /= 2) {\n rx = (x & s) ? 1 : 0, ry = (y & s) ? 1 : 0;\n id += s * s * ((3 * rx) ^ ry);\n if (!ry) {\n if (rx) { x = n - 1 - x; y = n - 1 - y; }\n [x, y] = [y, x];\n }\n }\n return id;\n}\n", "/** Decode the PMTiles v3 header. */\n\nexport function decodeHeader(data) {\n if (data.byteLength < 127 || new TextDecoder().decode(new Uint8Array(data, 0, 7)) !== 'PMTiles' ||\n new Uint8Array(data)[7] !== 3) throw new Error('Expected a PMTiles v3 archive');\n const view = new DataView(data);\n const header = {};\n const offsets = ['rootDirectoryOffset', 'rootDirectoryLength', 'jsonMetadataOffset', 'jsonMetadataLength', 'leafDirectoryOffset', 'leafDirectoryLength', 'tileDataOffset', 'tileDataLength', 'numAddressedTiles', 'numTileEntries', 'numTileContents'];\n const flags = ['clustered', 'internalCompression', 'tileCompression', 'tileType', 'minZoom', 'maxZoom'];\n const bounds = ['minLon', 'minLat', 'maxLon', 'maxLat'];\n let i;\n for (i = 0; i < offsets.length; i++) header[offsets[i]] = Number(view.getBigUint64(8 + i * 8, true));\n for (i = 0; i < flags.length; i++) header[flags[i]] = view.getUint8(96 + i);\n for (i = 0; i < bounds.length; i++) header[bounds[i]] = view.getInt32(102 + i * 4, true) / 1e7;\n header.centerZoom = view.getUint8(118);\n header.centerLon = view.getInt32(119, true) / 1e7;\n header.centerLat = view.getInt32(123, true) / 1e7;\n return header;\n}\n", "import { decodeHeader } from './decodeHeader.js';\nimport { read } from './read.js';\n\n/** Cache header initialization; failures remain visible to all callers. */\n\nexport function getHeader(backend) {\n if (backend.options.archive && backend.options.archive !== backend) return backend.options.archive.getHeader();\n return backend._header ||= read(backend, 0, 127).then(decodeHeader);\n}\n", "import { loadDirectory } from './loadDirectory.js';\nimport { decompress } from './decompress.js';\nimport { tileId } from './tileId.js';\nimport { read } from './read.js';\nimport { getHeader } from './getHeader.js';\n\n/** Nearest directory entry at/before the Hilbert ID, then follow leaf pointers. */\n\nexport async function getZxy(backend, z, x, y, signal) {\n if (backend.options.archive && backend.options.archive !== backend && backend.options.archive.getZxy) {\n return backend.options.archive.getZxy(z, x, y, signal);\n }\n const id = tileId(z, x, y);\n signal?.throwIfAborted();\n const header = await getHeader(backend);\n signal?.throwIfAborted();\n if (z < header.minZoom || z > header.maxZoom) {\n return;\n }\n let offset = header.rootDirectoryOffset, length = header.rootDirectoryLength;\n const visited = new Set();\n let depth, key, pending, entries, low, high, mid, entry, data;\n for (depth = 0; depth < 4; depth++) {\n if (visited.has(offset)) {\n throw new Error('Cyclic PMTiles directory');\n }\n visited.add(offset);\n key = `${offset}:${length}`;\n if (!backend._directories.has(key)) {\n if (backend._directories.size >= 32) {\n backend._directories.delete(backend._directories.keys().next().value);\n }\n backend._directories.set(key, loadDirectory(backend, offset, length, header.internalCompression));\n }\n pending = backend._directories.get(key);\n entries = void 0;\n try {\n entries = await pending;\n } catch (error) {\n if (backend._directories.get(key) === pending) backend._directories.delete(key);\n throw error;\n }\n signal?.throwIfAborted();\n low = 0, high = entries.length - 1;\n while (low <= high) {\n mid = (low + high) >> 1;\n if (entries[mid].tileId <= id) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n entry = entries[high];\n if (!entry) {\n return;\n }\n if (entry.runLength) {\n if (id - entry.tileId >= entry.runLength) {\n return;\n }\n if (entry.offset + entry.length > header.tileDataLength) {\n throw new Error('PMTiles tile outside data section');\n }\n data = await decompress(await read(backend, header.tileDataOffset + entry.offset, entry.length, signal), header.tileCompression);\n signal?.throwIfAborted();\n return { data };\n }\n if (entry.offset + entry.length > header.leafDirectoryLength) {\n throw new Error('PMTiles directory outside leaf section');\n }\n offset = header.leafDirectoryOffset + entry.offset;\n length = entry.length;\n }\n throw new Error('PMTiles directory depth exceeds four levels');\n}\n", "import { getZxy } from './getZxy.js';\n\nexport async function loadSource(backend, area) {\n if (backend._geojson) {\n const { data, url } = backend.options;\n if (data !== undefined && url) throw new Error('GeoJSON source requires either data or url');\n if (data !== undefined) return data;\n if (!url) throw new Error('GeoJSON source requires either data or url');\n const response = await fetch(new URL(url, document.baseURI), { signal: area.request.signal });\n if (!response.ok) throw new Error(`Unable to load GeoJSON: HTTP ${response.status}`);\n return response.json();\n }\n const result = await getZxy(backend, area.coords.z, area.coords.x, area.coords.y, area.request.signal);\n return result\n ? JSON.parse(new TextDecoder().decode(result.data))\n : { type: 'FeatureCollection', features: [] };\n}\n", "export const pumpState = {};\n", "export function compareDistance(a, b) {\r\n return a.distance - b.distance;\r\n}\r\n", "import { getElevation } from '../terrain/getElevation.js';\n\nexport function projectedTree(context, lon, lat) {\r\n const { backend, crs, origin, metres, map } = context;\r\n const point = crs.project(new L.LatLng(lat, lon));\r\n const elevation = map._terrain3D ? getElevation(map._terrain3D, [lat, lon]) : undefined;\r\n return {\r\n x: (point.x - origin.x) * metres,\r\n y: (point.y - origin.y) * metres,\r\n ground: Number.isFinite(elevation) && Number.isFinite(backend.root.position[1])\r\n ? elevation - backend.root.position[1] : 0,\r\n };\r\n}\n", "export function groundOffset(point) {\r\n return point.ground || 0;\r\n}\n", "import { groundOffset } from './groundOffset.js';\n\nexport function addTriangle(context, a, ah, b, bh, c, ch, nx, ny, nz, color) {\r\n const { backend, positions, normals, colors, uvs } = context;\r\n const ux = b.x - a.x, uy = bh - ah, uz = a.y - b.y;\r\n const vx = c.x - a.x, vy = ch - ah, vz = a.y - c.y;\r\n if ((uy * vz - uz * vy) * nx + (uz * vx - ux * vz) * ny + (ux * vy - uy * vx) * nz < 0) {\r\n const point = b, height = bh;\r\n b = c; bh = ch; c = point; ch = height;\r\n }\r\n positions.push(a.x, ah + groundOffset(a), -a.y,\r\n b.x, bh + groundOffset(b), -b.y,\r\n c.x, ch + groundOffset(c), -c.y);\r\n normals.push(nx, ny, nz, nx, ny, nz, nx, ny, nz);\r\n colors.push(color.r, color.g, color.b, color.r, color.g, color.b, color.r, color.g, color.b);\r\n if (backend.options.nightLight) uvs.push(...a.uv, ...b.uv, ...c.uv);\r\n}\n", "import { addTriangle } from './addTriangle.js';\nimport { pumpState } from '../constants/pumpState.js';\n\nexport function addGeneratedTriangle(...args) {\r\n addTriangle(pumpState.triangleContexts[pumpState.triangleContexts.length - 1], ...args);\r\n}\n", "import { pumpState } from '../constants/pumpState.js';\nimport { addGeneratedTriangle } from './addGeneratedTriangle.js';\n\nexport function generateTreeGeometry(context, generator, point, style) {\r\n pumpState.triangleContexts.push(context);\r\n try {\r\n generator(point, style, addGeneratedTriangle);\r\n } finally {\r\n pumpState.triangleContexts.pop();\r\n }\r\n}\n", "import { projectedTree } from './projectedTree.js';\nimport { generateTreeGeometry } from './generateTreeGeometry.js';\nimport { lampPostGeometry } from '../geometry/lampPostGeometry.js';\nimport { lightGeometry } from '../geometry/lightGeometry.js';\nimport { treeGeometry } from '../geometry/treeGeometry.js';\n\nexport function buildAreaPoint(context, feature, lon, lat, style, baseColor) {\n const { backend } = context;\n const { top } = style;\n const projected = projectedTree(context, lon, lat);\n if (backend.options.nightLight) {\n if (!Number.isFinite(style.lightFlux) || style.lightFlux <= 0) throw new Error('Invalid light flux');\n const support = feature.properties?.cod_ouvrag || `${lon},${lat}`;\n if (style.poleRadius > 0 && !context.supports.has(support)) {\n generateTreeGeometry(context, lampPostGeometry, projected, style);\n context.supports.add(support);\n }\n generateTreeGeometry(context, lightGeometry, projected, style);\n context.lights.push({\n position: [projected.x, projected.ground + top, -projected.y],\n radius: Math.hypot(top, style.lightRadius), color: [baseColor.r, baseColor.g, baseColor.b],\n flux: style.lightFlux,\n });\n } else generateTreeGeometry(context, treeGeometry, projected, style);\n}\n", "import { getElevation } from '../terrain/getElevation.js';\n\nexport function projectRing(context, ring) {\n const { backend, crs, origin, metres, map } = context;\n if (ring.length < 4) throw new Error('Invalid GeoJSON polygon ring');\n const path = [];\n let lng, lat, point, elevation;\n for ([lng, lat] of ring.slice(0, -1)) {\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) throw new Error('Invalid GeoJSON coordinates');\n point = crs.project(new L.LatLng(lat, lng));\n elevation = map._terrain3D ? getElevation(map._terrain3D, [lat, lng]) : undefined;\n path.push({\n x: (point.x - origin.x) * metres,\n y: (point.y - origin.y) * metres,\n ground: Number.isFinite(elevation) && Number.isFinite(backend.root.position[1])\n ? elevation - backend.root.position[1] : 0,\n });\n }\n return path;\n}\n", "import { projectRing } from './projectRing.js';\nimport { triangulate } from '../triangulation/triangulate.js';\nimport { addTriangle } from './addTriangle.js';\nimport { isClockWise } from '../triangulation/isClockWise.js';\n\nexport function buildAreaPolygon(context, rings, top, bottom, baseColor) {\n if (!rings.length) throw new Error('Empty GeoJSON polygon');\n const paths = [];\n let ring, path, point, a, b, c, index, sign, i, length, nx, nz;\n for (ring of rings) paths.push(projectRing(context, ring));\n const points = [];\n for (path of paths) for (point of path) points.push(point);\n for ([a, b, c] of triangulate(paths[0], paths.slice(1))) {\n addTriangle(context, points[a], top, points[b], top, points[c], top, 0, 1, 0, baseColor);\n if (bottom > 0) addTriangle(context, points[a], bottom, points[b], bottom, points[c], bottom, 0, -1, 0, baseColor);\n }\n for (index = 0; index < paths.length; index++) {\n path = paths[index];\n sign = isClockWise(path) === (index === 0) ? -1 : 1;\n for (i = 0; i < path.length; i++) {\n a = path[i], b = path[(i + 1) % path.length];\n length = Math.hypot(b.x - a.x, b.y - a.y);\n if (!length) continue;\n nx = sign * (b.y - a.y) / length, nz = sign * (b.x - a.x) / length;\n addTriangle(context, a, bottom, b, bottom, b, top, nx, 0, nz, baseColor);\n addTriangle(context, a, bottom, b, top, a, top, nx, 0, nz, baseColor);\n }\n }\n}\n", "import { buildAreaPoint } from './buildAreaPoint.js';\nimport { buildAreaPolygon } from './buildAreaPolygon.js';\nimport { parseColor } from '../utils/parseColor.js';\n\nexport function buildAreaFeature(context, feature) {\n const { backend, area, map } = context;\n const coords = area.coords;\n const geometry = feature?.geometry;\n const isTree = geometry?.type === 'Point';\n if (backend.options.nightLight && !isTree) throw new Error('Night lights require Point geometry');\n const polygons = geometry?.type === 'Polygon' ? [geometry.coordinates] :\n geometry?.type === 'MultiPolygon' ? geometry.coordinates : null;\n if (!polygons && !isTree) throw new Error('Unsupported GeoJSON geometry');\n const [lon, lat] = (isTree ? geometry.coordinates : polygons[0]?.[0]?.[0]) ?? [];\n if (!Number.isFinite(lon) || !Number.isFinite(lat)) throw new Error('Invalid GeoJSON coordinates');\n if (coords) {\n const anchor = map.project(new L.LatLng(lat, lon), coords.z);\n if (Math.floor(anchor.x / 256) !== coords.x || Math.floor(anchor.y / 256) !== coords.y) return;\n }\n const style = backend.options.style(feature);\n if (style === null) {\n context.skipped++;\n return;\n }\n if (!style || typeof style !== 'object') throw new Error('style must return an extrusion style or null');\n const { top, bottom = 0, color = 0xd9b38c } = style;\n if (!Number.isFinite(top) || !Number.isFinite(bottom) || bottom < 0 || top <= bottom) {\n throw new Error('Invalid extrusion heights: expected top > bottom >= 0');\n }\n const baseColor = parseColor(color);\n const vertexStart = context.positions.length / 3;\n if (isTree) buildAreaPoint(context, feature, lon, lat, style, baseColor);\n let rings;\n for (rings of polygons || []) buildAreaPolygon(context, rings, top, bottom, baseColor);\n const vertexEnd = context.positions.length / 3;\n context.featureFaces.push({\n id: feature.id ?? feature.properties?.objectid ?? JSON.stringify(geometry),\n properties: feature.properties, baseColor,\n faceStart: vertexStart / 3, faceEnd: vertexEnd / 3, vertexStart, vertexEnd,\n });\n}\n", "/** Compact repeated features only when reconstructed float32 positions compare equal. */\r\nexport function instanceAreaGeometry(context) {\r\n const { positions, normals, colors, featureFaces } = context;\r\n if (context.backend.options.nightLight || featureFaces.length < 2) return context;\r\n const vertices = featureFaces[0].vertexEnd;\r\n const length = vertices * 3;\r\n if (!vertices || positions.length !== length * featureFaces.length) return context;\r\n const origin = [Math.trunc(positions[0]), Math.trunc(positions[1]), Math.trunc(positions[2])];\r\n const template = new Float32Array(length);\r\n let i, instance, axis, face, start;\r\n for (i = 0; i < length; i++) template[i] = positions[i] - origin[i % 3];\r\n const offsets = new Float32Array(featureFaces.length * 4);\r\n for (instance = 0; instance < featureFaces.length; instance++) {\r\n face = featureFaces[instance];\r\n start = instance * length;\r\n if (face.vertexStart !== instance * vertices || face.vertexEnd !== (instance + 1) * vertices) return context;\r\n for (axis = 0; axis < 3; axis++) offsets[instance * 4 + axis] = origin[axis] + positions[start + axis] - positions[axis];\r\n offsets[instance * 4 + 3] = instance * vertices;\r\n for (i = 0; i < length; i++) {\r\n if (Math.fround(template[i] + offsets[instance * 4 + i % 3]) !== Math.fround(positions[start + i]) ||\r\n Math.fround(normals[i]) !== Math.fround(normals[start + i]) ||\r\n Math.fround(colors[i]) !== Math.fround(colors[start + i])) return context;\r\n }\r\n }\r\n return {\r\n positions: template, normals: normals.slice(0, length), colors: colors.slice(0, length),\r\n instanceOffsets: offsets,\r\n };\r\n}\r\n", "import { emptyNode } from '../scene/emptyNode.js';\nimport { createProgram } from '../rendering/createProgram.js';\nimport { cityMapper } from '../constants/cityMapper.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\nimport { instanceAreaGeometry } from './instanceAreaGeometry.js';\n\nexport function attachAreaMesh(context) {\n const { backend, area } = context;\n if (!context.positions.length) {\n Object.assign(area, { mesh: null, buildings: 0, skipped: context.skipped, done: true });\n return;\n }\n const device = backend.renderer.device;\n const data = instanceAreaGeometry(context);\n const attributes = {\n position: { size: 3, data: new Float32Array(data.positions) },\n normal: { size: 3, data: new Float32Array(data.normals) },\n color: { size: 3, data: new Float32Array(data.colors) },\n };\n if (data.instanceOffsets) attributes.instanceOffset = { size: 4, data: data.instanceOffsets };\n if (backend.options.nightLight) attributes.uv = { size: 2, data: new Float32Array(context.uvs) };\n let name, attribute;\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.count = attribute.data.length / attribute.size;\n attribute.buffer = device.createBuffer({\n size: Math.max(4, attribute.data.byteLength),\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n const meshGeometry = {\n device,\n attributes,\n drawRange: { start: 0, count: attributes.position.count },\n };\n Object.assign(area, {\n mesh: {\n ...emptyNode(),\n device,\n geometry: meshGeometry,\n program: createProgram(backend, {\n instanced: Boolean(data.instanceOffsets),\n vertexColors: true, roofTexture: Boolean(backend.options.roofTexture),\n ...(backend.options.nightLight ? { nightLight: true, alphaMode: 'BLEND', doubleSided: true } : {}),\n }),\n id: cityMapper.nextId++,\n renderOrder: 0,\n fadeDuration: 250,\n extras: { featureFaces: context.featureFaces, lights: context.lights },\n },\n buildings: context.featureFaces.length,\n skipped: context.skipped,\n done: true,\n });\n setParent(area.mesh, backend.root);\n update(backend);\n}\n", "export function sourceAreaContext(backend, area, map) {\r\n const crs = map.options.crs, origin = crs.project(backend.location);\r\n return {\r\n backend, area, map, crs, origin,\r\n metres: Math.cos(backend.location.lat * Math.PI / 180),\r\n positions: [], normals: [], colors: [], uvs: [], featureFaces: [], lights: [],\r\n supports: new Set(), skipped: 0,\r\n };\r\n}\n", "import { buildAreaFeature } from './buildAreaFeature.js';\nimport { attachAreaMesh } from './attachAreaMesh.js';\nimport { loadSource } from '../archives/loadSource.js';\nimport { sourceAreaContext } from './sourceAreaContext.js';\nimport { pump } from './pump.js';\n\nexport async function buildArea(backend, area, map) {\n let feature;\n try {\n await new Promise(requestAnimationFrame);\n await map._terrain3D?._terrainPromise;\n if (area.request.signal.aborted) return;\n const data = await loadSource(backend, area);\n if (area.request.signal.aborted) return;\n if (data?.type !== 'FeatureCollection' || !Array.isArray(data.features)) {\n throw new Error('Invalid GeoJSON response');\n }\n if (backend._geojson && typeof backend.options.style !== 'function') {\n throw new Error('style must be a function');\n }\n const context = sourceAreaContext(backend, area, map);\n let deadline = performance.now() + 4;\n for (feature of data.features) {\n if (area.request.signal.aborted) return;\n if (performance.now() >= deadline) {\n await new Promise(requestAnimationFrame);\n if (area.request.signal.aborted) return;\n deadline = performance.now() + 4;\n }\n buildAreaFeature(context, feature);\n }\n attachAreaMesh(context);\n } catch (error) {\n if (!area.request.signal.aborted) {\n area.error = error.message;\n backend.fire('error', { error });\n }\n } finally {\n backend._inflight--;\n pump(backend, map);\n }\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { emptyNode } from \"../scene/emptyNode.js\";\nimport { isClockWise } from \"../triangulation/isClockWise.js\";\nimport { lampPostGeometry } from \"../geometry/lampPostGeometry.js\";\nimport { lightGeometry } from \"../geometry/lightGeometry.js\";\nimport { parseColor } from \"../utils/parseColor.js\";\nimport { treeGeometry } from \"../geometry/treeGeometry.js\";\nimport { triangulate } from \"../triangulation/triangulate.js\";\nimport { createProgram } from '../rendering/createProgram.js';\nimport { updateStatus } from './updateStatus.js';\nimport { loadSource } from '../archives/loadSource.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\nimport { getElevation } from \"../terrain/getElevation.js\";\nimport { pumpState } from '../constants/pumpState.js';\nimport { compareDistance } from '../utils/compareDistance.js';\nimport { buildArea } from './buildArea.js';\n\npumpState.triangleContexts = [];\n\n/** Share four load/build slots across source layers, nearest ground blocks first. */\nexport function pump(backend, map = backend._map) {\n const shared = map && cityMapper.renderers.get(map);\n if (!shared) return;\n const layers = [];\n let layer, area, center, areaBackend;\n for (layer of shared._layers) {\n if (Number.isFinite(layer._inflight) && layer._areas && (layer.url || layer._geojson)) layers.push(layer);\n }\n const pending = [];\n for (layer of layers) {\n for (area of layer._areas.values()) {\n if (area.started || area.request.signal.aborted) continue;\n center = area.coords && map.project(map.getCenter(), area.coords.z).divideBy(256);\n pending.push({\n layer, area,\n distance: center\n ? Math.hypot(area.coords.x + 0.5 - center.x, area.coords.y + 0.5 - center.y) / 2 ** area.coords.z : 0,\n });\n }\n }\n pending.sort(compareDistance);\n let inflight = 0;\n for (layer of layers) inflight += layer._inflight;\n for ({ layer: areaBackend, area } of pending) {\n if (inflight >= 4) break;\n if (areaBackend._inflight >= 2) continue;\n area.started = true;\n areaBackend._inflight++;\n inflight++;\n buildArea(areaBackend, area, map);\n }\n for (layer of layers) updateStatus(layer);\n}\n", "import { update } from '../scene/update.js';\n\n/** Highlight a source vertex range in the shader; vertex colors stay untouched. */\n\nexport function setHighlight(backend, feature) {\n if (feature?.model) feature = null;\n if (backend.highlightedFeature?.mesh === feature?.mesh &&\n backend.highlightedFeature?.vertexStart === feature?.vertexStart) return;\n if (backend.highlightedFeature) backend.highlightedFeature.mesh.highlight = null;\n backend.highlightedFeature = feature;\n if (feature) feature.mesh.highlight = [feature.vertexStart, feature.vertexEnd];\n update(backend);\n}\n", "/** Update tooltip content/position and arbitrate cursor ownership across shared layers. */\n\nexport function showFeature(backend, feature, event) {\n const tooltip = backend._tooltip;\n if (!tooltip) return;\n if (feature) {\n tooltip.replaceChildren(backend.options.tooltip(feature));\n tooltip.hidden = false;\n const rect = backend.container.getBoundingClientRect();\n const x = event.clientX - rect.left, y = event.clientY - rect.top;\n tooltip.style.left = `${x + tooltip.offsetWidth + 16 > rect.width ? x - tooltip.offsetWidth - 12 : x + 12}px`;\n tooltip.style.top = `${y + tooltip.offsetHeight + 16 > rect.height ? y - tooltip.offsetHeight - 12 : y + 12}px`;\n } else {\n tooltip.hidden = true;\n }\n const shared = backend._shared;\n let layer;\n if (shared) {\n let visible = false;\n for (layer of shared._layers) {\n if (layer._tooltip && !layer._tooltip.hidden) {\n visible = true;\n break;\n }\n }\n if (visible) {\n if (shared._cursor === undefined) shared._cursor = backend.container.style.cursor;\n backend.container.style.cursor = 'pointer';\n } else if (shared._cursor !== undefined) {\n backend.container.style.cursor = shared._cursor;\n delete shared._cursor;\n }\n }\n}\n", "import { setHighlight } from '../picking/setHighlight.js';\nimport { showFeature } from '../picking/showFeature.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\n/** Cancel pending work and dispose this block's GPU data, including any hover highlight. */\nexport function releaseArea(backend, area) {\n area.request.abort();\n let attribute;\n if (area.mesh) {\n if (backend.highlightedFeature?.mesh === area.mesh) {\n setHighlight(backend, null);\n backend.hoveredFeature = null;\n showFeature(backend, null);\n }\n setParent(area.mesh, null);\n update(backend);\n const geometry = area.mesh.geometry;\n for (attribute of Object.values(geometry.attributes)) attribute.buffer.destroy();\n area.mesh.program.pipelineCache.clear();\n }\n}\n", "export function compareAreaDistance(a, b) {\n return Math.hypot(a[1].x - a[2].x, a[1].y - a[2].y) -\n Math.hypot(b[1].x - b[2].x, b[1].y - b[2].y);\n}\n", "import { pump } from \"./pump.js\";\nimport { releaseArea } from './releaseArea.js';\nimport { compareAreaDistance } from './compareAreaDistance.js';\n\n/** Cover the visible ground bounds and one bordering block, clipped to the archive. */\n\nexport function updateArea(backend) {\n if (!backend._map || !backend._shared) return;\n if (backend._geojson) {\n if (!backend._areas.has('geojson')) {\n backend._areas.set('geojson', { request: new AbortController() });\n }\n pump(backend);\n return;\n }\n if (!backend.header) return;\n const z = backend.header.minZoom;\n const center = backend._map.project(backend._map.getCenter(), z).divideBy(256).floor();\n const bounds = backend._map.getBounds();\n const nw = backend._map.project(bounds.getNorthWest(), z).divideBy(256).floor();\n const se = backend._map.project(bounds.getSouthEast(), z).divideBy(256).floor();\n const archiveNW = backend._map.project([backend.header.maxLat, backend.header.minLon], z).divideBy(256).floor();\n const archiveSE = backend._map.project([backend.header.minLat, backend.header.maxLon], z).divideBy(256).floor();\n const wanted = new Map();\n let x, y, key, area, coords;\n for (x = Math.max(0, nw.x - 1, archiveNW.x); x <= Math.min(2 ** z - 1, se.x + 1, archiveSE.x); x++) {\n for (y = Math.max(0, nw.y - 1, archiveNW.y); y <= Math.min(2 ** z - 1, se.y + 1, archiveSE.y); y++) {\n wanted.set(`${x}/${y}`, { z, x, y });\n }\n }\n for ([key, area] of backend._areas) {\n if (!wanted.has(key)) {\n releaseArea(backend, area);\n backend._areas.delete(key);\n }\n }\n // Load the nearest new blocks first without rebuilding retained geometry.\n const areas = [];\n for ([key, coords] of wanted) areas.push([key, coords, center]);\n areas.sort(compareAreaDistance);\n for ([key, coords] of areas) {\n if (!backend._areas.has(key)) backend._areas.set(key, { coords, request: new AbortController() });\n }\n pump(backend);\n}\n", "import { getElevation } from './getElevation.js';\r\n\r\nexport function setTerrainHeight(layer) {\r\n if (!layer.root || !layer.location) return;\r\n layer._terrainBaseY ??= layer.root.position[1];\r\n const terrain = layer._map?._terrain3D;\r\n const elevation = terrain && getElevation(terrain, layer.location);\r\n const offset = Number.isFinite(elevation) ? layer.options.terrainOffset ?? 0 : 0;\r\n layer.root.position[1] = layer._terrainBaseY + (elevation ?? 0) + offset;\r\n}\r\n", "export const attachState = {};\n", "export function showWebGPUWarning(map) {\n const container = map.getContainer();\n if (container.querySelector('.leaflet-webgpu-warning')) return;\n const warning = document.createElement('div');\n warning.className = 'leaflet-webgpu-warning';\n warning.setAttribute('role', 'alert');\n warning.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';\n warning.append('WebGPU is not available in this browser or device. ');\n const link = document.createElement('a');\n link.href = 'https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility';\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.textContent = 'Learn more';\n warning.append(link);\n container.append(warning);\n}\n", "import { showWebGPUWarning } from './showWebGPUWarning.js';\nimport { cityMapper } from '../constants/cityMapper.js';\n\nexport function failAttachment(error, backend, map) {\n showWebGPUWarning(map);\n backend._rendererReady.reject(error);\n cityMapper.renderers.delete(map);\n throw error;\n}\n", "import { failAttachment } from './failAttachment.js';\n\nexport async function requestAdapter(backend, map) {\n let adapter;\n try {\n adapter = await navigator.gpu.requestAdapter();\n } catch (error) {\n failAttachment(error, backend, map);\n }\n if (!adapter) failAttachment(new Error('Unable to acquire a WebGPU adapter'), backend, map);\n return adapter;\n}\n", "import { failAttachment } from './failAttachment.js';\n\nexport async function requestDevice(adapter, backend, map) {\n try {\n return await adapter.requestDevice();\n } catch (error) {\n failAttachment(error, backend, map);\n }\n}\n", "import { attachState } from '../constants/attachState.js';\nimport { cityMapper } from '../constants/cityMapper.js';\n\nexport function rendererDeviceError(event) {\n const map = attachState.rendererDevices.get(event.currentTarget);\n const owner = cityMapper.renderers.get(map);\n if (owner?.renderer?.device !== event.currentTarget) return;\n let layer;\n for (layer of owner._layers || []) layer.fire('error', { error: event.error });\n}\n", "import { attachState } from '../constants/attachState.js';\nimport { cityMapper } from '../constants/cityMapper.js';\n\nexport function rendererDeviceLost([info, device]) {\n const map = attachState.rendererDevices.get(device);\n const owner = cityMapper.renderers.get(map);\n if (!owner || owner.renderer?.device !== device) return;\n const error = new Error(`WebGPU device lost: ${info.message || info.reason}`);\n let layer;\n for (layer of owner._layers) layer.fire('error', { error });\n}\n", "import { createProgram } from '../rendering/createProgram.js';\n\nexport function restoreObject(backend, shared, object) {\n let name, attribute, data, size, count, normalized, key, texture;\n if (object.geometry && object.geometry.device !== shared.renderer.device) {\n const geometry = object.geometry;\n const material = object.program._layerMaterial;\n const attributes = {};\n for (name of ['position', 'normal', 'color', 'uv', 'index', 'instanceOffset']) {\n attribute = geometry.attributes[name];\n if (!attribute) continue;\n ({ data, size, count, normalized } = attribute);\n attributes[name] = { data: data.slice(0, count * size), size, normalized };\n }\n const device = shared.renderer.device;\n if (attributes.index?.data instanceof Uint8Array) {\n attributes.index.data = Uint16Array.from(attributes.index.data);\n }\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.size ||= 1;\n attribute.count = attribute.data.length / attribute.size;\n attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';\n attribute.buffer = device.createBuffer({\n size: Math.max(4, attribute.data.byteLength),\n usage: name === 'index'\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n object.geometry = {\n device,\n attributes,\n drawRange: { start: 0, count: attributes.index?.count || attributes.position.count },\n };\n for (attribute of Object.values(geometry.attributes)) attribute.buffer.destroy();\n object.bindGroup = null;\n object.boundTextures = [];\n for (key of ['baseTexture', 'metalTexture', 'emissiveTexture', 'occlusionTexture']) {\n texture = material[key];\n if (!texture || texture.device === device) continue;\n material[key] = {\n ...texture,\n device,\n texture: device.createTexture({\n size: [texture.image.width, texture.image.height],\n format: texture.format,\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: device.createSampler(texture.samplerOptions),\n uploaded: null,\n };\n }\n object.program.pipelineCache.clear();\n object.program = createProgram(backend, material);\n object.device = device;\n }\n if (object.texture && object.texture.device !== shared.renderer.device) {\n object.texture = {\n ...object.texture,\n device: shared.renderer.device,\n texture: shared.renderer.device.createTexture({\n size: [object.texture.image.width, object.texture.image.height],\n format: object.texture.format,\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: shared.renderer.device.createSampler(object.texture.samplerOptions),\n uploaded: null,\n };\n }\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { emptyNode } from './emptyNode.js';\nimport { setParent } from './setParent.js';\nimport { createProgram } from '../rendering/createProgram.js';\nimport { endZoom } from './endZoom.js';\nimport { onMapChange } from './onMapChange.js';\nimport { onZoomAnim } from './onZoomAnim.js';\nimport { render } from '../rendering/render.js';\nimport { startZoom } from './startZoom.js';\nimport { update } from './update.js';\nimport { updateArea } from '../sources/updateArea.js';\nimport { setTerrainHeight } from '../terrain/setTerrainHeight.js';\nimport { resizeSunlight } from '../shadows/resizeSunlight.js';\nimport { attachState } from '../constants/attachState.js';\nimport { noOperation } from '../utils/noOperation.js';\nimport { failAttachment } from './failAttachment.js';\nimport { requestAdapter } from './requestAdapter.js';\nimport { requestDevice } from './requestDevice.js';\nimport { rendererDeviceError } from './rendererDeviceError.js';\nimport { rendererDeviceLost } from './rendererDeviceLost.js';\nimport { restoreObject } from './restoreObject.js';\n\nattachState.rendererDevices = new WeakMap();\n\n/** WebGPU device attachment, materials/pipelines and draw calls. */\n/**\n * Join/create this map's shared scene and rebuild GPU objects if its context changed.\n * Buffer/program handles belong to one context; typed arrays and decoded images do not.\n * @private\n */\n\nexport async function attach(backend, map) {\n let shared = cityMapper.renderers.get(map);\n if (shared?._rendererReady) {\n await shared._rendererReady.promise;\n }\n if (!shared) {\n shared = backend;\n backend._rendererReady = Promise.withResolvers();\n backend._rendererReady.promise.catch(noOperation);\n cityMapper.renderers.set(map, shared);\n const canvas = document.createElement('canvas');\n if (!navigator.gpu) {\n failAttachment(new Error('Layer3D requires WebGPU'), backend, map);\n }\n const adapter = await requestAdapter(backend, map);\n const device = await requestDevice(adapter, backend, map);\n attachState.rendererDevices.set(device, map);\n device.addEventListener('uncapturederror', rendererDeviceError);\n Promise.all([device.lost, Promise.resolve(device)]).then(rendererDeviceLost);\n const context = canvas.getContext('webgpu');\n if (!context) {\n device.destroy();\n failAttachment(new Error('Unable to create a WebGPU canvas context'), backend, map);\n }\n const format = navigator.gpu.getPreferredCanvasFormat();\n context.configure({ device, format, alphaMode: 'premultiplied' });\n map.getContainer().querySelector('.leaflet-webgpu-warning')?.remove();\n backend._shared = backend;\n backend._layers = new Set();\n backend._sceneOrigin = backend.location;\n backend.scene = emptyNode();\n // Perspective camera state: fov in degrees, near/far in scene metres.\n backend.camera = {\n position: [0, 0, 0],\n up: [0, 1, 0],\n target: [0, 0, 0],\n viewMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n projectionMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n projectionViewMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n fov: 45,\n aspect: 1,\n near: 0.1,\n far: 10000,\n };\n backend.renderer = {\n device,\n context,\n format,\n canvas,\n dpr: Math.min(window.devicePixelRatio, 2)\n };\n const layout = device.createBindGroupLayout({\n entries: [\n { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } },\n { binding: 1, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'depth' } },\n { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'comparison' } },\n { binding: 3, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'read-only-storage' } },\n ]\n });\n const buffer = backend.renderer.device.createBuffer({ size: 80, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });\n const sampler = backend.renderer.device.createSampler({ compare: 'less-equal', minFilter: 'linear', magFilter: 'linear' });\n const lights = backend.renderer.device.createBuffer({ size: 32, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\n backend.renderer.sunlight = { layout, buffer, sampler, lights, size: 0 };\n const values = new Float32Array(20);\n values.set([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n backend.renderer.device.queue.writeBuffer(buffer, 0, values);\n resizeSunlight(backend, 1);\n const emptyImage = document.createElement('canvas');\n emptyImage.width = 1;\n emptyImage.height = 1;\n backend.renderer.roofFallbackTexture = {\n device,\n texture: device.createTexture({\n size: [1, 1],\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: device.createSampler({\n addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\n }),\n image: emptyImage, format: 'rgba8unorm', srgb: false, uploaded: null,\n };\n shared._size = null;\n canvas.className = 'leaflet-3d';\n canvas.style.cssText = 'position:absolute;top:0;left:0;pointer-events:none';\n canvas.setAttribute('role', 'img');\n canvas.setAttribute('aria-label', backend.options.ariaLabel ?? '3D scene');\n let pane = map.getPane('webgpuPane');\n if (!pane) {\n pane = map.createPane('webgpuPane', map.getContainer());\n // The pitch sky uses 0 and may be inserted after this pane.\n pane.style.zIndex = 1;\n pane.style.pointerEvents = 'none';\n }\n pane.append(canvas);\n map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange, shared);\n map.on('zoomstart', startZoom, shared);\n map.on('zoomanim', onZoomAnim, shared);\n map.on('zoomend', endZoom, shared);\n backend._rendererReady.resolve();\n delete shared._rendererReady;\n render(shared);\n cityMapper.renderers.set(map, shared);\n }\n const origin = map.options.crs.project(shared._sceneOrigin);\n const point = map.options.crs.project(backend.location);\n const metres = Math.cos(shared._sceneOrigin.lat * Math.PI / 180);\n backend._terrainBaseY ??= backend.root.position[1];\n backend.root.position[0] = (point.x - origin.x) * metres;\n backend.root.position[1] = backend._terrainBaseY;\n backend.root.position[2] = -(point.y - origin.y) * metres;\n setTerrainHeight(backend);\n // Each group's metres are measured at its own latitude, not the shared camera origin.\n backend.root.scale.fill(metres / Math.cos(backend.location.lat * Math.PI / 180));\n backend._shared = shared;\n backend.renderer = shared.renderer;\n backend.scene = shared.scene;\n backend.camera = shared.camera;\n shared._layers.add(backend);\n setParent(backend.root, shared.scene);\n const pendingObjects = [backend.root];\n let object, i;\n while (pendingObjects.length) {\n object = pendingObjects.pop();\n restoreObject(backend, shared, object);\n for (i = object.children.length - 1; i >= 0; i--) pendingObjects.push(object.children[i]);\n }\n update(shared);\n if ((backend.header && backend._type !== 'pmtiles') || backend._geojson) updateArea(backend);\n}\n", "import { raycast } from './raycast.js';\n\n/**\n * Translate a geometry hit into a configured model or batched source feature.\n * Sorted half-open face ranges permit binary search without a feature per triangle.\n * @returns {PickedFeature|null}\n */\n\nexport function findFeature(backend, event) {\n if (!backend.root || !backend.camera) {\n return null;\n }\n let hit, object, ranges, low, high, middle, range;\n for (hit of raycast(backend, event, backend.root.children, Boolean(backend.model))) {\n if (backend.model) {\n object = hit.object;\n while (object && object !== backend.model) {\n object = object.parent;\n }\n if (object === backend.model) {\n return {\n id: backend.model.id, properties: backend.model.extras,\n model: backend.model, mesh: hit.object, point: hit.point\n };\n }\n }\n ranges = hit.object.extras?.featureFaces;\n if (!ranges) {\n continue;\n }\n low = 0, high = ranges.length - 1;\n while (low <= high) {\n middle = (low + high) >> 1;\n range = ranges[middle];\n if (hit.faceIndex < range.faceStart) {\n high = middle - 1;\n } else if (hit.faceIndex >= range.faceEnd) {\n low = middle + 1;\n } else {\n return {\n ...range,\n mesh: hit.object,\n point: hit.point\n };\n }\n }\n }\n return null;\n}\n", "import { findFeature } from './findFeature.js';\nimport { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Emit click without moving the map or pinning the tooltip. */\n\nexport function onClick(layer, event) {\n const feature = findFeature(layer, event);\n layer.hoveredFeature = feature;\n setHighlight(layer, feature);\n showFeature(layer, feature, event);\n layer.fire('featureclick', { feature, originalEvent: event });\n}\n", "import { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Clear hover, highlight and tooltip without retaining a selected feature. */\n\nexport function onPointerLeave(layer) {\n layer.hoveredFeature = null;\n setHighlight(layer, null);\n showFeature(layer, null);\n layer.fire('featurehover', { feature: null });\n}\n", "import { findFeature } from './findFeature.js';\nimport { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Hover is transient; featurehover also reports misses with feature:null. */\n\nexport function onPointerMove(layer, event) {\n layer.hoveredFeature = findFeature(layer, event);\n setHighlight(layer, layer.hoveredFeature);\n showFeature(layer, layer.hoveredFeature, event);\n layer.fire('featurehover', {\n feature: layer.hoveredFeature,\n originalEvent: event\n });\n}\n", "import * as onPointerMove from './onPointerMove.js';\n\nexport function pointerMove(event) {\n onPointerMove.onPointerMove(this, event);\n}\n", "import * as onClick from './onClick.js';\n\nexport function pointerClick(event) {\n onClick.onClick(this, event);\n}\n", "import * as onPointerLeave from './onPointerLeave.js';\n\nexport function pointerLeave() {\n onPointerLeave.onPointerLeave(this);\n}\n", "import * as attach from './attach.js';\n\nexport async function attachLayer(backend, map) {\n try {\n await attach.attach(backend, map);\n backend._added.resolve();\n } catch (error) {\n backend.fire('error', { error });\n }\n}\n", "import * as attach from './attach.js';\nimport * as onClick from '../picking/onClick.js';\nimport * as onPointerLeave from '../picking/onPointerLeave.js';\nimport * as onPointerMove from '../picking/onPointerMove.js';\nimport { pointerMove } from '../picking/pointerMove.js';\nimport { pointerClick } from '../picking/pointerClick.js';\nimport { pointerLeave } from '../picking/pointerLeave.js';\nimport { attachLayer } from './attachLayer.js';\n\n/** Attach interaction immediately; initialization may finish before or after onAdd. */\nexport function onAdd3DLayer(backend, map) {\n if (!backend.location) {\n const center = map.getCenter();\n backend.location = new L.LatLng(center.lat, center.lng);\n }\n if (backend.url || backend._geojson || backend.options.tooltip || backend.modelUrl) {\n backend.container = map.getContainer();\n backend._pointerEvents ||= {\n mousemove: pointerMove,\n click: pointerClick,\n mouseleave: pointerLeave,\n };\n if (backend.options.tooltip) {\n backend._tooltip = L.DomUtil.create('div', 'leaflet-3d-tooltip', backend.container);\n backend._tooltip.hidden = true;\n backend._tooltip.setAttribute('role', 'tooltip');\n backend._tooltip.setAttribute('aria-live', 'polite');\n backend._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';\n }\n L.DomEvent.on(backend.container, backend._pointerEvents, backend);\n }\n if (backend.root) {\n attachLayer(backend, map);\n }\n}\n", "export async function releaseRenderer(renderer, backend) {\n try {\n await renderer.device.queue.onSubmittedWorkDone();\n renderer.depthTexture?.destroy();\n renderer.roofFallbackTexture?.texture?.destroy();\n renderer.uniformBuffer?.destroy();\n renderer.sunlight?.texture?.destroy();\n renderer.sunlight?.buffer?.destroy();\n renderer.sunlight?.lights?.destroy();\n } catch (error) {\n backend.fire('error', { error });\n }\n renderer.device.destroy();\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport * as destroyTexture from '../rendering/destroyTexture.js';\nimport * as endZoom from './endZoom.js';\nimport * as onMapChange from './onMapChange.js';\nimport * as onPointerLeave from '../picking/onPointerLeave.js';\nimport * as onZoomAnim from './onZoomAnim.js';\nimport { releaseArea } from '../sources/releaseArea.js';\nimport { updateStatus } from '../sources/updateStatus.js';\nimport { setParent } from './setParent.js';\nimport * as startZoom from './startZoom.js';\nimport { cancelUpdate } from './cancelUpdate.js';\nimport { update } from './update.js';\nimport { releaseRenderer } from './releaseRenderer.js';\n\n/** Release source meshes/UI; retain manually added objects and model CPU data. */\nexport function onRemove3DLayer(backend, map) {\n backend._added = Promise.withResolvers();\n if (backend.container) {\n onPointerLeave.onPointerLeave(backend);\n L.DomEvent.off(backend.container, backend._pointerEvents, backend);\n backend.container = null;\n }\n let area, key, layer, animation;\n for (area of backend._areas.values()) releaseArea(backend, area);\n backend._areas.clear();\n backend._tooltip?.remove();\n backend._tooltip = null;\n if (backend.url || backend._geojson) updateStatus(backend, false);\n const shared = backend._shared;\n if (!shared) return;\n setParent(backend.root, null);\n shared._layers.delete(backend);\n if (shared === backend) {\n map.off('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange.onMapChange, backend);\n map.off('zoomstart', startZoom.startZoom, backend);\n map.off('zoomanim', onZoomAnim.onZoomAnim, backend);\n map.off('zoomend', endZoom.endZoom, backend);\n cancelUpdate(backend);\n if (backend._layers.size) {\n // Keep the original scene origin and GPU resources when ownership changes.\n const next = backend._layers.values().next().value;\n for (key of ['_layers', '_sceneOrigin', '_size', '_zoomLevel', '_zoomTransitions', '_zoomView', '_cursor', '_roofRaster']) {\n next[key] = backend[key];\n delete backend[key];\n }\n for (layer of next._layers) layer._shared = next;\n cityMapper.renderers.set(map, next);\n map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange.onMapChange, next);\n map.on('zoomstart', startZoom.startZoom, next);\n map.on('zoomanim', onZoomAnim.onZoomAnim, next);\n map.on('zoomend', endZoom.endZoom, next);\n update(next);\n } else {\n if (backend._roofRaster) destroyTexture.destroyTexture(backend, backend._roofRaster.texture.texture);\n backend._roofRaster = null;\n for (animation of backend._zoomTransitions?.keys() || []) animation.play();\n backend._zoomTransitions = null;\n backend._zoomView = null;\n delete map._cameraView;\n map.getContainer().classList.remove('leaflet-camera-zoom');\n const renderer = backend.renderer;\n renderer.canvas.remove();\n releaseRenderer(renderer, backend);\n cityMapper.renderers.delete(map);\n for (key of ['_layers', '_sceneOrigin', '_size', '_zoomLevel', '_cursor']) delete backend[key];\n }\n } else update(shared);\n backend._shared = backend.renderer = backend.scene = backend.camera = null;\n}\n", "import { releaseArea } from '../sources/releaseArea.js';\nimport { updateArea } from \"../sources/updateArea.js\";\n\n/** GeoJSON source areas: loading, building and releasing. */\n\nexport function onTerrainChange(layer) {\n if (!layer._map) return;\n let area;\n for (area of layer._areas.values()) {\n releaseArea(layer, area);\n }\n layer._areas.clear();\n updateArea(layer);\n}\n", "export function hasUnsupportedPrimitives(meshes) {\n if (!meshes) return false;\n let mesh, primitive;\n for (mesh of meshes) {\n for (primitive of mesh.primitives) {\n if (primitive.targets || (primitive.mode !== undefined && primitive.mode !== 4)) return true;\n }\n }\n return false;\n}\n", "/** Decode a static glTF JSON document or GLB v2 container. */\nimport { hasUnsupportedPrimitives } from './hasUnsupportedPrimitives.js';\n\nexport function decodeModel(data) {\n const view = new DataView(data), decoder = new TextDecoder();\n let description;\n let offset, length, type, chunk;\n if (view.getUint32(0, true) === 0x46546c67) {\n // Decode GLB v2 chunks; unknown types are skipped.\n if (view.getUint32(4, true) !== 2 || view.getUint32(8, true) !== data.byteLength) {\n throw new Error('Invalid GLB header');\n }\n let binary;\n for (offset = 12; offset < data.byteLength;) {\n if (offset + 8 > data.byteLength) {\n throw new Error('Truncated GLB chunk');\n }\n length = view.getUint32(offset, true), type = view.getUint32(offset + 4, true);\n offset += 8;\n if (offset + length > data.byteLength) {\n throw new Error('Truncated GLB data');\n }\n chunk = data.slice(offset, offset + length);\n if (type === 0x4e4f534a) {\n description = JSON.parse(decoder.decode(chunk));\n }\n if (type === 0x004e4942) {\n binary = chunk;\n }\n offset += length;\n }\n if (!description) {\n throw new Error('Missing GLB JSON');\n }\n if (binary) {\n description.buffers[0].binary = binary;\n }\n } else {\n description = JSON.parse(decoder.decode(data));\n }\n if (description.skins?.length || description.animations?.length || description.extensionsRequired?.length || hasUnsupportedPrimitives(description.meshes)) {\n throw new Error('Layer3D supports static triangle glTF models without required extensions');\n }\n return description;\n}\n", "/** Area-weighted vertex normals, for indexed or non-indexed triangles. */\n\nexport function vertexNormals(p, indices) {\n // Accumulate area-weighted face normals for shared vertices, then normalize.\n const normals = new Float32Array(p.length);\n let i, a, b, c, u, v, j, n, index, length;\n for (i = 0; i < (indices?.length || p.length / 3); i += 3) {\n a = indices ? indices[i] : i, b = indices ? indices[i + 1] : i + 1, c = indices ? indices[i + 2] : i + 2;\n u = [], v = [];\n for (j = 0; j < 3; j++) {\n u.push(p[b * 3 + j] - p[a * 3 + j]);\n v.push(p[c * 3 + j] - p[a * 3 + j]);\n }\n n = [\n u[1] * v[2] - u[2] * v[1],\n u[2] * v[0] - u[0] * v[2],\n u[0] * v[1] - u[1] * v[0]\n ];\n for (index of [a, b, c]) {\n for (j = 0; j < 3; j++) {\n normals[index * 3 + j] += n[j];\n }\n }\n }\n for (i = 0; i < normals.length; i += 3) {\n length = Math.hypot(...normals.subarray(i, i + 3)) || 1;\n for (j = 0; j < 3; j++) {\n normals[i + j] /= length;\n }\n }\n return normals;\n}\n", "export function collectMeshes(node, meshes) {\n if (node.geometry?.attributes.position) meshes.push(node);\n let child;\n for (child of node.children) collectMeshes(child, meshes);\n}\n", "import { computeBounds } from './computeBounds.js';\nimport { getElevation } from '../terrain/getElevation.js';\nimport { update } from '../scene/update.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { vertexNormals } from './vertexNormals.js';\nimport { collectMeshes } from '../collision/collectMeshes.js';\nimport { HEIGHT } from '../constants/HEIGHT.js';\n\nexport function conformModelToTerrain(layer, terrain) {\n if (!layer.model) return;\n const meshes = [];\n collectMeshes(layer.model, meshes);\n let mesh, positions, geometry, position, normals, attribute, normal, world, inverse, i, x, y, z;\n let worldY, weight, worldX, worldZ, point, elevation, offset;\n if (!terrain?._terrainReady || !layer.options.terrainConform) {\n for (mesh of meshes) {\n positions = mesh.geometry._terrainBasePositions;\n if (!positions) continue;\n geometry = mesh.geometry, position = geometry.attributes.position;\n position.data.set(positions);\n mesh.device.queue.writeBuffer(position.buffer, 0, positions);\n normals = geometry._terrainBaseNormals;\n if (normals) {\n geometry.attributes.normal.data.set(normals);\n mesh.device.queue.writeBuffer(geometry.attributes.normal.buffer, 0, normals);\n }\n computeBounds(geometry);\n }\n return;\n }\n\n updateWorldMatrix(layer.root);\n const map = layer._map, crs = map.options.crs;\n const origin = crs.project(layer._shared._sceneOrigin);\n const metres = Math.cos(layer._shared._sceneOrigin.lat * Math.PI / 180);\n const pixelScale = crs.scale(terrain._terrainZoom);\n\n for (mesh of meshes) {\n geometry = mesh.geometry, attribute = geometry.attributes.position;\n geometry._terrainBasePositions ||= attribute.data.slice();\n normal = geometry.attributes.normal;\n geometry._terrainBaseNormals ||= normal.data.slice();\n attribute.data.set(geometry._terrainBasePositions);\n world = mesh.worldMatrix, inverse = new DOMMatrix(world).inverse().toFloat64Array();\n for (i = 0; i < attribute.data.length; i += 3) {\n x = attribute.data[i], y = attribute.data[i + 1], z = attribute.data[i + 2];\n worldY = world[1] * x + world[5] * y + world[9] * z + world[13];\n weight = Math.max(0, Math.min(1, 1 - (worldY - layer.root.position[1]) / HEIGHT));\n if (!weight) continue;\n worldX = world[0] * x + world[4] * y + world[8] * z + world[12];\n worldZ = world[2] * x + world[6] * y + world[10] * z + world[14];\n point = crs.transformation.transform(new L.Point(\n origin.x + worldX / metres, origin.y - worldZ / metres), pixelScale);\n elevation = getElevation(terrain, point);\n if (!Number.isFinite(elevation)) continue;\n offset = (elevation - worldY) * weight;\n attribute.data[i] += inverse[4] * offset;\n attribute.data[i + 1] += inverse[5] * offset;\n attribute.data[i + 2] += inverse[6] * offset;\n }\n mesh.device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n normal.data.set(vertexNormals(attribute.data, geometry.attributes.index?.data));\n mesh.device.queue.writeBuffer(normal.buffer, 0, normal.data);\n computeBounds(geometry);\n }\n update(layer);\n}\n", "export async function loadBuffer(buffer, directory) {\r\n if (buffer.binary) return;\r\n const response = await fetch(new URL(buffer.uri, directory).href);\r\n if (!response.ok) throw new Error(`Unable to load model buffer: HTTP ${response.status}`);\r\n buffer.binary = await response.arrayBuffer();\r\n}\r\n", "export async function loadImage(description, directory, image) {\r\n let blob;\r\n if (image.bufferView !== undefined) {\r\n const view = description.bufferViews[image.bufferView];\r\n const buffer = description.buffers[view.buffer].binary;\r\n blob = new Blob([buffer.slice(view.byteOffset || 0, (view.byteOffset || 0) + view.byteLength)],\r\n { type: image.mimeType });\r\n } else {\r\n const response = await fetch(new URL(image.uri, directory).href);\r\n if (!response.ok) throw new Error(`Unable to load model texture: HTTP ${response.status}`);\r\n blob = await response.blob();\r\n }\r\n // Preserve straight alpha and raw samples; GPU sRGB formats do color decoding.\r\n return createImageBitmap(blob, { premultiplyAlpha: 'none', colorSpaceConversion: 'none' });\r\n}\r\n", "/** Translate glTF sampler constants into WebGPU sampler options. */\n\nexport function textureSampler(sampler) {\n return {\n addressModeU: sampler.wrapS === 33071 ? 'clamp-to-edge' : sampler.wrapS === 33648 ? 'mirror-repeat' : 'repeat',\n addressModeV: sampler.wrapT === 33071 ? 'clamp-to-edge' : sampler.wrapT === 33648 ? 'mirror-repeat' : 'repeat',\n magFilter: sampler.magFilter === 9728 ? 'nearest' : 'linear',\n minFilter: sampler.minFilter === 9728 || sampler.minFilter === 9984 || sampler.minFilter === 9986 ? 'nearest' : 'linear',\n };\n}\n", "import { textureSampler } from './textureSampler.js';\r\n\r\nexport function textureFor(context, reference, color = false) {\r\n const { backend, description, images, textures } = context;\r\n if (!reference) return null;\r\n if ((reference.texCoord || 0) !== 0 || reference.extensions) {\r\n throw new Error('Model textures currently require untransformed TEXCOORD_0 UVs');\r\n }\r\n const device = backend.renderer.device;\r\n // A glTF image may serve both color and data maps: those cannot share a GPU format.\r\n const key = `${reference.index}:${color}`;\r\n if (!textures.has(key)) {\r\n const texture = description.textures[reference.index];\r\n const sampler = description.samplers?.[texture.sampler] || {};\r\n const image = images[texture.source];\r\n const format = color ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n const samplerOptions = textureSampler(sampler);\r\n textures.set(key, {\r\n device,\r\n texture: device.createTexture({\r\n size: [image.width, image.height],\r\n format,\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler(samplerOptions),\r\n samplerOptions,\r\n format,\r\n srgb: color,\r\n image,\r\n flipY: false,\r\n uploaded: null,\r\n });\r\n }\r\n return textures.get(key);\r\n}\r\n", "import { textureFor } from './textureFor.js';\r\n\r\nexport function materialFor(context, material) {\r\n const { backend } = context;\r\n const pbr = material.pbrMetallicRoughness || {};\r\n return {\r\n color: (pbr.baseColorFactor || [1, 1, 1, 1]).slice(0, 3),\r\n opacity: pbr.baseColorFactor?.[3] ?? 1,\r\n metallic: pbr.metallicFactor ?? 1,\r\n roughness: pbr.roughnessFactor ?? 1,\r\n baseTexture: textureFor(context, pbr.baseColorTexture, true),\r\n metalTexture: textureFor(context, pbr.metallicRoughnessTexture),\r\n emissiveTexture: textureFor(context, material.emissiveTexture, true),\r\n occlusionTexture: textureFor(context, material.occlusionTexture),\r\n emissive: material.emissiveFactor || [0, 0, 0],\r\n occlusionStrength: material.occlusionTexture?.strength ?? 1,\r\n alphaMode: backend.options.alphaMode || material.alphaMode || 'OPAQUE',\r\n alphaCutoff: material.alphaCutoff ?? 0.5,\r\n doubleSided: material.doubleSided,\r\n };\r\n}\r\n", "/** glTF quaternion/translation/scale to a column-major matrix. */\n\nexport function nodeMatrix(spec) {\n if (spec.matrix) return Array.from(spec.matrix);\n // glTF stores quaternions [x,y,z,w]; convert directly to a scaled column-major matrix.\n const [x, y, z, w] = spec.rotation || [0, 0, 0, 1], [sx, sy, sz] = spec.scale || [1, 1, 1];\n return [\n (1 - 2 * (y * y + z * z)) * sx,\n 2 * (x * y + z * w) * sx,\n 2 * (x * z - y * w) * sx,\n 0,\n 2 * (x * y - z * w) * sy,\n (1 - 2 * (x * x + z * z)) * sy,\n 2 * (y * z + x * w) * sy, 0,\n 2 * (x * z + y * w) * sz,\n 2 * (y * z - x * w) * sz,\n (1 - 2 * (x * x + y * y)) * sz,\n 0,\n ...(spec.translation || [0, 0, 0]),\n 1,\n ];\n}\n", "export const types = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array,\n};\n", "export const sizes = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4 };\n", "export function readAccessorValues(description, Type, size, data, accessorCount, indices, viewIndex, offset, count, stride) {\n const view = description.bufferViews[viewIndex], bytes = Type.BYTES_PER_ELEMENT;\n const buffer = description.buffers[view.buffer].binary;\n stride ||= size * bytes;\n if (!buffer || stride < size * bytes || offset < 0 ||\n (view.byteOffset || 0) + view.byteLength > buffer.byteLength ||\n (count - 1) * stride + size * bytes + offset > view.byteLength) throw new Error('glTF accessor outside buffer view');\n let i, values, output;\n for (i = 0; i < count; i++) {\n values = new Type(buffer.slice((view.byteOffset || 0) + offset + i * stride,\n (view.byteOffset || 0) + offset + i * stride + size * bytes));\n output = indices ? indices[i] : i;\n if (indices && output >= accessorCount) throw new Error('Invalid sparse glTF index');\n data.set(values, output * size);\n }\n}\n", "import { types } from \"../constants/accessorTypes.js\";\nimport { sizes } from \"../constants/accessorSizes.js\";\nimport { readAccessorValues } from './readAccessorValues.js';\n\n/** Decode packed, interleaved, normalized or sparse glTF accessor data. */\n\nexport function readAccessor(description, index) {\n const spec = description.accessors[index], Type = types[spec.componentType], size = sizes[spec.type];\n if (!Type || !size || !Number.isInteger(spec.count) || spec.count < 0) {\n throw new Error('Invalid glTF accessor');\n }\n const data = new Type(spec.count * size);\n if (spec.bufferView !== undefined) {\n readAccessorValues(\n description, Type, size, data, spec.count, null,\n spec.bufferView,\n spec.byteOffset || 0,\n spec.count,\n description.bufferViews[spec.bufferView].byteStride\n );\n }\n if (spec.sparse) {\n const sparse = spec.sparse, Index = types[sparse.indices.componentType];\n if (![Uint8Array, Uint16Array, Uint32Array].includes(Index)) {\n throw new Error('Invalid sparse glTF indices');\n }\n const view = description.bufferViews[sparse.indices.bufferView];\n const offset = (view.byteOffset || 0) + (sparse.indices.byteOffset || 0);\n if (sparse.count > spec.count || (sparse.indices.byteOffset || 0) + sparse.count * Index.BYTES_PER_ELEMENT > view.byteLength) {\n throw new Error('Invalid sparse glTF indices');\n }\n const indices = new Index(description.buffers[view.buffer].binary.slice(offset, offset + sparse.count * Index.BYTES_PER_ELEMENT));\n readAccessorValues(\n description, Type, size, data, spec.count, indices,\n sparse.values.bufferView,\n sparse.values.byteOffset || 0,\n sparse.count,\n 0\n );\n }\n if (spec.componentType === 5126) {\n return { data, size };\n }\n const normalized = new Float32Array(data.length);\n // Normalization is a glTF accessor rule, not sRGB conversion; indices stay integers.\n let i;\n for (i = 0; i < data.length; i++) {\n normalized[i] = spec.normalized\n ? Math.max(-1, data[i] / (Type === Int8Array ? 127 : Type === Int16Array ? 32767 : Type === Uint8Array ? 255 : Type === Uint32Array ? 4294967295 : 65535))\n : data[i];\n }\n return { data: normalized, size, indices: data };\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { nodeMatrix } from './nodeMatrix.js';\nimport { readAccessor } from './readAccessor.js';\nimport { setParent } from '../scene/setParent.js';\nimport { vertexNormals } from '../geometry/vertexNormals.js';\nimport { createProgram } from '../rendering/createProgram.js';\n\nexport function modelNode(context, index) {\n const { backend, description, materials, active, resources } = context;\n // Track only the recursion path: shared mesh references are valid, cycles are not.\n if (active.has(index)) throw new Error('Cyclic glTF nodes');\n const spec = description.nodes[index];\n if (!spec) throw new Error('Invalid glTF node');\n active.add(index);\n const group = {\n ...emptyNode(),\n name: spec.name\n };\n group.matrix = nodeMatrix(spec);\n let primitive, attributes, semantic, name, vertexCount, attribute, index2, i, normals, style, program;\n let device, geometry, mesh, child;\n if (spec.mesh !== undefined) {\n for (primitive of description.meshes[spec.mesh].primitives) {\n attributes = {};\n for ([semantic, name] of [['POSITION', 'position'], ['NORMAL', 'normal'], ['TEXCOORD_0', 'uv']]) {\n if (primitive.attributes[semantic] !== undefined) attributes[name] = readAccessor(description, primitive.attributes[semantic]);\n }\n if (!attributes.position) throw new Error('glTF mesh has no positions');\n vertexCount = attributes.position.data.length / 3;\n if (attributes.position.size !== 3 || vertexCount < 3) throw new Error('Invalid glTF vertex attributes');\n for (attribute of Object.values(attributes)) {\n if (attribute.data.length / attribute.size !== vertexCount) throw new Error('Invalid glTF vertex attributes');\n }\n if (primitive.indices !== undefined) {\n index2 = readAccessor(description, primitive.indices);\n attributes.index = { size: 1, data: index2.indices };\n if (!(index2.indices instanceof Uint8Array || index2.indices instanceof Uint16Array || index2.indices instanceof Uint32Array) ||\n index2.size !== 1 || index2.indices.length % 3) throw new Error('Invalid glTF triangle indices');\n for (i of index2.indices) {\n if (i >= vertexCount) throw new Error('Invalid glTF triangle indices');\n }\n }\n if (!attributes.index && vertexCount % 3) throw new Error('Incomplete glTF triangle');\n if (!attributes.normal) {\n normals = vertexNormals(attributes.position.data, attributes.index?.data);\n attributes.normal = { size: 3, data: normals };\n }\n style = materials[primitive.material] || { color: [1, 1, 1], metallic: 1 };\n if ((style.baseTexture || style.metalTexture || style.emissiveTexture || style.occlusionTexture) && !attributes.uv) {\n throw new Error('Textured model mesh requires UV coordinates');\n }\n program = createProgram(backend, style);\n resources.push(program);\n device = backend.renderer.device;\n if (attributes.index?.data instanceof Uint8Array) {\n attributes.index.data = Uint16Array.from(attributes.index.data);\n }\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.size ||= 1;\n attribute.count = attribute.data.length / attribute.size;\n attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';\n attribute.buffer = device.createBuffer({\n size: Math.max(4, attribute.data.byteLength),\n usage: name === 'index'\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n geometry = {\n device,\n attributes,\n drawRange: { start: 0, count: attributes.index?.count || attributes.position.count },\n };\n resources.push(geometry);\n mesh = {\n ...emptyNode(),\n device,\n geometry,\n program,\n fadeDuration: 250,\n id: cityMapper.nextId++,\n renderOrder: 0\n };\n mesh.name = description.meshes[spec.mesh].name; mesh.extras = spec.extras || {};\n setParent(mesh, group);\n }\n }\n for (child of spec.children || []) setParent(modelNode(context, child), group);\n active.delete(index);\n return group;\n}\n", "import { decodeModel } from './decodeModel.js';\nimport { setParent } from '../scene/setParent.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\nimport { loadBuffer } from './loadBuffer.js';\nimport { loadImage } from './loadImage.js';\nimport { materialFor } from './materialFor.js';\nimport { modelNode } from './modelNode.js';\n\n/** glTF/GLB model loading. */\n/** Load the configured GLB/glTF (static triangles) under `root`; GPU resources need attachment. */\n\nexport async function loadModel(backend) {\n await backend._added.promise;\n const url = new URL(backend.modelUrl, document.baseURI).href;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Unable to load model: HTTP ${response.status}`);\n }\n const data = await response.arrayBuffer();\n const description = decodeModel(data);\n const directory = new URL('.', url).href;\n const bufferRequests = [];\n let buffer, image, material, index, resource, attribute, node;\n for (buffer of description.buffers || []) bufferRequests.push(loadBuffer(buffer, directory));\n await Promise.all(bufferRequests);\n await backend._added.promise;\n const imageRequests = [];\n for (image of description.images || []) imageRequests.push(loadImage(description, directory, image));\n const images = await Promise.all(imageRequests);\n await backend._map?._terrain3D?._terrainPromise;\n const context = { backend, description, images, textures: new Map(), materials: [], active: new Set(), resources: [] };\n // Convert glTF materials directly to the shader's retained CPU styles.\n for (material of description.materials || []) context.materials.push(materialFor(context, material));\n const scene = description.scenes?.[description.scene || 0];\n if (!scene) throw new Error('Missing glTF scene');\n const nodes = [];\n try {\n for (index of scene.nodes) nodes.push(modelNode(context, index));\n } catch (error) {\n // Parsing can fail after earlier primitives allocated buffers/programs.\n for (resource of context.resources) {\n if (resource.attributes) {\n for (attribute of Object.values(resource.attributes)) attribute.buffer.destroy();\n } else {\n resource.pipelineCache.clear();\n }\n }\n throw error;\n }\n const model = {\n ...emptyNode(),\n id: url,\n extras: description.extras || {},\n };\n if (!nodes.length) throw new Error('Expected a glTF model with a non-empty scene');\n for (node of nodes) setParent(node, model);\n backend.model = model;\n if (backend.options.rotation) {\n const [x, y = x, z = x] = backend.options.rotation;\n backend.model.rotation[0] = x; backend.model.rotation[1] = y; backend.model.rotation[2] = z;\n }\n if (backend.options.scale) {\n const [x, y = x, z = x] = backend.options.scale;\n backend.model.scale[0] = x; backend.model.scale[1] = y; backend.model.scale[2] = z;\n }\n setParent(backend.model, backend.root);\n conformModelToTerrain(backend, backend._map?._terrain3D);\n}\n", "import { updateArea } from '../sources/updateArea.js';\nimport { onTerrainChange } from '../terrain/onTerrainChange.js';\n\nexport function get3DEvents(layer) {\r\n const events = {};\r\n if (layer.url) {\r\n events.moveend = events.zoomend = events.rotate = events.pitch = events.resize = updateArea.bind(null, layer);\r\n }\r\n if (layer._geojson || layer.url) {\r\n events.terrainchange = onTerrainChange.bind(null, layer);\r\n }\r\n return events;\r\n}\n", "import { emptyNode } from './emptyNode.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { attach } from './attach.js';\nimport { loadModel } from '../models/loadModel.js';\nimport { update } from './update.js';\n\nexport async function ready3D(layer) {\r\n try {\r\n layer.root = emptyNode();\r\n layer.raycaster = { origin: [0, 0, 0], direction: [0, 0, 0] };\r\n if (layer.url || layer._geojson) {\r\n layer.group = layer.root;\r\n if (layer.url) layer.header = await getHeader(layer);\r\n }\r\n if (layer._map) {\r\n await attach(layer, layer._map);\r\n layer._added.resolve();\r\n }\r\n if (layer.modelUrl) await loadModel(layer);\r\n if (layer._shared) update(layer);\r\n layer.fire('ready');\r\n } catch (error) {\r\n layer.fire('error', { error });\r\n }\r\n}\n", "import { attach } from './attach.js';\nimport { emptyNode } from './emptyNode.js';\nimport { onAdd3DLayer } from './onAdd3DLayer.js';\nimport { onRemove3DLayer } from './onRemove3DLayer.js';\nimport { update } from './update.js';\nimport { updateArea } from '../sources/updateArea.js';\nimport { onTerrainChange } from '../terrain/onTerrainChange.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { loadModel } from '../models/loadModel.js';\nimport { get3DEvents } from './get3DEvents.js';\nimport { ready3D } from './ready3D.js';\n\nexport function init3D(layer, options = {}) {\n layer._3d = true;\n L.Util.setOptions(layer, { ariaLabel: '3D scene', ...options });\n layer.onAdd = onAdd3DLayer.bind(null, layer);\n layer.onRemove = onRemove3DLayer.bind(null, layer);\n layer.getEvents = get3DEvents.bind(null, layer);\n const isModel = !layer._geojson && /\\.(glb|gltf)(?:[?#]|$)/i.test(layer.options.url);\n layer.modelUrl = isModel ? layer.options.url : null;\n layer.url = layer.options.url && !isModel && !layer._geojson ? new URL(layer.options.url, document.baseURI).href : null;\n layer._directories = new Map();\n if (layer.options.center) {\n layer.location = new L.LatLng(layer.options.center[0], layer.options.center[1]);\n }\n layer._areas = new Map();\n layer._inflight = 0;\n layer._added = Promise.withResolvers();\n queueMicrotask(ready3D.bind(null, layer));\n}\n", "\n\nexport function isLoading(layer) {\r\n return layer._loadingTiles > 0;\r\n}\n", "\n\nexport function comparePendingTiles(a, b) {\r\n return a.tile.coords.z - b.tile.coords.z || a.distance - b.distance;\r\n}\n", "/** Float32 DEM atlas; missing samples retain the shader no-data sentinel. */\n\nexport function terrainAtlas(tiles, bounds) {\n const columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;\n const elevations = new Float32Array(columns * rows * 65536).fill(-1e9);\n let low = Infinity, high = -Infinity;\n let key, values, coordinates, x, y, start, row, column, value;\n for ([key, values] of tiles) {\n coordinates = key.split('/');\n x = Number(coordinates[0]), y = Number(coordinates[1]);\n start = (y - bounds.min.y) * 256 * columns * 256 + (x - bounds.min.x) * 256;\n for (row = 0; row < 256; row++) {\n for (column = 0; column < 256; column++) {\n value = values[row * 256 + column];\n if (!Number.isFinite(value) || value <= -1000) continue;\n elevations[start + row * columns * 256 + column] = value;\n low = Math.min(low, value);\n high = Math.max(high, value);\n }\n }\n }\n return { elevations, low, high };\n}\n", "/** Unit tile grid; the vertex shader supplies the elevation. */\n\nexport function terrainGrid(divisions) {\n const positions = [], normals = [], uvs = [], indices = [];\n let row, column, a, b, c, d;\n for (row = 0; row <= divisions; row++) {\n for (column = 0; column <= divisions; column++) {\n positions.push(column / divisions, 0, row / divisions);\n normals.push(0, 1, 0);\n uvs.push(column / divisions, row / divisions);\n if (row < divisions && column < divisions) {\n a = row * (divisions + 1) + column;\n b = a + 1, c = a + divisions + 1, d = c + 1;\n indices.push(a, c, b, b, c, d);\n }\n }\n }\n return {\n position: { size: 3, data: new Float32Array(positions) },\n normal: { size: 3, data: new Float32Array(normals) },\n uv: { size: 2, data: new Float32Array(uvs) },\n index: { data: new Uint16Array(indices) },\n };\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { createProgram } from '../rendering/createProgram.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { terrainAtlas } from '../terrain/terrainAtlas.js';\nimport { terrainGrid } from '../terrain/terrainGrid.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport async function addRasterTile(backend, layer, coords, tile) {\n const ready = await backend._terrainPromise;\n if (!ready || !backend._map || backend._map._terrain3D !== backend || layer._terrain3D !== backend ||\n tile.request.signal.aborted || !layer._rasterTiles.has(`${coords.z}/${coords.x}/${coords.y}`) ||\n backend._rasterTiles.has(tile)) {\n return;\n }\n // Match DEM pixel spacing, capped at 64 subdivisions per tile.\n const divisions = Math.max(1, Math.min(64, 256 / 2 ** (coords.z - backend._terrainZoom)));\n const map = backend._map, crs = map.options.crs;\n const origin = crs.project(backend.location), metres = Math.cos(backend.location.lat * Math.PI / 180);\n // Tile pixels map linearly to projected metres: one scaled unit grid per tile, elevation in the vertex shader.\n const scale = crs.scale(coords.z), terrainScale = 2 ** (backend._terrainZoom - coords.z);\n const corner = crs.transformation.untransform(new L.Point(coords.x * 256, coords.y * 256), scale);\n const opposite = crs.transformation.untransform(new L.Point((coords.x + 1) * 256, (coords.y + 1) * 256), scale);\n const device = backend.renderer.device;\n const texture = tile.texture;\n if (!backend._rasterProgram || backend._rasterProgram.device !== device) {\n // DEM atlas over the archive's tile grid; invalid or missing samples become -1e9 (the shader's no-data).\n // ponytail: one texture, capped by maxTextureDimension2D (32\u00D732 DEM tiles at 8192 px); split it for larger archives.\n const bounds = backend._terrainBounds, columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;\n const { elevations, low, high } = terrainAtlas(backend._terrainTiles, bounds);\n if (backend._dem) destroyTexture(backend, backend._dem.texture);\n backend._dem = {\n texture: device.createTexture({\n size: [columns * 256, rows * 256],\n format: 'r32float',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n }),\n low: Number.isFinite(low) ? low : backend._terrainOriginElevation,\n high: Number.isFinite(high) ? high : backend._terrainOriginElevation,\n };\n device.queue.writeTexture({ texture: backend._dem.texture }, elevations,\n { bytesPerRow: columns * 1024 }, [columns * 256, rows * 256]);\n backend._terrainGrids = new Map();\n backend._rasterProgram = createProgram(backend, {\n baseTexture: texture,\n unlit: true,\n terrain: backend._dem,\n alphaMode: 'BLEND',\n depthWrite: true,\n });\n }\n let attributes = backend._terrainGrids.get(divisions);\n let name, attribute;\n if (!attributes) {\n attributes = terrainGrid(divisions);\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.size ||= 1;\n attribute.count = attribute.data.length / attribute.size;\n attribute.indexFormat = 'uint16';\n attribute.buffer = device.createBuffer({\n size: Math.max(4, attribute.data.byteLength),\n usage: name === 'index'\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n backend._terrainGrids.set(divisions, attributes);\n }\n const base = backend._terrainOriginElevation;\n const bottom = Math.min(backend._dem.low, base) - base, top = Math.max(backend._dem.high, base) - base;\n const sizeX = (opposite.x - corner.x) * metres, sizeZ = -(opposite.y - corner.y) * metres;\n // ponytail: ray picking sees the flat unit grid; read the DEM back if terrain must be pickable.\n const geometry = {\n device,\n attributes,\n drawRange: { start: 0, count: attributes.index.count },\n // Local bounds whose radius, scaled by the largest axis, still covers the displaced tile.\n bounds: {\n min: [0, bottom, 0], max: [1, top, 1], center: [0.5, (bottom + top) / 2, 0.5],\n radius: Math.hypot(sizeX, top - bottom, sizeZ) / 2 / Math.max(sizeX, 1, sizeZ),\n },\n };\n const mesh = {\n position: [(corner.x - origin.x) * metres, 0, -(corner.y - origin.y) * metres],\n rotation: [0, 0, 0],\n scale: [sizeX, 1, sizeZ],\n worldMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n children: [],\n visible: true,\n device,\n geometry,\n program: backend._rasterProgram,\n texture,\n // DEM pixel of the tile's corner, DEM pixels per tile, and the elevation at the layer origin.\n terrain: [\n coords.x * 256 * terrainScale - backend._terrainBounds.min.x * 256,\n coords.y * 256 * terrainScale - backend._terrainBounds.min.y * 256,\n 256 * terrainScale,\n base,\n ],\n tile,\n opacity: layer.options.opacity ?? 1,\n id: cityMapper.nextId++,\n renderOrder: layer.options.zIndex || 0,\n fadeDuration: 250,\n fadeStart: tile.loadedAt,\n ground: true,\n };\n tile.mesh.visible = false;\n setParent(mesh, backend.root);\n update(backend);\n backend._rasterTiles.set(tile, mesh);\n}\n", "import { addRasterTile } from './addRasterTile.js';\n\nexport async function registerTerrainTile(backend, coords, tile) {\r\n if (backend._terrain3D && tile.done && !tile.request.signal.aborted &&\r\n backend._rasterTiles.get(`${coords.z}/${coords.x}/${coords.y}`) === tile) {\r\n try {\r\n await addRasterTile(backend._terrain3D, backend, coords, tile);\r\n } catch (error) {\r\n backend.fire('tileerror', { tile, coords, error });\r\n }\r\n }\r\n}\n", "\n\nexport function createGeometry(device) {\n const attributes = {\n position: { size: 3, data: new Float32Array([0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1]) },\n normal: { size: 3, data: new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]) },\n uv: { size: 2, data: new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]) },\n index: { data: new Uint16Array([0, 2, 1, 1, 2, 3]) },\n };\n let name, attribute;\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.count = attribute.data.length / (attribute.size || 1);\n attribute.indexFormat = 'uint16';\n attribute.buffer = device.createBuffer({\n size: attribute.data.byteLength,\n usage: name === 'index' ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n return { device, attributes, drawRange: { start: 0, count: attributes.index.count } };\n}\n", "import { cityMapper } from \"../constants/cityMapper.js\";\nimport { createProgram } from \"../rendering/createProgram.js\";\nimport { setParent } from \"../scene/setParent.js\";\nimport { TILE_SIZE } from \"../constants/TILE_SIZE.js\";\nimport { createGeometry } from './createGeometry.js';\n\nexport function createRasterMesh(backend, tile) {\r\n const device = backend.renderer.device;\r\n const texture = {\r\n device,\r\n texture: device.createTexture({\r\n size: [tile.image.width, tile.image.height],\r\n format: 'rgba8unorm',\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler({ addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\r\n magFilter: 'linear', minFilter: 'linear' }),\r\n image: tile.image, format: 'rgba8unorm', srgb: false, uploaded: null,\r\n };\r\n if (!backend._rasterProgram) {\r\n backend._rasterProgram = createProgram(backend, {\r\n baseTexture: texture, unlit: true, alphaMode: 'BLEND',\r\n });\r\n }\r\n if (!backend._rasterGeometry) backend._rasterGeometry = createGeometry(device);\r\n const { coords } = tile;\r\n const crs = backend._map.options.crs;\r\n const origin = crs.project(backend.location);\r\n const metres = Math.cos(backend.location.lat * Math.PI / 180);\r\n const scale = crs.scale(coords.z);\r\n const corner = crs.transformation.untransform(new L.Point(coords.x * TILE_SIZE, coords.y * TILE_SIZE), scale);\r\n const opposite = crs.transformation.untransform(new L.Point((coords.x + 1) * TILE_SIZE, (coords.y + 1) * TILE_SIZE), scale);\r\n const sizeX = (opposite.x - corner.x) * metres;\r\n const sizeZ = -(opposite.y - corner.y) * metres;\r\n tile.texture = texture;\r\n tile.mesh = {\r\n position: [(corner.x - origin.x) * metres, 0, -(corner.y - origin.y) * metres],\r\n rotation: [0, 0, 0],\r\n scale: [sizeX, 1, sizeZ],\r\n worldMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\r\n children: [], visible: true, device, geometry: backend._rasterGeometry,\r\n program: backend._rasterProgram, texture,\r\n opacity: backend.options.opacity, id: cityMapper.nextId++,\r\n renderOrder: backend.options.zIndex || 0, tile, fadeDuration: 250, ground: true,\r\n };\r\n setParent(tile.mesh, backend.root);\r\n}\n", "import { update } from \"../scene/update.js\";\nimport { registerTerrainTile } from \"./registerTerrainTile.js\";\nimport { pruneRasterTiles } from \"./pruneRasterTiles.js\";\nimport { pumpRasterTiles } from './pumpRasterTiles.js';\nimport { createRasterMesh } from './createRasterMesh.js';\n\nexport async function finishRasterTile(backend, tile) {\r\n try {\r\n await backend.ready;\r\n const result = await backend.options.archive.getZxy(\r\n tile.coords.z, tile.coords.x, tile.coords.y, tile.request.signal\r\n );\r\n if (tile.request.signal.aborted) return;\r\n if (!result) throw new Error(`Tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y} is not in the offline archive`);\r\n try {\r\n tile.image = await createImageBitmap(new Blob([result.data]));\r\n } catch {\r\n throw new Error(`Unable to decode tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`);\r\n }\r\n if (tile.request.signal.aborted) {\r\n tile.image.close();\r\n tile.image = null;\r\n return;\r\n }\r\n createRasterMesh(backend, tile);\r\n tile.loadedAt = performance.now();\r\n tile.done = true;\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n registerTerrainTile(backend, tile.coords, tile);\r\n backend.fire('tileload', { tile, coords: tile.coords });\r\n update(backend);\r\n } catch (error) {\r\n if (tile.request.signal.aborted) return;\r\n tile.error = error.message;\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n backend.fire('tileerror', { tile, coords: tile.coords, error });\r\n backend.fire('error', { error, coords: tile.coords });\r\n } finally {\r\n backend._loadingTiles--;\r\n if (backend._map) {\r\n pumpRasterTiles(backend);\r\n pruneRasterTiles(backend);\r\n if (!backend._loadingTiles) backend.fire('load');\r\n update(backend);\r\n }\r\n }\r\n}\n", "import { finishRasterTile } from './finishRasterTile.js';\n\nexport function loadRasterTile(backend, tile) {\r\n tile.started = true;\r\n const first = backend._loadingTiles === 0;\r\n backend._loadingTiles++;\r\n backend.fire('tileloadstart', { tile, coords: tile.coords });\r\n if (first) backend.fire('loading');\r\n return finishRasterTile(backend, tile);\r\n}\n", "import { TILE_SIZE } from \"../constants/TILE_SIZE.js\";\nimport { comparePendingTiles } from './comparePendingTiles.js';\nimport { loadRasterTile } from './loadRasterTile.js';\n\nexport function pumpRasterTiles(backend) {\n const map = backend._map;\n if (!map) return;\n const center = map.project(map.getCenter(), 0).divideBy(TILE_SIZE);\n const pending = [];\n let tile, coords;\n for (tile of backend._rasterTiles.values()) {\n if (tile.started || tile.request.signal.aborted) continue;\n ({ coords } = tile);\n pending.push({ tile, distance: Math.hypot((coords.x + 0.5) / 2 ** coords.z - center.x,\n (coords.y + 0.5) / 2 ** coords.z - center.y) });\n }\n pending.sort(comparePendingTiles);\n for ({ tile } of pending) {\n if (backend._loadingTiles >= 4) break;\n loadRasterTile(backend, tile);\n }\n}\n", "import { TILE_RADIUS } from '../constants/TILE_RADIUS.js';\nimport { pumpRasterTiles } from './pumpRasterTiles.js';\nimport { TILE_SIZE } from '../constants/TILE_SIZE.js';\nimport { releaseRasterTile } from './releaseRasterTile.js';\nimport { pruneRasterTiles } from './pruneRasterTiles.js';\n\n// ponytail: cap horizon views at 169 tiles; raise the radius if extreme pitches need more.\n\nexport function updateRasterTiles(backend) {\n const map = backend._map;\n if (!map || !backend._shared || !backend.header) return;\n\n const zoom = Math.max(backend.header.minZoom ?? 0, Math.min(\n Math.round(map.getZoom()),\n backend.options.maxZoom,\n backend.options.maxNativeZoom\n ));\n backend._tileZoom = zoom;\n const bounds = map.getBounds();\n const northWest = map.project(bounds.getNorthWest(), zoom).divideBy(TILE_SIZE).floor();\n const southEast = map.project(bounds.getSouthEast(), zoom).divideBy(TILE_SIZE).floor();\n const archiveNorthWest = backend.header.maxLat === undefined || backend.header.minLon === undefined\n ? new L.Point(0, 0)\n : map.project([backend.header.maxLat, backend.header.minLon], zoom).divideBy(TILE_SIZE).floor();\n const archiveSouthEast = backend.header.minLat === undefined || backend.header.maxLon === undefined\n ? new L.Point(2 ** zoom - 1, 2 ** zoom - 1)\n : map.project([backend.header.minLat, backend.header.maxLon], zoom).divideBy(TILE_SIZE).floor();\n const center = map.project(map.getCenter(), zoom).divideBy(TILE_SIZE).floor();\n const wanted = new Map();\n let x, y, key, coords, parent, tile;\n for (x = Math.max(0, northWest.x, archiveNorthWest.x, center.x - TILE_RADIUS);\n x <= Math.min(2 ** zoom - 1, southEast.x, archiveSouthEast.x, center.x + TILE_RADIUS); x++) {\n for (y = Math.max(0, northWest.y, archiveNorthWest.y, center.y - TILE_RADIUS);\n y <= Math.min(2 ** zoom - 1, southEast.y, archiveSouthEast.y, center.y + TILE_RADIUS); y++) {\n wanted.set(`${zoom}/${x}/${y}`, { z: zoom, x, y });\n }\n }\n backend._wantedRasterTiles = new Set(wanted.keys());\n const coverage = new Map();\n const parentZoom = Math.max(backend.header.minZoom ?? 0, zoom - 2), factor = 2 ** (zoom - parentZoom);\n if (parentZoom < zoom) {\n for ([key, coords] of wanted) {\n if (backend._rasterTiles.get(key)?.done) continue;\n parent = { z: parentZoom, x: Math.floor(coords.x / factor), y: Math.floor(coords.y / factor) };\n coverage.set(`${parent.z}/${parent.x}/${parent.y}`, parent);\n }\n }\n const required = new Map([...coverage, ...wanted]);\n for ([key, tile] of backend._rasterTiles) {\n if (!required.has(key) && !tile.done) releaseRasterTile(backend, tile);\n }\n for ([key, coords] of required) {\n if (backend._rasterTiles.has(key)) continue;\n tile = { coords, request: new AbortController(), done: false };\n backend._rasterTiles.set(key, tile);\n }\n pumpRasterTiles(backend);\n pruneRasterTiles(backend);\n}\n", "import { updateRasterTiles } from \"./updateRasterTiles.js\";\n\nexport function getRasterEvents(layer) {\r\n const update = updateRasterTiles.bind(null, layer);\r\n return { moveend: update, zoomend: update, rotate: update, pitch: update, resize: update };\r\n}\n", "import { getHeader } from \"../archives/getHeader.js\";\n\nexport async function readyRaster(layer, archive) {\r\n const header = await archive.getHeader();\r\n layer.options.archive = archive;\r\n layer.header = header;\r\n if (layer.options.maxNativeZoom === undefined) {\r\n layer.options.maxNativeZoom = header.maxZoom;\r\n }\r\n layer.options.maxZoom = Math.max(layer.options.minZoom || 0, layer.options.maxZoom);\r\n layer.fire('ready');\r\n return layer;\r\n}\n", "\n\nexport function reportError(layer, error) {\r\n layer.fire('error', { error });\r\n throw error;\r\n}\n", "import { removeRasterTile } from './removeRasterTile.js';\nimport { setParent } from '../scene/setParent.js';\nimport { registerTerrainTile } from './registerTerrainTile.js';\n\nexport function setRasterTerrain(backend, terrain) {\n if (backend._terrain3D === terrain) return;\n let tile;\n for (tile of backend._rasterTiles.values()) {\n if(backend._terrain3D) removeRasterTile(backend._terrain3D, tile);\n if (tile.mesh) {\n tile.mesh.visible = true;\n setParent(tile.mesh, backend.root);\n }\n }\n backend._terrain3D = terrain || null;\n if (terrain) {\n for (tile of backend._rasterTiles.values()) {\n if (tile.done) registerTerrainTile(backend, tile.coords, tile);\n }\n }\n}\n", "import { setRasterTerrain } from \"./setRasterTerrain.js\";\n\nexport async function finishAttachment(backend, map, attached) {\n try {\n await attached;\n backend._added.resolve();\n setRasterTerrain(backend, map._terrain3D);\n } catch (error) {\n backend.fire('error', { error });\n }\n}\n", "import { updateRasterTiles } from \"./updateRasterTiles.js\";\n\nexport async function updateAttachedTiles(backend, map, attached) {\n try {\n await Promise.all([attached, backend.ready]);\n if (backend._map === map && map.hasLayer(backend)) updateRasterTiles(backend);\n } catch (error) {\n backend.fire('error', { error });\n }\n}\n", "import { finishAttachment } from './finishAttachment.js';\nimport { updateAttachedTiles } from './updateAttachedTiles.js';\nimport { attach } from '../scene/attach.js';\n\nexport function onPMTileAdd(backend, map) {\n if (!backend.location) backend.location = map.getCenter();\n const attached = attach(backend, map);\n finishAttachment(backend, map, attached);\n updateAttachedTiles(backend, map, attached);\n}\n", "import { destroyTexture } from '../rendering/destroyTexture.js';\nimport { releaseRasterTile } from './releaseRasterTile.js';\n\nexport function releaseRasterTiles(backend) {\n let tile, attribute;\n for (tile of backend._rasterTiles.values()) releaseRasterTile(backend, tile);\n backend._rasterProgram?.pipelineCache.clear();\n backend._rasterProgram = null;\n if (backend._rasterGeometry) {\n for (attribute of Object.values(backend._rasterGeometry.attributes)) {\n destroyTexture(backend, attribute.buffer);\n }\n backend._rasterGeometry = null;\n }\n}\n", "import { releaseRasterTiles } from './releaseRasterTiles.js';\nimport { onRemove3DLayer } from '../scene/onRemove3DLayer.js';\n\nexport function onPMTileRemove(backend, map) {\n releaseRasterTiles(backend);\n backend._terrain3D = null;\n onRemove3DLayer(backend, map);\n}\n", "import { update } from '../scene/update.js';\n\nexport function setRasterOpacity(backend, opacity) {\n let tile, terrainMesh;\n for (tile of backend._rasterTiles.values()) {\n if (tile.mesh) tile.mesh.opacity = opacity;\n terrainMesh = backend._terrain3D?._rasterTiles.get(tile);\n if (terrainMesh) terrainMesh.opacity = opacity;\n }\n update(backend);\n}\n", "import { setRasterOpacity } from './setRasterOpacity.js';\n\nexport function setPMTileOpacity(backend, opacity) {\n backend.options.opacity = opacity;\n setRasterOpacity(backend, opacity);\n return backend;\n}\n", "import { update } from '../scene/update.js';\n\nexport function setRasterZIndex(backend, zIndex) {\n let tile, terrainMesh;\n for (tile of backend._rasterTiles.values()) {\n if (tile.mesh) tile.mesh.renderOrder = zIndex;\n terrainMesh = backend._terrain3D?._rasterTiles.get(tile);\n if (terrainMesh) terrainMesh.renderOrder = zIndex;\n }\n update(backend);\n}\n", "import { setRasterZIndex } from './setRasterZIndex.js';\n\nexport function setPMTileZIndex(backend, zIndex) {\n backend.options.zIndex = zIndex;\n setRasterZIndex(backend, zIndex);\n return backend;\n}\n", "import { isLoading } from './isLoading.js';\nimport { getRasterEvents } from './getRasterEvents.js';\nimport { readyRaster } from './readyRaster.js';\nimport { reportError } from './reportError.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { read } from '../archives/read.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { getZxy } from '../archives/getZxy.js';\nimport { onPMTileAdd } from './onPMTileAdd.js';\nimport { onPMTileRemove } from './onPMTileRemove.js';\nimport { getRasterTileSize } from './getRasterTileSize.js';\nimport { setPMTileOpacity } from './setPMTileOpacity.js';\nimport { setPMTileZIndex } from './setPMTileZIndex.js';\n\nexport function initRaster(layer, options) {\n layer._read = read.bind(null, layer);\n layer.getHeader = getHeader.bind(null, layer);\n layer.getZxy = getZxy.bind(null, layer);\n layer.getTileSize = getRasterTileSize;\n layer.isLoading = isLoading.bind(null, layer);\n layer.setOpacity = setPMTileOpacity.bind(null, layer);\n layer.setZIndex = setPMTileZIndex.bind(null, layer);\n layer.onAdd = onPMTileAdd.bind(null, layer);\n layer.onRemove = onPMTileRemove.bind(null, layer);\n layer.getEvents = getRasterEvents.bind(null, layer);\n options = { ariaLabel: 'PMTiles raster', maxZoom: 18, opacity: 1, zIndex: 0, ...options };\n L.Util.setOptions(layer, options);\n layer.root = emptyNode();\n layer._areas = new Map();\n layer._rasterTiles = new Map();\n layer._loadingTiles = 0;\n layer._added = Promise.withResolvers();\n layer.url = new URL(options.url, document.baseURI).href;\n layer._directories = new Map();\n layer.ready = Promise.resolve(layer.options.archive || layer)\n .then(readyRaster.bind(null, layer))\n .catch(reportError.bind(null, layer));\n}\n", "import { releaseArea } from './releaseArea.js';\nimport { updateArea } from './updateArea.js';\n\nexport function setGeoJSONData(layer, data) {\n layer.options.data = data;\n delete layer.options.url;\n let area;\n for (area of layer._areas.values()) releaseArea(layer, area);\n layer._areas.clear();\n updateArea(layer);\n return layer;\n}\n", "import { setRasterTerrain } from '../raster/setRasterTerrain.js';\r\n\r\nexport function clearLayerTerrain(layer) {\r\n if (layer._type === 'pmtiles') setRasterTerrain(layer, null);\r\n}\r\n", "import { destroyTexture } from '../rendering/destroyTexture.js';\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\nimport { removeRasterTile } from '../raster/removeRasterTile.js';\nimport { setTerrainHeight } from './setTerrainHeight.js';\nimport { onRemove3DLayer } from '../scene/onRemove3DLayer.js';\nimport { clearLayerTerrain } from './clearLayerTerrain.js';\n\nexport function onTerrainRemove(layer, map) {\n layer._terrainController?.abort();\n layer._terrainLoading = false;\n layer._terrainReady = false;\n map.eachLayer(clearLayerTerrain);\n let tile, l, grid, attribute;\n for (tile of layer._rasterTiles.keys()) removeRasterTile(layer, tile);\n if (map._terrain3D === layer) delete map._terrain3D;\n for (l of Object.values(map._layers)) {\n conformModelToTerrain(l, null);\n setTerrainHeight(l);\n }\n\n map.fire('terrainchange');\n layer._terrainTiles.clear();\n layer._terrainOriginElevation = 0;\n layer._terrainPromise = null;\n if (layer._rasterProgram) {\n layer._rasterProgram.pipelineCache.clear();\n }\n layer._rasterProgram = null;\n if (layer._dem) destroyTexture(layer, layer._dem.texture);\n layer._dem = null;\n for (grid of layer._terrainGrids?.values() || []) {\n for (attribute of Object.values(grid)) destroyTexture(layer, attribute.buffer);\n }\n layer._terrainGrids = null;\n layer._bridges = null;\n disposeMesh(layer, layer._bridgeMesh);\n layer._bridgeMesh = null;\n onRemove3DLayer(layer, map);\n}\n", "export function local([lng, lat, z], crs, origin, metres, base) {\r\n const p = crs.project(new L.LatLng(lat, lng));\r\n return [(p.x - origin.x) * metres, z - base, -(p.y - origin.y) * metres];\r\n}\r\n", "export function push(position, normal, color, p, n) {\r\n position.push(...p); normal.push(...n); color.push(0.6, 0.58, 0.54);\r\n}\r\n", "export function below(p) {\r\n return [p[0], p[1] - 1.2, p[2]];\r\n}\r\n", "import { createMesh } from '../rendering/createMesh.js';\nimport { triangulate } from '../triangulation/triangulate.js';\nimport { local } from './bridgeLocal.js';\nimport { push } from './push.js';\nimport { below } from './below.js';\n\n/**\n * Bare-earth DEMs drop bridges: `getElevation` returns the deck height inside these polygons (GeoJSON\n * Polygon/MultiPolygon with Z, e.g. IGN BD TOPO), and one mesh draws the 1.2 m thick decks.\n * ponytail: anything under a deck (quays, boats asking `getElevation`) also gets the deck height.\n */\n\nexport function addBridges(backend, geojson) {\n const map = backend._map, crs = map.options.crs, zoom = backend._terrainZoom;\n const origin = crs.project(backend.location), metres = Math.cos(backend.location.lat * Math.PI / 180);\n const base = backend.root.position[1], position = [], normal = [], color = [];\n backend._bridges = new Map();\n let geometry, polygons, polygon, rings, ring, path, pixels, points, lng, lat, z, p, coordinate;\n let triangles, paths, start, i, contour, holes, bridgeTriangles, xs, ys, t, triangle, bridge, x, y;\n let key, a, b, c, pa, pb, pc, start2, q, length, n, corner;\n for ({ geometry } of geojson.features) {\n polygons = geometry.type === 'Polygon' ? [geometry.coordinates] : geometry.type === 'MultiPolygon' ? geometry.coordinates : [];\n for (polygon of polygons) {\n rings = [];\n for (ring of polygon) {\n path = ring.slice(0, -1);\n if (path.length >= 3) rings.push(path);\n }\n if (!rings.length) continue;\n pixels = [], points = [];\n for (ring of rings) for ([lng, lat, z] of ring) {\n p = map.project([lat, lng], zoom);\n pixels.push([p.x, p.y, z]);\n }\n for (ring of rings) for (coordinate of ring) points.push(local(coordinate, crs, origin, metres, base));\n triangles = void 0;\n try {\n paths = [];\n start = 0;\n for (ring of rings) {\n path = [];\n for (i = 0; i < ring.length; i++) path.push({ x: pixels[start + i][0], y: pixels[start + i][1] });\n paths.push(path);\n start += ring.length;\n }\n [contour, ...holes] = paths;\n triangles = triangulate(contour, holes);\n } catch { continue; }\n bridgeTriangles = [], xs = [], ys = [];\n for (t of triangles) {\n triangle = [];\n for (i of t) triangle.push(pixels[i]);\n bridgeTriangles.push(triangle);\n }\n for (p of pixels) { xs.push(p[0]); ys.push(p[1]); }\n bridge = {\n triangles: bridgeTriangles,\n min: [Math.min(...xs), Math.min(...ys)],\n max: [Math.max(...xs), Math.max(...ys)],\n };\n for (x = Math.floor(bridge.min[0] / 64); x <= Math.floor(bridge.max[0] / 64); x++) {\n for (y = Math.floor(bridge.min[1] / 64); y <= Math.floor(bridge.max[1] / 64); y++) {\n key = `${x}/${y}`;\n backend._bridges.set(key, [...backend._bridges.get(key) || [], bridge]);\n }\n }\n for ([a, b, c] of triangles) {\n // Counter-clockwise seen from above, so double-sided shading keeps the top lit.\n [pa, pb, pc] = [points[a], points[b], points[c]];\n if ((pb[2] - pa[2]) * (pc[0] - pa[0]) - (pb[0] - pa[0]) * (pc[2] - pa[2]) < 0) [b, c] = [c, b];\n for (i of [a, b, c]) push(position, normal, color, points[i], [0, 1, 0]);\n for (i of [a, c, b]) push(position, normal, color, below(points[i]), [0, -1, 0]);\n }\n start2 = 0;\n for (ring of rings) {\n for (i = 0; i < ring.length; i++) {\n p = points[start2 + i], q = points[start2 + (i + 1) % ring.length];\n length = Math.hypot(q[0] - p[0], q[2] - p[2]) || 1, n = [(q[2] - p[2]) / length, 0, -(q[0] - p[0]) / length];\n for (corner of [p, q, below(q), p, below(q), below(p)]) push(position, normal, color, corner, n);\n }\n start2 += ring.length;\n }\n }\n }\n if (position.length) {\n backend._bridgeMesh = createMesh(backend, { position, normal, color });\n }\n}\n", "export async function loadTerrainTiles(state) {\n const { backend, archive, controller, tiles } = state;\n let coords, result;\n while (state.next < tiles.length) {\n controller.signal.throwIfAborted();\n coords = tiles[state.next++];\n result = await archive.getZxy(coords.z, coords.x, coords.y, controller.signal);\n if (!result || result.data.byteLength !== 256 * 256 * 4) {\n throw new Error(`Missing or invalid Float32 terrain tile ${coords.z}/${coords.x}/${coords.y}`);\n }\n backend._terrainTiles.set(`${coords.x}/${coords.y}`, new Float32Array(result.data));\n }\n}\n", "export function readBridges(response) {\r\n if (!response.ok) throw new Error(`Bridges: HTTP ${response.status}`);\r\n return response.json();\r\n}\r\n", "import { addBridges } from '../geometry/addBridges.js';\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\nimport { getElevation } from './getElevation.js';\nimport { setTerrainHeight } from './setTerrainHeight.js';\nimport { update } from '../scene/update.js';\nimport { compareDistance } from '../utils/compareDistance.js';\nimport { loadTerrainTiles } from './loadTerrainTiles.js';\nimport { readBridges } from './readBridges.js';\n\n\nexport async function loadTerrain(backend) {\n if (backend._terrainLoading || !backend._map) return;\n backend._terrainLoading = true;\n backend._terrainReady = false;\n const controller = backend._terrainController = new AbortController();\n let x, y, i, layer;\n try {\n if (!backend.terrainSource) throw new Error('Terrain layer requires a PMTiles elevation archive');\n const archive = backend._terrainArchive = new L.Layer({ source: { type: 'pmtiles', url: backend.terrainSource } });\n await archive.ready;\n const header = archive.header;\n if (header.tileType !== 0 || header.minZoom !== header.maxZoom) {\n throw new Error('Expected a single-zoom Float32 PMTiles terrain archive');\n }\n backend._terrainZoom = header.maxZoom;\n const map = backend._map;\n const northwest = map.project([header.maxLat, header.minLon], backend._terrainZoom).divideBy(256).floor();\n const southeast = map.project([header.minLat, header.maxLon], backend._terrainZoom).divideBy(256).floor();\n backend._terrainBounds = new L.Bounds(northwest, southeast);\n const tiles = [];\n const center = map.project(map.getCenter(), backend._terrainZoom).divideBy(256);\n for (x = northwest.x; x <= southeast.x; x++) {\n for (y = northwest.y; y <= southeast.y; y++) {\n tiles.push({ z: backend._terrainZoom, x, y, distance: Math.hypot(x + 0.5 - center.x, y + 0.5 - center.y) });\n }\n }\n tiles.sort(compareDistance);\n const state = { backend, archive, controller, tiles, next: 0 };\n const workers = [];\n for (i = 0; i < Math.min(4, tiles.length); i++) workers.push(loadTerrainTiles(state));\n await Promise.all(workers);\n const bridges = backend.options.bridges && await fetch(backend.options.bridges, { signal: controller.signal })\n .then(readBridges);\n if (controller.signal.aborted || backend._map !== map) return;\n backend._terrainReady = true;\n backend._terrainOriginElevation = getElevation(backend, backend.location) ?? 0;\n for (layer of Object.values(map._layers)) {\n setTerrainHeight(layer);\n conformModelToTerrain(layer, backend);\n }\n\n if (bridges) addBridges(backend, bridges);\n map.fire('terrainchange');\n update(backend);\n backend.fire('terrainready');\n return true;\n } catch (error) {\n if (!controller.signal.aborted) backend.fire('error', { error });\n return false;\n } finally {\n backend._terrainLoading = false;\n }\n}\n", "import { loadTerrain } from './loadTerrain.js';\r\n\r\nexport function loadReadyTerrain() {\r\n loadTerrain(this.backend).then(this.resolve, this.reject);\r\n}\r\n", "import { setRasterTerrain } from '../raster/setRasterTerrain.js';\r\n\r\nexport function setLayerTerrain(layer) {\r\n if (layer._type === 'pmtiles') setRasterTerrain(layer, this);\r\n}\r\n", "import { loadTerrain } from \"./loadTerrain.js\";\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\nimport { onAdd3DLayer } from '../scene/onAdd3DLayer.js';\nimport { loadReadyTerrain } from './loadReadyTerrain.js';\nimport { setLayerTerrain } from './setLayerTerrain.js';\n\nexport function onTerrainAdd(backend, map) {\n if (map._terrain3D && map._terrain3D !== backend) {\n throw new Error('Only one terrain layer can be active per map');\n }\n map._terrain3D = backend;\n onAdd3DLayer(backend, map);\n if (backend.root) backend._terrainPromise = loadTerrain(backend);\n else {\n const pending = Promise.withResolvers();\n backend._terrainPromise = pending.promise;\n backend.once('ready', loadReadyTerrain, { backend, ...pending });\n }\n map.eachLayer(setLayerTerrain, backend);\n map.fire('terrainchange');\n}\n", "import { onTerrainRemove } from './onTerrainRemove.js';\nimport { onTerrainAdd } from './onTerrainAdd.js';\nimport { init3D } from '../scene/init3D.js';\n\n/**\n * Renders IGN Float32 DEM tiles and PMTiles raster basemaps in the shared WebGPU scene.\n * Source options: `url` (single-zoom Float32 PMTiles DEM); `bridges` (optional GeoJSON deck polygons with Z, see _addBridges).\n */\nexport function initTerrain(layer, options) {\n const terrainSource = options.url;\n const layerOptions = { ...options };\n delete layerOptions.url;\n init3D(layer, layerOptions);\n layer.terrainSource = terrainSource;\n layer._terrainTiles = new Map();\n layer._rasterTiles = new Map();\n layer._terrainReady = false;\n layer.onAdd = onTerrainAdd.bind(null, layer);\n layer.onRemove = onTerrainRemove.bind(null, layer);\n}\n", "export function mix(a, b, t) {\n const values = [];\n let i;\n for (i = 0; i < a.length; i++) values.push(a[i] + (b[i] - a[i]) * t);\n return values;\n}\n", "export function rgb(values) {\n const rounded = [];\n let value;\n for (value of values) rounded.push(Math.round(value));\n return `rgb(${rounded.join(', ')})`;\n}\n", "\nimport { mix } from './mix.js';\nimport { rgb } from './rgb.js';\n\nexport function atmosphere(altitude) {\n if (!Number.isFinite(altitude)) {\n throw new Error('Invalid solar altitude');\n }\n const stops = [\n [-18, [3, 7, 20], [17, 28, 54], [0.025, 0.04, 0.09]],\n [-6, [37, 53, 84], [182, 106, 86], [0.12, 0.10, 0.14]],\n [0, [101, 131, 171], [246, 170, 115], [0.38, 0.24, 0.18]],\n [10, [74, 147, 208], [197, 221, 237], [0.80, 0.75, 0.68]],\n [25, [53, 144, 213], [223, 238, 250], [1, 1, 1]],\n ];\n let upper = -1;\n let i;\n for (i = 0; i < stops.length; i++) {\n if (stops[i][0] >= altitude) { upper = i; break; }\n }\n const b = stops[upper < 0 ? stops.length - 1 : upper],\n a = stops[Math.max(0, upper - 1)];\n const t = a === b || upper < 0 ? 1 : (altitude - a[0]) / (b[0] - a[0]);\n return {\n background: `linear-gradient(${rgb(mix(a[1], b[1], t))}, ${rgb(mix(a[2], b[2], t))})`,\n tint: mix(a[3], b[3], t),\n };\n}\n", "\nexport function horizontalPosition(d, lat, lng, ascension, declination) {\n const rad = Math.PI / 180;\n const hourAngle = (280.16 + 360.9856235 * d + lng) * rad - ascension;\n const latitude = lat * rad;\n const altitude = Math.asin(Math.sin(latitude) * Math.sin(declination) +\n Math.cos(latitude) * Math.cos(declination) * Math.cos(hourAngle));\n const southAzimuth = Math.atan2(Math.sin(hourAngle),\n Math.cos(hourAngle) * Math.sin(latitude) - Math.tan(declination) * Math.cos(latitude));\n const azimuth = (southAzimuth / rad + 180 + 360) % 360;\n return {\n altitude: altitude / rad, azimuth,\n direction: [Math.sin(azimuth * rad) * Math.cos(altitude), Math.sin(altitude),\n -Math.cos(azimuth * rad) * Math.cos(altitude)]\n };\n}\n", "import { horizontalPosition } from \"./horizontalPosition.js\";\n\n// Solar centre, without atmospheric refraction.\n\nexport function solarPosition(date, lat, lng) {\n const time = new Date(date).getTime();\n if (!Number.isFinite(time) || !Number.isFinite(lat) || Math.abs(lat) > 90 ||\n !Number.isFinite(lng) || Math.abs(lng) > 180) throw new Error('Invalid solar date or location');\n const rad = Math.PI / 180, d = time / 86400000 - 10957.5;\n const mean = (357.5291 + 0.98560028 * d) * rad;\n const longitude = mean + (1.9148 * Math.sin(mean) + 0.02 * Math.sin(2 * mean) +\n 0.0003 * Math.sin(3 * mean) + 102.9372 + 180) * rad;\n const obliquity = 23.4397 * rad;\n const declination = Math.asin(Math.sin(longitude) * Math.sin(obliquity));\n const ascension = Math.atan2(Math.sin(longitude) * Math.cos(obliquity), Math.cos(longitude));\n return horizontalPosition(d, lat, lng, ascension, declination);\n}\n", "import { solarPosition } from \"./solarPosition.js\";\nimport { horizontalPosition } from \"./horizontalPosition.js\";\n\n// Low-precision geocentric lunar orbit; no parallax or atmospheric refraction.\n\nexport function moonPosition(date, lat, lng) {\n solarPosition(date, lat, lng);\n const rad = Math.PI / 180, d = new Date(date).getTime() / 86400000 - 10957.5;\n const anomaly = (134.963 + 13.064993 * d) * rad;\n const longitude = (218.316 + 13.176396 * d + 6.289 * Math.sin(anomaly)) * rad;\n const latitude = 5.128 * Math.sin((93.272 + 13.229350 * d) * rad) * rad;\n const obliquity = 23.4397 * rad;\n const x = Math.cos(latitude) * Math.cos(longitude);\n const y = Math.cos(latitude) * Math.sin(longitude) * Math.cos(obliquity) - Math.sin(latitude) * Math.sin(obliquity);\n const z = Math.cos(latitude) * Math.sin(longitude) * Math.sin(obliquity) + Math.sin(latitude) * Math.cos(obliquity);\n return horizontalPosition(d, lat, lng, Math.atan2(y, x), Math.asin(z));\n}\n", "/** Perspective projection of a celestial direction; null when behind the camera. */\n\nexport function projectCelestialBody(dir, size, pitch, bearing) {\n const [x, y, z] = dir;\n const forward = -x * Math.sin(bearing) * Math.sin(pitch) - y * Math.cos(pitch) - z * Math.cos(bearing) * Math.sin(pitch);\n if (forward > 0) {\n return {\n left: size.x / 2 + size.y * 1.5 * (x * Math.cos(bearing) - z * Math.sin(bearing)) / forward,\n top: size.y / 2 - size.y * 1.5 * (-x * Math.sin(bearing) * Math.cos(pitch) + y * Math.sin(pitch) - z * Math.cos(bearing) * Math.cos(pitch)) / forward\n };\n }\n return null;\n}\n", "import { projectCelestialBody } from './projectCelestialBody.js';\n\nexport function updateSky({ map, originalSky, sunDisc, moonDisc }) {\n const sun = map._sunlight, sky = map._pitchSky;\n if (sun) map.getContainer().style.setProperty('--leaflet-sky-background', sun.background);\n else if (originalSky) map.getContainer().style.setProperty('--leaflet-sky-background', originalSky);\n else map.getContainer().style.removeProperty('--leaflet-sky-background');\n const size = map.getSize(), pitch = map.getPitch() * Math.PI / 180, bearing = map.getBearing() * Math.PI / 180;\n let disc, body, point, left, top;\n for ([disc, body] of [[sunDisc, sun], [moonDisc, sun?.moon]]) {\n disc.hidden = true;\n if (!sky || !body || body.altitude <= 0 || !sun) continue;\n if (disc.parentNode !== sky) sky.append(disc);\n point = projectCelestialBody(body.direction, size, pitch, bearing);\n if (!point) continue;\n ({ left, top } = point);\n disc.hidden = left < 0 || left > size.x || top < 0 || top > sky.clientHeight || sky.style.display === 'none';\n disc.style.left = `${left}px`; disc.style.top = `${top}px`;\n }\n}\n", "import { cityMapper } from '../constants/cityMapper.js';\r\nimport { update as updateScene } from '../scene/update.js';\r\n\r\nexport function render(map) {\r\n const renderer = cityMapper.renderers.get(map);\r\n if (renderer) updateScene(renderer);\r\n}\r\n", "import { atmosphere } from './atmosphere.js';\r\nimport { moonPosition } from './moonPosition.js';\r\nimport { solarPosition } from './solarPosition.js';\r\nimport { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\n\r\nexport function updateSun(state) {\r\n const { control, map, date, slider, output, status } = state;\r\n try {\r\n if (control.live) control.time = new Date();\r\n const time = control.time.toISOString();\r\n date.value = time.slice(0, 10);\r\n slider.value = String(control.time.getUTCHours() * 60 + control.time.getUTCMinutes());\r\n output.textContent = `${time.slice(11, 16)} UTC${control.live ? ' \u00B7 now' : ''}`;\r\n const center = map.getCenter();\r\n const sun = map._sunlight = solarPosition(control.time, center.lat, center.lng);\r\n Object.assign(sun, atmosphere(sun.altitude));\r\n sun.moon = moonPosition(control.time, center.lat, center.lng);\r\n status.textContent = sun.altitude <= 0\r\n ? 'Night \u00B7 no direct sunlight'\r\n : sun.altitude < 3\r\n ? 'Low sun \u00B7 shadows paused'\r\n : `Sun altitude ${sun.altitude.toFixed(1)}\u00B0`;\r\n map.fire('simulationtimechange', { time: new Date(control.time), live: control.live });\r\n updateSky(state);\r\n render(map);\r\n } catch (error) {\r\n delete map._sunlight;\r\n updateSky(state);\r\n render(map);\r\n status.textContent = `Error: ${error.message}`;\r\n console.error('Solar simulation', error);\r\n }\r\n}\r\n", "import { updateSun } from './updateSun.js';\r\n\r\nexport function useLiveTime(state) {\r\n state.control.live = true;\r\n updateSun(state);\r\n}\r\n", "import { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\nimport { updateSun } from './updateSun.js';\r\n\r\nexport function useSelectedTime(state) {\r\n const { control, map, date, slider, status } = state;\r\n control.live = false;\r\n if (!date.value || !date.validity.valid) {\r\n control.time = new Date(NaN);\r\n map.fire('simulationtimechange', { time: null, live: false });\r\n delete map._sunlight;\r\n updateSky(state);\r\n render(map);\r\n status.textContent = 'Error: choose a valid solar date';\r\n return;\r\n }\r\n control.time = new Date(`${date.value}T00:00:00Z`);\r\n control.time.setUTCMinutes(Number(slider.value));\r\n updateSun(state);\r\n}\r\n", "import { updateSun } from './updateSun.js';\r\n\r\nexport function tickSun(state) {\r\n if (state.control.live) updateSun(state);\r\n}\r\n", "import { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\n\r\nexport function removeSun(state) {\r\n const { map, timer, sunDisc, moonDisc } = state;\r\n clearInterval(timer);\r\n delete map._timeControl;\r\n map.fire('simulationtimechange', { time: null, live: false });\r\n map.off('moveend', state.update);\r\n map.off('move rotate pitch resize', state.updateSky);\r\n delete map._sunlight;\r\n updateSky(state);\r\n sunDisc.remove(); moonDisc.remove();\r\n render(map);\r\n}\r\n", "import { cityMapper } from '../constants/cityMapper.js';\nimport { update as updateScene } from '../scene/update.js';\nimport { atmosphere } from './atmosphere.js';\nimport { moonPosition } from './moonPosition.js';\nimport { projectCelestialBody } from './projectCelestialBody.js';\nimport { solarPosition } from './solarPosition.js';\nimport { updateSky } from './updateSky.js';\nimport { render } from './render.js';\nimport { updateSun } from './updateSun.js';\nimport { useLiveTime } from './useLiveTime.js';\nimport { useSelectedTime } from './useSelectedTime.js';\nimport { tickSun } from './tickSun.js';\nimport { removeSun } from './removeSun.js';\n\nexport function onAddSun(control, map) {\n map._timeControl = control;\n const originalSky = map.getContainer().style.getPropertyValue('--leaflet-sky-background');\n const disc = 'position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;';\n const sunDisc = L.DomUtil.create('div', 'sunlight-sun');\n const moonDisc = L.DomUtil.create('div', 'sunlight-moon');\n sunDisc.style.cssText = disc + 'background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;';\n moonDisc.style.cssText = disc + 'background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;';\n sunDisc.setAttribute('role', 'img'); sunDisc.setAttribute('aria-label', 'Sun');\n moonDisc.setAttribute('role', 'img'); moonDisc.setAttribute('aria-label', 'Moon');\n const container = L.DomUtil.create('div', 'sunlight-control');\n container.style.cssText = 'color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;';\n const date = document.createElement('input');\n date.type = 'date';\n date.style.cssText = 'width:100%;box-sizing:border-box;';\n date.setAttribute('aria-label', 'Solar date (UTC)');\n const slider = document.createElement('input');\n slider.type = 'range';\n slider.style.cssText = 'width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;';\n slider.min = '0'; slider.max = '1439'; slider.step = '1';\n slider.setAttribute('aria-label', 'Time of day (UTC)');\n const output = document.createElement('output');\n output.style.cssText = 'font-weight:bold;font-variant-numeric:tabular-nums;';\n output.setAttribute('aria-live', 'off');\n const now = document.createElement('button');\n now.type = 'button'; now.textContent = 'Now';\n const timeRow = document.createElement('div');\n timeRow.className = 'sunlight-time';\n timeRow.style.cssText = 'display:flex;justify-content:space-between;align-items:center;';\n timeRow.append(output, now);\n const status = document.createElement('div');\n status.className = 'sunlight-status';\n status.style.marginTop = '5px';\n status.setAttribute('role', 'status');\n const note = document.createElement('small');\n note.style.color = '#555';\n note.textContent = 'Indicative \u00B7 loaded geometry only. Streetlight illumination is estimated, not measured lux.';\n container.append(date, slider, timeRow, status, note);\n const state = { control, map, originalSky, sunDisc, moonDisc, date, slider, output, status };\n state.update = updateSun.bind(null, state);\n state.updateSky = updateSky.bind(null, state);\n now.onclick = useLiveTime.bind(null, state);\n date.onchange = slider.oninput = useSelectedTime.bind(null, state);\n L.DomEvent.disableClickPropagation(container);\n L.DomEvent.disableScrollPropagation(container);\n state.update();\n state.timer = setInterval(tickSun, 60000, state);\n map.on('moveend', state.update);\n map.on('move rotate pitch resize', state.updateSky);\n control.onRemove = removeSun.bind(null, state);\n return container;\n}\n", "export const underEntryState = {};\n", "export function placeEntry(map, layer, element) {\n let input, entry;\n for (input of map.getContainer().querySelectorAll('.leaflet-control-layers-selector')) {\n entry = map._layers[input.layerId];\n if (input.layerId === L.Util.stamp(layer) || entry instanceof L.LayerGroup && entry.hasLayer(layer)) {\n input.closest('label').after(element);\n return true;\n }\n }\n return false;\n}\n", "import { placeEntry } from './placeEntry.js';\n\nexport function placeUnderEntry(state) {\n const nested = placeEntry(state.map, state.layer, state.element);\n const onPlace = state.onPlace;\n onPlace?.(nested);\n return nested;\n}\n", "import { underEntryState } from '../constants/underEntryState.js';\nimport { placeUnderEntry } from './placeUnderEntry.js';\n\nexport function runPlacements() {\n const state = underEntryState.pendingPlacements.shift();\n if (state?.map.hasLayer(state.layer)) placeUnderEntry(state);\n}\n", "import { underEntryState } from '../constants/underEntryState.js';\nimport { runPlacements } from './runPlacements.js';\n\nexport function replaceEntry() {\n underEntryState.pendingPlacements.push(this);\n queueMicrotask(runPlacements);\n}\n", "import { replaceEntry } from './replaceEntry.js';\n\nexport function removeEntry() {\n this.map.off('layeradd layerremove', replaceEntry, this);\n this.element.remove();\n}\n", "import { underEntryState } from '../constants/underEntryState.js';\nimport { placeUnderEntry } from './placeUnderEntry.js';\nimport { replaceEntry } from './replaceEntry.js';\nimport { removeEntry } from './removeEntry.js';\n\n/**\n * Keeps `element` right under `layer`'s entry in the map's layers control while the layer is on the map.\n * Returns false when no layers control lists the layer.\n */\nunderEntryState.pendingPlacements = [];\n\nexport function underEntry(layer, element, onPlace) {\n const state = { map: layer._map, layer, element, onPlace };\n state.map.on('layeradd layerremove', replaceEntry, state);\n layer.once('remove', removeEntry, state);\n return placeUnderEntry(state);\n}\n", "export function addTimeLayer(map) {\r\n return this.control.addTo(map);\r\n}\r\n", "export function removeTimeLayer() {\r\n return L.Control.prototype.remove.call(this.control);\r\n}\r\n", "import { addTimeLayer } from './addTimeLayer.js';\r\nimport { removeTimeLayer } from './removeTimeLayer.js';\r\n\r\nexport function initialize(options) {\r\n L.Util.setOptions(this, options);\r\n this.live = true;\r\n this.layer = new L.Layer();\r\n this.layer.control = this;\r\n this.layer.onAdd = addTimeLayer;\r\n this.layer.onRemove = removeTimeLayer;\r\n}\r\n", "import { onAddSun } from './onAddSun.js';\r\n\r\nexport function onAdd(map) {\r\n return onAddSun(this, map);\r\n}\r\n", "export function styleTimeControl(container, nested) {\r\n container.classList.toggle('leaflet-control', !nested);\r\n container.classList.toggle('leaflet-bar', !nested);\r\n Object.assign(container.style, nested\r\n ? { background: '', padding: '2px 0 6px 20px', margin: '0' }\r\n : { background: '#fff', padding: '8px', margin: '' });\r\n}\r\n", "import { underEntry } from '../scene/underEntry.js';\r\nimport { styleTimeControl } from './styleTimeControl.js';\r\n\r\nexport function addTo(map) {\r\n L.Control.prototype.addTo.call(this, map);\r\n const container = this.getContainer();\r\n if (this.layer._map === map) underEntry(this.layer, container, styleTimeControl.bind(null, container));\r\n else styleTimeControl(container, false);\r\n return this;\r\n}\r\n", "export function remove() {\r\n if (this._map?.hasLayer(this.layer)) {\r\n this._map.removeLayer(this.layer);\r\n return this;\r\n }\r\n return L.Control.prototype.remove.call(this);\r\n}\r\n", "import { onAddSun } from './onAddSun.js';\nimport { underEntry } from '../scene/underEntry.js';\nimport { initialize } from './initialize.js';\nimport { onAdd } from './onAdd.js';\nimport { addTo } from './addTo.js';\nimport { remove } from './remove.js';\n\nL.Control.Time = L.Control.extend({\n options: { position: 'bottomright' },\n initialize,\n onAdd,\n addTo,\n remove,\n});", "export function triangle(position, normal, color, a, b, c, tint) {\n const u = [], v = [];\n let i, point, value;\n for (i = 0; i < b.length; i++) u.push(b[i] - a[i]);\n for (i = 0; i < c.length; i++) v.push(c[i] - a[i]);\n const n = [u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2], u[0] * v[1] - u[1] * v[0]], length = Math.hypot(...n);\n for (point of [a, b, c]) {\n position.push(...point);\n for (value of n) normal.push(value / length);\n color.push(...tint);\n }\n}\n", "import { triangle } from './triangle.js';\n\nexport function build(parts) {\n const position = [], normal = [], color = [];\n let ring, bottom, top, tint, topRing, low, high, x, z, i, j;\n for ([ring, bottom, top, tint, topRing = ring] of parts) {\n low = [], high = [];\n for ([x, z] of ring) low.push([x, bottom, z]);\n for ([x, z] of topRing) high.push([x, top, z]);\n for (i = 0; i < ring.length; i++) {\n j = (i + 1) % ring.length;\n triangle(position, normal, color, low[i], low[j], high[j], tint); triangle(position, normal, color, low[i], high[j], high[i], tint);\n }\n for (i = 1; i < ring.length - 1; i++) {\n triangle(position, normal, color, high[0], high[i], high[i + 1], tint); triangle(position, normal, color, low[0], low[i + 1], low[i], tint);\n }\n }\n return { position, normal, color };\n}\n", "export function tooltip({ properties: p }) {\n const content = document.createElement('div');\n content.style.whiteSpace = 'pre-line';\n const lines = [];\n let line;\n for (line of [p.name, p.departure && `Departure ${p.departure} ${p.timetable.timeZone}`, p.description]) {\n if (line) lines.push(line);\n }\n content.textContent = lines.join('\\n');\n return content;\n}\n", "export function box(x0, x1, z0, z1) {\n return [[x0, z0], [x1, z0], [x1, z1], [x0, z1]];\n}\n", "export const glass = [0.12, 0.15, 0.18];\n", "export const tyre = [0.05, 0.05, 0.05];\n", "import { box } from \"../geometry/box.js\";\n\nexport function mirror(x0, x1, z0, z1, ...rest) {\n return [\n [box(x0, x1, z0, z1), ...rest],\n [box(-x1, -x0, z0, z1), ...rest]\n ];\n}\n", "// Built-in vehicles for the 'traffic' type. Models are [ring of [x, z], bottom, top, rgb, topRing?] convex prisms in metres;\n// forward is -z, right is +x. `topRing` (same length as `ring`) tapers the prism; rgb components above 1 are self-lit lamps.\nexport const paints = [\n [0.86, 0.86, 0.88],\n [0.1, 0.1, 0.12],\n [0.5, 0.53, 0.57],\n [0.65, 0.1, 0.08],\n [0.12, 0.25, 0.55],\n [0.85, 0.7, 0.15]\n];\n", "export const headlight = [1.9, 1.85, 1.7];\n", "export const taillight = [1.7, 0.06, 0.05];\n", "import { box } from '../geometry/box.js';\r\nimport { glass } from '../constants/glass.js';\r\nimport { tyre } from '../constants/tyre.js';\r\nimport { mirror } from './mirror.js';\r\nimport { paints } from '../constants/paints.js';\r\nimport { headlight } from '../constants/headlight.js';\r\nimport { taillight } from '../constants/taillight.js';\r\n\r\nexport function carModel(i) {\r\n const paint = paints[i % paints.length];\r\n return [\r\n ...mirror(0.7, 0.92, -1.68, -1.02, 0, 0.64, tyre),\r\n ...mirror(0.7, 0.92, 1.02, 1.68, 0, 0.64, tyre),\r\n [[[-0.9, -1.95], [-0.72, -2.25], [0.72, -2.25], [0.9, -1.95], [0.9, 2.05], [0.76, 2.25], [-0.76, 2.25], [-0.9, 2.05]],\r\n 0.28, 0.82, paint],\r\n // Greenhouse: the windscreen leans back, the rear window less.\r\n [box(-0.84, 0.84, -0.75, 1.6), 0.82, 1.38, glass, box(-0.7, 0.7, -0.05, 1.3)],\r\n [box(-0.71, 0.71, -0.06, 1.31), 1.38, 1.46, paint],\r\n ...mirror(0.38, 0.8, -2.3, -2.16, 0.56, 0.76, headlight),\r\n [box(-0.78, 0.78, 2.16, 2.3), 0.6, 0.76, taillight],\r\n ];\r\n}\r\n", "export const hull = [[-5.5, 30], [5.5, 30], [5.5, -20], [4, -26], [1.5, -30], [-1.5, -30], [-4, -26], [-5.5, -20]];\n", "export const white = [0.92, 0.93, 0.92];\n", "import { mirror } from './mirror.js';\n\nexport function boatBenches() {\n const benches = [];\n let i;\n for (i = 0; i < 12; i++) benches.push(...mirror(0.5, 3.8, -12 + i * 3, -11.3 + i * 3, 3.9, 4.4, [0.62, 0.1, 0.1]));\n return benches;\n}\n", "import { hull } from '../constants/hull.js';\r\nimport { box } from '../geometry/box.js';\r\nimport { glass } from '../constants/glass.js';\r\nimport { mirror } from './mirror.js';\r\nimport { white } from '../constants/white.js';\r\nimport { boatBenches } from './boatBenches.js';\r\n\r\n// Panoramic river cruiser, about 60 x 11 m.\r\nexport function boatModel() {\r\n return [\r\n [hull, 0, 0.8, [0.1, 0.16, 0.26]],\r\n [hull, 0.8, 1.4, white],\r\n [box(-5, 5, -18, 26), 1.4, 3.7, glass, box(-4.6, 4.6, -17.4, 25.6)],\r\n ...mirror(4.64, 4.74, -17, 25, 3.25, 3.45, [1.6, 1.25, 0.8]),\r\n [box(-4.8, 4.8, -17.8, 25.8), 3.7, 3.9, white],\r\n ...boatBenches(),\r\n ...mirror(4.65, 4.8, -13.6, 25.8, 3.9, 4.8, white),\r\n [box(-4.8, 4.8, 25.65, 25.8), 3.9, 4.8, white],\r\n [box(-2.2, 2.2, -17.6, -14), 3.9, 4.7, white],\r\n [box(-2.2, 2.2, -17.6, -14), 4.7, 5.5, glass],\r\n [box(-2.5, 2.5, -18, -13.6), 5.5, 5.7, white],\r\n [box(-2.45, -2.2, -16.2, -15.8), 5, 5.3, [2, 0.15, 0.1]],\r\n [box(2.2, 2.45, -16.2, -15.8), 5, 5.3, [0.1, 2, 0.4]],\r\n [box(-0.1, 0.1, -15.9, -15.7), 5.7, 6.6, white],\r\n [box(-0.15, 0.15, -15.95, -15.65), 6.6, 6.8, [2, 2, 1.9]],\r\n ];\r\n}\r\n", "export function routeColor(properties) {\r\n const color = properties?.route_color;\r\n if (!/^[\\da-f]{6}$/i.test(color)) return [0.1, 0.55, 0.65];\r\n const value = Number.parseInt(color, 16);\r\n return [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];\r\n}\n", "import { box } from '../geometry/box.js';\nimport { glass } from '../constants/glass.js';\nimport { tyre } from '../constants/tyre.js';\nimport { white } from '../constants/white.js';\nimport { headlight } from '../constants/headlight.js';\nimport { taillight } from '../constants/taillight.js';\n\nexport function carriage(center, length, color) {\r\n const front = center - length / 2, rear = center + length / 2;\r\n return [\r\n [box(-1.25, 1.25, front, rear), 0.45, 1.25, color],\r\n [box(-1.2, 1.2, front + 0.15, rear - 0.15), 1.25, 2.65, glass],\r\n [box(-1.25, 1.25, front, rear), 2.65, 3.1, white],\r\n [box(-1.15, -0.85, front + 1, front + 2), 0, 0.7, tyre],\r\n [box(0.85, 1.15, rear - 2, rear - 1), 0, 0.7, tyre],\r\n [box(-0.9, 0.9, front - 0.03, front), 0.8, 1.05, headlight],\r\n [box(-0.9, 0.9, rear, rear + 0.03), 0.8, 1.05, taillight],\r\n ];\r\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function busModel(index, properties) {\r\n return carriage(0, 12, routeColor(properties));\r\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function tramModel(index, properties) {\n const color = routeColor(properties), parts = [];\n let car;\n for (car = 0; car < 5; car++) parts.push(...carriage((car - 2) * 6.5, 6, color));\n return parts;\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function metroModel(index, properties) {\n const color = routeColor(properties), parts = [];\n let car;\n for (car = 0; car < 5; car++) parts.push(...carriage((car - 2) * 15, 14, color));\n return parts;\n}\n", "// Pedestrian, about 1.77 m tall, prisms as in utils/vehicles.js (forward -z). Limbs hang from their pivot at y = 0.\nexport const skin = [0.85, 0.64, 0.5];\n", "export const trousers = [0.16, 0.2, 0.32];\n", "export const dark = [0.08, 0.07, 0.06];\n", "import { box } from '../geometry/box.js';\nimport { skin } from '../constants/skin.js';\nimport { trousers } from '../constants/trousers.js';\nimport { dark } from '../constants/dark.js';\nimport { paints } from '../constants/paints.js';\n\nexport function bicycleModel(index) {\r\n const paint = paints[index % paints.length];\r\n return [\r\n [box(-0.045, 0.045, -0.85, -0.25), 0.02, 0.62, dark],\r\n [box(-0.045, 0.045, 0.25, 0.85), 0.02, 0.62, dark],\r\n [box(-0.06, 0.06, -0.5, 0.5), 0.4, 0.65, paint],\r\n [box(-0.32, 0.32, -0.58, -0.5), 0.95, 1.02, dark],\r\n [box(-0.1, 0.1, 0.15, 0.4), 0.85, 0.92, dark],\r\n [box(-0.18, 0.18, -0.12, 0.28), 1, 1.5, paint],\r\n [box(-0.11, 0.11, -0.22, 0), 1.5, 1.72, skin],\r\n [box(-0.13, 0.13, -0.23, 0.01), 1.72, 1.8, paint],\r\n [box(-0.25, -0.15, -0.5, -0.05), 1, 1.25, skin],\r\n [box(0.15, 0.25, -0.5, -0.05), 1, 1.25, skin],\r\n [box(-0.2, -0.08, 0, 0.32), 0.3, 1, trousers],\r\n [box(0.08, 0.2, -0.25, 0.07), 0.3, 1, trousers],\r\n ];\r\n}\n", "export const shirt = [0.75, 0.2, 0.15];\n", "import { box } from \"../geometry/box.js\";\nimport { trousers } from './trousers.js';\nimport { shirt } from './shirt.js';\nimport { skin } from './skin.js';\nimport { dark } from './dark.js';\n\n\nexport const parts = {\n body: [\n [box(-0.17, 0.17, -0.1, 0.1), 0.82, 0.95, trousers],\n [box(-0.19, 0.19, -0.11, 0.11), 0.95, 1.44, shirt],\n [box(-0.05, 0.05, -0.05, 0.05), 1.44, 1.5, skin],\n [box(-0.1, 0.1, -0.11, 0.1), 1.5, 1.72, skin],\n [box(-0.105, 0.105, -0.06, 0.115), 1.58, 1.77, dark],\n [box(-0.105, 0.105, -0.115, -0.06), 1.7, 1.77, dark],\n ],\n leg: [[box(-0.07, 0.07, -0.07, 0.07), -0.82, 0, trousers], [box(-0.07, 0.07, -0.17, 0.07), -0.9, -0.82, dark]],\n arm: [[box(-0.05, 0.05, -0.05, 0.05), -0.55, 0, shirt], [box(-0.045, 0.045, -0.045, 0.045), -0.66, -0.55, skin]],\n};\n", "import { box } from '../geometry/box.js';\nimport { parts } from '../constants/parts.js';\nimport { skin } from '../constants/skin.js';\nimport { trousers } from '../constants/trousers.js';\nimport { paints } from '../constants/paints.js';\n\nexport function pedestrianModel(index) {\r\n const model = parts.body.slice();\r\n model[1] = [model[1][0], model[1][1], model[1][2], paints[index % paints.length]];\r\n model.push(\r\n [box(-0.16, -0.02, -0.07, 0.07), 0.08, 0.9, trousers],\r\n [box(0.02, 0.16, -0.07, 0.07), 0.08, 0.9, trousers],\r\n [box(-0.3, -0.2, -0.05, 0.05), 0.76, 1.42, skin],\r\n [box(0.2, 0.3, -0.05, 0.05), 0.76, 1.42, skin],\r\n );\r\n return model;\r\n}\n", "import { carModel } from '../vehicles/carModel.js';\nimport { boatModel } from '../vehicles/boatModel.js';\nimport { busModel } from '../vehicles/busModel.js';\nimport { tramModel } from '../vehicles/tramModel.js';\nimport { metroModel } from '../vehicles/metroModel.js';\nimport { bicycleModel } from '../vehicles/bicycleModel.js';\nimport { pedestrianModel } from '../vehicles/pedestrianModel.js';\n\n/**\n * `side`: default offset (metres) to the right of the lane centreline. `model(i)` gives the prisms of the i-th vehicle.\n * `lights`: night point lights in model space (see the night lighting grid), e.g. the pool cast by the headlights.\n */\nexport const vehicles = {\n bicycle: { side: 0.4, model: bicycleModel },\n pedestrian: { side: 0.3, model: pedestrianModel },\n bus: { side: 1.5, model: busModel },\n tram: { side: 0, model: tramModel },\n metro: { side: 0, model: metroModel },\n car: {\n side: 1.8,\n model: carModel,\n lights: [{\n position: [0, 1.2, -6],\n radius: 10,\n color: [1, 0.94, 0.82],\n flux: 800\n }]\n },\n // Panoramic river cruiser, about 60 \u00D7 11 m: glass saloon, open upper deck with benches, wheelhouse forward.\n boat: {\n side: 0,\n model: boatModel,\n lights: [{\n position: [0, 8, 4],\n radius: 30,\n color: [1, 0.8, 0.55],\n flux: 20000\n }]\n },\n};\n", "// One workgroup per vehicle shares its lane lookup and pose across all model vertices.\r\nexport const trafficShader = /* wgsl */ ` 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;}}`;\r\n", "/** Point and unit direction at distance `s` along `points` ([x, z, y?]) with cumulative `lengths`. */\n\nexport function along(points, lengths, s) {\n let i = 1, end = lengths.length - 1;\n let middle;\n while (i < end) {\n middle = i + Math.floor((end - i) / 2);\n if (lengths[middle] < s) i = middle + 1;\n else end = middle;\n }\n const a = points[i - 1], b = points[i], d = lengths[i] - lengths[i - 1] || 1;\n const t = (s - lengths[i - 1]) / d;\n return { x: a[0] + (b[0] - a[0]) * t, y: (a[2] ?? 0) + ((b[2] ?? 0) - (a[2] ?? 0)) * t, z: a[1] + (b[1] - a[1]) * t, dx: (b[0] - a[0]) / d, dz: (b[1] - a[1]) / d };\n}\n", "import { along } from './along.js';\n\nexport function locateTraffic(state, trip) {\r\n const { points, lengths, length } = trip.lane;\r\n let distance = trip.distance + state.elapsed * trip.speed;\r\n distance -= length * Math.floor(distance / length);\r\n const { x, y, z, dx, dz } = along(points, lengths, distance);\r\n return { x: x - dz * state.side, y, z: z + dx * state.side, dx, dz };\r\n}\n", "import { locateTraffic } from './locateTraffic.js';\n\nexport function placeTraffic(state) {\n if (!state.mesh || !state.stale) return;\n state.stale = false;\n const { position, normal } = state.mesh.geometry.attributes;\n let i, trip, cx, y, cz, dx, dz, k, o, lx, lz, nx, nz;\n for (i = 0; i < state.trips.length; i++) {\n trip = state.trips[i];\n ({ x: cx, y, z: cz, dx, dz } = locateTraffic(state, trip));\n for (k = 0, o = i * state.stride; k < state.stride; k += 3, o += 3) {\n lx = state.template.position[k], lz = state.template.position[k + 2], nx = state.template.normal[k], nz = state.template.normal[k + 2];\n position.data[o] = cx - lx * dz - lz * dx;\n position.data[o + 1] = y + state.template.position[k + 1];\n position.data[o + 2] = cz + lx * dx - lz * dz;\n normal.data[o] = -nx * dz - nz * dx;\n normal.data[o + 1] = state.template.normal[k + 1];\n normal.data[o + 2] = nx * dx - nz * dz;\n }\n }\n}\n", "import { underEntry } from '../scene/underEntry.js';\n\nexport function startTraffic(state) {\r\n state.layer._map.off('simulationtimechange layerremove', state.update).on('simulationtimechange layerremove', state.update);\r\n state.layer._map.off('terrainchange', state.terrain).on('terrainchange', state.terrain);\r\n underEntry(state.layer, state.status);\r\n state.update();\r\n}\n", "import { placeTraffic } from './placeTraffic.js';\nimport { startTraffic } from './startTraffic.js';\n\nexport function addTraffic(state) {\r\n state.layer._beforeRaycast = placeTraffic.bind(null, state);\r\n if (state.ready) startTraffic(state);\r\n}\n", "import * as disposeMesh from '../rendering/disposeMesh.js';\nimport * as setHighlight from '../picking/setHighlight.js';\nimport * as showFeature from '../picking/showFeature.js';\n\nexport function disposeTrafficObject(state, object) {\r\n if (!object) return;\r\n if (state.layer.highlightedFeature?.mesh === object) {\r\n setHighlight.setHighlight(state.layer, null);\r\n state.layer.hoveredFeature = null;\r\n showFeature.showFeature(state.layer, null);\r\n };\r\n disposeMesh.disposeMesh(state.layer, object);\r\n}\n", "export function destroyTrafficGpu(state) {\n let buffer;\n for (buffer of [state.gpu?.params, state.gpu?.template, state.gpu?.points, state.gpu?.vehicles]) buffer?.destroy();\n state.gpu = null;\n}\n", "import { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { destroyTrafficGpu } from './destroyTrafficGpu.js';\n\nexport function removeTraffic(state) {\r\n state.request?.abort();\r\n cancelAnimationFrame(state.frame);\r\n state.frame = undefined;\r\n state.layer._map.off('simulationtimechange layerremove', state.update).off('terrainchange', state.terrain);\r\n disposeTrafficObject(state, state.mesh);\r\n disposeTrafficObject(state, state.route);\r\n state.mesh = state.route = null;\r\n delete state.layer._beforeRaycast;\r\n destroyTrafficGpu(state);\r\n state.lanes = [];\r\n state.trips = [];\r\n state.tripsKey = state.loaded = null;\r\n}\n", "import { startTraffic } from './startTraffic.js';\n\nexport function readyTraffic(state) {\r\n state.ready = true;\r\n if (state.layer._map) startTraffic(state);\r\n}\n", "import { speed } from \"../constants/speed.js\";\n\n/** Evenly spaced starting offsets (metres) for `flow` vehicles/h moving at `velocity` m/s on a `length` metres lane. */\n\nexport function vehicleOffsets(length, flow, velocity = speed) {\n const count = Math.round(length * flow / 3600 / velocity);\n const offsets = Array.from({ length: count });\n let i;\n for (i = 0; i < offsets.length; i++) offsets[i] = (i + 0.5) * length / count;\n return offsets;\n}\n", "\n\nexport function clockMinutes(clockTime) {\n const parts = clockTime.split(':');\n return Number(parts[0]) * 60 + Number(parts[1]);\n}\n", "\n\nexport function compareDepartures(a, b) {\n return a - b;\n}\n", "import { clockMinutes } from './clockMinutes.js';\nimport { compareDepartures } from './compareDepartures.js';\n\n/**\n * Trips of a frequency-based timetable (like GTFS frequencies.txt) underway at `date`, in the timetable's local time.\n * @param {{timeZone: string, duration: number, services: Array<{from: string, to: string, every?: number, months?: number[], weekdays?: number[]}>}} timetable\n * `duration` and `every` are minutes; `from`/`to` are 'HH:MM' first/last departures; months are 1-12, weekdays 0 (Sunday)-6.\n * @returns {Array<{id: string, departure: string, progress: number}>} `progress` is 0-1 along the lane.\n */\n\nexport function scheduledTrips(date, { timeZone, duration, services }) {\n const time = new Date(date);\n if (!Number.isFinite(time.getTime())) throw new Error('Invalid date');\n const clock = new Intl.DateTimeFormat('en-GB', {\n timeZone, year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\n });\n const parts = {};\n let part, from, to, every, months, weekdays, departure;\n for (part of clock.formatToParts(time)) {\n if (part.type !== 'literal') parts[part.type] = Number(part.value);\n }\n const minute = parts.hour * 60 + parts.minute + (parts.second + time.getUTCMilliseconds() / 1000) / 60;\n const weekday = new Date(Date.UTC(parts.year, parts.month - 1, parts.day)).getUTCDay();\n const departures = [];\n for ({ from, to, every = Infinity, months, weekdays } of services) {\n if (months?.includes(parts.month) === false || weekdays?.includes(weekday) === false) continue;\n for (departure = clockMinutes(from); departure <= clockMinutes(to); departure += every) departures.push(departure);\n }\n departures.sort(compareDepartures);\n const trips = [];\n for (departure of departures) {\n if (minute >= departure && minute < departure + duration) trips.push({\n id: `${parts.year}-${parts.month}-${parts.day}-${departure}`,\n departure: `${String(Math.floor(departure / 60)).padStart(2, '0')}:${String(departure % 60).padStart(2, '0')}`,\n progress: (minute - departure) / duration,\n });\n }\n return trips;\n}\n", "import { vehicleOffsets } from \"./vehicleOffsets.js\";\nimport { scheduledTrips } from \"./scheduledTrips.js\";\n\n// A lane with a `timetable` runs scheduled trips end to end; one with a `flow` (vehicles/h) loops evenly spaced vehicles.\n\nexport function tripsAt(time, lanes, velocity) {\n const trips = [];\n let l, lane, timetable, flow, trip, travelled, offsets, k;\n for (l = 0; l < lanes.length; l++) {\n lane = lanes[l];\n ({ timetable, flow = 0 } = lane.properties);\n if (!lane.length) continue;\n if (timetable) {\n for (trip of scheduledTrips(time, timetable)) trips.push({\n id: `${l}-${trip.id}`, lane, distance: trip.progress * lane.length, speed: lane.length / (timetable.duration * 60),\n properties: { ...lane.properties, departure: trip.departure },\n });\n } else {\n travelled = time / 1000 * velocity;\n offsets = lane.offsets ||= vehicleOffsets(lane.length, flow, velocity);\n for (k = 0; k < offsets.length; k++) trips.push({\n id: `${l}-${k}`, lane, distance: (offsets[k] + travelled) % lane.length, speed: velocity, properties: lane.properties,\n });\n }\n }\n return trips;\n}\n", "export function trafficNow(state) {\r\n const control = state.layer._map?._timeControl || { live: true };\r\n return { live: control.live, time: control.live ? new Date() : control.time };\r\n}\n", "export function failTraffic(state, error) {\r\n state.error = error;\r\n state.status.textContent = `Error: ${error.message}`;\r\n state.status.setAttribute('role', 'alert');\r\n console.error('Traffic layer', error);\r\n}\n", "/** Dashed lane outline, in layer-local metres. */\n\nexport function routeGeometry(lanes) {\n const position = [], normal = [], color = [];\n let points, lengths, properties, raw, rgb, tint, i, a, b, dx, dz, length, x, z, distance, start, end;\n let p, q, point;\n for ({ points, lengths, properties } of lanes) {\n raw = properties?.route_color;\n rgb = /^[\\da-f]{6}$/i.test(raw) ? Number.parseInt(raw, 16) : null;\n tint = rgb === null ? [0.08, 0.7, 0.85]\n : [(rgb >> 16 & 255) / 255, (rgb >> 8 & 255) / 255, (rgb & 255) / 255];\n for (i = 1; i < points.length; i++) {\n a = points[i - 1], b = points[i];\n dx = b[0] - a[0], dz = b[1] - a[1], length = lengths[i] - lengths[i - 1];\n if (!length) continue;\n x = -dz / length * 2.5, z = dx / length * 2.5;\n for (distance = Math.floor(lengths[i - 1] / 30) * 30; distance < lengths[i]; distance += 30) {\n start = Math.max(0, (distance - lengths[i - 1]) / length);\n end = Math.min(1, (distance + 18 - lengths[i - 1]) / length);\n if (end <= start) continue;\n p = [a[0] + dx * start, a[1] + dz * start, a[2] + (b[2] - a[2]) * start + 0.4];\n q = [a[0] + dx * end, a[1] + dz * end, a[2] + (b[2] - a[2]) * end + 0.4];\n for (point of [[p[0] - x, p[2], p[1] - z], [p[0] + x, p[2], p[1] + z], [q[0] + x, q[2], q[1] + z],\n [p[0] - x, p[2], p[1] - z], [q[0] + x, q[2], q[1] + z], [q[0] - x, q[2], q[1] - z]]) {\n position.push(...point); normal.push(0, 1, 0); color.push(...tint);\n }\n }\n }\n }\n return { position, normal, color };\n}\n", "import * as createMeshApi from '../rendering/createMesh.js';\n\nexport function createTrafficMesh(state, data, featureFaces, material, usage = 0) {\r\n const result = createMeshApi.createMesh(state.layer, data, material, usage);\r\n result.extras.featureFaces = featureFaces;\r\n return result;\r\n}\n", "import { routeGeometry } from './routeGeometry.js';\nimport { createTrafficMesh } from './createTrafficMesh.js';\n\nexport function drawTrafficRoute(state) {\r\n state.route = createTrafficMesh(state, routeGeometry(state.lanes), [], { unlit: true });\r\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\n\nexport function trafficBounds(state) {\n let radius = 20, height = 5;\n let i, lane, x, z, y;\n for (i = 0; i < state.template.position.length; i += 3) {\n radius = Math.max(radius, Math.hypot(state.template.position[i], state.template.position[i + 2]) + Math.abs(state.side));\n height = Math.max(height, state.template.position[i + 1]);\n }\n const data = [];\n for (lane of state.lanes) {\n for ([x, z, y] of lane.points) data.push(x - radius, y, z - radius, x + radius, y + height, z + radius);\n }\n const extent = { attributes: { position: { data } } };\n computeBounds(extent);\n state.mesh.geometry.bounds = extent.bounds;\n}\n", "import { build } from '../geometry/build.js';\nimport { createTrafficMesh } from './createTrafficMesh.js';\nimport { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { trafficBounds } from './trafficBounds.js';\n\nexport function rebuildTrafficMesh(state) {\n const { trips, model, vertices } = state;\n disposeTrafficObject(state, state.mesh);\n state.mesh = null;\n if (!trips.length) return;\n const color = [], featureFaces = [];\n let i, trip, component;\n for (i = 0; i < trips.length; i++) {\n trip = trips[i];\n for (component of build(model(i, trip.properties)).color) color.push(component);\n featureFaces.push({\n id: trip.id, properties: trip.properties, faceStart: i * vertices / 3, faceEnd: (i + 1) * vertices / 3,\n vertexStart: i * vertices, vertexEnd: (i + 1) * vertices\n });\n }\n const count = color.length / 3;\n state.mesh = createTrafficMesh(state, {\n position: new Array(color.length).fill(0), normal: new Array(color.length).fill(0), color,\n }, featureFaces, {}, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC);\n state.mesh.geometry.drawRange.count = count;\n state.mesh.extras.dynamicLights = true;\n trafficBounds(state);\n}\n", "export function trafficStorage(device, data) {\r\n const buffer = device.createBuffer({ size: Math.max(16, data.byteLength), usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\r\n device.queue.writeBuffer(buffer, 0, data);\r\n return buffer;\r\n}\n", "import { destroyTrafficGpu } from './destroyTrafficGpu.js';\nimport { trafficStorage } from './trafficStorage.js';\n\nexport function rebaseTraffic(state) {\n const { device } = state.layer.renderer;\n if (state.gpu?.device !== device) {\n destroyTrafficGpu(state);\n state.gpu = {\n device,\n pipeline: device.createComputePipeline({ layout: 'auto', compute: { module: device.createShaderModule({ code: state.shader }), entryPoint: 'main' } }),\n params: device.createBuffer({ size: 16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }),\n template: trafficStorage(device, new Float32Array([...state.template.position, ...state.template.normal])),\n };\n state.lanesDirty = true;\n }\n let lane, i, point, trip, binding;\n if (state.lanesDirty) {\n let count = 0;\n for (lane of state.lanes) count += lane.points.length;\n const data = new Float32Array(count * 4);\n let offset = 0;\n for (lane of state.lanes) {\n lane.start = offset / 4;\n for (i = 0; i < lane.points.length; i++) {\n point = lane.points[i];\n data[offset++] = point[0];\n data[offset++] = point[1];\n data[offset++] = point[2];\n data[offset++] = lane.lengths[i];\n }\n }\n state.gpu.points?.destroy();\n state.gpu.points = trafficStorage(device, data);\n state.lanesDirty = false;\n }\n const data = new Float32Array(state.trips.length * 4), index = new Uint32Array(data.buffer);\n for (i = 0; i < state.trips.length; i++) {\n trip = state.trips[i];\n index[i * 4] = trip.lane.start;\n index[i * 4 + 1] = trip.lane.points.length;\n data[i * 4 + 2] = trip.distance;\n data[i * 4 + 3] = trip.speed;\n state.mesh.extras.featureFaces[i].properties = trip.properties;\n }\n if (state.gpu.vehicles?.size >= data.byteLength) device.queue.writeBuffer(state.gpu.vehicles, 0, data);\n else {\n state.gpu.vehicles?.destroy();\n state.gpu.vehicles = trafficStorage(device, data);\n }\n const { position, normal } = state.mesh.geometry.attributes;\n const buffers = [state.gpu.params, state.gpu.template, state.gpu.points, state.gpu.vehicles, position.buffer, normal.buffer];\n const entries = [];\n for (binding = 0; binding < buffers.length; binding++) entries.push({ binding, resource: { buffer: buffers[binding] } });\n state.gpu.bindGroup = device.createBindGroup({\n layout: state.gpu.pipeline.getBindGroupLayout(0),\n entries,\n });\n}\n", "export function moveTraffic(state, seconds) {\r\n const { device } = state.gpu;\r\n state.paramFloats[0] = state.elapsed = seconds;\r\n state.paramFloats[1] = state.side;\r\n state.paramInts[2] = state.vertices;\r\n state.paramInts[3] = state.trips.length * state.vertices;\r\n device.queue.writeBuffer(state.gpu.params, 0, state.params);\r\n const encoder = device.createCommandEncoder(), pass = encoder.beginComputePass();\r\n pass.setPipeline(state.gpu.pipeline);\r\n pass.setBindGroup(0, state.gpu.bindGroup);\r\n pass.dispatchWorkgroups(state.trips.length);\r\n pass.end();\r\n device.queue.submit([encoder.finish()]);\r\n state.stale = true;\r\n}\n", "import { update as updateScene } from '../scene/update.js';\nimport { tripsAt } from './tripsAt.js';\nimport { trafficNow } from './trafficNow.js';\nimport { failTraffic } from './failTraffic.js';\nimport { drawTrafficRoute } from './drawTrafficRoute.js';\nimport { rebuildTrafficMesh } from './rebuildTrafficMesh.js';\nimport { rebaseTraffic } from './rebaseTraffic.js';\nimport { moveTraffic } from './moveTraffic.js';\nimport { locateTraffic } from './locateTraffic.js';\n\nexport function tickTraffic(state) {\n state.frame = undefined;\n if (!state.ready || !state.layer._map) return;\n if (!state.layer.renderer) { state.frame = requestAnimationFrame(state.tick); return; }\n if (state.mesh && !(state.mesh.geometry.attributes.position.buffer.usage & GPUBufferUsage.STORAGE)) {\n state.tripsKey = null;\n state.nextCheck = -Infinity;\n }\n const { live, time } = trafficNow(state), ms = time?.getTime(), valid = Number.isFinite(ms);\n let changed = false;\n let trip, x, y, z, dx, dz, lx, ly, lz, light;\n if (!live || !valid || !(ms >= state.rebasedAt && ms < state.nextCheck)) {\n let text;\n try {\n state.trips = valid ? tripsAt(time, state.lanes, state.velocity) : [];\n text = !valid ? 'Select a valid simulation date' : !state.loaded ? 'Loading\u2026' :\n `${state.trips.length} ${state.vehicle === 'boat' ? 'boats' : state.vehicle}`;\n } catch (error) { return failTraffic(state, error); }\n state.rebasedAt = ms;\n state.nextCheck = ms + 1000;\n const ids = [];\n for (trip of state.trips) ids.push(trip.id);\n const key = ids.join();\n changed = key !== state.tripsKey || (state.outline && !state.route && state.lanes.length);\n if (state.outline && !state.route && state.lanes.length) drawTrafficRoute(state);\n if (key !== state.tripsKey) { rebuildTrafficMesh(state); state.tripsKey = key; }\n if (state.mesh) rebaseTraffic(state);\n if (!state.error) {\n if (state.status.textContent !== text) state.status.textContent = text;\n state.status.removeAttribute('role');\n }\n }\n if (state.mesh) moveTraffic(state, (ms - state.rebasedAt) / 1000);\n if (state.mesh && state.lights && (!live || !(performance.now() - state.litAt < 100))) {\n state.litAt = performance.now();\n const lights = [];\n for (trip of state.trips) {\n ({ x, y, z, dx, dz } = locateTraffic(state, trip));\n for ({ position: [lx, ly, lz], ...light } of state.lights) {\n lights.push({ ...light, position: [x - lx * dz - lz * dx, y + ly, z + lx * dx - lz * dz] });\n }\n }\n state.mesh.extras.lights = lights;\n }\n if (state.mesh || changed) updateScene(state.layer);\n if (live && valid) state.frame = requestAnimationFrame(state.tick);\n}\n", "export async function fetchTrafficLanes(state, time, signal) {\r\n const href = new URL(state.url, document.baseURI).href;\r\n if (/\\.m?js(?:[?#]|$)/i.test(state.url)) return (await import(href)).default(time, state.layer, signal);\r\n if (!state.file) {\r\n const response = await fetch(href, { signal });\r\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\r\n state.file = await response.json();\r\n }\r\n return state.file;\r\n}\n", "// GeoJSON (Multi)LineStrings become lanes ({latlngs, properties, elevation?}); prepare() adds `points` ([x, z, ground]),\n// `lengths` and `length` in layer-local metres.\n\nexport function toLanes({ features = [] }) {\n const lanes = [];\n let geometry, properties, lines, line, latlngs, lng, lat;\n for ({ geometry, properties } of features) {\n lines = geometry?.type === 'LineString' ? [geometry.coordinates] : geometry?.type === 'MultiLineString' ? geometry.coordinates : [];\n for (line of lines) {\n latlngs = [];\n for ([lng, lat] of line) latlngs.push([lat, lng]);\n lanes.push({ latlngs, properties: properties ?? {}, elevation: properties?.elevation });\n }\n }\n return lanes;\n}\n", "import { getElevation } from '../terrain/getElevation.js';\n\nexport function groundTraffic(state) {\n const { layer, lanes } = state;\n const terrain = layer._map._terrain3D?._terrainReady && layer._map._terrain3D, base = layer.root.position[1];\n let lane, i, elevation;\n for (lane of lanes) {\n for (i = 0; i < lane.points.length; i++) {\n elevation = terrain && (lane.elevation ?? getElevation(terrain, lane.latlngs[i]));\n lane.points[i][2] = Number.isFinite(elevation) && Number.isFinite(base) ? elevation - base : 0;\n }\n }\n state.lanesDirty = true;\n state.nextCheck = -Infinity;\n}\n", "import { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { groundTraffic } from './groundTraffic.js';\n\nexport function prepareTraffic(state) {\n const { layer, lanes } = state;\n const crs = layer._map.options.crs, origin = crs.project(layer.location);\n const metres = Math.cos(layer.location.lat * Math.PI / 180);\n let lane, lat, lng, point, i;\n for (lane of lanes) {\n lane.points = [];\n for ([lat, lng] of lane.latlngs) {\n point = crs.project(new L.LatLng(lat, lng));\n lane.points.push([(point.x - origin.x) * metres, -(point.y - origin.y) * metres, 0]);\n }\n lane.lengths = [0];\n for (i = 1; i < lane.points.length; i++) {\n lane.lengths.push(lane.lengths[i - 1] + Math.hypot(lane.points[i][0] - lane.points[i - 1][0], lane.points[i][1] - lane.points[i - 1][1]));\n }\n lane.length = lane.lengths.at(-1);\n }\n groundTraffic(state);\n disposeTrafficObject(state, state.route);\n state.route = null;\n state.tripsKey = null;\n}\n", "import { toLanes } from './toLanes.js';\nimport { prepareTraffic } from './prepareTraffic.js';\n\nexport function loadedTrafficLanes(state, signal, data) {\r\n if (signal.aborted || !state.layer._map) return;\r\n state.error = null;\r\n if (data === state.loaded) {\r\n state.nextCheck = -Infinity;\r\n if (!state.frame) state.tick();\r\n return;\r\n }\r\n state.loaded = data;\r\n state.lanes = toLanes(data);\r\n prepareTraffic(state);\r\n if (!state.frame) state.tick();\r\n}\n", "import { failTraffic } from './failTraffic.js';\n\nexport function failedTrafficLoad(state, signal, error) {\r\n if (!signal.aborted && error.name !== 'AbortError') failTraffic(state, error);\r\n}\n", "import { trafficNow } from './trafficNow.js';\nimport { fetchTrafficLanes } from './fetchTrafficLanes.js';\nimport { loadedTrafficLanes } from './loadedTrafficLanes.js';\nimport { failedTrafficLoad } from './failedTrafficLoad.js';\n\nexport function loadTraffic(state) {\r\n const { time } = trafficNow(state);\r\n if (!Number.isFinite(time?.getTime())) return;\r\n state.request?.abort();\r\n const { signal } = state.request = new AbortController();\r\n fetchTrafficLanes(state, time, signal).then(\r\n loadedTrafficLanes.bind(null, state, signal),\r\n failedTrafficLoad.bind(null, state, signal),\r\n );\r\n}\n", "import { loadTraffic } from './loadTraffic.js';\n\nexport function updateTraffic(state, event) {\r\n if (event?.layer && !event.layer.control?.time) return;\r\n cancelAnimationFrame(state.frame);\r\n loadTraffic(state);\r\n state.tick();\r\n}\n", "import { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { groundTraffic } from './groundTraffic.js';\nimport { trafficBounds } from './trafficBounds.js';\n\nexport function updateTrafficTerrain(state) {\r\n if (!state.lanes.length) return;\r\n groundTraffic(state);\r\n disposeTrafficObject(state, state.route);\r\n state.route = null;\r\n if (state.mesh) trafficBounds(state);\r\n if (!state.frame) state.tick();\r\n}\n", "\uFEFF/**\r\n * Vehicles moving along GeoJSON lanes; a compute pass places them on the GPU every frame.\r\n * Source options:\r\n * - `url`: GeoJSON (Multi)LineStrings, or a JS module whose default export `(time, layer, signal)` returns them (time-dependent data);\r\n * - `vehicle`: 'car' (default), 'boat', 'bus', 'tram', 'metro', 'bicycle' or 'pedestrian'; `side`: offset right of the lane centreline in metres (vehicle default);\r\n * - `speed`: m/s of `flow` lanes; `outline`: draw the lanes.\r\n * Lane properties: `flow` (vehicles/h) or `timetable` (see scheduledTrips.js), optional fixed `elevation`\r\n * in metres, `name`/`description` for the default tooltip. The status line (count and vehicle type) sits under the layer's entry in the layers control.\r\n * L.Control.Time on the same map drives the time; without one, vehicles run live.\r\n */\r\nimport { build } from '../geometry/build.js';\r\nimport { init3D } from '../scene/init3D.js';\r\nimport { tooltip } from './tooltip.js';\r\nimport { speed } from '../constants/speed.js';\r\nimport { vehicles } from '../constants/vehicles.js';\r\nimport { trafficShader } from '../constants/trafficShader.js';\r\nimport { addTraffic } from './addTraffic.js';\nimport { placeTraffic } from './placeTraffic.js';\nimport { removeTraffic } from './removeTraffic.js';\nimport { readyTraffic } from './readyTraffic.js';\nimport { tickTraffic } from './tickTraffic.js';\nimport { updateTraffic } from './updateTraffic.js';\nimport { updateTrafficTerrain } from './updateTrafficTerrain.js';\r\n\r\nexport function initTraffic(layer, { url, vehicle = 'car', side, outline, speed: velocity = speed, ...options } = {}) {\r\n const { model, lights, side: defaultSide } = vehicles[vehicle];\r\n side ??= defaultSide;\r\n init3D(layer, {\r\n tooltip,\r\n nightLight: Boolean(lights),\r\n ...options,\r\n });\r\n const status = L.DomUtil.create('small', 'traffic-status');\r\n status.style.cssText = 'display:block;max-width:200px;margin:0 0 4px 20px;color:#555;';\r\n const template = build(model(0)), stride = template.position.length, vertices = stride / 3;\r\n const params = new ArrayBuffer(16), paramFloats = new Float32Array(params), paramInts = new Uint32Array(params);\r\n const state = {\r\n layer, url, model, lights, side, outline, velocity, vehicle, status, template, stride, vertices,\r\n params, paramFloats, paramInts,\r\n ready: false, frame: undefined, request: undefined, lanes: [], tripsKey: undefined,\r\n mesh: undefined, route: undefined, litAt: -Infinity,\r\n trips: [], rebasedAt: 0, nextCheck: -Infinity, elapsed: 0, gpu: null,\r\n lanesDirty: true, stale: false, loaded: undefined, file: undefined,\r\n };\r\n // Lane points are [x, z, ground, cumulative length]. Mirrors along() and place().\r\n state.shader = trafficShader;\r\n state.tick = tickTraffic.bind(null, state);\r\n state.update = updateTraffic.bind(null, state);\r\n state.terrain = updateTrafficTerrain.bind(null, state);\r\n layer._beforeRaycast = placeTraffic.bind(null, state);\r\n layer.on('ready', readyTraffic.bind(null, state));\r\n layer.on('add', addTraffic.bind(null, state));\r\n layer.on('remove', removeTraffic.bind(null, state));\r\n}\r\n", "export function onBlur() {\r\n this.keys.clear();\r\n}\n", "// W/S (\u2191/\u2193) run forward/back along the heading, A/D (\u2190/\u2192) turn: [forward, turn].\nexport const moves = {\n KeyW: [1, 0],\n ArrowUp: [1, 0],\n KeyS: [-1, 0],\n ArrowDown: [-1, 0],\n KeyD: [0, 1],\n ArrowRight: [0, 1],\n KeyA: [0, -1],\n ArrowLeft: [0, -1]\n};\n", "export function onPointer(event) {\r\n // Dragging only turns the camera around the walker: horizontal = bearing, vertical = pitch.\r\n const map = this.layer._map;\r\n if (event.type === 'pointerdown') {\r\n if (event.button !== 0 || event.target.closest('.leaflet-control')) return;\r\n this.drag = { x: event.clientX, y: event.clientY };\r\n map.getContainer().setPointerCapture(event.pointerId);\r\n } else if (this.drag && event.type === 'pointermove') {\r\n map._setPitchAndBearing(Math.max(20, Math.min(85, map.getPitch() - (event.clientY - this.drag.y) * 0.2)),\r\n map.getBearing() - (event.clientX - this.drag.x) * 0.25);\r\n this.drag = { x: event.clientX, y: event.clientY };\r\n } else this.drag = null;\r\n}\n", "// [part, pivot x, pivot y, swing sign]\n\nexport const limbs = [\n ['body', 0, 0, 0],\n ['leg', -0.09, 0.9, 1],\n ['leg', 0.09, 0.9, -1],\n ['arm', -0.25, 1.42, -1],\n ['arm', 0.25, 1.42, 1]\n];\n", "import { getElevation } from '../terrain/getElevation.js';\n\nexport function local() {\r\n const { layer, state } = this;\r\n const map = layer._map, crs = map.options.crs, origin = crs.project(layer.location);\r\n const metres = Math.cos(layer.location.lat * Math.PI / 180);\r\n const p = crs.project(state.latlng), terrain = map._terrain3D?._terrainReady && map._terrain3D;\r\n const ground = (terrain && getElevation(terrain, state.latlng)) || 0;\r\n return [(p.x - origin.x) * metres, ground - layer.root.position[1], -(p.y - origin.y) * metres];\r\n}\n", "import { update } from '../scene/update.js';\nimport { limbs } from '../constants/limbs.js';\nimport { local } from './local.js';\n\nexport function place() {\n const [x, y, z] = local.call(this);\n // Model forward is -z; a yaw of -heading turns it to the compass heading (x east, -z north).\n const yaw = -this.state.heading, cos = Math.cos(yaw), sin = Math.sin(yaw);\n let i, px, py, sign, mesh;\n for (i = 0; i < limbs.length; i++) {\n [, px, py, sign] = limbs[i];\n mesh = this.meshes[i];\n mesh.position[0] = x + px * cos; mesh.position[1] = y + py; mesh.position[2] = z - px * sin;\n mesh.rotation[0] = sign * this.swing * Math.sin(this.state.phase);\n mesh.rotation[1] = yaw;\n }\n update(this.layer);\n}\n", "import { place } from './place.js';\n\nexport function onTerrain() {\r\n if (this.meshes) place.call(this);\r\n}\n", "import * as disposeMesh from '../rendering/disposeMesh.js';\nimport { onKey } from './onKey.js';\nimport { onBlur } from './onBlur.js';\nimport { onPointer } from './onPointer.js';\nimport { onTerrain } from './onTerrain.js';\n\nexport function stop() {\n const map = this.layer._map;\n cancelAnimationFrame(this.frame);\n this.keys.clear(); this.drag = null;\n L.DomEvent.off(document, 'keydown keyup', this.onKey);\n L.DomEvent.off(window, 'blur', this.onBlur);\n let mesh, name;\n for (mesh of this.meshes || []) disposeMesh.disposeMesh(this.layer, mesh);\n this.meshes = null;\n this.button.setAttribute('aria-pressed', 'false');\n this.button.style.background = '#fff';\n this.hint.style.display = 'none';\n if (!map || !this.saved) return;\n L.DomEvent.off(map.getContainer(), 'pointerdown pointermove pointerup pointercancel', this.onPointer);\n map.off('terrainchange', this.onTerrain);\n map.options.scrollWheelZoom = this.saved.scrollWheelZoom;\n for (name of this.saved.handlers) map[name].enable();\n map.setView(this.state.latlng, this.saved.zoom, { animate: false });\n map.setPitch(this.saved.pitch);\n this.saved = null;\n}\n", "import { moves } from '../constants/moves.js';\nimport { stop } from './stop.js';\n\nexport function onKey(event) {\r\n // Text fields and sliders keep their keys; buttons and checkboxes don't.\r\n if (event.target.closest?.('input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]') ||\r\n event.ctrlKey || event.altKey || event.metaKey) return;\r\n if (event.type === 'keydown' && event.code === 'Escape') { this.stop(); return; }\r\n if (!moves[event.code]) return;\r\n event.preventDefault();\r\n if (event.type === 'keydown') this.keys.add(event.code); else this.keys.delete(event.code);\r\n}\n", "export function wrap(angle) {\n return Math.atan2(Math.sin(angle), Math.cos(angle));\n}\n", "\nexport const colliders = new WeakMap();\n", "import { CELL } from '../constants/CELL.js';\nimport { colliders } from '../constants/colliders.js';\n\n\nexport function collider(mesh) {\n let c = colliders.get(mesh.geometry);\n if (c) return c;\n const m = mesh.worldMatrix, { position: { data: p }, index, normal, uv } = mesh.geometry.attributes;\n\n const count = index ? index.count : p.length / 3, tri = [], nrm = [], cells = new Map(), v = [];\n\n let i, first, k, j, x, y, z, ex, ey, ez, fx, fy, fz, nx, nz, ny, length, a, h, t, ix, iz, key;\n for (i = 0; i < count; i += 3) {\n first = index ? index.data[i] : i;\n // Streetlight halos (uv.x <= 2, see scene/picking.js) are light, not matter.\n if (mesh.program.nightLight && uv && uv.data[first * 2] <= 2) {\n continue;\n }\n for (k = 0; k < 3; k++) {\n j = (index ? index.data[i + k] : i + k) * 3, x = p[j], y = p[j + 1], z = p[j + 2];\n v[k * 3] = m[0] * x + m[4] * y + m[8] * z + m[12];\n v[k * 3 + 1] = m[1] * x + m[5] * y + m[9] * z + m[13];\n v[k * 3 + 2] = m[2] * x + m[6] * y + m[10] * z + m[14];\n }\n ex = v[3] - v[0], ey = v[4] - v[1], ez = v[5] - v[2], fx = v[6] - v[0], fy = v[7] - v[1], fz = v[8] - v[2];\n\n nx = ey * fz - ez * fy, nz = ex * fy - ey * fx;\n\n ny = ez * fx - ex * fz, length = Math.hypot(nx, ny, nz);\n\n if (!length || Math.abs(ny) > 0.9 * length) {\n continue;\n }\n\n if (normal) {\n // The stored normal tells the outside, whatever the winding.\n j = first * 3, a = normal.data;\n if ((m[0] * a[j] + m[4] * a[j + 1] + m[8] * a[j + 2]) * nx + (m[2] * a[j] + m[6] * a[j + 1] + m[10] * a[j + 2]) * nz < 0) { nx = -nx; nz = -nz; }\n }\n\n h = Math.hypot(nx, nz), t = nrm.length / 2;\n\n tri.push(...v);\n nrm.push(nx / h, nz / h);\n\n for (ix = Math.floor(Math.min(v[0], v[3], v[6]) / CELL); ix <= Math.floor(Math.max(v[0], v[3], v[6]) / CELL); ix++)\n for (iz = Math.floor(Math.min(v[2], v[5], v[8]) / CELL); iz <= Math.floor(Math.max(v[2], v[5], v[8]) / CELL); iz++) {\n key = ix + ',' + iz;\n if (!cells.has(key)) {\n cells.set(key, []);\n }\n cells.get(key).push(t);\n }\n }\n c = {\n tri: Float32Array.from(tri),\n nrm: Float32Array.from(nrm),\n cells,\n origin: [m[12], m[13], m[14]]\n };\n colliders.set(mesh.geometry, c);\n return c;\n}\n", "// M\u00F6ller-Trumbore for the horizontal ray (ox, oy, oz) + d\u00B7(dx, 0, dz) against triangle t; returns d or -1.\nexport function horizontalRay(v, t, ox, oy, oz, dx, dz) {\n const i = t * 9, ex = v[i + 3] - v[i], ey = v[i + 4] - v[i + 1], ez = v[i + 5] - v[i + 2];\n const fx = v[i + 6] - v[i], fy = v[i + 7] - v[i + 1], fz = v[i + 8] - v[i + 2];\n const px = -dz * fy, py = dz * fx - dx * fz, pz = dx * fy, det = ex * px + ey * py + ez * pz;\n if (Math.abs(det) < 1e-9) return -1;\n const tx = ox - v[i], ty = oy - v[i + 1], tz = oz - v[i + 2], u = (tx * px + ty * py + tz * pz) / det;\n if (u < 0 || u > 1) return -1;\n const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex, w = (dx * qx + dz * qz) / det;\n if (w < 0 || u + w > 1) return -1;\n return (fx * qx + fy * qy + fz * qz) / det;\n}\n", "export function shouldSkipOther(other, layer) {\n return other === layer || other._type === 'terrain' || other._type === 'traffic';\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\nimport { collider } from '../collision/collider.js';\nimport { CELL } from '../constants/CELL.js';\nimport { horizontalRay } from '../collision/horizontalRay.js';\n\nexport function hitMesh(mesh, data) {\n if (!mesh.visible) return true;\n if (!mesh.geometry?.attributes?.position?.data || mesh.program?.depthTest === false) return;\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\n const m = mesh.worldMatrix, { center: k, radius } = mesh.geometry.bounds;\n const { x, y, z, dx, dz, reach } = data;\n if (Math.hypot(m[0] * k[0] + m[4] * k[1] + m[8] * k[2] + m[12] - x, m[2] * k[0] + m[6] * k[1] + m[10] * k[2] + m[14] - z) >\n radius * Math.hypot(m[0], m[1], m[2]) + reach) return;\n const c = collider(mesh), ox = x - m[12] + c.origin[0], oy = y - m[13] + c.origin[1], oz = z - m[14] + c.origin[2];\n const seen = new Set();\n let ix, iz, t, height, d;\n for (ix = Math.floor(Math.min(ox, ox + dx * reach) / CELL); ix <= Math.floor(Math.max(ox, ox + dx * reach) / CELL); ix++)\n for (iz = Math.floor(Math.min(oz, oz + dz * reach) / CELL); iz <= Math.floor(Math.max(oz, oz + dz * reach) / CELL); iz++)\n for (t of c.cells.get(ix + ',' + iz) || []) {\n if (seen.has(t) || dx * c.nrm[t * 2] + dz * c.nrm[t * 2 + 1] >= 0) continue;\n seen.add(t);\n for (height of [0.4, 1.5]) {\n d = horizontalRay(c.tri, t, ox, oy + height, oz, dx, dz);\n if (d >= 0 && d < data.best) {\n data.best = d;\n data.found = [c.nrm[t * 2], c.nrm[t * 2 + 1]];\n }\n }\n }\n}\n", "import { CELL } from '../constants/CELL.js';\nimport { collider } from '../collision/collider.js';\nimport { computeBounds } from '../geometry/computeBounds.js';\nimport { horizontalRay } from '../collision/horizontalRay.js';\nimport { traverse } from '../scene/traverse.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { shouldSkipOther } from './shouldSkipOther.js';\nimport { hitMesh } from './hitMesh.js';\n\n// Horizontal normal of the nearest wall faced within `reach` metres of the feet at world (x, y, z), walking along\n// the unit (dx, dz); knee and chest rays, so arches and tree crowns above the head let the walker through.\n// ponytail: traffic vehicles and boats move on the GPU and are not obstacles.\n\nexport function hit(layer, x, y, z, dx, dz, reach) {\n updateWorldMatrix(layer.scene);\n const data = { x, y, z, dx, dz, reach, best: reach, found: null };\n let other;\n for (other of layer._shared._layers) {\n if (shouldSkipOther(other, layer)) continue;\n traverse(other.root, hitMesh, data);\n }\n return data.found;\n}\n", "import { hit } from '../picking/hit.js';\n\nexport function blocked(east, north, feet) {\r\n const length = Math.hypot(east, north);\r\n return length > 1e-6 && hit(this.layer, feet[0], feet[1], feet[2], east / length, -north / length, length + 0.3);\r\n}\n", "import * as createMesh from '../rendering/createMesh.js';\nimport { build } from '../geometry/build.js';\nimport { limbs } from '../constants/limbs.js';\nimport { moves } from '../constants/moves.js';\nimport { parts } from '../constants/parts.js';\nimport { wrap } from '../utils/wrap.js';\nimport { local } from './local.js';\nimport { place } from './place.js';\nimport { blocked } from './blocked.js';\n\nexport function step(now) {\n const layer = this.layer, map = layer._map;\n this.frame = requestAnimationFrame(this.step);\n const dt = Math.min(0.1, (now - (this.last ?? now)) / 1000);\n this.last = now;\n if (!layer.renderer) return;\n let changed = false;\n let part, key, i;\n if (!this.meshes) {\n this.meshes = [];\n for ([part] of limbs) this.meshes.push(createMesh.createMesh(layer, build(parts[part])));\n changed = true;\n }\n let forward = 0, turn = 0;\n for (key of this.keys) { forward += moves[key]?.[0] || 0; turn += moves[key]?.[1] || 0; }\n forward = Math.sign(forward); turn = Math.sign(turn);\n if (turn) { this.state.heading = wrap(this.state.heading + turn * 2.5 * dt); changed = true; }\n if (forward) {\n const metres = forward * this.speed * dt, { lat, lng } = this.state.latlng, { position, scale } = layer.root;\n let east = Math.sin(this.state.heading) * metres, north = Math.cos(this.state.heading) * metres;\n const feet = local.call(this);\n for (i = 0; i < feet.length; i++) feet[i] = position[i] + scale[i] * feet[i];\n // World x is east, z south; keep 0.3 m from walls and slide along the one in the way.\n const wall = blocked.call(this, east, north, feet);\n if (wall) {\n const into = east * wall[0] - north * wall[1];\n east -= into * wall[0]; north += into * wall[1];\n if (blocked.call(this, east, north, feet)) east = north = 0;\n }\n this.state.latlng = new L.LatLng(lat + north / 111320, lng + east / (111320 * Math.cos(lat * Math.PI / 180)));\n this.state.phase += Math.hypot(east, north) / 1.6 * Math.PI;\n changed = true;\n }\n if (forward || turn) {\n // The camera (looking along -bearing) swings back behind the walker.\n const bearing = map.getBearing() * Math.PI / 180, behind = wrap(-this.state.heading - bearing);\n if (Math.abs(behind) > 1e-3) map._setPitchAndBearing(map.getPitch(), (bearing + behind * Math.min(1, dt * 4)) * 180 / Math.PI);\n map.setView(this.state.latlng, map.getZoom(), { animate: false });\n }\n const target = forward ? 0.9 : 0;\n if (Math.abs(this.swing - target) > 1e-3) { this.swing += (target - this.swing) * Math.min(1, dt * 10); changed = true; }\n if (changed) place.call(this);\n}\n", "import { step } from './step.js';\nimport { onKey } from './onKey.js';\nimport { onBlur } from './onBlur.js';\nimport { onPointer } from './onPointer.js';\nimport { onTerrain } from './onTerrain.js';\n\nexport function start() {\n const map = this.layer._map;\n if (this.saved || !map) return;\n this.state.latlng = map.getCenter();\n // Zoom whose camera distance (1.5 viewport heights, as in scene/render.js) is about `distance` metres behind the walker.\n const pixelsPerMetre = map.getSize().y * 1.5 / this.distance;\n const zoom = Math.min(map.getMaxZoom(), Math.log2(pixelsPerMetre * 40075016.68557849 * Math.cos(this.state.latlng.lat * Math.PI / 180) / 256));\n const handlers = [];\n let name;\n for (name of ['dragging', 'keyboard', 'doubleClickZoom', 'boxZoom']) {\n if (map[name]?.enabled()) handlers.push(name);\n }\n this.saved = {\n zoom: map.getZoom(), pitch: map.getPitch(), scrollWheelZoom: map.options.scrollWheelZoom, handlers\n };\n for (name of this.saved.handlers) map[name].disable();\n // Wheel zoom moves the camera closer or farther, keeping the walker centred.\n map.options.scrollWheelZoom = this.saved.scrollWheelZoom && 'center';\n this.state.heading = -map.getBearing() * Math.PI / 180;\n map.setView(this.state.latlng, zoom, { animate: false });\n map.setPitch(75);\n L.DomEvent.on(document, 'keydown keyup', this.onKey);\n L.DomEvent.on(window, 'blur', this.onBlur);\n L.DomEvent.on(map.getContainer(), 'pointerdown pointermove pointerup pointercancel', this.onPointer);\n map.on('terrainchange', this.onTerrain);\n this.button.setAttribute('aria-pressed', 'true');\n this.button.style.background = '#e4e4e4';\n this.hint.style.display = '';\n this.last = undefined;\n this.frame = requestAnimationFrame(this.step);\n}\n", "import { start } from './start.js';\nimport { stop } from './stop.js';\n\nexport function toggle() {\r\n if (this.saved) stop.call(this); else start.call(this);\r\n}\n", "import { init3D } from '../scene/init3D.js';\r\nimport { onBlur } from './onBlur.js';\r\nimport { onKey } from './onKey.js';\r\nimport { onPointer } from './onPointer.js';\r\nimport { onTerrain } from './onTerrain.js';\r\nimport { start } from './start.js';\r\nimport { step } from './step.js';\r\nimport { stop } from './stop.js';\r\nimport { toggle } from './toggle.js';\r\n\r\nexport function createWalk(control, {\r\n speed,\r\n distance,\r\n ...options\r\n} = {}) {\r\n const layer = new L.Layer();\r\n layer._type = 'walk';\r\n init3D(layer, options);\r\n const keys = new Set();\r\n const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control');\r\n container.style.cssText = 'display:flex;align-items:center;background:#fff;';\r\n const button = L.DomUtil.create('button', '', container);\r\n button.type = 'button';\r\n button.title = 'Walk';\r\n button.setAttribute('aria-label', 'Walk');\r\n button.setAttribute('aria-pressed', 'false');\r\n button.textContent = '\uD83D\uDEB6';\r\n button.style.cssText = 'width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;';\r\n const hint = L.DomUtil.create('small', '', container);\r\n hint.style.cssText = 'display:none;padding:0 8px;color:#333;white-space:nowrap;';\r\n hint.textContent = 'W/S: run \u00B7 A/D: turn \u00B7 drag: look around \u00B7 Esc: exit';\r\n L.DomEvent.disableClickPropagation(container);\r\n\r\n const context = {\r\n layer,\r\n speed,\r\n distance,\r\n keys,\r\n container,\r\n button,\r\n hint,\r\n meshes: null,\r\n frame: null,\r\n last: undefined,\r\n swing: 0,\r\n saved: null,\r\n drag: null,\r\n state: control.walker = layer.walker = { latlng: null, heading: 0, phase: 0 }\r\n }\r\n context.step = step.bind(context);\r\n context.onKey = onKey.bind(context);\r\n context.onBlur = onBlur.bind(context);\r\n context.onPointer = onPointer.bind(context);\r\n context.onTerrain = onTerrain.bind(context);\r\n context.start = start.bind(context);\r\n context.stop = stop.bind(context);\r\n context.toggle = toggle.bind(context);\r\n control._walk = context;\r\n L.DomEvent.on(button, 'click', context.toggle);\r\n}\r\n", "import { createWalk } from './createWalk.js';\r\n\r\nexport function initialize(options) {\r\n L.Util.setOptions(this, options);\r\n createWalk(this, this.options);\r\n}\r\n", "export function onAdd(map) {\r\n this._walk.layer.addTo(map);\r\n return this._walk.container;\r\n}\r\n", "export function onRemove() {\r\n this._walk.stop();\r\n this._walk.layer.remove();\r\n}\r\n", "import { initialize } from './initialize.js';\nimport { onAdd } from './onAdd.js';\nimport { onRemove } from './onRemove.js';\n\n/**\n * Third-person walk mode, toggled by a map button (and Esc): a pedestrian at the map centre runs with W/S (or \u2191/\u2193) and\n * turns with A/D (or \u2190/\u2192); the camera swings back behind it while it moves. Dragging the map only turns the camera\n * (bearing, pitch); the wheel changes the camera distance.\n * The walker follows the terrain, bridges included, and `control.walker` exposes `{ latlng, heading, phase }`.\n * Options: `speed` (m/s, default 70), `distance` (camera distance in metres, default 20), `position` (button corner, default 'bottomright').\n * Visible meshes of the other 3D layers (buildings, trees, models, streetlights) are solid; terrain and traffic are not.\n */\nL.Control.Walk = L.Control.extend({\n options: { position: 'bottomright', speed: 70, distance: 20 },\n initialize,\n onAdd,\n onRemove,\n});\n", "export const indexState = {};\n", "export function emptyEvents() {\n return {};\n}\n", "export function refreshNativeLayerContract(layer = this) {\n layer?._nativeGPU?.refresh?.();\n}\n", "export function bringNativeLayerToFront(layer = this) {\n layer?._nativeGPU?.reorder?.(true);\n}\n", "export function bringNativeLayerToBack(layer = this) {\n layer?._nativeGPU?.reorder?.(false);\n}\n", "import { indexState } from '../constants/indexState.js';\n\nexport function closestCameraLayerPoint(point) {\n this._project();\n this._parts = this._rings;\n return indexState.closestMethods.get(this).call(this, point);\n}\n", "import { indexState } from '../constants/indexState.js';\n\nexport function cameraCircleBounds() {\n this._project();\n return indexState.boundsMethods.get(this).call(this);\n}\n", "import { indexState } from '../constants/indexState.js';\n\nexport function initializeGridContainer() {\n indexState.gridInitializers.get(this).call(this);\n this._container.remove();\n}\n", "import { indexState } from '../constants/indexState.js';\n\nexport function cancelGridFade(layer) {\n indexState.pendingGridFades.delete(layer);\n layer._fadeFrame = null;\n if (!indexState.pendingGridFades.size && indexState.gridFadeFrame !== null) {\n cancelAnimationFrame(indexState.gridFadeFrame);\n indexState.gridFadeFrame = null;\n }\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { updateGridOpacity } from './updateGridOpacity.js';\n\nexport function runGridFades() {\n indexState.gridFadeFrame = null;\n const layers = [...indexState.pendingGridFades];\n let layer, version;\n for ([layer, version] of layers) {\n if (indexState.pendingGridFades.get(layer) !== version) continue;\n indexState.pendingGridFades.delete(layer);\n layer._fadeFrame = null;\n updateGridOpacity.call(layer);\n }\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { runGridFades } from './runGridFades.js';\n\nexport function scheduleGridFade(layer) {\n layer._fadeVersion = (layer._fadeVersion || 0) + 1;\n indexState.pendingGridFades.set(layer, layer._fadeVersion);\n if (indexState.gridFadeFrame === null) indexState.gridFadeFrame = requestAnimationFrame(runGridFades);\n layer._fadeFrame = indexState.gridFadeFrame;\n}\n", "import { cancelGridFade } from './cancelGridFade.js';\nimport { scheduleGridFade } from './scheduleGridFade.js';\n\nexport function updateGridOpacity() {\n if (!this._map) return;\n const layer = this, now = Date.now();\n let fading = false, prune = false;\n let tile;\n for (tile of Object.values(this._tiles || {})) {\n if (!tile.current || !tile.loaded) continue;\n tile._gpuOpacity = this._map._fadeAnimated ? Math.min(1, (now - tile.loaded) / 200) : 1;\n if (tile._gpuOpacity < 1) fading = true;\n else if (!tile.active) {\n this._onOpaqueTile(tile);\n tile.active = true;\n prune = true;\n }\n }\n if (prune && !this._noPrune) this._pruneTiles();\n this._nativeGPU?.refresh?.();\n cancelGridFade(layer);\n if (fading) scheduleGridFade(layer);\n}\n", "import { indexState } from '../constants/indexState.js';\n\nexport function fireRasterLoad() {\n indexState.pendingRasterLoads.shift()?.fire('load');\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { fireRasterLoad } from './fireRasterLoad.js';\n\nexport function addRasterImage() {\n if (!this._image) this._initImage();\n if (this._image.complete && this._image.naturalWidth) {\n indexState.pendingRasterLoads.push(this);\n queueMicrotask(fireRasterLoad);\n }\n}\n", "import { noOperation } from '../utils/noOperation.js';\nimport { emptyEvents } from '../scene/emptyEvents.js';\nimport { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\nimport { bringNativeLayerToFront } from './bringNativeLayerToFront.js';\nimport { bringNativeLayerToBack } from './bringNativeLayerToBack.js';\nimport { indexState } from '../constants/indexState.js';\nimport { closestCameraLayerPoint } from './closestCameraLayerPoint.js';\nimport { cameraCircleBounds } from './cameraCircleBounds.js';\nimport { initializeGridContainer } from './initializeGridContainer.js';\nimport { updateGridOpacity } from './updateGridOpacity.js';\nimport { addRasterImage } from './addRasterImage.js';\n\nexport function initializeNativeLayer() {\n if (this instanceof L.Polyline || this instanceof L.CircleMarker) {\n this.beforeAdd = this.onAdd = this.onRemove = this._updateBounds = noOperation;\n this.getEvents = emptyEvents;\n this._renderer = {\n options: { tolerance: 0 },\n _updatePath: refreshNativeLayerContract,\n _updateStyle: refreshNativeLayerContract,\n _bringToFront: bringNativeLayerToFront,\n _bringToBack: bringNativeLayerToBack,\n };\n if (this instanceof L.Polyline) {\n indexState.closestMethods.set(this, this.closestLayerPoint);\n this.closestLayerPoint = closestCameraLayerPoint;\n }\n if (this instanceof L.Circle) {\n indexState.boundsMethods.set(this, this.getBounds);\n this.getBounds = cameraCircleBounds;\n }\n } else if (this instanceof L.GridLayer) {\n indexState.gridInitializers.set(this, this._initContainer);\n this._initContainer = initializeGridContainer;\n this._updateOpacity = updateGridOpacity;\n } else if (this instanceof L.ImageOverlay && !(this instanceof L.VideoOverlay) && !(this instanceof L.SVGOverlay)) {\n this.onAdd = addRasterImage;\n this.onRemove = noOperation;\n this.getEvents = emptyEvents;\n this._reset = refreshNativeLayerContract;\n }\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { initNativeGPU } from '../core/initNativeGPU.js';\n\nexport function layerLayerAdd(event) {\n const native = !this._3d && (\n this instanceof L.GridLayer ||\n this instanceof L.Polyline ||\n this instanceof L.CircleMarker ||\n this instanceof L.Marker && !(this.options.icon instanceof L.DivIcon) ||\n this instanceof L.ImageOverlay && !(this instanceof L.VideoOverlay) && !(this instanceof L.SVGOverlay)\n );\n if (native) {\n if (this instanceof L.GridLayer || this instanceof L.ImageOverlay) {\n this.options.crossOrigin ||= true;\n }\n if (this instanceof L.Marker) this.options.icon.options.crossOrigin ||= true;\n }\n indexState.layerProto._layerAdd.call(this, event);\n if (!native || !event.target.hasLayer(this)) return;\n initNativeGPU(this, event.target);\n}\n", "import { setGeoJSONData } from './setGeoJSONData.js';\n\nexport function setGeoJSONLayerData(data) {\n return setGeoJSONData(this, data);\n}\n", "import { setGeoJSONLayerData } from './setGeoJSONLayerData.js';\nimport { init3D } from '../scene/init3D.js';\n\nexport function initializeGeoJSON(layer, options) {\n layer._geojson = true;\n layer.setData = setGeoJSONLayerData;\n init3D(layer, options);\n}\n", "import { initializeGeoJSON } from '../sources/initializeGeoJSON.js';\nimport { initRaster } from '../raster/initRaster.js';\nimport { initTerrain } from '../terrain/initTerrain.js';\nimport { initTraffic } from '../traffic/initTraffic.js';\n\nexport function initializerFor(type) {\n switch (type) {\n case 'geojson': return initializeGeoJSON;\n case 'pmtiles': return initRaster;\n case 'terrain': return initTerrain;\n case 'traffic': return initTraffic;\n default: throw new Error(`Unknown layer type: ${type}`);\n }\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { initializerFor } from './initializerFor.js';\n\nexport function resolveNextInitialization() {\n const task = indexState.pendingInitializations.shift();\n try {\n task.initialize = initializerFor(task.type);\n } catch (error) {\n task.error = error;\n }\n return task;\n}\n", "export function initializeLayer(task) {\n const { layer, ready } = task;\n try {\n if (task.error) throw task.error;\n const map = layer._map;\n map?.removeLayer(layer);\n delete layer.onAdd;\n delete layer.onRemove;\n task.initialize(layer, task.settings);\n map?.addLayer(layer);\n return layer.ready === ready ? layer : layer.ready;\n } catch (error) {\n layer.fire('error', { error });\n throw error;\n }\n}\n", "import { indexState } from '../constants/indexState.js';\nimport { init3D } from './init3D.js';\nimport { noOperation } from '../utils/noOperation.js';\nimport { resolveNextInitialization } from './resolveNextInitialization.js';\nimport { initializeLayer } from './initializeLayer.js';\n\nexport function layerInitialize(options = {}) {\n if (Object.getPrototypeOf(this) !== L.Layer.prototype || !options.source) {\n if (indexState.layerProto.initialize) return indexState.layerProto.initialize.apply(this, arguments);\n L.Util.setOptions(this, options);\n return;\n }\n const {\n source: {\n type = options.source.data?.type === 'FeatureCollection'\n ? 'geojson'\n : /\\.pmtiles(?:[?#]|$)/i.test(options.source.url) ? 'pmtiles' : '3d',\n ...source\n },\n ...core\n } = options;\n const settings = { ...source, ...core };\n L.Util.setOptions(this, core);\n this._type = type;\n if (type === '3d') {\n init3D(this, settings);\n return;\n }\n this.onAdd = noOperation;\n this.onRemove = noOperation;\n // ponytail: type methods (setOpacity, add, ...) exist only once `ready` resolves.\n const task = { layer: this, type, settings, ready: null };\n indexState.pendingInitializations.push(task);\n indexState.loading = indexState.loading.catch(noOperation).then(resolveNextInitialization);\n const ready = this.ready = indexState.loading.then(initializeLayer);\n task.ready = ready;\n ready.catch(noOperation);\n}\n", "import './camera/mapCamera.js';\nimport { init3D } from './scene/init3D.js';\nimport { initNativeGPU } from './core/initNativeGPU.js';\nimport { initRaster } from './raster/initRaster.js';\nimport { setGeoJSONData } from './sources/setGeoJSONData.js';\nimport { initTerrain } from './terrain/initTerrain.js';\nimport './sunlight/initSunlight.js';\nimport { initTraffic } from './traffic/initTraffic.js';\nimport './walk/initWalk.js';\nimport { indexState } from './constants/indexState.js';\nimport { initializeNativeLayer } from './core/initializeNativeLayer.js';\nimport { layerLayerAdd } from './scene/layerLayerAdd.js';\nimport { layerInitialize } from './scene/layerInitialize.js';\n\n/**\n * `new L.Layer({ source: { type, url, ...settings }, pane, attribution })`: layers with a `source`\n * initialize their specialized behavior on first use. Native map layers also join the WebGPU scene.\n */\n\n/**\n * Router for `new L.Layer({ source: { type, url, ...settings }, pane, attribution })`.\n * It initializes the existing instance from the bundled source modules;\n * types receive flat options (`{ ...source, pane, attribution }`), so `layer.options.url` etc.\n *\n * Folder layout:\n * - scene/: source routing, lifecycle and graph; initializers live in their domain folders.\n * - core/: Leaflet layer integration; camera/ and controls/: camera and interaction.\n * - sources/ and picking/: source geometry and feature interaction.\n * - rendering/, shaders/, shadows/ and lighting/: WebGPU drawing and illumination.\n * - geometry/, triangulation/ and collision/: mesh operations and spatial queries.\n * - models/, archives/ and raster/: glTF loading, archive access and raster tiles.\n * - constants/ and state/: exported module-level const and let bindings.\n * - terrain/, sunlight/, traffic/ and walk/: feature-specific operations.\n * Operations receive the layer explicitly, without subclasses or prototype replacement.\n * Dataset-specific code and data (routes, timetables, API loaders) belong to the application, e.g. misc/.\n *\n * When `type` is omitted, inline FeatureCollections use 'geojson'; otherwise *.pmtiles URLs use\n * 'pmtiles' and other sources use '3d'.\n */\n\nindexState.layerProto = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Layer.prototype));\n\n// One chain for every pending layer: they become real layers in creation order.\nindexState.loading = Promise.resolve();\n\nindexState.pendingInitializations = [];\n\nindexState.closestMethods = new WeakMap();\nindexState.boundsMethods = new WeakMap();\nindexState.gridInitializers = new WeakMap();\n\nindexState.pendingGridFades = new Map();\nindexState.gridFadeFrame = null;\n\nindexState.pendingRasterLoads = [];\n\n/**\n * The '3d' layer type: native WebGPU scene synchronized with the map camera.\n * Layers on one map share a canvas, scene and camera; each has its own root transform.\n *\n * @typedef {Object} Layer3DOptions Layer options; pane and attribution remain standard L.Layer options.\n * @property {string} [type] '3d', 'geojson', 'pmtiles', 'terrain' or 'traffic'.\n * @property {number[]} [center] Local origin [lat,lng]; defaults to the first map center.\n * @property {number} [terrainOffset=0] Vertical offset in metres when terrain is enabled.\n * @property {boolean} [terrainConform=false] Fit lower model geometry to local terrain elevation.\n * @property {'OPAQUE'|'MASK'|'BLEND'} [alphaMode] Override every glTF material's alpha mode.\n * @property {number[]} [rotation] Model Euler rotation [x,y,z] in radians, YXZ order.\n * @property {number[]} [scale] Model scale [x,y,z].\n * @property {string} [url] GLB/glTF model URL or PMTiles archive URL.\n * @property {function(Object): (ExtrusionStyle|null)} [style] Source styling; null skips a feature.\n * @property {function(PickedFeature): (Node|string)} [tooltip] Tooltip content; strings are text.\n * @property {string} [ariaLabel='3D scene'] Shared canvas accessible name.\n * @property {boolean} [nightLight=false] Point sources: emissive bulbs and local illumination.\n * @property {boolean} [nightSparkle=false] Model: sparse luminous points at night.\n *\n * @typedef {Object} ExtrusionStyle\n * @property {number} top Roof height in metres; must exceed bottom.\n * @property {number} [bottom=0] Nonnegative base height.\n * @property {number|string|Object} [color=0xd9b38c] RGB/CSS color or linear-space {h,s,l}.\n * @property {number} [trunkRadius] Point tree trunk radius in metres.\n * @property {number} [crownRadius] Point tree crown radius in metres.\n * @property {number} [crownBottom] Point tree crown base in metres.\n * @property {string} [crownShape='round'] Point tree crown shape.\n * @property {number|string|Object} [trunkColor=0x72513a] Point tree bark color.\n * @property {number} [lightRadius] Point light estimated ground reach in metres.\n * @property {number} [lightFlux] Point light luminous flux in lumens.\n *\n * @typedef {Object} PickedFeature\n * @property {string|number} id Source feature id or configured model URL.\n * @property {Object} properties GeoJSON properties or model-level glTF extras.\n * @property {Object} mesh Intersected mesh.\n * @property {number[]} point Intersection [x,y,z] in shared scene metres.\n * @property {Object} [model] Configured model root; absent for source polygons.\n * @property {number} [vertexStart] First polygon vertex in the batched mesh.\n * @property {number} [vertexEnd] Exclusive end of the polygon's vertex range.\n *\n * @typedef {Object} SourceArea\n * @property {Object} coords Archive block {z,x,y}.\n * @property {AbortController} request Cancellation prevents attaching obsolete results.\n * @property {boolean} [done] Geometry built successfully, including empty blocks.\n * @property {Object|null} [mesh] Batched GPU mesh.\n * @property {number} [buildings] Emitted feature count.\n * @property {number} [skipped] Features skipped by style.\n * @property {string} [error] Failed load/build message.\n *\n * @param {L.Layer} backend\n * @param {Layer3DOptions} [options] World origin comes from center or the first map centre.\n */\n\nL.Layer.include({\n _layerAdd: layerLayerAdd,\n initialize: layerInitialize,\n});\n\nL.Layer.addInitHook(initializeNativeLayer);"],
5
- "mappings": "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",
6
- "names": ["editable", "target", "init_editable", "__esmMin", "shiftRotateWheel", "event", "handler", "editable", "init_shiftRotateWheel", "__esmMin", "init_editable", "shiftRotateAddHooks", "container", "shiftRotateWheel", "init_shiftRotateAddHooks", "__esmMin", "init_shiftRotateWheel", "shiftRotateRemoveHooks", "container", "init_shiftRotateRemoveHooks", "__esmMin", "ShiftRotate", "init_ShiftRotate", "__esmMin", "init_shiftRotateAddHooks", "init_shiftRotateRemoveHooks", "shiftRotateAddHooks", "shiftRotateRemoveHooks", "cameraControlsState", "init_cameraControlsState", "__esmMin", "cameraDragDown", "event", "state", "cameraControlsState", "editable", "rect", "init_cameraDragDown", "__esmMin", "init_cameraControlsState", "init_editable", "cameraDragMove", "event", "state", "cameraControlsState", "x", "y", "bearing", "angle", "init_cameraDragMove", "__esmMin", "init_cameraControlsState", "finishCameraDrag", "state", "event", "finished", "init_finishCameraDrag", "__esmMin", "cameraDragEnd", "event", "finishCameraDrag", "cameraControlsState", "init_cameraDragEnd", "__esmMin", "init_finishCameraDrag", "init_cameraControlsState", "cameraDragClick", "event", "state", "cameraControlsState", "init_cameraDragClick", "__esmMin", "init_cameraControlsState", "cameraDragContextMenu", "event", "state", "cameraControlsState", "init_cameraDragContextMenu", "__esmMin", "init_cameraControlsState", "endAllCameraDrags", "state", "cameraControlsState", "finishCameraDrag", "init_endAllCameraDrags", "__esmMin", "init_cameraControlsState", "init_finishCameraDrag", "dragCamera", "map", "element", "accept", "sensitivity", "orbit", "state", "cameraControlsState", "cameraDragDown", "cameraDragMove", "cameraDragEnd", "cameraDragClick", "cameraDragContextMenu", "endAllCameraDrags", "init_dragCamera", "__esmMin", "init_cameraControlsState", "init_cameraDragDown", "init_cameraDragMove", "init_cameraDragEnd", "init_cameraDragClick", "init_cameraDragContextMenu", "init_endAllCameraDrags", "acceptPitchDrag", "event", "init_acceptPitchDrag", "__esmMin", "pitchDragAddHooks", "dragCamera", "acceptPitchDrag", "init_pitchDragAddHooks", "__esmMin", "init_dragCamera", "init_acceptPitchDrag", "removeCameraDrag", "state", "finishCameraDrag", "element", "cameraDragDown", "cameraDragMove", "cameraDragEnd", "cameraDragClick", "cameraDragContextMenu", "cameraControlsState", "endAllCameraDrags", "init_removeCameraDrag", "__esmMin", "init_finishCameraDrag", "init_cameraDragDown", "init_cameraDragMove", "init_cameraDragEnd", "init_cameraDragClick", "init_cameraDragContextMenu", "init_cameraControlsState", "init_endAllCameraDrags", "pitchDragRemoveHooks", "removeCameraDrag", "init_pitchDragRemoveHooks", "__esmMin", "init_removeCameraDrag", "PitchDrag", "init_PitchDrag", "__esmMin", "init_pitchDragAddHooks", "init_pitchDragRemoveHooks", "pitchDragAddHooks", "pitchDragRemoveHooks", "compassOrientation", "event", "handler", "bearing", "orientation", "init_compassOrientation", "__esmMin", "finishCompassPermission", "handlerResult", "permissionResult", "handler", "generation", "error", "init_finishCompassPermission", "__esmMin", "compassAddHooks", "compassOrientation", "permission", "request", "error", "finishCompassPermission", "init_compassAddHooks", "__esmMin", "init_compassOrientation", "init_finishCompassPermission", "compassRemoveHooks", "init_compassRemoveHooks", "__esmMin", "Compass", "init_Compass", "__esmMin", "init_compassAddHooks", "init_compassRemoveHooks", "compassAddHooks", "compassRemoveHooks", "resizeMap", "entries", "init_resizeMap", "__esmMin", "containerResizeAddHooks", "container", "resizeMap", "init_containerResizeAddHooks", "__esmMin", "init_resizeMap", "containerResizeRemoveHooks", "container", "init_containerResizeRemoveHooks", "__esmMin", "ContainerResize", "init_ContainerResize", "__esmMin", "init_containerResizeAddHooks", "init_containerResizeRemoveHooks", "containerResizeAddHooks", "containerResizeRemoveHooks", "notifyCameraTouchChange", "init_notifyCameraTouchChange", "__esmMin", "TouchMode", "init_TouchMode", "__esmMin", "init_notifyCameraTouchChange", "notifyCameraTouchChange", "rotateButtonClick", "event", "control", "map", "init_rotateButtonClick", "__esmMin", "rotateButtonKeydown", "event", "control", "map", "step", "init_rotateButtonKeydown", "__esmMin", "refreshRotateControl", "map", "pitch", "init_refreshRotateControl", "__esmMin", "acceptRotateDrag", "event", "init_acceptRotateDrag", "__esmMin", "refreshRotateFocus", "refreshRotateControl", "init_refreshRotateFocus", "__esmMin", "init_refreshRotateControl", "rotateOnAdd", "map", "container", "button", "arrow", "rotateButtonClick", "rotateButtonKeydown", "refreshRotateControl", "dragCamera", "acceptRotateDrag", "refreshRotateFocus", "init_rotateOnAdd", "__esmMin", "init_rotateButtonClick", "init_rotateButtonKeydown", "init_refreshRotateControl", "init_dragCamera", "init_acceptRotateDrag", "init_refreshRotateFocus", "rotateOnRemove", "map", "pitchDragRemoveHooks", "init_rotateOnRemove", "__esmMin", "init_pitchDragRemoveHooks", "rotateControl", "options", "init_rotateControl", "__esmMin", "startCameraTouch", "event", "state", "map", "container", "a", "b", "middle", "init_startCameraTouch", "__esmMin", "moveCameraTouch", "event", "state", "map", "container", "touch", "a", "b", "angle", "middle", "delta", "distance", "zoom", "projected", "init_moveCameraTouch", "__esmMin", "endCameraTouch", "state", "event", "map", "container", "touch", "init_endCameraTouch", "__esmMin", "endCameraTouchEvent", "event", "endCameraTouch", "init_endCameraTouchEvent", "__esmMin", "init_endCameraTouch", "changeCameraTouch", "state", "map", "container", "active", "endCameraTouch", "init_changeCameraTouch", "__esmMin", "init_endCameraTouch", "endAllCameraTouches", "state", "cameraControlsState", "endCameraTouch", "init_endAllCameraTouches", "__esmMin", "init_cameraControlsState", "init_endCameraTouch", "cleanupCameraTouch", "state", "container", "map", "endCameraTouch", "startCameraTouch", "moveCameraTouch", "endCameraTouchEvent", "cameraControlsState", "endAllCameraTouches", "changeCameraTouch", "init_cleanupCameraTouch", "__esmMin", "init_endCameraTouch", "init_startCameraTouch", "init_moveCameraTouch", "init_endCameraTouchEvent", "init_cameraControlsState", "init_endAllCameraTouches", "init_changeCameraTouch", "cameraControls_exports", "__export", "cameraControls", "map", "ContainerResize", "ShiftRotate", "PitchDrag", "Compass", "TouchMode", "container", "state", "cameraControlsState", "startCameraTouch", "moveCameraTouch", "endCameraTouchEvent", "endAllCameraTouches", "changeCameraTouch", "cleanupCameraTouch", "init_cameraControls", "__esmMin", "init_ShiftRotate", "init_PitchDrag", "init_Compass", "init_ContainerResize", "init_TouchMode", "init_cameraControlsState", "init_rotateOnAdd", "init_rotateOnRemove", "init_rotateControl", "init_shiftRotateAddHooks", "init_shiftRotateRemoveHooks", "init_pitchDragAddHooks", "init_pitchDragRemoveHooks", "init_compassAddHooks", "init_compassRemoveHooks", "init_containerResizeAddHooks", "init_containerResizeRemoveHooks", "init_startCameraTouch", "init_moveCameraTouch", "init_endCameraTouchEvent", "init_changeCameraTouch", "init_cleanupCameraTouch", "init_endAllCameraTouches", "rotateOnAdd", "rotateOnRemove", "rotateControl", "nativeLayerState", "nativeImageRefresh", "event", "state", "nativeLayerState", "refreshNativeLayer", "nativeImageError", "event", "state", "nativeLayerState", "removeImageState", "image", "state", "states", "nativeLayerState", "addImageState", "image", "state", "states", "nativeLayerState", "synchronizeZoomView", "backend", "now", "map", "animation", "time", "start", "view", "proxy", "progress", "targetScale", "scale", "from", "to", "destroyAfterSubmission", "layer", "texture", "submitted", "error", "destroyTexture", "layer", "texture", "destroyAfterSubmission", "resizeRenderer", "backend", "size", "destroyTexture", "cross", "a", "b", "updateCamera", "camera", "z", "i", "value", "zLength", "x", "cross", "xLength", "y", "view", "f", "n", "r", "projection", "projectionView", "bridgeElevation", "point", "bridges", "bridge", "a", "b", "c", "d", "u", "v", "sample", "tiles", "px", "py", "tileX", "tileY", "tile", "elevation", "terrainElevation", "point", "tiles", "x", "y", "x0", "y0", "fx", "fy", "values", "sample", "valid", "first", "value", "getElevation", "backend", "location", "point", "bridgeElevation", "terrainElevation", "updateMapCamera", "backend", "size", "map", "zoom", "center", "pixelsPerMeter", "offset", "distance", "target", "getElevation", "pitch", "bearing", "camera", "updateCamera", "updateWorldMatrix", "node", "parent", "parentVersion", "matrixMode", "changed", "i", "value", "child", "state", "local", "degrees", "matrix", "world", "computeBounds", "geometry", "min", "max", "data", "instances", "axis", "offset", "low", "high", "center", "radius", "collectMeshes", "mesh", "sunlight", "projection", "frustum", "frustumLengths", "candidates", "shadowMeshes", "computeBounds", "bounds", "world", "center", "x", "y", "z", "clipZ", "clipW", "radius", "child", "collectFrameMeshes", "backend", "sunlight", "sceneChanged", "projection", "renderer", "frustum", "frustumLengths", "i", "axis", "plane", "j", "offset", "candidates", "shadowMeshes", "updateWorldMatrix", "collectMeshes", "ensureRoofBlit", "renderer", "device", "module", "getRasterTileSize", "compareRoofTiles", "a", "b", "composeRoofAtlas", "backend", "tiles", "zoom", "min", "size", "width", "height", "renderer", "device", "map", "opacities", "opacityBuffer", "encoder", "atlasPass", "compareRoofTiles", "i", "tile", "layer", "coords", "image", "source", "tileSize", "offset", "x", "y", "getRasterTileSize", "rebuildRoofAtlas", "backend", "rasters", "signature", "now", "map", "renderer", "tiles", "zoom", "layer", "tile", "coords", "size2", "bounds", "getRasterTileSize", "min", "size", "scale", "width", "height", "origin", "pixels", "matrix", "texture", "destroyTexture", "ensureRoofBlit", "composeRoofAtlas", "updateRoofRaster", "backend", "now", "map", "rasters", "hasRoofTexture", "layer", "signatures", "loading", "signature", "rebuildRoofAtlas", "destroyTexture", "compareMeshes", "a", "b", "sortMeshes", "meshes", "compareMeshes", "roofCoverage", "mesh", "backend", "rasters", "map", "bounds", "world", "intersectsArchive", "layer", "zoom", "origin", "scale", "min", "max", "i", "x", "y", "z", "px", "py", "nw", "se", "remaining", "tile", "size", "left", "top", "pieces", "x0", "y0", "x1", "y1", "l", "t", "r", "b", "prepareFrameMeshes", "backend", "rasters", "now", "meshes", "candidates", "shadowMeshes", "renderer", "appearing", "mesh", "progress", "roofCoverage", "sortMeshes", "minGroundZoom", "maxGroundZoom", "shadowCount", "bindSunlight", "layer", "sun", "visitCells", "packed", "minX", "minZ", "cellSize", "columns", "offsets", "data", "values", "i", "radius", "x", "z", "y", "c", "key", "j", "o", "lightGrid", "packed", "maxBytes", "count", "values", "value", "key", "cellSize", "data", "minX", "minZ", "maxX", "maxZ", "columns", "rows", "counts", "next", "visitCells", "entries", "length", "offset", "worldLights", "lights", "m", "values", "i", "x", "y", "z", "radius", "color", "flux", "w", "cacheLightGrid", "meshes", "previous", "maxBytes", "unchanged", "packed", "snapshots", "i", "mesh", "matrix", "lights", "cache", "sameMatrix", "j", "worldLights", "lightGrid", "collectLightMeshes", "node", "fixed", "moving", "child", "updatePointLights", "backend", "device", "sun", "fixed", "moving", "layer", "collectLightMeshes", "maxBytes", "staticGrid", "cacheLightGrid", "dynamicGrid", "size", "uploadStatic", "destroyTexture", "bindSunlight", "prepareFrameUniforms", "backend", "meshes", "shadowMeshes", "sunlight", "renderer", "camera", "view", "direction", "x", "y", "z", "lightX", "lightY", "lightZ", "lightLength", "skyLength", "destroyTexture", "frameData", "night", "tint", "updatePointLights", "drawGeometry", "backend", "mesh", "pass", "cullMode", "frontFace", "geometry", "program", "device", "depthCompare", "pipelineKey", "pipeline", "uniforms", "renderer", "offset", "data", "base", "textures", "binding", "texture", "i", "attribute", "bindingsChanged", "entries", "boundTextures", "instances", "index", "drawSceneMeshes", "backend", "encoder", "meshes", "renderer", "pass", "mesh", "world", "uniforms", "determinant", "frontFace", "program", "drawGeometry", "shadowCacheMatches", "sun", "meshes", "sunlight", "cache", "unchanged", "i", "mesh", "previous", "range", "attribute", "shadowBounds", "meshes", "min", "max", "mesh", "bounds", "matrix", "cached", "i", "x", "y", "z", "w", "axis", "value", "computeBounds", "shadowMatrix", "meshes", "sunlight", "min", "max", "shadowBounds", "span", "center", "position", "i", "corner", "axis", "point", "coordinates", "value", "radius", "lightCamera", "updateCamera", "view", "low", "high", "ensureShadowPipeline", "device", "sun", "instanced", "key", "shader", "buffers", "drawShadowMeshes", "backend", "encoder", "meshes", "renderer", "device", "sun", "pass", "pipeline", "mesh", "instances", "nextPipeline", "offset", "attribute", "index", "range", "resizeSunlight", "backend", "size", "device", "sun", "destroyTexture", "bindSunlight", "renderSunlight", "backend", "encoder", "meshes", "sunlight", "renderer", "device", "sun", "values", "shadowCacheMatches", "resizeSunlight", "shadowMatrix", "ensureShadowPipeline", "mesh", "drawShadowMeshes", "snapshots", "mesh2", "pendingUpdates", "cancelUpdate", "backend", "frame", "pendingUpdates", "setParent", "node", "parent", "removeRasterTile", "layer", "tile", "mesh", "setParent", "update", "destroyTexture", "releaseRasterTile", "backend", "tile", "key", "removeRasterTile", "setParent", "destroyTexture", "update", "pruneRasterTiles", "backend", "wanted", "now", "pending", "key", "tile", "parts", "overlaps", "coords", "zoom", "releaseRasterTile", "render", "backend", "cancelUpdate", "map", "now", "size", "synchronizeZoomView", "resizeRenderer", "updateMapCamera", "updateWorldMatrix", "sceneChanged", "layer", "sunlight", "collectFrameMeshes", "shadowMeshes", "renderer", "rasters", "updateRoofRaster", "meshes", "appearing", "prepareFrameMeshes", "encoder", "prepareFrameUniforms", "renderSunlight", "drawSceneMeshes", "pruneRasterTiles", "update", "renderPendingUpdates", "updates", "pendingUpdates", "failure", "backend", "render", "error", "update", "backend", "shared", "first", "pendingUpdates", "renderPendingUpdates", "refreshNativeLayer", "state", "activeImages", "image", "nativeImageRefresh", "nativeImageError", "removeImageState", "addImageState", "update", "nativeLayerMethod", "name", "source", "args", "state", "result", "layer", "zIndex", "extreme", "edge", "refreshNativeLayer", "nativeSetLatLng", "args", "nativeLayerMethod", "nativeSetLatLngs", "args", "nativeLayerMethod", "nativeAddLatLng", "args", "nativeLayerMethod", "nativeSetRadius", "args", "nativeLayerMethod", "nativeSetStyle", "args", "nativeLayerMethod", "nativeRedraw", "args", "nativeLayerMethod", "nativeSetIcon", "args", "nativeLayerMethod", "nativeSetUrl", "args", "nativeLayerMethod", "nativeSetBounds", "args", "nativeLayerMethod", "nativeSetOpacity", "args", "nativeLayerMethod", "nativeSetZIndex", "args", "nativeLayerMethod", "nativeSetZIndexOffset", "args", "nativeLayerMethod", "nativeBringToFront", "args", "nativeLayerMethod", "nativeBringToBack", "args", "nativeLayerMethod", "nativeMethodHandlers", "nativeSetLatLng", "nativeSetLatLngs", "nativeAddLatLng", "nativeSetRadius", "nativeSetStyle", "nativeRedraw", "nativeSetIcon", "nativeSetUrl", "nativeSetBounds", "nativeSetOpacity", "nativeSetZIndex", "nativeSetZIndexOffset", "nativeBringToFront", "nativeBringToBack", "renderers", "cityMapper", "renderers", "emptyNode", "textureBinding", "bindings", "name", "enabled", "current", "materialShaders", "material", "sparkle", "elevationWGSL", "hasBase", "hasMetal", "hasEmissive", "hasOcclusion", "hasRoof", "hasTerrain", "textured", "vertex", "bindings", "baseBinding", "textureBinding", "metalBinding", "emissiveBinding", "occlusionBinding", "roofBinding", "fragment", "elevationWGSL", "reportCompilation", "backend", "pending", "info", "message", "infos", "errors", "error", "createProgram", "backend", "material", "shaders", "materialShaders", "elevationWGSL", "vertex", "fragment", "reportCompilation", "vertexBuffers", "bindGroupEntries", "texture", "bindGroupLayout", "pipelineLayout", "createMesh", "backend", "data", "material", "usage", "program", "device", "attributes", "name", "values", "array", "size", "buffer", "mesh", "emptyNode", "createProgram", "cityMapper", "setParent", "update", "disposeMesh", "backend", "mesh", "setParent", "update", "attribute", "isClockWise", "points", "area", "i", "a", "b", "cross", "a", "b", "c", "equal", "a", "b", "clean", "ring", "changed", "i", "a", "b", "c", "equal", "cross", "inside", "point", "ring", "result", "i", "j", "a", "b", "insideHole", "point", "rings", "i", "inside", "on", "p", "q", "intersects", "a", "b", "c", "d", "equal", "abC", "cross", "abD", "cdA", "cdB", "on", "crossesRing", "a", "b", "ring", "i", "intersects", "crossesBoundary", "a", "b", "polygon", "rings", "crossesRing", "containsVertex", "polygon", "a", "b", "c", "p", "equal", "cross", "area", "ring", "sum", "i", "p", "q", "minimumX", "ring", "values", "point", "sortHoles", "holes", "buffer", "entries", "ring", "width", "start", "middle", "end", "left", "right", "output", "previous", "i", "minimumX", "source", "target", "triangulate", "contour", "holes", "points", "p", "index", "path", "ring", "hole", "bridge", "distance", "h", "a", "b", "mid", "h2", "p2", "clipped", "i", "c", "triangle2", "vertices", "offset", "rings", "paths", "clean", "isClockWise", "polygon", "holesToConnect", "sortHoles", "inside", "insideHole", "crossesBoundary", "result", "cross", "containsVertex", "triangle", "holeArea", "actual", "area", "expected", "triangle", "point", "target", "a", "b", "c", "diskAt", "center", "radius", "radiusY", "count", "index", "disk", "point", "center", "radius", "target", "radiusY", "count", "i", "triangle", "diskAt", "circleAt", "center", "radius", "radiusY", "count", "index", "offset", "angle", "segment", "context", "a", "b", "startCap", "endCap", "options", "width", "stroke", "point", "radius", "length", "direction", "normal", "triangle", "disk", "line", "context", "points", "closed", "options", "width", "dash", "stroke", "point", "radius", "distance", "period", "value", "i", "a", "b", "length", "previous", "previousLength", "incoming", "outgoing", "side", "n1", "n2", "from", "to", "denominator", "miter", "offset", "phase", "index", "end", "delta", "segment", "disk", "triangle", "polygon", "context", "rings", "closed", "options", "fill", "point", "map", "projected", "ring", "path", "latlng", "indices", "valid", "vertices", "triangulate", "triangle", "line", "visit", "context", "coordinates", "closed", "child", "polygon", "nativeGeometry", "source", "map", "point", "fill", "stroke", "options", "width", "values", "dash", "value", "index", "i", "allZero", "context", "center", "radius", "radiusY", "projected", "disk", "count", "points", "circleAt", "line", "closed", "visit", "sub", "a", "b", "result", "i", "dot", "a", "b", "sum", "i", "sortHits", "hits", "buffer", "source", "target", "width", "start", "middle", "end", "left", "right", "output", "previous", "i", "intersectMeshes", "ray", "meshes", "night", "hits", "a", "b", "c", "mesh", "inverse", "inverseValues", "value", "localOrigin", "origin", "localDirection", "direction", "directionLength", "near", "far", "i", "a2", "b2", "position", "index", "instanceOffset", "vertices", "closest", "faceIndex", "vertex", "offset", "x", "y", "z", "ai", "bi", "ci", "e", "f", "p", "det", "t", "u", "q", "v", "uv", "ids", "x2", "y2", "distance", "point", "worldPoint", "computeBounds", "sub", "cross", "dot", "sortHits", "traverse", "node", "callback", "context", "child", "collectVisibleMesh", "mesh", "meshes", "raycast", "backend", "event", "objects", "recursive", "rect", "updateWorldMatrix", "updateCamera", "inverseCamera", "inverseCameraValues", "value", "object", "unprojected", "end", "rayLength", "meshes", "traverse", "collectVisibleMesh", "intersectMeshes", "nativeEventMaps", "restoreNativeEvents", "map", "descriptor", "handle", "compareNativeHits", "a", "b", "handleNativeMapEvent", "event", "type", "targets", "map", "context", "nativeEventMaps", "fireDOMEvent", "cityMapper", "target", "dom", "hits", "candidate", "source2", "backend", "raycast", "compareNativeHits", "source", "nativeEvents", "state", "map", "context", "nativeEventMaps", "pointer", "handleNativeMapEvent", "restoreNativeEvents", "removeNativeEvents", "state", "context", "map", "nativeEventMaps", "toSRGB", "value", "channel", "n", "h", "l", "a", "k", "parseColor", "value", "a", "toSRGB", "channel", "context", "g", "b", "current", "state", "refreshNativeEvent", "refreshNativeLayer", "reorderNativeLayer", "front", "refreshNativeLayer", "updateNativeLayerView", "update", "disposeNativeLayer", "state", "source", "map", "backend", "meshes", "textures", "images", "refreshNativeEvent", "updateNativeLayerView", "removeNativeEvents", "name", "methods", "mesh", "texture", "image", "disposeMesh", "destroyTexture", "nativeImageRefresh", "nativeImageError", "removeImageState", "resolveNativeReady", "rejectNativeReady", "error", "forwardNativeError", "error", "styleNativeMesh", "state", "mesh", "color", "opacity", "source", "marker", "paneOrder", "order", "zIndex", "uploadCanvasTexture", "state", "key", "texture", "image", "device", "width", "height", "bitmap", "current", "refreshNativeLayer", "error", "textureFor", "state", "key", "image", "backend", "textures", "meshes", "texture", "url", "mesh", "disposeMesh", "destroyTexture", "width", "height", "device", "uploadCanvasTexture", "error", "putNativeMesh", "state", "key", "position", "color", "opacity", "texture", "uv", "backend", "source", "meshes", "mesh", "normal", "index", "data", "disposeMesh", "createMesh", "attribute", "styleNativeMesh", "quadNativeMesh", "state", "key", "image", "corners", "opacity", "texture", "textureFor", "indices", "position", "uv", "textureCoords", "index", "putNativeMesh", "localPosition", "state", "latlng", "map", "backend", "crs", "origin", "point", "metres", "boundsQuad", "state", "bounds", "corners", "positions", "corner", "localPosition", "syncGridLayer", "state", "source", "textures", "meshes", "key", "tile", "opacity", "retained", "mesh", "nw", "se", "styleNativeMesh", "quadNativeMesh", "boundsQuad", "syncImageOverlay", "state", "source", "quadNativeMesh", "boundsQuad", "markerQuadCorners", "state", "key", "image", "source", "map", "backend", "clip", "localPosition", "inverse", "toLocal", "options", "size", "dimensions", "width", "height", "anchor", "center", "left", "top", "screenCorners", "corners", "pointX", "pointY", "offset", "x", "y", "p", "result", "syncMarker", "state", "source", "key", "image", "mesh", "quadNativeMesh", "markerQuadCorners", "localPixel", "state", "point", "localPosition", "localPixelForGeometry", "point", "localPixel", "nativeLayerState", "syncVectorLayer", "state", "source", "nativeLayerState", "geometry", "nativeGeometry", "localPixelForGeometry", "fill", "stroke", "key", "positions", "color", "opacity", "r", "g", "b", "parseColor", "putNativeMesh", "synchronizeNativeLayer", "state", "source", "meshes", "textures", "current", "mesh", "texture", "key", "syncGridLayer", "syncImageOverlay", "syncMarker", "syncVectorLayer", "disposeMesh", "destroyTexture", "beforeNativeRender", "state", "synchronizeNativeLayer", "error", "nativeLayerState", "nativeLayer", "state", "source", "map", "backend", "refreshNativeLayer", "reorderNativeLayer", "disposeNativeLayer", "refreshNativeEvent", "updateNativeLayerView", "nativeEvents", "name", "own", "original", "nativeMethodHandlers", "ready", "resolveNativeReady", "rejectNativeReady", "forwardNativeError", "error", "current", "beforeNativeRender", "synchronizeNativeLayer", "update", "hideTargets", "state", "source", "htmlIcon", "targets", "element", "removeTargets", "state", "element", "readyNativeGPU", "state", "nativeLayer", "reportError", "source", "error", "initNativeGPU", "source", "map", "style", "state", "hideTargets", "removeTargets", "readyNativeGPU", "reportError", "mapCameraState", "mapGetBearing", "mapGetPitch", "cancelCameraAnimation", "map", "mapCameraState", "mapStopPitchBearingAnimation", "cancelCameraAnimation", "updateSky", "height", "pitch", "mapCameraState", "far", "distance", "top", "mapSetPitchAndBearing", "pitch", "bearing", "previousPitch", "previousBearing", "updateSky", "runCameraAnimations", "now", "mapCameraState", "pending", "failure", "map", "animation", "progress", "eased", "scheduleCameraAnimation", "error", "scheduleCameraAnimation", "map", "animation", "mapCameraState", "runCameraAnimations", "mapAnimateCamera", "pitch", "bearing", "options", "cancelCameraAnimation", "duration", "start", "fromPitch", "fromBearing", "delta", "animation", "scheduleCameraAnimation", "mapSetBearing", "bearing", "options", "mapSetPitch", "pitch", "options", "mapResetNorth", "options", "mapResetNorthPitch", "options", "pointOf", "point", "angles", "map", "bearing", "mapCameraState", "pitch", "project", "map", "point", "inverse", "limit", "half", "distance", "pointOf", "cos", "sin", "tilt", "rise", "angles", "p", "far", "denominator", "v", "u", "scale", "animationPoint", "map", "point", "inverse", "view", "half", "scale", "shift", "mapLayerPointToContainerPoint", "point", "project", "animationPoint", "mapCameraState", "mapContainerPointToLayerPoint", "point", "mapCameraState", "animationPoint", "project", "mapGetCenterLayerPoint", "mapCameraState", "mapUpdateCameraOverlays", "layer", "mapPanBy", "offset", "options", "half", "ground", "project", "pointOf", "mapCameraState", "mapSetZoomAround", "latlng", "zoom", "options", "mapCameraState", "scale", "half", "screen", "center", "anchor", "next", "mapPanInside", "latlng", "options", "mapCameraState", "min", "pointOf", "max", "screen", "safe", "delta", "groundBounds", "map", "padding", "min", "pointOf", "max", "corners", "points", "point", "project", "mapLimitCenter", "center", "zoom", "bounds", "mapCameraState", "half", "footprint", "groundBounds", "point", "view", "offset", "mapLimitOffset", "offset", "bounds", "mapCameraState", "half", "ground", "project", "center", "limited", "verticalGroundY", "y", "tilt", "distance", "rise", "far", "fitCameraBounds", "map", "bounds", "options", "zoom", "half", "distance", "min", "pointOf", "max", "cos", "sin", "tilt", "rise", "angles", "far", "top", "verticalGroundY", "bottom", "origin", "points", "latlng", "p", "point", "low", "high", "leftSlope", "rightSlope", "slope", "left", "right", "scale", "target", "snap", "actual", "vMin", "vMax", "v", "centerY", "centerX", "center", "mapGetBoundsCenterZoom", "bounds", "options", "fitCameraBounds", "mapCameraState", "mapGetBoundsZoom", "bounds", "inside", "padding", "mapCameraState", "fitCameraBounds", "pointOf", "footprint", "groundBounds", "size", "zoom", "snap", "mapTryAnimatedPan", "center", "options", "offset", "mapCameraState", "mapGetBounds", "mapCameraState", "footprint", "groundBounds", "bounds", "point", "raw", "animationPoint", "constrainCameraToBounds", "adjustCameraDrag", "map", "draggable", "half", "delta", "ground", "project", "cleanupCameraMap", "cancelCameraAnimation", "adjustCameraDrag", "cameraMapReady", "draggable", "adjustCameraDrag", "loadCameraControls", "map", "cameraControls", "error", "noOperation", "initializeCameraMap", "style", "updateSky", "constrainCameraToBounds", "cleanupCameraMap", "cameraMapReady", "loadCameraControls", "noOperation", "markerSetIcon", "icon", "result", "mapCameraState", "initNativeGPU", "markerSetRotation", "rotation", "markerCameraIconPoint", "x", "y", "rotation", "mapCameraState", "scale", "markerGetEvents", "mapCameraState", "displayPoint", "map", "point", "markerSetPos", "point", "mapCameraState", "displayPoint", "element", "key", "direction", "options", "anchor", "markerUpdateZIndex", "offset", "mapCameraState", "changed", "cameraMarkerOnDrag", "event", "map", "screen", "point", "runMarkerPanFrame", "mapCameraState", "pending", "drag", "event", "scheduleMarkerPan", "drag", "event", "mapCameraState", "runMarkerPanFrame", "adjustCameraMarkerPan", "event", "marker", "map", "screen", "size", "padding", "pointOf", "speed", "movement", "pane", "shift", "scheduleMarkerPan", "cameraMarkerDrag", "drag", "original", "adjustPan", "cameraMarkerOnDrag", "adjustCameraMarkerPan", "markerInitInteraction", "result", "mapCameraState", "cameraMarkerDrag", "popupGetEvents", "mapCameraState", "tooltipGetEvents", "mapCameraState", "popupAdjustPan", "map", "mapCameraState", "rect", "container", "min", "pointOf", "max", "left", "top", "right", "bottom", "dx", "dy", "screen", "delta", "popupUpdatePosition", "mapCameraState", "point", "delta", "displayPoint", "tooltipSetPosition", "point", "mapCameraState", "delta", "displayPoint", "gridlayerGetEvents", "events", "mapCameraState", "gridlayerGetTiledPixelBounds", "center", "mapCameraState", "bounds", "mapCameraState", "mapGetBearing", "mapGetPitch", "mapStopPitchBearingAnimation", "mapSetPitchAndBearing", "mapAnimateCamera", "mapSetBearing", "mapSetPitch", "mapResetNorth", "mapResetNorthPitch", "mapLayerPointToContainerPoint", "mapContainerPointToLayerPoint", "mapGetCenterLayerPoint", "mapUpdateCameraOverlays", "mapPanBy", "mapSetZoomAround", "mapPanInside", "mapLimitCenter", "mapLimitOffset", "mapGetBoundsCenterZoom", "mapGetBoundsZoom", "mapTryAnimatedPan", "mapGetBounds", "initializeCameraMap", "markerSetIcon", "markerSetRotation", "markerCameraIconPoint", "markerGetEvents", "markerSetPos", "markerUpdateZIndex", "markerInitInteraction", "popupGetEvents", "tooltipGetEvents", "popupAdjustPan", "popupUpdatePosition", "tooltipSetPosition", "gridlayerGetEvents", "gridlayerGetTiledPixelBounds", "endZoom", "backend", "animation", "update", "onMapChangeState", "renderPendingMapChange", "layer", "onMapChangeState", "update", "render", "onMapChangeState", "onMapChange", "layer", "renderPendingMapChange", "onZoomAnimState", "renderPendingZoomAnimation", "layer", "onZoomAnimState", "render", "onZoomAnimState", "onZoomAnim", "event", "map", "renderPendingZoomAnimation", "startZoom", "ring", "point", "radius", "points", "i", "lampPostGeometry", "point", "style", "addTriangle", "color", "parseColor", "radius", "center", "r", "low", "high", "points", "i", "a", "b", "angle", "nx", "nz", "ring", "quad", "addTriangle", "color", "a", "b", "c", "d", "height", "normal", "emitter", "point", "u", "v", "axis", "lightGeometry", "point", "style", "addTriangle", "color", "parseColor", "axis", "quad", "emitter", "roundProfile", "ringDirections", "ring", "point", "radius", "result", "direction", "ringDirections", "surface", "point", "addTriangle", "lowRadius", "low", "highRadius", "high", "color", "lower", "ring", "upper", "i", "next", "slope", "length", "nx", "nz", "ny", "normalX", "normalZ", "ringDirections", "treeGeometry", "point", "style", "addTriangle", "top", "bottom", "trunkRadius", "crownRadius", "crownBottom", "crownShape", "trunk", "parseColor", "crown", "surface", "i", "low", "lr", "high", "hr", "base", "ring", "roundProfile", "updateStatus", "backend", "enabled", "progress", "area", "varint", "reader", "bytes", "value", "factor", "byte", "decodeDirectory", "data", "bytes", "reader", "count", "varint", "entries", "tileId", "i", "entry", "value", "decompress", "data", "compression", "read", "backend", "offset", "length", "signal", "response", "etag", "data", "loadDirectory", "backend", "offset", "length", "compression", "decodeDirectory", "decompress", "read", "tileId", "z", "x", "y", "id", "n", "s", "rx", "ry", "decodeHeader", "data", "view", "header", "offsets", "flags", "bounds", "i", "getHeader", "backend", "read", "decodeHeader", "getZxy", "backend", "z", "x", "y", "signal", "id", "tileId", "header", "getHeader", "offset", "length", "visited", "depth", "key", "pending", "entries", "low", "high", "mid", "entry", "data", "loadDirectory", "error", "decompress", "read", "loadSource", "backend", "area", "data", "url", "response", "result", "getZxy", "pumpState", "compareDistance", "a", "b", "projectedTree", "context", "lon", "lat", "backend", "crs", "origin", "metres", "map", "point", "elevation", "getElevation", "groundOffset", "point", "addTriangle", "context", "a", "ah", "b", "bh", "c", "ch", "nx", "ny", "nz", "color", "backend", "positions", "normals", "colors", "uvs", "ux", "uy", "uz", "vx", "vy", "vz", "point", "height", "groundOffset", "addGeneratedTriangle", "args", "addTriangle", "pumpState", "generateTreeGeometry", "context", "generator", "point", "style", "pumpState", "addGeneratedTriangle", "buildAreaPoint", "context", "feature", "lon", "lat", "style", "baseColor", "backend", "top", "projected", "projectedTree", "support", "generateTreeGeometry", "lampPostGeometry", "lightGeometry", "treeGeometry", "projectRing", "context", "ring", "backend", "crs", "origin", "metres", "map", "path", "lng", "lat", "point", "elevation", "getElevation", "buildAreaPolygon", "context", "rings", "top", "bottom", "baseColor", "paths", "ring", "path", "point", "a", "b", "c", "index", "sign", "i", "length", "nx", "nz", "projectRing", "points", "triangulate", "addTriangle", "isClockWise", "buildAreaFeature", "context", "feature", "backend", "area", "map", "coords", "geometry", "isTree", "polygons", "lon", "lat", "anchor", "style", "top", "bottom", "color", "baseColor", "parseColor", "vertexStart", "buildAreaPoint", "rings", "buildAreaPolygon", "vertexEnd", "instanceAreaGeometry", "context", "positions", "normals", "colors", "featureFaces", "vertices", "length", "origin", "template", "i", "instance", "axis", "face", "start", "offsets", "attachAreaMesh", "context", "backend", "area", "device", "data", "instanceAreaGeometry", "attributes", "name", "attribute", "meshGeometry", "emptyNode", "createProgram", "cityMapper", "setParent", "update", "sourceAreaContext", "backend", "area", "map", "crs", "origin", "buildArea", "backend", "area", "map", "feature", "data", "loadSource", "context", "sourceAreaContext", "deadline", "buildAreaFeature", "attachAreaMesh", "error", "pump", "pumpState", "pump", "backend", "map", "shared", "cityMapper", "layers", "layer", "area", "center", "areaBackend", "pending", "compareDistance", "inflight", "buildArea", "updateStatus", "setHighlight", "backend", "feature", "update", "showFeature", "backend", "feature", "event", "tooltip", "rect", "x", "y", "shared", "layer", "visible", "releaseArea", "backend", "area", "attribute", "setHighlight", "showFeature", "setParent", "update", "geometry", "compareAreaDistance", "a", "b", "updateArea", "backend", "pump", "z", "center", "bounds", "nw", "se", "archiveNW", "archiveSE", "wanted", "x", "y", "key", "area", "coords", "releaseArea", "areas", "compareAreaDistance", "setTerrainHeight", "layer", "terrain", "elevation", "getElevation", "offset", "attachState", "showWebGPUWarning", "map", "container", "warning", "link", "failAttachment", "error", "backend", "map", "showWebGPUWarning", "cityMapper", "requestAdapter", "backend", "map", "adapter", "error", "failAttachment", "requestDevice", "adapter", "backend", "map", "error", "failAttachment", "rendererDeviceError", "event", "map", "attachState", "owner", "cityMapper", "layer", "rendererDeviceLost", "info", "device", "map", "attachState", "owner", "cityMapper", "error", "layer", "restoreObject", "backend", "shared", "object", "name", "attribute", "data", "size", "count", "normalized", "key", "texture", "geometry", "material", "attributes", "device", "createProgram", "attachState", "attach", "backend", "map", "shared", "cityMapper", "noOperation", "canvas", "failAttachment", "adapter", "requestAdapter", "device", "requestDevice", "rendererDeviceError", "rendererDeviceLost", "context", "format", "emptyNode", "layout", "buffer", "sampler", "lights", "values", "resizeSunlight", "emptyImage", "pane", "onMapChange", "startZoom", "onZoomAnim", "endZoom", "render", "origin", "point", "metres", "setTerrainHeight", "setParent", "pendingObjects", "object", "i", "restoreObject", "update", "updateArea", "findFeature", "backend", "event", "hit", "object", "ranges", "low", "high", "middle", "range", "raycast", "onClick", "layer", "event", "feature", "findFeature", "setHighlight", "showFeature", "onPointerLeave", "layer", "setHighlight", "showFeature", "onPointerMove", "layer", "event", "findFeature", "setHighlight", "showFeature", "pointerMove", "event", "onPointerMove", "pointerClick", "event", "onClick", "pointerLeave", "onPointerLeave", "attachLayer", "backend", "map", "attach", "error", "onAdd3DLayer", "backend", "map", "center", "pointerMove", "pointerClick", "pointerLeave", "attachLayer", "releaseRenderer", "renderer", "backend", "error", "onRemove3DLayer", "backend", "map", "onPointerLeave", "area", "key", "layer", "animation", "releaseArea", "updateStatus", "shared", "setParent", "onMapChange", "startZoom", "onZoomAnim", "endZoom", "cancelUpdate", "next", "cityMapper", "update", "destroyTexture", "renderer", "releaseRenderer", "onTerrainChange", "layer", "area", "releaseArea", "updateArea", "hasUnsupportedPrimitives", "meshes", "mesh", "primitive", "decodeModel", "data", "view", "decoder", "description", "offset", "length", "type", "chunk", "binary", "hasUnsupportedPrimitives", "vertexNormals", "p", "indices", "normals", "i", "a", "b", "c", "u", "v", "j", "n", "index", "length", "collectMeshes", "node", "meshes", "child", "conformModelToTerrain", "layer", "terrain", "meshes", "collectMeshes", "mesh", "positions", "geometry", "position", "normals", "attribute", "normal", "world", "inverse", "i", "x", "y", "z", "worldY", "weight", "worldX", "worldZ", "point", "elevation", "offset", "computeBounds", "updateWorldMatrix", "map", "crs", "origin", "metres", "pixelScale", "getElevation", "vertexNormals", "update", "loadBuffer", "buffer", "directory", "response", "loadImage", "description", "directory", "image", "blob", "view", "buffer", "response", "textureSampler", "sampler", "textureFor", "context", "reference", "color", "backend", "description", "images", "textures", "device", "key", "texture", "sampler", "image", "format", "samplerOptions", "textureSampler", "materialFor", "context", "material", "backend", "pbr", "textureFor", "nodeMatrix", "spec", "x", "y", "z", "w", "sx", "sy", "sz", "types", "sizes", "readAccessorValues", "description", "Type", "size", "data", "accessorCount", "indices", "viewIndex", "offset", "count", "stride", "view", "bytes", "buffer", "i", "values", "output", "readAccessor", "description", "index", "spec", "Type", "types", "size", "sizes", "data", "readAccessorValues", "sparse", "Index", "view", "offset", "indices", "normalized", "i", "modelNode", "context", "index", "backend", "description", "materials", "active", "resources", "spec", "group", "emptyNode", "nodeMatrix", "primitive", "attributes", "semantic", "name", "vertexCount", "attribute", "index2", "i", "normals", "style", "program", "device", "geometry", "mesh", "child", "readAccessor", "vertexNormals", "createProgram", "cityMapper", "setParent", "loadModel", "backend", "url", "response", "data", "description", "decodeModel", "directory", "bufferRequests", "buffer", "image", "material", "index", "resource", "attribute", "node", "loadBuffer", "imageRequests", "loadImage", "images", "context", "materialFor", "scene", "nodes", "modelNode", "error", "model", "emptyNode", "setParent", "x", "y", "z", "conformModelToTerrain", "get3DEvents", "layer", "events", "updateArea", "onTerrainChange", "ready3D", "layer", "emptyNode", "getHeader", "attach", "loadModel", "update", "error", "init3D", "layer", "options", "onAdd3DLayer", "onRemove3DLayer", "get3DEvents", "isModel", "ready3D", "isLoading", "layer", "comparePendingTiles", "a", "b", "terrainAtlas", "tiles", "bounds", "columns", "rows", "elevations", "low", "high", "key", "values", "coordinates", "x", "y", "start", "row", "column", "value", "terrainGrid", "divisions", "positions", "normals", "uvs", "indices", "row", "column", "a", "b", "c", "d", "addRasterTile", "backend", "layer", "coords", "tile", "divisions", "map", "crs", "origin", "metres", "scale", "terrainScale", "corner", "opposite", "device", "texture", "bounds", "columns", "rows", "elevations", "low", "high", "terrainAtlas", "destroyTexture", "createProgram", "attributes", "name", "attribute", "terrainGrid", "base", "bottom", "top", "sizeX", "sizeZ", "geometry", "mesh", "cityMapper", "setParent", "update", "registerTerrainTile", "backend", "coords", "tile", "addRasterTile", "error", "createGeometry", "device", "attributes", "name", "attribute", "createRasterMesh", "backend", "tile", "device", "texture", "createProgram", "createGeometry", "coords", "crs", "origin", "metres", "scale", "corner", "opposite", "sizeX", "sizeZ", "cityMapper", "setParent", "finishRasterTile", "backend", "tile", "result", "createRasterMesh", "registerTerrainTile", "update", "error", "pumpRasterTiles", "pruneRasterTiles", "loadRasterTile", "backend", "tile", "first", "finishRasterTile", "pumpRasterTiles", "backend", "map", "center", "pending", "tile", "coords", "comparePendingTiles", "loadRasterTile", "updateRasterTiles", "backend", "map", "zoom", "bounds", "northWest", "southEast", "archiveNorthWest", "archiveSouthEast", "center", "wanted", "x", "y", "key", "coords", "parent", "tile", "coverage", "parentZoom", "factor", "required", "releaseRasterTile", "pumpRasterTiles", "pruneRasterTiles", "getRasterEvents", "layer", "update", "updateRasterTiles", "readyRaster", "layer", "archive", "header", "reportError", "layer", "error", "setRasterTerrain", "backend", "terrain", "tile", "removeRasterTile", "setParent", "registerTerrainTile", "finishAttachment", "backend", "map", "attached", "setRasterTerrain", "error", "updateAttachedTiles", "backend", "map", "attached", "updateRasterTiles", "error", "onPMTileAdd", "backend", "map", "attached", "attach", "finishAttachment", "updateAttachedTiles", "releaseRasterTiles", "backend", "tile", "attribute", "releaseRasterTile", "destroyTexture", "onPMTileRemove", "backend", "map", "releaseRasterTiles", "onRemove3DLayer", "setRasterOpacity", "backend", "opacity", "tile", "terrainMesh", "update", "setPMTileOpacity", "backend", "opacity", "setRasterOpacity", "setRasterZIndex", "backend", "zIndex", "tile", "terrainMesh", "update", "setPMTileZIndex", "backend", "zIndex", "setRasterZIndex", "initRaster", "layer", "options", "read", "getHeader", "getZxy", "getRasterTileSize", "isLoading", "setPMTileOpacity", "setPMTileZIndex", "onPMTileAdd", "onPMTileRemove", "getRasterEvents", "emptyNode", "readyRaster", "reportError", "setGeoJSONData", "layer", "data", "area", "releaseArea", "updateArea", "clearLayerTerrain", "layer", "setRasterTerrain", "onTerrainRemove", "layer", "map", "clearLayerTerrain", "tile", "l", "grid", "attribute", "removeRasterTile", "conformModelToTerrain", "setTerrainHeight", "destroyTexture", "disposeMesh", "onRemove3DLayer", "local", "lng", "lat", "z", "crs", "origin", "metres", "base", "p", "push", "position", "normal", "color", "p", "n", "below", "p", "addBridges", "backend", "geojson", "map", "crs", "zoom", "origin", "metres", "base", "position", "normal", "color", "geometry", "polygons", "polygon", "rings", "ring", "path", "pixels", "points", "lng", "lat", "z", "p", "coordinate", "triangles", "paths", "start", "i", "contour", "holes", "bridgeTriangles", "xs", "ys", "t", "triangle", "bridge", "x", "y", "key", "a", "b", "c", "pa", "pb", "pc", "start2", "q", "length", "n", "corner", "local", "triangulate", "push", "below", "createMesh", "loadTerrainTiles", "state", "backend", "archive", "controller", "tiles", "coords", "result", "readBridges", "response", "loadTerrain", "backend", "controller", "x", "y", "layer", "archive", "header", "map", "northwest", "southeast", "tiles", "center", "compareDistance", "state", "workers", "loadTerrainTiles", "bridges", "readBridges", "getElevation", "setTerrainHeight", "conformModelToTerrain", "addBridges", "update", "error", "loadReadyTerrain", "loadTerrain", "setLayerTerrain", "layer", "setRasterTerrain", "onTerrainAdd", "backend", "map", "onAdd3DLayer", "loadTerrain", "pending", "loadReadyTerrain", "setLayerTerrain", "initTerrain", "layer", "options", "terrainSource", "layerOptions", "init3D", "onTerrainAdd", "onTerrainRemove", "mix", "a", "b", "t", "values", "rgb", "values", "rounded", "value", "atmosphere", "altitude", "stops", "upper", "i", "b", "a", "t", "rgb", "mix", "horizontalPosition", "d", "lat", "lng", "ascension", "declination", "rad", "hourAngle", "latitude", "altitude", "azimuth", "solarPosition", "date", "lat", "lng", "time", "rad", "d", "mean", "longitude", "obliquity", "declination", "ascension", "horizontalPosition", "moonPosition", "date", "lat", "lng", "solarPosition", "rad", "d", "anomaly", "longitude", "latitude", "obliquity", "x", "y", "z", "horizontalPosition", "projectCelestialBody", "dir", "size", "pitch", "bearing", "x", "y", "z", "forward", "updateSky", "map", "originalSky", "sunDisc", "moonDisc", "sun", "sky", "size", "pitch", "bearing", "disc", "body", "point", "left", "top", "projectCelestialBody", "render", "map", "renderer", "cityMapper", "update", "updateSun", "state", "control", "map", "date", "slider", "output", "status", "time", "center", "sun", "solarPosition", "atmosphere", "moonPosition", "updateSky", "render", "error", "useLiveTime", "state", "updateSun", "useSelectedTime", "state", "control", "map", "date", "slider", "status", "updateSky", "render", "updateSun", "tickSun", "state", "updateSun", "removeSun", "state", "map", "timer", "sunDisc", "moonDisc", "updateSky", "render", "onAddSun", "control", "map", "originalSky", "disc", "sunDisc", "moonDisc", "container", "date", "slider", "output", "now", "timeRow", "status", "note", "state", "updateSun", "updateSky", "useLiveTime", "useSelectedTime", "tickSun", "removeSun", "underEntryState", "placeEntry", "map", "layer", "element", "input", "entry", "placeUnderEntry", "state", "nested", "placeEntry", "onPlace", "runPlacements", "state", "underEntryState", "placeUnderEntry", "replaceEntry", "underEntryState", "runPlacements", "removeEntry", "replaceEntry", "underEntryState", "underEntry", "layer", "element", "onPlace", "state", "replaceEntry", "removeEntry", "placeUnderEntry", "addTimeLayer", "map", "removeTimeLayer", "initialize", "options", "addTimeLayer", "removeTimeLayer", "onAdd", "map", "onAddSun", "styleTimeControl", "container", "nested", "addTo", "map", "container", "underEntry", "styleTimeControl", "remove", "initialize", "onAdd", "addTo", "remove", "triangle", "position", "normal", "color", "a", "b", "c", "tint", "u", "v", "i", "point", "value", "n", "length", "build", "parts", "position", "normal", "color", "ring", "bottom", "top", "tint", "topRing", "low", "high", "x", "z", "i", "j", "triangle", "tooltip", "p", "content", "lines", "line", "box", "x0", "x1", "z0", "z1", "glass", "tyre", "mirror", "x0", "x1", "z0", "z1", "rest", "box", "paints", "headlight", "taillight", "carModel", "i", "paint", "paints", "mirror", "tyre", "box", "glass", "headlight", "taillight", "hull", "white", "boatBenches", "benches", "i", "mirror", "boatModel", "hull", "white", "box", "glass", "mirror", "boatBenches", "routeColor", "properties", "color", "value", "carriage", "center", "length", "color", "front", "rear", "box", "glass", "white", "tyre", "headlight", "taillight", "busModel", "index", "properties", "carriage", "routeColor", "tramModel", "index", "properties", "color", "routeColor", "parts", "car", "carriage", "metroModel", "index", "properties", "color", "routeColor", "parts", "car", "carriage", "skin", "trousers", "dark", "bicycleModel", "index", "paint", "paints", "box", "dark", "skin", "trousers", "shirt", "parts", "box", "trousers", "shirt", "skin", "dark", "pedestrianModel", "index", "model", "parts", "paints", "box", "trousers", "skin", "vehicles", "bicycleModel", "pedestrianModel", "busModel", "tramModel", "metroModel", "carModel", "boatModel", "trafficShader", "along", "points", "lengths", "s", "i", "end", "middle", "b", "d", "t", "locateTraffic", "state", "trip", "points", "lengths", "length", "distance", "x", "y", "z", "dx", "dz", "along", "placeTraffic", "state", "position", "normal", "i", "trip", "cx", "y", "cz", "dx", "dz", "k", "o", "lx", "lz", "nx", "nz", "locateTraffic", "startTraffic", "state", "underEntry", "addTraffic", "state", "placeTraffic", "startTraffic", "disposeTrafficObject", "state", "object", "setHighlight", "showFeature", "disposeMesh", "destroyTrafficGpu", "state", "buffer", "removeTraffic", "state", "disposeTrafficObject", "destroyTrafficGpu", "readyTraffic", "state", "startTraffic", "vehicleOffsets", "length", "flow", "velocity", "count", "offsets", "i", "clockMinutes", "clockTime", "parts", "compareDepartures", "a", "b", "scheduledTrips", "date", "timeZone", "duration", "services", "time", "clock", "parts", "part", "from", "to", "every", "months", "weekdays", "departure", "minute", "weekday", "departures", "clockMinutes", "compareDepartures", "trips", "tripsAt", "time", "lanes", "velocity", "trips", "l", "lane", "timetable", "flow", "trip", "travelled", "offsets", "k", "scheduledTrips", "vehicleOffsets", "trafficNow", "state", "control", "failTraffic", "state", "error", "routeGeometry", "lanes", "position", "normal", "color", "points", "lengths", "properties", "raw", "rgb", "tint", "i", "a", "b", "dx", "dz", "length", "x", "z", "distance", "start", "end", "p", "q", "point", "createTrafficMesh", "state", "data", "featureFaces", "material", "usage", "result", "createMesh", "drawTrafficRoute", "state", "createTrafficMesh", "routeGeometry", "trafficBounds", "state", "radius", "height", "i", "lane", "x", "z", "y", "data", "extent", "computeBounds", "rebuildTrafficMesh", "state", "trips", "model", "vertices", "disposeTrafficObject", "color", "featureFaces", "i", "trip", "component", "build", "count", "createTrafficMesh", "trafficBounds", "trafficStorage", "device", "data", "buffer", "rebaseTraffic", "state", "device", "destroyTrafficGpu", "trafficStorage", "lane", "i", "point", "trip", "binding", "count", "data", "offset", "index", "position", "normal", "buffers", "entries", "moveTraffic", "state", "seconds", "device", "encoder", "pass", "tickTraffic", "state", "live", "time", "trafficNow", "ms", "valid", "changed", "trip", "x", "y", "z", "dx", "dz", "lx", "ly", "lz", "light", "text", "tripsAt", "error", "failTraffic", "ids", "key", "drawTrafficRoute", "rebuildTrafficMesh", "rebaseTraffic", "moveTraffic", "lights", "locateTraffic", "update", "fetchTrafficLanes", "state", "time", "signal", "href", "response", "toLanes", "features", "lanes", "geometry", "properties", "lines", "line", "latlngs", "lng", "lat", "groundTraffic", "state", "layer", "lanes", "terrain", "base", "lane", "i", "elevation", "getElevation", "prepareTraffic", "state", "layer", "lanes", "crs", "origin", "metres", "lane", "lat", "lng", "point", "i", "groundTraffic", "disposeTrafficObject", "loadedTrafficLanes", "state", "signal", "data", "toLanes", "prepareTraffic", "failedTrafficLoad", "state", "signal", "error", "failTraffic", "loadTraffic", "state", "time", "trafficNow", "signal", "fetchTrafficLanes", "loadedTrafficLanes", "failedTrafficLoad", "updateTraffic", "state", "event", "loadTraffic", "updateTrafficTerrain", "state", "groundTraffic", "disposeTrafficObject", "trafficBounds", "initTraffic", "layer", "url", "vehicle", "side", "outline", "velocity", "options", "model", "lights", "defaultSide", "vehicles", "init3D", "tooltip", "status", "template", "build", "stride", "vertices", "params", "paramFloats", "paramInts", "state", "trafficShader", "tickTraffic", "updateTraffic", "updateTrafficTerrain", "placeTraffic", "readyTraffic", "addTraffic", "removeTraffic", "onBlur", "moves", "onPointer", "event", "map", "limbs", "local", "layer", "state", "map", "crs", "origin", "metres", "p", "terrain", "ground", "getElevation", "place", "x", "y", "z", "local", "yaw", "cos", "sin", "i", "px", "py", "sign", "mesh", "limbs", "update", "onTerrain", "place", "stop", "map", "mesh", "name", "disposeMesh", "onKey", "event", "moves", "wrap", "angle", "colliders", "collider", "mesh", "c", "colliders", "m", "p", "index", "normal", "uv", "count", "tri", "nrm", "cells", "v", "i", "first", "k", "j", "x", "z", "ex", "ey", "ez", "fx", "fy", "fz", "nx", "nz", "ny", "length", "a", "h", "t", "ix", "iz", "key", "horizontalRay", "v", "ox", "oy", "oz", "dx", "dz", "i", "ex", "ey", "ez", "fx", "fy", "fz", "px", "py", "pz", "det", "tx", "ty", "tz", "u", "qx", "qy", "qz", "w", "shouldSkipOther", "other", "layer", "hitMesh", "mesh", "data", "computeBounds", "m", "k", "radius", "x", "y", "z", "dx", "dz", "reach", "c", "collider", "ox", "oy", "oz", "seen", "ix", "iz", "t", "height", "d", "horizontalRay", "hit", "layer", "x", "y", "z", "dx", "dz", "reach", "updateWorldMatrix", "data", "other", "shouldSkipOther", "traverse", "hitMesh", "blocked", "east", "north", "feet", "length", "hit", "step", "now", "layer", "map", "dt", "changed", "part", "key", "i", "limbs", "createMesh", "build", "parts", "forward", "turn", "moves", "wrap", "metres", "lat", "lng", "position", "scale", "east", "north", "feet", "local", "wall", "blocked", "into", "bearing", "behind", "target", "place", "start", "map", "pixelsPerMetre", "zoom", "handlers", "name", "toggle", "stop", "start", "createWalk", "control", "speed", "distance", "options", "layer", "init3D", "keys", "container", "button", "hint", "context", "step", "onKey", "onBlur", "onPointer", "onTerrain", "start", "stop", "toggle", "initialize", "options", "createWalk", "onAdd", "map", "onRemove", "initialize", "onAdd", "onRemove", "indexState", "emptyEvents", "refreshNativeLayerContract", "layer", "bringNativeLayerToFront", "layer", "bringNativeLayerToBack", "layer", "closestCameraLayerPoint", "point", "indexState", "cameraCircleBounds", "indexState", "initializeGridContainer", "indexState", "cancelGridFade", "layer", "indexState", "runGridFades", "indexState", "layers", "layer", "version", "updateGridOpacity", "scheduleGridFade", "layer", "indexState", "runGridFades", "updateGridOpacity", "layer", "now", "fading", "prune", "tile", "cancelGridFade", "scheduleGridFade", "fireRasterLoad", "indexState", "addRasterImage", "indexState", "fireRasterLoad", "initializeNativeLayer", "noOperation", "emptyEvents", "refreshNativeLayerContract", "bringNativeLayerToFront", "bringNativeLayerToBack", "indexState", "closestCameraLayerPoint", "cameraCircleBounds", "initializeGridContainer", "updateGridOpacity", "addRasterImage", "layerLayerAdd", "event", "native", "indexState", "initNativeGPU", "setGeoJSONLayerData", "data", "setGeoJSONData", "initializeGeoJSON", "layer", "options", "setGeoJSONLayerData", "init3D", "initializerFor", "type", "initializeGeoJSON", "initRaster", "initTerrain", "initTraffic", "resolveNextInitialization", "task", "indexState", "initializerFor", "error", "initializeLayer", "task", "layer", "ready", "map", "error", "layerInitialize", "options", "indexState", "type", "source", "core", "settings", "init3D", "noOperation", "task", "resolveNextInitialization", "ready", "initializeLayer", "indexState", "layerLayerAdd", "layerInitialize", "initializeNativeLayer"]
3
+ "sources": ["../src/globals/L.js", "../src/globals/cameraByMap.js", "../src/globals/radians.js", "../src/globals/degrees.js", "../src/camera/mapGetPitch.js", "../src/camera/mapGetBearing.js", "../src/globals/cameraEmptyOptions.js", "../src/camera/updateSky.js", "../src/camera/mapSetPitchAndBearing.js", "../src/globals/cameraAnimations.js", "../src/globals/cameraAnimationFrame.js", "../src/camera/cancelCameraAnimation.js", "../src/globals/Compass.js", "../src/globals/ContainerResize.js", "../src/globals/PitchDrag.js", "../src/globals/ShiftRotate.js", "../src/globals/TouchMode.js", "../src/globals/touchByContainer.js", "../src/globals/cameraTouchStates.js", "../src/globals/cameraListenerOptions.js", "../src/controls/notifyCameraTouchChange.js", "../src/globals/cameraDragSensitivity.js", "../src/globals/cameraBearingSensitivity.js", "../src/globals/cameraFocusOptions.js", "../src/globals/cameraAnimatedOptions.js", "../src/camera/runCameraAnimations.js", "../src/camera/scheduleCameraAnimation.js", "../src/camera/mapAnimateCamera.js", "../src/camera/mapResetNorthPitch.js", "../src/camera/mapSetBearing.js", "../src/camera/mapResetNorth.js", "../src/controls/rotateButtonClick.js", "../src/camera/mapSetPitch.js", "../src/controls/rotateButtonKeydown.js", "../src/controls/refreshRotateControl.js", "../src/globals/dragStates.js", "../src/globals/cameraDrags.js", "../src/controls/editable.js", "../src/controls/cameraDragDown.js", "../src/camera/mapStopPitchBearingAnimation.js", "../src/controls/cameraDragMove.js", "../src/controls/finishCameraDrag.js", "../src/controls/cameraDragEnd.js", "../src/controls/cameraDragClick.js", "../src/controls/cameraDragContextMenu.js", "../src/controls/endAllCameraDrags.js", "../src/controls/dragCamera.js", "../src/controls/acceptRotateDrag.js", "../src/controls/refreshRotateFocus.js", "../src/controls/rotateOnAdd.js", "../src/controls/removeCameraDrag.js", "../src/controls/pitchDragRemoveHooks.js", "../src/controls/rotateOnRemove.js", "../src/controls/rotateControl.js", "../src/controls/shiftRotateWheel.js", "../src/controls/shiftRotateAddHooks.js", "../src/controls/shiftRotateRemoveHooks.js", "../src/controls/acceptPitchDrag.js", "../src/controls/pitchDragAddHooks.js", "../src/controls/compassOrientation.js", "../src/controls/failCompassPermission.js", "../src/controls/finishCompassPermission.js", "../src/controls/compassAddHooks.js", "../src/controls/compassRemoveHooks.js", "../src/controls/resizeMap.js", "../src/controls/containerResizeAddHooks.js", "../src/controls/containerResizeRemoveHooks.js", "../src/controls/startCameraTouch.js", "../src/controls/moveCameraTouch.js", "../src/controls/endCameraTouch.js", "../src/controls/endCameraTouchEvent.js", "../src/controls/changeCameraTouch.js", "../src/controls/endAllCameraTouches.js", "../src/controls/cleanupCameraTouch.js", "../src/controls/addCameraHandler.js", "../src/controls/cameraControls.js", "../src/index.js", "../src/globals/layerProto.js", "../src/globals/layerCallInitHooks.js", "../src/globals/removeLayer.js", "../src/camera/mapCamera.js", "../src/globals/mapMethods.js", "../src/globals/markerMethods.js", "../src/globals/popupEvents.js", "../src/globals/tooltipEvents.js", "../src/globals/popupPosition.js", "../src/globals/popupPan.js", "../src/globals/tooltipPosition.js", "../src/globals/tiledBounds.js", "../src/globals/gridEvents.js", "../src/globals/sceneByLayer.js", "../src/core/nativeLayer.js", "../src/core/nativeLayerMethod.js", "../src/globals/imageStates.js", "../src/core/nativeImageRefresh.js", "../src/core/nativeImageError.js", "../src/core/removeImageState.js", "../src/core/addImageState.js", "../src/globals/pendingUpdates.js", "../src/globals/frameCommands.js", "../src/globals/nativeRenderByLayer.js", "../src/rendering/render.js", "../src/globals/meshStack.js", "../src/rendering/updateZoomCamera.js", "../src/camera/mapUpdateCameraOverlays.js", "../src/rendering/synchronizeZoomView.js", "../src/globals/depthTexture.js", "../src/rendering/destroyAfterSubmission.js", "../src/rendering/destroyTexture.js", "../src/rendering/resizeRenderer.js", "../src/rendering/updateMapCamera.js", "../src/globals/cameraFov.js", "../src/globals/earthCirc.js", "../src/globals/walkByMap.js", "../src/globals/halfRadians.js", "../src/scene/updateCamera.js", "../src/terrain/getElevation.js", "../src/geometry/bridgeElevation.js", "../src/terrain/sample.js", "../src/terrain/terrainElevation.js", "../src/camera/animationPoint.js", "../src/scene/worldMatrixChanged.js", "../src/scene/composeLocalTransform.js", "../src/scene/updateWorldMatrix.js", "../src/geometry/computeBounds.js", "../src/rendering/collectVisibleMesh.js", "../src/rendering/collectMeshes.js", "../src/rendering/collectFrameMeshes.js", "../src/rendering/updateRoofAtlas.js", "../src/globals/roofSignatures.js", "../src/rendering/rebuildRoofAtlas.js", "../src/globals/roofTiles.js", "../src/globals/roofMin.js", "../src/globals/roofSize.js", "../src/globals/roofShader.js", "../src/globals/roofPipeline.js", "../src/globals/roofBlitSampler.js", "../src/rendering/ensureRoofBlit.js", "../src/globals/roofBuffer.js", "../src/globals/roofPass.js", "../src/globals/roofImage.js", "../src/globals/roofTarget.js", "../src/globals/roofCopySize.js", "../src/rendering/uploadRoofTile.js", "../src/globals/roofBindGroup.js", "../src/globals/roofCommands.js", "../src/globals/roofOpacities.js", "../src/rendering/compareRoofTiles.js", "../src/rendering/composeRoofAtlas.js", "../src/rendering/collectRoofTiles.js", "../src/globals/roofTexture.js", "../src/globals/roofSampler.js", "../src/rendering/resizeRoofTexture.js", "../src/rendering/updateRoofRaster.js", "../src/rendering/compareMeshDepth.js", "../src/rendering/compareMeshes.js", "../src/rendering/sortMeshes.js", "../src/geometry/roofFootprint.js", "../src/geometry/subtractRoofTile.js", "../src/geometry/roofCoverage.js", "../src/rendering/revealRoofMesh.js", "../src/rendering/prepareFrameMeshes.js", "../src/globals/frameBuffer.js", "../src/rendering/prepareFrameBuffer.js", "../src/globals/sunBindGroup.js", "../src/shadows/bindSunlight.js", "../src/lighting/writeLightCell.js", "../src/lighting/visitLightCells.js", "../src/lighting/visitCells.js", "../src/lighting/lightGrid.js", "../src/globals/lightScale.js", "../src/lighting/worldLights.js", "../src/lighting/cacheLightGrid.js", "../src/globals/geometryEmpty.js", "../src/lighting/collectLightMeshes.js", "../src/lighting/updatePointLights.js", "../src/rendering/prepareFrameUniforms.js", "../src/globals/scenePass.js", "../src/globals/meshOffsets.js", "../src/globals/meshPipeline.js", "../src/globals/alphaBlend.js", "../src/rendering/drawPipeline.js", "../src/rendering/prepareMeshCutout.js", "../src/rendering/prepareMeshUniforms.js", "../src/globals/meshImage.js", "../src/globals/meshTarget.js", "../src/globals/meshCopySize.js", "../src/rendering/uploadMeshTexture.js", "../src/globals/meshBindGroup.js", "../src/globals/drawEntries.js", "../src/globals/drawMeshEntry.js", "../src/globals/drawFrameEntry.js", "../src/globals/drawTerrainEntry.js", "../src/globals/drawTextureEntries.js", "../src/globals/drawSamplerEntries.js", "../src/rendering/bindMeshTextures.js", "../src/rendering/prepareMeshTextures.js", "../src/rendering/drawGeometry.js", "../src/rendering/drawSceneMeshes.js", "../src/globals/disabledShadow.js", "../src/globals/shadowValues.js", "../src/shadows/shadowMeshMatches.js", "../src/shadows/shadowCacheMatches.js", "../src/globals/shadowBounds.js", "../src/globals/shadowCamera.js", "../src/globals/shadowLow.js", "../src/globals/shadowHigh.js", "../src/shadows/meshShadowBounds.js", "../src/shadows/shadowBounds.js", "../src/shadows/shadowMatrix.js", "../src/globals/shadowMeshLayout.js", "../src/globals/shadowDepthLayout.js", "../src/globals/depthBindGroup.js", "../src/globals/shadowShader.js", "../src/globals/shadowPipeline.js", "../src/globals/shadowPipelineLayout.js", "../src/globals/positionLayout.js", "../src/globals/instanceLayout.js", "../src/globals/shadowInstanceLayouts.js", "../src/globals/shadowLayouts.js", "../src/shadows/ensureShadowPipeline.js", "../src/globals/shadowPass.js", "../src/globals/shadowBindGroup.js", "../src/globals/shadowOffsets.js", "../src/shadows/drawShadowMeshes.js", "../src/globals/shadowTexture.js", "../src/shadows/resizeSunlight.js", "../src/shadows/renderSunlight.js", "../src/scene/cancelUpdate.js", "../src/scene/setParent.js", "../src/raster/removeRasterTile.js", "../src/raster/releaseRasterTile.js", "../src/raster/pruneRasterTiles.js", "../src/core/synchronizeNativeLayer.js", "../src/core/current.js", "../src/core/syncGridLayer.js", "../src/globals/coreWhite.js", "../src/core/styleNativeMesh.js", "../src/globals/coreQuadIndices.js", "../src/globals/coreQuadUV.js", "../src/globals/coreSampler.js", "../src/rendering/disposeMesh.js", "../src/core/uploadCanvasTexture.js", "../src/core/uploadNativeImage.js", "../src/core/textureFor.js", "../src/core/putNativeMesh.js", "../src/globals/defaultMaterial.js", "../src/globals/meshBuffer.js", "../src/globals/nextId.js", "../src/scene/emptyNode.js", "../src/globals/vertexShader.js", "../src/globals/fragmentShader.js", "../src/globals/pipelineLayout.js", "../src/globals/elevationWGSL.js", "../src/globals/normalLayout.js", "../src/globals/colorLayout.js", "../src/globals/uVLayout.js", "../src/globals/programLayout.js", "../src/globals/programEntries.js", "../src/globals/meshLayoutEntry.js", "../src/globals/frameLayoutEntry.js", "../src/globals/terrainLayoutEntry.js", "../src/globals/textureLayoutEntries.js", "../src/globals/samplerLayoutEntries.js", "../src/rendering/createProgramLayout.js", "../src/rendering/createProgramUniforms.js", "../src/rendering/textureBinding.js", "../src/shaders/validateRoofMaterial.js", "../src/shaders/roofVertexShader.js", "../src/shaders/materialVertexShader.js", "../src/shaders/materialBaseShader.js", "../src/shaders/materialSurfaceShader.js", "../src/shaders/materialShaders.js", "../src/rendering/reportCompilation.js", "../src/rendering/createProgram.js", "../src/rendering/createMesh.js", "../src/core/quadNativeMesh.js", "../src/core/localPosition.js", "../src/core/boundsQuad.js", "../src/core/syncImageOverlay.js", "../src/globals/coreMatrixKeys.js", "../src/core/markerCameraIconPoint.js", "../src/core/transformNativePoint.js", "../src/core/markerImageBounds.js", "../src/core/markerQuadCorners.js", "../src/core/syncMarker.js", "../src/globals/geometryPixelStates.js", "../src/geometry/nativeGeometry.js", "../src/geometry/visit.js", "../src/geometry/nativeTriangle.js", "../src/geometry/segment.js", "../src/globals/tau.js", "../src/geometry/diskAt.js", "../src/geometry/disk.js", "../src/geometry/lineJoin.js", "../src/geometry/dashedSegment.js", "../src/geometry/line.js", "../src/triangulation/minimumX.js", "../src/triangulation/mergeHoles.js", "../src/triangulation/sortHoles.js", "../src/triangulation/cross.js", "../src/triangulation/equal.js", "../src/triangulation/clean.js", "../src/triangulation/isClockWise.js", "../src/triangulation/polygonRings.js", "../src/triangulation/inside.js", "../src/triangulation/insideHole.js", "../src/triangulation/on.js", "../src/triangulation/intersects.js", "../src/triangulation/crossesRing.js", "../src/triangulation/crossesBoundary.js", "../src/triangulation/connectHole.js", "../src/triangulation/containsVertex.js", "../src/triangulation/clipEars.js", "../src/triangulation/area.js", "../src/triangulation/validateArea.js", "../src/triangulation/triangulate.js", "../src/geometry/polygon.js", "../src/geometry/dashValues.js", "../src/geometry/circleGeometry.js", "../src/geometry/circleAt.js", "../src/core/localPixel.js", "../src/core/localPixelForGeometry.js", "../src/utils/toSRGB.js", "../src/utils/channel.js", "../src/utils/parseColor.js", "../src/core/syncVectorLayer.js", "../src/core/pruneNativeResources.js", "../src/core/beforeNativeRender.js", "../src/scene/renderPendingUpdates.js", "../src/scene/update.js", "../src/core/hideTargets.js", "../src/core/refreshNativeLayer.js", "../src/core/nativeSetLatLng.js", "../src/core/nativeSetLatLngs.js", "../src/core/nativeAddLatLng.js", "../src/core/nativeSetRadius.js", "../src/core/nativeSetStyle.js", "../src/core/nativeRedraw.js", "../src/core/nativeSetIcon.js", "../src/core/nativeSetUrl.js", "../src/core/nativeSetBounds.js", "../src/core/nativeSetOpacity.js", "../src/core/nativeSetZIndex.js", "../src/core/nativeSetZIndexOffset.js", "../src/core/nativeBringToFront.js", "../src/core/nativeBringToBack.js", "../src/globals/nativeMethodHandlers.js", "../src/scene/createLayer.js", "../src/globals/sceneEmptyOptions.js", "../src/core/nativeEvents.js", "../src/globals/nativeEventMaps.js", "../src/globals/trafficByLayer.js", "../src/collision/mergeHits.js", "../src/collision/sortHits.js", "../src/collision/localRay.js", "../src/collision/rayBounds.js", "../src/collision/readTriangle.js", "../src/collision/hiddenLightHit.js", "../src/collision/triangleDistance.js", "../src/collision/worldHit.js", "../src/collision/intersectMeshes.js", "../src/scene/traverse.js", "../src/picking/collectVisibleMesh.js", "../src/traffic/along.js", "../src/traffic/locateTraffic.js", "../src/traffic/placeTraffic.js", "../src/picking/validateCameraInverse.js", "../src/picking/raycast.js", "../src/core/restoreNativeEvents.js", "../src/globals/renderers.js", "../src/globals/coreEventTypes.js", "../src/core/nativeEventSource.js", "../src/core/compareNativeHits.js", "../src/core/updateNativeHover.js", "../src/core/bypassNativeEvent.js", "../src/core/handleNativeMapEvent.js", "../src/core/removeNativeEvents.js", "../src/core/refreshNativeEvent.js", "../src/core/reorderNativeLayer.js", "../src/core/updateNativeLayerView.js", "../src/core/disposeNativeLayer.js", "../src/core/resolveNativeReady.js", "../src/core/rejectNativeReady.js", "../src/core/forwardNativeError.js", "../src/core/removeTargets.js", "../src/core/readyNativeGPU.js", "../src/scene/reportError.js", "../src/core/initNativeGPU.js", "../src/globals/cameraAngles.js", "../src/camera/pointOf.js", "../src/camera/angles.js", "../src/camera/project.js", "../src/camera/mapLayerPointToContainerPoint.js", "../src/camera/mapContainerPointToLayerPoint.js", "../src/camera/mapGetCenterLayerPoint.js", "../src/camera/mapPanBy.js", "../src/camera/mapSetZoomAround.js", "../src/globals/cameraZeroPadding.js", "../src/camera/mapPanInside.js", "../src/camera/mapLimitCenter.js", "../src/camera/groundBounds.js", "../src/camera/mapLimitOffset.js", "../src/camera/mapGetBoundsCenterZoom.js", "../src/camera/fitCameraBounds.js", "../src/camera/verticalGroundY.js", "../src/camera/mapGetBoundsZoom.js", "../src/camera/mapTryAnimatedPan.js", "../src/camera/mapGetBounds.js", "../src/camera/initializeCameraMap.js", "../src/camera/constrainCameraToBounds.js", "../src/camera/cleanupCameraMap.js", "../src/controls/adjustCameraDrag.js", "../src/camera/cameraMapReady.js", "../src/controls/loadCameraControls.js", "../src/utils/noOperation.js", "../src/core/markerSetIcon.js", "../src/core/markerGetEvents.js", "../src/camera/displayPoint.js", "../src/core/markerSetPos.js", "../src/core/refreshNativeLayerContract.js", "../src/core/markerUpdateZIndex.js", "../src/globals/dragByHandler.js", "../src/core/cameraMarkerOnDrag.js", "../src/core/adjustCameraMarkerPan.js", "../src/globals/pendingMarkerPan.js", "../src/globals/markerPanFrame.js", "../src/core/runMarkerPanFrame.js", "../src/core/scheduleMarkerPan.js", "../src/core/cameraMarkerDrag.js", "../src/core/markerInitInteraction.js", "../src/core/popupGetEvents.js", "../src/core/tooltipGetEvents.js", "../src/core/popupAdjustPan.js", "../src/core/popupUpdatePosition.js", "../src/core/tooltipSetPosition.js", "../src/core/gridlayerGetEvents.js", "../src/core/gridlayerGetTiledPixelBounds.js", "../src/scene/init3D.js", "../src/scene/attach.js", "../src/globals/lampDirections.js", "../src/geometry/lampRing.js", "../src/geometry/lampPostGeometry.js", "../src/geometry/quad.js", "../src/geometry/emitter.js", "../src/geometry/lightGeometry.js", "../src/globals/roundProfile.js", "../src/globals/ringDirections.js", "../src/geometry/treeRing.js", "../src/geometry/surface.js", "../src/geometry/validateTree.js", "../src/geometry/treeGeometry.js", "../src/sources/updateStatus.js", "../src/globals/archiveDecoder.js", "../src/archives/tileId.js", "../src/globals/headerOffsets.js", "../src/globals/headerFlags.js", "../src/globals/headerBounds.js", "../src/archives/decodeHeader.js", "../src/archives/read.js", "../src/archives/getHeader.js", "../src/globals/directoryReader.js", "../src/archives/varint.js", "../src/archives/decodeDirectory.js", "../src/archives/decompress.js", "../src/archives/loadDirectory.js", "../src/archives/getDirectoryEntries.js", "../src/archives/findDirectoryEntry.js", "../src/archives/getTileData.js", "../src/archives/findTile.js", "../src/archives/getZxy.js", "../src/archives/loadSource.js", "../src/sources/buildArea.js", "../src/sources/buildAreaFeature.js", "../src/sources/projectedTree.js", "../src/globals/triangleContexts.js", "../src/sources/groundOffset.js", "../src/sources/addTriangle.js", "../src/sources/addGeneratedTriangle.js", "../src/sources/generateTreeGeometry.js", "../src/sources/buildAreaPoint.js", "../src/sources/projectRing.js", "../src/sources/buildAreaPolygon.js", "../src/sources/featureAnchor.js", "../src/sources/extrusionStyle.js", "../src/sources/instanceAreaGeometry.js", "../src/sources/attachAreaMesh.js", "../src/sources/sourceAreaContext.js", "../src/utils/compareDistance.js", "../src/sources/pendingSourceAreas.js", "../src/sources/pump.js", "../src/picking/setHighlight.js", "../src/picking/showFeature.js", "../src/sources/releaseArea.js", "../src/sources/compareAreaDistance.js", "../src/sources/updateArea.js", "../src/terrain/setTerrainHeight.js", "../src/scene/restoreGeometry.js", "../src/scene/restoreMaterialTextures.js", "../src/scene/restoreObject.js", "../src/globals/rendererDevices.js", "../src/scene/showWebGPUWarning.js", "../src/scene/failAttachment.js", "../src/scene/requestAdapter.js", "../src/scene/requestDevice.js", "../src/scene/rendererDeviceError.js", "../src/scene/rendererDeviceLost.js", "../src/scene/createSceneCamera.js", "../src/globals/sceneSunlightUniforms.js", "../src/scene/initializeRendererResources.js", "../src/globals/pendingMapChanges.js", "../src/scene/renderPendingMapChange.js", "../src/scene/onMapChange.js", "../src/scene/startZoom.js", "../src/globals/pendingZoomAnimations.js", "../src/scene/renderPendingZoomAnimation.js", "../src/scene/onZoomAnim.js", "../src/scene/endZoom.js", "../src/scene/mountRenderer.js", "../src/scene/initializeSharedRenderer.js", "../src/scene/onAdd3DLayer.js", "../src/picking/findFeature.js", "../src/picking/onClick.js", "../src/picking/onPointerLeave.js", "../src/picking/onPointerMove.js", "../src/picking/pointerMove.js", "../src/picking/pointerClick.js", "../src/picking/pointerLeave.js", "../src/scene/attachLayer.js", "../src/scene/onRemove3DLayer.js", "../src/globals/sceneTransferFields.js", "../src/scene/releaseSharedScene.js", "../src/globals/sceneCleanupFields.js", "../src/scene/releaseRenderer.js", "../src/terrain/onTerrainChange.js", "../src/models/loadModel.js", "../src/globals/geometryDecoder.js", "../src/models/hasUnsupportedPrimitives.js", "../src/models/decodeModel.js", "../src/geometry/conformModelToTerrain.js", "../src/geometry/vertexNormals.js", "../src/collision/collectMeshes.js", "../src/models/loadModelResources.js", "../src/models/loadBuffer.js", "../src/globals/geometryImageOptions.js", "../src/models/loadImage.js", "../src/models/textureSampler.js", "../src/models/textureFor.js", "../src/models/materialFor.js", "../src/models/createModelContext.js", "../src/globals/geometryQuaternion.js", "../src/globals/geometryScale.js", "../src/globals/geometryTranslation.js", "../src/models/nodeMatrix.js", "../src/globals/geometrySemantics.js", "../src/globals/types.js", "../src/globals/sizes.js", "../src/models/readAccessorValue.js", "../src/models/readAccessorValues.js", "../src/models/readSparseAccessor.js", "../src/models/normalizeAccessor.js", "../src/models/readAccessor.js", "../src/models/readModelAttributes.js", "../src/models/readModelIndices.js", "../src/models/createModelGeometry.js", "../src/models/modelNode.js", "../src/models/releaseModelResources.js", "../src/models/buildModelNodes.js", "../src/models/applyModelTransform.js", "../src/scene/get3DEvents.js", "../src/scene/ready3D.js", "../src/scene/placeEntry.js", "../src/scene/placeEntryElement.js", "../src/scene/placeUnderEntry.js", "../src/globals/pendingPlacements.js", "../src/scene/runPlacements.js", "../src/scene/replaceEntry.js", "../src/scene/removeEntry.js", "../src/scene/underEntry.js", "../src/scene/layerCountTitle.js", "../src/scene/renderLayerCount.js", "../src/scene/updateLayerCount.js", "../src/raster/initRaster.js", "../src/globals/wantedTiles.js", "../src/globals/coverageTiles.js", "../src/raster/comparePendingTiles.js", "../src/globals/blobParts.js", "../src/raster/addRasterTile.js", "../src/globals/rasterPoint.js", "../src/globals/demTexture.js", "../src/globals/demTarget.js", "../src/globals/demLayout.js", "../src/globals/demSize.js", "../src/terrain/copyTerrainTile.js", "../src/terrain/terrainAtlas.js", "../src/terrain/rasterProgram.js", "../src/globals/demBuffer.js", "../src/terrain/terrainGrid.js", "../src/terrain/terrainBuffers.js", "../src/raster/terrainTileGeometry.js", "../src/raster/registerTerrainTile.js", "../src/raster/createRasterMesh.js", "../src/globals/rasterTexture.js", "../src/globals/rasterSampler.js", "../src/globals/rasterBuffer.js", "../src/globals/rasterPositions.js", "../src/globals/rasterNormals.js", "../src/globals/rasterUVs.js", "../src/globals/rasterIndices.js", "../src/raster/createGeometry.js", "../src/raster/finishRasterTile.js", "../src/raster/loadRasterTile.js", "../src/raster/pumpRasterTiles.js", "../src/raster/retainRasterTiles.js", "../src/globals/archiveNorthWest.js", "../src/globals/archiveSouthEast.js", "../src/raster/rasterTileRange.js", "../src/raster/updateRasterTiles.js", "../src/raster/getRasterEvents.js", "../src/raster/readyRaster.js", "../src/raster/reportError.js", "../src/raster/finishAttachment.js", "../src/raster/setRasterTerrain.js", "../src/raster/updateAttachedTiles.js", "../src/raster/onPMTileAdd.js", "../src/raster/releaseRasterTiles.js", "../src/raster/onPMTileRemove.js", "../src/raster/getRasterTileSize.js", "../src/terrain/onTerrainRemove.js", "../src/globals/renderEmpty.js", "../src/terrain/clearLayerTerrain.js", "../src/terrain/onTerrainAdd.js", "../src/terrain/loadTerrainTiles.js", "../src/terrain/readBridges.js", "../src/terrain/terrainTileQueue.js", "../src/geometry/addBridges.js", "../src/geometry/bridgeLocal.js", "../src/geometry/bridgePaths.js", "../src/geometry/indexBridge.js", "../src/geometry/bridgeFaces.js", "../src/geometry/bridgeEdge.js", "../src/geometry/bridgeSides.js", "../src/geometry/bridgePolygon.js", "../src/terrain/applyTerrain.js", "../src/terrain/loadTerrain.js", "../src/terrain/loadReadyTerrain.js", "../src/terrain/setLayerTerrain.js", "../src/terrain/initTerrain.js", "../src/sunlight/initSunlight.js", "../src/sunlight/onAddSun.js", "../src/globals/sunlightByControl.js", "../src/globals/sunByMap.js", "../src/sunlight/createSun.js", "../src/sunlight/updateSky.js", "../src/sunlight/projectCelestialBody.js", "../src/sunlight/updateCelestialDisc.js", "../src/sunlight/updateSun.js", "../src/globals/atmosphereStops.js", "../src/globals/atmosphereColor.js", "../src/sunlight/mix.js", "../src/sunlight/rgb.js", "../src/sunlight/atmosphere.js", "../src/sunlight/solarTime.js", "../src/sunlight/horizontalPosition.js", "../src/sunlight/moonPosition.js", "../src/globals/sinObliquity.js", "../src/globals/cosObliquity.js", "../src/sunlight/solarPosition.js", "../src/sunlight/render.js", "../src/sunlight/useLiveTime.js", "../src/sunlight/useSelectedTime.js", "../src/sunlight/tickSun.js", "../src/sunlight/initialize.js", "../src/sunlight/addTimeLayer.js", "../src/sunlight/removeTimeLayer.js", "../src/sunlight/onAdd.js", "../src/sunlight/addTo.js", "../src/sunlight/styleTimeControl.js", "../src/sunlight/remove.js", "../src/sunlight/removeSun.js", "../src/sunlight/onRemoveSun.js", "../src/traffic/initTraffic.js", "../src/globals/trafficEmptyOptions.js", "../src/globals/paints.js", "../src/globals/dark.js", "../src/globals/skin.js", "../src/globals/trousers.js", "../src/geometry/box.js", "../src/vehicles/bicycleModel.js", "../src/globals/shirt.js", "../src/globals/parts.js", "../src/vehicles/pedestrianModel.js", "../src/traffic/routeColor.js", "../src/globals/glass.js", "../src/globals/white.js", "../src/globals/tyre.js", "../src/globals/headlight.js", "../src/globals/taillight.js", "../src/vehicles/carriage.js", "../src/vehicles/busModel.js", "../src/vehicles/tramModel.js", "../src/vehicles/metroModel.js", "../src/vehicles/mirror.js", "../src/vehicles/carModel.js", "../src/globals/hull.js", "../src/vehicles/boatBenches.js", "../src/vehicles/boatModel.js", "../src/globals/vehicles.js", "../src/globals/trafficShader.js", "../src/geometry/triangle.js", "../src/geometry/build.js", "../src/traffic/tooltip.js", "../src/traffic/startTraffic.js", "../src/traffic/addTraffic.js", "../src/traffic/disposeTrafficObject.js", "../src/traffic/destroyTrafficGpu.js", "../src/traffic/removeTraffic.js", "../src/traffic/readyTraffic.js", "../src/traffic/trafficNow.js", "../src/traffic/vehicleOffsets.js", "../src/globals/trafficClocks.js", "../src/traffic/clockMinutes.js", "../src/traffic/compareDepartures.js", "../src/traffic/scheduledTrips.js", "../src/traffic/tripsAt.js", "../src/traffic/failTraffic.js", "../src/globals/trafficRouteMaterial.js", "../src/traffic/appendRouteDash.js", "../src/traffic/appendRouteSegment.js", "../src/traffic/routeGeometry.js", "../src/traffic/createTrafficMesh.js", "../src/traffic/drawTrafficRoute.js", "../src/traffic/trafficBounds.js", "../src/traffic/rebuildTrafficMesh.js", "../src/traffic/trafficStorage.js", "../src/traffic/uploadTrafficLanes.js", "../src/traffic/rebaseTraffic.js", "../src/traffic/trafficStatusText.js", "../src/traffic/refreshTrafficTrips.js", "../src/traffic/moveTraffic.js", "../src/traffic/updateTrafficLights.js", "../src/traffic/updateTrafficPose.js", "../src/traffic/tickTraffic.js", "../src/traffic/fetchTrafficLanes.js", "../src/globals/trafficEmptyList.js", "../src/traffic/toLanes.js", "../src/traffic/prepareTraffic.js", "../src/traffic/groundTraffic.js", "../src/traffic/loadedTrafficLanes.js", "../src/traffic/failedTrafficLoad.js", "../src/traffic/loadTraffic.js", "../src/traffic/updateTraffic.js", "../src/traffic/updateTrafficTerrain.js", "../src/walk/initWalk.js", "../src/walk/initialize.js", "../src/walk/createWalk.js", "../src/walk/onBlur.js", "../src/globals/moves.js", "../src/walk/stop.js", "../src/walk/onPointer.js", "../src/globals/limbs.js", "../src/walk/local.js", "../src/walk/place.js", "../src/walk/onTerrain.js", "../src/walk/onKey.js", "../src/walk/start.js", "../src/globals/sceneWalkHandlers.js", "../src/utils/wrap.js", "../src/picking/shouldSkipOther.js", "../src/walk/land.js", "../src/walk/moveWalker.js", "../src/globals/colliders.js", "../src/collision/transformTriangle.js", "../src/collision/indexTriangle.js", "../src/collision/collider.js", "../src/collision/horizontalRay.js", "../src/picking/hitColliderCell.js", "../src/picking/hitMesh.js", "../src/picking/hit.js", "../src/walk/blocked.js", "../src/walk/stepWalkerHeight.js", "../src/walk/updateWalkerView.js", "../src/walk/step.js", "../src/walk/toggle.js", "../src/walk/onAdd.js", "../src/walk/onRemove.js", "../src/core/initializeNativeLayer.js", "../src/globals/closestMethods.js", "../src/globals/boundsMethods.js", "../src/globals/gridInitializers.js", "../src/scene/emptyEvents.js", "../src/core/closestCameraLayerPoint.js", "../src/core/cameraCircleBounds.js", "../src/core/initializeGridContainer.js", "../src/globals/pendingGridFades.js", "../src/globals/gridFadeFrame.js", "../src/core/cancelGridFade.js", "../src/core/runGridFades.js", "../src/core/scheduleGridFade.js", "../src/core/updateGridOpacity.js", "../src/globals/pendingRasterLoads.js", "../src/core/fireRasterLoad.js", "../src/core/addRasterImage.js", "../src/core/redrawPath.js", "../src/scene/layerLayerAdd.js", "../src/scene/removeLayerEvents.js", "../src/scene/addSceneLayer.js", "../src/scene/isNativeLayer.js", "../src/scene/layerInitialize.js", "../src/globals/pendingInitializations.js", "../src/globals/loading.js", "../src/sources/initializeGeoJSON.js", "../src/cog/validateCogRange.js", "../src/cog/validateCogContentRange.js", "../src/cog/invalidCogFullResponse.js", "../src/cog/validateCogResponse.js", "../src/cog/readCogBody.js", "../src/cog/readCog.js", "../src/globals/cogTags.js", "../src/cog/readCogTag.js", "../src/cog/readCogDirectory.js", "../src/cog/validCogDimensions.js", "../src/cog/validCogEncoding.js", "../src/cog/getCogProfile.js", "../src/cog/hasCogProjection.js", "../src/cog/finiteCogValues.js", "../src/cog/validCogGeoArrays.js", "../src/cog/getCogBase.js", "../src/cog/validCogGrid.js", "../src/cog/validateCogOffsets.js", "../src/cog/readCogLevel.js", "../src/cog/readCogDirectories.js", "../src/cog/decodeCogTile.js", "../src/cog/readCogBlock.js", "../src/cog/getElevationTile.js", "../src/cog/getColorTile.js", "../src/cog/validCogTileCoordinates.js", "../src/cog/getCogTile.js", "../src/cog/getCogHeader.js", "../src/cog/validateCogContainer.js", "../src/cog/getCogAssetEntry.js", "../src/cog/openCogAsset.js", "../src/cog/openCog.js", "../src/cog/initCog.js", "../src/scene/initializerFor.js", "../src/scene/resolveNextInitialization.js", "../src/scene/initializeLayer.js", "../src/core/removeLayer.js", "../src/scene/removeSceneLayer.js", "../src/camera/getPitch.js", "../src/camera/getBearing.js", "../src/core/markerSetRotation.js", "../src/core/setRotation.js", "../src/core/layerCallInitHooks.js"],
4
+ "sourcesContent": ["export const L = globalThis.L;\r\n", "export const cameraByMap = new WeakMap();\n", "export const radians = Math.PI / 180;\n", "export const degrees = 180 / Math.PI;\r\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nexport function mapGetPitch(map) { return cameraByMap.get(map)?._cameraPitch ?? 0; }\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nexport function mapGetBearing(map) { return cameraByMap.get(map)?._cameraBearing ?? 0; }\n", "export const cameraEmptyOptions = Object.freeze({});\n", "import { L } from '../globals/L.js';\nimport { radians } from '../globals/radians.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\n\n\nexport function updateSky() {\n const height = this.getSize().y, pitch = mapGetPitch(this) * radians;\n const far = height * this.options.pitchMaxDistance, distance = height * 1.5;\n const top = height / 2 - far * Math.abs(Math.cos(pitch)) * distance / (distance + Math.sin(pitch) * far);\n if (top > 0 && !cameraByMap.get(this)._pitchSky) {\n cameraByMap.get(this)._pitchSky = L.DomUtil.create('div', 'leaflet-pitch-sky', this.getContainer());\n cameraByMap.get(this)._pitchSky.setAttribute('aria-hidden', 'true');\n cameraByMap.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))';\n }\n if (cameraByMap.get(this)._pitchSky) {\n cameraByMap.get(this)._pitchSky.style.inset = pitch > Math.PI / 2 ? 'auto 0 0' : '0 0 auto';\n cameraByMap.get(this)._pitchSky.style.height = `${Math.max(0, Math.ceil(top))}px`;\n cameraByMap.get(this)._pitchSky.style.display = top > 0 ? '' : 'none';\n }\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { updateSky } from './updateSky.js';\n\nexport function mapSetPitchAndBearing(map, pitch, bearing) {\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw /* alloc */ new TypeError('Camera angles must be finite numbers');\n if (!Number.isFinite(map.options.maxPitch) || map.options.maxPitch < 0 || map.options.maxPitch > 180) {\n throw /* alloc */ new TypeError('maxPitch must be between 0 and 180 degrees');\n }\n const previousPitch = mapGetPitch(map), previousBearing = mapGetBearing(map);\n cameraByMap.get(map)._cameraPitch = Math.max(0, Math.min(map.options.maxPitch, pitch));\n cameraByMap.get(map)._cameraBearing = ((bearing % 360) + 360) % 360;\n if (map._loaded) {\n updateSky.call(map);\n if (previousBearing !== mapGetBearing(map)) map.fire('rotate', /* alloc */ { bearing: mapGetBearing(map) });\n if (previousPitch !== mapGetPitch(map)) map.fire('pitch', /* alloc */ { pitch: mapGetPitch(map) });\n }\n return map;\n}\n", "export const cameraAnimations = new Map();\n", "export const cameraAnimationFrame = { value: null };\n", "import { cameraAnimations } from '../globals/cameraAnimations.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { cameraAnimationFrame } from '../globals/cameraAnimationFrame.js';\n\n\n\nexport function cancelCameraAnimation(map) {\r\n cameraAnimations.delete(map);\r\n cameraByMap.get(map)._cameraAnimation = null;\r\n cameraByMap.get(map)._cameraFrame = null;\r\n if (!cameraAnimations.size && cameraAnimationFrame.value !== null) {\r\n cancelAnimationFrame(cameraAnimationFrame.value);\r\n cameraAnimationFrame.value = null;\r\n }\r\n}\n", "export const Compass = { value: undefined };\n", "export const ContainerResize = { value: undefined };\n", "export const PitchDrag = { value: undefined };\n", "export const ShiftRotate = { value: undefined };\n", "export const TouchMode = { value: undefined };\n", "export const touchByContainer = new WeakMap();\n", "export const cameraTouchStates = new Set();\n", "export const cameraListenerOptions = Object.freeze({\n capture: true,\n passive: false\n});\n", "export function notifyCameraTouchChange() { this._map.fire('cameratouchchange'); }\n", "export const cameraDragSensitivity = Object.freeze([0.8, 0.5]);\n", "export const cameraBearingSensitivity = Object.freeze([0.8, 0]);\n", "export const cameraFocusOptions = Object.freeze({\n preventScroll: true\n});\n", "export const cameraAnimatedOptions = Object.freeze({\n animate: true\n});\n", "import { cameraAnimationFrame } from '../globals/cameraAnimationFrame.js';\nimport { cameraAnimations } from '../globals/cameraAnimations.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapSetPitchAndBearing } from './mapSetPitchAndBearing.js';\n\n\nimport { scheduleCameraAnimation } from './scheduleCameraAnimation.js';\n\nexport function runCameraAnimations(now) {\n cameraAnimationFrame.value = null;\n const pending = /* alloc */ [...cameraAnimations];\n cameraAnimations.clear();\n let failure;\n let map, animation, progress, eased;\n for ([map, animation] of pending) {\n cameraByMap.get(map)._cameraFrame = null;\n if (cameraByMap.get(map)._cameraAnimation !== animation) continue;\n progress = animation.duration\n ? Math.min(1, (now - animation.start) / (animation.duration * 1000)) : 1;\n eased = 1 - (1 - progress) ** 3;\n try {\n mapSetPitchAndBearing(map, animation.fromPitch + (Math.max(0, Math.min(map.options.maxPitch, animation.pitch)) - animation.fromPitch) * eased, animation.fromBearing + animation.delta * eased);\n if (progress < 1 && cameraByMap.get(map)._cameraAnimation === animation) scheduleCameraAnimation(map, animation);\n else if (cameraByMap.get(map)._cameraAnimation === animation) cameraByMap.get(map)._cameraAnimation = null;\n } catch (error) {\n failure ||= error;\n }\n }\n if (failure) throw failure;\n}\n", "import { cameraAnimations } from '../globals/cameraAnimations.js';\nimport { cameraAnimationFrame } from '../globals/cameraAnimationFrame.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\n\nimport { runCameraAnimations } from './runCameraAnimations.js';\n\nexport function scheduleCameraAnimation(map, animation) {\r\n cameraAnimations.set(map, animation);\r\n if (cameraAnimationFrame.value === null) cameraAnimationFrame.value = requestAnimationFrame(runCameraAnimations);\r\n cameraByMap.get(map)._cameraFrame = cameraAnimationFrame.value;\r\n}\n", "import { cameraEmptyOptions } from '../globals/cameraEmptyOptions.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { mapSetPitchAndBearing } from './mapSetPitchAndBearing.js';\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { cancelCameraAnimation } from './cancelCameraAnimation.js';\nimport { scheduleCameraAnimation } from './scheduleCameraAnimation.js';\n\n\nexport function mapAnimateCamera(map, pitch, bearing, options = cameraEmptyOptions) {\n cancelCameraAnimation(map);\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw /* alloc */ new TypeError('Camera angles must be finite numbers');\n if (!options.animate || matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return mapSetPitchAndBearing(map, pitch, bearing);\n }\n const duration = options.duration ?? 0.3;\n if (!Number.isFinite(duration) || duration < 0) throw /* alloc */ new TypeError('Camera duration must be nonnegative');\n const start = performance.now(), fromPitch = mapGetPitch(map), fromBearing = mapGetBearing(map);\n const delta = ((bearing - fromBearing) % 360 + 540) % 360 - 180;\n const animation = cameraByMap.get(map)._cameraAnimation = /* alloc */ { duration, start, fromPitch, fromBearing, pitch, delta };\n scheduleCameraAnimation(map, animation);\n return map;\n}\n", "import { cameraAnimatedOptions } from '../globals/cameraAnimatedOptions.js';\nimport { mapAnimateCamera } from './mapAnimateCamera.js';\n\nexport function mapResetNorthPitch(map, options = cameraAnimatedOptions) { return mapAnimateCamera(map, 0, 0, options); }\n", "import { mapAnimateCamera } from './mapAnimateCamera.js';\nimport { mapGetPitch } from './mapGetPitch.js';\nexport function mapSetBearing(map, bearing, options) { return mapAnimateCamera(map, mapGetPitch(map), bearing, options); }\n", "import { cameraAnimatedOptions } from '../globals/cameraAnimatedOptions.js';\nimport { mapSetBearing } from './mapSetBearing.js';\n\nexport function mapResetNorth(map, options = cameraAnimatedOptions) { return mapSetBearing(map, 0, options); }\n", "import { cameraFocusOptions } from '../globals/cameraFocusOptions.js';\nimport { mapResetNorthPitch } from '../camera/mapResetNorthPitch.js';\r\nimport { mapResetNorth } from '../camera/mapResetNorth.js';\r\n\r\nexport function rotateButtonClick(event) {\r\n const control = this._rotateControl, map = control._map;\r\n event.preventDefault();\r\n if (control.options.visualizePitch) mapResetNorthPitch(map);\r\n else mapResetNorth(map);\r\n if (event.detail) map.getContainer().focus(cameraFocusOptions);\r\n}\r\n", "import { mapAnimateCamera } from './mapAnimateCamera.js';\nimport { mapGetBearing } from './mapGetBearing.js';\nexport function mapSetPitch(map, pitch, options) { return mapAnimateCamera(map, pitch, mapGetBearing(map), options); }\n", "import { mapSetBearing } from '../camera/mapSetBearing.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nimport { mapSetPitch } from '../camera/mapSetPitch.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nexport function rotateButtonKeydown(event) {\r\n const control = this._rotateControl, map = control._map, step = event.shiftKey ? 15 : 5;\r\n if (event.key === 'ArrowLeft') mapSetBearing(map, mapGetBearing(map) - step);\r\n else if (event.key === 'ArrowRight') mapSetBearing(map, mapGetBearing(map) + step);\r\n else if (event.key === 'ArrowUp' && control.options.visualizePitch) mapSetPitch(map, mapGetPitch(map) + step);\r\n else if (event.key === 'ArrowDown' && control.options.visualizePitch) mapSetPitch(map, mapGetPitch(map) - step);\r\n else if (event.key === 'Home' || event.key === ' ') this.click();\r\n else return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n}\n", "import { radians } from '../globals/radians.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nexport function refreshRotateControl() {\n const map = this._map, pitch = this.options.visualizePitch ? mapGetPitch(map) : 0;\n this._arrow.style.transform = `scale(${1 / Math.sqrt(Math.max(0.01, Math.abs(Math.cos(pitch * radians))))}) rotateX(${pitch}deg) rotate(${mapGetBearing(map)}deg)`;\n this._button.setAttribute('aria-description', `Bearing ${Math.round(mapGetBearing(map))} degrees, pitch ${Math.round(mapGetPitch(map))} degrees. Arrow keys adjust the camera; Home resets it.`);\n this._container.style.display = this.options.closeOnZeroBearing && !mapGetBearing(map) && !pitch &&\n !this._container.contains(document.activeElement) ? 'none' : '';\n}\n", "export const dragStates = { value: new WeakMap() };\n", "export const cameraDrags = { value: new Set() };\n", "export function editable(target) {\r\n return target.closest?.('input,textarea,select,[contenteditable=\"true\"]');\r\n}\n", "import { dragStates } from '../globals/dragStates.js';\nimport { cameraFocusOptions } from '../globals/cameraFocusOptions.js';\n\n\nimport { editable } from './editable.js';\n\nexport function cameraDragDown(event) {\n const state = dragStates.value.get(this);\n if (state.drag || !state.accept(event) || editable(event.target)) return;\n event.preventDefault();\n event.stopPropagation();\n state.moved = false;\n const rect = state.map.getContainer().getBoundingClientRect();\n state.drag = /* alloc */ {\n id: event.pointerId, x: event.clientX, y: event.clientY, cursor: state.element.style.cursor,\n cx: rect.left + rect.width / 2, cy: rect.top + rect.height / 2,\n dragging: state.map.dragging?.enabled(),\n };\n state.map.dragging?.disable();\n state.element.focus?.(cameraFocusOptions);\n state.element.setPointerCapture(event.pointerId);\n state.element.style.cursor = 'grabbing';\n}\n", "import { cancelCameraAnimation } from './cancelCameraAnimation.js';\n\nexport function mapStopPitchBearingAnimation(map) {\n cancelCameraAnimation(map);\r\n return map;\n}\n", "import { degrees } from '../globals/degrees.js';\nimport { dragStates } from '../globals/dragStates.js';\n\nimport { mapStopPitchBearingAnimation } from '../camera/mapStopPitchBearingAnimation.js';\nimport { mapSetPitchAndBearing } from '../camera/mapSetPitchAndBearing.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nexport function cameraDragMove(event) {\r\n const state = dragStates.value.get(this);\r\n if (!state.drag || state.drag.id !== event.pointerId) return;\r\n const x = event.clientX - state.drag.x, y = event.clientY - state.drag.y;\r\n if (Math.hypot(x, y) < 3 && !state.moved) return;\r\n mapStopPitchBearingAnimation(state.map);\r\n state.moved = true;\r\n event.preventDefault();\r\n let bearing = x * state.sensitivity[0];\r\n if (state.orbit) {\r\n if (Math.abs(state.drag.cy - state.drag.y) > 100) {\r\n const angle = Math.atan2(event.clientY - state.drag.cy, event.clientX - state.drag.cx) -\r\n Math.atan2(event.clientY - state.drag.cy, state.drag.x - state.drag.cx);\r\n bearing = Math.atan2(Math.sin(angle), Math.cos(angle)) * degrees;\r\n } else bearing *= event.clientY < state.drag.cy ? 1 : -1;\r\n }\r\n mapSetPitchAndBearing(state.map, mapGetPitch(state.map) - y * state.sensitivity[1], mapGetBearing(state.map) + bearing);\r\n state.drag.x = event.clientX;\r\n state.drag.y = event.clientY;\r\n}\n", "export function finishCameraDrag(state, event) {\r\n if (!state?.drag) return;\r\n if (event?.pointerId !== undefined && event.pointerId !== state.drag.id) return;\r\n const finished = state.drag;\r\n state.drag = null;\r\n if (state.element.hasPointerCapture?.(finished.id)) state.element.releasePointerCapture(finished.id);\r\n if (finished.dragging && state.map.getContainer()._leaflet_id) state.map.dragging.enable();\r\n state.element.style.cursor = finished.cursor;\r\n}\n", "import { dragStates } from '../globals/dragStates.js';\n\nimport { finishCameraDrag } from './finishCameraDrag.js';\n\nexport function cameraDragEnd(event) {\r\n finishCameraDrag(dragStates.value.get(this), event);\r\n}\n", "import { dragStates } from '../globals/dragStates.js';\n\n\nexport function cameraDragClick(event) {\r\n const state = dragStates.value.get(this);\r\n if (!state.moved) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n state.moved = false;\r\n}\n", "import { dragStates } from '../globals/dragStates.js';\n\n\nexport function cameraDragContextMenu(event) {\r\n const state = dragStates.value.get(this);\r\n if (!state.drag && !state.moved) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n}\n", "import { cameraDrags } from '../globals/cameraDrags.js';\n\n\nimport { finishCameraDrag } from './finishCameraDrag.js';\n\nexport function endAllCameraDrags() {\n let state;\n for (state of cameraDrags.value) finishCameraDrag(state);\n}\n", "import { cameraDragSensitivity } from '../globals/cameraDragSensitivity.js';\nimport { dragStates } from '../globals/dragStates.js';\nimport { cameraDrags } from '../globals/cameraDrags.js';\n\n\nimport { cameraDragDown } from './cameraDragDown.js';\nimport { cameraDragMove } from './cameraDragMove.js';\nimport { cameraDragEnd } from './cameraDragEnd.js';\nimport { cameraDragClick } from './cameraDragClick.js';\nimport { cameraDragContextMenu } from './cameraDragContextMenu.js';\nimport { endAllCameraDrags } from './endAllCameraDrags.js';\n\nexport function dragCamera(map, element, accept, sensitivity = cameraDragSensitivity, orbit = false) {\n const state = /* alloc */ { map, element, accept, sensitivity, orbit, drag: null, moved: false };\n dragStates.value.set(element, state);\n cameraDrags.value.add(state);\n element.addEventListener('pointerdown', cameraDragDown, true);\n element.addEventListener('pointermove', cameraDragMove);\n element.addEventListener('pointerup', cameraDragEnd);\n element.addEventListener('pointercancel', cameraDragEnd);\n element.addEventListener('lostpointercapture', cameraDragEnd);\n element.addEventListener('click', cameraDragClick, true);\n element.addEventListener('contextmenu', cameraDragContextMenu);\n window.addEventListener('blur', endAllCameraDrags);\n return state;\n}\n", "export function acceptRotateDrag(event) {\r\n return event.button === 0;\r\n}\n", "import { refreshRotateControl } from './refreshRotateControl.js';\n\nexport function refreshRotateFocus() {\r\n refreshRotateControl.call(this._rotateControl);\r\n}\n", "import { L } from '../globals/L.js';\nimport { cameraDragSensitivity } from '../globals/cameraDragSensitivity.js';\nimport { cameraBearingSensitivity } from '../globals/cameraBearingSensitivity.js';\nimport { rotateButtonClick } from './rotateButtonClick.js';\nimport { rotateButtonKeydown } from './rotateButtonKeydown.js';\nimport { refreshRotateControl } from './refreshRotateControl.js';\nimport { dragCamera } from './dragCamera.js';\nimport { acceptRotateDrag } from './acceptRotateDrag.js';\nimport { refreshRotateFocus } from './refreshRotateFocus.js';\n\n\nexport function rotateOnAdd(map) {\n const container = L.DomUtil.create('div', 'leaflet-control-rotate leaflet-bar');\n const button = L.DomUtil.create('a', 'leaflet-control-rotate-toggle', container);\n this._map = map;\n this._container = container;\n this._button = button;\n button._rotateControl = this;\n button.href = '#';\n button.draggable = false;\n button.setAttribute('role', 'button');\n button.title = this.options.visualizePitch ? 'Reset bearing and pitch' : 'Reset bearing to north';\n button.setAttribute('aria-label', button.title);\n button.style.cssText = 'cursor:grab;touch-action:none';\n const arrow = L.DomUtil.create('span', 'leaflet-control-rotate-arrow', button);\n this._arrow = arrow;\n arrow.setAttribute('aria-hidden', 'true');\n arrow.style.cssText = 'display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px';\n arrow.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\")';\n button.onclick = rotateButtonClick;\n button.onkeydown = rotateButtonKeydown;\n this._refresh = refreshRotateControl;\n map.on('rotate pitch', this._refresh, this);\n this._refresh();\n this._dragState = dragCamera(map, button, acceptRotateDrag,\n this.options.visualizePitch ? cameraDragSensitivity : cameraBearingSensitivity);\n button.addEventListener('focusout', refreshRotateFocus);\n L.DomEvent.on(button, 'dblclick contextmenu', L.DomEvent.stop);\n L.DomEvent.disableClickPropagation(container);\n L.DomEvent.disableScrollPropagation(container);\n return container;\n}\n", "import { dragStates } from '../globals/dragStates.js';\nimport { cameraDrags } from '../globals/cameraDrags.js';\n\nimport { finishCameraDrag } from './finishCameraDrag.js';\nimport { cameraDragDown } from './cameraDragDown.js';\nimport { cameraDragMove } from './cameraDragMove.js';\nimport { cameraDragEnd } from './cameraDragEnd.js';\nimport { cameraDragClick } from './cameraDragClick.js';\nimport { cameraDragContextMenu } from './cameraDragContextMenu.js';\n\nimport { endAllCameraDrags } from './endAllCameraDrags.js';\n\nexport function removeCameraDrag(state) {\r\n finishCameraDrag(state);\r\n const { element } = state;\r\n element.removeEventListener('pointerdown', cameraDragDown, true);\r\n element.removeEventListener('pointermove', cameraDragMove);\r\n element.removeEventListener('pointerup', cameraDragEnd);\r\n element.removeEventListener('pointercancel', cameraDragEnd);\r\n element.removeEventListener('lostpointercapture', cameraDragEnd);\r\n element.removeEventListener('click', cameraDragClick, true);\r\n element.removeEventListener('contextmenu', cameraDragContextMenu);\r\n dragStates.value.delete(element);\r\n cameraDrags.value.delete(state);\r\n if (!cameraDrags.value.size) window.removeEventListener('blur', endAllCameraDrags);\r\n}\n", "import { removeCameraDrag } from './removeCameraDrag.js';\n\nexport function pitchDragRemoveHooks() {\n removeCameraDrag(this._dragState);\n}\n", "import { pitchDragRemoveHooks } from './pitchDragRemoveHooks.js';\n\nexport function rotateOnRemove(map) {\n map.off('rotate pitch', this._refresh, this);\n pitchDragRemoveHooks.call(this);\n}\n", "import { L } from '../globals/L.js';\nexport function rotateControl(options) {\r\n return /* alloc */ new L.Control.Rotate(options);\r\n}\r\n", "import { mapSetBearing } from '../camera/mapSetBearing.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nimport { editable } from './editable.js';\n\nexport function shiftRotateWheel(event) {\r\n const handler = this._cameraShiftRotate;\r\n if (!event.shiftKey || editable(event.target) || event.target.closest('.leaflet-control')) return;\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n mapSetBearing(handler._map, mapGetBearing(handler._map) + Math.sign(event.deltaY) * 5);\r\n}\n", "import { cameraListenerOptions } from '../globals/cameraListenerOptions.js';\nimport { shiftRotateWheel } from './shiftRotateWheel.js';\n\n\nexport function shiftRotateAddHooks() {\n const container = this._map.getContainer();\n container._cameraShiftRotate = this;\n this._wheel = shiftRotateWheel;\n container.addEventListener('wheel', this._wheel, cameraListenerOptions);\n}\n", "export function shiftRotateRemoveHooks() {\n const container = this._map.getContainer();\r\n container.removeEventListener('wheel', this._wheel, true);\r\n delete container._cameraShiftRotate;\n}\n", "export function acceptPitchDrag(event) {\r\n return !event.target.closest('.leaflet-control,.leaflet-marker-icon,.leaflet-popup') &&\r\n (event.button === 2 || event.button === 0 && event.ctrlKey);\r\n}\n", "import { cameraDragSensitivity } from '../globals/cameraDragSensitivity.js';\nimport { dragCamera } from './dragCamera.js';\nimport { acceptPitchDrag } from './acceptPitchDrag.js';\n\n\nexport function pitchDragAddHooks() {\n this._dragState = dragCamera(this._map, this._map.getContainer(), acceptPitchDrag, cameraDragSensitivity, true);\n}\n", "import { mapSetBearing } from '../camera/mapSetBearing.js';\nexport function compassOrientation(event) {\r\n const handler = this.handler;\r\n const bearing = Number.isFinite(event.webkitCompassHeading) ? -event.webkitCompassHeading : event.alpha;\r\n const orientation = event.absolute ? 0 : (screen.orientation?.angle ?? window.orientation ?? 0);\r\n if (Number.isFinite(bearing)) mapSetBearing(handler._map, bearing - orientation);\r\n}\n", "export function failCompassPermission(handler, error) {\r\n handler.disable();\r\n handler._map.fire('error', /* alloc */ { error });\r\n}\r\n", "import { failCompassPermission } from './failCompassPermission.js';\r\n\r\nexport function finishCompassPermission([handlerResult, permissionResult]) {\r\n const { handler, generation } = handlerResult.value;\r\n if (!handler.enabled() || handler._generation !== generation) return;\r\n if (!window.DeviceOrientationEvent || permissionResult.status !== 'fulfilled' ||\r\n permissionResult.value !== 'granted') {\r\n return failCompassPermission(handler, permissionResult.status === 'rejected' ? permissionResult.reason :\r\n /* alloc */ new Error('Device compass permission unavailable or denied'));\r\n }\r\n try {\r\n window.addEventListener('deviceorientation', handler._orientation);\r\n window.addEventListener('deviceorientationabsolute', handler._orientation);\r\n } catch (error) {\r\n failCompassPermission(handler, error);\r\n }\r\n}\r\n", "import { compassOrientation } from './compassOrientation.js';\nimport { finishCompassPermission } from './finishCompassPermission.js';\n\nexport function compassAddHooks() {\n this._compassGeneration = (this._generation = (this._generation || 0) + 1);\n this._orientation = /* alloc */ { handler: this, handleEvent: compassOrientation };\n const permission = window.DeviceOrientationEvent?.requestPermission;\n let request;\n try {\n request = permission ? permission.call(window.DeviceOrientationEvent) : 'granted';\n } catch (error) {\n request = Promise.reject(error);\n }\n Promise.allSettled(/* alloc */ [\n Promise.resolve(/* alloc */ { handler: this, generation: this._generation }),\n request,\n ]).then(finishCompassPermission);\n}\n", "export function compassRemoveHooks() {\n this._generation++;\r\n window.removeEventListener('deviceorientation', this._orientation);\r\n window.removeEventListener('deviceorientationabsolute', this._orientation);\n}\n", "export function resizeMap(entries) {\r\n entries[0]?.target._containerResizeMap.invalidateSize();\r\n}\n", "import { resizeMap } from './resizeMap.js';\n\nexport function containerResizeAddHooks() {\n const container = this._map.getContainer();\n container._containerResizeMap = this._map;\n this._observer = /* alloc */ new ResizeObserver(resizeMap);\n this._observer.observe(container);\n}\n", "export function containerResizeRemoveHooks() {\n const container = this._map.getContainer();\r\n this._observer.disconnect();\r\n delete container._containerResizeMap;\n}\n", "import { L } from '../globals/L.js';\nimport { touchByContainer } from '../globals/touchByContainer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapStopPitchBearingAnimation } from '../camera/mapStopPitchBearingAnimation.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\n\nexport function startCameraTouch(event) {\n const state = touchByContainer.get(this), { map, container } = state;\n if (state.touch || event.touches.length !== 2 || event.target.closest('.leaflet-control')) return;\n if (!cameraByMap.get(map).touchRotate.enabled() && !cameraByMap.get(map).touchPitch.enabled()) return;\n const [a, b] = event.touches;\n if (Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY) < 1) return;\n mapStopPitchBearingAnimation(map);\n const rect = container.getBoundingClientRect();\n const middle = /* alloc */ new L.Point(\n (a.clientX + b.clientX) / 2 - rect.left, (a.clientY + b.clientY) / 2 - rect.top);\n state.touch = /* alloc */ {\n angle: Math.atan2(b.clientY - a.clientY, b.clientX - a.clientX),\n distance: Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY), middle,\n anchor: map.containerPointToLatLng(middle), zoom: map.getZoom(),\n bearing: mapGetBearing(map), pitch: mapGetPitch(map), zooming: map.touchZoom?.enabled(),\n dragging: map.dragging?.enabled(),\n currentMiddle: /* alloc */ new L.Point(middle.x, middle.y),\n };\n map.dragging?.disable();\n event.preventDefault();\n event.stopImmediatePropagation();\n if (state.nativeZoom !== undefined) state.touch.zooming = state.nativeZoom;\n state.touch.snap = map.options.zoomSnap;\n map.options.zoomSnap = 0;\n}\n", "import { degrees } from '../globals/degrees.js';\nimport { touchByContainer } from '../globals/touchByContainer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\r\nimport { mapSetPitchAndBearing } from '../camera/mapSetPitchAndBearing.js';\r\n\r\nexport function moveCameraTouch(event) {\r\n const state = touchByContainer.get(this), { map, container, touch } = state;\r\n if (!touch || event.touches.length !== 2) return;\r\n const [a, b] = event.touches;\r\n const angle = Math.atan2(b.clientY - a.clientY, b.clientX - a.clientX);\r\n const rect = container.getBoundingClientRect(), middle = touch.currentMiddle;\r\n middle.x = (a.clientX + b.clientX) / 2 - rect.left;\r\n middle.y = (a.clientY + b.clientY) / 2 - rect.top;\r\n const delta = Math.atan2(Math.sin(angle - touch.angle), Math.cos(angle - touch.angle)) * degrees;\r\n mapSetPitchAndBearing(map, cameraByMap.get(map).touchPitch.enabled() ? touch.pitch - (middle.y - touch.middle.y) * 0.25 : touch.pitch, cameraByMap.get(map).touchRotate.enabled() ? touch.bearing + delta : touch.bearing);\r\n const distance = Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY);\r\n if (distance < 1) return;\r\n const zoom = touch.zooming ? Math.max(map.getMinZoom(), Math.min(map.getMaxZoom(),\r\n touch.zoom + Math.log2(distance / touch.distance))) : touch.zoom;\r\n map.setView(map.getCenter(), zoom, /* alloc */ { animate: false });\r\n if (map.options.touchZoom !== 'center') {\r\n const projected = map.project(touch.anchor).subtract(map.project(map.containerPointToLatLng(middle)));\r\n map.setView(map.unproject(map.project(map.getCenter()).add(projected)), map.getZoom(),\r\n /* alloc */ { animate: false });\r\n }\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n}\r\n", "export function endCameraTouch(state, event) {\r\n if (!state.touch) return;\r\n if (event?.touches?.length >= 2) return;\r\n const { map, container, touch } = state;\r\n if (touch.dragging && container._leaflet_id) map.dragging.enable();\r\n map.options.zoomSnap = touch.snap;\r\n if (touch.zooming && touch.snap && container._leaflet_id) {\r\n map.setZoom(Math.round(map.getZoom() / touch.snap) * touch.snap,\r\n /* alloc */ { animate: false });\r\n }\r\n state.touch = null;\r\n}\r\n", "import { touchByContainer } from '../globals/touchByContainer.js';\n\n\nimport { endCameraTouch } from './endCameraTouch.js';\n\nexport function endCameraTouchEvent(event) {\n endCameraTouch(touchByContainer.get(this), event);\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { endCameraTouch } from './endCameraTouch.js';\n\nexport function changeCameraTouch() {\r\n const state = cameraByMap.get(this)._cameraTouchState, { map, container } = state;\r\n const active = cameraByMap.get(map).touchRotate.enabled() || cameraByMap.get(map).touchPitch.enabled();\r\n if (active && state.nativeZoom === undefined) {\r\n state.nativeZoom = map.touchZoom?.enabled();\r\n map.touchZoom?.disable();\r\n } else if (!active && state.nativeZoom !== undefined) {\r\n endCameraTouch(state);\r\n if (state.nativeZoom && container._leaflet_id) map.touchZoom.enable();\r\n state.nativeZoom = undefined;\r\n }\r\n}\n", "import { cameraTouchStates } from '../globals/cameraTouchStates.js';\n\n\nimport { endCameraTouch } from './endCameraTouch.js';\n\nexport function endAllCameraTouches() {\n let state;\n for (state of cameraTouchStates) endCameraTouch(state);\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\nimport { cameraTouchStates } from '../globals/cameraTouchStates.js';\nimport { touchByContainer } from '../globals/touchByContainer.js';\n\n\nimport { endCameraTouch } from './endCameraTouch.js';\nimport { startCameraTouch } from './startCameraTouch.js';\nimport { moveCameraTouch } from './moveCameraTouch.js';\nimport { endCameraTouchEvent } from './endCameraTouchEvent.js';\n\nimport { endAllCameraTouches } from './endAllCameraTouches.js';\nimport { changeCameraTouch } from './changeCameraTouch.js';\n\nexport function cleanupCameraTouch() {\n const state = cameraByMap.get(this)._cameraTouchState;\n if (!state) return;\n const { container, map } = state;\n endCameraTouch(state);\n container.removeEventListener('touchstart', startCameraTouch, true);\n container.removeEventListener('touchmove', moveCameraTouch, true);\n container.removeEventListener('touchend', endCameraTouchEvent, true);\n container.removeEventListener('touchcancel', endCameraTouchEvent, true);\n cameraTouchStates.delete(state);\n if (!cameraTouchStates.size) window.removeEventListener('blur', endAllCameraTouches);\n map.off('cameratouchchange', changeCameraTouch, map);\n cameraByMap.get(map).rotateControl?.remove();\n touchByContainer.delete(container);\n delete cameraByMap.get(map)._cameraTouchState;\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\r\n\r\nexport function addCameraHandler(map, name, Type) {\r\n const handler = cameraByMap.get(map)[name] = /* alloc */ new Type(map);\r\n map._handlers.push(handler);\r\n if (map.options[name]) handler.enable();\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { Compass } from '../globals/Compass.js';\nimport { ContainerResize } from '../globals/ContainerResize.js';\nimport { PitchDrag } from '../globals/PitchDrag.js';\nimport { ShiftRotate } from '../globals/ShiftRotate.js';\nimport { TouchMode } from '../globals/TouchMode.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { touchByContainer } from '../globals/touchByContainer.js';\nimport { cameraTouchStates } from '../globals/cameraTouchStates.js';\nimport { cameraListenerOptions } from '../globals/cameraListenerOptions.js';\nimport { cameraEmptyOptions } from '../globals/cameraEmptyOptions.js';\nimport { notifyCameraTouchChange } from './notifyCameraTouchChange.js';\n\n\n\nimport { rotateOnAdd } from './rotateOnAdd.js';\nimport { rotateOnRemove } from './rotateOnRemove.js';\nimport { rotateControl } from './rotateControl.js';\nimport { shiftRotateAddHooks } from './shiftRotateAddHooks.js';\nimport { shiftRotateRemoveHooks } from './shiftRotateRemoveHooks.js';\nimport { pitchDragAddHooks } from './pitchDragAddHooks.js';\nimport { pitchDragRemoveHooks } from './pitchDragRemoveHooks.js';\nimport { compassAddHooks } from './compassAddHooks.js';\nimport { compassRemoveHooks } from './compassRemoveHooks.js';\nimport { containerResizeAddHooks } from './containerResizeAddHooks.js';\nimport { containerResizeRemoveHooks } from './containerResizeRemoveHooks.js';\nimport { startCameraTouch } from './startCameraTouch.js';\nimport { moveCameraTouch } from './moveCameraTouch.js';\nimport { endCameraTouchEvent } from './endCameraTouchEvent.js';\nimport { changeCameraTouch } from './changeCameraTouch.js';\nimport { cleanupCameraTouch } from './cleanupCameraTouch.js';\nimport { endAllCameraTouches } from './endAllCameraTouches.js';\nimport { addCameraHandler } from './addCameraHandler.js';\n\nCompass.value = L.Handler.extend({\n addHooks: compassAddHooks,\n removeHooks: compassRemoveHooks,\n});\n\nContainerResize.value = L.Handler.extend({\n addHooks: containerResizeAddHooks,\n removeHooks: containerResizeRemoveHooks,\n});\n\nPitchDrag.value = L.Handler.extend({\n addHooks: pitchDragAddHooks,\n removeHooks: pitchDragRemoveHooks,\n});\n\nShiftRotate.value = L.Handler.extend({\n addHooks: shiftRotateAddHooks,\n removeHooks: shiftRotateRemoveHooks,\n});\n\nTouchMode.value = L.Handler.extend({\n addHooks: notifyCameraTouchChange,\n removeHooks: notifyCameraTouchChange,\n});\n\nL.Control.Rotate = L.Control.extend({\n options: { position: 'topleft', closeOnZeroBearing: true, visualizePitch: true },\n onAdd: rotateOnAdd,\n onRemove: rotateOnRemove,\n});\n\nif (L.control) L.control.rotate = rotateControl;\n\nexport function cameraControls(map) {\n addCameraHandler(map, 'trackContainerMutation', ContainerResize.value);\n if (!map.options.rotate) return;\n addCameraHandler(map, 'shiftKeyRotate', ShiftRotate.value);\n addCameraHandler(map, 'pitchDrag', PitchDrag.value);\n addCameraHandler(map, 'compassBearing', Compass.value);\n addCameraHandler(map, 'touchRotate', TouchMode.value);\n addCameraHandler(map, 'touchPitch', TouchMode.value);\n const container = map.getContainer();\n const state = cameraByMap.get(map)._cameraTouchState = /* alloc */ { map, container, touch: null, nativeZoom: undefined };\n touchByContainer.set(container, state);\n cameraTouchStates.add(state);\n container.addEventListener('touchstart', startCameraTouch, cameraListenerOptions);\n container.addEventListener('touchmove', moveCameraTouch, cameraListenerOptions);\n container.addEventListener('touchend', endCameraTouchEvent, true);\n container.addEventListener('touchcancel', endCameraTouchEvent, true);\n window.addEventListener('blur', endAllCameraTouches);\n map.on('cameratouchchange', changeCameraTouch, map);\n if (map.options.rotateControl) {\n cameraByMap.get(map).rotateControl = /* alloc */ new L.Control.Rotate(typeof map.options.rotateControl === 'object' ? map.options.rotateControl : cameraEmptyOptions);\n cameraByMap.get(map).rotateControl.addTo(map);\n }\n map.once('unload', cleanupCameraTouch, map);\n}\n", "import { L } from './globals/L.js';\nimport { layerProto } from './globals/layerProto.js';\nimport { layerCallInitHooks as sharedLayerCallInitHooks } from './globals/layerCallInitHooks.js';\nimport { removeLayer as sharedRemoveLayer } from './globals/removeLayer.js';\n\nimport './camera/mapCamera.js';\nimport { init3D } from './scene/init3D.js';\nimport { initNativeGPU } from './core/initNativeGPU.js';\nimport { initRaster } from './raster/initRaster.js';\nimport { setGeoJSONData } from './sources/setGeoJSONData.js';\nimport { initTerrain } from './terrain/initTerrain.js';\nimport './sunlight/initSunlight.js';\nimport { initTraffic } from './traffic/initTraffic.js';\nimport './walk/initWalk.js';\n\nimport { initializeNativeLayer } from './core/initializeNativeLayer.js';\nimport { layerLayerAdd } from './scene/layerLayerAdd.js';\nimport { layerInitialize } from './scene/layerInitialize.js';\nimport { removeLayer } from './core/removeLayer.js';\nimport { getPitch } from './camera/getPitch.js';\nimport { getBearing } from './camera/getBearing.js';\nimport { setRotation } from './core/setRotation.js';\nimport { layerCallInitHooks } from './core/layerCallInitHooks.js';\n\n/**\n * `new L.Layer({ source: { type, url, ...settings }, pane, attribution })`: layers with a `source`\n * initialize their specialized behavior on first use. Native map layers also join the WebGPU scene.\n */\n\n/**\n * Router for `new L.Layer({ source: { type, url, ...settings }, pane, attribution })`.\n * It initializes a native instance from the bundled source modules;\n * types receive flat options (`{ ...source, pane, attribution }`); plugin state remains external.\n *\n * Folder layout:\n * - scene/: source routing, lifecycle and graph; initializers live in their domain folders.\n * - core/: Leaflet layer integration; camera/ and controls/: camera and interaction.\n * - sources/ and picking/: source geometry and feature interaction.\n * - rendering/, shaders/, shadows/ and lighting/: WebGPU drawing and illumination.\n * - geometry/, triangulation/ and collision/: mesh operations and spatial queries.\n * - models/, archives/ and raster/: glTF loading, archive access and raster tiles.\n * - globals/: one shared value per module, imported directly by its consumers.\n * - terrain/, sunlight/, traffic/ and walk/: feature-specific operations.\n * Operations receive the layer explicitly, without subclasses or prototype replacement.\n * Dataset-specific code and data (routes, timetables, API loaders) belong to the application, e.g. misc/.\n *\n * When `type` is omitted, inline FeatureCollections use 'geojson'; *.pmtiles URLs use\n * 'pmtiles', *.tif/*.tiff URLs use 'cog', and other sources use '3d'.\n */\n\nlayerProto.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Layer.prototype));\nsharedLayerCallInitHooks.value = L.Layer.prototype.callInitHooks;\n\n/**\n * The '3d' layer type: native WebGPU scene synchronized with the map camera.\n * Layers on one map share a canvas, scene and camera; each has its own root transform.\n *\n * @typedef {Object} Layer3DOptions Layer options; pane and attribution remain standard L.Layer options.\n * @property {string} [type] '3d', 'geojson', 'pmtiles', 'cog', 'terrain' or 'traffic'.\n * @property {number[]} [center] Local origin [lat,lng]; defaults to the first map center.\n * @property {number} [terrainOffset=0] Vertical offset in metres when terrain is enabled.\n * @property {boolean} [terrainConform=false] Fit lower model geometry to local terrain elevation.\n * @property {'OPAQUE'|'MASK'|'BLEND'} [alphaMode] Override every glTF material's alpha mode.\n * @property {number[]} [rotation] Model Euler rotation [x,y,z] in radians, YXZ order.\n * @property {number[]} [scale] Model scale [x,y,z].\n * @property {string} [url] GLB/glTF model URL, PMTiles archive URL or supported COG URL.\n * @property {boolean} [doubleSided=false] Show raster/terrain surfaces from below.\n * @property {{x:number,y:number,radius:number,outside?:boolean}} [cutout] Raster screen-space circle in CSS pixels; outside keeps only the circle.\n * @property {function(Object): (ExtrusionStyle|null)} [style] Source styling; null skips a feature.\n * @property {function(PickedFeature): (Node|string)} [tooltip] Tooltip content; strings are text.\n * @property {string} [ariaLabel='3D scene'] Shared canvas accessible name.\n * @property {boolean} [nightLight=false] Point sources: emissive bulbs and local illumination.\n * @property {boolean} [nightSparkle=false] Model: sparse luminous points at night.\n *\n * @typedef {Object} ExtrusionStyle\n * @property {number} top Roof height in metres; must exceed bottom.\n * @property {number} [bottom=0] Nonnegative base height.\n * @property {number|string|Object} [color=0xd9b38c] RGB/CSS color or linear-space {h,s,l}.\n * @property {number} [trunkRadius] Point tree trunk radius in metres.\n * @property {number} [crownRadius] Point tree crown radius in metres.\n * @property {number} [crownBottom] Point tree crown base in metres.\n * @property {string} [crownShape='round'] Point tree crown shape.\n * @property {number|string|Object} [trunkColor=0x72513a] Point tree bark color.\n * @property {number} [lightRadius] Point light estimated ground reach in metres.\n * @property {number} [lightFlux] Point light luminous flux in lumens.\n *\n * @typedef {Object} PickedFeature\n * @property {string|number} id Source feature id or configured model URL.\n * @property {Object} properties GeoJSON properties or model-level glTF extras.\n * @property {Object} mesh Intersected mesh.\n * @property {number[]} point Intersection [x,y,z] in shared scene metres.\n * @property {Object} [model] Configured model root; absent for source polygons.\n * @property {number} [vertexStart] First polygon vertex in the batched mesh.\n * @property {number} [vertexEnd] Exclusive end of the polygon's vertex range.\n *\n * @typedef {Object} SourceArea\n * @property {Object} coords Archive block {z,x,y}.\n * @property {AbortController} request Cancellation prevents attaching obsolete results.\n * @property {boolean} [done] Geometry built successfully, including empty blocks.\n * @property {Object|null} [mesh] Batched GPU mesh.\n * @property {number} [buildings] Emitted feature count.\n * @property {number} [skipped] Features skipped by style.\n * @property {string} [error] Failed load/build message.\n *\n * @param {L.Layer} backend\n * @param {Layer3DOptions} [options] World origin comes from center or the first map centre.\n */\n\nL.Layer.include({\n initialize: layerInitialize,\n _layerAdd: layerLayerAdd,\n callInitHooks: layerCallInitHooks,\n});\n\nsharedRemoveLayer.value = L.Map.prototype.removeLayer;\nL.Map.include({ removeLayer, getPitch, getBearing });\nL.Marker.include({ setRotation });", "export const layerProto = { value: undefined };\n", "export const layerCallInitHooks = { value: undefined };\n", "export const removeLayer = { value: undefined };\n", "import { L } from '../globals/L.js';\nimport { mapMethods } from '../globals/mapMethods.js';\nimport { markerMethods } from '../globals/markerMethods.js';\nimport { popupEvents } from '../globals/popupEvents.js';\nimport { tooltipEvents } from '../globals/tooltipEvents.js';\nimport { popupPosition } from '../globals/popupPosition.js';\nimport { popupPan } from '../globals/popupPan.js';\nimport { tooltipPosition } from '../globals/tooltipPosition.js';\nimport { tiledBounds } from '../globals/tiledBounds.js';\nimport { gridEvents } from '../globals/gridEvents.js';\n\nimport { initNativeGPU } from '../core/initNativeGPU.js';\n\nimport { mapLayerPointToContainerPoint } from './mapLayerPointToContainerPoint.js';\nimport { mapContainerPointToLayerPoint } from './mapContainerPointToLayerPoint.js';\nimport { mapGetCenterLayerPoint } from './mapGetCenterLayerPoint.js';\nimport { mapPanBy } from './mapPanBy.js';\nimport { mapSetZoomAround } from './mapSetZoomAround.js';\nimport { mapPanInside } from './mapPanInside.js';\nimport { mapLimitCenter } from './mapLimitCenter.js';\nimport { mapLimitOffset } from './mapLimitOffset.js';\nimport { mapGetBoundsCenterZoom } from './mapGetBoundsCenterZoom.js';\nimport { mapGetBoundsZoom } from './mapGetBoundsZoom.js';\nimport { mapTryAnimatedPan } from './mapTryAnimatedPan.js';\nimport { mapGetBounds } from './mapGetBounds.js';\nimport { initializeCameraMap } from './initializeCameraMap.js';\nimport { markerSetIcon } from '../core/markerSetIcon.js';\nimport { markerGetEvents } from '../core/markerGetEvents.js';\nimport { markerSetPos } from '../core/markerSetPos.js';\nimport { markerUpdateZIndex } from '../core/markerUpdateZIndex.js';\nimport { markerInitInteraction } from '../core/markerInitInteraction.js';\nimport { popupGetEvents } from '../core/popupGetEvents.js';\nimport { tooltipGetEvents } from '../core/tooltipGetEvents.js';\nimport { popupAdjustPan } from '../core/popupAdjustPan.js';\nimport { popupUpdatePosition } from '../core/popupUpdatePosition.js';\nimport { tooltipSetPosition } from '../core/tooltipSetPosition.js';\nimport { gridlayerGetEvents } from '../core/gridlayerGetEvents.js';\nimport { gridlayerGetTiledPixelBounds } from '../core/gridlayerGetTiledPixelBounds.js';\n\nmapMethods.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Map.prototype));\n\nL.Map.mergeOptions({\n rotate: true, bearing: 0, pitch: 0, maxPitch: 85, pitchMaxDistance: 3,\n rotateControl: true, shiftKeyRotate: true, pitchDrag: true,\n touchRotate: false, touchPitch: false, compassBearing: false,\n});\n\n// Ground coordinates only: the GPU camera handles elevated geometry, never CSS transforms.\n\nL.Map.include({\n layerPointToContainerPoint: mapLayerPointToContainerPoint,\n containerPointToLayerPoint: mapContainerPointToLayerPoint,\n _getCenterLayerPoint: mapGetCenterLayerPoint,\n panBy: mapPanBy,\n setZoomAround: mapSetZoomAround,\n panInside: mapPanInside,\n _limitCenter: mapLimitCenter,\n _limitOffset: mapLimitOffset,\n _getBoundsCenterZoom: mapGetBoundsCenterZoom,\n getBoundsZoom: mapGetBoundsZoom,\n _tryAnimatedPan: mapTryAnimatedPan,\n getBounds: mapGetBounds,\n});\n\nL.Map.addInitHook(initializeCameraMap);\n\nmarkerMethods.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Marker.prototype));\nL.Marker.mergeOptions({ rotation: 0, rotateWithView: false, keepUpright: false, scale: 1 });\nL.Marker.include({\n setIcon: markerSetIcon,\n getEvents: markerGetEvents,\n _setPos: markerSetPos,\n _updateZIndex: markerUpdateZIndex,\n _initInteraction: markerInitInteraction,\n});\n\n// Keep Leaflet's focusable marker and its drag events; only translate its screen position back to ground.\n\npopupEvents.value = L.Popup.prototype.getEvents;\nL.Popup.include({\n getEvents: popupGetEvents,\n});\ntooltipEvents.value = L.Tooltip.prototype.getEvents;\nL.Tooltip.include({\n getEvents: tooltipGetEvents,\n});\npopupPosition.value = L.Popup.prototype._updatePosition;\npopupPan.value = L.Popup.prototype._adjustPan;\nL.Popup.include({\n _adjustPan: popupAdjustPan,\n _updatePosition: popupUpdatePosition,\n});\ntooltipPosition.value = L.Tooltip.prototype._setPosition;\nL.Tooltip.include({\n _setPosition: tooltipSetPosition,\n});\n\ntiledBounds.value = L.GridLayer.prototype._getTiledPixelBounds;\ngridEvents.value = L.GridLayer.prototype.getEvents;\nL.GridLayer.include({\n getEvents: gridlayerGetEvents,\n _getTiledPixelBounds: gridlayerGetTiledPixelBounds,\n});\n", "export const mapMethods = { value: undefined };\n", "export const markerMethods = { value: undefined };\n", "export const popupEvents = { value: undefined };\n", "export const tooltipEvents = { value: undefined };\n", "export const popupPosition = { value: undefined };\n", "export const popupPan = { value: undefined };\n", "export const tooltipPosition = { value: undefined };\n", "export const tiledBounds = { value: undefined };\n", "export const gridEvents = { value: undefined };\n", "export const sceneByLayer = new WeakMap();\n", "import { L } from '../globals/L.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { nativeMethodHandlers } from '../globals/nativeMethodHandlers.js';\nimport { nativeRenderByLayer } from '../globals/nativeRenderByLayer.js';\n\nimport { createLayer } from '../scene/createLayer.js';\n\n\nimport { createMesh } from '../rendering/createMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { nativeGeometry } from '../geometry/nativeGeometry.js';\nimport { nativeEvents } from './nativeEvents.js';\nimport { removeNativeEvents } from './removeNativeEvents.js';\nimport { parseColor } from '../utils/parseColor.js';\nimport { update } from '../scene/update.js';\n\nimport { current } from './current.js';\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\nimport { refreshNativeEvent } from './refreshNativeEvent.js';\nimport { reorderNativeLayer } from './reorderNativeLayer.js';\nimport { nativeSetLatLng } from './nativeSetLatLng.js';\nimport { nativeSetLatLngs } from './nativeSetLatLngs.js';\nimport { nativeAddLatLng } from './nativeAddLatLng.js';\nimport { nativeSetRadius } from './nativeSetRadius.js';\nimport { nativeSetStyle } from './nativeSetStyle.js';\nimport { nativeRedraw } from './nativeRedraw.js';\nimport { nativeSetIcon } from './nativeSetIcon.js';\nimport { nativeSetUrl } from './nativeSetUrl.js';\nimport { nativeSetBounds } from './nativeSetBounds.js';\nimport { nativeSetOpacity } from './nativeSetOpacity.js';\nimport { nativeSetZIndex } from './nativeSetZIndex.js';\nimport { nativeSetZIndexOffset } from './nativeSetZIndexOffset.js';\nimport { nativeBringToFront } from './nativeBringToFront.js';\nimport { nativeBringToBack } from './nativeBringToBack.js';\nimport { disposeNativeLayer } from './disposeNativeLayer.js';\nimport { resolveNativeReady } from './resolveNativeReady.js';\nimport { rejectNativeReady } from './rejectNativeReady.js';\nimport { forwardNativeError } from './forwardNativeError.js';\nimport { updateNativeLayerView } from './updateNativeLayerView.js';\nimport { synchronizeNativeLayer } from './synchronizeNativeLayer.js';\nimport { beforeNativeRender } from './beforeNativeRender.js';\n\n/** Render from coordinates and detached raster sources; only accessible marker controls remain DOM. */\nexport async function nativeLayer(state) {\n const { source, map } = state;\n const backend = state.backend = createLayer(/* alloc */ {\n source: /* alloc */ { type: '3d' },\n });\n state.meshes = /* alloc */ new Map();\n state.textures = /* alloc */ new Map();\n state.methods = /* alloc */ new Map();\n state.originalMethods = /* alloc */ new Map();\n state.images = /* alloc */ new Set();\n cameraByMap.get(map)._nativeGPUOrder ||= 0;\n cameraByMap.get(map)._nativeGPUBack ||= 0;\n state.dirty = true;\n state.viewDirty = true;\n state.failed = false;\n state.order = ++cameraByMap.get(map)._nativeGPUOrder;\n state.marker = source instanceof L.Marker;\n state.paneOrder = Number(getComputedStyle(source.getPane()).zIndex) || 0;\n state.disposed = false;\n const currentEvents = 'load tileload tileunload move drag';\n source.on(currentEvents, refreshNativeEvent, state);\n map.on('zoomend', refreshNativeEvent, state);\n if (state.marker) map.on('move zoom rotate pitch resize viewreset', updateNativeLayerView, state);\n nativeEvents(state);\n let name, own, original;\n for (name in nativeMethodHandlers) {\n if (typeof source[name] !== 'function') continue;\n own = Object.getOwnPropertyDescriptor(source, name), original = source[name];\n state.methods.set(name, /* alloc */ { own, original });\n state.originalMethods.set(name, original);\n source[name] = nativeMethodHandlers[name];\n }\n const ready = state.ready = Promise.withResolvers();\n backend.once('ready', resolveNativeReady, state);\n backend.once('error', rejectNativeReady, state);\n backend.on('error', forwardNativeError, state);\n refreshNativeLayer(state);\n backend.addTo(map);\n try {\n await ready.promise;\n } catch (error) {\n disposeNativeLayer.call(state);\n throw error;\n }\n if (!current(state)) return source;\n\n nativeRenderByLayer.set(backend, state);\n try {\n synchronizeNativeLayer(state);\n } catch (error) {\n disposeNativeLayer.call(state);\n throw error;\n }\n update(state.backend);\n return source;\n}\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function nativeLayerMethod(name, source, args) {\n const state = sceneByLayer.get(source)._nativeGPU, original = state.originalMethods.get(name);\n const result = original.apply(source, args);\n let layer, zIndex;\n if ((name === 'bringToFront' || name === 'bringToBack') && source instanceof L.GridLayer) {\n let extreme = name === 'bringToFront' ? -Infinity : Infinity;\n for (layer of Object.values(state.map._layers)) {\n if (layer === source || !(layer instanceof L.GridLayer) || layer.getPane() !== source.getPane()) continue;\n zIndex = layer.options.zIndex || 0;\n extreme = name === 'bringToFront' ? Math.max(extreme, zIndex) : Math.min(extreme, zIndex);\n }\n const edge = name === 'bringToFront' ? extreme + 1 : extreme - 1;\n if (Number.isFinite(edge)) source.setZIndex(edge);\n }\n if (name === 'bringToFront') state.order = ++cameraByMap.get(state.map)._nativeGPUOrder;\n if (name === 'bringToBack') state.order = --cameraByMap.get(state.map)._nativeGPUBack;\n refreshNativeLayer(state);\n return result;\n}\n", "export const imageStates = new WeakMap();\n", "import { imageStates } from '../globals/imageStates.js';\n\n\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function nativeImageRefresh(event) {\n const states = imageStates.get(event.currentTarget);\n if (!states) return;\n let state;\n for (state of states) refreshNativeLayer(state);\n}\n", "import { imageStates } from '../globals/imageStates.js';\n\n\nexport function nativeImageError(event) {\n const states = imageStates.get(event.currentTarget);\n if (!states) return;\n let state;\n for (state of states) {\n state.source.fire('error', /* alloc */ {\n error: /* alloc */ new Error('Unable to load native layer image'),\n });\n }\n}\n", "import { imageStates } from '../globals/imageStates.js';\n\n\nexport function removeImageState(image, state) {\r\n const states = imageStates.get(image);\r\n if (!states) return;\r\n states.delete(state);\r\n if (!states.size) imageStates.delete(image);\r\n}\n", "import { imageStates } from '../globals/imageStates.js';\n\r\n\r\nexport function addImageState(image, state) {\r\n let states = imageStates.get(image);\r\n if (!states) imageStates.set(image, states = /* alloc */ new Set());\r\n states.add(state);\r\n}\r\n", "export const pendingUpdates = new Set();\n", "export const frameCommands = [null];\n", "export const nativeRenderByLayer = new WeakMap();\n", "import { frameCommands } from '../globals/frameCommands.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { nativeRenderByLayer } from '../globals/nativeRenderByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { synchronizeZoomView } from './synchronizeZoomView.js';\nimport { resizeRenderer } from './resizeRenderer.js';\nimport { updateMapCamera } from './updateMapCamera.js';\nimport { collectFrameMeshes } from './collectFrameMeshes.js';\nimport { updateRoofRaster } from './updateRoofRaster.js';\nimport { prepareFrameMeshes } from './prepareFrameMeshes.js';\nimport { prepareFrameUniforms } from './prepareFrameUniforms.js';\nimport { drawSceneMeshes } from './drawSceneMeshes.js';\nimport { updateWorldMatrix } from \"../scene/updateWorldMatrix.js\";\nimport { renderSunlight } from '../shadows/renderSunlight.js';\nimport { cancelUpdate } from '../scene/cancelUpdate.js';\nimport { update } from '../scene/update.js';\nimport { pruneRasterTiles } from '../raster/pruneRasterTiles.js';\nimport { beforeNativeRender } from '../core/beforeNativeRender.js';\n\n/**\n * Rendering owner: CSS pixels -> scene metres -> perspective camera.\n * Lights and transparent sort centers are converted into the current camera space.\n * Without raster tiles, logical map projection supplies the same static alignment.\n */\n\nexport function render(backend) {\n cancelUpdate(backend);\n if (sceneByLayer.get(backend)._shared !== backend || !sceneByLayer.get(backend).renderer) return;\n const map = backend._map;\n const now = performance.now();\n const size = map.getSize();\n if (!size.x || !size.y) return;\n synchronizeZoomView(backend, now);\n resizeRenderer(backend, size);\n updateMapCamera(backend, size);\n updateWorldMatrix(sceneByLayer.get(backend).scene);\n let sceneChanged = false;\n let layer, native;\n for (layer of sceneByLayer.get(backend)._layers) {\n native = nativeRenderByLayer.get(layer);\n if (!native) continue;\n beforeNativeRender(native);\n sceneChanged = true;\n }\n const sunlight = cameraByMap.get(map)._sunlight;\n collectFrameMeshes(backend, sunlight, sceneChanged);\n const shadowMeshes = sceneByLayer.get(backend)._shadowMeshes;\n const renderer = sceneByLayer.get(backend).renderer;\n const rasters = updateRoofRaster(backend, now);\n const meshes = renderer.frameMeshes ||= /* alloc */ [];\n meshes.length = 0;\n let appearing = prepareFrameMeshes(backend, rasters, now, meshes);\n const encoder = renderer.device.createCommandEncoder();\n prepareFrameUniforms(backend, meshes, shadowMeshes, sunlight);\n renderSunlight(backend, encoder, shadowMeshes, sunlight);\n drawSceneMeshes(backend, encoder, meshes);\n renderer.device.queue.writeBuffer(renderer.uniformBuffer, 0, renderer.uniformData, 0, renderer.uniformSlot * 64);\n renderer.device.queue.submit((\n frameCommands[0] = encoder.finish(),\n frameCommands\n ));\n frameCommands[0] = null;\n for (layer of sceneByLayer.get(backend)._layers) {\n if (sceneByLayer.get(layer)._wantedRasterTiles) appearing = pruneRasterTiles(layer) || appearing;\n }\n if (map._animatingZoom || appearing) update(backend);\n}\n", "export const meshStack = {\n subtree: true\n};\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { cameraByMap } from '../globals/cameraByMap.js';\r\nimport { mapUpdateCameraOverlays } from '../camera/mapUpdateCameraOverlays.js';\r\n\r\nexport function updateZoomCamera(backend, now) {\r\n const map = backend._map;\r\n const view = sceneByLayer.get(backend)._zoomView;\r\n let proxy, animation;\r\n for (animation of sceneByLayer.get(backend)._zoomTransitions.keys()) {\r\n if (animation.effect.target === map._proxy) { proxy = animation; break; }\r\n }\r\n const progress = proxy?.effect.getComputedTiming().progress ?? Math.min(1, (now - view.start) / 250);\r\n const targetScale = map.getZoomScale(view.targetZoom, view.zoom), scale = 1 + (targetScale - 1) * progress;\r\n const from = map.project(view.from, view.zoom), to = map.project(view.to, view.zoom);\r\n cameraByMap.get(map)._cameraView = /* alloc */ { zoom: map.getScaleZoom(scale, view.zoom),\r\n center: map.unproject(from.add(to.subtract(from).multiplyBy(targetScale * progress / scale)), view.zoom) };\r\n mapUpdateCameraOverlays(map);\r\n}\r\n", "import { L } from '../globals/L.js';\nexport function mapUpdateCameraOverlays(map) {\n let layer;\n for (layer of Object.values(map._layers)) {\n if (layer instanceof L.Marker) layer.update();\n else if (layer instanceof L.Popup || layer instanceof L.Tooltip) layer._updatePosition();\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { meshStack } from '../globals/meshStack.js';\nimport { updateZoomCamera } from './updateZoomCamera.js';\n\nexport function synchronizeZoomView(backend, now) {\n const map = backend._map;\n let animation, time, start;\n if (map._animatingZoom) {\n sceneByLayer.get(backend)._zoomTransitions ||= /* alloc */ new Map();\n for (animation of map.getContainer().getAnimations(meshStack)) {\n if (!(animation instanceof CSSTransition) || animation.transitionProperty !== 'transform' ||\n !animation.effect.target.classList.contains('leaflet-zoom-animated') ||\n sceneByLayer.get(backend)._zoomTransitions.has(animation)) {\n continue;\n }\n time = animation.currentTime || 0;\n animation.pause();\n sceneByLayer.get(backend)._zoomTransitions.set(animation, /* alloc */ { start: now, time });\n }\n // Freeze CSS between rendered frames: the compositor must not outrun the canvas.\n for ([animation, { start, time }] of sceneByLayer.get(backend)._zoomTransitions) {\n animation.currentTime = Math.min(animation.effect.getComputedTiming().endTime, time + now - start);\n }\n if (sceneByLayer.get(backend)._zoomView) updateZoomCamera(backend, now);\n }\n}\n", "export const depthTexture = {\n size: [null, null],\n format: 'depth24plus',\n usage: null\n};\n", "export async function destroyAfterSubmission(layer, texture, submitted) {\n try {\n await submitted;\n } catch (error) {\n layer.fire('error', /* alloc */ { error });\n }\n texture.destroy();\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { destroyAfterSubmission } from './destroyAfterSubmission.js';\n\nexport function destroyTexture(layer, texture) {\n destroyAfterSubmission(layer, texture, sceneByLayer.get(layer).renderer.device.queue.onSubmittedWorkDone());\n}\n", "import { depthTexture as sharedDepthTexture } from '../globals/depthTexture.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTexture } from './destroyTexture.js';\n\nexport function resizeRenderer(backend, size) {\n if (!sceneByLayer.get(backend)._size || !sceneByLayer.get(backend)._size.equals(size)) {\n sceneByLayer.get(backend).renderer.width = size.x;\n sceneByLayer.get(backend).renderer.height = size.y;\n sceneByLayer.get(backend).renderer.canvas.width = Math.round(size.x * sceneByLayer.get(backend).renderer.dpr);\n sceneByLayer.get(backend).renderer.canvas.height = Math.round(size.y * sceneByLayer.get(backend).renderer.dpr);\n sceneByLayer.get(backend).renderer.canvas.style.width = `${size.x}px`;\n sceneByLayer.get(backend).renderer.canvas.style.height = `${size.y}px`;\n if (sceneByLayer.get(backend).renderer.depthTexture) destroyTexture(backend, sceneByLayer.get(backend).renderer.depthTexture);\n sceneByLayer.get(backend).renderer.depthTexture = sceneByLayer.get(backend).renderer.device.createTexture((\n sharedDepthTexture.size[0] = sceneByLayer.get(backend).renderer.canvas.width,\n sharedDepthTexture.size[1] = sceneByLayer.get(backend).renderer.canvas.height,\n sharedDepthTexture.usage = GPUTextureUsage.RENDER_ATTACHMENT,\n sharedDepthTexture\n ));\n sceneByLayer.get(backend)._size = size;\n }\n}\n", "import { radians } from '../globals/radians.js';\nimport { cameraFov } from '../globals/cameraFov.js';\nimport { earthCirc } from '../globals/earthCirc.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { mapMethods } from '../globals/mapMethods.js';\nimport { walkByMap } from '../globals/walkByMap.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nimport { updateCamera } from \"../scene/updateCamera.js\";\nimport { getElevation } from \"../terrain/getElevation.js\";\n\nimport { animationPoint } from '../camera/animationPoint.js';\n\nexport function updateMapCamera(backend, size) {\n const map = backend._map;\n // Match the map's perspective, including the intermediate view of an animated zoom.\n const zoom = cameraByMap.get(map)._cameraView?.zoom ?? map.getZoom();\n const pixelsPerMeter = map.options.crs.scale(zoom) / (earthCirc * Math.cos(sceneByLayer.get(backend)._sceneOrigin.lat * radians));\n const origin = animationPoint(map, mapMethods.value.layerPointToContainerPoint.call(map,\n map.project(sceneByLayer.get(backend)._sceneOrigin).subtract(map.getPixelOrigin())));\n const distance = size.y * 1.5 / pixelsPerMeter;\n const targetX = (size.x / 2 - origin.x) / pixelsPerMeter;\n // CSS zoom keeps the logical view's ground plane until zoomend.\n const walker = walkByMap.get(map)?.control?._walk;\n const targetY = ((cameraByMap.get(map)._terrain3D ? getElevation(cameraByMap.get(map)._terrain3D, map.getCenter()): undefined) ?? 0) +\n (walker?.saved ? walker.state.height : 0);\n const targetZ = (size.y / 2 - origin.y) / pixelsPerMeter;\n const pitch = mapGetPitch(map) * radians;\n const bearing = mapGetBearing(map) * radians;\n const camera = sceneByLayer.get(backend).camera;\n camera.fov = cameraFov;\n camera.aspect = size.x / size.y;\n camera.near = Math.max(0.1, distance / 10000);\n camera.far = Math.max(10000, distance * 10);\n camera.position[0] = targetX + Math.sin(bearing) * Math.sin(pitch) * distance;\n camera.position[1] = targetY + Math.cos(pitch) * distance;\n camera.position[2] = targetZ + Math.cos(bearing) * Math.sin(pitch) * distance;\n camera.up[0] = -Math.sin(bearing) * Math.cos(pitch);\n camera.up[1] = Math.sin(pitch);\n camera.up[2] = -Math.cos(bearing) * Math.cos(pitch);\n camera.target[0] = targetX; camera.target[1] = targetY; camera.target[2] = targetZ;\n // Refresh the camera view, projection and combined projection-view matrices.\n updateCamera(camera);\n}\n", "import { degrees } from './degrees.js';\r\n\r\nexport const cameraFov = 2 * Math.atan(1 / 3) * degrees;\r\n", "export const earthCirc = 2 * Math.PI * 6378137;\r\n", "export const walkByMap = new WeakMap();\r\n", "export const halfRadians = Math.PI / 360;\r\n", "import { halfRadians } from '../globals/halfRadians.js';\n/** Orthonormal view basis plus perspective matrices, refreshed before projecting/drawing. */\n\nexport function updateCamera(camera) {\n camera.x ||= /* alloc */ [0, 0, 0];\n camera.y ||= /* alloc */ [0, 0, 0];\n camera.z ||= /* alloc */ [0, 0, 0];\n camera.viewTransform ||= /* alloc */ new DOMMatrix();\n camera.projectionTransform ||= /* alloc */ new DOMMatrix();\n camera.projectionViewTransform ||= /* alloc */ new DOMMatrix();\n const { position, target, up, x, y, z, viewMatrix, projectionMatrix, projectionViewMatrix } = camera;\n let i, value;\n z[0] = position[0] - target[0], z[1] = position[1] - target[1], z[2] = position[2] - target[2];\n const zLength = Math.hypot(z[0], z[1], z[2]) || 1;\n z[0] /= zLength, z[1] /= zLength, z[2] /= zLength;\n x[0] = up[1] * z[2] - up[2] * z[1];\n x[1] = up[2] * z[0] - up[0] * z[2];\n x[2] = up[0] * z[1] - up[1] * z[0];\n const xLength = Math.hypot(x[0], x[1], x[2]) || 1;\n x[0] /= xLength, x[1] /= xLength, x[2] /= xLength;\n y[0] = z[1] * x[2] - z[2] * x[1];\n y[1] = z[2] * x[0] - z[0] * x[2];\n y[2] = z[0] * x[1] - z[1] * x[0];\n const viewTransform = camera.viewTransform;\n viewTransform.m11 = x[0], viewTransform.m12 = x[1], viewTransform.m13 = x[2], viewTransform.m14 = 0;\n viewTransform.m21 = y[0], viewTransform.m22 = y[1], viewTransform.m23 = y[2], viewTransform.m24 = 0;\n viewTransform.m31 = z[0], viewTransform.m32 = z[1], viewTransform.m33 = z[2], viewTransform.m34 = 0;\n viewTransform.m41 = position[0], viewTransform.m42 = position[1], viewTransform.m43 = position[2], viewTransform.m44 = 1;\n viewTransform.invertSelf();\n viewMatrix[0] = viewTransform.m11, viewMatrix[1] = viewTransform.m12, viewMatrix[2] = viewTransform.m13, viewMatrix[3] = viewTransform.m14;\n viewMatrix[4] = viewTransform.m21, viewMatrix[5] = viewTransform.m22, viewMatrix[6] = viewTransform.m23, viewMatrix[7] = viewTransform.m24;\n viewMatrix[8] = viewTransform.m31, viewMatrix[9] = viewTransform.m32, viewMatrix[10] = viewTransform.m33, viewMatrix[11] = viewTransform.m34;\n viewMatrix[12] = viewTransform.m41, viewMatrix[13] = viewTransform.m42, viewMatrix[14] = viewTransform.m43, viewMatrix[15] = viewTransform.m44;\n for (value of viewMatrix) {\n if (!Number.isFinite(value)) throw /* alloc */ new Error('Singular 3D transform');\n }\n const f = 1 / Math.tan(camera.fov * halfRadians), n = camera.near, r = camera.far;\n projectionMatrix[0] = f / camera.aspect, projectionMatrix[1] = 0, projectionMatrix[2] = 0, projectionMatrix[3] = 0;\n projectionMatrix[4] = 0, projectionMatrix[5] = f, projectionMatrix[6] = 0, projectionMatrix[7] = 0;\n projectionMatrix[8] = 0, projectionMatrix[9] = 0, projectionMatrix[10] = r / (n - r), projectionMatrix[11] = -1;\n projectionMatrix[12] = 0, projectionMatrix[13] = 0, projectionMatrix[14] = r * n / (n - r), projectionMatrix[15] = 0;\n const projectionTransform = camera.projectionTransform;\n projectionTransform.m11 = projectionMatrix[0], projectionTransform.m12 = projectionMatrix[1], projectionTransform.m13 = projectionMatrix[2], projectionTransform.m14 = projectionMatrix[3];\n projectionTransform.m21 = projectionMatrix[4], projectionTransform.m22 = projectionMatrix[5], projectionTransform.m23 = projectionMatrix[6], projectionTransform.m24 = projectionMatrix[7];\n projectionTransform.m31 = projectionMatrix[8], projectionTransform.m32 = projectionMatrix[9], projectionTransform.m33 = projectionMatrix[10], projectionTransform.m34 = projectionMatrix[11];\n projectionTransform.m41 = projectionMatrix[12], projectionTransform.m42 = projectionMatrix[13], projectionTransform.m43 = projectionMatrix[14], projectionTransform.m44 = projectionMatrix[15];\n const combined = camera.projectionViewTransform;\n combined.m11 = projectionTransform.m11, combined.m12 = projectionTransform.m12, combined.m13 = projectionTransform.m13, combined.m14 = projectionTransform.m14;\n combined.m21 = projectionTransform.m21, combined.m22 = projectionTransform.m22, combined.m23 = projectionTransform.m23, combined.m24 = projectionTransform.m24;\n combined.m31 = projectionTransform.m31, combined.m32 = projectionTransform.m32, combined.m33 = projectionTransform.m33, combined.m34 = projectionTransform.m34;\n combined.m41 = projectionTransform.m41, combined.m42 = projectionTransform.m42, combined.m43 = projectionTransform.m43, combined.m44 = projectionTransform.m44;\n combined.multiplySelf(viewTransform);\n projectionViewMatrix[0] = combined.m11, projectionViewMatrix[1] = combined.m12, projectionViewMatrix[2] = combined.m13, projectionViewMatrix[3] = combined.m14;\n projectionViewMatrix[4] = combined.m21, projectionViewMatrix[5] = combined.m22, projectionViewMatrix[6] = combined.m23, projectionViewMatrix[7] = combined.m24;\n projectionViewMatrix[8] = combined.m31, projectionViewMatrix[9] = combined.m32, projectionViewMatrix[10] = combined.m33, projectionViewMatrix[11] = combined.m34;\n projectionViewMatrix[12] = combined.m41, projectionViewMatrix[13] = combined.m42, projectionViewMatrix[14] = combined.m43, projectionViewMatrix[15] = combined.m44;\n}\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { bridgeElevation } from '../geometry/bridgeElevation.js';\nimport { terrainElevation } from './terrainElevation.js';\n\n/** @param {L.LatLng|L.Point} location LatLng, or a pixel point at the terrain zoom. */\n\nexport function getElevation(backend, location) {\n if (!backend._map || !sceneByLayer.get(backend)._terrainReady) return null;\n const point = location instanceof L.Point ? location : backend._map.project(location, sceneByLayer.get(backend)._terrainZoom);\n return bridgeElevation(point, sceneByLayer.get(backend)._bridges) ?? terrainElevation(point, sceneByLayer.get(backend)._terrainTiles);\n}\n", "/** Height inside a bridge deck, or null outside its triangles. */\nexport function bridgeElevation(point, bridges) {\n // Bridges bucketed by 64 DEM pixels.\n const bucket = bridges?.get(`${Math.floor(point.x / 64)}/${Math.floor(point.y / 64)}`);\n if (!bucket) return null;\n let bridge, a, b, c, d, u, v;\n for (bridge of bucket) {\n if (point.x < bridge.min[0] || point.x > bridge.max[0] || point.y < bridge.min[1] || point.y > bridge.max[1]) {\n continue;\n }\n for ([a, b, c] of bridge.triangles) {\n d = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n u = ((b[1] - c[1]) * (point.x - c[0]) + (c[0] - b[0]) * (point.y - c[1])) / d;\n v = ((c[1] - a[1]) * (point.x - c[0]) + (a[0] - c[0]) * (point.y - c[1])) / d;\n if (u >= 0 && v >= 0 && u + v <= 1) {\n return u * a[2] + v * b[2] + (1 - u - v) * c[2];\n }\n }\n }\n return null;\n}\n", "export function sample(tiles, px, py) {\r\n const tileX = Math.floor(px / 256), tileY = Math.floor(py / 256);\r\n const tile = tiles.get(`${tileX}/${tileY}`);\r\n if (!tile) return null;\r\n const elevation = tile[(py - tileY * 256) * 256 + px - tileX * 256];\r\n return Number.isFinite(elevation) && elevation > -1000 ? elevation : null;\r\n}\r\n", "import { sample } from './sample.js';\n\n/** Bilinear DEM sampling, with the original first-valid-neighbour no-data rule. */\n\nexport function terrainElevation(point, tiles) {\n const x = point.x - 0.5, y = point.y - 0.5;\n const x0 = Math.floor(x), y0 = Math.floor(y);\n const fx = x - x0, fy = y - y0;\n const a = sample(tiles, x0, y0), b = sample(tiles, x0 + 1, y0);\n const c = sample(tiles, x0, y0 + 1), d = sample(tiles, x0 + 1, y0 + 1);\n if (!Number.isFinite(a) || !Number.isFinite(b) || !Number.isFinite(c) || !Number.isFinite(d)) {\n return Number.isFinite(a) ? a : Number.isFinite(b) ? b : Number.isFinite(c) ? c : Number.isFinite(d) ? d : null;\n }\n return (a * (1 - fx) + b * fx) * (1 - fy) + (c * (1 - fx) + d * fx) * fy;\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nexport function animationPoint(map, point, inverse = false) {\r\n const view = cameraByMap.get(map)._cameraView;\r\n if (!view) return point;\r\n const half = map.getSize().divideBy(2), scale = map.getZoomScale(view.zoom);\r\n const shift = map.project(map.getCenter(), view.zoom).subtract(map.project(view.center, view.zoom));\r\n return inverse ? point.subtract(half).subtract(shift).divideBy(scale).add(half) :\r\n point.subtract(half).multiplyBy(scale).add(shift).add(half);\r\n}\n", "export function worldMatrixChanged(node, changed) {\r\n let i, value;\r\n if (node.matrix) {\r\n const state = node._matrixState ||= /* alloc */ new Float64Array(16);\r\n for (i = 0; i < 16; i++) {\r\n if (state[i] !== node.matrix[i]) changed = true;\r\n state[i] = node.matrix[i];\r\n }\r\n } else {\r\n const state = node._transformState ||= /* alloc */ new Float64Array(9);\r\n for (i = 0; i < 9; i++) {\r\n value = i < 3 ? node.position[i] : i < 6 ? node.rotation[i - 3] : node.scale[i - 6];\r\n if (state[i] !== value) changed = true;\r\n state[i] = value;\r\n }\r\n }\r\n return changed;\r\n}\r\n", "import { degrees } from '../globals/degrees.js';\r\n\r\nexport function composeLocalTransform(node) {\r\n const matrix = node._localTransform ||= /* alloc */ new DOMMatrix();\r\n matrix.m11 = 1, matrix.m12 = 0, matrix.m13 = 0, matrix.m14 = 0;\r\n matrix.m21 = 0, matrix.m22 = 1, matrix.m23 = 0, matrix.m24 = 0;\r\n matrix.m31 = 0, matrix.m32 = 0, matrix.m33 = 1, matrix.m34 = 0;\r\n matrix.m41 = 0, matrix.m42 = 0, matrix.m43 = 0, matrix.m44 = 1;\r\n matrix.translateSelf(node.position[0], node.position[1], node.position[2]);\r\n // Node rotations use YXZ, as did the previous renderer.\r\n matrix.rotateAxisAngleSelf(0, 1, 0, node.rotation[1] * degrees);\r\n matrix.rotateAxisAngleSelf(1, 0, 0, node.rotation[0] * degrees);\r\n matrix.rotateAxisAngleSelf(0, 0, 1, node.rotation[2] * degrees);\r\n matrix.scaleSelf(node.scale[0], node.scale[1], node.scale[2]);\r\n return matrix;\r\n}\r\n", "import { worldMatrixChanged } from './worldMatrixChanged.js';\nimport { composeLocalTransform } from './composeLocalTransform.js';\n\n/** Compose parent*local matrices; a node.matrix overrides its position/rotation/scale. */\n\nexport function updateWorldMatrix(node) {\n const parent = node.parent;\n const parentVersion = parent?._worldMatrixVersion || 0;\n const matrixMode = Boolean(node.matrix);\n let changed = node._worldParent !== parent || node._parentWorldVersion !== parentVersion ||\n node._worldMatrixMode !== matrixMode;\n let child;\n changed = worldMatrixChanged(node, changed);\n if (!changed) {\n for (child of node.children) updateWorldMatrix(child);\n return;\n }\n let local, world;\n if (node.matrix) local = node.matrix;\n else local = composeLocalTransform(node);\n world = node._worldTransform ||= /* alloc */ new DOMMatrix();\n if (local instanceof DOMMatrix) {\n world.m11 = local.m11, world.m12 = local.m12, world.m13 = local.m13, world.m14 = local.m14;\n world.m21 = local.m21, world.m22 = local.m22, world.m23 = local.m23, world.m24 = local.m24;\n world.m31 = local.m31, world.m32 = local.m32, world.m33 = local.m33, world.m34 = local.m34;\n world.m41 = local.m41, world.m42 = local.m42, world.m43 = local.m43, world.m44 = local.m44;\n } else {\n world.m11 = local[0], world.m12 = local[1], world.m13 = local[2], world.m14 = local[3];\n world.m21 = local[4], world.m22 = local[5], world.m23 = local[6], world.m24 = local[7];\n world.m31 = local[8], world.m32 = local[9], world.m33 = local[10], world.m34 = local[11];\n world.m41 = local[12], world.m42 = local[13], world.m43 = local[14], world.m44 = local[15];\n }\n if (parent) world.preMultiplySelf(parent._worldTransform);\n node.worldMatrix[0] = world.m11, node.worldMatrix[1] = world.m12, node.worldMatrix[2] = world.m13, node.worldMatrix[3] = world.m14;\n node.worldMatrix[4] = world.m21, node.worldMatrix[5] = world.m22, node.worldMatrix[6] = world.m23, node.worldMatrix[7] = world.m24;\n node.worldMatrix[8] = world.m31, node.worldMatrix[9] = world.m32, node.worldMatrix[10] = world.m33, node.worldMatrix[11] = world.m34;\n node.worldMatrix[12] = world.m41, node.worldMatrix[13] = world.m42, node.worldMatrix[14] = world.m43, node.worldMatrix[15] = world.m44;\n node._worldParent = parent;\n node._parentWorldVersion = parentVersion;\n node._worldMatrixMode = matrixMode;\n node._worldMatrixVersion = (node._worldMatrixVersion || 0) + 1;\n for (child of node.children) updateWorldMatrix(child);\n}\n", "/** Cache local AABB and center for ray picking and transparent mesh sorting. */\n\nexport function computeBounds(geometry) {\n const min = /* alloc */ [Infinity, Infinity, Infinity];\n const max = /* alloc */ [-Infinity, -Infinity, -Infinity];\n const data = geometry.attributes.position.data;\n let i;\n for (i = 0; i < data.length; i++) {\n min[i % 3] = Math.min(min[i % 3], data[i]);\n max[i % 3] = Math.max(max[i % 3], data[i]);\n }\n const instances = geometry.attributes.instanceOffset;\n if (instances) {\n let axis, offset, low, high;\n for (axis = 0; axis < 3; axis++) {\n low = Infinity;\n high = -Infinity;\n for (offset = axis; offset < instances.data.length; offset += instances.size) {\n low = Math.min(low, instances.data[offset]);\n high = Math.max(high, instances.data[offset]);\n }\n min[axis] = Math.fround(min[axis] + low);\n max[axis] = Math.fround(max[axis] + high);\n }\n }\n const center = /* alloc */ [\n (min[0] + max[0]) / 2,\n (min[1] + max[1]) / 2,\n (min[2] + max[2]) / 2,\n ];\n let radius = instances ? Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) / 2 : 0;\n for (i = 0; !instances && i < data.length; i += 3) {\n radius = Math.max(radius, Math.hypot(\n data[i] - center[0], data[i + 1] - center[1], data[i + 2] - center[2]\n ));\n }\n geometry.bounds = /* alloc */ { min, max, center, radius };\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\r\n\r\nexport function collectVisibleMesh(mesh, projection, frustum, frustumLengths, candidates) {\r\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\r\n const bounds = mesh.geometry.bounds;\r\n const world = mesh.worldMatrix;\r\n const center = bounds.center;\r\n const x = world[0] * center[0] + world[4] * center[1] + world[8] * center[2] + world[12];\r\n const y = world[1] * center[0] + world[5] * center[1] + world[9] * center[2] + world[13];\r\n const z = world[2] * center[0] + world[6] * center[1] + world[10] * center[2] + world[14];\r\n const clipZ = projection[2] * x + projection[6] * y + projection[10] * z + projection[14];\r\n const clipW = projection[3] * x + projection[7] * y + projection[11] * z + projection[15];\r\n mesh._sortDepth = clipZ / clipW;\r\n const radius = bounds.radius * Math.max(\r\n Math.hypot(world[0], world[1], world[2]),\r\n Math.hypot(world[4], world[5], world[6]),\r\n Math.hypot(world[8], world[9], world[10])\r\n );\r\n mesh._visibleInFrame =\r\n frustum[0][0] * x + frustum[0][1] * y + frustum[0][2] * z + frustum[0][3] >= -radius * frustumLengths[0] &&\r\n frustum[1][0] * x + frustum[1][1] * y + frustum[1][2] * z + frustum[1][3] >= -radius * frustumLengths[1] &&\r\n frustum[2][0] * x + frustum[2][1] * y + frustum[2][2] * z + frustum[2][3] >= -radius * frustumLengths[2] &&\r\n frustum[3][0] * x + frustum[3][1] * y + frustum[3][2] * z + frustum[3][3] >= -radius * frustumLengths[3] &&\r\n frustum[4][0] * x + frustum[4][1] * y + frustum[4][2] * z + frustum[4][3] >= -radius * frustumLengths[4] &&\r\n frustum[5][0] * x + frustum[5][1] * y + frustum[5][2] * z + frustum[5][3] >= -radius * frustumLengths[5];\r\n if (mesh._visibleInFrame) candidates.push(mesh);\r\n}\r\n", "import { collectVisibleMesh } from './collectVisibleMesh.js';\n\nexport function collectMeshes(mesh, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes) {\n if (!mesh.visible) return;\n if (mesh.geometry) {\n if (sunlight?.altitude >= 3 && !mesh.tile && mesh._appearance !== 0 &&\n !mesh.program.nightLight && mesh.program.depthTest !== false) shadowMeshes.push(mesh);\n collectVisibleMesh(mesh, projection, frustum, frustumLengths, candidates);\n }\n let child;\n for (child of mesh.children) {\n collectMeshes(child, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { updateWorldMatrix } from \"../scene/updateWorldMatrix.js\";\nimport { collectMeshes } from './collectMeshes.js';\n\nexport function collectFrameMeshes(backend, sunlight, sceneChanged) {\n const camera = sceneByLayer.get(backend).camera;\n const projection = camera.projectionViewMatrix;\n const renderer = sceneByLayer.get(backend).renderer;\n const frustum = renderer.frustum ||= /* alloc */ [\n /* alloc */ new Float64Array(4),\n /* alloc */ new Float64Array(4),\n /* alloc */ new Float64Array(4),\n /* alloc */ new Float64Array(4),\n /* alloc */ new Float64Array(4),\n /* alloc */ new Float64Array(4),\n ];\n const frustumLengths = renderer.frustumLengths ||= /* alloc */ new Float64Array(6);\n let i, axis, plane, j, offset;\n for (i = 0; i < 6; i++) {\n axis = Math.floor(i / 2);\n plane = frustum[i];\n for (j = 0; j < 4; j++) {\n offset = j * 4;\n plane[j] = i === 4 ? projection[offset + 2]\n : i % 2 ? projection[offset + 3] - projection[offset + axis]\n : projection[offset + 3] + projection[offset + axis];\n }\n frustumLengths[i] = Math.hypot(plane[0], plane[1], plane[2]);\n }\n const candidates = sceneByLayer.get(backend)._visibleMeshes ||= /* alloc */ [];\n candidates.length = 0;\n const shadowMeshes = sceneByLayer.get(backend)._shadowMeshes ||= /* alloc */ [];\n shadowMeshes.length = 0;\n if (sceneChanged) updateWorldMatrix(sceneByLayer.get(backend).scene);\n collectMeshes(sceneByLayer.get(backend).scene, sunlight, projection, frustum, frustumLengths, candidates, shadowMeshes);\n}\n", "import { L } from '../globals/L.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { roofSignatures } from '../globals/roofSignatures.js';\r\nimport { rebuildRoofAtlas } from './rebuildRoofAtlas.js';\r\n\r\nexport function updateRoofAtlas(backend, rasters, now) {\r\n const signatures = roofSignatures;\r\n signatures.length = 0;\r\n let loading = false, layer;\r\n for (layer of rasters) {\r\n signatures.push(`${L.Util.stamp(layer)}:${sceneByLayer.get(layer)._rasterVersion || 0}:${layer.options.opacity}:${layer.options.zIndex}`);\r\n loading ||= Boolean(sceneByLayer.get(layer)._loadingTiles);\r\n }\r\n const signature = signatures.join('|');\r\n signatures.length = 0;\r\n if (!sceneByLayer.get(backend)._roofRaster || sceneByLayer.get(backend)._roofRaster.signature !== signature &&\r\n (!loading || now - sceneByLayer.get(backend)._roofRaster.updatedAt >= 50)) {\r\n rebuildRoofAtlas(backend, rasters, signature, now);\r\n }\r\n}\r\n", "export const roofSignatures = [];\n", "import { radians } from '../globals/radians.js';\nimport { earthCirc } from '../globals/earthCirc.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { roofTiles } from '../globals/roofTiles.js';\nimport { TILE_SIZE } from '../globals/TILE_SIZE.js';\nimport { roofMin } from '../globals/roofMin.js';\nimport { roofSize } from '../globals/roofSize.js';\n\n\nimport { ensureRoofBlit } from './ensureRoofBlit.js';\nimport { composeRoofAtlas } from './composeRoofAtlas.js';\nimport { collectRoofTiles } from './collectRoofTiles.js';\nimport { resizeRoofTexture } from './resizeRoofTexture.js';\n\nexport function rebuildRoofAtlas(backend, rasters, signature, now) {\n const map = backend._map, renderer = sceneByLayer.get(backend).renderer;\n const tiles = roofTiles;\n tiles.length = 0;\n let zoom = collectRoofTiles(rasters, tiles);\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n let coords, tileSize;\n if (!tiles.length) zoom = map.getZoom();\n for ({ tile: { coords } } of tiles) {\n tileSize = TILE_SIZE * map.getZoomScale(zoom, coords.z);\n minX = Math.min(minX, coords.x * tileSize); minY = Math.min(minY, coords.y * tileSize);\n maxX = Math.max(maxX, (coords.x + 1) * tileSize); maxY = Math.max(maxY, (coords.y + 1) * tileSize);\n }\n const origin = map.project(sceneByLayer.get(backend)._sceneOrigin, zoom);\n const min = roofMin, size = roofSize;\n min.x = tiles.length ? minX : origin.x; min.y = tiles.length ? minY : origin.y;\n size.x = tiles.length ? maxX - minX : 1; size.y = tiles.length ? maxY - minY : 1;\n // ponytail: cap at 4096 px; virtual textures if wide views need native detail.\n const scale = Math.min(1, 4096 / Math.max(size.x, size.y));\n const width = Math.max(1, Math.ceil(size.x * scale)), height = Math.max(1, Math.ceil(size.y * scale));\n const pixels = map.options.crs.scale(zoom) / (earthCirc * Math.cos(sceneByLayer.get(backend)._sceneOrigin.lat * radians));\n const roof = /* alloc */ {\n matrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n texture: sceneByLayer.get(backend)._roofRaster?.texture,\n };\n sceneByLayer.get(backend)._roofRaster = roof;\n roof.signature = signature; roof.updatedAt = now;\n roof.matrix[0] = pixels / size.x; roof.matrix[10] = pixels / size.y;\n roof.matrix[12] = (origin.x - min.x) / size.x; roof.matrix[14] = (origin.y - min.y) / size.y;\n resizeRoofTexture(backend, roof, width, height);\n // Compose the atlas on the GPU: re-uploading a large canvas stalls Firefox for hundreds of ms.\n ensureRoofBlit(renderer);\n try {\n composeRoofAtlas(backend, tiles, zoom, min, size, width, height);\n } finally {\n tiles.length = 0;\n }\n}\n", "export const roofTiles = [];\n", "export const roofMin = {\n x: 0,\n y: 0\n};\n", "export const roofSize = {\n x: 1,\n y: 1\n};\n", "export const roofShader = {\n code: /* wgsl */`@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);}`\n};\n", "export const roofPipeline = {\n layout: 'auto',\n vertex: {\n module: null,\n entryPoint: 'vertexMain'\n },\n fragment: {\n module: null,\n entryPoint: 'fragmentMain',\n targets: [{\n format: 'rgba8unorm',\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha',\n operation: 'add'\n },\n alpha: {\n srcFactor: 'one',\n dstFactor: 'one-minus-src-alpha',\n operation: 'add'\n }\n }\n }]\n },\n primitive: {\n topology: 'triangle-strip'\n }\n};\n", "export const roofBlitSampler = {\n magFilter: 'linear',\n minFilter: 'linear'\n};\n", "import { roofShader } from '../globals/roofShader.js';\nimport { roofPipeline } from '../globals/roofPipeline.js';\nimport { roofBlitSampler } from '../globals/roofBlitSampler.js';\n\nexport function ensureRoofBlit(renderer) {\n const device = renderer.device;\n if (!renderer.roofBlit) {\n const module = device.createShaderModule(roofShader);\n renderer.roofBlit = /* alloc */ {\n pipeline: device.createRenderPipeline((\n roofPipeline.vertex.module = module,\n roofPipeline.fragment.module = module,\n roofPipeline\n )),\n sampler: device.createSampler(roofBlitSampler),\n };\n roofPipeline.vertex.module = null;\n roofPipeline.fragment.module = null;\n }\n}\n", "export const roofBuffer = {\n size: null,\n usage: null\n};\n", "export const roofPass = {\n colorAttachments: [{\n view: null,\n clearValue: {\n r: 0,\n g: 0,\n b: 0,\n a: 0\n },\n loadOp: 'clear',\n storeOp: 'store'\n }]\n};\n", "export const roofImage = {\n source: null\n};\n", "export const roofTarget = {\n texture: null\n};\n", "export const roofCopySize = [null, null];\n", "import { roofImage } from '../globals/roofImage.js';\r\nimport { roofTarget } from '../globals/roofTarget.js';\r\nimport { roofCopySize } from '../globals/roofCopySize.js';\r\n\r\nexport function uploadRoofTile(device, tile) {\r\n const source = tile.texture;\r\n if (source.uploaded !== source.image) {\r\n device.queue.copyExternalImageToTexture((\r\n roofImage.source = tile.image,\r\n roofImage\r\n ), (\r\n roofTarget.texture = source.texture,\r\n roofTarget\r\n ), (\r\n roofCopySize[0] = source.texture.width,\r\n roofCopySize[1] = source.texture.height,\r\n roofCopySize\r\n ));\r\n roofImage.source = null;\r\n roofTarget.texture = null;\r\n source.uploaded = source.image;\r\n }\r\n}\r\n", "export const roofBindGroup = {\n layout: null,\n entries: [{\n binding: 0,\n resource: null\n }, {\n binding: 1,\n resource: null\n }, {\n binding: 2,\n resource: {\n buffer: null,\n offset: null,\n size: 4\n }\n }]\n};\n", "export const roofCommands = [null];\n", "export const roofOpacities = { value: new Float32Array(64) };\n", "export function compareRoofTiles(a, b) {\n return (a.layer.options.zIndex || 0) - (b.layer.options.zIndex || 0) ||\n a.tile.coords.z - b.tile.coords.z;\n}\n", "import { roofBuffer } from '../globals/roofBuffer.js';\nimport { roofPass } from '../globals/roofPass.js';\nimport { uploadRoofTile } from './uploadRoofTile.js';\nimport { roofBindGroup } from '../globals/roofBindGroup.js';\nimport { roofCommands } from '../globals/roofCommands.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { roofOpacities } from '../globals/roofOpacities.js';\nimport { TILE_SIZE } from '../globals/TILE_SIZE.js';\n\n\nimport { compareRoofTiles } from './compareRoofTiles.js';\n\nexport function composeRoofAtlas(backend, tiles, zoom, min, size, width, height) {\n const renderer = sceneByLayer.get(backend).renderer, device = renderer.device, map = backend._map;\n const opacityLength = Math.max(1, tiles.length) * 64;\n if (roofOpacities.value.length < opacityLength) {\n roofOpacities.value = /* alloc */ new Float32Array(opacityLength);\n }\n const opacities = roofOpacities.value;\n const opacityBuffer = device.createBuffer((\n roofBuffer.size = opacities.byteLength,\n roofBuffer.usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n roofBuffer\n ));\n\n const encoder = device.createCommandEncoder();\n const atlasPass = encoder.beginRenderPass((\n roofPass.colorAttachments[0].view = sceneByLayer.get(backend)._roofRaster.texture.texture.createView(),\n roofPass\n ));\n roofPass.colorAttachments[0].view = null;\n atlasPass.setPipeline(renderer.roofBlit.pipeline);\n tiles.sort(compareRoofTiles);\n let i, tile, layer, coords, source, tileSize, x, y;\n for ([i, { tile, layer }] of tiles.entries()) {\n ({ coords } = tile);\n source = tile.texture;\n uploadRoofTile(device, tile);\n\n opacities[i * 64] = layer.options.opacity;\n tileSize = TILE_SIZE * map.getZoomScale(zoom, coords.z);\n x = (coords.x * tileSize - min.x) * width / size.x;\n y = (coords.y * tileSize - min.y) * height / size.y;\n atlasPass.setViewport(x, y, Math.min(tileSize * width / size.x, width - x),\n Math.min(tileSize * height / size.y, height - y), 0, 1);\n atlasPass.setBindGroup(0, device.createBindGroup((\n roofBindGroup.layout = renderer.roofBlit.pipeline.getBindGroupLayout(0),\n roofBindGroup.entries[0].resource = source.texture.createView(),\n roofBindGroup.entries[1].resource = renderer.roofBlit.sampler,\n roofBindGroup.entries[2].resource.buffer = opacityBuffer,\n roofBindGroup.entries[2].resource.offset = i * 256,\n roofBindGroup\n )));\n roofBindGroup.layout = null;\n roofBindGroup.entries[0].resource = null;\n roofBindGroup.entries[1].resource = null;\n roofBindGroup.entries[2].resource.buffer = null;\n\n atlasPass.draw(4);\n }\n atlasPass.end();\n device.queue.writeBuffer(opacityBuffer, 0, opacities);\n device.queue.submit((\n roofCommands[0] = encoder.finish(),\n roofCommands\n ));\n roofCommands[0] = null;\n opacityBuffer.destroy();\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function collectRoofTiles(rasters, tiles) {\r\n let zoom = -Infinity, layer, tile;\r\n for (layer of rasters) {\r\n for (tile of sceneByLayer.get(layer)._rasterTiles.values()) {\r\n if (tile.done && !tile.request.signal.aborted && tile.image) {\r\n tile._roofEntry ||= /* alloc */ { tile, layer };\r\n tiles.push(tile._roofEntry);\r\n zoom = Math.max(zoom, tile.coords.z);\r\n }\r\n }\r\n }\r\n return zoom;\r\n}\r\n", "export const roofTexture = {\n size: [null, null],\n format: 'rgba8unorm',\n usage: null\n};\n", "export const roofSampler = {\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n};\n", "import { roofTexture } from '../globals/roofTexture.js';\r\nimport { roofSampler } from '../globals/roofSampler.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { destroyTexture } from './destroyTexture.js';\r\n\r\nexport function resizeRoofTexture(backend, roof, width, height) {\r\n const renderer = sceneByLayer.get(backend).renderer;\r\n const descriptor = roofTexture;\r\n descriptor.size[0] = width; descriptor.size[1] = height;\r\n descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;\r\n if (roof.texture && (roof.texture.width !== width || roof.texture.height !== height)) {\r\n destroyTexture(backend, roof.texture.texture);\r\n roof.texture.texture = renderer.device.createTexture(descriptor);\r\n roof.texture.width = width; roof.texture.height = height;\r\n }\r\n roof.texture ||= /* alloc */ {\r\n device: renderer.device,\r\n texture: renderer.device.createTexture(descriptor),\r\n sampler: renderer.device.createSampler(roofSampler),\r\n samplerOptions: /* alloc */ { addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' },\r\n image: null, width, height,\r\n format: 'rgba8unorm', srgb: false, flipY: false, uploaded: null,\r\n };\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\nimport { updateRoofAtlas } from './updateRoofAtlas.js';\nimport { destroyTexture } from './destroyTexture.js';\n\nexport function updateRoofRaster(backend, now) {\n const map = backend._map;\n const rasters = sceneByLayer.get(backend)._roofRasters ||= /* alloc */ [];\n rasters.length = 0;\n let hasRoofTexture = false;\n let layer;\n for (layer of sceneByLayer.get(backend)._layers) {\n if (layer.options.roofTexture || layer.options.wallTexture) { hasRoofTexture = true; break; }\n }\n if (hasRoofTexture) {\n for (layer of Object.values(map._layers)) {\n if (sceneByLayer.get(layer).kind === 'raster' && sceneByLayer.get(layer)._rasterTiles && layer.options.opacity > 0) rasters.push(layer);\n }\n updateRoofAtlas(backend, rasters, now);\n } else if (sceneByLayer.get(backend)._roofRaster) {\n destroyTexture(backend, sceneByLayer.get(backend)._roofRaster.texture.texture);\n sceneByLayer.get(backend)._roofRaster = null;\n }\n return rasters;\n}\n", "export function compareMeshDepth(a, b) {\r\n return a.program.transparent\r\n ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\r\n b._sortDepth - a._sortDepth || a.id - b.id\r\n : (a._sortDepth ?? 0) - (b._sortDepth ?? 0) || a.id - b.id;\r\n}\r\n", "export function compareMeshes(a, b) {\n return Number(Boolean(b.ground)) - Number(Boolean(a.ground)) ||\n (a.ground && b.ground ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\n a.tile.coords.z - b.tile.coords.z : 0) ||\n Number(a.program.transparent) - Number(b.program.transparent) ||\n compareMeshDepth(a, b);\n}\nimport { compareMeshDepth } from './compareMeshDepth.js';\n", "\nimport { compareMeshes } from './compareMeshes.js';\n\nexport function sortMeshes(meshes) {\n return meshes.sort(compareMeshes);\n}\n", "import { radians } from '../globals/radians.js';\r\nimport { earthCirc } from '../globals/earthCirc.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function roofFootprint(mesh, backend, layer) {\r\n const map = backend._map, bounds = mesh.geometry.bounds, world = mesh.worldMatrix;\r\n const state = sceneByLayer.get(layer), zoom = state._tileZoom;\r\n const origin = map.project(sceneByLayer.get(backend)._sceneOrigin, zoom);\r\n const scale = map.options.crs.scale(zoom) / (earthCirc * Math.cos(sceneByLayer.get(backend)._sceneOrigin.lat * radians));\r\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\r\n let i, x, y, z, px, py, nw, se;\r\n for (i = 0; i < 8; i++) {\r\n x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\r\n z = i & 4 ? bounds.max[2] : bounds.min[2];\r\n px = origin.x + (world[0] * x + world[4] * y + world[8] * z + world[12]) * scale;\r\n py = origin.y + (world[2] * x + world[6] * y + world[10] * z + world[14]) * scale;\r\n minX = Math.min(minX, px); minY = Math.min(minY, py);\r\n maxX = Math.max(maxX, px); maxY = Math.max(maxY, py);\r\n }\r\n if (state.header.maxLat !== undefined && state.header.minLon !== undefined &&\r\n state.header.minLat !== undefined && state.header.maxLon !== undefined) {\r\n nw = map.project(/* alloc */ [state.header.maxLat, state.header.minLon], zoom);\r\n se = map.project(/* alloc */ [state.header.minLat, state.header.maxLon], zoom);\r\n minX = Math.max(minX, nw.x); minY = Math.max(minY, nw.y);\r\n maxX = Math.min(maxX, se.x); maxY = Math.min(maxY, se.y);\r\n if (minX >= maxX || minY >= maxY) return null;\r\n }\r\n return /* alloc */ [minX, minY, maxX, maxY];\r\n}\r\n", "export function subtractRoofTile(remaining, tile, zoom) {\r\n const size = 256 * 2 ** (zoom - tile.coords.z);\r\n const left = tile.coords.x * size, top = tile.coords.y * size;\r\n const pieces = /* alloc */ [];\r\n let x0, y0, x1, y1, l, t, r, b;\r\n for ([x0, y0, x1, y1] of remaining) {\r\n l = Math.max(x0, left), t = Math.max(y0, top);\r\n r = Math.min(x1, left + size), b = Math.min(y1, top + size);\r\n if (l >= r || t >= b) {\r\n pieces.push(/* alloc */ [x0, y0, x1, y1]);\r\n continue;\r\n }\r\n if (y0 < t) pieces.push(/* alloc */ [x0, y0, x1, t]);\r\n if (b < y1) pieces.push(/* alloc */ [x0, b, x1, y1]);\r\n if (x0 < l) pieces.push(/* alloc */ [x0, t, l, b]);\r\n if (r < x1) pieces.push(/* alloc */ [r, t, x1, b]);\r\n }\r\n return pieces;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { roofFootprint } from './roofFootprint.js';\r\nimport { subtractRoofTile } from './subtractRoofTile.js';\r\n\r\n/** Test the mesh's ground footprint against loaded imagery, including coarse parent tiles. */\r\nexport function roofCoverage(mesh, backend, rasters) {\r\n let intersectsArchive = false, pending = false;\r\n let layer, footprint, remaining, tile;\r\n for (layer of rasters) {\r\n if (!sceneByLayer.get(layer).header) { pending = true; continue; }\r\n footprint = roofFootprint(mesh, backend, layer);\r\n if (!footprint) continue;\r\n intersectsArchive = true;\r\n remaining = /* alloc */ [footprint];\r\n for (tile of sceneByLayer.get(layer)._rasterTiles.values()) {\r\n // Failed imagery already reports an error; do not hide the building indefinitely.\r\n if (!tile.done && !tile.error) continue;\r\n remaining = subtractRoofTile(remaining, tile, sceneByLayer.get(layer)._tileZoom);\r\n if (!remaining.length) return true;\r\n }\r\n }\r\n return !intersectsArchive && !pending;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { roofCoverage } from '../geometry/roofCoverage.js';\r\n\r\nexport function revealRoofMesh(backend, mesh, rasters) {\r\n if (mesh.program.uniforms.roofTexture && !rasters.length) mesh._roofRevealed = true;\r\n if (mesh.program.uniforms.roofTexture && !mesh._roofRevealed && rasters.length) {\r\n if (mesh._roofCoverageSignature !== sceneByLayer.get(backend)._roofRaster?.signature) {\r\n mesh._roofCoverageSignature = sceneByLayer.get(backend)._roofRaster?.signature;\r\n mesh._roofCovered = roofCoverage(mesh, backend, rasters);\r\n }\r\n if (!mesh._roofCovered) { mesh._appearance = 0; return false; }\r\n mesh._roofRevealed = true;\r\n }\r\n return true;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { sortMeshes } from \"./sortMeshes.js\";\nimport { revealRoofMesh } from './revealRoofMesh.js';\n\nexport function prepareFrameMeshes(backend, rasters, now, meshes) {\n const candidates = sceneByLayer.get(backend)._visibleMeshes, shadowMeshes = sceneByLayer.get(backend)._shadowMeshes, renderer = sceneByLayer.get(backend).renderer;\n let appearing = false;\n // Visible meshes: opaque first, transparent surfaces back-to-front.\n let mesh, progress;\n for (mesh of candidates) {\n if (!revealRoofMesh(backend, mesh, rasters)) continue;\n if (mesh.fadeDuration) {\n mesh.fadeStart ??= mesh.tile?.loadedAt ?? now;\n progress = Math.min(1, (now - mesh.fadeStart) / mesh.fadeDuration);\n mesh._appearance = progress * progress * (3 - 2 * progress);\n appearing ||= progress < 1;\n }\n meshes.push(mesh);\n }\n candidates.length = 0;\n sortMeshes(meshes);\n let minGroundZoom = Infinity, maxGroundZoom = -Infinity;\n for (mesh of meshes) {\n if (!mesh.ground) continue;\n minGroundZoom = Math.min(minGroundZoom, mesh.tile.coords.z);\n maxGroundZoom = Math.max(maxGroundZoom, mesh.tile.coords.z);\n }\n renderer.groundOverlap = minGroundZoom !== maxGroundZoom;\n let shadowCount = 0;\n for (mesh of shadowMeshes) {\n if (mesh.visible && mesh._appearance !== 0) shadowMeshes[shadowCount++] = mesh;\n }\n shadowMeshes.length = shadowCount;\n return appearing;\n}\n", "export const frameBuffer = {\n size: null,\n usage: null\n};\n", "import { frameBuffer } from '../globals/frameBuffer.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { destroyTexture } from './destroyTexture.js';\r\n\r\nexport function prepareFrameBuffer(backend, meshes, shadowMeshes) {\r\n const renderer = sceneByLayer.get(backend).renderer;\r\n // Slot 0 holds the camera; 256-byte mesh slots follow (double-sided meshes use two).\r\n if (!renderer.uniformBuffer || renderer.uniformBuffer.size < (meshes.length * 2 + shadowMeshes.length + 1) * 256) {\r\n if (renderer.uniformBuffer) destroyTexture(backend, renderer.uniformBuffer);\r\n renderer.uniformBuffer = renderer.device.createBuffer((\r\n frameBuffer.size = Math.max(64, meshes.length * 4 + shadowMeshes.length * 2) * 256,\r\n frameBuffer.usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\r\n frameBuffer\r\n ));\r\n renderer.uniformData = /* alloc */ new Float32Array(renderer.uniformBuffer.size / 4);\r\n }\r\n}\r\n", "export const sunBindGroup = {\n layout: null,\n entries: [{\n binding: 0,\n resource: {\n buffer: null\n }\n }, {\n binding: 1,\n resource: null\n }, {\n binding: 2,\n resource: null\n }, {\n binding: 3,\n resource: {\n buffer: null\n }\n }]\n};\n", "import { sunBindGroup } from '../globals/sunBindGroup.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nexport function bindSunlight(layer) {\n const sun = sceneByLayer.get(layer).renderer.sunlight;\n sun.bindGroup = sceneByLayer.get(layer).renderer.device.createBindGroup((\n sunBindGroup.layout = sun.layout,\n sunBindGroup.entries[0].resource.buffer = sun.buffer,\n sunBindGroup.entries[1].resource = sun.texture.createView(),\n sunBindGroup.entries[2].resource = sun.sampler,\n sunBindGroup.entries[3].resource.buffer = sun.lights,\n sunBindGroup\n ));\n sunBindGroup.layout = null;\n sunBindGroup.entries[0].resource.buffer = null;\n sunBindGroup.entries[1].resource = null;\n sunBindGroup.entries[2].resource = null;\n sunBindGroup.entries[3].resource.buffer = null;\n}\n", "export function writeLightCell(values, i, key, offsets, data) {\r\n let j, o;\r\n for (j = 0, o = offsets[key] * 4; j < 8; j++) data[o + j] = values[i + j];\r\n offsets[key] += 2;\r\n}\r\n", "export function visitLightCells(values, i, minX, minZ, cellSize, columns, offsets, data) {\r\n const radius = values[i + 3], x = values[i] - minX, z = values[i + 2] - minZ;\r\n let y, c, key;\r\n for (y = Math.floor((z - radius) / cellSize); y <= Math.floor((z + radius) / cellSize); y++) {\r\n for (c = Math.floor((x - radius) / cellSize); c <= Math.floor((x + radius) / cellSize); c++) {\r\n key = y * columns + c;\r\n if (data) {\r\n writeLightCell(values, i, key, offsets, data);\r\n } else offsets[key]++;\r\n }\r\n }\r\n}\r\nimport { writeLightCell } from './writeLightCell.js';\r\n", "import { visitLightCells } from './visitLightCells.js';\n\nexport function visitCells(packed, minX, minZ, cellSize, columns, offsets, data) {\n let values, i;\n for (values of packed) for (i = 0; i < values.length; i += 8) {\n visitLightCells(values, i, minX, minZ, cellSize, columns, offsets, data);\n }\n}\n", "import { visitCells } from './visitCells.js';\n\n/** Pack world-space point lights into the shader's spatial grid. */\nexport function lightGrid(packed, maxBytes) {\n let count = 0;\n let values, i, value, key;\n for (values of packed) count += values.length / 8;\n const cellSize = 32;\n let data;\n if (count) {\n let minX = Infinity, minZ = Infinity, maxX = -Infinity, maxZ = -Infinity;\n for (values of packed) for (i = 0; i < values.length; i += 8) {\n minX = Math.min(minX, values[i] - values[i + 3]);\n maxX = Math.max(maxX, values[i] + values[i + 3]);\n minZ = Math.min(minZ, values[i + 2] - values[i + 3]);\n maxZ = Math.max(maxZ, values[i + 2] + values[i + 3]);\n }\n const columns = Math.ceil((maxX - minX) / cellSize) + 1,\n rows = Math.ceil((maxZ - minZ) / cellSize) + 1;\n // Counting sort: count the lights of each cell, then fill each cell's slice.\n const counts = /* alloc */ new Uint32Array(columns * rows),\n next = /* alloc */ new Uint32Array(columns * rows);\n visitCells(packed, minX, minZ, cellSize, columns, counts);\n let entries = 0;\n for (value of counts) entries += value;\n const length = (2 + columns * rows + entries * 2) * 4;\n if (length * 4 > maxBytes) {\n throw /* alloc */ new Error('Streetlight grid exceeds GPU storage limit');\n }\n data = /* alloc */ new Float32Array(length);\n data[0] = minX; data[1] = minZ; data[2] = cellSize;\n data[3] = columns; data[4] = rows; data[5] = count;\n let offset = 2 + columns * rows;\n for (key = 0; key < counts.length; key++) if (counts[key]) {\n data[(2 + key) * 4] = next[key] = offset;\n data[(2 + key) * 4 + 1] = counts[key];\n offset += counts[key] * 2;\n }\n visitCells(packed, minX, minZ, cellSize, columns, next, data);\n } else data = /* alloc */ new Float32Array(8);\n\n return /* alloc */ { data, count };\n}\n", "export const lightScale = 0.03 / (4 * Math.PI);\r\n", "import { lightScale } from '../globals/lightScale.js';\n\n/** World-space [x, y, z, radius, r, g, b, intensity] for one mesh's point lights. */\nexport function worldLights(lights, m) {\n const values = /* alloc */ new Float32Array(lights.length * 8);\n let i, x, y, z, radius, color, flux, w;\n for (i = 0; i < lights.length; i++) {\n ({\n position: [x, y, z],\n radius,\n color,\n flux\n } = lights[i]);\n w = m[3] * x + m[7] * y + m[11] * z + m[15];\n values[i * 8] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n values[i * 8 + 1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n values[i * 8 + 2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n values[i * 8 + 3] = radius;\n values[i * 8 + 4] = color[0];\n values[i * 8 + 5] = color[1];\n values[i * 8 + 6] = color[2];\n values[i * 8 + 7] = flux * lightScale;\n }\n return values;\n}", "import { lightGrid } from './lightGrid.js';\nimport { worldLights } from './worldLights.js';\n\n/** Keep fixed lamps cached when moving headlights change. */\nexport function cacheLightGrid(meshes, previous, maxBytes) {\n let unchanged = previous?.meshes.length === meshes.length;\n let i, mesh, matrix, lights, cache, sameMatrix, j;\n for (i = 0; i < meshes.length; i++) {\n mesh = meshes[i], matrix = mesh.worldMatrix, lights = mesh.extras.lights;\n cache = mesh._worldLights;\n sameMatrix = Boolean(cache);\n for (j = 0; j < matrix.length && sameMatrix; j++) sameMatrix = matrix[j] === cache.matrix[j];\n if (!sameMatrix || cache.lights !== lights) {\n cache = mesh._worldLights = /* alloc */ {\n lights,\n matrix: /* alloc */ [...matrix],\n data: worldLights(lights, matrix),\n };\n }\n unchanged &&= previous.meshes[i].mesh === mesh && previous.meshes[i].cache === cache;\n }\n if (unchanged) return previous;\n const packed = /* alloc */ new Array(meshes.length);\n const snapshots = /* alloc */ new Array(meshes.length);\n for (i = 0; i < meshes.length; i++) {\n mesh = meshes[i];\n cache = mesh._worldLights;\n packed[i] = cache.data;\n snapshots[i] = /* alloc */ { mesh, cache };\n }\n return /* alloc */ { ...lightGrid(packed, maxBytes), meshes: snapshots };\n}\n", "export const geometryEmpty = [];\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\n\n\nexport function collectLightMeshes(node, fixed, moving) {\n if (!node.visible) return;\n if (node.extras?.lights) (node.extras.dynamicLights ? moving : fixed).push(node);\n let child;\n for (child of node.children || geometryEmpty) collectLightMeshes(child, fixed, moving);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { bindSunlight } from '../shadows/bindSunlight.js';\nimport { cacheLightGrid } from './cacheLightGrid.js';\nimport { collectLightMeshes } from './collectLightMeshes.js';\n\nexport function updatePointLights(backend) {\n const { device, sunlight: sun } = sceneByLayer.get(backend).renderer;\n const fixed = /* alloc */ [];\n const moving = /* alloc */ [];\n let layer;\n for (layer of sceneByLayer.get(backend)._layers) {\n if (!layer.options.nightLight || !sceneByLayer.get(layer).root.visible) continue;\n collectLightMeshes(sceneByLayer.get(layer).root, fixed, moving);\n }\n const maxBytes = device.limits.maxStorageBufferBindingSize;\n const staticGrid = cacheLightGrid(fixed, sun.staticLightGrid, maxBytes);\n const dynamicGrid = cacheLightGrid(moving, sun.dynamicLightGrid, maxBytes);\n if (staticGrid === sun.staticLightGrid && dynamicGrid === sun.dynamicLightGrid) return;\n const size = staticGrid.data.byteLength + dynamicGrid.data.byteLength;\n if (size > maxBytes) throw /* alloc */ new Error('Streetlight grid exceeds GPU storage limit');\n let uploadStatic = staticGrid !== sun.staticLightGrid;\n if (sun.lights.size < size) {\n destroyTexture(backend, sun.lights);\n sun.lights = device.createBuffer(/* alloc */ { size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\n bindSunlight(backend);\n uploadStatic = true;\n }\n // The spare header component points to a second grid in the same storage binding.\n staticGrid.data[6] = staticGrid.data.length / 4;\n if (uploadStatic) device.queue.writeBuffer(sun.lights, 0, staticGrid.data);\n device.queue.writeBuffer(sun.lights, staticGrid.data.byteLength, dynamicGrid.data);\n sun.lightCount = staticGrid.count + dynamicGrid.count;\n sun.staticLightGrid = staticGrid;\n sun.dynamicLightGrid = dynamicGrid;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { prepareFrameBuffer } from './prepareFrameBuffer.js';\nimport { updatePointLights } from '../lighting/updatePointLights.js';\n\nexport function prepareFrameUniforms(backend, meshes, shadowMeshes, sunlight) {\n const renderer = sceneByLayer.get(backend).renderer, camera = sceneByLayer.get(backend).camera;\n const view = camera.viewMatrix, direction = sunlight?.direction;\n const x = direction ? direction[0] : -300;\n const y = direction ? direction[1] : 500;\n const z = direction ? direction[2] : 300;\n const lightX = view[0] * x + view[4] * y + view[8] * z;\n const lightY = view[1] * x + view[5] * y + view[9] * z;\n const lightZ = view[2] * x + view[6] * y + view[10] * z;\n const lightLength = Math.hypot(lightX, lightY, lightZ) || 1;\n const skyLength = Math.hypot(view[4], view[5], view[6]) || 1;\n // One uniform upload per frame: per-mesh writeBuffer calls dominate Firefox's GPU process.\n prepareFrameBuffer(backend, meshes, shadowMeshes);\n const frameData = renderer.uniformData;\n frameData.set(camera.viewMatrix, 0);\n frameData.set(camera.projectionMatrix, 16);\n if (sceneByLayer.get(backend)._roofRaster?.matrix) frameData.set(sceneByLayer.get(backend)._roofRaster.matrix, 32);\n else {\n frameData.fill(0, 32, 48);\n frameData[32] = frameData[37] = frameData[42] = frameData[47] = 1;\n }\n frameData[48] = lightX / lightLength;\n frameData[49] = lightY / lightLength;\n frameData[50] = lightZ / lightLength;\n frameData[51] = sunlight && sunlight.altitude <= 0 ? 0 : 1;\n frameData[52] = view[4] / skyLength;\n frameData[53] = view[5] / skyLength;\n frameData[54] = view[6] / skyLength;\n const night = sunlight ? Math.max(0, Math.min(1, (3 - sunlight.altitude) / 9)) : 0;\n frameData[55] = night * night * (3 - 2 * night);\n const tint = sunlight?.tint;\n frameData[56] = tint ? tint[0] : 1;\n frameData[57] = tint ? tint[1] : 1;\n frameData[58] = tint ? tint[2] : 1;\n frameData[59] = 0;\n if (night > 0) updatePointLights(backend);\n renderer.uniformSlot = 1;\n}\n", "export const scenePass = {\n colorAttachments: [{\n view: null,\n clearValue: {\n r: 0,\n g: 0,\n b: 0,\n a: 0\n },\n loadOp: 'clear',\n storeOp: 'store'\n }],\n depthStencilAttachment: {\n view: null,\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store'\n }\n};\n", "export const meshOffsets = [null];\n", "export const meshPipeline = {\n layout: null,\n vertex: {\n module: null,\n entryPoint: 'vertexMain',\n buffers: null\n },\n fragment: {\n module: null,\n entryPoint: 'fragmentMain',\n targets: [{\n format: null,\n blend: null,\n writeMask: null\n }]\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: null,\n frontFace: null\n },\n depthStencil: {\n format: 'depth24plus',\n depthWriteEnabled: null,\n depthCompare: null\n }\n};\n", "export const alphaBlend = {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha',\n operation: 'add'\n },\n alpha: {\n srcFactor: 'one',\n dstFactor: 'one-minus-src-alpha',\n operation: 'add'\n },\n};\n", "import { meshPipeline } from '../globals/meshPipeline.js';\r\nimport { alphaBlend } from '../globals/alphaBlend.js';\r\n\r\nexport function drawPipeline(renderer, mesh, cullMode, frontFace) {\r\n const { program } = mesh;\r\n // Mixed-LOD imagery composites coarse-to-fine; its depth still occludes later 3D objects.\r\n // ponytail: self-occlusion during LOD blending needs separate per-LOD depth passes.\r\n const depthCompare = program.depthTest === false || (mesh.ground && renderer.groundOverlap)\r\n ? 'always' : 'less-equal';\r\n const pipelineKey = `${cullMode}:${frontFace}:${depthCompare}`;\r\n let pipeline = program.pipelineCache.get(pipelineKey);\r\n if (!pipeline) {\r\n pipeline = renderer.device.createRenderPipeline((\r\n meshPipeline.layout = program.pipelineLayout,\r\n meshPipeline.vertex.module = program.vertex,\r\n meshPipeline.vertex.buffers = program.vertexBuffers,\r\n meshPipeline.fragment.module = program.fragment,\r\n meshPipeline.fragment.targets[0].format = renderer.format,\r\n meshPipeline.fragment.targets[0].blend = program.transparent ? alphaBlend : undefined,\r\n meshPipeline.fragment.targets[0].writeMask = GPUColorWrite.ALL,\r\n meshPipeline.primitive.cullMode = cullMode,\r\n meshPipeline.primitive.frontFace = frontFace,\r\n meshPipeline.depthStencil.depthWriteEnabled = program.depthWrite,\r\n meshPipeline.depthStencil.depthCompare = depthCompare,\r\n meshPipeline\r\n ));\r\n meshPipeline.layout = null;\r\n meshPipeline.vertex.module = null;\r\n meshPipeline.vertex.buffers = null;\r\n meshPipeline.fragment.module = null;\r\n program.pipelineCache.set(pipelineKey, pipeline);\r\n }\r\n return pipeline;\r\n}\r\n", "export function prepareMeshCutout(renderer, mesh, base) {\r\n const data = renderer.uniformData;\r\n const cutout = (mesh._nativeSource || mesh._rasterSource)?.options.cutout;\r\n if (cutout && (!Number.isFinite(cutout.x) || !Number.isFinite(cutout.y) ||\r\n !Number.isFinite(cutout.radius) || cutout.radius < 0)) {\r\n throw /* alloc */ new Error('cutout requires finite x, y and a non-negative radius in CSS pixels');\r\n }\r\n data[base + 36] = (cutout?.x ?? 0) * renderer.dpr;\r\n data[base + 37] = (cutout?.y ?? 0) * renderer.dpr;\r\n data[base + 38] = (cutout?.radius ?? 0) * renderer.dpr;\r\n data[base + 39] = cutout?.outside ? 1 : 0;\r\n}\r\n", "export function prepareMeshUniforms(renderer, mesh) {\r\n const uniforms = mesh.program.uniforms;\r\n const offset = renderer.uniformSlot++ * 256;\r\n const data = renderer.uniformData, base = offset / 4;\r\n data.set(mesh.worldMatrix, base);\r\n data.set(uniforms.baseColor.value, base + 16);\r\n data[base + 19] = 1;\r\n data[base + 20] = uniforms.metallic.value;\r\n data[base + 21] = uniforms.roughness.value;\r\n data[base + 22] = uniforms.opacity.value * (mesh.ground ? mesh._appearance ?? 1 : 1);\r\n data[base + 23] = uniforms.alphaCutoff.value;\r\n data.set(uniforms.emissive.value, base + 24);\r\n data[base + 27] = uniforms.occlusionStrength.value;\r\n data[base + 28] = mesh.terrain?.[0] ?? 0;\r\n data[base + 29] = mesh.terrain?.[1] ?? 0;\r\n data[base + 30] = mesh.terrain?.[2] ?? 0;\r\n data[base + 31] = mesh.terrain?.[3] ?? 0;\r\n data[base + 32] = mesh.highlight?.[0] ?? 0;\r\n data[base + 33] = mesh.highlight?.[1] ?? 0;\r\n data[base + 34] = mesh.program.nightSparkle ? data[55] : 0;\r\n data[base + 35] = mesh.ground ? 1 : mesh._appearance ?? 1;\r\n prepareMeshCutout(renderer, mesh, base);\r\n return offset;\r\n}\r\nimport { prepareMeshCutout } from './prepareMeshCutout.js';\r\n", "export const meshImage = {\n source: null,\n flipY: null\n};\n", "export const meshTarget = {\n texture: null\n};\n", "export const meshCopySize = [null, null];\n", "import { meshImage } from '../globals/meshImage.js';\r\nimport { meshTarget } from '../globals/meshTarget.js';\r\nimport { meshCopySize } from '../globals/meshCopySize.js';\r\n\r\nexport function uploadMeshTexture(device, texture) {\r\n if (texture.uploaded === texture.image) return;\r\n device.queue.copyExternalImageToTexture(\r\n (\r\n meshImage.source = texture.image,\r\n meshImage.flipY = Boolean(texture.flipY),\r\n meshImage\r\n ),\r\n (\r\n meshTarget.texture = texture.texture,\r\n meshTarget\r\n ),\r\n (\r\n meshCopySize[0] = texture.image.width,\r\n meshCopySize[1] = texture.image.height,\r\n meshCopySize\r\n )\r\n );\r\n meshImage.source = null;\r\n meshTarget.texture = null;\r\n texture.uploaded = texture.image;\r\n}\r\n", "export const meshBindGroup = {\n layout: null,\n entries: null\n};\n", "export const drawEntries = [];\n", "export const drawMeshEntry = {\n binding: 0,\n resource: {\n buffer: null,\n size: 160\n }\n};\n", "export const drawFrameEntry = {\n binding: 1,\n resource: {\n buffer: null,\n size: 240\n }\n};\n", "export const drawTerrainEntry = {\n binding: 2,\n resource: null\n};\n", "export const drawTextureEntries = [{\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n },\n {\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n },\n];\n", "export const drawSamplerEntries = [{\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n },\n {\n binding: null,\n resource: null\n }, {\n binding: null,\n resource: null\n },\n];\n", "import { meshBindGroup } from '../globals/meshBindGroup.js';\r\nimport { drawEntries } from '../globals/drawEntries.js';\r\nimport { drawMeshEntry } from '../globals/drawMeshEntry.js';\r\nimport { drawFrameEntry } from '../globals/drawFrameEntry.js';\r\nimport { drawTerrainEntry } from '../globals/drawTerrainEntry.js';\r\nimport { drawTextureEntries } from '../globals/drawTextureEntries.js';\r\nimport { drawSamplerEntries } from '../globals/drawSamplerEntries.js';\r\n\r\nexport function bindMeshTextures(renderer, mesh, textures) {\r\n const { program } = mesh;\r\n const entries = drawEntries;\r\n entries.length = 0;\r\n drawMeshEntry.resource.buffer = renderer.uniformBuffer;\r\n drawFrameEntry.resource.buffer = renderer.uniformBuffer;\r\n entries.push(drawMeshEntry, drawFrameEntry);\r\n if (program.terrain) {\r\n drawTerrainEntry.resource = program.terrain.texture.createView();\r\n entries.push(drawTerrainEntry);\r\n }\r\n mesh.boundBuffer = renderer.uniformBuffer;\r\n const boundTextures = mesh.boundTextures ||= /* alloc */ [];\r\n boundTextures.length = textures.length;\r\n let i, binding, texture;\r\n for (i = 0; i < textures.length; i++) {\r\n binding = program.bindings[i], texture = textures[i];\r\n drawTextureEntries[i].binding = binding.texture;\r\n drawTextureEntries[i].resource = texture.texture.createView();\r\n drawSamplerEntries[i].binding = binding.sampler;\r\n drawSamplerEntries[i].resource = texture.sampler;\r\n entries.push(drawTextureEntries[i], drawSamplerEntries[i]);\r\n boundTextures[i] ||= /* alloc */ [];\r\n boundTextures[i][0] = texture.texture;\r\n boundTextures[i][1] = texture.sampler;\r\n }\r\n mesh.bindGroup = renderer.device.createBindGroup((\r\n meshBindGroup.layout = program.bindGroupLayout,\r\n meshBindGroup.entries = entries,\r\n meshBindGroup\r\n ));\r\n meshBindGroup.layout = null;\r\n meshBindGroup.entries = null;\r\n drawMeshEntry.resource.buffer = null;\r\n drawFrameEntry.resource.buffer = null;\r\n drawTerrainEntry.resource = null;\r\n for (i = 0; i < textures.length; i++) {\r\n drawTextureEntries[i].resource = null;\r\n drawSamplerEntries[i].resource = null;\r\n }\r\n entries.length = 0;\r\n}\r\n", "import { uploadMeshTexture } from './uploadMeshTexture.js';\r\nimport { bindMeshTextures } from './bindMeshTextures.js';\r\n\r\nexport function prepareMeshTextures(renderer, mesh) {\r\n const { program } = mesh;\r\n const { device } = renderer;\r\n const textures = mesh._textures ||= /* alloc */ [];\r\n textures.length = 0;\r\n let binding, texture, i;\r\n for (binding of program.bindings) {\r\n texture = program.uniforms[binding.name]?.value;\r\n if (!texture) throw /* alloc */ new Error(`Missing Layer3D texture: ${binding.name}`);\r\n uploadMeshTexture(device, texture);\r\n textures.push(texture);\r\n }\r\n let bindingsChanged = !mesh.bindGroup || mesh.boundBuffer !== renderer.uniformBuffer ||\r\n textures.length !== mesh.boundTextures.length;\r\n for (i = 0; !bindingsChanged && i < textures.length; i++) {\r\n if (textures[i].texture !== mesh.boundTextures[i][0] ||\r\n textures[i].sampler !== mesh.boundTextures[i][1]) bindingsChanged = true;\r\n }\r\n if (bindingsChanged) bindMeshTextures(renderer, mesh, textures);\r\n}\r\n", "import { meshOffsets } from '../globals/meshOffsets.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { drawPipeline } from './drawPipeline.js';\nimport { prepareMeshUniforms } from './prepareMeshUniforms.js';\nimport { prepareMeshTextures } from './prepareMeshTextures.js';\n\n/** Upload retained CPU data and draw one mesh in the active WebGPU render pass. */\nexport function drawGeometry(backend, mesh, pass, cullMode, frontFace) {\n const { geometry } = mesh;\n const renderer = sceneByLayer.get(backend).renderer;\n const { device } = renderer;\n const pipeline = drawPipeline(renderer, mesh, cullMode, frontFace);\n const offset = prepareMeshUniforms(renderer, mesh);\n prepareMeshTextures(renderer, mesh);\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, mesh.bindGroup, (\n meshOffsets[0] = offset,\n meshOffsets\n ));\n\n pass.setVertexBuffer(0, geometry.attributes.position.buffer);\n pass.setVertexBuffer(1, geometry.attributes.normal.buffer);\n if (geometry.attributes.color) pass.setVertexBuffer(2, geometry.attributes.color.buffer);\n if (geometry.attributes.uv) pass.setVertexBuffer(3, geometry.attributes.uv.buffer);\n const instances = geometry.attributes.instanceOffset;\n if (instances) pass.setVertexBuffer(4, instances.buffer);\n let attribute;\n for (attribute of Object.values(geometry.attributes)) {\n if (!attribute.needsUpdate) continue;\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n attribute.needsUpdate = false;\n geometry.bounds = null;\n }\n const index = geometry.attributes.index;\n if (index) {\n pass.setIndexBuffer(index.buffer, index.indexFormat);\n pass.drawIndexed(geometry.drawRange.count, instances?.count ?? 1, geometry.drawRange.start, 0, 0);\n } else {\n pass.draw(geometry.drawRange.count, instances?.count ?? 1, geometry.drawRange.start, 0);\n }\n}\n", "import { scenePass } from '../globals/scenePass.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { drawGeometry } from './drawGeometry.js';\n\nexport function drawSceneMeshes(backend, encoder, meshes) {\n const renderer = sceneByLayer.get(backend).renderer;\n const pass = encoder.beginRenderPass((\n scenePass.colorAttachments[0].view = renderer.context.getCurrentTexture().createView(),\n scenePass.depthStencilAttachment.view = renderer.depthTexture.createView(),\n scenePass\n ));\n scenePass.colorAttachments[0].view = null;\n scenePass.depthStencilAttachment.view = null;\n pass.setViewport(0, 0, renderer.canvas.width, renderer.canvas.height, 0, 1);\n pass.setBindGroup(1, renderer.sunlight.bindGroup);\n let mesh, world, uniforms, determinant, frontFace, program;\n for (mesh of meshes) {\n world = mesh.worldMatrix;\n if (mesh.texture) {\n mesh.program.uniforms.baseTexture.value = mesh.texture;\n mesh.program.uniforms.opacity.value = mesh.opacity;\n }\n uniforms = mesh.program.uniforms;\n if (uniforms.roofTexture) uniforms.roofTexture.value = sceneByLayer.get(backend)._roofRaster?.texture || renderer.roofFallbackTexture;\n if (!mesh._frontFace || mesh._frontFaceWorldVersion !== mesh._worldMatrixVersion ||\n mesh._worldMatrixVersion === undefined) {\n determinant = world[0] * (world[5] * world[10] - world[6] * world[9]) -\n world[4] * (world[1] * world[10] - world[2] * world[9]) +\n world[8] * (world[1] * world[6] - world[2] * world[5]);\n if (!Number.isFinite(determinant) || determinant === 0) {\n throw /* alloc */ new Error('Singular 3D transform');\n }\n mesh._frontFace = determinant < 0 ? 'cw' : 'ccw';\n mesh._frontFaceWorldVersion = mesh._worldMatrixVersion;\n }\n frontFace = mesh._frontFace;\n program = mesh.program;\n if (program.transparent && program._layerMaterial.doubleSided && !mesh._nativeSource) {\n drawGeometry(backend, mesh, pass, 'front', frontFace);\n drawGeometry(backend, mesh, pass, 'back', frontFace);\n } else {\n drawGeometry(backend, mesh, pass, program.cullMode, frontFace);\n }\n }\n pass.end();\n}\n", "export const disabledShadow = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]);\n", "export const shadowValues = new Float32Array(20);\n", "export function shadowMeshMatches(cache, mesh) {\r\n const previous = cache.meshes.get(mesh), range = mesh.geometry.drawRange;\r\n if (!(previous && previous.world === mesh._worldMatrixVersion && previous.geometry === mesh.geometry &&\r\n previous.start === range.start && previous.count === range.count &&\r\n previous.appearance === (mesh._appearance ?? 1))) return false;\r\n let attribute;\r\n for (attribute of Object.values(mesh.geometry.attributes)) {\r\n if (attribute.needsUpdate) return false;\r\n }\r\n return true;\r\n}\r\n", "export function shadowCacheMatches(sun, meshes, sunlight) {\n const cache = sun.cache;\n let unchanged = sun.enabled && cache?.meshes.size === meshes.length;\n let i, mesh;\n if (unchanged) {\n for (i = 0; i < sunlight.direction.length; i++) {\n if (sunlight.direction[i] !== cache.direction[i]) { unchanged = false; break; }\n }\n }\n if (unchanged) {\n for (mesh of meshes) {\n if (!shadowMeshMatches(cache, mesh)) { unchanged = false; break; }\n }\n }\n return unchanged;\n}\nimport { shadowMeshMatches } from './shadowMeshMatches.js';\n", "export const shadowBounds = {\n min: [0, 0, 0],\n max: [0, 0, 0]\n};\n", "export const shadowCamera = {\n position: [0, 0, 0],\n target: [0, 0, 0],\n up: [0, 0, -1],\n x: [0, 0, 0],\n y: [0, 0, 0],\n z: [0, 0, 0],\n fov: 45,\n aspect: 1,\n near: 1,\n far: 500,\n viewMatrix: [],\n projectionMatrix: [],\n projectionViewMatrix: [],\n};\n", "export const shadowLow = [0, 0, 0];\n", "export const shadowHigh = [0, 0, 0];\n", "export function meshShadowBounds(mesh, bounds, matrix) {\r\n let cached = mesh._shadowBounds;\r\n if (!cached || cached.version !== mesh._worldMatrixVersion || cached.bounds !== bounds) {\r\n cached ||= mesh._shadowBounds = /* alloc */ {\r\n min: /* alloc */ [Infinity, Infinity, Infinity],\r\n max: /* alloc */ [-Infinity, -Infinity, -Infinity],\r\n };\r\n cached.version = mesh._worldMatrixVersion;\r\n cached.bounds = bounds;\r\n cached.min.fill(Infinity); cached.max.fill(-Infinity);\r\n let i, x, y, z, w, axis, value;\r\n for (i = 0; i < 8; i++) {\r\n x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\r\n z = i & 4 ? bounds.max[2] : bounds.min[2];\r\n w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15];\r\n for (axis = 0; axis < 3; axis++) {\r\n value = (matrix[axis] * x + matrix[axis + 4] * y + matrix[axis + 8] * z + matrix[axis + 12]) / w;\r\n cached.min[axis] = Math.min(cached.min[axis], value);\r\n cached.max[axis] = Math.max(cached.max[axis], value);\r\n }\r\n }\r\n }\r\n return cached;\r\n}\r\n", "import { computeBounds } from '../geometry/computeBounds.js';\nimport { meshShadowBounds } from './meshShadowBounds.js';\n\nexport function shadowBounds(meshes, output = /* alloc */ {\n min: /* alloc */ [Infinity, Infinity, Infinity],\n max: /* alloc */ [-Infinity, -Infinity, -Infinity],\n}) {\n const { min, max } = output;\n min.fill(Infinity); max.fill(-Infinity);\n let mesh, bounds, matrix, cached, axis;\n for (mesh of meshes) {\n if (!mesh.geometry.bounds || mesh.geometry.attributes.position.needsUpdate) computeBounds(mesh.geometry);\n bounds = mesh.geometry.bounds, matrix = mesh.worldMatrix;\n cached = meshShadowBounds(mesh, bounds, matrix);\n for (axis = 0; axis < 3; axis++) {\n min[axis] = Math.min(min[axis], cached.min[axis]);\n max[axis] = Math.max(max[axis], cached.max[axis]);\n }\n }\n // Include ground receivers below/around the loaded buildings and trees.\n min[1] = Math.min(0, min[1]);\n return output;\n}\n", "import { shadowBounds as sharedShadowBounds } from '../globals/shadowBounds.js';\nimport { shadowCamera } from '../globals/shadowCamera.js';\nimport { shadowLow } from '../globals/shadowLow.js';\nimport { shadowHigh } from '../globals/shadowHigh.js';\n\nimport { shadowBounds } from './shadowBounds.js';\nimport { updateCamera } from '../scene/updateCamera.js';\n\nexport function shadowMatrix(meshes, sunlight) {\n const { min, max } = shadowBounds(meshes, sharedShadowBounds);\n const camera = shadowCamera;\n camera.viewTransform ||= /* alloc */ new DOMMatrix();\n camera.projectionTransform ||= /* alloc */ new DOMMatrix();\n camera.projectionViewTransform ||= /* alloc */ new DOMMatrix();\n const low = shadowLow, high = shadowHigh;\n let i, axis, x, y, z, value;\n const radius = Math.max(100, Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]));\n for (i = 0; i < 3; i++) {\n camera.target[i] = (min[i] + max[i]) / 2;\n camera.position[i] = camera.target[i] + sunlight.direction[i] * radius * 2;\n }\n camera.far = radius * 5;\n updateCamera(camera);\n const view = camera.viewMatrix;\n low.fill(Infinity); high.fill(-Infinity);\n for (i = 0; i < 8; i++) {\n x = i & 1 ? max[0] : min[0];\n y = i & 2 ? max[1] : min[1];\n z = i & 4 ? max[2] : min[2];\n for (axis = 0; axis < 3; axis++) {\n value = view[axis] * x + view[axis + 4] * y + view[axis + 8] * z + view[axis + 12];\n low[axis] = Math.min(low[axis], value - 20);\n high[axis] = Math.max(high[axis], value + 20);\n }\n }\n const scaleX = 2 / (high[0] - low[0]), scaleY = 2 / (high[1] - low[1]);\n const scaleZ = -1 / (high[2] - low[2]);\n const matrix = /* alloc */ new Float32Array(16);\n for (i = 0; i < 16; i += 4) {\n matrix[i] = view[i] * scaleX;\n matrix[i + 1] = view[i + 1] * scaleY;\n matrix[i + 2] = view[i + 2] * scaleZ;\n matrix[i + 3] = view[i + 3];\n }\n matrix[12] -= (high[0] + low[0]) / (high[0] - low[0]);\n matrix[13] -= (high[1] + low[1]) / (high[1] - low[1]);\n matrix[14] += high[2] / (high[2] - low[2]);\n return matrix;\n}\n", "export const shadowMeshLayout = {\n entries: [{\n binding: 0,\n visibility: null,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true\n }\n }]\n};\n", "export const shadowDepthLayout = {\n entries: [{\n binding: 0,\n visibility: null,\n buffer: {\n type: 'uniform'\n }\n }]\n};\n", "export const depthBindGroup = {\n layout: null,\n entries: [{\n binding: 0,\n resource: {\n buffer: null\n }\n }]\n};\n", "export const shadowShader = {\n code: null\n};\n", "export const shadowPipeline = {\n layout: null,\n vertex: {\n module: null,\n entryPoint: 'main',\n buffers: null\n },\n fragment: {\n module: null,\n entryPoint: 'fragmentMain',\n targets: []\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: 'none'\n },\n depthStencil: {\n format: 'depth32float',\n depthWriteEnabled: true,\n depthCompare: 'less',\n depthBias: 2,\n depthBiasSlopeScale: 2\n }\n};\n", "export const shadowPipelineLayout = {\n bindGroupLayouts: [null, null]\n};\n", "export const positionLayout = Object.freeze({\n arrayStride: 12,\n attributes: Object.freeze([Object.freeze({\n shaderLocation: 0,\n offset: 0,\n format: 'float32x3'\n })])\n});\n", "export const instanceLayout = Object.freeze({\n arrayStride: 16,\n stepMode: 'instance',\n attributes: Object.freeze([Object.freeze({\n shaderLocation: 4,\n offset: 0,\n format: 'float32x4'\n })])\n});\n", "import { positionLayout as sharedPositionLayout } from './positionLayout.js';\nimport { instanceLayout as sharedInstanceLayout } from './instanceLayout.js';\n\nexport const shadowInstanceLayouts = [sharedPositionLayout, sharedInstanceLayout];\n", "import { positionLayout as sharedPositionLayout } from './positionLayout.js';\n\nexport const shadowLayouts = [sharedPositionLayout];\n", "import { shadowMeshLayout } from '../globals/shadowMeshLayout.js';\nimport { shadowDepthLayout } from '../globals/shadowDepthLayout.js';\nimport { depthBindGroup as sharedDepthBindGroup } from '../globals/depthBindGroup.js';\nimport { shadowShader } from '../globals/shadowShader.js';\nimport { shadowPipeline } from '../globals/shadowPipeline.js';\nimport { shadowPipelineLayout } from '../globals/shadowPipelineLayout.js';\nimport { shadowInstanceLayouts } from '../globals/shadowInstanceLayouts.js';\nimport { shadowLayouts } from '../globals/shadowLayouts.js';\n\nexport function ensureShadowPipeline(device, sun, instanced = false) {\n const key = instanced ? 'instancePipeline' : 'pipeline';\n if (!sun[key]) {\n if (!sun.meshLayout) {\n sun.meshLayout = device.createBindGroupLayout((\n shadowMeshLayout.entries[0].visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n shadowMeshLayout\n ));\n\n // Do not bind the sampled depth texture while it is a render attachment.\n sun.depthLayout = device.createBindGroupLayout((\n shadowDepthLayout.entries[0].visibility = GPUShaderStage.VERTEX,\n shadowDepthLayout\n ));\n\n sun.depthBindGroup = device.createBindGroup((\n sharedDepthBindGroup.layout = sun.depthLayout,\n sharedDepthBindGroup.entries[0].resource.buffer = sun.buffer,\n sharedDepthBindGroup\n ));\n sharedDepthBindGroup.layout = null;\n sharedDepthBindGroup.entries[0].resource.buffer = null;\n }\n const shader = device.createShaderModule((\n shadowShader.code = /* wgsl */` 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>${instanced ? ', @location(4) offset: vec4<f32>' : ''})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${instanced ? ' + offset.xyz' : ''},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,\n shadowShader\n ));\n shadowShader.code = null;\n const buffers = instanced ? shadowInstanceLayouts : shadowLayouts;\n sun[key] = device.createRenderPipeline((\n shadowPipeline.layout = device.createPipelineLayout((shadowPipelineLayout.bindGroupLayouts[0] = sun.meshLayout, shadowPipelineLayout.bindGroupLayouts[1] = sun.depthLayout, shadowPipelineLayout)),\n shadowPipeline.vertex.module = shader,\n shadowPipeline.vertex.buffers = buffers,\n shadowPipeline.fragment.module = shader,\n shadowPipeline\n ));\n shadowPipelineLayout.bindGroupLayouts[0] = null;\n shadowPipelineLayout.bindGroupLayouts[1] = null;\n shadowPipeline.layout = null;\n shadowPipeline.vertex.module = null;\n shadowPipeline.vertex.buffers = null;\n shadowPipeline.fragment.module = null;\n }\n}\n", "export const shadowPass = {\n colorAttachments: [],\n depthStencilAttachment: {\n view: null,\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store'\n }\n};\n", "export const shadowBindGroup = {\n layout: null,\n entries: [{\n binding: 0,\n resource: {\n buffer: null,\n size: 144\n }\n }]\n};\n", "export const shadowOffsets = [null];\n", "import { shadowPass } from '../globals/shadowPass.js';\nimport { shadowBindGroup } from '../globals/shadowBindGroup.js';\nimport { shadowOffsets } from '../globals/shadowOffsets.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function drawShadowMeshes(backend, encoder, meshes) {\n const renderer = sceneByLayer.get(backend).renderer, device = renderer.device, sun = renderer.sunlight;\n const pass = encoder.beginRenderPass((\n shadowPass.depthStencilAttachment.view = sun.texture.createView(),\n shadowPass\n ));\n shadowPass.depthStencilAttachment.view = null;\n let pipeline = sun.pipeline;\n pass.setPipeline(pipeline);\n pass.setBindGroup(1, sun.depthBindGroup);\n let mesh, instances, nextPipeline, offset, attribute, index, range;\n for (mesh of meshes) {\n instances = mesh.geometry.attributes.instanceOffset;\n nextPipeline = instances ? sun.instancePipeline : sun.pipeline;\n if (nextPipeline !== pipeline) {\n pipeline = nextPipeline;\n pass.setPipeline(pipeline);\n }\n offset = renderer.uniformSlot++ * 256;\n renderer.uniformData.set(mesh.worldMatrix, offset / 4);\n renderer.uniformData[offset / 4 + 35] = mesh._appearance ?? 1;\n if (mesh._shadowBuffer !== renderer.uniformBuffer) {\n mesh._shadowBuffer = renderer.uniformBuffer;\n mesh._shadowBindGroup = device.createBindGroup((\n shadowBindGroup.layout = sun.meshLayout,\n shadowBindGroup.entries[0].resource.buffer = renderer.uniformBuffer,\n shadowBindGroup\n ));\n shadowBindGroup.layout = null;\n shadowBindGroup.entries[0].resource.buffer = null;\n }\n for (attribute of Object.values(mesh.geometry.attributes)) {\n if (attribute.needsUpdate) {\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n attribute.needsUpdate = false;\n }\n }\n pass.setBindGroup(0, mesh._shadowBindGroup, (\n shadowOffsets[0] = offset,\n shadowOffsets\n ));\n\n pass.setVertexBuffer(0, mesh.geometry.attributes.position.buffer);\n if (instances) pass.setVertexBuffer(1, instances.buffer);\n index = mesh.geometry.attributes.index, range = mesh.geometry.drawRange;\n if (index) {\n pass.setIndexBuffer(index.buffer, index.indexFormat);\n pass.drawIndexed(range.count, instances?.count ?? 1, range.start, 0, 0);\n } else pass.draw(range.count, instances?.count ?? 1, range.start, 0);\n }\n pass.end();\n}\n", "export const shadowTexture = {\n size: [null, null],\n format: 'depth32float',\n usage: null\n};\n", "import { shadowTexture } from '../globals/shadowTexture.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { bindSunlight } from './bindSunlight.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\n\nexport function resizeSunlight(backend, size) {\n const device = sceneByLayer.get(backend).renderer.device, sun = sceneByLayer.get(backend).renderer.sunlight;\n if (sun.size === size) return;\n if (sun.texture) destroyTexture(backend, sun.texture);\n sun.size = size;\n sun.texture = device.createTexture((\n shadowTexture.size[0] = size,\n shadowTexture.size[1] = size,\n shadowTexture.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC,\n shadowTexture\n ));\n\n bindSunlight(backend);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { disabledShadow } from '../globals/disabledShadow.js';\nimport { shadowValues } from '../globals/shadowValues.js';\n\nimport { shadowCacheMatches } from './shadowCacheMatches.js';\nimport { shadowMatrix } from './shadowMatrix.js';\nimport { ensureShadowPipeline } from './ensureShadowPipeline.js';\nimport { drawShadowMeshes } from './drawShadowMeshes.js';\nimport { resizeSunlight } from './resizeSunlight.js';\n\n/** One shared directional depth map. Off-screen but loaded geometry can cast shadows. */\n\nexport function renderSunlight(backend, encoder, meshes, sunlight) {\n const renderer = sceneByLayer.get(backend).renderer, device = renderer.device, sun = renderer.sunlight;\n if (!meshes.length || !sunlight || sunlight.altitude < 3) {\n if (!sun.enabled) return;\n device.queue.writeBuffer(sun.buffer, 0, disabledShadow);\n sun.enabled = false;\n sun.cache = null;\n return;\n }\n if (shadowCacheMatches(sun, meshes, sunlight)) return;\n const values = shadowValues;\n sun.enabled = true;\n resizeSunlight(backend, Math.min(2048, device.limits.maxTextureDimension2D));\n values.set(shadowMatrix(meshes, sunlight));\n values[16] = 1;\n device.queue.writeBuffer(sun.buffer, 0, values);\n ensureShadowPipeline(device, sun);\n let mesh;\n for (mesh of meshes) {\n if (mesh.geometry.attributes.instanceOffset) {\n ensureShadowPipeline(device, sun, true);\n break;\n }\n }\n drawShadowMeshes(backend, encoder, meshes);\n const snapshots = /* alloc */ new Map();\n let mesh2;\n for (mesh2 of meshes) {\n snapshots.set(mesh2, /* alloc */ {\n world: mesh2._worldMatrixVersion, geometry: mesh2.geometry,\n start: mesh2.geometry.drawRange.start, count: mesh2.geometry.drawRange.count,\n appearance: mesh2._appearance ?? 1,\n });\n }\n sun.cache = /* alloc */ { direction: /* alloc */ [...sunlight.direction], meshes: snapshots };\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingUpdates } from '../globals/pendingUpdates.js';\n\n\n\nexport function cancelUpdate(backend) {\n const frame = sceneByLayer.get(backend)._frame;\n pendingUpdates.delete(backend);\n sceneByLayer.get(backend)._frame = null;\n if (!pendingUpdates.size && frame != null) {\n cancelAnimationFrame(frame);\n }\n}\n", "/** Reparent/detach scene data without drawing or disposing GPU resources. */\n\nexport function setParent(node, parent) {\n if (node.parent) node.parent.children.splice(node.parent.children.indexOf(node), 1);\n node.parent = parent;\n if (parent) parent.children.push(node);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function removeRasterTile(layer, tile) {\n sceneByLayer.get(layer)._terrainRequest?.abort();\n const mesh = sceneByLayer.get(layer)._rasterTiles.get(tile);\n if (!mesh) return;\n setParent(mesh, null);\n update(layer);\n if (mesh.texture !== tile.texture) destroyTexture(layer, mesh.texture.texture);\n sceneByLayer.get(layer)._rasterTiles.delete(tile);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { removeRasterTile } from './removeRasterTile.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function releaseRasterTile(backend, tile) {\n const key = `${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`;\n if (sceneByLayer.get(backend)._rasterTiles.get(key) !== tile) return;\n sceneByLayer.get(backend)._rasterTiles.delete(key);\n sceneByLayer.get(backend)._rasterVersion = (sceneByLayer.get(backend)._rasterVersion || 0) + 1;\n tile.request.abort();\n if(sceneByLayer.get(backend)._terrain3D) removeRasterTile(sceneByLayer.get(backend)._terrain3D, tile);\n if (tile.mesh) setParent(tile.mesh, null);\n if (tile.texture) destroyTexture(backend, tile.texture.texture);\n tile.image?.close();\n backend.fire('tileunload', /* alloc */ { tile, coords: tile.coords });\n update(backend);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { releaseRasterTile } from './releaseRasterTile.js';\n\nexport function pruneRasterTiles(backend) {\n const wanted = sceneByLayer.get(backend)._wantedRasterTiles;\n const now = performance.now();\n if (sceneByLayer.get(backend)._pruneVersion === sceneByLayer.get(backend)._rasterVersion && sceneByLayer.get(backend)._pruneWanted === wanted &&\n now < sceneByLayer.get(backend)._pruneAfter) return Number.isFinite(sceneByLayer.get(backend)._pruneAfter);\n sceneByLayer.get(backend)._pruneVersion = sceneByLayer.get(backend)._rasterVersion;\n sceneByLayer.get(backend)._pruneWanted = wanted;\n sceneByLayer.get(backend)._pruneAfter = Infinity;\n const pending = /* alloc */ [];\n let key, tile, parts, overlaps, coords, zoom;\n for (key of wanted) {\n tile = sceneByLayer.get(backend)._rasterTiles.get(key);\n if (tile?.done && now - tile.loadedAt < 250) {\n sceneByLayer.get(backend)._pruneAfter = Math.min(sceneByLayer.get(backend)._pruneAfter, tile.loadedAt + 250);\n }\n if (!tile?.done || now - tile.loadedAt < 250) {\n parts = key.split('/');\n pending.push(/* alloc */ { z: Number(parts[0]), x: Number(parts[1]), y: Number(parts[2]) });\n }\n }\n for ([key, tile] of sceneByLayer.get(backend)._rasterTiles) {\n if (wanted.has(key)) continue;\n overlaps = false;\n for (coords of pending) {\n zoom = Math.min(coords.z, tile.coords.z);\n if (Math.floor(coords.x / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.x / 2 ** (tile.coords.z - zoom)) &&\n Math.floor(coords.y / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.y / 2 ** (tile.coords.z - zoom))) {\n overlaps = true;\n break;\n }\n }\n if (!overlaps) releaseRasterTile(backend, tile);\n }\n return Number.isFinite(sceneByLayer.get(backend)._pruneAfter);\n}\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { current } from './current.js';\nimport { syncGridLayer } from './syncGridLayer.js';\nimport { syncImageOverlay } from './syncImageOverlay.js';\nimport { syncMarker } from './syncMarker.js';\nimport { syncVectorLayer } from './syncVectorLayer.js';\nimport { pruneNativeResources } from './pruneNativeResources.js';\n\nexport function synchronizeNativeLayer(state) {\n const { source, meshes, textures } = state;\n if (!current(state) || !sceneByLayer.get(state.backend).renderer || state.failed) return;\n if (!state.dirty && (!state.marker || !state.viewDirty)) return;\n state.dirty = false;\n state.viewDirty = false;\n let mesh, texture;\n for (mesh of meshes.values()) mesh._nativeUsed = false;\n for (texture of textures.values()) texture.used = false;\n if (source instanceof L.GridLayer) syncGridLayer(state);\n else if (source instanceof L.ImageOverlay) syncImageOverlay(state);\n else if (state.marker) syncMarker(state);\n else syncVectorLayer(state);\n pruneNativeResources(state);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function current(state) {\r\n return sceneByLayer.get(state.source)._nativeGPU === state && state.map.hasLayer(state.source);\r\n}\n", "import { L } from '../globals/L.js';\nimport { coreWhite } from '../globals/coreWhite.js';\n\nimport { styleNativeMesh } from './styleNativeMesh.js';\nimport { quadNativeMesh } from './quadNativeMesh.js';\nimport { boundsQuad } from './boundsQuad.js';\n\n\nexport function syncGridLayer(state) {\n const { source, textures, meshes } = state;\n let key, tile, opacity, retained, mesh, nw, se;\n for (key in source._tiles) {\n if (!Object.hasOwn(source._tiles, key)) continue;\n tile = source._tiles[key];\n if (!tile.loaded || tile.el instanceof HTMLImageElement && !tile.el.naturalWidth) continue;\n opacity = (source.options.opacity ?? 1) * (tile._gpuOpacity ?? 1);\n retained = textures.get(key);\n mesh = meshes.get(key);\n if (mesh && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {\n retained.used = true;\n styleNativeMesh(state, mesh, coreWhite, opacity);\n } else {\n [nw, se] = source._tileCoordsToNwSe(tile.coords);\n mesh = quadNativeMesh(state, key, tile.el, boundsQuad(state,\n /* alloc */ new L.LatLngBounds(nw, se)), opacity);\n }\n if (mesh) mesh.renderOrder += tile.coords.z / 100;\n }\n}\n", "export const coreWhite = Object.freeze([1, 1, 1]);\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function styleNativeMesh(state, mesh, color, opacity) {\r\n const { source, marker, paneOrder, order } = state;\r\n mesh.program.uniforms.baseColor.value = color;\r\n mesh.program.uniforms.opacity.value = opacity;\r\n if (source instanceof L.GridLayer) mesh.opacity = opacity;\r\n const zIndex = marker ? source._zIndex + (sceneByLayer.get(source)._cameraZIndexOffset || 0) : source.options.zIndex;\r\n mesh.renderOrder = paneOrder * 1e6 + (zIndex || 0) * 1000 + order;\r\n mesh._nativeSource = source;\r\n mesh._nativeUsed = true;\r\n}\n", "export const coreQuadIndices = Object.freeze([0, 2, 1, 1, 2, 3]);\n", "export const coreQuadUV = Object.freeze([0, 0, 1, 0, 0, 1, 1, 1]);\n", "export const coreSampler = Object.freeze({\n minFilter: 'linear',\n magFilter: 'linear'\n});\n", "import { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\nexport function disposeMesh(backend, mesh) {\n if (!mesh) {\n return;\n }\n setParent(mesh, null);\n update(backend);\n let attribute;\n for (attribute of Object.values(mesh.geometry.attributes)) {\n attribute.buffer.destroy();\n }\n}\n", "import { current } from './current.js';\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport async function uploadCanvasTexture(state, key, texture, image, device, width, height) {\n let bitmap;\n try {\n bitmap = await createImageBitmap(image);\n if (!current(state) || state.textures.get(key) !== texture) return;\n device.queue.copyExternalImageToTexture(\n /* alloc */ { source: bitmap },\n /* alloc */ { texture: texture.texture },\n /* alloc */ [width, height]);\n texture.uploaded = image;\n texture.pending = false;\n refreshNativeLayer(state);\n } catch (error) {\n state.failed = true;\n state.source.fire('error', /* alloc */ { error });\n } finally {\n bitmap?.close();\n }\n}\n", "export function uploadNativeImage(state, key, texture, image, device, width, height) {\r\n try {\r\n device.queue.copyExternalImageToTexture(\r\n /* alloc */ { source: image },\r\n /* alloc */ { texture: texture.texture },\r\n /* alloc */ [width, height]);\r\n } catch (error) {\r\n texture.texture.destroy();\r\n state.textures.delete(key);\r\n throw error;\r\n }\r\n texture.uploaded = image;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { coreSampler } from '../globals/coreSampler.js';\n\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { uploadCanvasTexture } from './uploadCanvasTexture.js';\nimport { uploadNativeImage } from './uploadNativeImage.js';\n\n\nexport function textureFor(state, key, image) {\n if (!(image instanceof HTMLImageElement) && !(image instanceof HTMLCanvasElement)) {\n throw /* alloc */ new Error('WebGPU native raster layers require image or canvas tiles');\n }\n const { backend, textures, meshes } = state;\n let texture = textures.get(key);\n const url = image.currentSrc || image.src;\n if (!texture || texture.image !== image || texture.url !== url) {\n if (texture) {\n const mesh = meshes.get(key);\n if (mesh) disposeMesh(backend, mesh);\n meshes.delete(key);\n destroyTexture(backend, texture.texture);\n textures.delete(key);\n }\n const width = image.naturalWidth || image.width, height = image.naturalHeight || image.height;\n if (!width || !height) return;\n const { device } = sceneByLayer.get(backend).renderer;\n texture = /* alloc */ {\n device, image, url, format: 'rgba8unorm', uploaded: null,\n texture: device.createTexture(/* alloc */ {\n size: /* alloc */ [width, height], format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: device.createSampler(coreSampler),\n };\n textures.set(key, texture);\n if (image instanceof HTMLCanvasElement) {\n texture.pending = true;\n uploadCanvasTexture(state, key, texture, image, device, width, height);\n } else {\n uploadNativeImage(state, key, texture, image, device, width, height);\n }\n }\n texture.used = true;\n return texture.uploaded === image ? texture : undefined;\n}\n", "import { L } from '../globals/L.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { createMesh } from '../rendering/createMesh.js';\nimport { styleNativeMesh } from './styleNativeMesh.js';\n\nexport function putNativeMesh(state, key, position, color, opacity, texture, uv) {\n const { backend, source, meshes } = state;\n if (!position.length) return;\n let mesh = meshes.get(key);\n if (!mesh || mesh.geometry.attributes.position.data.length !== position.length ||\n mesh.program.uniforms.baseTexture?.value !== texture) {\n const normal = /* alloc */ [];\n let index;\n for (index = 0; index < position.length; index++) normal.push(index % 3 === 1 ? 1 : 0);\n const data = /* alloc */ { position, normal };\n if (uv) data.uv = uv;\n const material = /* alloc */ {\n vertexColors: false, color, opacity, unlit: true, alphaMode: 'BLEND',\n };\n if (texture) material.baseTexture = texture;\n if (mesh) disposeMesh(backend, mesh);\n mesh = createMesh(backend, data, material, 0, source instanceof L.GridLayer ? state.rasterProgram : undefined);\n if (source instanceof L.GridLayer) {\n state.rasterProgram ||= mesh.program;\n mesh.texture = texture;\n }\n meshes.set(key, mesh);\n } else {\n const attribute = mesh.geometry.attributes.position;\n attribute.data.set(position);\n attribute.needsUpdate = true;\n mesh.geometry.bounds = null;\n }\n styleNativeMesh(state, mesh, color, opacity);\n return mesh;\n}\n", "export const defaultMaterial = Object.freeze({});\n", "export const meshBuffer = {\n size: null,\n usage: null\n};\n", "export const nextId = { value: 0 };\n", "/** A fresh, empty scene-graph node. */\nexport function emptyNode() {\n return /* alloc */ {\n position: /* alloc */ [0, 0, 0],\n rotation: /* alloc */ [0, 0, 0],\n scale: /* alloc */ [1, 1, 1],\n worldMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n children: /* alloc */ [],\n highlightRange: /* alloc */ [0, 0],\n visible: true,\n };\n}\n", "export const vertexShader = {\n code: null\n};\n", "export const fragmentShader = {\n code: null\n};\n", "export const pipelineLayout = {\n bindGroupLayouts: [null, null]\n};\n", "/**\n * WGSL twin of getElevation for the vertex shader: bilinear DEM pixels, or the first valid\n * neighbour near no-data (stored as -1e9), else `base`. Expects `dem: texture_2d<f32>`.\n */\nexport const elevationWGSL = /* wgsl */` 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;}`;\n", "export const normalLayout = Object.freeze({\n arrayStride: 12,\n attributes: Object.freeze([Object.freeze({\n shaderLocation: 1,\n offset: 0,\n format: 'float32x3'\n })])\n});\n", "export const colorLayout = Object.freeze({\n arrayStride: 12,\n attributes: Object.freeze([Object.freeze({\n shaderLocation: 2,\n offset: 0,\n format: 'float32x3'\n })])\n});\n", "export const uVLayout = Object.freeze({\n arrayStride: 8,\n attributes: Object.freeze([Object.freeze({\n shaderLocation: 3,\n offset: 0,\n format: 'float32x2'\n })])\n});\n", "export const programLayout = {\n entries: null\n};\n", "export const programEntries = [];\n", "export const meshLayoutEntry = {\n binding: 0,\n visibility: null,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true\n }\n};\n", "export const frameLayoutEntry = {\n binding: 1,\n visibility: null,\n buffer: {\n type: 'uniform'\n }\n};\n", "export const terrainLayoutEntry = {\n binding: 2,\n visibility: null,\n texture: {\n sampleType: 'unfilterable-float',\n viewDimension: '2d'\n }\n};\n", "export const textureLayoutEntries = [{\n binding: null,\n visibility: null,\n texture: {\n sampleType: 'float',\n viewDimension: '2d'\n }\n },\n {\n binding: null,\n visibility: null,\n texture: {\n sampleType: 'float',\n viewDimension: '2d'\n }\n },\n {\n binding: null,\n visibility: null,\n texture: {\n sampleType: 'float',\n viewDimension: '2d'\n }\n },\n {\n binding: null,\n visibility: null,\n texture: {\n sampleType: 'float',\n viewDimension: '2d'\n }\n },\n {\n binding: null,\n visibility: null,\n texture: {\n sampleType: 'float',\n viewDimension: '2d'\n }\n },\n];\n", "export const samplerLayoutEntries = [{\n binding: null,\n visibility: null,\n sampler: {\n type: 'filtering'\n }\n },\n {\n binding: null,\n visibility: null,\n sampler: {\n type: 'filtering'\n }\n },\n {\n binding: null,\n visibility: null,\n sampler: {\n type: 'filtering'\n }\n },\n {\n binding: null,\n visibility: null,\n sampler: {\n type: 'filtering'\n }\n },\n {\n binding: null,\n visibility: null,\n sampler: {\n type: 'filtering'\n }\n },\n];\n", "import { programLayout } from '../globals/programLayout.js';\r\nimport { programEntries } from '../globals/programEntries.js';\r\nimport { meshLayoutEntry } from '../globals/meshLayoutEntry.js';\r\nimport { frameLayoutEntry } from '../globals/frameLayoutEntry.js';\r\nimport { terrainLayoutEntry } from '../globals/terrainLayoutEntry.js';\r\nimport { textureLayoutEntries } from '../globals/textureLayoutEntries.js';\r\nimport { samplerLayoutEntries } from '../globals/samplerLayoutEntries.js';\r\n\r\nexport function createProgramLayout(device, shaders) {\r\n const bindGroupEntries = programEntries;\r\n bindGroupEntries.length = 0;\r\n meshLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;\r\n frameLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;\r\n bindGroupEntries.push(meshLayoutEntry, frameLayoutEntry);\r\n if (shaders.hasTerrain) {\r\n terrainLayoutEntry.visibility = GPUShaderStage.VERTEX;\r\n bindGroupEntries.push(terrainLayoutEntry);\r\n }\r\n let texture, entry, index = 0;\r\n for (texture of shaders.bindings) {\r\n entry = textureLayoutEntries[index];\r\n entry.binding = texture.texture;\r\n entry.visibility = GPUShaderStage.FRAGMENT;\r\n bindGroupEntries.push(entry);\r\n entry = samplerLayoutEntries[index++];\r\n entry.binding = texture.sampler;\r\n entry.visibility = GPUShaderStage.FRAGMENT;\r\n bindGroupEntries.push(entry);\r\n }\r\n const layout = device.createBindGroupLayout((\r\n programLayout.entries = bindGroupEntries,\r\n programLayout\r\n ));\r\n programLayout.entries = null;\r\n return layout;\r\n}\r\n", "export function createProgramUniforms(material) {\r\n const uniforms = /* alloc */ {\r\n baseColor: /* alloc */ { value: material.color || /* alloc */ [1, 1, 1] },\r\n metallic: /* alloc */ { value: material.metallic ?? 0 },\r\n roughness: /* alloc */ { value: material.roughness ?? 0.85 },\r\n opacity: /* alloc */ { value: material.opacity ?? 1 },\r\n alphaCutoff: /* alloc */ { value: material.alphaCutoff ?? 0.5 },\r\n occlusionStrength: /* alloc */ { value: material.occlusionStrength ?? 1 },\r\n emissive: /* alloc */ { value: material.emissive || /* alloc */ [0, 0, 0] },\r\n };\r\n if (material.baseTexture) uniforms.baseTexture = /* alloc */ { value: material.baseTexture };\r\n if (material.metalTexture) uniforms.metalTexture = /* alloc */ { value: material.metalTexture };\r\n if (material.emissiveTexture) uniforms.emissiveTexture = /* alloc */ { value: material.emissiveTexture };\r\n if (material.occlusionTexture) uniforms.occlusionTexture = /* alloc */ { value: material.occlusionTexture };\r\n if (material.roofTexture || material.wallTexture) uniforms.roofTexture = /* alloc */ { value: null };\r\n return uniforms;\r\n}\r\n", "export function textureBinding(bindings, name, enabled) {\n if (!enabled) return '';\n const current = 3 + bindings.length * 2;\n bindings.push(/* alloc */ { name, texture: current, sampler: current + 1 });\n return /* wgsl */ `@group(0)@binding(${current})var ${name}:texture_2d<f32>;@group(0)@binding(${current + 1})var ${name}Sampler:sampler;`;\n}\n", "export function validateRoofMaterial(material) {\r\n let name, value;\r\n for (name of /* alloc */ ['roofTexture', 'wallTexture']) {\r\n value = material[name];\r\n if (value !== undefined && typeof value !== 'boolean' &&\r\n (!Number.isFinite(value) || value < 0 || value > 1)) {\r\n throw /* alloc */ new Error(`${name} must be a boolean or a finite number between 0 and 1`);\r\n }\r\n }\r\n}\r\n", "export function roofVertexShader(material) {\r\n const roofOpacity = Number(material.roofTexture ?? 0);\r\n const wallOpacity = Number(material.wallTexture ?? 0);\r\n return /* wgsl */ ` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${wallOpacity.toFixed(8)},${roofOpacity.toFixed(8)},input.normal.y >= 0.5),((${Boolean(material.roofTexture)} && input.normal.y >= 0.5)||(${Boolean(material.wallTexture)} && abs(input.normal.y)< 0.5))&& !highlighted);`;\r\n}\r\n", "import { roofVertexShader } from './roofVertexShader.js';\r\n\r\nexport function materialVertexShader(material, sparkle, elevationWGSL, hasTerrain, textured, hasRoof) {\r\n const instanceOffset = material.instanced ? ' + input.instanceOffset.xyz' : '';\r\n return /* wgsl */ ` 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;${hasTerrain ? /* wgsl */ `@group(0)@binding(2)var dem:texture_2d<f32>;${elevationWGSL}` : ''} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${material.instanced ? '@location(4) instanceOffset: vec4<f32>,' : ''} ${material.vertexColors ? '@location(2) color: vec3<f32>,' : ''} ${textured ? '@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>,${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''} ${textured ? '@location(3) uv: vec2<f32>,' : ''} ${hasRoof ? '@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${instanceOffset};${hasTerrain ? 'position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;' : ''} let featureVertex = f32(vertexIndex)${material.instanced ? ' + input.instanceOffset.w' : ''};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${material.vertexColors\r\n ? 'select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)'\r\n : '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;${sparkle ? `output.localPosition = input.position${instanceOffset};` : ''} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${textured ? 'output.uv = input.uv;' : ''} ${hasRoof ? roofVertexShader(material) : ''} output.position = frame.projectionMatrix * viewPosition;return output;}`;\r\n}\r\n", "export function materialBaseShader(material, hasBase, hasRoof) {\r\n return /* wgsl */ ` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${hasBase ? 'textureSample(baseTexture, baseTextureSampler, input.uv)' : 'vec4<f32>(1.0)'};let alpha = u.material.z * texel.a;${material.alphaMode === 'MASK' ? 'if (alpha < u.material.w) { discard; }' : ''} ${material.alphaMode === 'BLEND' ? 'if (alpha < 0.01) { discard; }' : ''} var base = ${material.vertexColors ? 'toLinear(min(input.color, vec3<f32>(1.0)))' : 'input.color'} * ${material.baseTexture?.srgb ? 'texel.rgb' : 'toLinear(texel.rgb)'};${hasRoof ? /* wgsl */ ` 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);}` : ''}`;\r\n}\r\n", "import { materialBaseShader } from './materialBaseShader.js';\r\n\r\nexport function materialSurfaceShader(material, sparkle, hasBase, hasMetal, hasEmissive, hasOcclusion, hasRoof) {\r\n return material.unlit ? /* wgsl */ ` let rasterTexel = ${hasBase ? '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)),${material.alphaMode === 'BLEND' ? 'u.material.z * rasterTexel.a' : '1.0'});` : /* wgsl */ `${materialBaseShader(material, hasBase, hasRoof)} let mr = ${hasMetal ? '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 = ${hasOcclusion ? 'mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)' : '1.0'};${sparkle ? /* wgsl */ ` 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 = ${sparkle ? 'vec3<f32>(3.0, 2.6, 1.8) * pointGlow +' : ''}${material.vertexColors\r\n ? ' max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +' : ''} u.emissive.rgb * ${hasEmissive\r\n ? material.emissiveTexture.srgb\r\n ? 'textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb'\r\n : 'toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)'\r\n : '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;${material.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),${material.alphaMode === 'BLEND' ? 'alpha' : '1.0'});`;\r\n}\r\n", "import { defaultMaterial } from '../globals/defaultMaterial.js';\nimport { textureBinding } from '../rendering/textureBinding.js';\nimport { validateRoofMaterial } from './validateRoofMaterial.js';\nimport { materialVertexShader } from './materialVertexShader.js';\nimport { materialSurfaceShader } from './materialSurfaceShader.js';\n\n/** Material WGSL and texture bindings, without a GPU device or Leaflet layer. */\nexport function materialShaders(material = defaultMaterial, sparkle = false, elevationWGSL = '') {\n const hasBase = Boolean(material.baseTexture);\n const hasMetal = Boolean(material.metalTexture);\n const hasEmissive = Boolean(material.emissiveTexture);\n const hasOcclusion = Boolean(material.occlusionTexture);\n const hasRoof = Boolean(material.roofTexture || material.wallTexture);\n validateRoofMaterial(material);\n const hasTerrain = Boolean(material.terrain);\n const textured = hasBase || hasMetal || hasEmissive || hasOcclusion || material.nightLight;\n const vertex = materialVertexShader(material, sparkle, elevationWGSL, hasTerrain, textured, hasRoof);\n const bindings = /* alloc */ [];\n const baseBinding = textureBinding(bindings, 'baseTexture', hasBase);\n const metalBinding = textureBinding(bindings, 'metalTexture', hasMetal);\n const emissiveBinding = textureBinding(bindings, 'emissiveTexture', hasEmissive);\n const occlusionBinding = textureBinding(bindings, 'occlusionTexture', hasOcclusion);\n const roofBinding = textureBinding(bindings, 'roofTexture', hasRoof);\n const fragment = /* wgsl */ ` 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>>;${baseBinding}${metalBinding}${emissiveBinding}${occlusionBinding}${roofBinding} 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>,${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''} ${textured ? '@location(3) uv: vec2<f32>,' : ''} ${hasRoof ? '@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;}${material.nightLight ? /* wgsl */ ` 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);${materialSurfaceShader(material, sparkle, hasBase, hasMetal, hasEmissive, hasOcclusion, hasRoof)}}`;\n return /* alloc */ { vertex, fragment, bindings, textured, hasTerrain };\n}\n", "export async function reportCompilation(backend, pending) {\n let info, message;\n try {\n const infos = await Promise.all(pending);\n let errors = '', errorCount = 0;\n for (info of infos) {\n for (message of info.messages) if (message.type === 'error') errors += `${errorCount++ ? '\\n' : ''}${message.message}`;\n }\n if (errorCount) {\n backend.fire('error', /* alloc */ {\n error: /* alloc */ new Error(`Unable to compile Layer3D WGSL: ${errors}`),\n });\n }\n } catch (error) {\n backend.fire('error', /* alloc */ { error });\n }\n}\n", "import { defaultMaterial } from '../globals/defaultMaterial.js';\nimport { vertexShader } from '../globals/vertexShader.js';\nimport { fragmentShader } from '../globals/fragmentShader.js';\nimport { pipelineLayout as sharedPipelineLayout } from '../globals/pipelineLayout.js';\nimport { elevationWGSL } from '../globals/elevationWGSL.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { positionLayout } from '../globals/positionLayout.js';\nimport { normalLayout } from '../globals/normalLayout.js';\nimport { colorLayout } from '../globals/colorLayout.js';\nimport { uVLayout } from '../globals/uVLayout.js';\nimport { instanceLayout } from '../globals/instanceLayout.js';\nimport { createProgramLayout } from './createProgramLayout.js';\nimport { createProgramUniforms } from './createProgramUniforms.js';\n\n\nimport { materialShaders } from '../shaders/materialShaders.js';\n\nimport { reportCompilation } from './reportCompilation.js';\n\nexport function createProgram(backend, material = defaultMaterial) {\n const shaders = materialShaders(\n material,\n !!backend.options.nightSparkle,\n material.terrain ? elevationWGSL : ''\n );\n const vertex = sceneByLayer.get(backend).renderer.device.createShaderModule((\n vertexShader.code = shaders.vertex,\n vertexShader\n ));\n vertexShader.code = null;\n const fragment = sceneByLayer.get(backend).renderer.device.createShaderModule((\n fragmentShader.code = shaders.fragment,\n fragmentShader\n ));\n fragmentShader.code = null;\n reportCompilation(backend, /* alloc */ [\n vertex.getCompilationInfo(),\n fragment.getCompilationInfo()\n ]);\n const vertexBuffers = /* alloc */ [\n positionLayout,\n normalLayout,\n material.vertexColors ? colorLayout : null,\n shaders.textured ? uVLayout : null,\n ];\n if (material.instanced) vertexBuffers.push(instanceLayout);\n const bindGroupLayout = createProgramLayout(sceneByLayer.get(backend).renderer.device, shaders);\n const pipelineLayout = sceneByLayer.get(backend).renderer.device.createPipelineLayout((\n sharedPipelineLayout.bindGroupLayouts[0] = bindGroupLayout,\n sharedPipelineLayout.bindGroupLayouts[1] = sceneByLayer.get(backend).renderer.sunlight.layout,\n sharedPipelineLayout\n ));\n sharedPipelineLayout.bindGroupLayouts[0] = null;\n sharedPipelineLayout.bindGroupLayouts[1] = null;\n const uniforms = createProgramUniforms(material);\n return /* alloc */ {\n device: sceneByLayer.get(backend).renderer.device,\n vertex,\n fragment,\n bindings: shaders.bindings,\n vertexBuffers,\n bindGroupLayout,\n pipelineLayout,\n pipelineCache: /* alloc */ new Map(),\n cullMode: material.doubleSided ? 'none' : 'back',\n transparent: material.alphaMode === 'BLEND',\n depthWrite: material.depthWrite ?? material.alphaMode !== 'BLEND',\n depthTest: material.depthTest !== false,\n terrain: material.terrain,\n nightLight: Boolean(material.nightLight),\n nightSparkle: !!backend.options.nightSparkle,\n uniforms,\n _layerMaterial: material,\n };\n}\n", "import { defaultMaterial } from '../globals/defaultMaterial.js';\nimport { meshBuffer } from '../globals/meshBuffer.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { nextId } from '../globals/nextId.js';\n\n\n\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { createProgram } from './createProgram.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\n/**\n * Add a non-indexed, vertex-coloured mesh from flat vec3 arrays `{ position, normal, color }` in layer-local metres.\n * `usage` adds GPUBufferUsage flags to the vertex buffers (e.g. STORAGE for compute passes).\n * A supplied `program` shares compiled shaders and pipelines across compatible meshes.\n */\n\nexport function createMesh(backend, data, material = defaultMaterial, usage = 0, program) {\n const { device } = sceneByLayer.get(backend).renderer, attributes = /* alloc */ {};\n let name, values, array, size, buffer;\n for ([name, values] of Object.entries(data)) {\n array = /* alloc */ new Float32Array(values);\n size = name === 'uv' ? 2 : 3;\n buffer = device.createBuffer((\n meshBuffer.size = Math.max(4, array.byteLength),\n meshBuffer.usage = GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | usage,\n meshBuffer\n ));\n\n device.queue.writeBuffer(buffer, 0, array);\n attributes[name] = /* alloc */ { size, data: array, count: array.length / size, buffer };\n }\n const mesh = /* alloc */ {\n ...emptyNode(),\n device,\n geometry: /* alloc */ { device, attributes, drawRange: /* alloc */ { start: 0, count: attributes.position.count } },\n program: program || createProgram(backend, /* alloc */ { vertexColors: true, doubleSided: true, ...material }),\n id: nextId.value++, renderOrder: 0, extras: /* alloc */ {},\n };\n setParent(mesh, sceneByLayer.get(backend).root);\n update(backend);\n return mesh;\n}\n", "import { coreQuadIndices } from '../globals/coreQuadIndices.js';\nimport { coreQuadUV } from '../globals/coreQuadUV.js';\nimport { coreWhite } from '../globals/coreWhite.js';\nimport { textureFor } from './textureFor.js';\nimport { putNativeMesh } from './putNativeMesh.js';\n\n\nexport function quadNativeMesh(state, key, image, corners, opacity) {\n const texture = textureFor(state, key, image);\n if (!texture) return;\n const indices = coreQuadIndices;\n const position = /* alloc */ [];\n const uv = /* alloc */ [];\n let index;\n for (index of indices) {\n position.push(...corners[index]);\n uv.push(coreQuadUV[index * 2], coreQuadUV[index * 2 + 1]);\n }\n return putNativeMesh(state, key, position, coreWhite, opacity, texture, uv);\n}\n", "import { radians } from '../globals/radians.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\r\nexport function localPosition(state, latlng) {\r\n const { map, backend } = state, crs = map.options.crs;\r\n const origin = crs.project(sceneByLayer.get(backend).location), point = crs.project(latlng);\r\n const metres = Math.cos(sceneByLayer.get(backend).location.lat * radians);\r\n return /* alloc */ [(point.x - origin.x) * metres, 0, -(point.y - origin.y) * metres];\r\n}\r\n", "import { localPosition } from './localPosition.js';\n\nexport function boundsQuad(state, bounds) {\n const positions = /* alloc */ [];\n let i, corner;\n for (i = 0; i < 4; i++) {\n corner = i === 0 ? bounds.getNorthWest() : i === 1 ? bounds.getNorthEast()\n : i === 2 ? bounds.getSouthWest() : bounds.getSouthEast();\n positions.push(localPosition(state, corner));\n }\n return positions;\n}\n", "import { quadNativeMesh } from './quadNativeMesh.js';\nimport { boundsQuad } from './boundsQuad.js';\n\nexport function syncImageOverlay(state) {\r\n const { source } = state;\r\n if (source._image?.complete && source._image.naturalWidth) {\r\n quadNativeMesh(state, 'image', source._image, boundsQuad(state, source.getBounds()), source.options.opacity ?? 1);\r\n }\r\n}\n", "export const coreMatrixKeys = Object.freeze([\n 'm11', 'm12', 'm13', 'm14', 'm21', 'm22', 'm23', 'm24',\n 'm31', 'm32', 'm33', 'm34', 'm41', 'm42', 'm43', 'm44',\n]);\n", "import { L } from '../globals/L.js';\nimport { radians } from '../globals/radians.js';\n\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nexport function markerCameraIconPoint(marker, x, y) {\n let rotation = marker.options.rotation + (marker.options.rotateWithView ? mapGetBearing(marker._map) * radians : 0);\n if (marker.options.keepUpright && Math.cos(rotation) < 0) rotation += Math.PI;\n const scale = marker.options.scale;\n return /* alloc */ new L.Point((x * Math.cos(rotation) - y * Math.sin(rotation)) * scale,\n (x * Math.sin(rotation) + y * Math.cos(rotation)) * scale);\n}\n", "export function transformNativePoint(target, matrix, x, y, z, w) {\r\n target.x = matrix.m11 * x + matrix.m21 * y + matrix.m31 * z + matrix.m41 * w;\r\n target.y = matrix.m12 * x + matrix.m22 * y + matrix.m32 * z + matrix.m42 * w;\r\n target.z = matrix.m13 * x + matrix.m23 * y + matrix.m33 * z + matrix.m43 * w;\r\n target.w = matrix.m14 * x + matrix.m24 * y + matrix.m34 * z + matrix.m44 * w;\r\n return target;\r\n}\r\n", "export function markerImageBounds(state, key, image) {\r\n const options = state.source.options.icon.options;\r\n const dimensions = options[key === 'shadow' ? 'shadowSize' : 'iconSize'];\r\n const bounds = state.markerImageBounds ||= /* alloc */ [0, 0, 0, 0];\r\n bounds[0] = dimensions ? dimensions.x ?? dimensions[0] : image.naturalWidth;\r\n bounds[1] = dimensions ? dimensions.y ?? dimensions[1] : image.naturalHeight;\r\n const anchor = (key === 'shadow' && options.shadowAnchor) || options.iconAnchor;\r\n bounds[2] = anchor ? anchor.x ?? anchor[0] : Math.floor(bounds[0] / 2);\r\n bounds[3] = anchor ? anchor.y ?? anchor[1] : Math.floor(bounds[1] / 2);\r\n return bounds;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { coreMatrixKeys } from '../globals/coreMatrixKeys.js';\nimport { markerCameraIconPoint } from './markerCameraIconPoint.js';\n\nimport { localPosition } from './localPosition.js';\n\nimport { transformNativePoint } from './transformNativePoint.js';\nimport { markerImageBounds } from './markerImageBounds.js';\n\nexport function markerQuadCorners(state, key, image) {\n const { source, map, backend } = state;\n const position = localPosition(state, source.getLatLng());\n const size = map.getSize();\n const matrices = state.markerMatrices ||= /* alloc */ {\n root: /* alloc */ new DOMMatrix(),\n camera: /* alloc */ new DOMMatrix(),\n point: /* alloc */ { x: 0, y: 0, z: 0, w: 1 },\n };\n const root = matrices.root, camera = matrices.camera, point = matrices.point;\n const worldMatrix = sceneByLayer.get(backend).root.worldMatrix, projection = sceneByLayer.get(backend).camera.projectionViewMatrix;\n let i, keyName;\n for (i = 0; i < 16; i++) {\n keyName = coreMatrixKeys[i];\n root[keyName] = worldMatrix[i];\n camera[keyName] = projection[i];\n }\n transformNativePoint(point, root, position[0], position[1], position[2], 1);\n transformNativePoint(point, camera, point.x, point.y, point.z, point.w);\n const clipX = point.x, clipY = point.y, clipZ = point.z, clipW = point.w;\n camera.invertSelf();\n root.invertSelf();\n const [width, height, anchorX, anchorY] = markerImageBounds(state, key, image);\n const centerX = (clipX / clipW + 1) * size.x / 2, centerY = (1 - clipY / clipW) * size.y / 2;\n const left = centerX - anchorX;\n const top = centerY - anchorY;\n const corners = /* alloc */ [];\n let pointX, pointY, offset, x, y;\n for (i = 0; i < 4; i++) {\n pointX = left + (i % 2 ? width : 0);\n pointY = top + (i < 2 ? 0 : height);\n offset = markerCameraIconPoint(source, pointX - centerX, pointY - centerY);\n x = centerX + offset.x, y = centerY + offset.y;\n transformNativePoint(point, camera, x / size.x * 2 - 1, 1 - y / size.y * 2, clipZ / clipW, 1);\n transformNativePoint(point, root, point.x / point.w, point.y / point.w, point.z / point.w, 1);\n corners.push(/* alloc */ [point.x, point.y, point.z]);\n }\n return corners;\n}\n", "import { quadNativeMesh } from './quadNativeMesh.js';\nimport { markerQuadCorners } from './markerQuadCorners.js';\n\nexport function syncMarker(state) {\n const { source } = state;\n let i, key, image, mesh;\n for (i = 0; i < 2; i++) {\n key = i ? 'icon' : 'shadow';\n image = i ? source._icon : source._shadow;\n if (!(image instanceof HTMLImageElement) || !image.complete || !image.naturalWidth) continue;\n mesh = quadNativeMesh(state, key, image, markerQuadCorners(state, key, image), source.options.opacity ?? 1);\n if (key === 'shadow' && mesh) mesh.renderOrder -= 100 * 1e6;\n }\n}\n", "export const geometryPixelStates = [];\n", "import { L } from '../globals/L.js';\nimport { visit } from './visit.js';\nimport { dashValues } from './dashValues.js';\nimport { circleGeometry } from './circleGeometry.js';\n\n/** Leaflet paths become flat triangles; pixel-sized strokes are rebuilt on zoom. */\nexport function nativeGeometry(source, map, point) {\n const fill = /* alloc */ [];\n const stroke = /* alloc */ [];\n const options = source.options;\n const width = Number(options.weight) || 0;\n const dash = dashValues(options);\n const context = /* alloc */ { fill, stroke, options, width, dash, point, map };\n if (source instanceof L.CircleMarker) {\n circleGeometry(source, context);\n } else {\n const closed = source instanceof L.Polygon;\n visit(context, source.getLatLngs(), closed);\n }\n return /* alloc */ { fill, stroke };\n}\n", "import { L } from '../globals/L.js';\nimport { polygon } from './polygon.js';\n\nexport function visit(context, coordinates, closed) {\n if (!coordinates.length) return;\n let child;\n if (coordinates[0] instanceof L.LatLng) polygon(context, /* alloc */ [coordinates], closed);\n else if (closed && coordinates[0][0] instanceof L.LatLng) polygon(context, coordinates, closed);\n else for (child of coordinates) visit(context, child, closed);\n}\n", "export function triangle(point, target, a, b, c) {\r\n return target.push(...point(a), ...point(b), ...point(c));\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { triangle } from './nativeTriangle.js';\r\nimport { disk } from './disk.js';\r\n\r\nexport function segment(context, a, b, startCap, endCap) {\r\n const { options, width, stroke, point } = context;\r\n const radius = width / 2;\r\n const length = a.distanceTo(b);\r\n if (!length) return;\r\n const direction = b.subtract(a).divideBy(length);\r\n const normal = /* alloc */ new L.Point(-direction.y * radius, direction.x * radius);\r\n if (options.lineCap === 'square') {\r\n if (startCap) a = a.subtract(direction.multiplyBy(radius));\r\n if (endCap) b = b.add(direction.multiplyBy(radius));\r\n }\r\n triangle(point, stroke, a.add(normal), a.subtract(normal), b.add(normal));\r\n triangle(point, stroke, b.add(normal), a.subtract(normal), b.subtract(normal));\r\n if (options.lineCap === 'round') {\r\n if (startCap) disk(point, a, radius, stroke);\r\n if (endCap) disk(point, b, radius, stroke);\r\n }\r\n}\r\n", "export const tau = 2 * Math.PI;\r\n", "import { tau } from '../globals/tau.js';\nimport { L } from '../globals/L.js';\nexport function diskAt(center, radius, radiusY, count, index) {\r\n return /* alloc */ new L.Point(center.x + radius * Math.cos(index * tau / count),\r\n center.y + radiusY * Math.sin(index * tau / count));\r\n}\r\n", "import { triangle } from './nativeTriangle.js';\nimport { diskAt } from './diskAt.js';\n\nexport function disk(point, center, radius, target, radiusY = radius) {\n if (!(radius > 0) || !(radiusY > 0)) return;\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(radius))));\n let i;\n for (i = 0; i < count; i++) {\n triangle(point, target, center, diskAt(center, radius, radiusY, count, i), diskAt(center, radius, radiusY, count, i + 1));\n }\n}\n", "import { L } from '../globals/L.js';\r\nimport { triangle } from './nativeTriangle.js';\r\nimport { disk } from './disk.js';\r\n\r\nexport function lineJoin(context, points, i, b, length) {\r\n const { options, width, point, stroke } = context;\r\n const a = points[i], radius = width / 2;\r\n if (options.lineJoin === 'round') {\r\n disk(point, a, radius, stroke);\r\n return;\r\n }\r\n const previous = a.subtract(points[(i + points.length - 1) % points.length]);\r\n const previousLength = Math.hypot(previous.x, previous.y);\r\n if (!previousLength || !length) return;\r\n const incoming = previous.divideBy(previousLength), outgoing = b.subtract(a).divideBy(length);\r\n const side = incoming.x * outgoing.y - incoming.y * outgoing.x > 0 ? -1 : 1;\r\n const n1 = /* alloc */ new L.Point(-incoming.y * side, incoming.x * side);\r\n const n2 = /* alloc */ new L.Point(-outgoing.y * side, outgoing.x * side);\r\n const from = a.add(n1.multiplyBy(radius)), to = a.add(n2.multiplyBy(radius));\r\n const denominator = 1 + n1.x * n2.x + n1.y * n2.y;\r\n const miter = denominator > 0 ? n1.add(n2).multiplyBy(radius / denominator) : null;\r\n triangle(point, stroke, from, a, to);\r\n if (options.lineJoin === 'miter' && miter && Math.hypot(miter.x, miter.y) <= radius * 4) {\r\n triangle(point, stroke, from, a.add(miter), to);\r\n }\r\n}\r\n", "import { segment } from './segment.js';\r\n\r\nexport function dashedSegment(context, a, b, length, distance, period) {\r\n const dash = context.dash;\r\n let offset = 0, phase, index, end, delta;\r\n while (offset < length) {\r\n phase = ((distance + offset) % period + period) % period, index = 0;\r\n while (phase >= dash[index]) phase -= dash[index++];\r\n end = Math.min(length, offset + dash[index] - phase);\r\n if (index % 2 === 0) {\r\n delta = b.subtract(a).divideBy(length);\r\n segment(context, a.add(delta.multiplyBy(offset)), a.add(delta.multiplyBy(end)), true, true);\r\n }\r\n offset = end;\r\n }\r\n}\r\n", "import { segment } from './segment.js';\r\nimport { lineJoin } from './lineJoin.js';\r\nimport { dashedSegment } from './dashedSegment.js';\r\n\r\nexport function line(context, points, closed) {\r\n const { options, width, dash } = context;\r\n if (!options.stroke || width <= 0 || points.length < 2) return;\r\n let distance = Number(options.dashOffset) || 0;\r\n let period = 0, value, i, a, b, length;\r\n for (value of dash) period += value;\r\n for (i = 0; i < points.length - (closed ? 0 : 1); i++) {\r\n a = points[i], b = points[(i + 1) % points.length], length = a.distanceTo(b);\r\n if (!dash.length) {\r\n segment(context, a, b, !closed && i === 0, !closed && i === points.length - 2);\r\n if (closed || i > 0) lineJoin(context, points, i, b, length);\r\n } else {\r\n dashedSegment(context, a, b, length, distance, period);\r\n }\r\n distance += length;\r\n }\r\n}\r\n", "export function minimumX(ring) {\n let minimum = Infinity;\n let point;\n for (point of ring) minimum = Math.min(minimum, point.x);\n return minimum;\n}\n", "export function mergeHoles(source, target, start, width) {\r\n const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);\r\n let left = start, right = middle, output;\r\n for (output = start; output < end; output++) {\r\n if (left < middle && (right >= end || source[left].x <= source[right].x)) {\r\n target[output] = source[left++];\r\n } else {\r\n target[output] = source[right++];\r\n }\r\n }\r\n}\r\n", "import { minimumX } from './minimumX.js';\nimport { mergeHoles } from './mergeHoles.js';\n\nexport function sortHoles(holes) {\n if (holes.length < 2) return holes;\n const buffer = /* alloc */ new Array(holes.length);\n const entries = /* alloc */ [];\n let ring, width, start, previous, i;\n for (ring of holes) entries.push(/* alloc */ { ring, x: minimumX(ring) });\n let source = entries, target = buffer;\n for (width = 1; width < entries.length; width *= 2) {\n for (start = 0; start < entries.length; start += width * 2) {\n mergeHoles(source, target, start, width);\n }\n previous = source;\n source = target;\n target = previous;\n }\n for (i = 0; i < holes.length; i++) holes[i] = source[i].ring;\n return holes;\n}\n", "export function cross(a, b, c) {\r\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\r\n}\r\n", "export function equal(a, b) {\r\n return a.x === b.x && a.y === b.y;\r\n}\r\n", "import { cross } from './cross.js';\nimport { equal } from './equal.js';\n\nexport function clean(ring) {\n let changed = true;\n let i, a, b, c;\n while (changed && ring.length > 3) {\n changed = false;\n for (i = 0; i < ring.length; i++) {\n a = ring[(i + ring.length - 1) % ring.length], b = ring[i], c = ring[(i + 1) % ring.length];\n if (equal(a, b) || Math.abs(cross(a, b, c)) < 1e-10) {\n ring.splice(i, 1); changed = true; break;\n }\n }\n }\n if (ring.length < 3) throw /* alloc */ new Error('Degenerate polygon ring');\n return ring;\n}\n", "/**\n * @returns {boolean} Whether the `{x, y}` points are in clockwise order.\n */\n\nexport function isClockWise(points) {\n let area = 0;\n let i, a, b;\n for (i = 0; i < points.length; i++) {\n a = points[i], b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n return area < 0;\n}\n", "import { clean } from './clean.js';\r\nimport { isClockWise } from './isClockWise.js';\r\n\r\nexport function polygonRings(paths, vertices) {\r\n const rings = /* alloc */ [];\r\n let offset = 0, index, path, ring;\r\n for (index = 0; index < paths.length; index++) {\r\n path = paths[index];\r\n ring = clean(vertices.slice(offset, offset += path.length));\r\n if (isClockWise(ring) !== Boolean(index)) ring.reverse();\r\n rings.push(ring);\r\n }\r\n return rings;\r\n}\r\n", "export function inside(point, ring) {\n let result = false;\n let i, j, a, b;\n for (i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n a = ring[i], b = ring[j];\n if ((a.y > point.y) !== (b.y > point.y) &&\n point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) result = !result;\n }\n return result;\n}\n", "import { inside } from './inside.js';\n\nexport function insideHole(point, rings) {\n let i;\n for (i = 1; i < rings.length; i++) if (inside(point, rings[i])) return true;\n return false;\n}\n", "export function on(p, q, r) {\r\n return Math.min(p.x, q.x) <= r.x && r.x <= Math.max(p.x, q.x) &&\r\n Math.min(p.y, q.y) <= r.y && r.y <= Math.max(p.y, q.y);\r\n}\r\n", "import { equal } from './equal.js';\r\nimport { cross } from './cross.js';\r\nimport { on } from './on.js';\r\n\r\nexport function intersects(a, b, c, d) {\r\n if (equal(a, c) || equal(a, d) || equal(b, c) || equal(b, d)) return false;\r\n const abC = cross(a, b, c), abD = cross(a, b, d), cdA = cross(c, d, a), cdB = cross(c, d, b);\r\n return abC * abD < 0 && cdA * cdB < 0 ||\r\n abC === 0 && on(a, b, c) || abD === 0 && on(a, b, d) ||\r\n cdA === 0 && on(c, d, a) || cdB === 0 && on(c, d, b);\r\n}\r\n", "import { intersects } from './intersects.js';\n\nexport function crossesRing(a, b, ring) {\n let i;\n for (i = 0; i < ring.length; i++) {\n if (intersects(a, b, ring[i], ring[(i + 1) % ring.length])) return true;\n }\n return false;\n}\n", "import { crossesRing } from './crossesRing.js';\n\nexport function crossesBoundary(a, b, polygon, rings) {\n if (crossesRing(a, b, polygon)) return true;\n let i;\n for (i = 1; i < rings.length; i++) if (crossesRing(a, b, rings[i])) return true;\n return false;\n}\n", "import { inside } from './inside.js';\r\nimport { insideHole } from './insideHole.js';\r\nimport { crossesBoundary } from './crossesBoundary.js';\r\n\r\nexport function connectHole(polygon, hole, rings, mid) {\r\n let h2 = -1, p2 = -1, distance = Infinity, h, p, a, b, d;\r\n for (h = 0; h < hole.length; h++) for (p = 0; p < polygon.length; p++) {\r\n a = hole[h], b = polygon[p], d = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\r\n if (d >= distance) continue;\r\n mid.x = (a.x + b.x) / 2; mid.y = (a.y + b.y) / 2;\r\n if (!inside(mid, rings[0]) || insideHole(mid, rings)) continue;\r\n if (crossesBoundary(a, b, polygon, rings)) continue;\r\n h2 = h; p2 = p; distance = d;\r\n }\r\n if (h2 < 0) throw /* alloc */ new Error('Unable to connect polygon hole');\r\n return /* alloc */ [...polygon.slice(0, p2 + 1), ...hole.slice(h2), ...hole.slice(0, h2 + 1),\r\n polygon[p2], ...polygon.slice(p2 + 1)];\r\n}\r\n", "import { equal } from './equal.js';\nimport { cross } from './cross.js';\n\nexport function containsVertex(polygon, a, b, c) {\n let p;\n for (p of polygon) {\n if (!equal(p, a) && !equal(p, b) && !equal(p, c) &&\n cross(a, b, p) >= 0 && cross(b, c, p) >= 0 && cross(c, a, p) >= 0) return true;\n }\n return false;\n}\n", "import { cross } from './cross.js';\r\nimport { containsVertex } from './containsVertex.js';\r\n\r\nexport function clipEars(polygon) {\r\n const result = /* alloc */ [];\r\n let clipped, i, a, b, c, p;\r\n while (polygon.length > 3) {\r\n clipped = false;\r\n for (i = 0; i < polygon.length; i++) {\r\n a = polygon[(i + polygon.length - 1) % polygon.length], b = polygon[i], c = polygon[(i + 1) % polygon.length];\r\n if (cross(a, b, c) <= 1e-10) continue;\r\n if (containsVertex(polygon, a, b, c)) continue;\r\n result.push(/* alloc */ [a.index, b.index, c.index]); polygon.splice(i, 1); clipped = true; break;\r\n }\r\n if (!clipped) throw /* alloc */ new Error('Unable to triangulate polygon: invalid or self-intersecting rings');\r\n }\r\n if (cross(...polygon) > 1e-10) {\r\n const triangle = /* alloc */ [];\r\n for (p of polygon) triangle.push(p.index);\r\n result.push(triangle);\r\n }\r\n return result;\r\n}\r\n", "export function area(ring) {\n let sum = 0;\n let i, p, q;\n for (i = 0; i < ring.length; i++) {\n p = ring[i], q = ring[(i + 1) % ring.length];\n sum += p.x * q.y - q.x * p.y;\n }\n return Math.abs(sum) / 2;\n}\n", "import { area } from './area.js';\r\nimport { cross } from './cross.js';\r\n\r\nexport function validateArea(rings, vertices, result) {\r\n let holeArea = 0, actual = 0, i, triangle;\r\n for (i = 1; i < rings.length; i++) holeArea += area(rings[i]);\r\n const expected = area(rings[0]) - holeArea;\r\n for (triangle of result) actual += cross(vertices[triangle[0]], vertices[triangle[1]], vertices[triangle[2]]) / 2;\r\n if (expected <= 0 || Math.abs(actual - expected) > Math.max(1e-7, expected * 1e-8)) throw /* alloc */ new Error('Polygon triangulation area mismatch');\r\n}\r\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\nimport { sortHoles } from './sortHoles.js';\nimport { polygonRings } from './polygonRings.js';\nimport { connectHole } from './connectHole.js';\nimport { clipEars } from './clipEars.js';\nimport { validateArea } from './validateArea.js';\n\n\n/**\n * Triangulates a polygon given as `{x, y}` points.\n * Rings omit the repeated closing point; winding is normalized internally.\n * Vertex indices remain relative to the original inputs after duplicate/collinear\n * cleanup. Hole bridges duplicate endpoints, not source vertices.\n * @param {Object[]} contour Outer boundary.\n * @param {Object[][]} [holes] Interior boundaries.\n *\n * @returns {number[][]} Triangles as indices in `[...contour, ...holes.flat()]`.\n */\n\nexport function triangulate(contour, holes = geometryEmpty) {\n const paths = /* alloc */ [contour, ...holes];\n const points = paths.flat();\n let p, index, hole;\n for (p of points) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) throw /* alloc */ new Error('Invalid polygon coordinates');\n }\n // Translate near the origin to avoid cancellation with geographic coordinates.\n const vertices = /* alloc */ [];\n for (index = 0; index < points.length; index++) {\n p = points[index];\n vertices.push(/* alloc */ { x: p.x - contour[0].x, y: p.y - contour[0].y, index });\n }\n // Remove zero-area corners before connecting holes; keep original vertex indices.\n const rings = polygonRings(paths, vertices);\n let polygon = rings[0].slice();\n // A bridge must stay inside the outer boundary, outside every hole, and cross no edge.\n // ponytail: quadratic ear clipping for building footprints; use spatial indexing for large rings.\n const holesToConnect = sortHoles(rings.slice(1));\n const mid = holesToConnect.length ? /* alloc */ { x: 0, y: 0 } : null;\n for (hole of holesToConnect) {\n polygon = connectHole(polygon, hole, rings, mid);\n }\n // Clip a convex corner only when no other vertex is inside/on its triangle.\n const result = clipEars(polygon);\n // Reject incomplete coverage instead of silently emitting a partial roof.\n validateArea(rings, vertices, result);\n return result;\n}\n", "import { triangle } from './nativeTriangle.js';\nimport { line } from './line.js';\nimport { triangulate } from '../triangulation/triangulate.js';\n\nexport function polygon(context, rings, closed) {\n const { options, fill, point, map } = context;\n const projected = /* alloc */ [];\n let ring, path, latlng, indices;\n for (ring of rings) {\n path = /* alloc */ [];\n for (latlng of ring) path.push(map.project(latlng));\n projected.push(path);\n }\n if (closed && options.fill && projected[0]?.length >= 3) {\n const valid = /* alloc */ [];\n for (ring of projected) if (ring.length >= 3) valid.push(ring);\n const vertices = valid.flat();\n for (indices of triangulate(valid[0], valid.slice(1))) {\n triangle(point, fill, vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]);\n }\n }\n for (ring of projected) line(context, ring, closed);\n}\n", "export function dashValues(options) {\r\n const values = Array.isArray(options.dashArray) ? options.dashArray :\r\n String(options.dashArray || '').trim().split(/[ ,]+/);\r\n const dash = /* alloc */ [];\r\n let value, allZero = true;\r\n for (value of values) dash.push(Number(value));\r\n for (value of dash) {\r\n if (!Number.isFinite(value) || value < 0) throw /* alloc */ new Error('Invalid Leaflet dashArray');\r\n if (value !== 0) allZero = false;\r\n }\r\n if (allZero) dash.length = 0;\r\n if (dash.length % 2) dash.push(...dash);\r\n return dash;\r\n}\r\n", "import { L } from '../globals/L.js';\r\nimport { disk } from './disk.js';\r\nimport { circleAt } from './circleAt.js';\r\nimport { line } from './line.js';\r\nimport { triangle } from './nativeTriangle.js';\r\n\r\nexport function circleGeometry(source, context) {\r\n const { map, point, fill, stroke, options, dash, width } = context;\r\n const center = map.project(source.getLatLng());\r\n let radius = source.getRadius(), radiusY = radius, index, i;\r\n if (source instanceof L.Circle) {\r\n source._project();\r\n const projected = source._point.add(map.getPixelOrigin());\r\n center.x = projected.x;\r\n center.y = projected.y;\r\n radius = source._radius;\r\n radiusY = source._radiusY || radius;\r\n }\r\n if (options.fill) disk(point, center, radius, fill, radiusY);\r\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(Math.max(radius, radiusY)))));\r\n if (dash.length) {\r\n const points = /* alloc */ [];\r\n for (index = 0; index < count; index++) points.push(circleAt(center, radius, radiusY, count, index));\r\n line(context, points, true);\r\n }\r\n else if (options.stroke && width > 0) {\r\n for (i = 0; i < count; i++) {\r\n triangle(point, stroke, circleAt(center, radius, radiusY, count, i, width / 2),\r\n circleAt(center, radius, radiusY, count, i, -width / 2), circleAt(center, radius, radiusY, count, i + 1, width / 2));\r\n triangle(point, stroke, circleAt(center, radius, radiusY, count, i + 1, width / 2),\r\n circleAt(center, radius, radiusY, count, i, -width / 2), circleAt(center, radius, radiusY, count, i + 1, -width / 2));\r\n }\r\n }\r\n}\r\n", "import { tau } from '../globals/tau.js';\nimport { L } from '../globals/L.js';\nexport function circleAt(center, radius, radiusY, count, index, offset = 0) {\r\n const angle = index * tau / count;\r\n return /* alloc */ new L.Point(center.x + Math.max(0, radius + offset) * Math.cos(angle),\r\n center.y + Math.max(0, radiusY + offset) * Math.sin(angle));\r\n}\r\n", "import { localPosition } from './localPosition.js';\n\nexport function localPixel(state, point) {\r\n return localPosition(state, state.map.unproject(point));\r\n}\n", "import { geometryPixelStates } from '../globals/geometryPixelStates.js';\n\nimport { localPixel } from './localPixel.js';\n\nexport function localPixelForGeometry(point) {\r\n return localPixel(geometryPixelStates[geometryPixelStates.length - 1], point);\r\n}\n", "export function toSRGB(value) {\n return value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055;\n}\n", "export function channel(n, h, l, a) {\n const k = (n + h * 12) % 12;\n return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n}\n", "import { toSRGB } from \"./toSRGB.js\";\nimport { channel } from \"./channel.js\";\n\n/**\n * HSL inputs are linear-space to preserve the original building styling.\n * Numeric/CSS/RGB inputs are already sRGB; CSS alpha is not used for extrusion.\n * @param {number|string|Object} value 0xRRGGBB, CSS color, {r,g,b}, or {h,s,l} in 0..1.\n * @returns {Object} sRGB {r,g,b} components in 0..1.\n */\n\nexport function parseColor(value) {\n if (value && typeof value === 'object' && 'h' in value) {\n const a = value.s * Math.min(value.l, 1 - value.l);\n return /* alloc */ {\n r: toSRGB(channel(0, value.h, value.l, a)),\n g: toSRGB(channel(8, value.h, value.l, a)),\n b: toSRGB(channel(4, value.h, value.l, a))\n };\n }\n if (value && typeof value === 'object' && 'r' in value) {\n return value;\n }\n if (typeof value === 'number') {\n return /* alloc */ {\n r: (value >> 16 & 255) / 255,\n g: (value >> 8 & 255) / 255,\n b: (value & 255) / 255,\n };\n }\n if (typeof value !== 'string' || !CSS.supports('color', value)) {\n throw /* alloc */ new Error('Invalid 3D color');\n }\n const context = document.createElement('canvas').getContext('2d');\n context.fillStyle = value;\n context.fillRect(0, 0, 1, 1);\n const [r, g, b] = context.getImageData(0, 0, 1, 1).data;\n return /* alloc */ {\n r: r / 255,\n g: g / 255,\n b: b / 255\n };\n}\n", "import { geometryPixelStates } from '../globals/geometryPixelStates.js';\n\n\nimport { nativeGeometry } from '../geometry/nativeGeometry.js';\nimport { localPixelForGeometry } from './localPixelForGeometry.js';\nimport { parseColor } from '../utils/parseColor.js';\nimport { putNativeMesh } from './putNativeMesh.js';\n\nexport function syncVectorLayer(state) {\n const { source } = state;\n geometryPixelStates.push(state);\n let geometry;\n try {\n geometry = nativeGeometry(source, state.map, localPixelForGeometry);\n } finally {\n geometryPixelStates.pop();\n }\n const { fill, stroke } = geometry;\n let i, key, positions, color, opacity, r, g, b;\n for (i = 0; i < 2; i++) {\n key = i ? 'stroke' : 'fill';\n positions = i ? stroke : fill;\n color = i ? source.options.color : source.options.fillColor || source.options.color;\n opacity = i ? source.options.opacity : source.options.fillOpacity;\n if (!positions.length) continue;\n ({ r, g, b } = parseColor(color));\n putNativeMesh(state, key, positions, /* alloc */ [r, g, b], opacity ?? 1);\n }\n}\n", "import { disposeMesh } from '../rendering/disposeMesh.js';\r\nimport { destroyTexture } from '../rendering/destroyTexture.js';\r\n\r\nexport function pruneNativeResources(state) {\r\n const { meshes, textures, backend } = state;\r\n let mesh, texture, key;\r\n for ([key, mesh] of meshes) {\r\n if (mesh._nativeUsed) continue;\r\n disposeMesh(backend, mesh);\r\n meshes.delete(key);\r\n texture = textures.get(key);\r\n if (texture) destroyTexture(backend, texture.texture);\r\n textures.delete(key);\r\n }\r\n for ([key, texture] of textures) {\r\n if (texture.used) continue;\r\n destroyTexture(backend, texture.texture);\r\n textures.delete(key);\r\n }\r\n}\r\n", "import { synchronizeNativeLayer } from './synchronizeNativeLayer.js';\r\n\r\nexport function beforeNativeRender(state) {\r\n try {\r\n synchronizeNativeLayer(state);\r\n } catch (error) {\r\n state.failed = true;\r\n state.source.fire('error', /* alloc */ { error });\r\n }\r\n}\r\n", "import { pendingUpdates } from '../globals/pendingUpdates.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingUpdates() {\n const updates = /* alloc */ [...pendingUpdates];\n pendingUpdates.clear();\n let failure;\n let backend;\n for (backend of updates) {\n sceneByLayer.get(backend)._frame = null;\n if (sceneByLayer.get(backend)._shared !== backend || !sceneByLayer.get(backend).renderer) continue;\n try {\n render(backend);\n } catch (error) {\n failure ||= error;\n }\n }\n if (failure) throw failure;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingUpdates } from '../globals/pendingUpdates.js';\n\n\nimport { render } from \"../rendering/render.js\";\n\nimport { renderPendingUpdates } from './renderPendingUpdates.js';\n\n/** Scene graph, shared camera and frame rendering. */\n/** Content changes: render once on the next animation frame. */\nexport function update(backend) {\n const shared = sceneByLayer.get(backend)._shared;\n if (!shared) return backend;\n if (shared !== backend) {\n update(shared);\n return backend;\n }\n if (sceneByLayer.get(backend)._frame != null) return backend;\n const first = pendingUpdates.values().next().value;\n pendingUpdates.add(backend);\n sceneByLayer.get(backend)._frame = first ? sceneByLayer.get(first)._frame : requestAnimationFrame(renderPendingUpdates);\n return backend;\n}\n", "import { L } from '../globals/L.js';\nexport function hideTargets(state) {\n const { source } = state;\n const htmlIcon = source instanceof L.Marker && source.options.icon instanceof L.DivIcon;\n const icon = htmlIcon ? null : source._icon, shadow = htmlIcon ? null : source._shadow;\n let i, element;\n for (element of state.hidden) {\n if (element === icon || element === shadow) continue;\n element.classList.remove('leaflet-webgpu-target');\n state.hidden.delete(element);\n }\n for (i = 0; i < 2; i++) {\n element = i ? shadow : icon;\n if (!element || state.hidden.has(element)) continue;\n element.classList.add('leaflet-webgpu-target');\n state.hidden.add(element);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { nativeImageRefresh } from './nativeImageRefresh.js';\nimport { nativeImageError } from './nativeImageError.js';\nimport { removeImageState } from './removeImageState.js';\nimport { addImageState } from './addImageState.js';\nimport { update } from '../scene/update.js';\nimport { hideTargets } from './hideTargets.js';\n\nexport function refreshNativeLayer(state = this) {\n state.dirty = true;\n state.viewDirty = true;\n state.failed = false;\n hideTargets(state);\n const source = state.source;\n let i, image;\n for (image of state.images) {\n if (image === source._icon || image === source._shadow || image === source._image) continue;\n image.removeEventListener('load', nativeImageRefresh);\n image.removeEventListener('error', nativeImageError);\n removeImageState(image, state);\n state.images.delete(image);\n }\n for (i = 0; i < 3; i++) {\n image = i === 0 ? source._icon : i === 1 ? source._shadow : source._image;\n if (!(image instanceof HTMLImageElement) || state.images.has(image)) continue;\n state.images.add(image);\n addImageState(image, state);\n image.addEventListener('load', nativeImageRefresh);\n image.addEventListener('error', nativeImageError);\n }\n if (sceneByLayer.get(state.backend)._shared) update(state.backend);\n}\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetLatLng(...args) { return nativeLayerMethod('setLatLng', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetLatLngs(...args) { return nativeLayerMethod('setLatLngs', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeAddLatLng(...args) { return nativeLayerMethod('addLatLng', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetRadius(...args) { return nativeLayerMethod('setRadius', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetStyle(...args) { return nativeLayerMethod('setStyle', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeRedraw(...args) { return nativeLayerMethod('redraw', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetIcon(...args) { return nativeLayerMethod('setIcon', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetUrl(...args) { return nativeLayerMethod('setUrl', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetBounds(...args) { return nativeLayerMethod('setBounds', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetOpacity(...args) { return nativeLayerMethod('setOpacity', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetZIndex(...args) { return nativeLayerMethod('setZIndex', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeSetZIndexOffset(...args) { return nativeLayerMethod('setZIndexOffset', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeBringToFront(...args) { return nativeLayerMethod('bringToFront', this, args); }\n", "import { nativeLayerMethod } from './nativeLayerMethod.js';\n\nexport function nativeBringToBack(...args) { return nativeLayerMethod('bringToBack', this, args); }\n", "import { nativeSetLatLng } from '../core/nativeSetLatLng.js';\nimport { nativeSetLatLngs } from '../core/nativeSetLatLngs.js';\nimport { nativeAddLatLng } from '../core/nativeAddLatLng.js';\nimport { nativeSetRadius } from '../core/nativeSetRadius.js';\nimport { nativeSetStyle } from '../core/nativeSetStyle.js';\nimport { nativeRedraw } from '../core/nativeRedraw.js';\nimport { nativeSetIcon } from '../core/nativeSetIcon.js';\nimport { nativeSetUrl } from '../core/nativeSetUrl.js';\nimport { nativeSetBounds } from '../core/nativeSetBounds.js';\nimport { nativeSetOpacity } from '../core/nativeSetOpacity.js';\nimport { nativeSetZIndex } from '../core/nativeSetZIndex.js';\nimport { nativeSetZIndexOffset } from '../core/nativeSetZIndexOffset.js';\nimport { nativeBringToFront } from '../core/nativeBringToFront.js';\nimport { nativeBringToBack } from '../core/nativeBringToBack.js';\n\nexport const nativeMethodHandlers = {\n setLatLng: nativeSetLatLng,\n setLatLngs: nativeSetLatLngs,\n addLatLng: nativeAddLatLng,\n setRadius: nativeSetRadius,\n setStyle: nativeSetStyle,\n redraw: nativeRedraw,\n setIcon: nativeSetIcon,\n setUrl: nativeSetUrl,\n setBounds: nativeSetBounds,\n setOpacity: nativeSetOpacity,\n setZIndex: nativeSetZIndex,\n setZIndexOffset: nativeSetZIndexOffset,\n bringToFront: nativeBringToFront,\n bringToBack: nativeBringToBack,\n};\n", "import { L } from '../globals/L.js';\nimport { sceneEmptyOptions } from '../globals/sceneEmptyOptions.js';\r\n\r\n\r\nexport function createLayer(options = sceneEmptyOptions) {\r\n return /* alloc */ new L.Layer(options);\r\n}\r\n", "export const sceneEmptyOptions = Object.freeze({});\n", "import { L } from '../globals/L.js';\nimport { nativeEventMaps } from '../globals/nativeEventMaps.js';\n\n\nimport { raycast } from '../picking/raycast.js';\n\nimport { restoreNativeEvents } from './restoreNativeEvents.js';\nimport { handleNativeMapEvent } from './handleNativeMapEvent.js';\n\n/** One GPU hit test per map event, rather than one invisible SVG path per feature. */\nexport function nativeEvents(state) {\n const { map } = state;\n let context = nativeEventMaps.get(map);\n if (!context) {\n context = /* alloc */ {\n map, states: /* alloc */ new Set(), hovered: null,\n };\n const pointer = L.version.startsWith('2');\n context.move = pointer ? 'pointermove' : 'mousemove';\n context.out = pointer ? 'pointerout' : 'mouseout';\n context.over = pointer ? 'pointerover' : 'mouseover';\n context.descriptor = Object.getOwnPropertyDescriptor(map, '_fireDOMEvent');\n context.fireDOMEvent = map._fireDOMEvent;\n context.handle = handleNativeMapEvent;\n context.restore = restoreNativeEvents;\n nativeEventMaps.set(map, context);\n map._fireDOMEvent = handleNativeMapEvent;\n }\n context.states.add(state);\n state._nativeEventContext = context;\n}\n", "export const nativeEventMaps = new WeakMap();\n", "export const trafficByLayer = new WeakMap();\n", "export function mergeHits(source, target, start, width) {\r\n const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);\r\n let left = start, right = middle, output;\r\n for (output = start; output < end; output++) {\r\n if (left < middle && (right >= end || !(source[right].distance < source[left].distance))) {\r\n target[output] = source[left++];\r\n } else {\r\n target[output] = source[right++];\r\n }\r\n }\r\n}\r\n", "export function sortHits(hits) {\n if (hits.length < 2) return hits;\n const buffer = /* alloc */ new Array(hits.length);\n let source = hits, target = buffer;\n let width, start, previous, i;\n for (width = 1; width < hits.length; width *= 2) {\n for (start = 0; start < hits.length; start += width * 2) {\n mergeHits(source, target, start, width);\n }\n previous = source;\n source = target;\n target = previous;\n }\n if (source !== hits) for (i = 0; i < hits.length; i++) hits[i] = source[i];\n return hits;\n}\nimport { mergeHits } from './mergeHits.js';\n", "export function localRay(ray, mesh, origin, direction) {\r\n const inverse = /* alloc */ new DOMMatrix(mesh.worldMatrix).invertSelf();\r\n const inverseValues = inverse.toFloat64Array();\r\n let value, x, y, z, w;\r\n for (value of inverseValues) {\r\n if (!Number.isFinite(value)) throw /* alloc */ new Error('Singular 3D transform');\r\n }\r\n x = ray.origin[0], y = ray.origin[1], z = ray.origin[2];\r\n w = inverseValues[3] * x + inverseValues[7] * y + inverseValues[11] * z + inverseValues[15];\r\n origin[0] = (inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z + inverseValues[12]) / w;\r\n origin[1] = (inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z + inverseValues[13]) / w;\r\n origin[2] = (inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z + inverseValues[14]) / w;\r\n x = ray.direction[0], y = ray.direction[1], z = ray.direction[2];\r\n direction[0] = inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z;\r\n direction[1] = inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z;\r\n direction[2] = inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z;\r\n const directionLength = Math.hypot(...direction) || 1;\r\n direction[0] /= directionLength;\r\n direction[1] /= directionLength;\r\n direction[2] /= directionLength;\r\n}\r\n", "import { computeBounds } from '../geometry/computeBounds.js';\r\n\r\nexport function rayBounds(mesh, origin, direction) {\r\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\r\n let near = 0, far = Infinity, i, a, b;\r\n for (i = 0; i < 3; i++) {\r\n if (Math.abs(direction[i]) < 1e-12) {\r\n if (origin[i] < mesh.geometry.bounds.min[i] || origin[i] > mesh.geometry.bounds.max[i]) {\r\n far = -Infinity;\r\n break;\r\n }\r\n } else {\r\n a = (mesh.geometry.bounds.min[i] - origin[i]) / direction[i], b = (mesh.geometry.bounds.max[i] - origin[i]) / direction[i];\r\n near = Math.max(near, Math.min(a, b));\r\n far = Math.min(far, Math.max(a, b));\r\n }\r\n }\r\n return !(far < near);\r\n}\r\n", "export function readTriangle(mesh, i, a, b, c) {\r\n const { position, index, instanceOffset } = mesh.geometry.attributes;\r\n const vertices = index?.count || position.count;\r\n const vertex = instanceOffset ? i % vertices : i;\r\n const offset = instanceOffset ? Math.floor(i / vertices) * instanceOffset.size : 0;\r\n const x = instanceOffset?.data[offset] ?? 0;\r\n const y = instanceOffset?.data[offset + 1] ?? 0;\r\n const z = instanceOffset?.data[offset + 2] ?? 0;\r\n const ai = (index ? index.data[vertex] : vertex) * position.size;\r\n const bi = (index ? index.data[vertex + 1] : vertex + 1) * position.size;\r\n const ci = (index ? index.data[vertex + 2] : vertex + 2) * position.size;\r\n a[0] = position.data[ai]; a[1] = position.data[ai + 1]; a[2] = position.data[ai + 2];\r\n b[0] = position.data[bi]; b[1] = position.data[bi + 1]; b[2] = position.data[bi + 2];\r\n c[0] = position.data[ci]; c[1] = position.data[ci + 1]; c[2] = position.data[ci + 2];\r\n if (instanceOffset) {\r\n a[0] = Math.fround(a[0] + x); a[1] = Math.fround(a[1] + y); a[2] = Math.fround(a[2] + z);\r\n b[0] = Math.fround(b[0] + x); b[1] = Math.fround(b[1] + y); b[2] = Math.fround(b[2] + z);\r\n c[0] = Math.fround(c[0] + x); c[1] = Math.fround(c[1] + y); c[2] = Math.fround(c[2] + z);\r\n }\r\n}\r\n", "export function hiddenLightHit(mesh, i, u, v, night) {\r\n if (!mesh.program.nightLight) return false;\r\n const { index, uv: { data: uv } } = mesh.geometry.attributes;\r\n const idA = index ? index.data[i] : i, idB = index ? index.data[i + 1] : i + 1, idC = index ? index.data[i + 2] : i + 2;\r\n const x = uv[idA * 2] * (1 - u - v) + uv[idB * 2] * u + uv[idC * 2] * v;\r\n const y = uv[idA * 2 + 1] * (1 - u - v) + uv[idB * 2 + 1] * u + uv[idC * 2 + 1] * v;\r\n return x <= 2 && (!night || x * x + y * y > 0.9);\r\n}\r\n", "import { hiddenLightHit } from './hiddenLightHit.js';\r\n\r\n/** Moller-Trumbore with the renderer's culling and light-halo rules. */\r\nexport function triangleDistance(mesh, i, a, b, c, origin, direction, night) {\r\n const ex = b[0] - a[0], ey = b[1] - a[1], ez = b[2] - a[2];\r\n const fx = c[0] - a[0], fy = c[1] - a[1], fz = c[2] - a[2];\r\n const px = direction[1] * fz - direction[2] * fy;\r\n const py = direction[2] * fx - direction[0] * fz;\r\n const pz = direction[0] * fy - direction[1] * fx;\r\n const det = ex * px + ey * py + ez * pz;\r\n if (mesh.program.cullMode === 'none' || mesh.program.cullFace === null\r\n ? Math.abs(det) < 1e-9 : det < 1e-9) return Infinity;\r\n const tx = origin[0] - a[0], ty = origin[1] - a[1], tz = origin[2] - a[2];\r\n const u = (tx * px + ty * py + tz * pz) / det;\r\n if (u < 0 || u > 1) return Infinity;\r\n const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex;\r\n const v = (direction[0] * qx + direction[1] * qy + direction[2] * qz) / det;\r\n if (v < 0 || u + v > 1) return Infinity;\r\n if (hiddenLightHit(mesh, i, u, v, night)) return Infinity;\r\n return (fx * qx + fy * qy + fz * qz) / det;\r\n}\r\n", "export function worldHit(ray, mesh, origin, direction, closest, faceIndex) {\r\n const x = direction[0] * closest + origin[0];\r\n const y = direction[1] * closest + origin[1];\r\n const z = direction[2] * closest + origin[2];\r\n const matrix = mesh.worldMatrix;\r\n const w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15];\r\n const worldPoint = /* alloc */ [\r\n (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) / w,\r\n (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) / w,\r\n (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) / w,\r\n ];\r\n return /* alloc */ {\r\n faceIndex,\r\n object: mesh,\r\n point: worldPoint,\r\n distance: Math.hypot(worldPoint[0] - ray.origin[0], worldPoint[1] - ray.origin[1], worldPoint[2] - ray.origin[2])\r\n };\r\n}\r\n", "import { sortHits } from './sortHits.js';\r\nimport { localRay } from './localRay.js';\r\nimport { rayBounds } from './rayBounds.js';\r\nimport { readTriangle } from './readTriangle.js';\r\nimport { triangleDistance } from './triangleDistance.js';\r\nimport { worldHit } from './worldHit.js';\r\n\r\n/** Nearest triangle hit per mesh, sorted by world-space distance. */\r\nexport function intersectMeshes(ray, meshes, night = 0) {\r\n const hits = /* alloc */ [];\r\n const a = /* alloc */ [0, 0, 0], b = /* alloc */ [0, 0, 0], c = /* alloc */ [0, 0, 0];\r\n const origin = /* alloc */ [0, 0, 0], direction = /* alloc */ [0, 0, 0];\r\n let mesh, position, index, instanceOffset, vertices, closest, faceIndex, i, distance;\r\n for (mesh of meshes) {\r\n // Test locally, then compare distances in shared world space.\r\n localRay(ray, mesh, origin, direction);\r\n if (!rayBounds(mesh, origin, direction)) continue;\r\n ({ position, index, instanceOffset } = mesh.geometry.attributes);\r\n vertices = index?.count || position.count;\r\n closest = Infinity, faceIndex = void 0;\r\n for (i = 0; i < vertices * (instanceOffset?.count ?? 1); i += 3) {\r\n readTriangle(mesh, i, a, b, c);\r\n distance = triangleDistance(mesh, i, a, b, c, origin, direction, night);\r\n if (distance > 0 && distance < closest) {\r\n closest = distance; faceIndex = i / 3;\r\n }\r\n }\r\n if (faceIndex === undefined) continue;\r\n hits.push(worldHit(ray, mesh, origin, direction, closest, faceIndex));\r\n }\r\n return sortHits(hits);\r\n}\r\n", "/** Depth-first walk; a truthy callback result skips that node's descendants. */\n\nexport function traverse(node, callback, context) {\n if (callback(node, context)) return;\n let child;\n for (child of node.children) traverse(child, callback, context);\n}\n", "export function collectVisibleMesh(mesh, meshes) {\n if (!mesh.visible) return true;\n if (mesh.geometry && mesh._appearance !== 0) meshes.push(mesh);\n}\n", "/** Point and unit direction at distance `s` along `points` ([x, z, y?]) with cumulative `lengths`. */\n\nexport function along(points, lengths, s, target) {\n let i = 1, end = lengths.length - 1;\n let middle;\n while (i < end) {\n middle = i + Math.floor((end - i) / 2);\n if (lengths[middle] < s) i = middle + 1;\n else end = middle;\n }\n const a = points[i - 1], b = points[i], d = lengths[i] - lengths[i - 1] || 1;\n const t = (s - lengths[i - 1]) / d;\n target ||= /* alloc */ {};\n target.x = a[0] + (b[0] - a[0]) * t;\n target.y = (a[2] ?? 0) + ((b[2] ?? 0) - (a[2] ?? 0)) * t;\n target.z = a[1] + (b[1] - a[1]) * t;\n target.dx = (b[0] - a[0]) / d;\n target.dz = (b[1] - a[1]) / d;\n return target;\n}\n", "import { along } from './along.js';\r\n\r\nexport function locateTraffic(state, trip) {\r\n const { points, lengths, length } = trip.lane;\r\n let distance = trip.distance + state.elapsed * trip.speed;\r\n distance -= length * Math.floor(distance / length);\r\n const position = along(points, lengths, distance);\r\n position.x -= position.dz * state.side;\r\n position.z += position.dx * state.side;\r\n return position;\r\n}\r\n", "import { locateTraffic } from './locateTraffic.js';\n\nexport function placeTraffic(state) {\n if (!state.mesh || !state.stale) return;\n state.stale = false;\n const { position, normal } = state.mesh.geometry.attributes;\n let i, trip, cx, y, cz, dx, dz, k, o, lx, lz, nx, nz;\n for (i = 0; i < state.trips.length; i++) {\n trip = state.trips[i];\n ({ x: cx, y, z: cz, dx, dz } = locateTraffic(state, trip));\n for (k = 0, o = i * state.stride; k < state.stride; k += 3, o += 3) {\n lx = state.template.position[k], lz = state.template.position[k + 2], nx = state.template.normal[k], nz = state.template.normal[k + 2];\n position.data[o] = cx - lx * dz - lz * dx;\n position.data[o + 1] = y + state.template.position[k + 1];\n position.data[o + 2] = cz + lx * dx - lz * dz;\n normal.data[o] = -nx * dz - nz * dx;\n normal.data[o + 1] = state.template.normal[k + 1];\n normal.data[o + 2] = nx * dx - nz * dz;\n }\n }\n}\n", "export function validateCameraInverse(matrix) {\r\n let column, row;\r\n for (column = 1; column <= 4; column++) {\r\n for (row = 1; row <= 4; row++) {\r\n if (!Number.isFinite(matrix[`m${column}${row}`])) throw /* alloc */ new Error('Singular 3D transform');\r\n }\r\n }\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { trafficByLayer } from '../globals/trafficByLayer.js';\n\n\nimport { intersectMeshes } from '../collision/intersectMeshes.js';\nimport { traverse } from '../scene/traverse.js';\nimport { updateCamera } from '../scene/updateCamera.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { collectVisibleMesh } from './collectVisibleMesh.js';\nimport { placeTraffic } from '../traffic/placeTraffic.js';\nimport { validateCameraInverse } from './validateCameraInverse.js';\n\n/** Raycasting, hover/click highlight and tooltips. */\n/**\n * Finds the objects under a mouse or pointer event, nearest first.\n *\n * @param {MouseEvent} event\n * @param {Object[]} [objects] Defaults to this layer's root children, not all map layers.\n * @param {boolean} [recursive] Also test the descendants of `objects`.\n * @returns {Object[]} Nearest hit per mesh: object, shared-world point/distance and triangle faceIndex.\n */\n\nexport function raycast(backend, event, objects = sceneByLayer.get(backend).root.children, recursive = true) {\n if (!sceneByLayer.get(backend).renderer) {\n return /* alloc */ [];\n }\n const traffic = trafficByLayer.get(backend);\n if (traffic) placeTraffic(traffic);\n const rect = backend._map.getContainer().getBoundingClientRect();\n updateWorldMatrix(sceneByLayer.get(backend).scene);\n updateCamera(sceneByLayer.get(backend).camera);\n // Unproject the mouse (-1..1) into a world-space ray from the camera.\n const inverseCamera = sceneByLayer.get(backend).raycaster.inverse;\n const matrix = sceneByLayer.get(backend).camera.projectionViewMatrix;\n inverseCamera.m11 = matrix[0], inverseCamera.m12 = matrix[1], inverseCamera.m13 = matrix[2], inverseCamera.m14 = matrix[3];\n inverseCamera.m21 = matrix[4], inverseCamera.m22 = matrix[5], inverseCamera.m23 = matrix[6], inverseCamera.m24 = matrix[7];\n inverseCamera.m31 = matrix[8], inverseCamera.m32 = matrix[9], inverseCamera.m33 = matrix[10], inverseCamera.m34 = matrix[11];\n inverseCamera.m41 = matrix[12], inverseCamera.m42 = matrix[13], inverseCamera.m43 = matrix[14], inverseCamera.m44 = matrix[15];\n inverseCamera.invertSelf();\n const x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n const y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n const endX = inverseCamera.m11 * x + inverseCamera.m21 * y + inverseCamera.m41;\n const endY = inverseCamera.m12 * x + inverseCamera.m22 * y + inverseCamera.m42;\n const endZ = inverseCamera.m13 * x + inverseCamera.m23 * y + inverseCamera.m43;\n const endW = inverseCamera.m14 * x + inverseCamera.m24 * y + inverseCamera.m44;\n let object;\n validateCameraInverse(inverseCamera);\n sceneByLayer.get(backend).raycaster.origin[0] = sceneByLayer.get(backend).camera.position[0];\n sceneByLayer.get(backend).raycaster.origin[1] = sceneByLayer.get(backend).camera.position[1];\n sceneByLayer.get(backend).raycaster.origin[2] = sceneByLayer.get(backend).camera.position[2];\n sceneByLayer.get(backend).raycaster.direction[0] = endX / endW - sceneByLayer.get(backend).raycaster.origin[0];\n sceneByLayer.get(backend).raycaster.direction[1] = endY / endW - sceneByLayer.get(backend).raycaster.origin[1];\n sceneByLayer.get(backend).raycaster.direction[2] = endZ / endW - sceneByLayer.get(backend).raycaster.origin[2];\n const direction = sceneByLayer.get(backend).raycaster.direction;\n const rayLength = Math.hypot(direction[0], direction[1], direction[2]) || 1;\n sceneByLayer.get(backend).raycaster.direction[0] /= rayLength;\n sceneByLayer.get(backend).raycaster.direction[1] /= rayLength;\n sceneByLayer.get(backend).raycaster.direction[2] /= rayLength;\n const meshes = sceneByLayer.get(backend).raycaster.meshes;\n meshes.length = 0;\n for (object of objects) {\n if (recursive) traverse(object, collectVisibleMesh, meshes);\n else if (object.geometry && object.visible && object._appearance !== 0) meshes.push(object);\n }\n return intersectMeshes(sceneByLayer.get(backend).raycaster, meshes, sceneByLayer.get(backend).renderer.uniformData?.[55]);\n}\n", "export function restoreNativeEvents() {\r\n const { map, descriptor, handle } = this;\r\n if (map._fireDOMEvent !== handle) return;\r\n if (descriptor) Object.defineProperty(map, '_fireDOMEvent', descriptor);\r\n else delete map._fireDOMEvent;\r\n}\n", "/** Rendering owner per map; entries are removed on the last layer removal. */\nexport const renderers = new WeakMap();\n", "export const coreEventTypes = new Set([\n 'click', 'preclick', 'dblclick', 'contextmenu', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout',\n 'pointerdown', 'pointerup', 'pointermove', 'pointerover', 'pointerout',\n]);\n", "import { L } from '../globals/L.js';\r\nimport { raycast } from '../picking/raycast.js';\r\nimport { compareNativeHits } from './compareNativeHits.js';\r\n\r\nexport function nativeEventSource(context, event, type) {\r\n const hits = /* alloc */ [];\r\n let candidate, source, backend;\r\n if (type !== context.out) {\r\n for (candidate of context.states) {\r\n ({ source, backend } = candidate);\r\n if (source instanceof L.Marker || source.options.interactive === false ||\r\n !(source instanceof L.Path) && !source.options.interactive) continue;\r\n hits.push(...raycast(backend, event, candidate.meshes.values(), false));\r\n }\r\n }\r\n hits.sort(compareNativeHits);\r\n return hits[0]?.object._nativeSource || null;\r\n}\r\n", "export function compareNativeHits(a, b) {\r\n return b.object.renderOrder - a.object.renderOrder || a.distance - b.distance;\r\n}\n", "export function updateNativeHover(map, context, event, source) {\r\n if (context.hovered === source) return;\r\n if (context.hovered) context.fireDOMEvent.call(map, event, context.out, /* alloc */ [context.hovered]);\r\n context.hovered = source;\r\n if (source) context.fireDOMEvent.call(map, event, context.over, /* alloc */ [source]);\r\n map.getContainer().style.cursor = source ? 'pointer' : '';\r\n}\r\n", "import { updateNativeHover } from './updateNativeHover.js';\r\n\r\nexport function bypassNativeEvent(map, context, event, type) {\r\n const target = event.target;\r\n const dom = target instanceof Element &&\r\n target.closest('.leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control');\r\n if (dom && context.hovered && (type === context.move || type === context.out)) {\r\n updateNativeHover(map, context, event, null);\r\n }\r\n return dom || type === context.move && (map.dragging?.moving() || map._animatingZoom);\r\n}\r\n", "import { nativeEventMaps } from '../globals/nativeEventMaps.js';\nimport { renderers } from '../globals/renderers.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { coreEventTypes } from '../globals/coreEventTypes.js';\n\n\n\nimport { nativeEventSource } from './nativeEventSource.js';\nimport { updateNativeHover } from './updateNativeHover.js';\nimport { bypassNativeEvent } from './bypassNativeEvent.js';\n\nexport function handleNativeMapEvent(event, type = event.type, targets) {\n const map = this, context = nativeEventMaps.get(map), fireDOMEvent = context.fireDOMEvent;\n const owner = renderers.get(map);\n if (!sceneByLayer.get(owner)?.renderer || targets || !coreEventTypes.has(type)) {\n return fireDOMEvent.call(this, event, type, targets);\n }\n if (bypassNativeEvent(map, context, event, type)) {\n return fireDOMEvent.call(this, event, type, targets);\n }\n let source = nativeEventSource(context, event, type);\n if ((type === 'click' || type === 'preclick') && source && map._draggableMoved(source)) source = null;\n if (type === context.move || type === context.out) {\n updateNativeHover(map, context, event, source);\n }\n return fireDOMEvent.call(this, event, type, source ? /* alloc */ [source] : undefined);\n}\n", "import { nativeEventMaps } from '../globals/nativeEventMaps.js';\n\n\nexport function removeNativeEvents(state) {\r\n const context = state._nativeEventContext;\r\n if (!context) return;\r\n const { map } = context;\r\n context.states.delete(state);\r\n if (context.hovered === state.source) {\r\n context.hovered = null;\r\n map.getContainer().style.cursor = '';\r\n }\r\n state._nativeEventContext = null;\r\n if (context.states.size) return;\r\n context.restore();\r\n nativeEventMaps.delete(map);\r\n}\n", "import { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function refreshNativeEvent() {\r\n refreshNativeLayer(this);\r\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function reorderNativeLayer(front) {\r\n this.order = front ? ++cameraByMap.get(this.map)._nativeGPUOrder : --cameraByMap.get(this.map)._nativeGPUBack;\r\n refreshNativeLayer(this);\r\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { update } from '../scene/update.js';\n\nexport function updateNativeLayerView() {\r\n this.viewDirty = true;\r\n if (sceneByLayer.get(this.backend)._shared) update(this.backend);\r\n}\n", "import { nativeRenderByLayer } from '../globals/nativeRenderByLayer.js';\n\n\nimport { refreshNativeEvent } from './refreshNativeEvent.js';\nimport { updateNativeLayerView } from './updateNativeLayerView.js';\nimport { removeNativeEvents } from './removeNativeEvents.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { nativeImageRefresh } from './nativeImageRefresh.js';\nimport { nativeImageError } from './nativeImageError.js';\nimport { removeImageState } from './removeImageState.js';\n\nexport function disposeNativeLayer() {\n const state = this;\n if (state.disposed) return;\n state.disposed = true;\n const { source, map, backend, meshes, textures, images } = state;\n const events = 'load tileload tileunload move drag';\n source.off(events, refreshNativeEvent, state);\n map.off('zoomend', refreshNativeEvent, state);\n if (state.marker) map.off('move zoom rotate pitch resize viewreset', updateNativeLayerView, state);\n removeNativeEvents(state);\n let name, methods, mesh, texture, image;\n for ([name, methods] of state.methods) {\n if (methods.own) Object.defineProperty(source, name, methods.own);\n else delete source[name];\n }\n for (mesh of meshes.values()) disposeMesh(backend, mesh);\n meshes.clear();\n for (texture of textures.values()) destroyTexture(backend, texture.texture);\n textures.clear();\n for (image of images) {\n image.removeEventListener('load', nativeImageRefresh);\n image.removeEventListener('error', nativeImageError);\n removeImageState(image, state);\n }\n nativeRenderByLayer.delete(backend);\n backend.remove();\n}\n", "\nexport function resolveNativeReady() {\r\n this.ready.resolve();\r\n}\n", "\nexport function rejectNativeReady({ error }) {\r\n this.ready.reject(error);\r\n}\n", "export function forwardNativeError({ error }) {\r\n this.source.fire('error', /* alloc */ { error });\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\nimport { disposeNativeLayer } from './disposeNativeLayer.js';\n\nexport function removeTargets(state) {\n if (sceneByLayer.get(state.source)._nativeGPU === state) sceneByLayer.get(state.source)._nativeGPU = null;\n if (state.backend) disposeNativeLayer.call(state);\n let element;\n for (element of state.hidden) {\n element.classList.remove('leaflet-webgpu-target');\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { nativeLayer } from './nativeLayer.js';\n\nexport function readyNativeGPU(state) {\r\n if (sceneByLayer.get(state.source)._nativeGPU !== state) return state.source;\r\n return nativeLayer(state);\r\n}\n", "export function reportError(source, error) {\r\n source.fire('error', /* alloc */ { error });\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { nativeLayer } from './nativeLayer.js';\nimport { hideTargets } from './hideTargets.js';\nimport { removeTargets } from './removeTargets.js';\nimport { readyNativeGPU } from './readyNativeGPU.js';\nimport { reportError } from '../scene/reportError.js';\n\nexport function initNativeGPU(source, map) {\n if (sceneByLayer.get(source)._nativeGPU) return;\n if (!document.getElementById('leaflet-webgpu-targets')) {\n const style = document.createElement('style');\n style.id = 'leaflet-webgpu-targets';\n style.textContent = '.leaflet-webgpu-target{opacity:0!important}';\n document.head.append(style);\n }\n const state = sceneByLayer.get(source)._nativeGPU = /* alloc */ {\n source, map, hidden: /* alloc */ new Set(),\n };\n hideTargets(state);\n source.once('remove', removeTargets.bind(null, state));\n sceneByLayer.get(source).ready = Promise.resolve().then(readyNativeGPU.bind(null, state));\n sceneByLayer.get(source).ready.catch(reportError.bind(null, source));\n}\n", "export const cameraAngles = [1, 0, 1, 0];\n", "import { L } from '../globals/L.js';\nexport function pointOf(point) {\r\n return /* alloc */ new L.Point(\r\n Array.isArray(point) ? point[0] : point.x, Array.isArray(point) ? point[1] : point.y);\r\n}\r\n", "import { radians } from '../globals/radians.js';\n\nimport { mapGetBearing } from './mapGetBearing.js';\nimport { mapGetPitch } from './mapGetPitch.js';\n\nexport function angles(map, target) {\n const bearing = mapGetBearing(map) * radians, pitch = mapGetPitch(map) * radians;\n target ||= /* alloc */ [];\n target[0] = Math.cos(bearing);\n target[1] = Math.sin(bearing);\n target[2] = Math.cos(pitch);\n target[3] = Math.sin(pitch);\n return target;\n}\n", "import { cameraAngles } from '../globals/cameraAngles.js';\nimport { pointOf } from './pointOf.js';\nimport { angles } from './angles.js';\n\n\nexport function project(map, point, inverse = false, limit = false) {\n const size = map.getSize(), halfX = size.x / 2, halfY = size.y / 2, distance = size.y * 1.5;\n const result = pointOf(point);\n if (!distance) return result;\n const [cos, sin, tilt, rise] = angles(map, cameraAngles);\n const x = result.x - halfX, y = result.y - halfY;\n if (inverse) {\n const far = size.y * map.options.pitchMaxDistance;\n const denominator = tilt * distance + rise * y;\n let v = denominator * tilt > 0 ? y * distance / denominator : -far;\n if (limit) v = Math.max(-far, Math.min(far, v));\n const u = x * (distance - rise * v) / distance;\n result.x = cos * u + sin * v + halfX;\n result.y = -sin * u + cos * v + halfY;\n return result;\n }\n const u = cos * x - sin * y, v = sin * x + cos * y;\n const scale = distance / (distance - rise * v);\n result.x = u * scale + halfX;\n result.y = tilt * v * scale + halfY;\n return result;\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\nimport { project } from './project.js';\nimport { animationPoint } from './animationPoint.js';\n\nexport function mapLayerPointToContainerPoint(point) {\n return project(this, animationPoint(this, mapMethods.value.layerPointToContainerPoint.call(this, point)));\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\n\nimport { animationPoint } from './animationPoint.js';\nimport { project } from './project.js';\n\nexport function mapContainerPointToLayerPoint(point) {\n return mapMethods.value.containerPointToLayerPoint.call(this, animationPoint(this, project(this, point, true), true));\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\n\nexport function mapGetCenterLayerPoint() {\n return mapMethods.value.containerPointToLayerPoint.call(this, this.getSize().divideBy(2));\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\nimport { project } from './project.js';\nimport { pointOf } from './pointOf.js';\n\nexport function mapPanBy(offset, options) {\n const half = this.getSize().divideBy(2);\r\n const ground = half.subtract(project(this, half.subtract(pointOf(offset)), true));\r\n return mapMethods.value.panBy.call(this, ground, options);\n}\n", "import { L } from '../globals/L.js';\nimport { mapMethods } from '../globals/mapMethods.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nexport function mapSetZoomAround(latlng, zoom, options) {\n if (!mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value.setZoomAround.call(this, latlng, zoom, options);\n zoom = this._limitZoom(zoom);\n const scale = this.getZoomScale(zoom), half = this.getSize().divideBy(2);\n const screen = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng);\n const center = this.containerPointToLayerPoint(half), anchor = this.containerPointToLayerPoint(screen);\n const next = center.add(anchor.subtract(center).multiplyBy(1 - 1 / scale));\n return this.setView(this.layerPointToLatLng(next), zoom, /* alloc */ { zoom: options });\n}\n", "export const cameraZeroPadding = Object.freeze([0, 0]);\n", "import { mapMethods } from '../globals/mapMethods.js';\nimport { cameraZeroPadding } from '../globals/cameraZeroPadding.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { pointOf } from './pointOf.js';\n\nexport function mapPanInside(latlng, options = /* alloc */ {}) {\n if (!mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value.panInside.call(this, latlng, options);\n const min = pointOf(options.paddingTopLeft || options.padding || cameraZeroPadding);\n const max = this.getSize().subtract(pointOf(options.paddingBottomRight || options.padding || cameraZeroPadding));\n const screen = this.latLngToContainerPoint(latlng);\n const safe = min;\n safe.x = Math.max(min.x, Math.min(max.x, screen.x));\n safe.y = Math.max(min.y, Math.min(max.y, screen.y));\n if (safe.equals(screen)) return this;\n const delta = this.latLngToLayerPoint(latlng).subtract(this.containerPointToLayerPoint(safe));\n return this.panTo(this.unproject(this.project(this.getCenter()).add(delta)), options);\n}\n", "import { L } from '../globals/L.js';\nimport { mapMethods } from '../globals/mapMethods.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { groundBounds } from './groundBounds.js';\n\nexport function mapLimitCenter(center, zoom, bounds) {\n if (!bounds || !this._loaded || !mapGetPitch(this) && !mapGetBearing(this)) {\n return mapMethods.value._limitCenter.call(this, center, zoom, bounds);\n }\n const half = this.getSize().divideBy(2), footprint = groundBounds(this), point = this.project(center, zoom);\n const view = /* alloc */ new L.Bounds(point.add(footprint.min.subtract(half)), point.add(footprint.max.subtract(half)));\n const offset = this._getBoundsOffset(view, bounds, zoom);\n return Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1 ? center : this.unproject(point.add(offset), zoom);\n}\n", "import { L } from '../globals/L.js';\nimport { cameraZeroPadding } from '../globals/cameraZeroPadding.js';\nimport { pointOf } from './pointOf.js';\nimport { project } from './project.js';\n\n\nexport function groundBounds(map, padding = cameraZeroPadding) {\n const min = pointOf(padding).divideBy(2), max = map.getSize().subtract(min);\n const bounds = /* alloc */ new L.Bounds();\n const minX = min.x, minY = min.y;\n let i;\n for (i = 0; i < 4; i++) {\n min.x = i % 2 ? max.x : minX;\n min.y = i < 2 ? minY : max.y;\n bounds.extend(project(map, min, true, true));\n }\n return bounds;\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { project } from './project.js';\n\nexport function mapLimitOffset(offset, bounds) {\n if (!bounds || !mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value._limitOffset.call(this, offset, bounds);\r\n const half = this.getSize().divideBy(2), ground = half.subtract(project(this, half.subtract(offset), true));\r\n const center = this.project(this.getCenter());\r\n const limited = this.project(this._limitCenter(this.unproject(center.add(ground)), this.getZoom(), bounds));\r\n return half.subtract(project(this, half.subtract(limited.subtract(center))));\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\nimport { fitCameraBounds } from './fitCameraBounds.js';\n\nexport function mapGetBoundsCenterZoom(bounds, options) {\n return mapGetPitch(this) || mapGetBearing(this) ? fitCameraBounds(this, bounds, options) :\r\n mapMethods.value._getBoundsCenterZoom.call(this, bounds, options);\n}\n", "import { L } from '../globals/L.js';\nimport { cameraEmptyOptions } from '../globals/cameraEmptyOptions.js';\nimport { cameraZeroPadding } from '../globals/cameraZeroPadding.js';\nimport { cameraAngles } from '../globals/cameraAngles.js';\nimport { pointOf } from './pointOf.js';\nimport { angles } from './angles.js';\nimport { verticalGroundY } from './verticalGroundY.js';\n\n\nexport function fitCameraBounds(map, bounds, options = cameraEmptyOptions) {\n bounds = bounds.getBounds ? bounds.getBounds() : bounds instanceof L.LatLngBounds ? bounds\n : /* alloc */ new L.LatLngBounds(bounds);\n const zoom = map.getZoom() ?? 0, half = map.getSize().divideBy(2), distance = map.getSize().y * 1.5;\n const min = pointOf(options.paddingTopLeft || options.padding || cameraZeroPadding).subtract(half);\n const max = half.subtract(pointOf(options.paddingBottomRight || options.padding || cameraZeroPadding));\n const [cos, sin, tilt, rise] = angles(map, cameraAngles);\n if (tilt < 0) {\n const y = min.y;\n min.y = -max.y;\n max.y = -y;\n }\n const far = map.getSize().y * map.options.pitchMaxDistance;\n const top = verticalGroundY(min.y, Math.abs(tilt), distance, rise, far);\n const bottom = verticalGroundY(max.y, Math.abs(tilt), distance, rise, far);\n const origin = map.project(bounds.getNorthWest(), zoom).add(map.project(bounds.getSouthEast(), zoom)).divideBy(2);\n let low = Infinity, high = -Infinity;\n const leftSlope = min.x * rise / distance, rightSlope = max.x * rise / distance;\n const slope = rightSlope - leftSlope;\n let left = Infinity, right = -Infinity;\n const corners = /* alloc */ [bounds.getNorthWest(), bounds.getNorthEast(), bounds.getSouthWest(), bounds.getSouthEast()];\n let i, latlng, p, x, y;\n for (i = 0; i < 4; i++) {\n latlng = corners[i];\n p = map.project(latlng, zoom).subtract(origin);\n x = cos * p.x - sin * p.y;\n y = sin * p.x + cos * p.y;\n low = Math.min(low, y);\n high = Math.max(high, y);\n left = Math.min(left, x + leftSlope * y);\n right = Math.max(right, x + rightSlope * y);\n }\n // Perspective viewport edges are straight lines on the ground: fit all four corners, not their screen midpoint.\n const scale = Math.min((bottom - top) / (high - low),\n (max.x - min.x - slope * top) / (right - left - slope * low));\n let target = map.getScaleZoom(scale, zoom);\n const snap = map.options.zoomSnap;\n if (snap) target = Math.floor(Math.round(target / (snap / 100)) / 100) * snap;\n target = Math.max(map.getMinZoom(), Math.min(map.getMaxZoom(), options.maxZoom ?? Infinity, target));\n if (!Number.isFinite(target)) return /* alloc */ { center: bounds.getCenter(), zoom: target };\n const actual = map.getZoomScale(target, zoom);\n const vMin = high * actual - bottom, vMax = low * actual - top;\n const v = Math.max(vMin, slope ? (actual * (right - left) - max.x + min.x) / slope : vMin);\n const centerY = (Math.min(vMax, v) + vMax) / 2;\n const centerX = (actual * (left + right) - min.x - max.x - (leftSlope + rightSlope) * centerY) / 2;\n origin.x += (cos * centerX + sin * centerY) / actual;\n origin.y += (-sin * centerX + cos * centerY) / actual;\n return /* alloc */ { center: map.unproject(origin, zoom), zoom: target };\n}\n", "export function verticalGroundY(y, tilt, distance, rise, far) {\r\n return tilt * distance + rise * y > 0\r\n ? Math.max(-far, Math.min(far, y * distance / (tilt * distance + rise * y))) : -far;\r\n}\n", "import { L } from '../globals/L.js';\nimport { mapMethods } from '../globals/mapMethods.js';\nimport { cameraZeroPadding } from '../globals/cameraZeroPadding.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { fitCameraBounds } from './fitCameraBounds.js';\nimport { pointOf } from './pointOf.js';\nimport { groundBounds } from './groundBounds.js';\n\nexport function mapGetBoundsZoom(bounds, inside, padding) {\n if (!mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value.getBoundsZoom.call(this, bounds, inside, padding);\n if (!inside) return fitCameraBounds(this, bounds,\n /* alloc */ {\n padding: pointOf(padding || cameraZeroPadding).divideBy(2),\n }).zoom;\n bounds = bounds instanceof L.LatLngBounds ? bounds\n : /* alloc */ new L.LatLngBounds(bounds);\n const footprint = groundBounds(this, padding).getSize(), size = this.project(bounds.getSouthEast()).subtract(this.project(bounds.getNorthWest()));\n const zoom = this.getScaleZoom(Math.max(footprint.x / size.x, footprint.y / size.y));\n const snap = this.options.zoomSnap;\n return Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), snap ? Math.ceil(zoom / snap) * snap : zoom));\n}\n", "import { mapMethods } from '../globals/mapMethods.js';\n\n\nexport function mapTryAnimatedPan(center, options) {\n // Leaflet's geographic recentering already supplies ground pixels, not screen pixels.\r\n const offset = this._getCenterOffset(center)._trunc();\r\n if (options?.animate !== true && !this.getSize().contains(offset)) return false;\r\n mapMethods.value.panBy.call(this, offset, options);\r\n return true;\n}\n", "import { L } from '../globals/L.js';\nimport { mapMethods } from '../globals/mapMethods.js';\n\nimport { mapGetPitch } from './mapGetPitch.js';\nimport { mapGetBearing } from './mapGetBearing.js';\n\nimport { groundBounds } from './groundBounds.js';\nimport { animationPoint } from './animationPoint.js';\n\nexport function mapGetBounds() {\n if (!mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value.getBounds.call(this);\n const footprint = groundBounds(this), bounds = /* alloc */ new L.LatLngBounds();\n let i, point, raw;\n for (i = 0; i < 2; i++) {\n point = i ? footprint.max : footprint.min;\n raw = mapMethods.value.containerPointToLayerPoint.call(this, animationPoint(this, point, true));\n bounds.extend(this.layerPointToLatLng(raw));\n }\n return bounds;\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapSetPitchAndBearing } from './mapSetPitchAndBearing.js';\n\nimport { updateSky } from './updateSky.js';\nimport { constrainCameraToBounds } from './constrainCameraToBounds.js';\nimport { cleanupCameraMap } from './cleanupCameraMap.js';\nimport { cameraMapReady } from './cameraMapReady.js';\nimport { loadCameraControls } from '../controls/loadCameraControls.js';\nimport { noOperation } from '../utils/noOperation.js';\n\nexport function initializeCameraMap() {\n cameraByMap.set(this, /* alloc */ {});\n if (!document.getElementById('leaflet-camera-zoom-style')) {\n const style = document.createElement('style');\n style.id = 'leaflet-camera-zoom-style';\n style.textContent = '.leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,' +\n '.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}';\n document.head.append(style);\n }\n mapSetPitchAndBearing(this, this.options.pitch, this.options.bearing);\n this.on('load resize pitch', updateSky);\n this.on('rotate pitch', constrainCameraToBounds, this);\n this.once('unload', cleanupCameraMap, this);\n this.whenReady(cameraMapReady, this);\n if (this.options.rotate || this.options.trackContainerMutation) {\n cameraByMap.get(this).cameraReady = loadCameraControls(this);\n cameraByMap.get(this).cameraReady.catch(noOperation);\n }\n}\n", "export function constrainCameraToBounds() {\r\n if (this.options.maxBounds) this._panInsideMaxBounds();\r\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { cancelCameraAnimation } from './cancelCameraAnimation.js';\nimport { adjustCameraDrag } from '../controls/adjustCameraDrag.js';\n\nexport function cleanupCameraMap() {\r\n cancelCameraAnimation(this);\r\n cameraByMap.get(this)._pitchSky?.remove();\r\n if (cameraByMap.get(this)._cameraDraggable) {\r\n cameraByMap.get(this)._cameraDraggable.off('predrag', adjustCameraDrag, this);\r\n delete cameraByMap.get(this)._cameraDraggable;\r\n }\r\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nimport { project } from '../camera/project.js';\n\nexport function adjustCameraDrag() {\r\n const map = this;\r\n const draggable = cameraByMap.get(map)._cameraDraggable;\r\n if (!mapGetPitch(map) && !mapGetBearing(map)) return;\r\n const half = map.getSize().divideBy(2), delta = draggable._newPos.subtract(draggable._startPos);\r\n const ground = half.subtract(project(map, half.subtract(delta), true));\r\n draggable._newPos = draggable._startPos.add(ground);\r\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { adjustCameraDrag } from '../controls/adjustCameraDrag.js';\n\nexport function cameraMapReady() {\r\n const draggable = this.dragging?._draggable;\r\n if (!draggable) return;\r\n cameraByMap.get(this)._cameraDraggable = draggable;\r\n draggable.on('predrag', adjustCameraDrag, this);\r\n}\n", "export async function loadCameraControls(map) {\r\n try {\r\n const { cameraControls } = await import('./cameraControls.js');\r\n if (map._container?._leaflet_id) cameraControls(map);\r\n } catch (error) {\r\n map.fire('error', /* alloc */ { error });\r\n throw error;\r\n }\r\n}\r\n", "export function noOperation() {}\n", "import { L } from '../globals/L.js';\nimport { markerMethods } from '../globals/markerMethods.js';\n\n\nimport { initNativeGPU } from './initNativeGPU.js';\n\nexport function markerSetIcon(icon) {\n if (!(icon instanceof L.DivIcon)) icon.options.crossOrigin ||= true;\r\n const result = markerMethods.value.setIcon.call(this, icon);\r\n if (this._map && !(icon instanceof L.DivIcon)) initNativeGPU(this, this._map);\r\n return result;\n}\n", "import { markerMethods } from '../globals/markerMethods.js';\n\n\n\nexport function markerGetEvents() {\n const events = markerMethods.value.getEvents.call(this);\n events.rotate = events.pitch = events.move = this.update;\n return events;\n}\n", "export function displayPoint(map, point) {\r\n return map.layerPointToContainerPoint(point).subtract(map._getMapPanePos());\r\n}\n", "import { markerMethods } from '../globals/markerMethods.js';\n\nimport { markerCameraIconPoint } from './markerCameraIconPoint.js';\n\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function markerSetPos(point) {\n markerMethods.value._setPos.call(this, displayPoint(this._map, point));\n let i, element, key, direction, options, anchor;\n for (i = 0; i < 2; i++) {\n element = i ? this._shadow : this._icon;\n key = i ? 'shadowAnchor' : 'iconAnchor';\n if (!element) continue;\n direction = markerCameraIconPoint(this, 1, 0), options = this.options.icon.options;\n anchor = options[key] || options.iconAnchor;\n element.style.transformOrigin = anchor ? `${anchor.x ?? anchor[0]}px ${anchor.y ?? anchor[1]}px` : 'center';\n element.style.transform += ` rotate(${Math.atan2(direction.y, direction.x)}rad) scale(${this.options.scale})`;\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\nimport { refreshNativeLayer } from './refreshNativeLayer.js';\n\nexport function refreshNativeLayerContract(layer = this) {\n const native = sceneByLayer.get(layer)?._nativeGPU;\n if (native?.backend && !native.disposed) refreshNativeLayer(native);\n}\n", "import { markerMethods } from '../globals/markerMethods.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nexport function markerUpdateZIndex(offset) {\n markerMethods.value._updateZIndex.call(this, offset);\n const changed = sceneByLayer.get(this)._cameraZIndexOffset !== offset;\n sceneByLayer.get(this)._cameraZIndexOffset = offset;\n if (changed) refreshNativeLayerContract(this);\n}\nimport { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\n", "export const dragByHandler = new WeakMap();\n", "import { L } from '../globals/L.js';\nimport { dragByHandler } from '../globals/dragByHandler.js';\n\n\r\n\r\nexport function cameraMarkerOnDrag(event) {\r\n const map = this._marker._map;\r\n const screen = L.DomUtil.getPosition(this._marker._icon).add(map._getMapPanePos());\r\n const point = map.containerPointToLayerPoint(screen);\r\n L.DomUtil.setPosition(this._marker._icon, point);\r\n dragByHandler.get(this)._cameraOriginalOnDrag.call(this, event);\r\n this._marker._setPos(point);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { dragByHandler } from '../globals/dragByHandler.js';\n\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nimport { pointOf } from '../camera/pointOf.js';\nimport { scheduleMarkerPan } from './scheduleMarkerPan.js';\n\nexport function adjustCameraMarkerPan(event) {\n const marker = this._marker, map = marker._map;\n if (!mapGetPitch(map) && !mapGetBearing(map)) return dragByHandler.get(this)._cameraOriginalAdjustPan.call(this, event);\n const screen = L.DomUtil.getPosition(marker._icon).add(map._getMapPanePos());\n const size = map.getSize(), padding = pointOf(marker.options.autoPanPadding);\n const speed = marker.options.autoPanSpeed;\n const movement = screen;\n movement.x = (Math.max(0, screen.x - size.x + padding.x) - Math.max(0, padding.x - screen.x)) / Math.max(1, padding.x) * speed;\n movement.y = (Math.max(0, screen.y - size.y + padding.y) - Math.max(0, padding.y - screen.y)) / Math.max(1, padding.y) * speed;\n if (!movement.x && !movement.y) return;\n const pane = map._getMapPanePos();\n map.panBy(movement, /* alloc */ { animate: false });\n const shift = pane.subtract(map._getMapPanePos());\n this._draggable._newPos._add(shift);\n this._draggable._startPos._add(shift);\n L.DomUtil.setPosition(marker._icon, this._draggable._newPos);\n this._onDrag(event);\n scheduleMarkerPan(this, event);\n}\n", "export const pendingMarkerPan = new Map();\n", "export const markerPanFrame = { value: null };\n", "import { markerPanFrame } from '../globals/markerPanFrame.js';\nimport { pendingMarkerPan } from '../globals/pendingMarkerPan.js';\n\n\nexport function runMarkerPanFrame() {\n markerPanFrame.value = null;\n const pending = /* alloc */ [...pendingMarkerPan];\n pendingMarkerPan.clear();\n let drag, event;\n for ([drag, event] of pending) {\n drag._panRequest = null;\n drag._adjustPan(event);\n }\n}\n", "import { pendingMarkerPan } from '../globals/pendingMarkerPan.js';\nimport { markerPanFrame } from '../globals/markerPanFrame.js';\n\n\nimport { runMarkerPanFrame } from './runMarkerPanFrame.js';\n\nexport function scheduleMarkerPan(drag, event) {\r\n pendingMarkerPan.set(drag, event);\r\n if (markerPanFrame.value === null) markerPanFrame.value = requestAnimationFrame(runMarkerPanFrame);\r\n drag._panRequest = markerPanFrame.value;\r\n}\n", "import { dragByHandler } from '../globals/dragByHandler.js';\n\n\nimport { cameraMarkerOnDrag } from './cameraMarkerOnDrag.js';\nimport { adjustCameraMarkerPan } from './adjustCameraMarkerPan.js';\n\nexport function cameraMarkerDrag() {\n if (!this.dragging || dragByHandler.has(this.dragging)) return;\n const drag = this.dragging, original = drag._onDrag, adjustPan = drag._adjustPan;\n dragByHandler.set(drag, /* alloc */ {\n _cameraOriginalOnDrag: original, _cameraOriginalAdjustPan: adjustPan,\n });\n drag._onDrag = cameraMarkerOnDrag;\n drag._adjustPan = adjustCameraMarkerPan;\n // The handler may already be enabled and listening with its original method.\n const enabled = drag.enabled();\n if (enabled) {\n drag._draggable.off('drag', original, drag);\n drag._draggable.on('drag', drag._onDrag, drag);\n }\n}\n", "import { markerMethods } from '../globals/markerMethods.js';\n\n\nimport { cameraMarkerDrag } from './cameraMarkerDrag.js';\n\nexport function markerInitInteraction() {\n const result = markerMethods.value._initInteraction.call(this);\r\n cameraMarkerDrag.call(this);\r\n return result;\n}\n", "import { popupEvents } from '../globals/popupEvents.js';\n\n\nexport function popupGetEvents() {\n const events = popupEvents.value.call(this);\n events.rotate = events.pitch = events.move = this._updatePosition;\n return events;\n}\n", "import { tooltipEvents } from '../globals/tooltipEvents.js';\n\n\nexport function tooltipGetEvents() {\n const events = tooltipEvents.value.call(this);\n events.rotate = events.pitch = events.move = this._updatePosition;\n return events;\n}\n", "import { popupPan } from '../globals/popupPan.js';\n\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nimport { pointOf } from '../camera/pointOf.js';\n\nexport function popupAdjustPan() {\n const map = this._map;\n if (!mapGetPitch(map) && !mapGetBearing(map)) return popupPan.value.call(this);\n if (!this.options.autoPan) return;\n if (map._panAnim) map._panAnim.stop();\n if (this._autopanning) { this._autopanning = false; return; }\n const rect = this._container.getBoundingClientRect(), container = map.getContainer().getBoundingClientRect();\n const min = pointOf(this.options.autoPanPaddingTopLeft || this.options.autoPanPadding);\n const max = map.getSize().subtract(pointOf(this.options.autoPanPaddingBottomRight || this.options.autoPanPadding));\n const left = rect.left - container.left, top = rect.top - container.top;\n const right = rect.right - container.left, bottom = rect.bottom - container.top;\n const dx = Math.min(0, left - min.x) || Math.max(0, right - max.x);\n const dy = Math.min(0, top - min.y) || Math.max(0, bottom - max.y);\n if (!dx && !dy) return;\n if (this.options.keepInView) this._autopanning = true;\n const screen = map.latLngToContainerPoint(this._latlng);\n screen.x -= dx;\n screen.y -= dy;\n const delta = map.latLngToLayerPoint(this._latlng).subtract(map.containerPointToLayerPoint(screen));\n map.fire('autopanstart');\n map.panTo(map.unproject(map.project(map.getCenter()).add(delta)));\n}\n", "import { L } from '../globals/L.js';\nimport { popupPosition } from '../globals/popupPosition.js';\n\n\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function popupUpdatePosition() {\n popupPosition.value.call(this);\r\n if (!this._map) return;\r\n const point = this._map.latLngToLayerPoint(this._latlng), delta = displayPoint(this._map, point).subtract(point);\r\n if (this._zoomAnimated) {\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\r\n } else {\r\n this._container.style.left = `${this._containerLeft + delta.x}px`;\r\n this._container.style.bottom = `${this._containerBottom - delta.y}px`;\r\n }\n}\n", "import { L } from '../globals/L.js';\nimport { tooltipPosition } from '../globals/tooltipPosition.js';\n\n\nimport { displayPoint } from '../camera/displayPoint.js';\n\nexport function tooltipSetPosition(point) {\n tooltipPosition.value.call(this, point);\r\n const delta = displayPoint(this._map, point).subtract(point);\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\n}\n", "import { L } from '../globals/L.js';\nimport { gridEvents } from '../globals/gridEvents.js';\n\n\n\nexport function gridlayerGetEvents() {\n const events = gridEvents.value.call(this);\n events.rotate = events.pitch = L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n return events;\n}\n", "import { L } from '../globals/L.js';\nimport { tiledBounds } from '../globals/tiledBounds.js';\n\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\n\nexport function gridlayerGetTiledPixelBounds(center) {\n if (!mapGetBearing(this._map) && !mapGetPitch(this._map)) return tiledBounds.value.call(this, center);\n const bounds = this._map.getBounds();\n return /* alloc */ new L.Bounds(this._map.project(bounds.getNorthWest(), this._tileZoom),\n this._map.project(bounds.getSouthEast(), this._tileZoom));\n}\n", "import { L } from '../globals/L.js';\nimport { sceneEmptyOptions } from '../globals/sceneEmptyOptions.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { attach } from './attach.js';\nimport { emptyNode } from './emptyNode.js';\nimport { onAdd3DLayer } from './onAdd3DLayer.js';\nimport { onRemove3DLayer } from './onRemove3DLayer.js';\nimport { update } from './update.js';\nimport { updateArea } from '../sources/updateArea.js';\nimport { onTerrainChange } from '../terrain/onTerrainChange.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { loadModel } from '../models/loadModel.js';\nimport { get3DEvents } from './get3DEvents.js';\nimport { ready3D } from './ready3D.js';\nimport { noOperation } from '../utils/noOperation.js';\nimport { updateLayerCount } from './updateLayerCount.js';\n\nexport function init3D(layer, options = sceneEmptyOptions) {\n sceneByLayer.get(layer)._3d = true;\n L.Util.setOptions(layer, /* alloc */ { ariaLabel: '3D scene', ...options });\n sceneByLayer.get(layer).kind = '3d';\n const isModel = !sceneByLayer.get(layer)._geojson && /\\.(glb|gltf)(?:[?#]|$)/i.test(layer.options.url);\n sceneByLayer.get(layer).modelUrl = isModel ? layer.options.url : null;\n sceneByLayer.get(layer).url = layer.options.url && !isModel && !sceneByLayer.get(layer)._geojson ? /* alloc */ new URL(layer.options.url, document.baseURI).href : null;\n sceneByLayer.get(layer)._directories = /* alloc */ new Map();\n if (layer.options.center) {\n sceneByLayer.get(layer).location = /* alloc */ new L.LatLng(layer.options.center[0], layer.options.center[1]);\n }\n sceneByLayer.get(layer)._areas = /* alloc */ new Map();\n sceneByLayer.get(layer)._inflight = 0;\n if (sceneByLayer.get(layer).url || sceneByLayer.get(layer)._geojson || isModel) {\n const status = L.DomUtil.create('small', 'layer-count');\n status.style.cssText = 'float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums';\n sceneByLayer.get(layer)._countStatus = status;\n layer.on('add error', updateLayerCount);\n layer.on('ready progress', L.Util.throttle(updateLayerCount, 250, layer));\n }\n sceneByLayer.get(layer)._added = Promise.withResolvers();\n sceneByLayer.get(layer).ready = Promise.resolve().then(ready3D.bind(null, layer));\n sceneByLayer.get(layer).ready.catch(noOperation);\n}\n", "import { radians } from '../globals/radians.js';\r\nimport { renderers } from '../globals/renderers.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { setParent } from './setParent.js';\r\nimport { render } from '../rendering/render.js';\r\nimport { update } from './update.js';\r\nimport { updateArea } from '../sources/updateArea.js';\r\nimport { setTerrainHeight } from '../terrain/setTerrainHeight.js';\r\nimport { noOperation } from '../utils/noOperation.js';\r\nimport { restoreObject } from './restoreObject.js';\r\nimport { traverse } from './traverse.js';\r\nimport { initializeSharedRenderer } from './initializeSharedRenderer.js';\r\n\r\n/**\r\n * Join/create this map's shared scene and rebuild GPU objects if its context changed.\r\n * Buffer/program handles belong to one context; typed arrays and decoded images do not.\r\n * @private\r\n */\r\nexport async function attach(backend, map) {\r\n let shared = renderers.get(map);\r\n if (sceneByLayer.get(shared)?._rendererReady) {\r\n await sceneByLayer.get(shared)._rendererReady.promise;\r\n }\r\n if (!shared) {\r\n shared = backend;\r\n sceneByLayer.get(backend)._rendererReady = Promise.withResolvers();\r\n sceneByLayer.get(backend)._rendererReady.promise.catch(noOperation);\r\n renderers.set(map, shared);\r\n await initializeSharedRenderer(backend, map);\r\n sceneByLayer.get(backend)._rendererReady.resolve();\r\n delete sceneByLayer.get(shared)._rendererReady;\r\n render(shared);\r\n renderers.set(map, shared);\r\n }\r\n const origin = map.options.crs.project(sceneByLayer.get(shared)._sceneOrigin);\r\n const point = map.options.crs.project(sceneByLayer.get(backend).location);\r\n const metres = Math.cos(sceneByLayer.get(shared)._sceneOrigin.lat * radians);\r\n sceneByLayer.get(backend)._terrainBaseY ??= sceneByLayer.get(backend).root.position[1];\r\n sceneByLayer.get(backend).root.position[0] = (point.x - origin.x) * metres;\r\n sceneByLayer.get(backend).root.position[1] = sceneByLayer.get(backend)._terrainBaseY;\r\n sceneByLayer.get(backend).root.position[2] = -(point.y - origin.y) * metres;\r\n setTerrainHeight(backend);\r\n // Each group's metres are measured at its own latitude, not the shared camera origin.\r\n sceneByLayer.get(backend).root.scale.fill(metres / Math.cos(sceneByLayer.get(backend).location.lat * radians));\r\n sceneByLayer.get(backend)._shared = shared;\r\n sceneByLayer.get(backend).renderer = sceneByLayer.get(shared).renderer;\r\n sceneByLayer.get(backend).scene = sceneByLayer.get(shared).scene;\r\n sceneByLayer.get(backend).camera = sceneByLayer.get(shared).camera;\r\n sceneByLayer.get(shared)._layers.add(backend);\r\n setParent(sceneByLayer.get(backend).root, sceneByLayer.get(shared).scene);\r\n traverse(sceneByLayer.get(backend).root, restoreObject, backend);\r\n update(shared);\r\n if ((sceneByLayer.get(backend).header && sceneByLayer.get(backend).kind !== 'raster') || sceneByLayer.get(backend)._geojson) updateArea(backend);\r\n}\r\n", "export const lampDirections = [\r\n { x: Math.cos(0 * Math.PI / 3), y: Math.sin(0 * Math.PI / 3), nx: Math.cos(0.5 * Math.PI / 3), nz: -Math.sin(0.5 * Math.PI / 3) },\r\n { 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) },\r\n { 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) },\r\n { 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) },\r\n { 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) },\r\n { 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) },\r\n];\r\n", "import { lampDirections } from '../globals/lampDirections.js';\n\nexport function ring(point, radius) {\n const points = /* alloc */ new Array(lampDirections.length);\n let i;\n for (i = 0; i < points.length; i++) {\n points[i] = /* alloc */ {\n x: point.x + lampDirections[i].x * radius,\n y: point.y + lampDirections[i].y * radius, ground: point.ground,\n uv: /* alloc */ [3, 3],\n };\n }\n return points;\n}\n", "import { parseColor } from \"../utils/parseColor.js\";\nimport { ring } from './lampRing.js';\nimport { lampDirections } from '../globals/lampDirections.js';\n\n/** Schematic support and lamp head; wall-mounted fixtures do not get an invented pole. */\n\nexport function lampPostGeometry(point, style, addTriangle) {\n const color = parseColor(0x50565a), radius = style.poleRadius;\n if (!Number.isFinite(radius) || radius <= 0) {\n throw /* alloc */ new Error('Invalid lamp pole radius');\n }\n const center = /* alloc */ {\n ...point, uv: /* alloc */ [3, 3],\n };\n let r, low, high, points, i, a, b, nx, nz, section;\n for (section = 0; section < 2; section++) {\n r = section ? radius * 2.5 : radius;\n low = section ? style.top - 0.25 : 0;\n high = section ? style.top + 0.15 : style.top;\n points = ring(point, r);\n for (i = 0; i < 6; i++) {\n a = points[i], b = points[(i + 1) % 6];\n nx = lampDirections[i].nx, nz = lampDirections[i].nz;\n addTriangle(a, low, b, low, b, high, nx, 0, nz, color);\n addTriangle(a, low, b, high, a, high, nx, 0, nz, color);\n addTriangle(center, high, a, high, b, high, 0, 1, 0, color);\n addTriangle(center, low, b, low, a, low, 0, -1, 0, color);\n }\n }\n}\n", "export function quad(addTriangle, color, a, b, c, d, height, nx, ny, nz) {\r\n if (typeof nx !== 'number') {\r\n addTriangle(a, height, b, height, c, height, ...nx, color);\r\n addTriangle(a, height, c, height, d, height, ...nx, color);\r\n } else {\r\n addTriangle(a, height, b, height, c, height, nx, ny, nz, color);\r\n addTriangle(a, height, c, height, d, height, nx, ny, nz, color);\r\n }\r\n}\r\n", "export function emitter(point, u, v, axis) {\r\n const r = 0.65;\r\n return /* alloc */ {\r\n x: point.x + (axis === 2 ? 0 : u * r),\r\n y: point.y + (axis === 1 ? 0 : axis === 2 ? u * r : v * r),\r\n ground: point.ground + (axis === 0 ? 0 : v * r), uv: /* alloc */ [u, v],\r\n };\r\n}\r\n", "import { parseColor } from \"../utils/parseColor.js\";\nimport { quad } from './quad.js';\nimport { emitter } from './emitter.js';\n\n/** Three crossed emitter discs; illumination itself is evaluated on receiving surfaces. */\n\nexport function lightGeometry(point, style, addTriangle) {\n if (!Number.isFinite(style.lightRadius) || style.lightRadius <= 0) throw /* alloc */ new Error('Invalid light radius');\n const color = parseColor(style.color);\n let axis;\n for (axis = 0; axis < 3; axis++) {\n quad(addTriangle, color, emitter(point, -1, -1, axis), emitter(point, 1, -1, axis), emitter(point, 1, 1, axis), emitter(point, -1, 1, axis),\n style.top, axis === 2 ? 1 : 0, axis === 0 ? 1 : 0, axis === 1 ? 1 : 0);\n }\n}\n", "export const roundProfile = [\n [0, 0],\n [0.35, 0.8],\n [0.6, 1],\n [0.85, 0.7],\n [1, 0]\n];\n", "export const ringDirections = [{\n x: Math.cos(0 * Math.PI / 4),\n y: Math.sin(0 * Math.PI / 4),\n nx: Math.cos((0 + 0.5) * Math.PI / 4),\n nz: -Math.sin((0 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(1 * Math.PI / 4),\n y: Math.sin(1 * Math.PI / 4),\n nx: Math.cos((1 + 0.5) * Math.PI / 4),\n nz: -Math.sin((1 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(2 * Math.PI / 4),\n y: Math.sin(2 * Math.PI / 4),\n nx: Math.cos((2 + 0.5) * Math.PI / 4),\n nz: -Math.sin((2 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(3 * Math.PI / 4),\n y: Math.sin(3 * Math.PI / 4),\n nx: Math.cos((3 + 0.5) * Math.PI / 4),\n nz: -Math.sin((3 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(4 * Math.PI / 4),\n y: Math.sin(4 * Math.PI / 4),\n nx: Math.cos((4 + 0.5) * Math.PI / 4),\n nz: -Math.sin((4 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(5 * Math.PI / 4),\n y: Math.sin(5 * Math.PI / 4),\n nx: Math.cos((5 + 0.5) * Math.PI / 4),\n nz: -Math.sin((5 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(6 * Math.PI / 4),\n y: Math.sin(6 * Math.PI / 4),\n nx: Math.cos((6 + 0.5) * Math.PI / 4),\n nz: -Math.sin((6 + 0.5) * Math.PI / 4)\n },\n {\n x: Math.cos(7 * Math.PI / 4),\n y: Math.sin(7 * Math.PI / 4),\n nx: Math.cos((7 + 0.5) * Math.PI / 4),\n nz: -Math.sin((7 + 0.5) * Math.PI / 4)\n },\n];\n", "import { ringDirections } from '../globals/ringDirections.js';\n\n\nexport function ring(point, radius) {\n const result = /* alloc */ new Array(ringDirections.length);\n let i;\n for (i = 0; i < result.length; i++) {\n result[i] = /* alloc */ {\n x: point.x + ringDirections[i].x * radius,\n y: point.y + ringDirections[i].y * radius,\n ground: point.ground,\n };\n }\n return result;\n}\n", "import { ringDirections } from '../globals/ringDirections.js';\n\nimport { ring } from './treeRing.js';\n\nexport function surface(point, addTriangle, lowRadius, low, highRadius, high, color) {\n const lower = ring(point, lowRadius), upper = ring(point, highRadius);\n let i, next, slope, length, nx, nz, ny, normalX, normalZ;\n for (i = 0; i < 8; i++) {\n next = (i + 1) % 8;\n slope = (lowRadius - highRadius) / (high - low);\n length = Math.hypot(1, slope);\n ({ nx, nz } = ringDirections[i]);\n ny = slope / length;\n normalX = nx / length, normalZ = nz / length;\n if (lowRadius) addTriangle(lower[i], low, lower[next], low, upper[next], high, normalX, ny, normalZ, color);\n if (highRadius) addTriangle(lower[i], low, upper[next], high, upper[i], high, normalX, ny, normalZ, color);\n }\n}\n", "export function validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape) {\r\n if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||\r\n trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||\r\n crownShape !== 'round' && crownShape !== 'cone') {\r\n throw /* alloc */ new Error('Invalid tree dimensions or crown shape');\r\n }\r\n}\r\n", "import { roundProfile } from '../globals/roundProfile.js';\n\n\nimport { parseColor } from \"../utils/parseColor.js\";\nimport { ring } from './treeRing.js';\nimport { surface } from './surface.js';\nimport { validateTree } from './validateTree.js';\n\n/** Low-poly tree, sharing the source block's buffers, picking and terrain offset. */\n\nexport function treeGeometry(point, style, addTriangle) {\n const { top, bottom = 0, trunkRadius, crownRadius, crownBottom, crownShape = 'round' } = style;\n validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape);\n const trunk = parseColor(style.trunkColor ?? 0x72513a);\n const crown = parseColor(style.color ?? 0x4f823b);\n surface(point, addTriangle, trunkRadius, bottom, trunkRadius, crownBottom + (top - crownBottom) * 0.25, trunk);\n let i, low, lr, high, hr;\n if (crownShape === 'cone') {\n const base = ring(point, crownRadius);\n for (i = 0; i < 8; i++) addTriangle(point, crownBottom, base[i], crownBottom,\n base[(i + 1) % 8], crownBottom, 0, -1, 0, crown);\n surface(point, addTriangle, crownRadius, crownBottom, 0, top, crown);\n } else {\n for (i = 1; i < roundProfile.length; i++) {\n [low, lr] = roundProfile[i - 1], [high, hr] = roundProfile[i];\n surface(point, addTriangle, lr * crownRadius, crownBottom + low * (top - crownBottom),\n hr * crownRadius, crownBottom + high * (top - crownBottom), crown);\n }\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n/** Emit a snapshot for consumers; ready does not wait for all neighborhood tasks. */\nexport function updateStatus(backend, enabled = true) {\n const progress = /* alloc */ { enabled, loaded: 0, skipped: 0, pending: 0, errors: /* alloc */ [] };\n let area;\n for (area of sceneByLayer.get(backend)._areas.values()) {\n if (area.error) progress.errors.push(area.error);\n else if (!area.done) progress.pending++;\n progress.loaded += area.buildings ?? 0;\n progress.skipped += area.skipped ?? 0;\n }\n backend.fire('progress', progress);\n}\n", "export const archiveDecoder = new TextDecoder();\n", "/** Cumulative Hilbert ID for an archive tile. */\n\nexport function tileId(z, x, y) {\n if (!Number.isInteger(z) || !Number.isInteger(x) || !Number.isInteger(y) || z < 0 || z > 26 ||\n x < 0 || y < 0 || x >= 2 ** z || y >= 2 ** z) {\n throw /* alloc */ new Error('Invalid PMTiles tile coordinates');\n }\n let id = (4 ** z - 1) / 3;\n const n = 2 ** z;\n // Same cumulative Hilbert ordering used by build/pmtiles.js.\n let s, rx, ry, swap;\n for (s = n / 2; s >= 1; s /= 2) {\n rx = (x & s) ? 1 : 0, ry = (y & s) ? 1 : 0;\n id += s * s * ((3 * rx) ^ ry);\n if (!ry) {\n if (rx) { x = n - 1 - x; y = n - 1 - y; }\n swap = x;\n x = y;\n y = swap;\n }\n }\n return id;\n}\n", "export const headerOffsets = [\n 'rootDirectoryOffset', 'rootDirectoryLength', 'jsonMetadataOffset', 'jsonMetadataLength',\n 'leafDirectoryOffset', 'leafDirectoryLength', 'tileDataOffset', 'tileDataLength',\n 'numAddressedTiles', 'numTileEntries', 'numTileContents',\n];\n", "export const headerFlags = ['clustered', 'internalCompression', 'tileCompression', 'tileType', 'minZoom', 'maxZoom'];\n", "export const headerBounds = ['minLon', 'minLat', 'maxLon', 'maxLat'];\n", "import { headerOffsets } from '../globals/headerOffsets.js';\nimport { headerFlags } from '../globals/headerFlags.js';\nimport { headerBounds } from '../globals/headerBounds.js';\n\n\n/** Decode the PMTiles v3 header. */\nexport function decodeHeader(data) {\n const view = data.byteLength >= 127\n ? /* alloc */ new DataView(data) : null;\n // \"PMTiles\" followed by version 3, read as two little-endian words.\n if (!view || view.getUint32(0, true) !== 0x69544d50 || view.getUint32(4, true) !== 0x0373656c) {\n throw /* alloc */ new Error('Expected a PMTiles v3 archive');\n }\n const header = /* alloc */ {};\n let i;\n for (i = 0; i < headerOffsets.length; i++) header[headerOffsets[i]] = Number(view.getBigUint64(8 + i * 8, true));\n for (i = 0; i < headerFlags.length; i++) header[headerFlags[i]] = view.getUint8(96 + i);\n for (i = 0; i < headerBounds.length; i++) header[headerBounds[i]] = view.getInt32(102 + i * 4, true) / 1e7;\n header.centerZoom = view.getUint8(118);\n header.centerLon = view.getInt32(119, true) / 1e7;\n header.centerLat = view.getInt32(123, true) / 1e7;\n return header;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\r\nexport async function read(backend, offset, length, signal) {\r\n signal?.throwIfAborted();\r\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) ||\r\n offset < 0 || length <= 0 || !Number.isSafeInteger(offset + length)) {\r\n throw /* alloc */ new Error('Invalid PMTiles byte range');\r\n }\r\n const response = await fetch(sceneByLayer.get(backend).url, /* alloc */ {\r\n headers: /* alloc */ { Range: `bytes=${offset}-${offset + length - 1}` }, signal,\r\n });\r\n if (!response.ok) {\r\n throw /* alloc */ new Error(`Unable to read PMTiles: HTTP ${response.status}`);\r\n }\r\n const etag = response.headers.get('ETag');\r\n if (sceneByLayer.get(backend)._etag && etag !== sceneByLayer.get(backend)._etag) {\r\n throw /* alloc */ new Error('PMTiles archive changed; recreate the layer');\r\n }\r\n if (etag) sceneByLayer.get(backend)._etag = etag;\r\n let data = await response.arrayBuffer();\r\n if (response.status === 200) {\r\n data = data.slice(offset, offset + length);\r\n } else if (response.status !== 206 ||\r\n !response.headers.get('Content-Range')?.startsWith(`bytes ${offset}-${offset + length - 1}/`)) {\r\n throw /* alloc */ new Error('Invalid PMTiles range response');\r\n }\r\n if (data.byteLength !== length) {\r\n throw /* alloc */ new Error('Truncated PMTiles range');\r\n }\r\n return data;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { decodeHeader } from './decodeHeader.js';\nimport { read } from './read.js';\n\n/** Cache header initialization; failures remain visible to all callers. */\n\nexport function getHeader(layer) {\n if (!sceneByLayer.has(layer)) return layer.getHeader();\n if (layer.options.archive && layer.options.archive !== layer) return getHeader(layer.options.archive);\n return sceneByLayer.get(layer)._header ||= read(layer, 0, 127).then(decodeHeader);\n}\n", "export const directoryReader = {\n bytes: null,\n cursor: 0\n};\n", "\n\nexport function varint(reader) {\n const { bytes } = reader;\n let value = 0;\n let factor, byte;\n for (factor = 1; factor <= 2 ** 49; factor *= 128) {\n if (reader.cursor >= bytes.length) {\n throw /* alloc */ new Error('Truncated PMTiles directory');\n }\n byte = bytes[reader.cursor++];\n value += (byte & 127) * factor;\n if (!Number.isSafeInteger(value)) {\n throw /* alloc */ new Error('Invalid PMTiles directory integer');\n }\n if (byte < 128) return value;\n }\n throw /* alloc */ new Error('Invalid PMTiles directory integer');\n}\n", "import { directoryReader } from '../globals/directoryReader.js';\nimport { varint } from './varint.js';\n\n/** Decode delta/varint directory columns, rejecting malformed entries. */\n\nexport function decodeDirectory(data) {\n const reader = directoryReader;\n const bytes = /* alloc */ new Uint8Array(data);\n reader.bytes = bytes;\n reader.cursor = 0;\n try {\n const count = varint(reader);\n if (count > (bytes.length - reader.cursor) / 4) {\n throw /* alloc */ new Error('Invalid PMTiles directory count');\n }\n const entries = /* alloc */ new Array(count);\n let tileId = 0;\n let i, entry, value;\n for (i = 0; i < count; i++) {\n tileId += varint(reader);\n if (!Number.isSafeInteger(tileId) || (i && tileId <= entries[i - 1].tileId)) {\n throw /* alloc */ new Error('Invalid PMTiles directory tile IDs');\n }\n entries[i] = /* alloc */ { tileId, runLength: 0, length: 0, offset: 0 };\n }\n for (entry of entries) entry.runLength = varint(reader);\n for (entry of entries) {\n entry.length = varint(reader);\n if (!entry.length) {\n throw /* alloc */ new Error('Invalid PMTiles directory length');\n }\n }\n for (i = 0; i < entries.length; i++) {\n entry = entries[i];\n value = varint(reader);\n if (!value && !i) {\n throw /* alloc */ new Error('Invalid PMTiles directory offset');\n }\n entry.offset = value ? value - 1 : entries[i - 1].offset + entries[i - 1].length;\n }\n if (reader.cursor !== bytes.length) {\n throw /* alloc */ new Error('Trailing PMTiles directory data');\n }\n return entries;\n } finally {\n // Decoding is synchronous; release the input before reusing this reader.\n reader.bytes = null;\n reader.cursor = 0;\n }\n}\n", "export async function decompress(data, compression) {\n if (compression === 1) return data;\n if (compression !== 2) {\n throw /* alloc */ new Error(`Unsupported PMTiles compression: ${compression}`);\n }\n const blob = /* alloc */ new Blob(\n /* alloc */ [data]);\n const stream = /* alloc */ new DecompressionStream('gzip');\n return /* alloc */ new Response(blob.stream().pipeThrough(stream)).arrayBuffer();\n}\n", "import { decodeDirectory } from \"./decodeDirectory.js\";\nimport { decompress } from \"./decompress.js\";\nimport { read } from \"./read.js\";\n\nexport async function loadDirectory(backend, offset, length, compression) {\n return decodeDirectory(await decompress(await read(backend, offset, length), compression));\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { loadDirectory } from './loadDirectory.js';\r\n\r\nexport async function getDirectoryEntries(backend, offset, length, compression) {\r\n const directories = sceneByLayer.get(backend)._directories;\r\n const key = `${offset}:${length}`;\r\n if (!directories.has(key)) {\r\n if (directories.size >= 32) directories.delete(directories.keys().next().value);\r\n directories.set(key, loadDirectory(backend, offset, length, compression));\r\n }\r\n const pending = directories.get(key);\r\n try {\r\n return await pending;\r\n } catch (error) {\r\n if (directories.get(key) === pending) directories.delete(key);\r\n throw error;\r\n }\r\n}\r\n", "export function findDirectoryEntry(entries, id) {\r\n let low = 0, high = entries.length - 1, mid;\r\n while (low <= high) {\r\n mid = (low + high) >> 1;\r\n if (entries[mid].tileId <= id) low = mid + 1;\r\n else high = mid - 1;\r\n }\r\n return entries[high];\r\n}\r\n", "import { decompress } from './decompress.js';\r\nimport { read } from './read.js';\r\n\r\nexport async function getTileData(backend, header, entry, id, signal) {\r\n if (id - entry.tileId >= entry.runLength) return;\r\n if (entry.offset + entry.length > header.tileDataLength) {\r\n throw /* alloc */ new Error('PMTiles tile outside data section');\r\n }\r\n const data = await decompress(await read(backend, header.tileDataOffset + entry.offset, entry.length, signal),\r\n header.tileCompression);\r\n signal?.throwIfAborted();\r\n return /* alloc */ { data };\r\n}\r\n", "import { getDirectoryEntries } from './getDirectoryEntries.js';\r\nimport { findDirectoryEntry } from './findDirectoryEntry.js';\r\nimport { getTileData } from './getTileData.js';\r\n\r\nexport async function findTile(backend, header, id, signal) {\r\n let offset = header.rootDirectoryOffset, length = header.rootDirectoryLength;\r\n let firstOffset = -1, secondOffset = -1, thirdOffset = -1;\r\n let depth, entries, entry, tile;\r\n for (depth = 0; depth < 4; depth++) {\r\n if (offset === firstOffset || offset === secondOffset || offset === thirdOffset) {\r\n throw /* alloc */ new Error('Cyclic PMTiles directory');\r\n }\r\n if (depth === 0) firstOffset = offset;\r\n else if (depth === 1) secondOffset = offset;\r\n else if (depth === 2) thirdOffset = offset;\r\n entries = await getDirectoryEntries(backend, offset, length, header.internalCompression);\r\n signal?.throwIfAborted();\r\n entry = findDirectoryEntry(entries, id);\r\n if (!entry) return;\r\n if (entry.runLength) {\r\n tile = await getTileData(backend, header, entry, id, signal);\r\n return tile;\r\n }\r\n if (entry.offset + entry.length > header.leafDirectoryLength) {\r\n throw /* alloc */ new Error('PMTiles directory outside leaf section');\r\n }\r\n offset = header.leafDirectoryOffset + entry.offset;\r\n length = entry.length;\r\n }\r\n throw /* alloc */ new Error('PMTiles directory depth exceeds four levels');\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { tileId } from './tileId.js';\nimport { getHeader } from './getHeader.js';\nimport { findTile } from './findTile.js';\n\n/** Nearest directory entry at/before the Hilbert ID, then follow leaf pointers. */\n\nexport async function getZxy(backend, z, x, y, signal) {\n if (!sceneByLayer.has(backend)) return backend.getZxy(z, x, y, signal);\n if (backend.options.archive && backend.options.archive !== backend) {\n return getZxy(backend.options.archive, z, x, y, signal);\n }\n const id = tileId(z, x, y);\n signal?.throwIfAborted();\n const header = await getHeader(backend);\n signal?.throwIfAborted();\n if (z < header.minZoom || z > header.maxZoom) return;\n return findTile(backend, header, id, signal);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { archiveDecoder } from '../globals/archiveDecoder.js';\n\nimport { getZxy } from './getZxy.js';\n\n\nexport async function loadSource(layer, area) {\n if (sceneByLayer.get(layer)._geojson) {\n const { data, url } = layer.options;\n if (data !== undefined && url) {\n throw /* alloc */ new Error('GeoJSON source requires either data or url');\n }\n if (data !== undefined) return data;\n if (!url) {\n throw /* alloc */ new Error('GeoJSON source requires either data or url');\n }\n const sourceUrl = /* alloc */ new URL(url, document.baseURI);\n const response = await fetch(sourceUrl, /* alloc */ { signal: area.request.signal });\n if (!response.ok) {\n throw /* alloc */ new Error(`Unable to load GeoJSON: HTTP ${response.status}`);\n }\n return response.json();\n }\n const result = await getZxy(layer, area.coords.z, area.coords.x, area.coords.y, area.request.signal);\n return result\n ? JSON.parse(archiveDecoder.decode(result.data))\n : /* alloc */ {\n type: 'FeatureCollection',\n features: /* alloc */ [],\n };\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { buildAreaFeature } from './buildAreaFeature.js';\nimport { attachAreaMesh } from './attachAreaMesh.js';\nimport { loadSource } from '../archives/loadSource.js';\nimport { sourceAreaContext } from './sourceAreaContext.js';\nimport { pump } from './pump.js';\n\nexport async function buildArea(backend, area, map) {\n let feature;\n try {\n await /* alloc */ new Promise(requestAnimationFrame);\n await sceneByLayer.get(cameraByMap.get(map)._terrain3D)?._terrainPromise;\n if (area.request.signal.aborted) return;\n const data = await loadSource(backend, area);\n if (area.request.signal.aborted) return;\n if (data?.type !== 'FeatureCollection' || !Array.isArray(data.features)) {\n throw /* alloc */ new Error('Invalid GeoJSON response');\n }\n if (sceneByLayer.get(backend)._geojson && typeof backend.options.style !== 'function') {\n throw /* alloc */ new Error('style must be a function');\n }\n const context = sourceAreaContext(backend, area, map);\n let deadline = performance.now() + 4;\n for (feature of data.features) {\n if (area.request.signal.aborted) return;\n if (performance.now() >= deadline) {\n await /* alloc */ new Promise(requestAnimationFrame);\n if (area.request.signal.aborted) return;\n deadline = performance.now() + 4;\n }\n buildAreaFeature(context, feature);\n }\n attachAreaMesh(context);\n } catch (error) {\n if (!area.request.signal.aborted) {\n area.error = error.message;\n backend.fire('error', /* alloc */ { error });\n }\n } finally {\n sceneByLayer.get(backend)._inflight--;\n pump(backend, map);\n }\n}\n", "import { L } from '../globals/L.js';\nimport { buildAreaPoint } from './buildAreaPoint.js';\nimport { buildAreaPolygon } from './buildAreaPolygon.js';\nimport { parseColor } from '../utils/parseColor.js';\nimport { featureAnchor } from './featureAnchor.js';\nimport { extrusionStyle } from './extrusionStyle.js';\n\nexport function buildAreaFeature(context, feature) {\n const { backend, area, map } = context;\n const coords = area.coords;\n const coordinates = featureAnchor(feature, backend.options.nightLight);\n const geometry = feature.geometry, isTree = geometry.type === 'Point';\n const lon = coordinates[0], lat = coordinates[1];\n if (coords) {\n const anchor = map.project(/* alloc */ new L.LatLng(lat, lon), coords.z);\n if (Math.floor(anchor.x / 256) !== coords.x || Math.floor(anchor.y / 256) !== coords.y) return;\n }\n const style = extrusionStyle(backend, feature);\n if (style === null) {\n context.skipped++;\n return;\n }\n const { top, bottom = 0, color = 0xd9b38c } = style;\n const baseColor = parseColor(color);\n const vertexStart = context.positions.length / 3;\n if (isTree) buildAreaPoint(context, feature, lon, lat, style, baseColor);\n let polygon;\n if (geometry.type === 'Polygon') buildAreaPolygon(context, geometry.coordinates, top, bottom, baseColor);\n else if (geometry.type === 'MultiPolygon') for (polygon of geometry.coordinates) buildAreaPolygon(context, polygon, top, bottom, baseColor);\n const vertexEnd = context.positions.length / 3;\n context.featureFaces.push(/* alloc */ {\n id: feature.id ?? feature.properties?.objectid ?? JSON.stringify(geometry),\n properties: feature.properties, baseColor,\n faceStart: vertexStart / 3, faceEnd: vertexEnd / 3, vertexStart, vertexEnd,\n });\n}\n", "import { L } from '../globals/L.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { getElevation } from '../terrain/getElevation.js';\n\nexport function projectedTree(context, lon, lat) {\n const { backend, crs, origin, metres, map } = context;\n const location = /* alloc */ new L.LatLng(lat, lon);\n const point = crs.project(location);\n const elevation = cameraByMap.get(map)._terrain3D ? getElevation(cameraByMap.get(map)._terrain3D, location) : undefined;\n return /* alloc */ {\n x: (point.x - origin.x) * metres,\n y: (point.y - origin.y) * metres,\n ground: Number.isFinite(elevation) && Number.isFinite(sceneByLayer.get(backend).root.position[1])\n ? elevation - sceneByLayer.get(backend).root.position[1] : 0,\n };\n}\n", "export const triangleContexts = [];\n", "export function groundOffset(point) {\r\n return point.ground || 0;\r\n}\n", "import { groundOffset } from './groundOffset.js';\n\nexport function addTriangle(context, a, ah, b, bh, c, ch, nx, ny, nz, color) {\r\n const { backend, positions, normals, colors, uvs } = context;\r\n const ux = b.x - a.x, uy = bh - ah, uz = a.y - b.y;\r\n const vx = c.x - a.x, vy = ch - ah, vz = a.y - c.y;\r\n if ((uy * vz - uz * vy) * nx + (uz * vx - ux * vz) * ny + (ux * vy - uy * vx) * nz < 0) {\r\n const point = b, height = bh;\r\n b = c; bh = ch; c = point; ch = height;\r\n }\r\n positions.push(a.x, ah + groundOffset(a), -a.y,\r\n b.x, bh + groundOffset(b), -b.y,\r\n c.x, ch + groundOffset(c), -c.y);\r\n normals.push(nx, ny, nz, nx, ny, nz, nx, ny, nz);\r\n colors.push(color.r, color.g, color.b, color.r, color.g, color.b, color.r, color.g, color.b);\r\n if (backend.options.nightLight) uvs.push(...a.uv, ...b.uv, ...c.uv);\r\n}\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\nimport { addTriangle } from './addTriangle.js';\n\nexport function addGeneratedTriangle(...args) {\r\n addTriangle(triangleContexts[triangleContexts.length - 1], ...args);\r\n}\n", "import { triangleContexts } from '../globals/triangleContexts.js';\n\n\nimport { addGeneratedTriangle } from './addGeneratedTriangle.js';\n\nexport function generateTreeGeometry(context, generator, point, style) {\r\n triangleContexts.push(context);\r\n try {\r\n generator(point, style, addGeneratedTriangle);\r\n } finally {\r\n triangleContexts.pop();\r\n }\r\n}\n", "import { projectedTree } from './projectedTree.js';\nimport { generateTreeGeometry } from './generateTreeGeometry.js';\nimport { lampPostGeometry } from '../geometry/lampPostGeometry.js';\nimport { lightGeometry } from '../geometry/lightGeometry.js';\nimport { treeGeometry } from '../geometry/treeGeometry.js';\n\nexport function buildAreaPoint(context, feature, lon, lat, style, baseColor) {\n const { backend } = context;\n const { top } = style;\n const projected = projectedTree(context, lon, lat);\n if (backend.options.nightLight) {\n if (!Number.isFinite(style.lightFlux) || style.lightFlux <= 0) throw /* alloc */ new Error('Invalid light flux');\n const support = feature.properties?.cod_ouvrag || `${lon},${lat}`;\n if (style.poleRadius > 0 && !context.supports.has(support)) {\n generateTreeGeometry(context, lampPostGeometry, projected, style);\n context.supports.add(support);\n }\n generateTreeGeometry(context, lightGeometry, projected, style);\n context.lights.push(/* alloc */ {\n position: /* alloc */ [projected.x, projected.ground + top, -projected.y],\n radius: Math.hypot(top, style.lightRadius), color: /* alloc */ [baseColor.r, baseColor.g, baseColor.b],\n flux: style.lightFlux,\n });\n } else generateTreeGeometry(context, treeGeometry, projected, style);\n}\n", "import { L } from '../globals/L.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { getElevation } from '../terrain/getElevation.js';\n\nexport function projectRing(context, ring) {\n const { backend, crs, origin, metres, map } = context;\n if (ring.length < 4) throw /* alloc */ new Error('Invalid GeoJSON polygon ring');\n const path = /* alloc */ [];\n let i, lng, lat, location, point, elevation;\n for (i = 0; i < ring.length - 1; i++) {\n lng = ring[i][0], lat = ring[i][1];\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) throw /* alloc */ new Error('Invalid GeoJSON coordinates');\n location = /* alloc */ new L.LatLng(lat, lng);\n point = crs.project(location);\n elevation = cameraByMap.get(map)._terrain3D ? getElevation(cameraByMap.get(map)._terrain3D, location) : undefined;\n path.push(/* alloc */ {\n x: (point.x - origin.x) * metres,\n y: (point.y - origin.y) * metres,\n ground: Number.isFinite(elevation) && Number.isFinite(sceneByLayer.get(backend).root.position[1])\n ? elevation - sceneByLayer.get(backend).root.position[1] : 0,\n });\n }\n return path;\n}\n", "import { projectRing } from './projectRing.js';\nimport { triangulate } from '../triangulation/triangulate.js';\nimport { addTriangle } from './addTriangle.js';\nimport { isClockWise } from '../triangulation/isClockWise.js';\n\nexport function buildAreaPolygon(context, rings, top, bottom, baseColor) {\n if (!rings.length) throw /* alloc */ new Error('Empty GeoJSON polygon');\n const paths = /* alloc */ [];\n let ring, path, point, a, b, c, index, sign, i, length, nx, nz;\n for (ring of rings) paths.push(projectRing(context, ring));\n const points = /* alloc */ [];\n for (path of paths) for (point of path) points.push(point);\n for ([a, b, c] of triangulate(paths[0], paths.slice(1))) {\n addTriangle(context, points[a], top, points[b], top, points[c], top, 0, 1, 0, baseColor);\n if (bottom > 0) addTriangle(context, points[a], bottom, points[b], bottom, points[c], bottom, 0, -1, 0, baseColor);\n }\n for (index = 0; index < paths.length; index++) {\n path = paths[index];\n sign = isClockWise(path) === (index === 0) ? -1 : 1;\n for (i = 0; i < path.length; i++) {\n a = path[i], b = path[(i + 1) % path.length];\n length = Math.hypot(b.x - a.x, b.y - a.y);\n if (!length) continue;\n nx = sign * (b.y - a.y) / length, nz = sign * (b.x - a.x) / length;\n addTriangle(context, a, bottom, b, bottom, b, top, nx, 0, nz, baseColor);\n addTriangle(context, a, bottom, b, top, a, top, nx, 0, nz, baseColor);\n }\n }\n}\n", "export function featureAnchor(feature, nightLight) {\r\n const geometry = feature?.geometry, point = geometry?.type === 'Point';\r\n if (nightLight && !point) throw /* alloc */ new Error('Night lights require Point geometry');\r\n if (geometry?.type !== 'Polygon' && geometry?.type !== 'MultiPolygon' && !point) throw /* alloc */ new Error('Unsupported GeoJSON geometry');\r\n const coordinates = point ? geometry.coordinates :\r\n geometry.type === 'Polygon' ? geometry.coordinates[0]?.[0] : geometry.coordinates[0]?.[0]?.[0];\r\n if (!Number.isFinite(coordinates?.[0]) || !Number.isFinite(coordinates?.[1])) throw /* alloc */ new Error('Invalid GeoJSON coordinates');\r\n return coordinates;\r\n}\r\n", "export function extrusionStyle(backend, feature) {\r\n const style = backend.options.style(feature);\r\n if (style === null) return null;\r\n if (!style || typeof style !== 'object') throw /* alloc */ new Error('style must return an extrusion style or null');\r\n const { top, bottom = 0 } = style;\r\n if (!Number.isFinite(top) || !Number.isFinite(bottom) || bottom < 0 || top <= bottom) {\r\n throw /* alloc */ new Error('Invalid extrusion heights: expected top > bottom >= 0');\r\n }\r\n return style;\r\n}\r\n", "/** Compact repeated features only when reconstructed float32 positions compare equal. */\r\nexport function instanceAreaGeometry(context) {\r\n const { positions, normals, colors, featureFaces } = context;\r\n if (context.backend.options.nightLight || featureFaces.length < 2) return context;\r\n const vertices = featureFaces[0].vertexEnd;\r\n const length = vertices * 3;\r\n if (!vertices || positions.length !== length * featureFaces.length) return context;\r\n const originX = Math.trunc(positions[0]), originY = Math.trunc(positions[1]), originZ = Math.trunc(positions[2]);\r\n const template = /* alloc */ new Float32Array(length);\r\n let i, instance, face, start;\r\n for (i = 0; i < length; i++) template[i] = positions[i] - (i % 3 === 0 ? originX : i % 3 === 1 ? originY : originZ);\r\n const offsets = /* alloc */ new Float32Array(featureFaces.length * 4);\r\n for (instance = 0; instance < featureFaces.length; instance++) {\r\n face = featureFaces[instance];\r\n start = instance * length;\r\n if (face.vertexStart !== instance * vertices || face.vertexEnd !== (instance + 1) * vertices) return context;\r\n offsets[instance * 4] = originX + positions[start] - positions[0];\r\n offsets[instance * 4 + 1] = originY + positions[start + 1] - positions[1];\r\n offsets[instance * 4 + 2] = originZ + positions[start + 2] - positions[2];\r\n offsets[instance * 4 + 3] = instance * vertices;\r\n for (i = 0; i < length; i++) {\r\n if (Math.fround(template[i] + offsets[instance * 4 + i % 3]) !== Math.fround(positions[start + i]) ||\r\n Math.fround(normals[i]) !== Math.fround(normals[start + i]) ||\r\n Math.fround(colors[i]) !== Math.fround(colors[start + i])) return context;\r\n }\r\n }\r\n return /* alloc */ {\r\n positions: template, normals: normals.slice(0, length), colors: colors.slice(0, length),\r\n instanceOffsets: offsets,\r\n };\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { nextId } from '../globals/nextId.js';\n\n\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { createProgram } from '../rendering/createProgram.js';\n\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\nimport { instanceAreaGeometry } from './instanceAreaGeometry.js';\n\nexport function attachAreaMesh(context) {\n const { backend, area } = context;\n if (!context.positions.length) {\n area.mesh = null, area.buildings = 0, area.skipped = context.skipped, area.done = true;\n return;\n }\n const device = sceneByLayer.get(backend).renderer.device;\n const data = instanceAreaGeometry(context);\n const attributes = /* alloc */ {\n position: /* alloc */ { size: 3, data: /* alloc */ new Float32Array(data.positions) },\n normal: /* alloc */ { size: 3, data: /* alloc */ new Float32Array(data.normals) },\n color: /* alloc */ { size: 3, data: /* alloc */ new Float32Array(data.colors) },\n };\n if (data.instanceOffsets) attributes.instanceOffset = /* alloc */ { size: 4, data: data.instanceOffsets };\n if (backend.options.nightLight) attributes.uv = /* alloc */ { size: 2, data: /* alloc */ new Float32Array(context.uvs) };\n let name, attribute;\n for (name in attributes) {\n attribute = attributes[name];\n attribute.count = attribute.data.length / attribute.size;\n attribute.buffer = device.createBuffer(/* alloc */ {\n size: Math.max(4, attribute.data.byteLength),\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n const meshGeometry = /* alloc */ {\n device,\n attributes,\n drawRange: /* alloc */ { start: 0, count: attributes.position.count },\n };\n area.mesh = /* alloc */ {\n ...emptyNode(),\n device,\n geometry: meshGeometry,\n program: createProgram(backend, /* alloc */ {\n instanced: Boolean(data.instanceOffsets),\n vertexColors: true, roofTexture: backend.options.roofTexture,\n wallTexture: backend.options.wallTexture,\n nightLight: Boolean(backend.options.nightLight),\n alphaMode: backend.options.nightLight ? 'BLEND' : undefined,\n doubleSided: Boolean(backend.options.nightLight),\n }),\n id: nextId.value++,\n renderOrder: 0,\n fadeDuration: 250,\n extras: /* alloc */ { featureFaces: context.featureFaces, lights: context.lights },\n };\n area.buildings = context.featureFaces.length;\n area.skipped = context.skipped;\n area.done = true;\n setParent(area.mesh, sceneByLayer.get(backend).root);\n update(backend);\n}\n", "import { radians } from '../globals/radians.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\r\nexport function sourceAreaContext(backend, area, map) {\r\n const crs = map.options.crs, origin = crs.project(sceneByLayer.get(backend).location);\r\n return /* alloc */ {\r\n backend, area, map, crs, origin,\r\n metres: Math.cos(sceneByLayer.get(backend).location.lat * radians),\r\n positions: /* alloc */ [],\r\n normals: /* alloc */ [],\r\n colors: /* alloc */ [],\r\n uvs: /* alloc */ [],\r\n featureFaces: /* alloc */ [],\r\n lights: /* alloc */ [],\r\n supports: /* alloc */ new Set(),\r\n skipped: 0,\r\n };\r\n}\r\n", "export function compareDistance(a, b) {\r\n return a.distance - b.distance;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { compareDistance } from '../utils/compareDistance.js';\r\n\r\nexport function pendingSourceAreas(layers, map) {\r\n const pending = /* alloc */ [];\r\n let layer, area, center;\r\n for (layer of layers) {\r\n for (area of sceneByLayer.get(layer)._areas.values()) {\r\n if (area.started || area.request.signal.aborted) continue;\r\n center = area.coords && map.project(map.getCenter(), area.coords.z).divideBy(256);\r\n pending.push(/* alloc */ {\r\n layer, area,\r\n distance: center\r\n ? Math.hypot(area.coords.x + 0.5 - center.x, area.coords.y + 0.5 - center.y) / 2 ** area.coords.z : 0,\r\n });\r\n }\r\n }\r\n pending.sort(compareDistance);\r\n return pending;\r\n}\r\n", "import { renderers } from '../globals/renderers.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { emptyNode } from \"../scene/emptyNode.js\";\nimport { isClockWise } from \"../triangulation/isClockWise.js\";\nimport { lampPostGeometry } from \"../geometry/lampPostGeometry.js\";\nimport { lightGeometry } from \"../geometry/lightGeometry.js\";\nimport { parseColor } from \"../utils/parseColor.js\";\nimport { treeGeometry } from \"../geometry/treeGeometry.js\";\nimport { triangulate } from \"../triangulation/triangulate.js\";\nimport { createProgram } from '../rendering/createProgram.js';\nimport { updateStatus } from './updateStatus.js';\nimport { loadSource } from '../archives/loadSource.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\nimport { getElevation } from \"../terrain/getElevation.js\";\n\nimport { buildArea } from './buildArea.js';\nimport { pendingSourceAreas } from './pendingSourceAreas.js';\n\n/** Share four load/build slots across source layers, nearest ground blocks first. */\nexport function pump(backend, map = backend._map) {\n const shared = map && renderers.get(map);\n if (!shared) return;\n const layers = /* alloc */ [];\n let layer, area, areaBackend;\n for (layer of sceneByLayer.get(shared)._layers) {\n if (Number.isFinite(sceneByLayer.get(layer)._inflight) && sceneByLayer.get(layer)._areas && (sceneByLayer.get(layer).url || sceneByLayer.get(layer)._geojson)) layers.push(layer);\n }\n const pending = pendingSourceAreas(layers, map);\n let inflight = 0;\n for (layer of layers) inflight += sceneByLayer.get(layer)._inflight;\n for ({ layer: areaBackend, area } of pending) {\n if (inflight >= 4) break;\n if (sceneByLayer.get(areaBackend)._inflight >= 2) continue;\n area.started = true;\n sceneByLayer.get(areaBackend)._inflight++;\n inflight++;\n buildArea(areaBackend, area, map);\n }\n for (layer of layers) updateStatus(layer);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { update } from '../scene/update.js';\n\n/** Highlight a source vertex range in the shader; vertex colors stay untouched. */\n\nexport function setHighlight(backend, feature) {\n if (feature?.model) feature = null;\n if (sceneByLayer.get(backend).highlightedFeature?.mesh === feature?.mesh &&\n sceneByLayer.get(backend).highlightedFeature?.vertexStart === feature?.vertexStart) return;\n if (sceneByLayer.get(backend).highlightedFeature) sceneByLayer.get(backend).highlightedFeature.mesh.highlight = null;\n sceneByLayer.get(backend).highlightedFeature = feature;\n if (feature) {\n feature.mesh.highlightRange[0] = feature.vertexStart;\n feature.mesh.highlightRange[1] = feature.vertexEnd;\n feature.mesh.highlight = feature.mesh.highlightRange;\n }\n update(backend);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n/** Update tooltip content/position and arbitrate cursor ownership across shared layers. */\n\nexport function showFeature(backend, feature, event) {\n const tooltip = sceneByLayer.get(backend)._tooltip;\n if (!tooltip) return;\n if (feature) {\n tooltip.replaceChildren(backend.options.tooltip(feature));\n tooltip.hidden = false;\n const rect = sceneByLayer.get(backend).container.getBoundingClientRect();\n const x = event.clientX - rect.left, y = event.clientY - rect.top;\n tooltip.style.left = `${x + tooltip.offsetWidth + 16 > rect.width ? x - tooltip.offsetWidth - 12 : x + 12}px`;\n tooltip.style.top = `${y + tooltip.offsetHeight + 16 > rect.height ? y - tooltip.offsetHeight - 12 : y + 12}px`;\n } else {\n tooltip.hidden = true;\n }\n const shared = sceneByLayer.get(backend)._shared;\n let layer;\n if (shared) {\n let visible = false;\n for (layer of sceneByLayer.get(shared)._layers) {\n if (sceneByLayer.get(layer)._tooltip && !sceneByLayer.get(layer)._tooltip.hidden) {\n visible = true;\n break;\n }\n }\n if (visible) {\n if (sceneByLayer.get(shared)._cursor === undefined) sceneByLayer.get(shared)._cursor = sceneByLayer.get(backend).container.style.cursor;\n sceneByLayer.get(backend).container.style.cursor = 'pointer';\n } else if (sceneByLayer.get(shared)._cursor !== undefined) {\n sceneByLayer.get(backend).container.style.cursor = sceneByLayer.get(shared)._cursor;\n delete sceneByLayer.get(shared)._cursor;\n }\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { setHighlight } from '../picking/setHighlight.js';\nimport { showFeature } from '../picking/showFeature.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\n\n/** Cancel pending work and dispose this block's GPU data, including any hover highlight. */\nexport function releaseArea(backend, area) {\n area.request.abort();\n let attribute;\n if (area.mesh) {\n if (sceneByLayer.get(backend).highlightedFeature?.mesh === area.mesh) {\n setHighlight(backend, null);\n sceneByLayer.get(backend).hoveredFeature = null;\n showFeature(backend, null);\n }\n setParent(area.mesh, null);\n update(backend);\n const geometry = area.mesh.geometry;\n for (attribute of Object.values(geometry.attributes)) attribute.buffer.destroy();\n area.mesh.program.pipelineCache.clear();\n }\n}\n", "export function compareAreaDistance(a, b) {\n return a.distance - b.distance;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { pump } from \"./pump.js\";\nimport { releaseArea } from './releaseArea.js';\nimport { compareAreaDistance } from './compareAreaDistance.js';\n\n/** Cover the visible ground bounds and one bordering block, clipped to the archive. */\n\nexport function updateArea(backend) {\n if (!backend._map || !sceneByLayer.get(backend)._shared) return;\n if (sceneByLayer.get(backend)._geojson) {\n if (!sceneByLayer.get(backend)._areas.has('geojson')) {\n sceneByLayer.get(backend)._areas.set('geojson', /* alloc */ { request: /* alloc */ new AbortController() });\n }\n pump(backend);\n return;\n }\n if (!sceneByLayer.get(backend).header) return;\n const z = sceneByLayer.get(backend).header.minZoom;\n const center = backend._map.project(backend._map.getCenter(), z).divideBy(256).floor();\n const bounds = backend._map.getBounds();\n const nw = backend._map.project(bounds.getNorthWest(), z).divideBy(256).floor();\n const se = backend._map.project(bounds.getSouthEast(), z).divideBy(256).floor();\n const archiveNW = backend._map.project(/* alloc */ [sceneByLayer.get(backend).header.maxLat, sceneByLayer.get(backend).header.minLon], z).divideBy(256).floor();\n const archiveSE = backend._map.project(/* alloc */ [sceneByLayer.get(backend).header.minLat, sceneByLayer.get(backend).header.maxLon], z).divideBy(256).floor();\n const wanted = /* alloc */ new Map();\n let x, y, key, area, coords;\n for (x = Math.max(0, nw.x - 1, archiveNW.x); x <= Math.min(2 ** z - 1, se.x + 1, archiveSE.x); x++) {\n for (y = Math.max(0, nw.y - 1, archiveNW.y); y <= Math.min(2 ** z - 1, se.y + 1, archiveSE.y); y++) {\n wanted.set(`${x}/${y}`, /* alloc */ { z, x, y });\n }\n }\n for ([key, area] of sceneByLayer.get(backend)._areas) {\n if (!wanted.has(key)) {\n releaseArea(backend, area);\n sceneByLayer.get(backend)._areas.delete(key);\n }\n }\n // Load the nearest new blocks first without rebuilding retained geometry.\n const areas = /* alloc */ [];\n for ([key, coords] of wanted) {\n coords.distance = Math.hypot(coords.x + 0.5 - center.x, coords.y + 0.5 - center.y) / 2 ** z;\n areas.push(coords);\n }\n areas.sort(compareAreaDistance);\n for (coords of areas) {\n key = `${coords.x}/${coords.y}`;\n if (!sceneByLayer.get(backend)._areas.has(key)) sceneByLayer.get(backend)._areas.set(key, /* alloc */ { coords, request: /* alloc */ new AbortController() });\n }\n pump(backend);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { getElevation } from './getElevation.js';\r\n\r\nexport function setTerrainHeight(layer) {\r\n if (!sceneByLayer.get(layer).root || !sceneByLayer.get(layer).location) return;\r\n sceneByLayer.get(layer)._terrainBaseY ??= sceneByLayer.get(layer).root.position[1];\r\n const terrain = cameraByMap.get(layer._map)?._terrain3D;\r\n const elevation = terrain && getElevation(terrain, sceneByLayer.get(layer).location);\r\n const offset = Number.isFinite(elevation) ? layer.options.terrainOffset ?? 0 : 0;\r\n sceneByLayer.get(layer).root.position[1] = sceneByLayer.get(layer)._terrainBaseY + (elevation ?? 0) + offset;\r\n}\r\n", "export function restoreGeometry(geometry, device) {\r\n if (geometry.attributes.index?.data instanceof Uint8Array) {\r\n geometry.attributes.index.data = /* alloc */ new Uint16Array(geometry.attributes.index.data);\r\n }\r\n let name, attribute, oldBuffer;\r\n for (name in geometry.attributes) {\r\n attribute = geometry.attributes[name];\r\n attribute.size ||= 1;\r\n attribute.count = attribute.data.length / attribute.size;\r\n attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';\r\n oldBuffer = attribute.buffer;\r\n attribute.buffer = device.createBuffer(/* alloc */ {\r\n size: Math.max(4, attribute.data.byteLength),\r\n usage: name === 'index'\r\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\r\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\r\n });\r\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\r\n oldBuffer?.destroy();\r\n }\r\n geometry.device = device;\r\n geometry.drawRange.count = geometry.attributes.index?.count || geometry.attributes.position.count;\r\n}\r\n", "export function restoreMaterialTextures(material, device) {\r\n let name, texture;\r\n for (name in material) {\r\n if (name !== 'baseTexture' && name !== 'metalTexture' && name !== 'emissiveTexture' && name !== 'occlusionTexture') continue;\r\n texture = material[name];\r\n if (!texture || texture.device === device) continue;\r\n texture.device = device;\r\n texture.texture = device.createTexture(/* alloc */ {\r\n size: /* alloc */ [texture.image.width, texture.image.height],\r\n format: texture.format,\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n });\r\n texture.sampler = device.createSampler(texture.samplerOptions);\r\n texture.uploaded = null;\r\n }\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { createProgram } from '../rendering/createProgram.js';\nimport { restoreGeometry } from './restoreGeometry.js';\nimport { restoreMaterialTextures } from './restoreMaterialTextures.js';\n\nexport function restoreObject(object, backend) {\n const shared = sceneByLayer.get(backend)._shared;\n let texture;\n if (object.geometry && object.geometry.device !== sceneByLayer.get(shared).renderer.device) {\n const geometry = object.geometry;\n const material = object.program._layerMaterial;\n const device = sceneByLayer.get(shared).renderer.device;\n restoreGeometry(geometry, device);\n object.bindGroup = null;\n if (object.boundTextures) object.boundTextures.length = 0;\n else object.boundTextures = /* alloc */ [];\n restoreMaterialTextures(material, device);\n object.program.pipelineCache.clear();\n object.program = createProgram(backend, material);\n object.device = device;\n }\n if (object.texture && object.texture.device !== sceneByLayer.get(shared).renderer.device) {\n texture = object.texture;\n texture.device = sceneByLayer.get(shared).renderer.device;\n texture.texture = sceneByLayer.get(shared).renderer.device.createTexture(/* alloc */ {\n size: /* alloc */ [object.texture.image.width, object.texture.image.height],\n format: object.texture.format,\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n });\n texture.sampler = sceneByLayer.get(shared).renderer.device.createSampler(texture.samplerOptions);\n texture.uploaded = null;\n }\n}\n", "export const rendererDevices = new WeakMap();\n", "export function showWebGPUWarning(map) {\n const container = map.getContainer();\n if (container.querySelector('.leaflet-webgpu-warning')) return;\n const warning = document.createElement('div');\n warning.className = 'leaflet-webgpu-warning';\n warning.setAttribute('role', 'alert');\n warning.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';\n warning.append('WebGPU is not available in this browser or device. ');\n const link = document.createElement('a');\n link.href = 'https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility';\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.textContent = 'Learn more';\n warning.append(link);\n container.append(warning);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { renderers } from '../globals/renderers.js';\n\n\nimport { showWebGPUWarning } from './showWebGPUWarning.js';\n\nexport function failAttachment(error, backend, map) {\n showWebGPUWarning(map);\n sceneByLayer.get(backend)._rendererReady.reject(error);\n renderers.delete(map);\n throw error;\n}\n", "import { failAttachment } from './failAttachment.js';\n\nexport async function requestAdapter(backend, map) {\n let adapter;\n try {\n adapter = await navigator.gpu.requestAdapter();\n } catch (error) {\n failAttachment(error, backend, map);\n }\n if (!adapter) failAttachment(/* alloc */ new Error('Unable to acquire a WebGPU adapter'), backend, map);\n return adapter;\n}\n", "import { failAttachment } from './failAttachment.js';\n\nexport async function requestDevice(adapter, backend, map) {\n try {\n return await adapter.requestDevice();\n } catch (error) {\n failAttachment(error, backend, map);\n }\n}\n", "import { rendererDevices } from '../globals/rendererDevices.js';\nimport { renderers } from '../globals/renderers.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nexport function rendererDeviceError(event) {\n const map = rendererDevices.get(event.currentTarget);\n const owner = renderers.get(map);\n if (sceneByLayer.get(owner)?.renderer?.device !== event.currentTarget) return;\n if (!sceneByLayer.get(owner)._layers) return;\n let layer;\n for (layer of sceneByLayer.get(owner)._layers) layer.fire('error', /* alloc */ { error: event.error });\n}\n", "import { rendererDevices } from '../globals/rendererDevices.js';\nimport { renderers } from '../globals/renderers.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nexport function rendererDeviceLost([info, device]) {\n const map = rendererDevices.get(device);\n const owner = renderers.get(map);\n if (!owner || sceneByLayer.get(owner).renderer?.device !== device) return;\n const error = /* alloc */ new Error(`WebGPU device lost: ${info.message || info.reason}`);\n let layer;\n for (layer of sceneByLayer.get(owner)._layers) layer.fire('error', /* alloc */ { error });\n}\n", "/** Perspective camera state: fov in degrees, near/far in scene metres. */\r\nexport function createSceneCamera() {\r\n return /* alloc */ {\r\n position: /* alloc */ [0, 0, 0],\r\n up: /* alloc */ [0, 1, 0],\r\n target: /* alloc */ [0, 0, 0],\r\n x: /* alloc */ [0, 0, 0],\r\n y: /* alloc */ [0, 0, 0],\r\n z: /* alloc */ [0, 0, 0],\r\n viewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\r\n projectionMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\r\n projectionViewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\r\n viewTransform: /* alloc */ new DOMMatrix(),\r\n projectionTransform: /* alloc */ new DOMMatrix(),\r\n projectionViewTransform: /* alloc */ new DOMMatrix(),\r\n fov: 45,\r\n aspect: 1,\r\n near: 0.1,\r\n far: 10000,\r\n };\r\n}\r\n", "export const sceneSunlightUniforms = new Float32Array(20);\nsceneSunlightUniforms[0] = sceneSunlightUniforms[5] =\n sceneSunlightUniforms[10] = sceneSunlightUniforms[15] = 1;\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { sceneSunlightUniforms } from '../globals/sceneSunlightUniforms.js';\r\nimport { resizeSunlight } from '../shadows/resizeSunlight.js';\r\n\r\nexport function initializeRendererResources(backend, device) {\r\n const layout = device.createBindGroupLayout(/* alloc */ {\r\n entries: /* alloc */ [\r\n /* alloc */ { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'uniform' } },\r\n /* alloc */ { binding: 1, visibility: GPUShaderStage.FRAGMENT, texture: /* alloc */ { sampleType: 'depth' } },\r\n /* alloc */ { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: /* alloc */ { type: 'comparison' } },\r\n /* alloc */ { binding: 3, visibility: GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'read-only-storage' } },\r\n ]\r\n });\r\n const buffer = sceneByLayer.get(backend).renderer.device.createBuffer(/* alloc */ { size: 80, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });\r\n const sampler = sceneByLayer.get(backend).renderer.device.createSampler(/* alloc */ { compare: 'less-equal', minFilter: 'linear', magFilter: 'linear' });\r\n const lights = sceneByLayer.get(backend).renderer.device.createBuffer(/* alloc */ { size: 32, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\r\n sceneByLayer.get(backend).renderer.sunlight = /* alloc */ { layout, buffer, sampler, lights, size: 0 };\r\n sceneByLayer.get(backend).renderer.device.queue.writeBuffer(buffer, 0, sceneSunlightUniforms);\r\n resizeSunlight(backend, 1);\r\n const emptyImage = document.createElement('canvas');\r\n emptyImage.width = 1;\r\n emptyImage.height = 1;\r\n sceneByLayer.get(backend).renderer.roofFallbackTexture = /* alloc */ {\r\n device,\r\n texture: device.createTexture(/* alloc */ {\r\n size: /* alloc */ [1, 1],\r\n format: 'rgba8unorm',\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler(/* alloc */ {\r\n addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\r\n }),\r\n image: emptyImage, format: 'rgba8unorm', srgb: false, uploaded: null,\r\n };\r\n}\r\n", "export const pendingMapChanges = [];\n", "import { pendingMapChanges } from '../globals/pendingMapChanges.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { update } from './update.js';\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingMapChange() {\n const layer = pendingMapChanges.shift();\n sceneByLayer.get(layer)._queued = false;\n if (sceneByLayer.get(layer)._shared !== layer || !sceneByLayer.get(layer).renderer) return;\n if (layer._map._animatingZoom) update(layer);\n else render(layer);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingMapChanges } from '../globals/pendingMapChanges.js';\n\n\nimport { update } from './update.js';\nimport { render } from \"../rendering/render.js\";\n\nimport { renderPendingMapChange } from './renderPendingMapChange.js';\n\n/** Map movement: render within the frame of Leaflet's CSS transforms, coalescing same-tick events. */\n\nexport function onMapChange() {\n const layer = this;\n if (sceneByLayer.get(layer)._queued) return;\n sceneByLayer.get(layer)._queued = true;\n pendingMapChanges.push(layer);\n queueMicrotask(renderPendingMapChange);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n/** Preserve the outgoing tile level before Leaflet changes its logical zoom. */\n\nexport function startZoom() {\n sceneByLayer.get(this)._zoomLevel = null;\n}\n", "export const pendingZoomAnimations = [];\n", "import { pendingZoomAnimations } from '../globals/pendingZoomAnimations.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { render } from '../rendering/render.js';\n\nexport function renderPendingZoomAnimation() {\n const layer = pendingZoomAnimations.shift();\n if (sceneByLayer.get(layer)._shared === layer && sceneByLayer.get(layer).renderer) render(layer);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingZoomAnimations } from '../globals/pendingZoomAnimations.js';\n\n\nimport { render } from \"../rendering/render.js\";\n\nimport { renderPendingZoomAnimation } from './renderPendingZoomAnimation.js';\n\nexport function onZoomAnim(event) {\n const map = this._map;\n if (event && !sceneByLayer.get(this)._zoomView) {\n sceneByLayer.get(this)._zoomView = /* alloc */ { from: map.getCenter(), zoom: map.getZoom(), to: event.center,\n targetZoom: event.zoom, start: performance.now() };\n map.getContainer().classList.add('leaflet-camera-zoom');\n }\n pendingZoomAnimations.push(this);\n queueMicrotask(renderPendingZoomAnimation);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapUpdateCameraOverlays } from '../camera/mapUpdateCameraOverlays.js';\n\nimport { update } from './update.js';\n\n/** Stop using the outgoing level after zoomend; the next redraw uses current tiles. */\n\nexport function endZoom() {\n const backend = this;\n let animation;\n if (sceneByLayer.get(backend)._zoomTransitions) {\n for (animation of sceneByLayer.get(backend)._zoomTransitions.keys()) animation.finish();\n }\n sceneByLayer.get(backend)._zoomTransitions = null;\n sceneByLayer.get(backend)._zoomView = null;\n delete cameraByMap.get(backend._map)._cameraView;\n backend._map.getContainer().classList.remove('leaflet-camera-zoom');\n mapUpdateCameraOverlays(backend._map);\n sceneByLayer.get(backend)._zoomLevel = null;\n update(backend);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { onMapChange } from './onMapChange.js';\r\nimport { startZoom } from './startZoom.js';\r\nimport { onZoomAnim } from './onZoomAnim.js';\r\nimport { endZoom } from './endZoom.js';\r\n\r\nexport function mountRenderer(backend, map, canvas) {\r\n sceneByLayer.get(backend)._size = null;\r\n canvas.className = 'leaflet-3d';\r\n canvas.style.cssText = 'position:absolute;top:0;left:0;pointer-events:none';\r\n canvas.setAttribute('role', 'img');\r\n canvas.setAttribute('aria-label', backend.options.ariaLabel ?? '3D scene');\r\n let pane = map.getPane('webgpuPane');\r\n if (!pane) {\r\n pane = map.createPane('webgpuPane', map.getContainer());\r\n // The pitch sky uses 0 and may be inserted after this pane.\r\n pane.style.zIndex = 1;\r\n pane.style.pointerEvents = 'none';\r\n }\r\n pane.append(canvas);\r\n map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange, backend);\r\n map.on('zoomstart', startZoom, backend);\r\n map.on('zoomanim', onZoomAnim, backend);\r\n map.on('zoomend', endZoom, backend);\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { rendererDevices } from '../globals/rendererDevices.js';\r\nimport { emptyNode } from './emptyNode.js';\r\nimport { failAttachment } from './failAttachment.js';\r\nimport { requestAdapter } from './requestAdapter.js';\r\nimport { requestDevice } from './requestDevice.js';\r\nimport { rendererDeviceError } from './rendererDeviceError.js';\r\nimport { rendererDeviceLost } from './rendererDeviceLost.js';\r\nimport { createSceneCamera } from './createSceneCamera.js';\r\nimport { initializeRendererResources } from './initializeRendererResources.js';\r\nimport { mountRenderer } from './mountRenderer.js';\r\n\r\nexport async function initializeSharedRenderer(backend, map) {\r\n const canvas = document.createElement('canvas');\r\n if (!navigator.gpu) {\r\n failAttachment(/* alloc */ new Error('Layer3D requires WebGPU'), backend, map);\r\n }\r\n const adapter = await requestAdapter(backend, map);\r\n const device = await requestDevice(adapter, backend, map);\r\n rendererDevices.set(device, map);\r\n device.addEventListener('uncapturederror', rendererDeviceError);\r\n Promise.all(/* alloc */ [device.lost, Promise.resolve(device)]).then(rendererDeviceLost);\r\n const context = canvas.getContext('webgpu');\r\n if (!context) {\r\n device.destroy();\r\n failAttachment(/* alloc */ new Error('Unable to create a WebGPU canvas context'), backend, map);\r\n }\r\n const format = navigator.gpu.getPreferredCanvasFormat();\r\n context.configure(/* alloc */ { device, format, alphaMode: 'premultiplied' });\r\n map.getContainer().querySelector('.leaflet-webgpu-warning')?.remove();\r\n sceneByLayer.get(backend)._shared = backend;\r\n sceneByLayer.get(backend)._layers = /* alloc */ new Set();\r\n sceneByLayer.get(backend)._sceneOrigin = sceneByLayer.get(backend).location;\r\n sceneByLayer.get(backend).scene = emptyNode();\r\n sceneByLayer.get(backend).camera = createSceneCamera();\r\n sceneByLayer.get(backend).renderer = /* alloc */ {\r\n device,\r\n context,\r\n format,\r\n canvas,\r\n dpr: Math.min(window.devicePixelRatio, 2)\r\n };\r\n initializeRendererResources(backend, device);\r\n mountRenderer(backend, map, canvas);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport * as attach from './attach.js';\nimport * as onClick from '../picking/onClick.js';\nimport * as onPointerLeave from '../picking/onPointerLeave.js';\nimport * as onPointerMove from '../picking/onPointerMove.js';\nimport { pointerMove } from '../picking/pointerMove.js';\nimport { pointerClick } from '../picking/pointerClick.js';\nimport { pointerLeave } from '../picking/pointerLeave.js';\nimport { attachLayer } from './attachLayer.js';\n\n/** Attach interaction immediately; initialization may finish before or after onAdd. */\nexport function onAdd3DLayer(backend, map) {\n if (!sceneByLayer.get(backend).location) {\n const center = map.getCenter();\n sceneByLayer.get(backend).location = /* alloc */ new L.LatLng(center.lat, center.lng);\n }\n if (sceneByLayer.get(backend).url || sceneByLayer.get(backend)._geojson || backend.options.tooltip || sceneByLayer.get(backend).modelUrl) {\n sceneByLayer.get(backend).container = map.getContainer();\n sceneByLayer.get(backend)._pointerEvents ||= /* alloc */ {\n mousemove: pointerMove,\n click: pointerClick,\n mouseleave: pointerLeave,\n };\n if (backend.options.tooltip) {\n sceneByLayer.get(backend)._tooltip = L.DomUtil.create('div', 'leaflet-3d-tooltip', sceneByLayer.get(backend).container);\n sceneByLayer.get(backend)._tooltip.hidden = true;\n sceneByLayer.get(backend)._tooltip.setAttribute('role', 'tooltip');\n sceneByLayer.get(backend)._tooltip.setAttribute('aria-live', 'polite');\n sceneByLayer.get(backend)._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';\n }\n L.DomEvent.on(sceneByLayer.get(backend).container, sceneByLayer.get(backend)._pointerEvents, backend);\n }\n if (sceneByLayer.get(backend).root) {\n attachLayer(backend, map);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { raycast } from './raycast.js';\n\n/**\n * Translate a geometry hit into a configured model or batched source feature.\n * Sorted half-open face ranges permit binary search without a feature per triangle.\n * @returns {PickedFeature|null}\n */\n\nexport function findFeature(backend, event) {\n if (!sceneByLayer.get(backend).root || !sceneByLayer.get(backend).camera) {\n return null;\n }\n let hit, object, ranges, low, high, middle, range;\n for (hit of raycast(backend, event, sceneByLayer.get(backend).root.children, Boolean(sceneByLayer.get(backend).model))) {\n if (sceneByLayer.get(backend).model) {\n object = hit.object;\n while (object && object !== sceneByLayer.get(backend).model) {\n object = object.parent;\n }\n if (object === sceneByLayer.get(backend).model) {\n return /* alloc */ {\n id: sceneByLayer.get(backend).model.id, properties: sceneByLayer.get(backend).model.extras,\n model: sceneByLayer.get(backend).model, mesh: hit.object, point: hit.point\n };\n }\n }\n ranges = hit.object.extras?.featureFaces;\n if (!ranges) {\n continue;\n }\n low = 0, high = ranges.length - 1;\n while (low <= high) {\n middle = (low + high) >> 1;\n range = ranges[middle];\n if (hit.faceIndex < range.faceStart) {\n high = middle - 1;\n } else if (hit.faceIndex >= range.faceEnd) {\n low = middle + 1;\n } else {\n return /* alloc */ {\n ...range,\n mesh: hit.object,\n point: hit.point\n };\n }\n }\n }\n return null;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { findFeature } from './findFeature.js';\nimport { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Emit click without moving the map or pinning the tooltip. */\n\nexport function onClick(layer, event) {\n const feature = findFeature(layer, event);\n sceneByLayer.get(layer).hoveredFeature = feature;\n setHighlight(layer, feature);\n showFeature(layer, feature, event);\n layer.fire('featureclick', /* alloc */ { feature, originalEvent: event });\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Clear hover, highlight and tooltip without retaining a selected feature. */\n\nexport function onPointerLeave(layer) {\n sceneByLayer.get(layer).hoveredFeature = null;\n setHighlight(layer, null);\n showFeature(layer, null);\n layer.fire('featurehover', /* alloc */ { feature: null });\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { findFeature } from './findFeature.js';\nimport { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\n\n/** Hover is transient; featurehover also reports misses with feature:null. */\n\nexport function onPointerMove(layer, event) {\n sceneByLayer.get(layer).hoveredFeature = findFeature(layer, event);\n setHighlight(layer, sceneByLayer.get(layer).hoveredFeature);\n showFeature(layer, sceneByLayer.get(layer).hoveredFeature, event);\n layer.fire('featurehover', /* alloc */ {\n feature: sceneByLayer.get(layer).hoveredFeature,\n originalEvent: event\n });\n}\n", "import * as onPointerMove from './onPointerMove.js';\n\nexport function pointerMove(event) {\n onPointerMove.onPointerMove(this, event);\n}\n", "import * as onClick from './onClick.js';\n\nexport function pointerClick(event) {\n onClick.onClick(this, event);\n}\n", "import * as onPointerLeave from './onPointerLeave.js';\n\nexport function pointerLeave() {\n onPointerLeave.onPointerLeave(this);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport * as attach from './attach.js';\n\nexport async function attachLayer(backend, map) {\n try {\n await attach.attach(backend, map);\n sceneByLayer.get(backend)._added.resolve();\n } catch (error) {\n backend.fire('error', /* alloc */ { error });\n }\n}\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { sceneTransferFields } from '../globals/sceneTransferFields.js';\nimport { renderers } from '../globals/renderers.js';\n\n\n\nimport * as endZoom from './endZoom.js';\nimport * as onMapChange from './onMapChange.js';\nimport * as onPointerLeave from '../picking/onPointerLeave.js';\nimport * as onZoomAnim from './onZoomAnim.js';\nimport { releaseArea } from '../sources/releaseArea.js';\nimport { updateStatus } from '../sources/updateStatus.js';\nimport { setParent } from './setParent.js';\nimport * as startZoom from './startZoom.js';\nimport { cancelUpdate } from './cancelUpdate.js';\nimport { update } from './update.js';\nimport { releaseSharedScene } from './releaseSharedScene.js';\n\n/** Release source meshes/UI; retain manually added objects and model CPU data. */\nexport function onRemove3DLayer(backend, map) {\n sceneByLayer.get(backend)._added = Promise.withResolvers();\n if (sceneByLayer.get(backend).container) {\n onPointerLeave.onPointerLeave(backend);\n L.DomEvent.off(sceneByLayer.get(backend).container, sceneByLayer.get(backend)._pointerEvents, backend);\n sceneByLayer.get(backend).container = null;\n }\n let area, key, layer;\n for (area of sceneByLayer.get(backend)._areas.values()) releaseArea(backend, area);\n sceneByLayer.get(backend)._areas.clear();\n sceneByLayer.get(backend)._tooltip?.remove();\n sceneByLayer.get(backend)._tooltip = null;\n if (sceneByLayer.get(backend).url || sceneByLayer.get(backend)._geojson) updateStatus(backend, false);\n const shared = sceneByLayer.get(backend)._shared;\n if (!shared) return;\n setParent(sceneByLayer.get(backend).root, null);\n sceneByLayer.get(shared)._layers.delete(backend);\n if (shared === backend) {\n map.off('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange.onMapChange, backend);\n map.off('zoomstart', startZoom.startZoom, backend);\n map.off('zoomanim', onZoomAnim.onZoomAnim, backend);\n map.off('zoomend', endZoom.endZoom, backend);\n cancelUpdate(backend);\n if (sceneByLayer.get(backend)._layers.size) {\n // Keep the original scene origin and GPU resources when ownership changes.\n const next = sceneByLayer.get(backend)._layers.values().next().value;\n for (key of sceneTransferFields) {\n sceneByLayer.get(next)[key] = sceneByLayer.get(backend)[key];\n delete sceneByLayer.get(backend)[key];\n }\n for (layer of sceneByLayer.get(next)._layers) sceneByLayer.get(layer)._shared = next;\n renderers.set(map, next);\n map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange.onMapChange, next);\n map.on('zoomstart', startZoom.startZoom, next);\n map.on('zoomanim', onZoomAnim.onZoomAnim, next);\n map.on('zoomend', endZoom.endZoom, next);\n update(next);\n } else {\n releaseSharedScene(backend, map);\n }\n } else update(shared);\n sceneByLayer.get(backend)._shared = sceneByLayer.get(backend).renderer = sceneByLayer.get(backend).scene = sceneByLayer.get(backend).camera = null;\n}\n", "export const sceneTransferFields = ['_layers', '_sceneOrigin', '_size', '_zoomLevel', '_zoomTransitions', '_zoomView', '_cursor', '_roofRaster'];\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { renderers } from '../globals/renderers.js';\r\nimport { cameraByMap } from '../globals/cameraByMap.js';\r\nimport { sceneCleanupFields } from '../globals/sceneCleanupFields.js';\r\nimport { destroyTexture } from '../rendering/destroyTexture.js';\r\nimport { releaseRenderer } from './releaseRenderer.js';\r\n\r\nexport function releaseSharedScene(backend, map) {\r\n if (sceneByLayer.get(backend)._roofRaster) destroyTexture(backend, sceneByLayer.get(backend)._roofRaster.texture.texture);\r\n sceneByLayer.get(backend)._roofRaster = null;\r\n if (sceneByLayer.get(backend)._zoomTransitions) {\r\n let animation;\r\n for (animation of sceneByLayer.get(backend)._zoomTransitions.keys()) animation.play();\r\n }\r\n sceneByLayer.get(backend)._zoomTransitions = null;\r\n sceneByLayer.get(backend)._zoomView = null;\r\n delete cameraByMap.get(map)._cameraView;\r\n map.getContainer().classList.remove('leaflet-camera-zoom');\r\n const renderer = sceneByLayer.get(backend).renderer;\r\n renderer.canvas.remove();\r\n releaseRenderer(renderer, backend);\r\n renderers.delete(map);\r\n let key;\r\n for (key of sceneCleanupFields) delete sceneByLayer.get(backend)[key];\r\n}\r\n", "export const sceneCleanupFields = ['_layers', '_sceneOrigin', '_size', '_zoomLevel', '_cursor'];\n", "export async function releaseRenderer(renderer, backend) {\n try {\n await renderer.device.queue.onSubmittedWorkDone();\n renderer.depthTexture?.destroy();\n renderer.roofFallbackTexture?.texture?.destroy();\n renderer.uniformBuffer?.destroy();\n renderer.sunlight?.texture?.destroy();\n renderer.sunlight?.buffer?.destroy();\n renderer.sunlight?.lights?.destroy();\n } catch (error) {\n backend.fire('error', /* alloc */ { error });\n }\n renderer.device.destroy();\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { releaseArea } from '../sources/releaseArea.js';\nimport { updateArea } from \"../sources/updateArea.js\";\n\n/** GeoJSON source areas: loading, building and releasing. */\n\nexport function onTerrainChange(layer) {\n if (!layer._map) return;\n let area;\n for (area of sceneByLayer.get(layer)._areas.values()) {\n releaseArea(layer, area);\n }\n sceneByLayer.get(layer)._areas.clear();\n updateArea(layer);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { decodeModel } from './decodeModel.js';\nimport { setParent } from '../scene/setParent.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\nimport { loadModelResources } from './loadModelResources.js';\nimport { createModelContext } from './createModelContext.js';\nimport { buildModelNodes } from './buildModelNodes.js';\nimport { applyModelTransform } from './applyModelTransform.js';\n\n\n/** glTF/GLB model loading. */\n/** Load the configured GLB/glTF (static triangles) under `root`; GPU resources need attachment. */\n\nexport async function loadModel(backend) {\n await sceneByLayer.get(backend)._added.promise;\n const url = /* alloc */ new URL(sceneByLayer.get(backend).modelUrl, document.baseURI).href;\n const response = await fetch(url);\n if (!response.ok) {\n throw /* alloc */ new Error(`Unable to load model: HTTP ${response.status}`);\n }\n const data = await response.arrayBuffer();\n const description = decodeModel(data);\n const directory = /* alloc */ new URL('.', url).href;\n const images = await loadModelResources(backend, description, directory);\n const context = createModelContext(backend, description, images);\n const scene = description.scenes?.[description.scene || 0];\n if (!scene) throw /* alloc */ new Error('Missing glTF scene');\n const nodes = buildModelNodes(context, scene);\n const model = /* alloc */ {\n ...emptyNode(),\n id: url,\n extras: description.extras || /* alloc */ {},\n };\n if (!nodes.length) throw /* alloc */ new Error('Expected a glTF model with a non-empty scene');\n let node;\n for (node of nodes) setParent(node, model);\n sceneByLayer.get(backend).model = model;\n applyModelTransform(backend);\n setParent(sceneByLayer.get(backend).model, sceneByLayer.get(backend).root);\n conformModelToTerrain(backend, cameraByMap.get(backend._map)?._terrain3D);\n}\n", "export const geometryDecoder = new TextDecoder();\n", "export function hasUnsupportedPrimitives(meshes) {\n if (!meshes) return false;\n let mesh, primitive;\n for (mesh of meshes) {\n for (primitive of mesh.primitives) {\n if (primitive.targets || (primitive.mode !== undefined && primitive.mode !== 4)) return true;\n }\n }\n return false;\n}\n", "import { geometryDecoder } from '../globals/geometryDecoder.js';\n/** Decode a static glTF JSON document or GLB v2 container. */\nimport { hasUnsupportedPrimitives } from './hasUnsupportedPrimitives.js';\n\n\nexport function decodeModel(data) {\n const view = /* alloc */ new DataView(data);\n const decoder = geometryDecoder;\n let description;\n let offset, length, type, chunk;\n if (view.getUint32(0, true) === 0x46546c67) {\n // Decode GLB v2 chunks; unknown types are skipped.\n if (view.getUint32(4, true) !== 2 || view.getUint32(8, true) !== data.byteLength) {\n throw /* alloc */ new Error('Invalid GLB header');\n }\n let binary;\n for (offset = 12; offset < data.byteLength;) {\n if (offset + 8 > data.byteLength) {\n throw /* alloc */ new Error('Truncated GLB chunk');\n }\n length = view.getUint32(offset, true), type = view.getUint32(offset + 4, true);\n offset += 8;\n if (offset + length > data.byteLength) {\n throw /* alloc */ new Error('Truncated GLB data');\n }\n chunk = data.slice(offset, offset + length);\n if (type === 0x4e4f534a) {\n description = JSON.parse(decoder.decode(chunk));\n }\n if (type === 0x004e4942) {\n binary = chunk;\n }\n offset += length;\n }\n if (!description) {\n throw /* alloc */ new Error('Missing GLB JSON');\n }\n if (binary) {\n description.buffers[0].binary = binary;\n }\n } else {\n description = JSON.parse(decoder.decode(data));\n }\n if (description.skins?.length || description.animations?.length || description.extensionsRequired?.length || hasUnsupportedPrimitives(description.meshes)) {\n throw /* alloc */ new Error('Layer3D supports static triangle glTF models without required extensions');\n }\n return description;\n}\n", "import { radians } from '../globals/radians.js';\nimport { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { HEIGHT } from '../globals/HEIGHT.js';\n\n\nimport { computeBounds } from './computeBounds.js';\nimport { getElevation } from '../terrain/getElevation.js';\nimport { update } from '../scene/update.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { vertexNormals } from './vertexNormals.js';\nimport { collectMeshes } from '../collision/collectMeshes.js';\n\nexport function conformModelToTerrain(layer, terrain) {\n if (!sceneByLayer.get(layer).model) return;\n const meshes = /* alloc */ [];\n collectMeshes(sceneByLayer.get(layer).model, meshes);\n let mesh, positions, geometry, position, normals, attribute, normal, world, inverse, i, x, y, z;\n let worldY, weight, worldX, worldZ, point, elevation, offset;\n if (!sceneByLayer.get(terrain)?._terrainReady || !layer.options.terrainConform) {\n for (mesh of meshes) {\n positions = mesh.geometry._terrainBasePositions;\n if (!positions) continue;\n geometry = mesh.geometry, position = geometry.attributes.position;\n position.data.set(positions);\n mesh.device.queue.writeBuffer(position.buffer, 0, positions);\n normals = geometry._terrainBaseNormals;\n if (normals) {\n geometry.attributes.normal.data.set(normals);\n mesh.device.queue.writeBuffer(geometry.attributes.normal.buffer, 0, normals);\n }\n computeBounds(geometry);\n }\n return;\n }\n\n updateWorldMatrix(sceneByLayer.get(layer).root);\n const map = layer._map, crs = map.options.crs;\n const origin = crs.project(sceneByLayer.get(sceneByLayer.get(layer)._shared)._sceneOrigin);\n const metres = Math.cos(sceneByLayer.get(sceneByLayer.get(layer)._shared)._sceneOrigin.lat * radians);\n const pixelScale = crs.scale(sceneByLayer.get(terrain)._terrainZoom);\n\n for (mesh of meshes) {\n geometry = mesh.geometry, attribute = geometry.attributes.position;\n geometry._terrainBasePositions ||= attribute.data.slice();\n normal = geometry.attributes.normal;\n geometry._terrainBaseNormals ||= normal.data.slice();\n attribute.data.set(geometry._terrainBasePositions);\n world = mesh.worldMatrix, inverse = /* alloc */ new DOMMatrix(world).inverse().toFloat64Array();\n for (i = 0; i < attribute.data.length; i += 3) {\n x = attribute.data[i], y = attribute.data[i + 1], z = attribute.data[i + 2];\n worldY = world[1] * x + world[5] * y + world[9] * z + world[13];\n weight = Math.max(0, Math.min(1, 1 - (worldY - sceneByLayer.get(layer).root.position[1]) / HEIGHT));\n if (!weight) continue;\n worldX = world[0] * x + world[4] * y + world[8] * z + world[12];\n worldZ = world[2] * x + world[6] * y + world[10] * z + world[14];\n point = crs.transformation.transform(/* alloc */ new L.Point(\n origin.x + worldX / metres, origin.y - worldZ / metres), pixelScale);\n elevation = getElevation(terrain, point);\n if (!Number.isFinite(elevation)) continue;\n offset = (elevation - worldY) * weight;\n attribute.data[i] += inverse[4] * offset;\n attribute.data[i + 1] += inverse[5] * offset;\n attribute.data[i + 2] += inverse[6] * offset;\n }\n mesh.device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n normal.data.set(vertexNormals(attribute.data, geometry.attributes.index?.data));\n mesh.device.queue.writeBuffer(normal.buffer, 0, normal.data);\n computeBounds(geometry);\n }\n update(layer);\n}\n", "/** Area-weighted vertex normals, for indexed or non-indexed triangles. */\n\nexport function vertexNormals(p, indices) {\n // Accumulate area-weighted face normals for shared vertices, then normalize.\n const normals = /* alloc */ new Float32Array(p.length);\n let i, a, b, c, ux, uy, uz, vx, vy, vz, j, nx, ny, nz, index, length;\n for (i = 0; i < (indices?.length || p.length / 3); i += 3) {\n a = indices ? indices[i] : i, b = indices ? indices[i + 1] : i + 1, c = indices ? indices[i + 2] : i + 2;\n ux = p[b * 3] - p[a * 3], uy = p[b * 3 + 1] - p[a * 3 + 1], uz = p[b * 3 + 2] - p[a * 3 + 2];\n vx = p[c * 3] - p[a * 3], vy = p[c * 3 + 1] - p[a * 3 + 1], vz = p[c * 3 + 2] - p[a * 3 + 2];\n nx = uy * vz - uz * vy, ny = uz * vx - ux * vz, nz = ux * vy - uy * vx;\n for (j = 0; j < 3; j++) {\n index = j === 0 ? a : j === 1 ? b : c;\n normals[index * 3] += nx;\n normals[index * 3 + 1] += ny;\n normals[index * 3 + 2] += nz;\n }\n }\n for (i = 0; i < normals.length; i += 3) {\n length = Math.hypot(normals[i], normals[i + 1], normals[i + 2]) || 1;\n for (j = 0; j < 3; j++) {\n normals[i + j] /= length;\n }\n }\n return normals;\n}\n", "export function collectMeshes(node, meshes) {\n if (node.geometry?.attributes.position) meshes.push(node);\n let child;\n for (child of node.children) collectMeshes(child, meshes);\n}\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\r\nimport { cameraByMap } from '../globals/cameraByMap.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { loadBuffer } from './loadBuffer.js';\r\nimport { loadImage } from './loadImage.js';\r\n\r\nexport async function loadModelResources(backend, description, directory) {\r\n const bufferRequests = /* alloc */ [];\r\n let buffer;\r\n for (buffer of description.buffers || geometryEmpty) bufferRequests.push(loadBuffer(buffer, directory));\r\n await Promise.all(bufferRequests);\r\n await sceneByLayer.get(backend)._added.promise;\r\n const imageRequests = /* alloc */ [];\r\n let image;\r\n for (image of description.images || geometryEmpty) imageRequests.push(loadImage(description, directory, image));\r\n const images = await Promise.all(imageRequests);\r\n await sceneByLayer.get(cameraByMap.get(backend._map)?._terrain3D)?._terrainPromise;\r\n return images;\r\n}\r\n", "export async function loadBuffer(buffer, directory) {\r\n if (buffer.binary) return;\r\n const response = await fetch(/* alloc */ new URL(buffer.uri, directory).href);\r\n if (!response.ok) throw /* alloc */ new Error(`Unable to load model buffer: HTTP ${response.status}`);\r\n buffer.binary = await response.arrayBuffer();\r\n}\r\n", "export const geometryImageOptions = {\n premultiplyAlpha: 'none',\n colorSpaceConversion: 'none'\n};\n", "import { geometryImageOptions } from '../globals/geometryImageOptions.js';\n\r\n\r\nexport async function loadImage(description, directory, image) {\r\n let blob;\r\n if (image.bufferView !== undefined) {\r\n const view = description.bufferViews[image.bufferView];\r\n const buffer = description.buffers[view.buffer].binary;\r\n blob = /* alloc */ new Blob(\r\n /* alloc */ [buffer.slice(view.byteOffset || 0, (view.byteOffset || 0) + view.byteLength)],\r\n /* alloc */ { type: image.mimeType });\r\n } else {\r\n const response = await fetch(/* alloc */ new URL(image.uri, directory).href);\r\n if (!response.ok) throw /* alloc */ new Error(`Unable to load model texture: HTTP ${response.status}`);\r\n blob = await response.blob();\r\n }\r\n // Preserve straight alpha and raw samples; GPU sRGB formats do color decoding.\r\n return createImageBitmap(blob, geometryImageOptions);\r\n}\r\n", "/** Translate glTF sampler constants into WebGPU sampler options. */\n\nexport function textureSampler(sampler) {\n return /* alloc */ {\n addressModeU: sampler?.wrapS === 33071 ? 'clamp-to-edge' : sampler?.wrapS === 33648 ? 'mirror-repeat' : 'repeat',\n addressModeV: sampler?.wrapT === 33071 ? 'clamp-to-edge' : sampler?.wrapT === 33648 ? 'mirror-repeat' : 'repeat',\n magFilter: sampler?.magFilter === 9728 ? 'nearest' : 'linear',\n minFilter: sampler?.minFilter === 9728 || sampler?.minFilter === 9984 || sampler?.minFilter === 9986 ? 'nearest' : 'linear',\n };\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\r\nimport { textureSampler } from './textureSampler.js';\r\n\r\nexport function textureFor(context, reference, color = false) {\r\n const { backend, description, images, textures } = context;\r\n if (!reference) return null;\r\n if ((reference.texCoord || 0) !== 0 || reference.extensions) {\r\n throw /* alloc */ new Error('Model textures currently require untransformed TEXCOORD_0 UVs');\r\n }\r\n const device = sceneByLayer.get(backend).renderer.device;\r\n // A glTF image may serve both color and data maps: those cannot share a GPU format.\r\n const key = `${reference.index}:${color}`;\r\n if (!textures.has(key)) {\r\n const texture = description.textures[reference.index];\r\n const sampler = description.samplers?.[texture.sampler];\r\n const image = images[texture.source];\r\n const format = color ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n const samplerOptions = textureSampler(sampler);\r\n textures.set(key, /* alloc */ {\r\n device,\r\n texture: device.createTexture(/* alloc */ {\r\n size: /* alloc */ [image.width, image.height],\r\n format,\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler(samplerOptions),\r\n samplerOptions,\r\n format,\r\n srgb: color,\r\n image,\r\n flipY: false,\r\n uploaded: null,\r\n });\r\n }\r\n return textures.get(key);\r\n}\r\n", "import { textureFor } from './textureFor.js';\r\n\r\nexport function materialFor(context, material) {\r\n const { backend } = context;\r\n const pbr = material.pbrMetallicRoughness;\r\n return /* alloc */ {\r\n color: pbr?.baseColorFactor ? pbr.baseColorFactor.slice(0, 3) : /* alloc */ [1, 1, 1],\r\n opacity: pbr?.baseColorFactor?.[3] ?? 1,\r\n metallic: pbr?.metallicFactor ?? 1,\r\n roughness: pbr?.roughnessFactor ?? 1,\r\n baseTexture: textureFor(context, pbr?.baseColorTexture, true),\r\n metalTexture: textureFor(context, pbr?.metallicRoughnessTexture),\r\n emissiveTexture: textureFor(context, material.emissiveTexture, true),\r\n occlusionTexture: textureFor(context, material.occlusionTexture),\r\n emissive: material.emissiveFactor || /* alloc */ [0, 0, 0],\r\n occlusionStrength: material.occlusionTexture?.strength ?? 1,\r\n alphaMode: backend.options.alphaMode || material.alphaMode || 'OPAQUE',\r\n alphaCutoff: material.alphaCutoff ?? 0.5,\r\n doubleSided: material.doubleSided,\r\n };\r\n}\r\n", "import { geometryEmpty } from '../globals/geometryEmpty.js';\r\nimport { materialFor } from './materialFor.js';\r\n\r\nexport function createModelContext(backend, description, images) {\r\n const context = /* alloc */ {\r\n backend, description, images,\r\n textures: /* alloc */ new Map(),\r\n materials: /* alloc */ [],\r\n active: /* alloc */ new Set(),\r\n resources: /* alloc */ [],\r\n };\r\n let material;\r\n for (material of description.materials || geometryEmpty) context.materials.push(materialFor(context, material));\r\n return context;\r\n}\r\n", "export const geometryQuaternion = [0, 0, 0, 1];\n", "export const geometryScale = [1, 1, 1];\n", "export const geometryTranslation = [0, 0, 0];\n", "import { geometryQuaternion } from '../globals/geometryQuaternion.js';\nimport { geometryScale } from '../globals/geometryScale.js';\nimport { geometryTranslation } from '../globals/geometryTranslation.js';\n/** glTF quaternion/translation/scale to a column-major matrix. */\n\n\nexport function nodeMatrix(spec) {\n if (spec.matrix) return Array.from(spec.matrix);\n // glTF stores quaternions [x,y,z,w]; convert directly to a scaled column-major matrix.\n const [x, y, z, w] = spec.rotation || geometryQuaternion;\n const [sx, sy, sz] = spec.scale || geometryScale;\n return /* alloc */ [\n (1 - 2 * (y * y + z * z)) * sx,\n 2 * (x * y + z * w) * sx,\n 2 * (x * z - y * w) * sx,\n 0,\n 2 * (x * y - z * w) * sy,\n (1 - 2 * (x * x + z * z)) * sy,\n 2 * (y * z + x * w) * sy, 0,\n 2 * (x * z + y * w) * sz,\n 2 * (y * z - x * w) * sz,\n (1 - 2 * (x * x + y * y)) * sz,\n 0,\n ...(spec.translation || geometryTranslation),\n 1,\n ];\n}\n", "export const geometrySemantics = [\n ['POSITION', 'position'],\n ['NORMAL', 'normal'],\n ['TEXCOORD_0', 'uv']\n];\n", "export const types = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array,\n};\n", "export const sizes = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4\n};\n", "export function readAccessorValue(input, Type, at) {\r\n return Type === Int8Array ? input.getInt8(at) :\r\n Type === Uint8Array ? input.getUint8(at) :\r\n Type === Int16Array ? input.getInt16(at, true) :\r\n Type === Uint16Array ? input.getUint16(at, true) :\r\n Type === Uint32Array ? input.getUint32(at, true) : input.getFloat32(at, true);\r\n}\r\n", "import { readAccessorValue } from './readAccessorValue.js';\n\nexport function readAccessorValues(description, Type, size, data, accessorCount, indices, viewIndex, offset, count, stride) {\n const view = description.bufferViews[viewIndex], bytes = Type.BYTES_PER_ELEMENT;\n const buffer = description.buffers[view.buffer].binary;\n stride ||= size * bytes;\n if (!buffer || stride < size * bytes || offset < 0 ||\n (view.byteOffset || 0) + view.byteLength > buffer.byteLength ||\n (count - 1) * stride + size * bytes + offset > view.byteLength) throw /* alloc */ new Error('glTF accessor outside buffer view');\n const input = /* alloc */ new DataView(buffer);\n let i, j, at, output;\n for (i = 0; i < count; i++) {\n output = indices ? indices[i] : i;\n if (indices && output >= accessorCount) throw /* alloc */ new Error('Invalid sparse glTF index');\n for (j = 0; j < size; j++) {\n at = (view.byteOffset || 0) + offset + i * stride + j * bytes;\n data[output * size + j] = readAccessorValue(input, Type, at);\n }\n }\n}\n", "import { types } from '../globals/types.js';\r\nimport { readAccessorValues } from './readAccessorValues.js';\r\n\r\nexport function readSparseAccessor(description, spec, Type, size, data) {\r\n const sparse = spec.sparse, Index = types[sparse.indices.componentType];\r\n if (Index !== Uint8Array && Index !== Uint16Array && Index !== Uint32Array) {\r\n throw /* alloc */ new Error('Invalid sparse glTF indices');\r\n }\r\n const view = description.bufferViews[sparse.indices.bufferView];\r\n const offset = (view.byteOffset || 0) + (sparse.indices.byteOffset || 0);\r\n if (sparse.count > spec.count ||\r\n (sparse.indices.byteOffset || 0) + sparse.count * Index.BYTES_PER_ELEMENT > view.byteLength) {\r\n throw /* alloc */ new Error('Invalid sparse glTF indices');\r\n }\r\n const indices = /* alloc */ new Index(description.buffers[view.buffer].binary.slice(\r\n offset, offset + sparse.count * Index.BYTES_PER_ELEMENT));\r\n readAccessorValues(description, Type, size, data, spec.count, indices, sparse.values.bufferView,\r\n sparse.values.byteOffset || 0, sparse.count, 0);\r\n}\r\n", "export function normalizeAccessor(spec, Type, data, size) {\r\n const normalized = /* alloc */ new Float32Array(data.length);\r\n let i;\r\n for (i = 0; i < data.length; i++) {\r\n normalized[i] = spec.normalized\r\n ? Math.max(-1, data[i] / (Type === Int8Array ? 127 : Type === Int16Array ? 32767 :\r\n Type === Uint8Array ? 255 : Type === Uint32Array ? 4294967295 : 65535))\r\n : data[i];\r\n }\r\n return /* alloc */ { data: normalized, size, indices: data };\r\n}\r\n", "import { types } from '../globals/types.js';\nimport { sizes } from '../globals/sizes.js';\n\n\nimport { readAccessorValues } from './readAccessorValues.js';\nimport { readSparseAccessor } from './readSparseAccessor.js';\nimport { normalizeAccessor } from './normalizeAccessor.js';\n\n/** Decode packed, interleaved, normalized or sparse glTF accessor data. */\n\nexport function readAccessor(description, index) {\n const spec = description.accessors[index], Type = types[spec.componentType], size = sizes[spec.type];\n if (!Type || !size || !Number.isInteger(spec.count) || spec.count < 0) {\n throw /* alloc */ new Error('Invalid glTF accessor');\n }\n const data = /* alloc */ new Type(spec.count * size);\n if (spec.bufferView !== undefined) {\n readAccessorValues(\n description, Type, size, data, spec.count, null,\n spec.bufferView,\n spec.byteOffset || 0,\n spec.count,\n description.bufferViews[spec.bufferView].byteStride\n );\n }\n if (spec.sparse) {\n readSparseAccessor(description, spec, Type, size, data);\n }\n if (spec.componentType === 5126) {\n return /* alloc */ { data, size };\n }\n return normalizeAccessor(spec, Type, data, size);\n}\n", "import { geometrySemantics } from '../globals/geometrySemantics.js';\r\nimport { readAccessor } from './readAccessor.js';\r\n\r\nexport function readModelAttributes(description, primitive) {\r\n const attributes = /* alloc */ {};\r\n let semantic, name;\r\n for ([semantic, name] of geometrySemantics) {\r\n if (primitive.attributes[semantic] !== undefined) {\r\n attributes[name] = readAccessor(description, primitive.attributes[semantic]);\r\n }\r\n }\r\n if (!attributes.position) throw /* alloc */ new Error('glTF mesh has no positions');\r\n const vertexCount = attributes.position.data.length / 3;\r\n if (attributes.position.size !== 3 || vertexCount < 3) throw /* alloc */ new Error('Invalid glTF vertex attributes');\r\n let attribute;\r\n for (attribute of Object.values(attributes)) {\r\n if (attribute.data.length / attribute.size !== vertexCount) throw /* alloc */ new Error('Invalid glTF vertex attributes');\r\n }\r\n return /* alloc */ { attributes, vertexCount };\r\n}\r\n", "import { readAccessor } from './readAccessor.js';\r\n\r\nexport function readModelIndices(description, primitive, attributes, vertexCount) {\r\n if (primitive.indices !== undefined) {\r\n const index = readAccessor(description, primitive.indices);\r\n attributes.index = /* alloc */ { size: 1, data: index.indices };\r\n if (!(index.indices instanceof Uint8Array || index.indices instanceof Uint16Array ||\r\n index.indices instanceof Uint32Array) || index.size !== 1 || index.indices.length % 3) {\r\n throw /* alloc */ new Error('Invalid glTF triangle indices');\r\n }\r\n let value;\r\n for (value of index.indices) if (value >= vertexCount) throw /* alloc */ new Error('Invalid glTF triangle indices');\r\n } else if (vertexCount % 3) {\r\n throw /* alloc */ new Error('Incomplete glTF triangle');\r\n }\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { vertexNormals } from '../geometry/vertexNormals.js';\r\nimport { createProgram } from '../rendering/createProgram.js';\r\n\r\nexport function createModelGeometry(context, primitive, attributes) {\r\n let normals;\r\n if (!attributes.normal) {\r\n normals = vertexNormals(attributes.position.data, attributes.index?.data);\r\n attributes.normal = /* alloc */ { size: 3, data: normals };\r\n }\r\n const style = context.materials[primitive.material] || /* alloc */ {\r\n color: /* alloc */ [1, 1, 1], metallic: 1,\r\n };\r\n if ((style.baseTexture || style.metalTexture || style.emissiveTexture || style.occlusionTexture) && !attributes.uv) {\r\n throw /* alloc */ new Error('Textured model mesh requires UV coordinates');\r\n }\r\n const program = createProgram(context.backend, style);\r\n context.resources.push(program);\r\n const device = sceneByLayer.get(context.backend).renderer.device;\r\n if (attributes.index?.data instanceof Uint8Array) attributes.index.data = Uint16Array.from(attributes.index.data);\r\n let name, attribute;\r\n for ([name, attribute] of Object.entries(attributes)) {\r\n attribute.size ||= 1;\r\n attribute.count = attribute.data.length / attribute.size;\r\n attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';\r\n attribute.buffer = device.createBuffer(/* alloc */ {\r\n size: Math.max(4, attribute.data.byteLength),\r\n usage: name === 'index'\r\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\r\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\r\n });\r\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\r\n }\r\n const geometry = /* alloc */ {\r\n device, attributes,\r\n drawRange: /* alloc */ { start: 0, count: attributes.index?.count || attributes.position.count },\r\n };\r\n context.resources.push(geometry);\r\n return /* alloc */ { device, geometry, program };\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { nextId } from '../globals/nextId.js';\nimport { geometryEmpty } from '../globals/geometryEmpty.js';\n\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { nodeMatrix } from './nodeMatrix.js';\nimport { setParent } from '../scene/setParent.js';\nimport { readModelAttributes } from './readModelAttributes.js';\nimport { readModelIndices } from './readModelIndices.js';\nimport { createModelGeometry } from './createModelGeometry.js';\n\nexport function modelNode(context, index) {\n const { backend, description, active } = context;\n // Track only the recursion path: shared mesh references are valid, cycles are not.\n if (active.has(index)) throw /* alloc */ new Error('Cyclic glTF nodes');\n const spec = description.nodes[index];\n if (!spec) throw /* alloc */ new Error('Invalid glTF node');\n active.add(index);\n const group = /* alloc */ {\n ...emptyNode(),\n name: spec.name\n };\n group.matrix = nodeMatrix(spec);\n let primitive, attributeData, attributes, vertexCount, built, mesh, child;\n if (spec.mesh !== undefined) {\n for (primitive of description.meshes[spec.mesh].primitives) {\n attributeData = readModelAttributes(description, primitive);\n attributes = attributeData.attributes;\n vertexCount = attributeData.vertexCount;\n readModelIndices(description, primitive, attributes, vertexCount);\n built = createModelGeometry(context, primitive, attributes);\n mesh = /* alloc */ {\n ...emptyNode(),\n device: built.device,\n geometry: built.geometry,\n program: built.program,\n fadeDuration: 250,\n id: nextId.value++,\n renderOrder: 0\n };\n mesh.name = description.meshes[spec.mesh].name;\n mesh.extras = spec.extras || /* alloc */ {};\n setParent(mesh, group);\n }\n }\n for (child of spec.children || geometryEmpty) setParent(modelNode(context, child), group);\n active.delete(index);\n return group;\n}\n", "export function releaseModelResources(context) {\r\n let resource, attribute;\r\n for (resource of context.resources) {\r\n if (resource.attributes) {\r\n for (attribute of Object.values(resource.attributes)) attribute.buffer.destroy();\r\n } else {\r\n resource.pipelineCache.clear();\r\n }\r\n }\r\n}\r\n", "import { modelNode } from './modelNode.js';\r\nimport { releaseModelResources } from './releaseModelResources.js';\r\n\r\nexport function buildModelNodes(context, scene) {\r\n const nodes = /* alloc */ [];\r\n let index;\r\n try {\r\n for (index of scene.nodes) nodes.push(modelNode(context, index));\r\n } catch (error) {\r\n releaseModelResources(context);\r\n throw error;\r\n }\r\n return nodes;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function applyModelTransform(backend) {\r\n const model = sceneByLayer.get(backend).model;\r\n if (backend.options.rotation) {\r\n const [x, y = x, z = x] = backend.options.rotation;\r\n model.rotation[0] = x; model.rotation[1] = y; model.rotation[2] = z;\r\n }\r\n if (backend.options.scale) {\r\n const [x, y = x, z = x] = backend.options.scale;\r\n model.scale[0] = x; model.scale[1] = y; model.scale[2] = z;\r\n }\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { updateArea } from '../sources/updateArea.js';\nimport { onTerrainChange } from '../terrain/onTerrainChange.js';\n\nexport function get3DEvents(layer) {\n const events = /* alloc */ {};\n if (sceneByLayer.get(layer).url) {\n events.moveend = events.zoomend = events.rotate = events.pitch = events.resize = updateArea.bind(null, layer);\n }\n if (sceneByLayer.get(layer)._geojson || sceneByLayer.get(layer).url) {\n events.terrainchange = onTerrainChange.bind(null, layer);\n }\n return events;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { emptyNode } from './emptyNode.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { attach } from './attach.js';\nimport { loadModel } from '../models/loadModel.js';\nimport { update } from './update.js';\n\nexport async function ready3D(layer) {\n try {\n sceneByLayer.get(layer).root = emptyNode();\n sceneByLayer.get(layer).raycaster = /* alloc */ {\n origin: /* alloc */ [0, 0, 0],\n direction: /* alloc */ [0, 0, 0],\n inverse: /* alloc */ new DOMMatrix(),\n meshes: /* alloc */ [],\n };\n if (sceneByLayer.get(layer).url || sceneByLayer.get(layer)._geojson) {\n sceneByLayer.get(layer).group = sceneByLayer.get(layer).root;\n if (sceneByLayer.get(layer).url) sceneByLayer.get(layer).header = await getHeader(layer);\n }\n if (layer._map) {\n await attach(layer, layer._map);\n sceneByLayer.get(layer)._added.resolve();\n }\n if (sceneByLayer.get(layer).modelUrl) await loadModel(layer);\n if (sceneByLayer.get(layer)._shared) update(layer);\n layer.fire('ready');\n return layer;\n } catch (error) {\n layer.fire('error', /* alloc */ { error });\n throw error;\n }\n}\n", "import { L } from '../globals/L.js';\nimport { placeEntryElement } from './placeEntryElement.js';\nexport function placeEntry(map, layer, element) {\n let input, entry;\n for (input of map.getContainer().querySelectorAll('.leaflet-control-layers-selector')) {\n entry = map._layers[input.layerId];\n if (input.layerId === L.Util.stamp(layer) || entry instanceof L.LayerGroup && entry.hasLayer(layer)) {\n placeEntryElement(input, layer, element);\n return true;\n }\n }\n return false;\n}\n", "import { L } from '../globals/L.js';\r\n\r\nexport function placeEntryElement(input, layer, element) {\r\n const label = input.closest('label');\r\n if (element.classList.contains('layer-count')) {\r\n if (!input.hasAttribute('aria-label')) input.setAttribute('aria-label', label.textContent.trim());\r\n element.id = `leaflet-layer-count-${L.Util.stamp(layer)}`;\r\n input.setAttribute('aria-describedby', element.id);\r\n label.append(element);\r\n }\r\n else if (element.classList.contains('traffic-status')) {\r\n let group = label.nextElementSibling;\r\n if (!group?.classList.contains('traffic-status-group')) {\r\n group = L.DomUtil.create('div', 'traffic-status-group');\r\n group.style.cssText = 'display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;';\r\n group.setAttribute('role', 'group');\r\n group.setAttribute('aria-label', 'Traffic counts');\r\n label.after(group);\r\n }\r\n group.append(element);\r\n } else label.after(element);\r\n}\r\n", "import { placeEntry } from './placeEntry.js';\n\nexport function placeUnderEntry(state) {\n const nested = placeEntry(state.map, state.layer, state.element);\n const onPlace = state.onPlace;\n onPlace?.(nested);\n return nested;\n}\n", "export const pendingPlacements = [];\n", "import { pendingPlacements } from '../globals/pendingPlacements.js';\n\n\nimport { placeUnderEntry } from './placeUnderEntry.js';\n\nexport function runPlacements() {\n const state = pendingPlacements.shift();\n if (state?.map.hasLayer(state.layer)) placeUnderEntry(state);\n}\n", "import { pendingPlacements } from '../globals/pendingPlacements.js';\n\n\nimport { runPlacements } from './runPlacements.js';\n\nexport function replaceEntry() {\n pendingPlacements.push(this);\n queueMicrotask(runPlacements);\n}\n", "import { replaceEntry } from './replaceEntry.js';\n\nexport function removeEntry() {\n this.map.off('layeradd layerremove', replaceEntry, this);\n const group = this.element.parentElement;\n this.element.remove();\n if (group?.classList.contains('traffic-status-group') && !group.childElementCount) group.remove();\n}\n", "\nimport { placeUnderEntry } from './placeUnderEntry.js';\nimport { replaceEntry } from './replaceEntry.js';\nimport { removeEntry } from './removeEntry.js';\n\n/**\n * Keeps `element` right under `layer`'s entry in the map's layers control while the layer is on the map.\n * Returns false when no layers control lists the layer.\n */\n\nexport function underEntry(layer, element, onPlace) {\n const state = /* alloc */ { map: layer._map, layer, element, onPlace };\n state.map.on('layeradd layerremove', replaceEntry, state);\n layer.once('remove', removeEntry, state);\n return placeUnderEntry(state);\n}\n", "export function layerCountTitle(scene, formatted, pending, error) {\r\n return error ? `Unable to load: ${typeof error === 'string' ? error : error.message}` :\r\n `${formatted} loaded ${scene.modelUrl ? 'models' : 'elements'} in the current area${pending ? `; ${pending} blocks loading` : ''}`;\r\n}\r\n", "export function renderLayerCount(scene, count, pending, error) {\r\n const status = scene._countStatus;\r\n if (scene.modelUrl) count = scene.model ? 1 : 0;\r\n const loading = pending || (scene.modelUrl ? !scene.model : !scene.header && !scene._geojson);\r\n const formatted = count.toLocaleString('en-US');\r\n const text = error ? 'Error' : `${formatted}${loading ? '\u2026' : ''}`;\r\n const title = layerCountTitle(scene, formatted, pending, error);\r\n if (status.textContent !== text) status.textContent = text;\r\n if (status.title !== title) status.title = title;\r\n if (error && status.getAttribute('role') !== 'alert') status.setAttribute('role', 'alert');\r\n else if (!error && status.hasAttribute('role')) status.removeAttribute('role');\r\n}\r\nimport { layerCountTitle } from './layerCountTitle.js';\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { underEntry } from './underEntry.js';\r\nimport { renderLayerCount } from './renderLayerCount.js';\r\n\r\nexport function updateLayerCount(event) {\r\n const layer = event.target, scene = sceneByLayer.get(layer), status = scene._countStatus;\r\n if (!layer._map) return;\r\n if (event.type === 'add') underEntry(layer, status);\r\n let count = 0, pending = 0, error = event.error, area;\r\n if (Number.isFinite(event.loaded)) {\r\n count = event.loaded;\r\n pending = event.pending ?? 0;\r\n error ||= event.errors?.[0];\r\n } else {\r\n for (area of scene._areas.values()) {\r\n count += area.buildings ?? 0;\r\n if (!area.done && !area.error) pending++;\r\n error ||= area.error;\r\n }\r\n }\r\n renderLayerCount(scene, count, pending, error);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { isLoading } from './isLoading.js';\nimport { getRasterEvents } from './getRasterEvents.js';\nimport { readyRaster } from './readyRaster.js';\nimport { reportError } from './reportError.js';\nimport { emptyNode } from '../scene/emptyNode.js';\nimport { read } from '../archives/read.js';\nimport { getHeader } from '../archives/getHeader.js';\nimport { getZxy } from '../archives/getZxy.js';\nimport { onPMTileAdd } from './onPMTileAdd.js';\nimport { onPMTileRemove } from './onPMTileRemove.js';\nimport { getRasterTileSize } from './getRasterTileSize.js';\nimport { setPMTileOpacity } from './setPMTileOpacity.js';\nimport { setPMTileZIndex } from './setPMTileZIndex.js';\n\nexport function initRaster(layer, options) {\n sceneByLayer.get(layer).kind = 'raster';\n options = /* alloc */ { ariaLabel: 'PMTiles raster', maxZoom: 18, opacity: 1, zIndex: 0, ...options };\n L.Util.setOptions(layer, options);\n sceneByLayer.get(layer).root = emptyNode();\n sceneByLayer.get(layer)._areas = /* alloc */ new Map();\n sceneByLayer.get(layer)._rasterTiles = /* alloc */ new Map();\n sceneByLayer.get(layer)._loadingTiles = 0;\n sceneByLayer.get(layer)._added = Promise.withResolvers();\n sceneByLayer.get(layer).url = /* alloc */ new URL(options.url, document.baseURI).href;\n sceneByLayer.get(layer)._directories = /* alloc */ new Map();\n sceneByLayer.get(layer).ready = Promise.resolve(layer.options.archive || layer)\n .then(readyRaster.bind(null, layer))\n .catch(reportError.bind(null, layer));\n}\n", "export const wantedTiles = new Map();\n", "export const coverageTiles = new Map();\n", "\n\nexport function comparePendingTiles(a, b) {\n return a.tile.coords.z - b.tile.coords.z || a.distance - b.distance;\n}\n", "export const blobParts = [null];\n", "import { radians } from '../globals/radians.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { rasterPoint } from '../globals/rasterPoint.js';\nimport { nextId } from '../globals/nextId.js';\nimport { rasterProgram } from '../terrain/rasterProgram.js';\nimport { terrainBuffers } from '../terrain/terrainBuffers.js';\nimport { setParent } from '../scene/setParent.js';\nimport { update } from '../scene/update.js';\nimport { terrainTileGeometry } from './terrainTileGeometry.js';\n\nexport async function addRasterTile(backend, layer, coords, tile) {\n const ready = await sceneByLayer.get(backend)._terrainPromise;\n if (!ready || !backend._map || cameraByMap.get(backend._map)._terrain3D !== backend || sceneByLayer.get(layer)._terrain3D !== backend ||\n tile.request.signal.aborted || !sceneByLayer.get(layer)._rasterTiles.has(`${coords.z}/${coords.x}/${coords.y}`) ||\n sceneByLayer.get(backend)._rasterTiles.has(tile)) {\n return;\n }\n // Match DEM pixel spacing, capped at 64 subdivisions per tile.\n const divisions = Math.max(1, Math.min(64, 256 / 2 ** (coords.z - sceneByLayer.get(backend)._terrainZoom)));\n const map = backend._map, crs = map.options.crs;\n const origin = crs.project(sceneByLayer.get(backend).location), metres = Math.cos(sceneByLayer.get(backend).location.lat * radians);\n // Tile pixels map linearly to projected metres: one scaled unit grid per tile, elevation in the vertex shader.\n const scale = crs.scale(coords.z), terrainScale = 2 ** (sceneByLayer.get(backend)._terrainZoom - coords.z);\n const point = rasterPoint;\n point.x = coords.x * 256; point.y = coords.y * 256;\n const corner = crs.transformation.untransform(point, scale);\n point.x = (coords.x + 1) * 256; point.y = (coords.y + 1) * 256;\n const opposite = crs.transformation.untransform(point, scale);\n const device = sceneByLayer.get(backend).renderer.device;\n const texture = tile.texture;\n const program = rasterProgram(backend, texture);\n const attributes = terrainBuffers(backend, divisions);\n const base = sceneByLayer.get(backend)._terrainOriginElevation;\n const sizeX = (opposite.x - corner.x) * metres, sizeZ = -(opposite.y - corner.y) * metres;\n // ponytail: ray picking sees the flat unit grid; read the DEM back if terrain must be pickable.\n const geometry = terrainTileGeometry(backend, attributes, sizeX, sizeZ);\n const mesh = /* alloc */ {\n position: /* alloc */ [(corner.x - origin.x) * metres, 0, -(corner.y - origin.y) * metres],\n rotation: /* alloc */ [0, 0, 0],\n scale: /* alloc */ [sizeX, 1, sizeZ],\n worldMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n children: /* alloc */ [],\n visible: true,\n device,\n geometry,\n program,\n texture,\n // DEM pixel of the tile's corner, DEM pixels per tile, and the elevation at the layer origin.\n terrain: /* alloc */ [\n coords.x * 256 * terrainScale - sceneByLayer.get(backend)._terrainBounds.min.x * 256,\n coords.y * 256 * terrainScale - sceneByLayer.get(backend)._terrainBounds.min.y * 256,\n 256 * terrainScale,\n base,\n ],\n tile,\n opacity: layer.options.opacity ?? 1,\n id: nextId.value++,\n renderOrder: layer.options.zIndex || 0,\n fadeDuration: 250,\n fadeStart: tile.loadedAt,\n ground: true,\n _rasterSource: layer,\n };\n tile.mesh.visible = false;\n setParent(mesh, sceneByLayer.get(backend).root);\n update(backend);\n sceneByLayer.get(backend)._rasterTiles.set(tile, mesh);\n}\n", "export const rasterPoint = {\n x: 0,\n y: 0\n};\n", "export const demTexture = {\n size: [null, null],\n format: 'r32float',\n usage: null\n};\n", "export const demTarget = {\n texture: null\n};\n", "export const demLayout = {\n bytesPerRow: null\n};\n", "export const demSize = [null, null];\n", "export function copyTerrainTile(atlas, values, start, columns) {\r\n let row, column, value;\r\n for (row = 0; row < 256; row++) {\r\n for (column = 0; column < 256; column++) {\r\n value = values[row * 256 + column];\r\n if (!Number.isFinite(value) || value <= -1000) continue;\r\n atlas.elevations[start + row * columns * 256 + column] = value;\r\n atlas.low = Math.min(atlas.low, value);\r\n atlas.high = Math.max(atlas.high, value);\r\n }\r\n }\r\n}\r\n", "import { copyTerrainTile } from './copyTerrainTile.js';\n\n/** Float32 DEM atlas; missing samples retain the shader no-data sentinel. */\n\nexport function terrainAtlas(tiles, bounds) {\n const columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;\n const elevations = /* alloc */ new Float32Array(columns * rows * 65536).fill(-1e9);\n const atlas = /* alloc */ { elevations, low: Infinity, high: -Infinity };\n let key, values, coordinates, x, y, start;\n for ([key, values] of tiles) {\n coordinates = key.split('/');\n x = Number(coordinates[0]), y = Number(coordinates[1]);\n start = (y - bounds.min.y) * 256 * columns * 256 + (x - bounds.min.x) * 256;\n copyTerrainTile(atlas, values, start, columns);\n }\n return atlas;\n}\n", "import { demTexture } from '../globals/demTexture.js';\r\nimport { demTarget } from '../globals/demTarget.js';\r\nimport { demLayout } from '../globals/demLayout.js';\r\nimport { demSize } from '../globals/demSize.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { createProgram } from '../rendering/createProgram.js';\r\nimport { destroyTexture } from '../rendering/destroyTexture.js';\r\nimport { terrainAtlas } from './terrainAtlas.js';\r\n\r\nexport function rasterProgram(backend, texture) {\r\n const state = sceneByLayer.get(backend), device = state.renderer.device;\r\n if (state._rasterProgram?.device === device) return state._rasterProgram;\r\n // DEM atlas over the archive's tile grid; invalid or missing samples become -1e9 (the shader's no-data).\r\n // ponytail: one texture, capped by maxTextureDimension2D (32x32 DEM tiles at 8192 px); split it for larger archives.\r\n const bounds = state._terrainBounds, columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;\r\n const { elevations, low, high } = terrainAtlas(state._terrainTiles, bounds);\r\n if (state._dem) destroyTexture(backend, state._dem.texture);\r\n state._dem = /* alloc */ {\r\n texture: device.createTexture((\r\n demTexture.size[0] = columns * 256,\r\n demTexture.size[1] = rows * 256,\r\n demTexture.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\r\n demTexture\r\n )),\r\n low: Number.isFinite(low) ? low : state._terrainOriginElevation,\r\n high: Number.isFinite(high) ? high : state._terrainOriginElevation,\r\n };\r\n device.queue.writeTexture((\r\n demTarget.texture = state._dem.texture,\r\n demTarget\r\n ), elevations,\r\n (\r\n demLayout.bytesPerRow = columns * 1024,\r\n demLayout\r\n ), (\r\n demSize[0] = columns * 256,\r\n demSize[1] = rows * 256,\r\n demSize\r\n ));\r\n demTarget.texture = null;\r\n state._terrainGrids = /* alloc */ new Map();\r\n state._rasterProgram = createProgram(backend, /* alloc */ {\r\n baseTexture: texture,\r\n unlit: true,\r\n terrain: state._dem,\r\n alphaMode: 'BLEND',\r\n depthWrite: true,\r\n doubleSided: backend.options.doubleSided,\r\n });\r\n return state._rasterProgram;\r\n}\r\n", "export const demBuffer = {\n size: null,\n usage: null\n};\n", "/** Unit tile grid; the vertex shader supplies the elevation. */\n\nexport function terrainGrid(divisions) {\n const vertices = (divisions + 1) ** 2;\n const positions = /* alloc */ new Float32Array(vertices * 3);\n const normals = /* alloc */ new Float32Array(vertices * 3);\n const uvs = /* alloc */ new Float32Array(vertices * 2);\n const indices = /* alloc */ new Uint16Array(divisions * divisions * 6);\n let row, column, a, b, c, d, vertex = 0, index = 0;\n for (row = 0; row <= divisions; row++) {\n for (column = 0; column <= divisions; column++) {\n positions[vertex * 3] = column / divisions;\n positions[vertex * 3 + 2] = row / divisions;\n normals[vertex * 3 + 1] = 1;\n uvs[vertex * 2] = column / divisions;\n uvs[vertex * 2 + 1] = row / divisions;\n vertex++;\n if (row < divisions && column < divisions) {\n a = row * (divisions + 1) + column;\n b = a + 1, c = a + divisions + 1, d = c + 1;\n indices[index++] = a; indices[index++] = c; indices[index++] = b;\n indices[index++] = b; indices[index++] = c; indices[index++] = d;\n }\n }\n }\n return /* alloc */ {\n position: /* alloc */ { size: 3, data: positions },\n normal: /* alloc */ { size: 3, data: normals },\n uv: /* alloc */ { size: 2, data: uvs },\n index: /* alloc */ { data: indices },\n };\n}\n", "import { demBuffer } from '../globals/demBuffer.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { terrainGrid } from './terrainGrid.js';\r\n\r\nexport function terrainBuffers(backend, divisions) {\r\n const state = sceneByLayer.get(backend), device = state.renderer.device;\r\n let attributes = state._terrainGrids.get(divisions);\r\n if (!attributes) {\r\n attributes = terrainGrid(divisions);\r\n let name, attribute;\r\n for ([name, attribute] of Object.entries(attributes)) {\r\n attribute.size ||= 1;\r\n attribute.count = attribute.data.length / attribute.size;\r\n attribute.indexFormat = 'uint16';\r\n attribute.buffer = device.createBuffer((\r\n demBuffer.size = Math.max(4, attribute.data.byteLength),\r\n demBuffer.usage = name === 'index'\r\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\r\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\r\n demBuffer\r\n ));\r\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\r\n }\r\n state._terrainGrids.set(divisions, attributes);\r\n }\r\n return attributes;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function terrainTileGeometry(backend, attributes, sizeX, sizeZ) {\r\n const scene = sceneByLayer.get(backend), base = scene._terrainOriginElevation;\r\n const bottom = Math.min(scene._dem.low, base) - base, top = Math.max(scene._dem.high, base) - base;\r\n return /* alloc */ {\r\n device: scene.renderer.device,\r\n attributes,\r\n drawRange: /* alloc */ { start: 0, count: attributes.index.count },\r\n // Bounds must cover the DEM-displaced tile, although picking uses the flat grid.\r\n bounds: /* alloc */ {\r\n min: /* alloc */ [0, bottom, 0], max: /* alloc */ [1, top, 1], center: /* alloc */ [0.5, (bottom + top) / 2, 0.5],\r\n radius: Math.hypot(sizeX, top - bottom, sizeZ) / 2 / Math.max(sizeX, 1, sizeZ),\r\n },\r\n };\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { addRasterTile } from './addRasterTile.js';\n\nexport async function registerTerrainTile(backend, coords, tile) {\n if (sceneByLayer.get(backend)._terrain3D && tile.done && !tile.request.signal.aborted &&\n sceneByLayer.get(backend)._rasterTiles.get(`${coords.z}/${coords.x}/${coords.y}`) === tile) {\n try {\n await addRasterTile(sceneByLayer.get(backend)._terrain3D, backend, coords, tile);\n } catch (error) {\n backend.fire('tileerror', /* alloc */ { tile, coords, error });\n }\n }\n}\n", "import { radians } from '../globals/radians.js';\nimport { rasterTexture } from '../globals/rasterTexture.js';\nimport { rasterSampler } from '../globals/rasterSampler.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { meshImage } from '../globals/meshImage.js';\nimport { meshTarget } from '../globals/meshTarget.js';\nimport { meshCopySize } from '../globals/meshCopySize.js';\nimport { rasterPoint } from '../globals/rasterPoint.js';\nimport { TILE_SIZE } from '../globals/TILE_SIZE.js';\nimport { nextId } from '../globals/nextId.js';\n\n\n\nimport { createProgram } from \"../rendering/createProgram.js\";\nimport { setParent } from \"../scene/setParent.js\";\n\nimport { createGeometry } from './createGeometry.js';\n\nexport function createRasterMesh(backend, tile) {\n const device = sceneByLayer.get(backend).renderer.device;\n const texture = /* alloc */ {\n device,\n texture: device.createTexture((\n rasterTexture.size[0] = tile.image.width,\n rasterTexture.size[1] = tile.image.height,\n rasterTexture.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n rasterTexture\n )),\n sampler: device.createSampler(rasterSampler),\n image: tile.image, format: 'rgba8unorm', srgb: false, uploaded: null,\n };\n const source = meshImage;\n const destination = meshTarget;\n const dimensions = meshCopySize;\n source.source = tile.image;\n source.flipY = false;\n destination.texture = texture.texture;\n dimensions[0] = tile.image.width;\n dimensions[1] = tile.image.height;\n device.queue.copyExternalImageToTexture(source, destination, dimensions);\n source.source = null;\n destination.texture = null;\n texture.uploaded = tile.image;\n\n if (!sceneByLayer.get(backend)._rasterProgram) {\n sceneByLayer.get(backend)._rasterProgram = createProgram(backend, /* alloc */ {\n baseTexture: texture, unlit: true, alphaMode: 'BLEND', doubleSided: backend.options.doubleSided,\n });\n }\n if (!sceneByLayer.get(backend)._rasterGeometry) sceneByLayer.get(backend)._rasterGeometry = createGeometry(device);\n const { coords } = tile;\n const crs = backend._map.options.crs;\n const origin = crs.project(sceneByLayer.get(backend).location);\n const metres = Math.cos(sceneByLayer.get(backend).location.lat * radians);\n const scale = crs.scale(coords.z);\n const point = rasterPoint;\n point.x = coords.x * TILE_SIZE; point.y = coords.y * TILE_SIZE;\n const corner = crs.transformation.untransform(point, scale);\n point.x = (coords.x + 1) * TILE_SIZE; point.y = (coords.y + 1) * TILE_SIZE;\n const opposite = crs.transformation.untransform(point, scale);\n const sizeX = (opposite.x - corner.x) * metres;\n const sizeZ = -(opposite.y - corner.y) * metres;\n tile.texture = texture;\n tile.mesh = /* alloc */ {\n position: /* alloc */ [(corner.x - origin.x) * metres, 0, -(corner.y - origin.y) * metres],\n rotation: /* alloc */ [0, 0, 0],\n scale: /* alloc */ [sizeX, 1, sizeZ],\n worldMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n children: /* alloc */ [], visible: true, device, geometry: sceneByLayer.get(backend)._rasterGeometry,\n program: sceneByLayer.get(backend)._rasterProgram, texture,\n opacity: backend.options.opacity, id: nextId.value++,\n renderOrder: backend.options.zIndex || 0, tile, fadeDuration: 250, ground: true,\n _rasterSource: backend,\n };\n setParent(tile.mesh, sceneByLayer.get(backend).root);\n}\n", "export const rasterTexture = {\n size: [null, null],\n format: 'rgba8unorm',\n usage: null\n};\n", "export const rasterSampler = {\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n magFilter: 'linear',\n minFilter: 'linear'\n};\n", "export const rasterBuffer = {\n size: null,\n usage: null\n};\n", "export const rasterPositions = [0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1];\n", "export const rasterNormals = [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0];\n", "export const rasterUVs = [0, 0, 1, 0, 0, 1, 1, 1];\n", "export const rasterIndices = [0, 2, 1, 1, 2, 3];\n", "import { rasterBuffer } from '../globals/rasterBuffer.js';\nimport { rasterPositions } from '../globals/rasterPositions.js';\nimport { rasterNormals } from '../globals/rasterNormals.js';\nimport { rasterUVs } from '../globals/rasterUVs.js';\nimport { rasterIndices } from '../globals/rasterIndices.js';\n\n\nexport function createGeometry(device) {\n const attributes = /* alloc */ {\n position: /* alloc */ { size: 3, data: /* alloc */ new Float32Array(rasterPositions) },\n normal: /* alloc */ { size: 3, data: /* alloc */ new Float32Array(rasterNormals) },\n uv: /* alloc */ { size: 2, data: /* alloc */ new Float32Array(rasterUVs) },\n index: /* alloc */ { data: /* alloc */ new Uint16Array(rasterIndices) },\n };\n let name, attribute;\n for ([name, attribute] of Object.entries(attributes)) {\n attribute.count = attribute.data.length / (attribute.size || 1);\n attribute.indexFormat = 'uint16';\n attribute.buffer = device.createBuffer((\n rasterBuffer.size = attribute.data.byteLength,\n rasterBuffer.usage = name === 'index' ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n rasterBuffer\n ));\n\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n return /* alloc */ { device, attributes, drawRange: /* alloc */ { start: 0, count: attributes.index.count } };\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { blobParts } from '../globals/blobParts.js';\n\nimport { update } from \"../scene/update.js\";\nimport { registerTerrainTile } from \"./registerTerrainTile.js\";\nimport { pruneRasterTiles } from \"./pruneRasterTiles.js\";\nimport { pumpRasterTiles } from './pumpRasterTiles.js';\nimport { createRasterMesh } from './createRasterMesh.js';\nimport { getZxy } from '../archives/getZxy.js';\n\nexport async function finishRasterTile(backend, tile) {\n try {\n await sceneByLayer.get(backend).ready;\n const result = await getZxy(backend.options.archive,\n tile.coords.z, tile.coords.x, tile.coords.y, tile.request.signal\n );\n if (tile.request.signal.aborted) {\n result?.image?.close();\n return;\n }\n if (!result) throw /* alloc */ new Error(`Tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y} is not in the offline archive`);\n try {\n if (result.image) tile.image = result.image;\n else {\n blobParts[0] = result.data;\n const blob = /* alloc */ new Blob(blobParts);\n blobParts[0] = null;\n tile.image = await createImageBitmap(blob);\n }\n } catch {\n blobParts[0] = null;\n throw /* alloc */ new Error(`Unable to decode tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`);\n }\n if (tile.request.signal.aborted) {\n tile.image.close();\n tile.image = null;\n return;\n }\n createRasterMesh(backend, tile);\n tile.loadedAt = performance.now();\n tile.done = true;\n sceneByLayer.get(backend)._rasterVersion = (sceneByLayer.get(backend)._rasterVersion || 0) + 1;\n registerTerrainTile(backend, tile.coords, tile);\n backend.fire('tileload', /* alloc */ { tile, coords: tile.coords });\n update(backend);\n } catch (error) {\n if (tile.request.signal.aborted) return;\n tile.error = error.message;\n sceneByLayer.get(backend)._rasterVersion = (sceneByLayer.get(backend)._rasterVersion || 0) + 1;\n backend.fire('tileerror', /* alloc */ { tile, coords: tile.coords, error });\n backend.fire('error', /* alloc */ { error, coords: tile.coords });\n } finally {\n sceneByLayer.get(backend)._loadingTiles--;\n if (backend._map) {\n pumpRasterTiles(backend);\n pruneRasterTiles(backend);\n if (!sceneByLayer.get(backend)._loadingTiles) backend.fire('load');\n update(backend);\n }\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { finishRasterTile } from './finishRasterTile.js';\n\nexport function loadRasterTile(backend, tile) {\n tile.started = true;\n const first = sceneByLayer.get(backend)._loadingTiles === 0;\n sceneByLayer.get(backend)._loadingTiles++;\n backend.fire('tileloadstart', /* alloc */ { tile, coords: tile.coords });\n if (first) backend.fire('loading');\n return finishRasterTile(backend, tile);\n}\n", "import { TILE_SIZE } from '../globals/TILE_SIZE.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { comparePendingTiles } from './comparePendingTiles.js';\nimport { loadRasterTile } from './loadRasterTile.js';\n\nexport function pumpRasterTiles(backend) {\n const map = backend._map;\n if (!map) return;\n const center = map.project(map.getCenter(), 0).divideBy(TILE_SIZE);\n const pending = /* alloc */ [];\n let tile, coords;\n for (tile of sceneByLayer.get(backend)._rasterTiles.values()) {\n if (tile.started || tile.request.signal.aborted) continue;\n ({ coords } = tile);\n pending.push(/* alloc */ { tile, distance: Math.hypot((coords.x + 0.5) / 2 ** coords.z - center.x,\n (coords.y + 0.5) / 2 ** coords.z - center.y) });\n }\n pending.sort(comparePendingTiles);\n for ({ tile } of pending) {\n if (sceneByLayer.get(backend)._loadingTiles >= 4) break;\n loadRasterTile(backend, tile);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { releaseRasterTile } from './releaseRasterTile.js';\r\n\r\nexport function retainRasterTiles(backend, required) {\r\n const tiles = sceneByLayer.get(backend)._rasterTiles;\r\n let key, tile, coords;\r\n for ([key, tile] of tiles) {\r\n if (!required.has(key) && !tile.done) releaseRasterTile(backend, tile);\r\n }\r\n for ([key, coords] of required) {\r\n if (tiles.has(key)) continue;\r\n tile = /* alloc */ { coords, request: /* alloc */ new AbortController(), done: false };\r\n tiles.set(key, tile);\r\n }\r\n}\r\n", "export const archiveNorthWest = [0, 0];\n", "export const archiveSouthEast = [0, 0];\n", "import { TILE_SIZE } from '../globals/TILE_SIZE.js';\r\nimport { TILE_RADIUS } from '../globals/TILE_RADIUS.js';\r\nimport { archiveNorthWest } from '../globals/archiveNorthWest.js';\r\nimport { archiveSouthEast } from '../globals/archiveSouthEast.js';\r\n\r\nexport function rasterTileRange(map, header, zoom) {\r\n const bounds = map.getBounds();\r\n const northwest = map.project(bounds.getNorthWest(), zoom).divideBy(TILE_SIZE).floor();\r\n const southeast = map.project(bounds.getSouthEast(), zoom).divideBy(TILE_SIZE).floor();\r\n archiveNorthWest[0] = header.maxLat; archiveNorthWest[1] = header.minLon;\r\n archiveSouthEast[0] = header.minLat; archiveSouthEast[1] = header.maxLon;\r\n const archiveMin = header.maxLat === undefined || header.minLon === undefined\r\n ? null : map.project(archiveNorthWest, zoom).divideBy(TILE_SIZE).floor();\r\n const archiveMax = header.minLat === undefined || header.maxLon === undefined\r\n ? null : map.project(archiveSouthEast, zoom).divideBy(TILE_SIZE).floor();\r\n const center = map.project(map.getCenter(), zoom).divideBy(TILE_SIZE).floor();\r\n return /* alloc */ {\r\n minX: Math.max(0, northwest.x, archiveMin?.x ?? 0, center.x - TILE_RADIUS),\r\n maxX: Math.min(2 ** zoom - 1, southeast.x, archiveMax?.x ?? 2 ** zoom - 1, center.x + TILE_RADIUS),\r\n minY: Math.max(0, northwest.y, archiveMin?.y ?? 0, center.y - TILE_RADIUS),\r\n maxY: Math.min(2 ** zoom - 1, southeast.y, archiveMax?.y ?? 2 ** zoom - 1, center.y + TILE_RADIUS),\r\n };\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { wantedTiles } from '../globals/wantedTiles.js';\nimport { coverageTiles } from '../globals/coverageTiles.js';\n\n\n\nimport { pumpRasterTiles } from './pumpRasterTiles.js';\n\nimport { retainRasterTiles } from './retainRasterTiles.js';\nimport { pruneRasterTiles } from './pruneRasterTiles.js';\nimport { rasterTileRange } from './rasterTileRange.js';\n\n// ponytail: cap horizon views at 169 tiles; raise the radius if extreme pitches need more.\n\nexport function updateRasterTiles(backend) {\n const map = backend._map;\n if (!map || !sceneByLayer.get(backend)._shared || !sceneByLayer.get(backend).header) return;\n\n const zoom = Math.max(sceneByLayer.get(backend).header.minZoom ?? 0, Math.min(\n Math.round(map.getZoom()),\n backend.options.maxZoom,\n backend.options.maxNativeZoom\n ));\n sceneByLayer.get(backend)._tileZoom = zoom;\n const range = rasterTileRange(map, sceneByLayer.get(backend).header, zoom);\n const wanted = wantedTiles;\n wanted.clear();\n let x, y, key, coords, parent;\n for (x = range.minX; x <= range.maxX; x++) {\n for (y = range.minY; y <= range.maxY; y++) {\n wanted.set(`${zoom}/${x}/${y}`, /* alloc */ { z: zoom, x, y });\n }\n }\n sceneByLayer.get(backend)._wantedRasterTiles = /* alloc */ new Set(wanted.keys());\n const coverage = coverageTiles;\n coverage.clear();\n const parentZoom = Math.max(sceneByLayer.get(backend).header.minZoom ?? 0, zoom - 2), factor = 2 ** (zoom - parentZoom);\n if (parentZoom < zoom) {\n for ([key, coords] of wanted) {\n if (sceneByLayer.get(backend)._rasterTiles.get(key)?.done) continue;\n parent = /* alloc */ { z: parentZoom, x: Math.floor(coords.x / factor), y: Math.floor(coords.y / factor) };\n coverage.set(`${parent.z}/${parent.x}/${parent.y}`, parent);\n }\n }\n const required = /* alloc */ new Map(coverage);\n for ([key, coords] of wanted) required.set(key, coords);\n wanted.clear(); coverage.clear();\n retainRasterTiles(backend, required);\n pumpRasterTiles(backend);\n pruneRasterTiles(backend);\n}\n", "import { updateRasterTiles } from \"./updateRasterTiles.js\";\n\nexport function getRasterEvents(layer) {\n const update = updateRasterTiles.bind(null, layer);\n return /* alloc */ { moveend: update, zoomend: update, rotate: update, pitch: update, resize: update };\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { getHeader } from \"../archives/getHeader.js\";\n\nexport async function readyRaster(layer, archive) {\n const header = await getHeader(archive);\n layer.options.archive = archive;\n sceneByLayer.get(layer).header = header;\n if (layer.options.maxNativeZoom === undefined) {\n layer.options.maxNativeZoom = header.maxZoom;\n }\n layer.options.maxZoom = Math.max(layer.options.minZoom || 0, layer.options.maxZoom);\n layer.fire('ready');\n return layer;\n}\n", "\n\nexport function reportError(layer, error) {\n layer.fire('error', /* alloc */ { error });\n throw error;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { setRasterTerrain } from \"./setRasterTerrain.js\";\n\nexport async function finishAttachment(backend, map, attached) {\n try {\n await attached;\n sceneByLayer.get(backend)._added.resolve();\n setRasterTerrain(backend, cameraByMap.get(map)._terrain3D);\n } catch (error) {\n backend.fire('error', /* alloc */ { error });\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { removeRasterTile } from './removeRasterTile.js';\nimport { setParent } from '../scene/setParent.js';\nimport { registerTerrainTile } from './registerTerrainTile.js';\n\nexport function setRasterTerrain(backend, terrain) {\n // Pending sources bind the current terrain when their raster attachment is ready.\n if (!sceneByLayer.get(backend)._rasterTiles || sceneByLayer.get(backend)._terrain3D === terrain) return;\n let tile;\n for (tile of sceneByLayer.get(backend)._rasterTiles.values()) {\n if(sceneByLayer.get(backend)._terrain3D) removeRasterTile(sceneByLayer.get(backend)._terrain3D, tile);\n if (tile.mesh) {\n tile.mesh.visible = true;\n setParent(tile.mesh, sceneByLayer.get(backend).root);\n }\n }\n sceneByLayer.get(backend)._terrain3D = terrain || null;\n if (terrain) {\n for (tile of sceneByLayer.get(backend)._rasterTiles.values()) {\n if (tile.done) registerTerrainTile(backend, tile.coords, tile);\n }\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { updateRasterTiles } from \"./updateRasterTiles.js\";\n\nexport async function updateAttachedTiles(backend, map, attached) {\n try {\n await Promise.all(/* alloc */ [attached, sceneByLayer.get(backend).ready]);\n if (backend._map === map && map.hasLayer(backend)) updateRasterTiles(backend);\n } catch (error) {\n backend.fire('error', /* alloc */ { error });\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { finishAttachment } from './finishAttachment.js';\nimport { updateAttachedTiles } from './updateAttachedTiles.js';\nimport { attach } from '../scene/attach.js';\n\nexport function onPMTileAdd(backend, map) {\n if (!sceneByLayer.get(backend).location) sceneByLayer.get(backend).location = map.getCenter();\n const attached = attach(backend, map);\n finishAttachment(backend, map, attached);\n updateAttachedTiles(backend, map, attached);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { releaseRasterTile } from './releaseRasterTile.js';\n\nexport function releaseRasterTiles(backend) {\n let tile, attribute;\n for (tile of sceneByLayer.get(backend)._rasterTiles.values()) releaseRasterTile(backend, tile);\n sceneByLayer.get(backend)._rasterProgram?.pipelineCache.clear();\n sceneByLayer.get(backend)._rasterProgram = null;\n if (sceneByLayer.get(backend)._rasterGeometry) {\n for (attribute of Object.values(sceneByLayer.get(backend)._rasterGeometry.attributes)) {\n destroyTexture(backend, attribute.buffer);\n }\n sceneByLayer.get(backend)._rasterGeometry = null;\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { releaseRasterTiles } from './releaseRasterTiles.js';\nimport { onRemove3DLayer } from '../scene/onRemove3DLayer.js';\n\nexport function onPMTileRemove(backend, map) {\n releaseRasterTiles(backend);\n sceneByLayer.get(backend)._terrain3D = null;\n onRemove3DLayer(backend, map);\n}\n", "import { L } from '../globals/L.js';\nimport { TILE_SIZE } from '../globals/TILE_SIZE.js';\n\n\nexport function getRasterTileSize() {\n return /* alloc */ new L.Point(TILE_SIZE, TILE_SIZE);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\nimport { renderEmpty } from '../globals/renderEmpty.js';\n\nimport { destroyTexture } from '../rendering/destroyTexture.js';\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\nimport { disposeMesh } from '../rendering/disposeMesh.js';\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\nimport { removeRasterTile } from '../raster/removeRasterTile.js';\nimport { setTerrainHeight } from './setTerrainHeight.js';\nimport { onRemove3DLayer } from '../scene/onRemove3DLayer.js';\nimport { clearLayerTerrain } from './clearLayerTerrain.js';\n\nexport function onTerrainRemove(layer, map) {\n sceneByLayer.get(layer)._terrainController?.abort();\n sceneByLayer.get(layer)._terrainLoading = false;\n sceneByLayer.get(layer)._terrainReady = false;\n map.eachLayer(clearLayerTerrain);\n let tile, l, grid, attribute;\n for (tile of sceneByLayer.get(layer)._rasterTiles.keys()) removeRasterTile(layer, tile);\n if (cameraByMap.get(map)._terrain3D === layer) delete cameraByMap.get(map)._terrain3D;\n for (l of Object.values(map._layers)) {\n conformModelToTerrain(l, null);\n setTerrainHeight(l);\n }\n\n map.fire('terrainchange');\n sceneByLayer.get(layer)._terrainTiles.clear();\n sceneByLayer.get(layer)._terrainOriginElevation = 0;\n sceneByLayer.get(layer)._terrainPromise = null;\n if (sceneByLayer.get(layer)._rasterProgram) {\n sceneByLayer.get(layer)._rasterProgram.pipelineCache.clear();\n }\n sceneByLayer.get(layer)._rasterProgram = null;\n if (sceneByLayer.get(layer)._dem) destroyTexture(layer, sceneByLayer.get(layer)._dem.texture);\n sceneByLayer.get(layer)._dem = null;\n for (grid of sceneByLayer.get(layer)._terrainGrids?.values() || renderEmpty) {\n for (attribute of Object.values(grid)) destroyTexture(layer, attribute.buffer);\n }\n sceneByLayer.get(layer)._terrainGrids = null;\n sceneByLayer.get(layer)._bridges = null;\n disposeMesh(layer, sceneByLayer.get(layer)._bridgeMesh);\n sceneByLayer.get(layer)._bridgeMesh = null;\n onRemove3DLayer(layer, map);\n}\n", "export const renderEmpty = Object.freeze([]);\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\n\nexport function clearLayerTerrain(layer) {\n if (sceneByLayer.get(layer).kind === 'raster') setRasterTerrain(layer, null);\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { loadTerrain } from \"./loadTerrain.js\";\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\nimport { onAdd3DLayer } from '../scene/onAdd3DLayer.js';\nimport { loadReadyTerrain } from './loadReadyTerrain.js';\nimport { setLayerTerrain } from './setLayerTerrain.js';\n\nexport function onTerrainAdd(backend, map) {\n if (cameraByMap.get(map)._terrain3D && cameraByMap.get(map)._terrain3D !== backend) {\n throw /* alloc */ new Error('Only one terrain layer can be active per map');\n }\n cameraByMap.get(map)._terrain3D = backend;\n onAdd3DLayer(backend, map);\n if (sceneByLayer.get(backend).root) sceneByLayer.get(backend)._terrainPromise = loadTerrain(backend);\n else {\n const pending = Promise.withResolvers();\n sceneByLayer.get(backend)._terrainPromise = pending.promise;\n backend.once('ready', loadReadyTerrain, /* alloc */ { backend, ...pending });\n }\n map.eachLayer(setLayerTerrain, backend);\n map.fire('terrainchange');\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport async function loadTerrainTiles(state) {\n const { backend, archive, controller, tiles } = state;\n let coords, result;\n while (state.next < tiles.length) {\n controller.signal.throwIfAborted();\n coords = tiles[state.next++];\n result = await getZxy(archive, coords.z, coords.x, coords.y, controller.signal);\n if (!result || result.data.byteLength !== 256 * 256 * 4) {\n throw /* alloc */ new Error(`Missing or invalid Float32 terrain tile ${coords.z}/${coords.x}/${coords.y}`);\n }\n sceneByLayer.get(backend)._terrainTiles.set(`${coords.x}/${coords.y}`, /* alloc */ new Float32Array(result.data));\n }\n}\nimport { getZxy } from '../archives/getZxy.js';\n", "export function readBridges(response) {\r\n if (!response.ok) throw /* alloc */ new Error(`Bridges: HTTP ${response.status}`);\r\n return response.json();\r\n}\r\n", "import { L } from '../globals/L.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { archiveNorthWest } from '../globals/archiveNorthWest.js';\r\nimport { archiveSouthEast } from '../globals/archiveSouthEast.js';\r\nimport { compareDistance } from '../utils/compareDistance.js';\r\n\r\nexport function terrainTileQueue(backend, header) {\r\n const scene = sceneByLayer.get(backend), map = backend._map;\r\n scene._terrainZoom = header.maxZoom;\r\n archiveNorthWest[0] = header.maxLat; archiveNorthWest[1] = header.minLon;\r\n const northwest = map.project(archiveNorthWest, scene._terrainZoom).divideBy(256).floor();\r\n archiveSouthEast[0] = header.minLat; archiveSouthEast[1] = header.maxLon;\r\n const southeast = map.project(archiveSouthEast, scene._terrainZoom).divideBy(256).floor();\r\n scene._terrainBounds = /* alloc */ new L.Bounds(northwest, southeast);\r\n const tiles = /* alloc */ [];\r\n const center = map.project(map.getCenter(), scene._terrainZoom).divideBy(256);\r\n let x, y;\r\n for (x = northwest.x; x <= southeast.x; x++) {\r\n for (y = northwest.y; y <= southeast.y; y++) {\r\n tiles.push(/* alloc */ { z: scene._terrainZoom, x, y, distance: Math.hypot(x + 0.5 - center.x, y + 0.5 - center.y) });\r\n }\r\n }\r\n tiles.sort(compareDistance);\r\n return tiles;\r\n}\r\n", "import { radians } from '../globals/radians.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { createMesh } from '../rendering/createMesh.js';\r\nimport { bridgePolygon } from './bridgePolygon.js';\r\n\r\n/**\r\n * Bare-earth DEMs drop bridges: `getElevation` returns the deck height inside these polygons (GeoJSON\r\n * Polygon/MultiPolygon with Z, e.g. IGN BD TOPO), and one mesh draws the 1.2 m thick decks.\r\n * ponytail: anything under a deck (quays, boats asking `getElevation`) also gets the deck height.\r\n */\r\nexport function addBridges(backend, geojson) {\r\n const map = backend._map, crs = map.options.crs, zoom = sceneByLayer.get(backend)._terrainZoom;\r\n const origin = crs.project(sceneByLayer.get(backend).location), metres = Math.cos(sceneByLayer.get(backend).location.lat * radians);\r\n const base = sceneByLayer.get(backend).root.position[1];\r\n const position = /* alloc */ [], normal = /* alloc */ [], color = /* alloc */ [];\r\n sceneByLayer.get(backend)._bridges = /* alloc */ new Map();\r\n const context = /* alloc */ { backend, map, crs, zoom, origin, metres, base, position, normal, color };\r\n let geometry, polygons, polygonIndex;\r\n for ({ geometry } of geojson.features) {\r\n if (geometry.type !== 'Polygon' && geometry.type !== 'MultiPolygon') continue;\r\n polygons = geometry.coordinates;\r\n for (polygonIndex = 0; polygonIndex < (geometry.type === 'Polygon' ? 1 : polygons.length); polygonIndex++) {\r\n bridgePolygon(context, geometry.type === 'Polygon' ? polygons : polygons[polygonIndex]);\r\n }\r\n }\r\n if (position.length) {\r\n sceneByLayer.get(backend)._bridgeMesh = createMesh(backend, /* alloc */ { position, normal, color });\r\n }\r\n}\r\n", "import { L } from '../globals/L.js';\nexport function local([lng, lat, z], crs, origin, metres, base) {\r\n const p = crs.project(/* alloc */ new L.LatLng(lat, lng));\r\n return /* alloc */ [(p.x - origin.x) * metres, z - base, -(p.y - origin.y) * metres];\r\n}\r\n", "export function bridgePaths(rings, pixels) {\r\n const paths = /* alloc */ [];\r\n let start = 0, ring, path, i;\r\n for (ring of rings) {\r\n path = /* alloc */ [];\r\n for (i = 0; i < ring.length; i++) path.push(/* alloc */ { x: pixels[start + i][0], y: pixels[start + i][1] });\r\n paths.push(path);\r\n start += ring.length;\r\n }\r\n return paths;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function indexBridge(backend, pixels, triangles) {\r\n const bridgeTriangles = /* alloc */ [];\r\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\r\n let t, triangle, i, p, x, y, key, bucket;\r\n for (t of triangles) {\r\n triangle = /* alloc */ [];\r\n for (i of t) triangle.push(pixels[i]);\r\n bridgeTriangles.push(triangle);\r\n }\r\n for (p of pixels) {\r\n minX = Math.min(minX, p[0]); minY = Math.min(minY, p[1]);\r\n maxX = Math.max(maxX, p[0]); maxY = Math.max(maxY, p[1]);\r\n }\r\n const bridge = /* alloc */ {\r\n triangles: bridgeTriangles,\r\n min: /* alloc */ [minX, minY],\r\n max: /* alloc */ [maxX, maxY],\r\n };\r\n for (x = Math.floor(bridge.min[0] / 64); x <= Math.floor(bridge.max[0] / 64); x++) {\r\n for (y = Math.floor(bridge.min[1] / 64); y <= Math.floor(bridge.max[1] / 64); y++) {\r\n key = `${x}/${y}`;\r\n bucket = sceneByLayer.get(backend)._bridges.get(key);\r\n if (!bucket) sceneByLayer.get(backend)._bridges.set(key, bucket = /* alloc */ []);\r\n bucket.push(bridge);\r\n }\r\n }\r\n}\r\n", "export function bridgeFaces(context, points, triangles) {\r\n const { position, normal, color } = context;\r\n let a, b, c, pa, pb, pc, i, k, p;\r\n for ([a, b, c] of triangles) {\r\n // Counter-clockwise seen from above, so double-sided shading keeps the top lit.\r\n pa = points[a]; pb = points[b]; pc = points[c];\r\n if ((pb[2] - pa[2]) * (pc[0] - pa[0]) - (pb[0] - pa[0]) * (pc[2] - pa[2]) < 0) { i = b; b = c; c = i; }\r\n for (k = 0; k < 6; k++) {\r\n i = k === 0 || k === 3 ? a : k === 1 || k === 5 ? b : c;\r\n p = points[i];\r\n position.push(p[0], p[1] - (k >= 3 ? 1.2 : 0), p[2]);\r\n normal.push(0, k >= 3 ? -1 : 1, 0); color.push(0.6, 0.58, 0.54);\r\n }\r\n }\r\n}\r\n", "export function bridgeEdge(context, p, q) {\r\n const { position, normal, color } = context;\r\n const length = Math.hypot(q[0] - p[0], q[2] - p[2]) || 1;\r\n const nx = (q[2] - p[2]) / length, nz = -(q[0] - p[0]) / length;\r\n let k, corner;\r\n for (k = 0; k < 6; k++) {\r\n corner = k === 0 || k === 3 || k === 5 ? p : q;\r\n position.push(corner[0], corner[1] - (k === 2 || k >= 4 ? 1.2 : 0), corner[2]);\r\n normal.push(nx, 0, nz); color.push(0.6, 0.58, 0.54);\r\n }\r\n}\r\n", "import { bridgeEdge } from './bridgeEdge.js';\r\n\r\nexport function bridgeSides(context, points, rings) {\r\n let start = 0, ring, i;\r\n for (ring of rings) {\r\n for (i = 0; i < ring.length; i++) {\r\n bridgeEdge(context, points[start + i], points[start + (i + 1) % ring.length]);\r\n }\r\n start += ring.length;\r\n }\r\n}\r\n", "import { triangulate } from '../triangulation/triangulate.js';\r\nimport { local } from './bridgeLocal.js';\r\nimport { bridgePaths } from './bridgePaths.js';\r\nimport { indexBridge } from './indexBridge.js';\r\nimport { bridgeFaces } from './bridgeFaces.js';\r\nimport { bridgeSides } from './bridgeSides.js';\r\n\r\nexport function bridgePolygon(context, polygon) {\r\n const { backend, map, zoom, crs, origin, metres, base } = context;\r\n const rings = /* alloc */ [];\r\n let ring, path, lng, lat, z, p, coordinate, paths, contour, holes, triangles;\r\n for (ring of polygon) {\r\n path = ring.slice(0, -1);\r\n if (path.length >= 3) rings.push(path);\r\n }\r\n if (!rings.length) return;\r\n const pixels = /* alloc */ [], points = /* alloc */ [];\r\n for (ring of rings) for ([lng, lat, z] of ring) {\r\n p = map.project(/* alloc */ [lat, lng], zoom);\r\n pixels.push(/* alloc */ [p.x, p.y, z]);\r\n }\r\n for (ring of rings) for (coordinate of ring) points.push(local(coordinate, crs, origin, metres, base));\r\n try {\r\n paths = bridgePaths(rings, pixels);\r\n [contour, ...holes] = paths;\r\n triangles = triangulate(contour, holes);\r\n } catch { return; }\r\n indexBridge(backend, pixels, triangles);\r\n bridgeFaces(context, points, triangles);\r\n bridgeSides(context, points, rings);\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { addBridges } from '../geometry/addBridges.js';\r\nimport { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';\r\nimport { getElevation } from './getElevation.js';\r\nimport { setTerrainHeight } from './setTerrainHeight.js';\r\nimport { update } from '../scene/update.js';\r\n\r\nexport function applyTerrain(backend, map, bridges) {\r\n const scene = sceneByLayer.get(backend);\r\n scene._terrainReady = true;\r\n scene._terrainOriginElevation = getElevation(backend, scene.location) ?? 0;\r\n let layer;\r\n for (layer of Object.values(map._layers)) {\r\n setTerrainHeight(layer);\r\n conformModelToTerrain(layer, backend);\r\n }\r\n if (bridges) addBridges(backend, bridges);\r\n map.fire('terrainchange');\r\n update(backend);\r\n backend.fire('terrainready');\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { createLayer } from '../scene/createLayer.js';\n\nimport { loadTerrainTiles } from './loadTerrainTiles.js';\nimport { readBridges } from './readBridges.js';\nimport { terrainTileQueue } from './terrainTileQueue.js';\nimport { applyTerrain } from './applyTerrain.js';\n\nexport async function loadTerrain(backend) {\n if (sceneByLayer.get(backend)._terrainLoading || !backend._map) return;\n sceneByLayer.get(backend)._terrainLoading = true;\n sceneByLayer.get(backend)._terrainReady = false;\n const controller = sceneByLayer.get(backend)._terrainController = /* alloc */ new AbortController();\n let i;\n try {\n if (!sceneByLayer.get(backend).terrainSource) throw /* alloc */ new Error('Terrain layer requires a PMTiles or COG elevation archive');\n const archive = sceneByLayer.get(backend)._terrainArchive = createLayer(/* alloc */ { source: /* alloc */ {\n type: backend.options.asset !== undefined || /\\.tiff?(?:[?#]|$)/i.test(sceneByLayer.get(backend).terrainSource) ? 'cog' : 'pmtiles',\n url: sceneByLayer.get(backend).terrainSource, archive: backend.options.archive, asset: backend.options.asset,\n } });\n await sceneByLayer.get(archive).ready;\n const header = sceneByLayer.get(archive).header;\n if (header.tileType !== 0 || header.minZoom !== header.maxZoom) {\n throw /* alloc */ new Error('Expected a single-zoom Float32 terrain archive');\n }\n const map = backend._map;\n const tiles = terrainTileQueue(backend, header);\n const state = /* alloc */ { backend, archive, controller, tiles, next: 0 };\n const workers = /* alloc */ [];\n for (i = 0; i < Math.min(4, tiles.length); i++) workers.push(loadTerrainTiles(state));\n await Promise.all(workers);\n const bridges = backend.options.bridges && await fetch(backend.options.bridges, /* alloc */ { signal: controller.signal })\n .then(readBridges);\n if (controller.signal.aborted || backend._map !== map) return;\n applyTerrain(backend, map, bridges);\n return true;\n } catch (error) {\n if (!controller.signal.aborted) backend.fire('error', /* alloc */ { error });\n return false;\n } finally {\n sceneByLayer.get(backend)._terrainLoading = false;\n }\n}\n", "import { loadTerrain } from './loadTerrain.js';\r\n\r\nexport function loadReadyTerrain() {\r\n loadTerrain(this.backend).then(this.resolve, this.reject);\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { setRasterTerrain } from '../raster/setRasterTerrain.js';\n\nexport function setLayerTerrain(layer) {\n if (sceneByLayer.get(layer).kind === 'raster') setRasterTerrain(layer, this);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { onTerrainRemove } from './onTerrainRemove.js';\nimport { onTerrainAdd } from './onTerrainAdd.js';\nimport { init3D } from '../scene/init3D.js';\n\n/**\n * Renders Float32 DEM tiles and archived raster basemaps in the shared WebGPU scene.\n * Source options: `url` (single-zoom Float32 PMTiles or supported COG DEM);\n * `bridges` (optional GeoJSON deck polygons with Z, see _addBridges).\n */\nexport function initTerrain(layer, options) {\n const terrainSource = options.url;\n const layerOptions = /* alloc */ { ...options };\n delete layerOptions.url;\n init3D(layer, layerOptions);\n sceneByLayer.get(layer).terrainSource = terrainSource;\n sceneByLayer.get(layer)._terrainTiles = /* alloc */ new Map();\n sceneByLayer.get(layer)._rasterTiles = /* alloc */ new Map();\n sceneByLayer.get(layer)._terrainReady = false;\n sceneByLayer.get(layer).kind = 'terrain';\n}\n", "import { L } from '../globals/L.js';\nimport { onAddSun } from './onAddSun.js';\nimport { underEntry } from '../scene/underEntry.js';\nimport { initialize } from './initialize.js';\nimport { onAdd } from './onAdd.js';\nimport { addTo } from './addTo.js';\nimport { remove } from './remove.js';\nimport { onRemoveSun } from './onRemoveSun.js';\n\nL.Control.Time = L.Control.extend({\n options: { position: 'bottomright' },\n initialize,\n onAdd,\n onRemove: onRemoveSun,\n addTo,\n remove,\n});", "import { cameraByMap } from '../globals/cameraByMap.js';\r\nimport { sunlightByControl } from '../globals/sunlightByControl.js';\r\nimport { sunByMap } from '../globals/sunByMap.js';\r\nimport { createSun } from './createSun.js';\r\nimport { tickSun } from './tickSun.js';\r\n\r\nexport function onAddSun(control, map) {\r\n let state = sunByMap.get(map);\r\n if (state?.control && state.control !== control) {\r\n control._map = null;\r\n if (control.layer._map === map) map.removeLayer(control.layer);\r\n throw /* alloc */ new Error('Only one Time control can be active per map');\r\n }\r\n if (!state) {\r\n state = createSun(map);\r\n sunByMap.set(map, state);\r\n }\r\n state.control = control;\r\n state.originalSky = map.getContainer().style.getPropertyValue('--leaflet-sky-background');\r\n cameraByMap.get(map)._timeControl = control;\r\n sunlightByControl.set(control, state);\r\n state.update();\r\n state.timer = setInterval(tickSun, 60000, state);\r\n map.on('moveend', state.update);\r\n map.on('move rotate pitch resize', state.updateSky);\r\n return state.container;\r\n}\r\n", "export const sunlightByControl = new WeakMap();\n", "export const sunByMap = new WeakMap();\r\n", "import { L } from '../globals/L.js';\nimport { updateSky } from './updateSky.js';\nimport { updateSun } from './updateSun.js';\nimport { useLiveTime } from './useLiveTime.js';\nimport { useSelectedTime } from './useSelectedTime.js';\n\nexport function createSun(map) {\n const disc = 'position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;';\n const sunDisc = L.DomUtil.create('div', 'sunlight-sun');\n const moonDisc = L.DomUtil.create('div', 'sunlight-moon');\n sunDisc.style.cssText = disc + 'background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;';\n moonDisc.style.cssText = disc + 'background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;';\n sunDisc.setAttribute('role', 'img'); sunDisc.setAttribute('aria-label', 'Sun');\n moonDisc.setAttribute('role', 'img'); moonDisc.setAttribute('aria-label', 'Moon');\n const container = L.DomUtil.create('div', 'sunlight-control');\n container.style.cssText = 'color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;';\n const date = document.createElement('input');\n date.type = 'date';\n date.style.cssText = 'width:100%;box-sizing:border-box;';\n date.setAttribute('aria-label', 'Solar date (UTC)');\n const slider = document.createElement('input');\n slider.type = 'range';\n slider.style.cssText = 'width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;';\n slider.min = '0'; slider.max = '1439'; slider.step = '1';\n slider.setAttribute('aria-label', 'Time of day (UTC)');\n const output = document.createElement('output');\n output.style.cssText = 'font-weight:bold;font-variant-numeric:tabular-nums;';\n output.setAttribute('aria-live', 'off');\n const now = document.createElement('button');\n now.type = 'button'; now.textContent = 'Now';\n const timeRow = document.createElement('div');\n timeRow.className = 'sunlight-time';\n timeRow.style.cssText = 'display:flex;justify-content:space-between;align-items:center;';\n timeRow.append(output, now);\n const status = document.createElement('div');\n status.className = 'sunlight-status';\n status.style.marginTop = '5px';\n status.setAttribute('role', 'status');\n const note = document.createElement('small');\n note.style.color = '#555';\n note.textContent = 'Indicative \u00B7 loaded geometry only. Streetlight illumination is estimated, not measured lux.';\n container.append(date, slider, timeRow, status, note);\n const state = /* alloc */ {\n control: null, map, originalSky: '', container, sunDisc, moonDisc, date, slider, output, status,\n projection: /* alloc */ { left: 0, top: 0 },\n };\n state.update = updateSun.bind(null, state);\n state.updateSky = updateSky.bind(null, state);\n now.onclick = useLiveTime.bind(null, state);\n date.onchange = slider.oninput = useSelectedTime.bind(null, state);\n L.DomEvent.disableClickPropagation(container);\n L.DomEvent.disableScrollPropagation(container);\n return state;\n}\n", "import { radians } from '../globals/radians.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\n\nimport { updateCelestialDisc } from './updateCelestialDisc.js';\n\nexport function updateSky({ map, originalSky, sunDisc, moonDisc, projection }) {\n const sun = cameraByMap.get(map)._sunlight, sky = cameraByMap.get(map)._pitchSky;\n if (sun) map.getContainer().style.setProperty('--leaflet-sky-background', sun.background);\n else if (originalSky) map.getContainer().style.setProperty('--leaflet-sky-background', originalSky);\n else map.getContainer().style.removeProperty('--leaflet-sky-background');\n const size = map.getSize(), pitch = mapGetPitch(map) * radians, bearing = mapGetBearing(map) * radians;\n updateCelestialDisc(sunDisc, sun, sky, size, pitch, bearing, projection);\n updateCelestialDisc(moonDisc, sun?.moon, sky, size, pitch, bearing, projection);\n}\n", "/** Perspective projection of a celestial direction; null when behind the camera. */\n\nexport function projectCelestialBody(dir, size, pitch, bearing, target) {\n const [x, y, z] = dir;\n const forward = -x * Math.sin(bearing) * Math.sin(pitch) - y * Math.cos(pitch) - z * Math.cos(bearing) * Math.sin(pitch);\n if (forward > 0) {\n target ||= /* alloc */ {};\n target.left = size.x / 2 + size.y * 1.5 * (x * Math.cos(bearing) - z * Math.sin(bearing)) / forward;\n target.top = size.y / 2 - size.y * 1.5 * (-x * Math.sin(bearing) * Math.cos(pitch) + y * Math.sin(pitch) - z * Math.cos(bearing) * Math.cos(pitch)) / forward;\n return target;\n }\n return null;\n}\n", "import { projectCelestialBody } from './projectCelestialBody.js';\r\n\r\nexport function updateCelestialDisc(disc, body, sky, size, pitch, bearing, projection) {\r\n disc.hidden = true;\r\n if (!sky || !body || body.altitude <= 0) return;\r\n if (disc.parentNode !== sky) sky.append(disc);\r\n const point = projectCelestialBody(body.direction, size, pitch, bearing, projection);\r\n if (!point) return;\r\n const { left, top } = point;\r\n disc.hidden = left < 0 || left > size.x || top < 0 || top > sky.clientHeight || sky.style.display === 'none';\r\n disc.style.left = `${left}px`; disc.style.top = `${top}px`;\r\n}\r\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\r\nimport { atmosphere } from './atmosphere.js';\r\nimport { moonPosition } from './moonPosition.js';\r\nimport { solarPosition } from './solarPosition.js';\r\nimport { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\n\r\nexport function updateSun(state) {\r\n const { control, map, date, slider, output, status } = state;\r\n try {\r\n if (control.live) control.time = /* alloc */ new Date();\r\n const time = control.time.toISOString();\r\n date.value = time.slice(0, 10);\r\n slider.value = String(control.time.getUTCHours() * 60 + control.time.getUTCMinutes());\r\n output.textContent = `${time.slice(11, 16)} UTC${control.live ? ' \u00B7 now' : ''}`;\r\n const center = map.getCenter();\r\n const sun = cameraByMap.get(map)._sunlight = solarPosition(control.time, center.lat, center.lng);\r\n Object.assign(sun, atmosphere(sun.altitude));\r\n sun.moon = moonPosition(control.time, center.lat, center.lng);\r\n status.textContent = sun.altitude <= 0\r\n ? 'Night \u00B7 no direct sunlight'\r\n : sun.altitude < 3\r\n ? 'Low sun \u00B7 shadows paused'\r\n : `Sun altitude ${sun.altitude.toFixed(1)}\u00B0`;\r\n map.fire('simulationtimechange', /* alloc */ {\r\n time: /* alloc */ new Date(control.time),\r\n live: control.live,\r\n });\r\n updateSky(state);\r\n render(map);\r\n } catch (error) {\r\n delete cameraByMap.get(map)._sunlight;\r\n updateSky(state);\r\n render(map);\r\n status.textContent = `Error: ${error.message}`;\r\n console.error('Solar simulation', error);\r\n }\r\n}\r\n", "export const atmosphereStops = [\n [-18, [3, 7, 20],\n [17, 28, 54],\n [0.025, 0.04, 0.09]\n ],\n [-6, [37, 53, 84],\n [182, 106, 86],\n [0.12, 0.10, 0.14]\n ],\n [0, [101, 131, 171],\n [246, 170, 115],\n [0.38, 0.24, 0.18]\n ],\n [10, [74, 147, 208],\n [197, 221, 237],\n [0.80, 0.75, 0.68]\n ],\n [25, [53, 144, 213],\n [223, 238, 250],\n [1, 1, 1]\n ],\n];\n", "export const atmosphereColor = [0, 0, 0];\n", "export function mix(a, b, t, values) {\n values ||= /* alloc */ [];\n values.length = a.length;\n let i;\n for (i = 0; i < a.length; i++) values[i] = a[i] + (b[i] - a[i]) * t;\n return values;\n}\n", "export function rgb(values) {\n let rounded = '', i;\n for (i = 0; i < values.length; i++) {\n if (i) rounded += ', ';\n rounded += Math.round(values[i]);\n }\n return `rgb(${rounded})`;\n}\n", "import { atmosphereStops } from '../globals/atmosphereStops.js';\nimport { atmosphereColor } from '../globals/atmosphereColor.js';\n\nimport { mix } from './mix.js';\nimport { rgb } from './rgb.js';\n\n\nexport function atmosphere(altitude) {\n if (!Number.isFinite(altitude)) {\n throw /* alloc */ new Error('Invalid solar altitude');\n }\n const stops = atmosphereStops;\n let upper = -1;\n let i;\n for (i = 0; i < stops.length; i++) {\n if (stops[i][0] >= altitude) { upper = i; break; }\n }\n const b = stops[upper < 0 ? stops.length - 1 : upper],\n a = stops[Math.max(0, upper - 1)];\n const t = a === b || upper < 0 ? 1 : (altitude - a[0]) / (b[0] - a[0]);\n return /* alloc */ {\n background: `linear-gradient(${rgb(mix(a[1], b[1], t, atmosphereColor))}, ${rgb(mix(a[2], b[2], t, atmosphereColor))})`,\n tint: mix(a[3], b[3], t),\n };\n}\n", "/** Normalize dates and validate the observer without calculating a celestial position. */\r\nexport function solarTime(date, lat, lng) {\r\n const time = date instanceof Date ? Date.prototype.getTime.call(date)\r\n : typeof date === 'string' ? Date.parse(date)\r\n : (/* alloc */ new Date(date)).getTime();\r\n if (!Number.isFinite(time) || !Number.isFinite(lat) || Math.abs(lat) > 90 ||\r\n !Number.isFinite(lng) || Math.abs(lng) > 180) {\r\n throw /* alloc */ new Error('Invalid solar date or location');\r\n }\r\n return time;\r\n}\r\n", "import { radians } from '../globals/radians.js';\n\nexport function horizontalPosition(d, lat, lng, ascension, declination) {\n const hourAngle = (280.16 + 360.9856235 * d + lng) * radians - ascension;\n const latitude = lat * radians;\n const altitude = Math.asin(Math.sin(latitude) * Math.sin(declination) +\n Math.cos(latitude) * Math.cos(declination) * Math.cos(hourAngle));\n const southAzimuth = Math.atan2(Math.sin(hourAngle),\n Math.cos(hourAngle) * Math.sin(latitude) - Math.tan(declination) * Math.cos(latitude));\n const azimuth = (southAzimuth / radians + 180 + 360) % 360;\n return /* alloc */ {\n altitude: altitude / radians, azimuth,\n direction: /* alloc */ [Math.sin(azimuth * radians) * Math.cos(altitude), Math.sin(altitude),\n -Math.cos(azimuth * radians) * Math.cos(altitude)]\n };\n}\n", "import { solarTime } from './solarTime.js';\nimport { horizontalPosition } from \"./horizontalPosition.js\";\nimport { radians } from '../globals/radians.js';\nimport { sinObliquity } from '../globals/sinObliquity.js';\nimport { cosObliquity } from '../globals/cosObliquity.js';\n\n// Low-precision geocentric lunar orbit; no parallax or atmospheric refraction.\n\nexport function moonPosition(date, lat, lng) {\n const d = solarTime(date, lat, lng) / 86400000 - 10957.5;\n const anomaly = (134.963 + 13.064993 * d) * radians;\n const longitude = (218.316 + 13.176396 * d + 6.289 * Math.sin(anomaly)) * radians;\n const latitude = 5.128 * Math.sin((93.272 + 13.229350 * d) * radians) * radians;\n const x = Math.cos(latitude) * Math.cos(longitude);\n const y = Math.cos(latitude) * Math.sin(longitude) * cosObliquity - Math.sin(latitude) * sinObliquity;\n const z = Math.cos(latitude) * Math.sin(longitude) * sinObliquity + Math.sin(latitude) * cosObliquity;\n return horizontalPosition(d, lat, lng, Math.atan2(y, x), Math.asin(z));\n}\n", "import { radians } from './radians.js';\r\n\r\nexport const sinObliquity = Math.sin(23.4397 * radians);\r\n", "import { radians } from './radians.js';\r\n\r\nexport const cosObliquity = Math.cos(23.4397 * radians);\r\n", "import { horizontalPosition } from \"./horizontalPosition.js\";\nimport { solarTime } from './solarTime.js';\nimport { radians } from '../globals/radians.js';\nimport { sinObliquity } from '../globals/sinObliquity.js';\nimport { cosObliquity } from '../globals/cosObliquity.js';\n\n// Solar centre, without atmospheric refraction.\n\nexport function solarPosition(date, lat, lng) {\n const time = solarTime(date, lat, lng);\n const d = time / 86400000 - 10957.5;\n const mean = (357.5291 + 0.98560028 * d) * radians;\n const longitude = mean + (1.9148 * Math.sin(mean) + 0.02 * Math.sin(2 * mean) +\n 0.0003 * Math.sin(3 * mean) + 102.9372 + 180) * radians;\n const declination = Math.asin(Math.sin(longitude) * sinObliquity);\n const ascension = Math.atan2(Math.sin(longitude) * cosObliquity, Math.cos(longitude));\n return horizontalPosition(d, lat, lng, ascension, declination);\n}\n", "import { renderers } from '../globals/renderers.js';\n\n\r\nimport { update as updateScene } from '../scene/update.js';\r\n\r\nexport function render(map) {\r\n const renderer = renderers.get(map);\r\n if (renderer) updateScene(renderer);\r\n}\r\n", "import { updateSun } from './updateSun.js';\r\n\r\nexport function useLiveTime(state) {\r\n state.control.live = true;\r\n updateSun(state);\r\n}\r\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\r\nimport { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\nimport { updateSun } from './updateSun.js';\r\n\r\nexport function useSelectedTime(state) {\r\n const { control, map, date, slider, status } = state;\r\n control.live = false;\r\n if (!date.value || !date.validity.valid) {\r\n control.time = /* alloc */ new Date(NaN);\r\n map.fire('simulationtimechange', /* alloc */ { time: null, live: false });\r\n delete cameraByMap.get(map)._sunlight;\r\n updateSky(state);\r\n render(map);\r\n status.textContent = 'Error: choose a valid solar date';\r\n return;\r\n }\r\n control.time = /* alloc */ new Date(`${date.value}T00:00:00Z`);\r\n control.time.setUTCMinutes(Number(slider.value));\r\n updateSun(state);\r\n}\r\n", "import { updateSun } from './updateSun.js';\r\n\r\nexport function tickSun(state) {\r\n if (state.control.live) updateSun(state);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\r\n\r\nimport { addTimeLayer } from './addTimeLayer.js';\r\nimport { removeTimeLayer } from './removeTimeLayer.js';\r\n\r\nexport function initialize(options) {\r\n L.Util.setOptions(this, options);\r\n this.live = true;\r\n this.layer = /* alloc */ new L.Layer();\r\n sceneByLayer.get(this.layer).control = this;\r\n sceneByLayer.get(this.layer).kind = 'time';\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function addTimeLayer(map) {\r\n return sceneByLayer.get(this).control.addTo(map);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function removeTimeLayer() {\r\n return L.Control.prototype.remove.call(sceneByLayer.get(this).control);\r\n}\r\n", "import { onAddSun } from './onAddSun.js';\r\n\r\nexport function onAdd(map) {\r\n return onAddSun(this, map);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { underEntry } from '../scene/underEntry.js';\r\nimport { styleTimeControl } from './styleTimeControl.js';\r\n\r\nexport function addTo(map) {\r\n L.Control.prototype.addTo.call(this, map);\r\n const container = this.getContainer();\r\n if (this.layer._map === map) underEntry(this.layer, container, styleTimeControl.bind(null, container));\r\n else styleTimeControl(container, false);\r\n return this;\r\n}\r\n", "export function styleTimeControl(container, nested) {\r\n container.classList.toggle('leaflet-control', !nested);\r\n container.classList.toggle('leaflet-bar', !nested);\r\n container.style.background = nested ? '' : '#fff';\r\n container.style.padding = nested ? '2px 0 6px 20px' : '8px';\r\n container.style.margin = nested ? '0' : '';\r\n}\r\n", "import { L } from '../globals/L.js';\nexport function remove() {\r\n if (this._map?.hasLayer(this.layer)) {\r\n this._map.removeLayer(this.layer);\r\n return this;\r\n }\r\n return L.Control.prototype.remove.call(this);\r\n}\r\n", "import { cameraByMap } from '../globals/cameraByMap.js';\r\nimport { sunByMap } from '../globals/sunByMap.js';\r\n\r\n\r\nimport { render } from './render.js';\r\nimport { updateSky } from './updateSky.js';\r\n\r\nexport function removeSun(state) {\r\n const { map, timer, sunDisc, moonDisc } = state;\r\n const shared = sunByMap.get(map);\r\n clearInterval(timer);\r\n delete cameraByMap.get(map)._timeControl;\r\n map.fire('simulationtimechange', /* alloc */ { time: null, live: false });\r\n map.off('moveend', state.update);\r\n map.off('move rotate pitch resize', state.updateSky);\r\n delete cameraByMap.get(map)._sunlight;\r\n updateSky(state);\r\n sunDisc.remove(); moonDisc.remove();\r\n render(map);\r\n if (shared === state) shared.control = null;\r\n}\r\n", "import { sunlightByControl } from '../globals/sunlightByControl.js';\r\n\r\nimport { removeSun } from './removeSun.js';\r\n\r\nexport function onRemoveSun() {\r\n const sunlight = sunlightByControl.get(this);\r\n if (!sunlight) return;\r\n removeSun(sunlight);\r\n sunlightByControl.delete(this);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { speed as sharedSpeed } from '../globals/speed.js';\nimport { trafficEmptyOptions } from '../globals/trafficEmptyOptions.js';\nimport { vehicles } from '../globals/vehicles.js';\nimport { trafficShader } from '../globals/trafficShader.js';\nimport { trafficByLayer } from '../globals/trafficByLayer.js';\n\n\n\uFEFF/**\n * Vehicles moving along GeoJSON lanes; a compute pass places them on the GPU every frame.\n * Source options:\n * - `url`: GeoJSON (Multi)LineStrings, or a JS module whose default export `(time, layer, signal)` returns them (time-dependent data);\n * - `vehicle`: 'car' (default), 'boat', 'bus', 'tram', 'metro', 'bicycle' or 'pedestrian'; `side`: offset right of the lane centreline in metres (vehicle default);\n * - `speed`: m/s of `flow` lanes; `outline`: draw the lanes.\n * Lane properties: `flow` (vehicles/h) or `timetable` (see scheduledTrips.js), optional fixed `elevation`\n * in metres, `name`/`description` for the default tooltip. The status line (count and vehicle type) sits under the layer's entry in the layers control.\n * L.Control.Time on the same map drives the time; without one, vehicles run live.\n */\nimport { build } from '../geometry/build.js';\nimport { init3D } from '../scene/init3D.js';\nimport { tooltip } from './tooltip.js';\n\n\n\nimport { addTraffic } from './addTraffic.js';\nimport { placeTraffic } from './placeTraffic.js';\nimport { removeTraffic } from './removeTraffic.js';\nimport { readyTraffic } from './readyTraffic.js';\nimport { tickTraffic } from './tickTraffic.js';\nimport { updateTraffic } from './updateTraffic.js';\nimport { updateTrafficTerrain } from './updateTrafficTerrain.js';\n\nexport function initTraffic(layer, { url, vehicle = 'car', side, outline, speed: velocity = sharedSpeed, ...options } = trafficEmptyOptions) {\n const { model, lights, side: defaultSide } = vehicles[vehicle];\n side ??= defaultSide;\n init3D(layer, /* alloc */ {\n tooltip,\n nightLight: Boolean(lights),\n ...options,\n });\n const status = L.DomUtil.create('small', 'traffic-status');\n status.style.cssText = 'flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;';\n status.title = vehicle;\n status.textContent = `${vehicle}: loading\u2026`;\n const template = build(model(0)), stride = template.position.length, vertices = stride / 3;\n const params = /* alloc */ new ArrayBuffer(16);\n const paramFloats = /* alloc */ new Float32Array(params);\n const paramInts = /* alloc */ new Uint32Array(params);\n const state = /* alloc */ {\n layer, url, model, lights, side, outline, velocity, vehicle, status, template, stride, vertices,\n params, paramFloats, paramInts,\n ready: false, frame: undefined, request: undefined, lanes: /* alloc */ [], tripsKey: undefined,\n mesh: undefined, route: undefined, litAt: -Infinity,\n trips: /* alloc */ [], rebasedAt: 0, nextCheck: -Infinity, elapsed: 0, gpu: null,\n lanesDirty: true, stale: false, loaded: undefined, file: undefined,\n };\n // Lane points are [x, z, ground, cumulative length]. Mirrors along() and place().\n state.shader = trafficShader;\n state.tick = tickTraffic.bind(null, state);\n state.update = updateTraffic.bind(null, state);\n state.terrain = updateTrafficTerrain.bind(null, state);\n trafficByLayer.set(layer, state);\n layer.on('ready', readyTraffic.bind(null, state));\n layer.on('add', addTraffic.bind(null, state));\n layer.on('remove', removeTraffic.bind(null, state));\n}\n", "export const trafficEmptyOptions = Object.freeze({});\n", "// Built-in vehicles for the 'traffic' type. Models are [ring of [x, z], bottom, top, rgb, topRing?] convex prisms in metres;\n// forward is -z, right is +x. `topRing` (same length as `ring`) tapers the prism; rgb components above 1 are self-lit lamps.\nexport const paints = [\n [0.86, 0.86, 0.88],\n [0.1, 0.1, 0.12],\n [0.5, 0.53, 0.57],\n [0.65, 0.1, 0.08],\n [0.12, 0.25, 0.55],\n [0.85, 0.7, 0.15]\n];\n", "export const dark = [0.08, 0.07, 0.06];\n", "// Pedestrian, about 1.77 m tall, prisms as in utils/vehicles.js (forward -z). Limbs hang from their pivot at y = 0.\nexport const skin = [0.85, 0.64, 0.5];\n", "export const trousers = [0.16, 0.2, 0.32];\n", "export function box(x0, x1, z0, z1) {\n return /* alloc */ [\n /* alloc */ [x0, z0],\n /* alloc */ [x1, z0],\n /* alloc */ [x1, z1],\n /* alloc */ [x0, z1],\n ];\n}\n", "import { paints } from '../globals/paints.js';\nimport { dark } from '../globals/dark.js';\nimport { skin } from '../globals/skin.js';\nimport { trousers } from '../globals/trousers.js';\n\nimport { box } from '../geometry/box.js';\n\nexport function bicycleModel(index) {\n const paint = paints[index % paints.length];\n return /* alloc */ [\n /* alloc */ [box(-0.045, 0.045, -0.85, -0.25), 0.02, 0.62, dark],\n /* alloc */ [box(-0.045, 0.045, 0.25, 0.85), 0.02, 0.62, dark],\n /* alloc */ [box(-0.06, 0.06, -0.5, 0.5), 0.4, 0.65, paint],\n /* alloc */ [box(-0.32, 0.32, -0.58, -0.5), 0.95, 1.02, dark],\n /* alloc */ [box(-0.1, 0.1, 0.15, 0.4), 0.85, 0.92, dark],\n /* alloc */ [box(-0.18, 0.18, -0.12, 0.28), 1, 1.5, paint],\n /* alloc */ [box(-0.11, 0.11, -0.22, 0), 1.5, 1.72, skin],\n /* alloc */ [box(-0.13, 0.13, -0.23, 0.01), 1.72, 1.8, paint],\n /* alloc */ [box(-0.25, -0.15, -0.5, -0.05), 1, 1.25, skin],\n /* alloc */ [box(0.15, 0.25, -0.5, -0.05), 1, 1.25, skin],\n /* alloc */ [box(-0.2, -0.08, 0, 0.32), 0.3, 1, trousers],\n /* alloc */ [box(0.08, 0.2, -0.25, 0.07), 0.3, 1, trousers],\n ];\n}\n", "export const shirt = [0.75, 0.2, 0.15];\n", "import { box } from '../geometry/box.js';\nimport { trousers as sharedTrousers } from './trousers.js';\nimport { shirt as sharedShirt } from './shirt.js';\nimport { skin as sharedSkin } from './skin.js';\nimport { dark as sharedDark } from './dark.js';\n\nexport const parts = {\n body: [\n [box(-0.17, 0.17, -0.1, 0.1), 0.82, 0.95, sharedTrousers],\n [box(-0.19, 0.19, -0.11, 0.11), 0.95, 1.44, sharedShirt],\n [box(-0.05, 0.05, -0.05, 0.05), 1.44, 1.5, sharedSkin],\n [box(-0.1, 0.1, -0.11, 0.1), 1.5, 1.72, sharedSkin],\n [box(-0.105, 0.105, -0.06, 0.115), 1.58, 1.77, sharedDark],\n [box(-0.105, 0.105, -0.115, -0.06), 1.7, 1.77, sharedDark],\n ],\n leg: [\n [box(-0.07, 0.07, -0.07, 0.07), -0.82, 0, sharedTrousers],\n [box(-0.07, 0.07, -0.17, 0.07), -0.9, -0.82, sharedDark]\n ],\n arm: [\n [box(-0.05, 0.05, -0.05, 0.05), -0.55, 0, sharedShirt],\n [box(-0.045, 0.045, -0.045, 0.045), -0.66, -0.55, sharedSkin]\n ],\n};\n", "import { parts } from '../globals/parts.js';\nimport { paints } from '../globals/paints.js';\nimport { trousers } from '../globals/trousers.js';\nimport { skin } from '../globals/skin.js';\n\nimport { box } from '../geometry/box.js';\n\nexport function pedestrianModel(index) {\n const model = parts.body.slice();\n model[1] = /* alloc */ [model[1][0], model[1][1], model[1][2], paints[index % paints.length]];\n model.push(\n /* alloc */ [box(-0.16, -0.02, -0.07, 0.07), 0.08, 0.9, trousers],\n /* alloc */ [box(0.02, 0.16, -0.07, 0.07), 0.08, 0.9, trousers],\n /* alloc */ [box(-0.3, -0.2, -0.05, 0.05), 0.76, 1.42, skin],\n /* alloc */ [box(0.2, 0.3, -0.05, 0.05), 0.76, 1.42, skin],\n );\n return model;\n}\n", "export function routeColor(properties) {\r\n const color = properties?.route_color;\r\n if (!/^[\\da-f]{6}$/i.test(color)) return /* alloc */ [0.1, 0.55, 0.65];\r\n const value = Number.parseInt(color, 16);\r\n return /* alloc */ [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];\r\n}\r\n", "export const glass = [0.12, 0.15, 0.18];\n", "export const white = [0.92, 0.93, 0.92];\n", "export const tyre = [0.05, 0.05, 0.05];\n", "export const headlight = [1.9, 1.85, 1.7];\n", "export const taillight = [1.7, 0.06, 0.05];\n", "import { glass } from '../globals/glass.js';\nimport { white } from '../globals/white.js';\nimport { tyre } from '../globals/tyre.js';\nimport { headlight } from '../globals/headlight.js';\nimport { taillight } from '../globals/taillight.js';\n\nimport { box } from '../geometry/box.js';\n\nexport function carriage(center, length, color) {\n const front = center - length / 2, rear = center + length / 2;\n return /* alloc */ [\n /* alloc */ [box(-1.25, 1.25, front, rear), 0.45, 1.25, color],\n /* alloc */ [box(-1.2, 1.2, front + 0.15, rear - 0.15), 1.25, 2.65, glass],\n /* alloc */ [box(-1.25, 1.25, front, rear), 2.65, 3.1, white],\n /* alloc */ [box(-1.15, -0.85, front + 1, front + 2), 0, 0.7, tyre],\n /* alloc */ [box(0.85, 1.15, rear - 2, rear - 1), 0, 0.7, tyre],\n /* alloc */ [box(-0.9, 0.9, front - 0.03, front), 0.8, 1.05, headlight],\n /* alloc */ [box(-0.9, 0.9, rear, rear + 0.03), 0.8, 1.05, taillight],\n ];\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function busModel(index, properties) {\r\n return carriage(0, 12, routeColor(properties));\r\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function tramModel(index, properties) {\n const color = routeColor(properties), parts = /* alloc */ [];\n let car;\n for (car = 0; car < 5; car++) parts.push(...carriage((car - 2) * 6.5, 6, color));\n return parts;\n}\n", "import { routeColor } from '../traffic/routeColor.js';\nimport { carriage } from './carriage.js';\n\nexport function metroModel(index, properties) {\n const color = routeColor(properties), parts = /* alloc */ [];\n let car;\n for (car = 0; car < 5; car++) parts.push(...carriage((car - 2) * 15, 14, color));\n return parts;\n}\n", "import { box } from \"../geometry/box.js\";\n\nexport function mirror(x0, x1, z0, z1, ...rest) {\n return /* alloc */ [\n /* alloc */ [box(x0, x1, z0, z1), ...rest],\n /* alloc */ [box(-x1, -x0, z0, z1), ...rest]\n ];\n}\n", "import { paints } from '../globals/paints.js';\nimport { tyre } from '../globals/tyre.js';\nimport { glass } from '../globals/glass.js';\nimport { headlight } from '../globals/headlight.js';\nimport { taillight } from '../globals/taillight.js';\n\r\nimport { box } from '../geometry/box.js';\r\n\r\n\r\nimport { mirror } from './mirror.js';\r\n\r\n\r\n\r\n\r\nexport function carModel(i) {\r\n const paint = paints[i % paints.length];\r\n return /* alloc */ [\r\n ...mirror(0.7, 0.92, -1.68, -1.02, 0, 0.64, tyre),\r\n ...mirror(0.7, 0.92, 1.02, 1.68, 0, 0.64, tyre),\r\n /* alloc */ [\r\n /* alloc */ [\r\n /* alloc */ [-0.9, -1.95],\r\n /* alloc */ [-0.72, -2.25],\r\n /* alloc */ [0.72, -2.25],\r\n /* alloc */ [0.9, -1.95],\r\n /* alloc */ [0.9, 2.05],\r\n /* alloc */ [0.76, 2.25],\r\n /* alloc */ [-0.76, 2.25],\r\n /* alloc */ [-0.9, 2.05],\r\n ],\r\n 0.28, 0.82, paint],\r\n // Greenhouse: the windscreen leans back, the rear window less.\r\n /* alloc */ [box(-0.84, 0.84, -0.75, 1.6), 0.82, 1.38, glass, box(-0.7, 0.7, -0.05, 1.3)],\r\n /* alloc */ [box(-0.71, 0.71, -0.06, 1.31), 1.38, 1.46, paint],\r\n ...mirror(0.38, 0.8, -2.3, -2.16, 0.56, 0.76, headlight),\r\n /* alloc */ [box(-0.78, 0.78, 2.16, 2.3), 0.6, 0.76, taillight],\r\n ];\r\n}\r\n", "export const hull = [\n [-5.5, 30],\n [5.5, 30],\n [5.5, -20],\n [4, -26],\n [1.5, -30],\n [-1.5, -30],\n [-4, -26],\n [-5.5, -20]\n];\n", "import { mirror } from './mirror.js';\n\nexport function boatBenches() {\n const benches = /* alloc */ [];\n let i;\n for (i = 0; i < 12; i++) benches.push(...mirror(0.5, 3.8, -12 + i * 3, -11.3 + i * 3, 3.9, 4.4,\n /* alloc */ [0.62, 0.1, 0.1]));\n return benches;\n}\n", "import { hull } from '../globals/hull.js';\nimport { white } from '../globals/white.js';\nimport { glass } from '../globals/glass.js';\n\r\n\r\nimport { box } from '../geometry/box.js';\r\n\r\nimport { mirror } from './mirror.js';\r\n\r\nimport { boatBenches } from './boatBenches.js';\r\n\r\n// Panoramic river cruiser, about 60 x 11 m.\r\nexport function boatModel() {\r\n return /* alloc */ [\r\n /* alloc */ [\r\n hull, 0, 0.8, /* alloc */ [0.1, 0.16, 0.26]],\r\n /* alloc */ [hull, 0.8, 1.4, white],\r\n /* alloc */ [box(-5, 5, -18, 26), 1.4, 3.7, glass, box(-4.6, 4.6, -17.4, 25.6)],\r\n ...mirror(4.64, 4.74, -17, 25, 3.25, 3.45, /* alloc */ [1.6, 1.25, 0.8]),\r\n /* alloc */ [box(-4.8, 4.8, -17.8, 25.8), 3.7, 3.9, white],\r\n ...boatBenches(),\r\n ...mirror(4.65, 4.8, -13.6, 25.8, 3.9, 4.8, white),\r\n /* alloc */ [box(-4.8, 4.8, 25.65, 25.8), 3.9, 4.8, white],\r\n /* alloc */ [box(-2.2, 2.2, -17.6, -14), 3.9, 4.7, white],\r\n /* alloc */ [box(-2.2, 2.2, -17.6, -14), 4.7, 5.5, glass],\r\n /* alloc */ [box(-2.5, 2.5, -18, -13.6), 5.5, 5.7, white],\r\n /* alloc */ [\r\n box(-2.45, -2.2, -16.2, -15.8), 5, 5.3, /* alloc */ [2, 0.15, 0.1]],\r\n /* alloc */ [\r\n box(2.2, 2.45, -16.2, -15.8), 5, 5.3, /* alloc */ [0.1, 2, 0.4]],\r\n /* alloc */ [box(-0.1, 0.1, -15.9, -15.7), 5.7, 6.6, white],\r\n /* alloc */ [\r\n box(-0.15, 0.15, -15.95, -15.65), 6.6, 6.8, /* alloc */ [2, 2, 1.9]],\r\n ];\r\n}\r\n", "import { bicycleModel } from '../vehicles/bicycleModel.js';\nimport { pedestrianModel } from '../vehicles/pedestrianModel.js';\nimport { busModel } from '../vehicles/busModel.js';\nimport { tramModel } from '../vehicles/tramModel.js';\nimport { metroModel } from '../vehicles/metroModel.js';\nimport { carModel } from '../vehicles/carModel.js';\nimport { boatModel } from '../vehicles/boatModel.js';\n\n/**\n * `side`: default offset (metres) to the right of the lane centreline. `model(i)` gives the prisms of the i-th vehicle.\n * `lights`: night point lights in model space (see the night lighting grid), e.g. the pool cast by the headlights.\n */\nexport const vehicles = {\n bicycle: {\n side: 0.4,\n model: bicycleModel\n },\n pedestrian: {\n side: 0.3,\n model: pedestrianModel\n },\n bus: {\n side: 1.5,\n model: busModel\n },\n tram: {\n side: 0,\n model: tramModel\n },\n metro: {\n side: 0,\n model: metroModel\n },\n car: {\n side: 1.8,\n model: carModel,\n lights: [{\n position: [0, 1.2, -6],\n radius: 10,\n color: [1, 0.94, 0.82],\n flux: 800\n }]\n },\n // Panoramic river cruiser, about 60 \u00D7 11 m: glass saloon, open upper deck with benches, wheelhouse forward.\n boat: {\n side: 0,\n model: boatModel,\n lights: [{\n position: [0, 8, 4],\n radius: 30,\n color: [1, 0.8, 0.55],\n flux: 20000\n }]\n },\n};\n", "// One workgroup per vehicle shares its lane lookup and pose across all model vertices.\nexport const trafficShader = /* wgsl */` 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;}}`;\n", "export function triangle(position, normal, color, a, b, c, tint) {\n const ux = b[0] - a[0], uy = b[1] - a[1], uz = b[2] - a[2];\n const vx = c[0] - a[0], vy = c[1] - a[1], vz = c[2] - a[2];\n const nx = uy * vz - uz * vy, ny = uz * vx - ux * vz, nz = ux * vy - uy * vx;\n const length = Math.hypot(nx, ny, nz);\n let i, point;\n for (i = 0; i < 3; i++) {\n point = i === 0 ? a : i === 1 ? b : c;\n position.push(...point);\n normal.push(nx / length, ny / length, nz / length);\n color.push(...tint);\n }\n}\n", "import { triangle } from './triangle.js';\n\nexport function build(parts) {\n const position = /* alloc */ [];\n const normal = /* alloc */ [];\n const color = /* alloc */ [];\n const low = /* alloc */ [];\n const high = /* alloc */ [];\n let ring, bottom, top, tint, topRing, x, z, i, j;\n for ([ring, bottom, top, tint, topRing = ring] of parts) {\n low.length = high.length = 0;\n for ([x, z] of ring) low.push(/* alloc */ [x, bottom, z]);\n for ([x, z] of topRing) high.push(/* alloc */ [x, top, z]);\n for (i = 0; i < ring.length; i++) {\n j = (i + 1) % ring.length;\n triangle(position, normal, color, low[i], low[j], high[j], tint); triangle(position, normal, color, low[i], high[j], high[i], tint);\n }\n for (i = 1; i < ring.length - 1; i++) {\n triangle(position, normal, color, high[0], high[i], high[i + 1], tint); triangle(position, normal, color, low[0], low[i + 1], low[i], tint);\n }\n }\n return /* alloc */ { position, normal, color };\n}\n", "export function tooltip({ properties: p }) {\n const content = document.createElement('div');\n content.style.whiteSpace = 'pre-line';\n let text = p.name ? String(p.name) : '';\n if (p.departure) text += `${text ? '\\n' : ''}Departure ${p.departure} ${p.timetable.timeZone}`;\n if (p.description) text += `${text ? '\\n' : ''}${p.description}`;\n content.textContent = text;\n return content;\n}\n", "import { underEntry } from '../scene/underEntry.js';\n\nexport function startTraffic(state) {\r\n state.layer._map.off('simulationtimechange layerremove', state.update).on('simulationtimechange layerremove', state.update);\r\n state.layer._map.off('terrainchange', state.terrain).on('terrainchange', state.terrain);\r\n underEntry(state.layer, state.status);\r\n state.update();\r\n}\n", "import { trafficByLayer } from '../globals/trafficByLayer.js';\n\n\nimport { placeTraffic } from './placeTraffic.js';\nimport { startTraffic } from './startTraffic.js';\n\nexport function addTraffic(state) {\n trafficByLayer.set(state.layer, state);\n if (state.ready) startTraffic(state);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport * as disposeMesh from '../rendering/disposeMesh.js';\nimport * as setHighlight from '../picking/setHighlight.js';\nimport * as showFeature from '../picking/showFeature.js';\n\nexport function disposeTrafficObject(state, object) {\r\n if (!object) return;\r\n if (sceneByLayer.get(state.layer).highlightedFeature?.mesh === object) {\r\n setHighlight.setHighlight(state.layer, null);\r\n sceneByLayer.get(state.layer).hoveredFeature = null;\r\n showFeature.showFeature(state.layer, null);\r\n };\r\n disposeMesh.disposeMesh(state.layer, object);\r\n}\n", "export function destroyTrafficGpu(state) {\n state.gpu?.params?.destroy();\n state.gpu?.template?.destroy();\n state.gpu?.points?.destroy();\n state.gpu?.vehicles?.destroy();\n state.gpu = null;\n}\n", "import { trafficByLayer } from '../globals/trafficByLayer.js';\n\n\nimport { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { destroyTrafficGpu } from './destroyTrafficGpu.js';\n\nexport function removeTraffic(state) {\n state.request?.abort();\n cancelAnimationFrame(state.frame);\n state.frame = undefined;\n state.layer._map.off('simulationtimechange layerremove', state.update).off('terrainchange', state.terrain);\n disposeTrafficObject(state, state.mesh);\n disposeTrafficObject(state, state.route);\n state.mesh = state.route = null;\n trafficByLayer.delete(state.layer);\n destroyTrafficGpu(state);\n state.lanes.length = 0;\n state.trips.length = 0;\n state.tripsKey = state.loaded = null;\n}\n", "import { startTraffic } from './startTraffic.js';\n\nexport function readyTraffic(state) {\r\n state.ready = true;\r\n if (state.layer._map) startTraffic(state);\r\n}\n", "import { cameraByMap } from '../globals/cameraByMap.js';\n\n\r\nexport function trafficNow(state) {\r\n const control = cameraByMap.get(state.layer._map)?._timeControl;\r\n const live = control ? control.live : true;\r\n return /* alloc */ {\r\n live, time: live ? /* alloc */ new Date() : control.time,\r\n };\r\n}\r\n", "import { speed } from '../globals/speed.js';\n\n\n/** Evenly spaced starting offsets (metres) for `flow` vehicles/h moving at `velocity` m/s on a `length` metres lane. */\n\nexport function vehicleOffsets(length, flow, velocity = speed) {\n const count = Math.round(length * flow / 3600 / velocity);\n const offsets = Array.from(/* alloc */ { length: count });\n let i;\n for (i = 0; i < offsets.length; i++) offsets[i] = (i + 0.5) * length / count;\n return offsets;\n}\n", "export const trafficClocks = new Map();\n", "\n\nexport function clockMinutes(clockTime) {\n const parts = clockTime.split(':');\n return Number(parts[0]) * 60 + Number(parts[1]);\n}\n", "\n\nexport function compareDepartures(a, b) {\n return a - b;\n}\n", "import { trafficClocks } from '../globals/trafficClocks.js';\nimport { clockMinutes } from './clockMinutes.js';\nimport { compareDepartures } from './compareDepartures.js';\n\n\n/**\n * Trips of a frequency-based timetable (like GTFS frequencies.txt) underway at `date`, in the timetable's local time.\n * @param {{timeZone: string, duration: number, services: Array<{from: string, to: string, every?: number, months?: number[], weekdays?: number[]}>}} timetable\n * `duration` and `every` are minutes; `from`/`to` are 'HH:MM' first/last departures; months are 1-12, weekdays 0 (Sunday)-6.\n * @returns {Array<{id: string, departure: string, progress: number}>} `progress` is 0-1 along the lane.\n */\n\nexport function scheduledTrips(date, { timeZone, duration, services }) {\n const time = date instanceof Date ? date\n : /* alloc */ new Date(date);\n if (!Number.isFinite(time.getTime())) throw /* alloc */ new Error('Invalid date');\n let clock = trafficClocks.get(timeZone);\n if (!clock) {\n clock = /* alloc */ new Intl.DateTimeFormat('en-GB',\n /* alloc */ {\n timeZone, year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\n });\n if (trafficClocks.size >= 32) {\n trafficClocks.delete(trafficClocks.keys().next().value);\n }\n trafficClocks.set(timeZone, clock);\n }\n const parts = /* alloc */ {};\n let part, from, to, every, months, weekdays, departure;\n for (part of clock.formatToParts(time)) {\n if (part.type !== 'literal') parts[part.type] = Number(part.value);\n }\n const minute = parts.hour * 60 + parts.minute + (parts.second + time.getUTCMilliseconds() / 1000) / 60;\n const weekday = ((Math.floor(Date.UTC(parts.year, parts.month - 1, parts.day) / 86400000) + 4) % 7 + 7) % 7;\n const departures = /* alloc */ [];\n for ({ from, to, every = Infinity, months, weekdays } of services) {\n if (months?.includes(parts.month) === false || weekdays?.includes(weekday) === false) continue;\n for (departure = clockMinutes(from); departure <= clockMinutes(to); departure += every) departures.push(departure);\n }\n departures.sort(compareDepartures);\n const trips = /* alloc */ [];\n for (departure of departures) {\n if (minute >= departure && minute < departure + duration) trips.push(/* alloc */ {\n id: `${parts.year}-${parts.month}-${parts.day}-${departure}`,\n departure: `${String(Math.floor(departure / 60)).padStart(2, '0')}:${String(departure % 60).padStart(2, '0')}`,\n progress: (minute - departure) / duration,\n });\n }\n return trips;\n}\n", "import { vehicleOffsets } from \"./vehicleOffsets.js\";\nimport { scheduledTrips } from \"./scheduledTrips.js\";\n\n// A lane with a `timetable` runs scheduled trips end to end; one with a `flow` (vehicles/h) loops evenly spaced vehicles.\n\nexport function tripsAt(time, lanes, velocity) {\n const trips = /* alloc */ [];\n let l, lane, timetable, flow, trip, travelled, offsets, k;\n for (l = 0; l < lanes.length; l++) {\n lane = lanes[l];\n ({ timetable, flow = 0 } = lane.properties);\n if (!lane.length) continue;\n if (timetable) {\n for (trip of scheduledTrips(time, timetable)) trips.push(/* alloc */ {\n id: `${l}-${trip.id}`, lane, distance: trip.progress * lane.length, speed: lane.length / (timetable.duration * 60),\n properties: /* alloc */ { ...lane.properties, departure: trip.departure },\n });\n } else {\n travelled = time / 1000 * velocity;\n offsets = lane.offsets ||= vehicleOffsets(lane.length, flow, velocity);\n for (k = 0; k < offsets.length; k++) trips.push(/* alloc */ {\n id: `${l}-${k}`, lane, distance: (offsets[k] + travelled) % lane.length, speed: velocity, properties: lane.properties,\n });\n }\n }\n return trips;\n}\n", "export function failTraffic(state, error) {\r\n state.error = error;\r\n state.status.textContent = `${state.vehicle}: Error: ${error.message}`;\r\n state.status.setAttribute('role', 'alert');\r\n console.error('Traffic layer', error);\r\n}\r\n", "export const trafficRouteMaterial = Object.freeze({ unlit: true });\n", "export function appendRouteDash(position, normal, color, a, b, dx, dz, x, z, start, end, r, g, blue) {\r\n const px = a[0] + dx * start, pz = a[1] + dz * start;\r\n const py = a[2] + (b[2] - a[2]) * start + 0.4;\r\n const qx = a[0] + dx * end, qz = a[1] + dz * end;\r\n const qy = a[2] + (b[2] - a[2]) * end + 0.4;\r\n let vertex;\r\n for (vertex = 0; vertex < 6; vertex++) {\r\n if (vertex === 0 || vertex === 3) position.push(px - x, py, pz - z);\r\n else if (vertex === 1) position.push(px + x, py, pz + z);\r\n else if (vertex === 5) position.push(qx - x, qy, qz - z);\r\n else position.push(qx + x, qy, qz + z);\r\n normal.push(0, 1, 0);\r\n color.push(r, g, blue);\r\n }\r\n}\r\n", "import { appendRouteDash } from './appendRouteDash.js';\r\n\r\nexport function appendRouteSegment(position, normal, color, points, lengths, i, r, g, blue) {\r\n const a = points[i - 1], b = points[i];\r\n const dx = b[0] - a[0], dz = b[1] - a[1], length = lengths[i] - lengths[i - 1];\r\n if (!length) return;\r\n const x = -dz / length * 2.5, z = dx / length * 2.5;\r\n let distance, start, end;\r\n for (distance = Math.floor(lengths[i - 1] / 30) * 30; distance < lengths[i]; distance += 30) {\r\n start = Math.max(0, (distance - lengths[i - 1]) / length);\r\n end = Math.min(1, (distance + 18 - lengths[i - 1]) / length);\r\n if (end <= start) continue;\r\n appendRouteDash(position, normal, color, a, b, dx, dz, x, z, start, end, r, g, blue);\r\n }\r\n}\r\n", "import { appendRouteSegment } from './appendRouteSegment.js';\n\n/** Dashed lane outline, in layer-local metres. */\n\nexport function routeGeometry(lanes) {\n const position = /* alloc */ [];\n const normal = /* alloc */ [];\n const color = /* alloc */ [];\n let points, lengths, properties, raw, rgb, r, g, blue, i;\n for ({ points, lengths, properties } of lanes) {\n raw = properties?.route_color;\n rgb = /^[\\da-f]{6}$/i.test(raw) ? Number.parseInt(raw, 16) : null;\n r = rgb === null ? 0.08 : (rgb >> 16 & 255) / 255;\n g = rgb === null ? 0.7 : (rgb >> 8 & 255) / 255;\n blue = rgb === null ? 0.85 : (rgb & 255) / 255;\n for (i = 1; i < points.length; i++) {\n appendRouteSegment(position, normal, color, points, lengths, i, r, g, blue);\n }\n }\n return /* alloc */ { position, normal, color };\n}\n", "import * as createMeshApi from '../rendering/createMesh.js';\n\nexport function createTrafficMesh(state, data, featureFaces, material, usage = 0) {\r\n const result = createMeshApi.createMesh(state.layer, data, material, usage);\r\n result.extras.featureFaces = featureFaces;\r\n return result;\r\n}\n", "import { trafficRouteMaterial } from '../globals/trafficRouteMaterial.js';\nimport { routeGeometry } from './routeGeometry.js';\nimport { createTrafficMesh } from './createTrafficMesh.js';\n\n\nexport function drawTrafficRoute(state) {\n state.route = createTrafficMesh(state, routeGeometry(state.lanes),\n /* alloc */ [], trafficRouteMaterial);\n}\n", "import { computeBounds } from '../geometry/computeBounds.js';\n\nexport function trafficBounds(state) {\n let radius = 20, height = 5;\n let i, lane, x, z, y;\n for (i = 0; i < state.template.position.length; i += 3) {\n radius = Math.max(radius, Math.hypot(state.template.position[i], state.template.position[i + 2]) + Math.abs(state.side));\n height = Math.max(height, state.template.position[i + 1]);\n }\n const data = /* alloc */ [];\n for (lane of state.lanes) {\n for ([x, z, y] of lane.points) data.push(x - radius, y, z - radius, x + radius, y + height, z + radius);\n }\n const extent = /* alloc */ {\n attributes: /* alloc */ {\n position: /* alloc */ { data },\n },\n };\n computeBounds(extent);\n state.mesh.geometry.bounds = extent.bounds;\n}\n", "import { trafficEmptyOptions } from '../globals/trafficEmptyOptions.js';\nimport { build } from '../geometry/build.js';\nimport { createTrafficMesh } from './createTrafficMesh.js';\nimport { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { trafficBounds } from './trafficBounds.js';\n\n\nexport function rebuildTrafficMesh(state) {\n const { trips, model, vertices } = state;\n disposeTrafficObject(state, state.mesh);\n state.mesh = null;\n if (!trips.length) return;\n const color = /* alloc */ [];\n const featureFaces = /* alloc */ [];\n let i, trip, component;\n for (i = 0; i < trips.length; i++) {\n trip = trips[i];\n for (component of build(model(i, trip.properties)).color) color.push(component);\n featureFaces.push(/* alloc */ {\n id: trip.id, properties: trip.properties, faceStart: i * vertices / 3, faceEnd: (i + 1) * vertices / 3,\n vertexStart: i * vertices, vertexEnd: (i + 1) * vertices\n });\n }\n const count = color.length / 3;\n state.mesh = createTrafficMesh(state, /* alloc */ {\n position: /* alloc */ new Array(color.length).fill(0),\n normal: /* alloc */ new Array(color.length).fill(0), color,\n }, featureFaces, trafficEmptyOptions, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC);\n state.mesh.geometry.drawRange.count = count;\n state.mesh.extras.dynamicLights = true;\n trafficBounds(state);\n}\n", "export function trafficStorage(device, data) {\r\n const buffer = device.createBuffer(/* alloc */ { size: Math.max(16, data.byteLength), usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\r\n device.queue.writeBuffer(buffer, 0, data);\r\n return buffer;\r\n}\r\n", "import { trafficStorage } from './trafficStorage.js';\r\n\r\nexport function uploadTrafficLanes(state, device) {\r\n let lane, i, point, count = 0;\r\n for (lane of state.lanes) count += lane.points.length;\r\n const data = /* alloc */ new Float32Array(count * 4);\r\n let offset = 0;\r\n for (lane of state.lanes) {\r\n lane.start = offset / 4;\r\n for (i = 0; i < lane.points.length; i++) {\r\n point = lane.points[i];\r\n data[offset++] = point[0];\r\n data[offset++] = point[1];\r\n data[offset++] = point[2];\r\n data[offset++] = lane.lengths[i];\r\n }\r\n }\r\n state.gpu.points?.destroy();\r\n state.gpu.points = trafficStorage(device, data);\r\n state.lanesDirty = false;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { destroyTrafficGpu } from './destroyTrafficGpu.js';\nimport { trafficStorage } from './trafficStorage.js';\nimport { uploadTrafficLanes } from './uploadTrafficLanes.js';\n\nexport function rebaseTraffic(state) {\n const { device } = sceneByLayer.get(state.layer).renderer;\n if (state.gpu?.device !== device) {\n destroyTrafficGpu(state);\n const template = /* alloc */ new Float32Array(\n state.template.position.length + state.template.normal.length);\n template.set(state.template.position);\n template.set(state.template.normal, state.template.position.length);\n state.gpu = /* alloc */ {\n device,\n pipeline: device.createComputePipeline(/* alloc */ {\n layout: 'auto', compute: /* alloc */ {\n module: device.createShaderModule(/* alloc */ { code: state.shader }), entryPoint: 'main',\n },\n }),\n params: device.createBuffer(/* alloc */ { size: 16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }),\n template: trafficStorage(device, template),\n };\n state.lanesDirty = true;\n }\n let i, trip, binding;\n if (state.lanesDirty) uploadTrafficLanes(state, device);\n const data = /* alloc */ new Float32Array(state.trips.length * 4);\n const index = /* alloc */ new Uint32Array(data.buffer);\n for (i = 0; i < state.trips.length; i++) {\n trip = state.trips[i];\n index[i * 4] = trip.lane.start;\n index[i * 4 + 1] = trip.lane.points.length;\n data[i * 4 + 2] = trip.distance;\n data[i * 4 + 3] = trip.speed;\n state.mesh.extras.featureFaces[i].properties = trip.properties;\n }\n if (state.gpu.vehicles?.size >= data.byteLength) device.queue.writeBuffer(state.gpu.vehicles, 0, data);\n else {\n state.gpu.vehicles?.destroy();\n state.gpu.vehicles = trafficStorage(device, data);\n }\n const { position, normal } = state.mesh.geometry.attributes;\n const entries = /* alloc */ [];\n let buffer;\n for (binding = 0; binding < 6; binding++) {\n buffer = binding === 0 ? state.gpu.params : binding === 1 ? state.gpu.template\n : binding === 2 ? state.gpu.points : binding === 3 ? state.gpu.vehicles\n : binding === 4 ? position.buffer : normal.buffer;\n entries.push(/* alloc */ {\n binding, resource: /* alloc */ { buffer },\n });\n }\n state.gpu.bindGroup = device.createBindGroup(/* alloc */ {\n layout: state.gpu.pipeline.getBindGroupLayout(0),\n entries,\n });\n}\n", "export function trafficStatusText(state, valid) {\r\n if (!valid) return `${state.vehicle}: select a valid simulation date`;\r\n if (!state.loaded) return `${state.vehicle}: loading\u2026`;\r\n return `${state.trips.length} ${state.vehicle === 'boat' ? 'boats' : state.vehicle}`;\r\n}\r\n", "import { tripsAt } from './tripsAt.js';\r\nimport { failTraffic } from './failTraffic.js';\r\nimport { drawTrafficRoute } from './drawTrafficRoute.js';\r\nimport { rebuildTrafficMesh } from './rebuildTrafficMesh.js';\r\nimport { rebaseTraffic } from './rebaseTraffic.js';\r\nimport { trafficStatusText } from './trafficStatusText.js';\r\n\r\nexport function refreshTrafficTrips(state, time, ms, valid) {\r\n let text;\r\n try {\r\n if (valid) state.trips = tripsAt(time, state.lanes, state.velocity);\r\n else state.trips.length = 0;\r\n text = trafficStatusText(state, valid);\r\n } catch (error) {\r\n failTraffic(state, error);\r\n return;\r\n }\r\n state.rebasedAt = ms;\r\n state.nextCheck = ms + 1000;\r\n let key = '', trip;\r\n for (trip of state.trips) key += `${key ? ',' : ''}${trip.id}`;\r\n const routeNeeded = state.outline && !state.route && state.lanes.length;\r\n const changed = key !== state.tripsKey || Boolean(routeNeeded);\r\n if (routeNeeded) drawTrafficRoute(state);\r\n if (key !== state.tripsKey) { rebuildTrafficMesh(state); state.tripsKey = key; }\r\n if (state.mesh) rebaseTraffic(state);\r\n if (!state.error) {\r\n if (state.status.textContent !== text) state.status.textContent = text;\r\n state.status.removeAttribute('role');\r\n }\r\n return changed;\r\n}\r\n", "export function moveTraffic(state, seconds) {\r\n const { device } = state.gpu;\r\n state.paramFloats[0] = state.elapsed = seconds;\r\n state.paramFloats[1] = state.side;\r\n state.paramInts[2] = state.vertices;\r\n state.paramInts[3] = state.trips.length * state.vertices;\r\n device.queue.writeBuffer(state.gpu.params, 0, state.params);\r\n const encoder = device.createCommandEncoder(), pass = encoder.beginComputePass();\r\n pass.setPipeline(state.gpu.pipeline);\r\n pass.setBindGroup(0, state.gpu.bindGroup);\r\n pass.dispatchWorkgroups(state.trips.length);\r\n pass.end();\r\n device.queue.submit(/* alloc */ [encoder.finish()]);\r\n state.stale = true;\r\n}\r\n", "import { locateTraffic } from './locateTraffic.js';\r\n\r\nexport function updateTrafficLights(state) {\r\n state.litAt = performance.now();\r\n const lights = /* alloc */ [];\r\n let trip, x, y, z, dx, dz, lx, ly, lz, light;\r\n for (trip of state.trips) {\r\n ({ x, y, z, dx, dz } = locateTraffic(state, trip));\r\n for ({ position: [lx, ly, lz], ...light } of state.lights) {\r\n lights.push(/* alloc */ {\r\n ...light, position: /* alloc */ [x - lx * dz - lz * dx, y + ly, z + lx * dx - lz * dz],\r\n });\r\n }\r\n }\r\n state.mesh.extras.lights = lights;\r\n}\r\n", "import { moveTraffic } from './moveTraffic.js';\r\nimport { updateTrafficLights } from './updateTrafficLights.js';\r\n\r\nexport function updateTrafficPose(state, ms, live) {\r\n if (!state.mesh) return;\r\n moveTraffic(state, (ms - state.rebasedAt) / 1000);\r\n if (state.lights && (!live || !(performance.now() - state.litAt < 100))) updateTrafficLights(state);\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { update as updateScene } from '../scene/update.js';\nimport { trafficNow } from './trafficNow.js';\nimport { refreshTrafficTrips } from './refreshTrafficTrips.js';\nimport { updateTrafficPose } from './updateTrafficPose.js';\n\nexport function tickTraffic(state) {\n state.frame = undefined;\n if (!state.ready || !state.layer._map) return;\n if (!sceneByLayer.get(state.layer).renderer) { state.frame = requestAnimationFrame(state.tick); return; }\n if (state.mesh && !(state.mesh.geometry.attributes.position.buffer.usage & GPUBufferUsage.STORAGE)) {\n state.tripsKey = null;\n state.nextCheck = -Infinity;\n }\n const { live, time } = trafficNow(state), ms = time?.getTime(), valid = Number.isFinite(ms);\n let changed = false;\n if (!live || !valid || !(ms >= state.rebasedAt && ms < state.nextCheck)) {\n changed = refreshTrafficTrips(state, time, ms, valid);\n if (changed === undefined) return;\n }\n updateTrafficPose(state, ms, live);\n if (state.mesh || changed) updateScene(state.layer);\n if (live && valid) state.frame = requestAnimationFrame(state.tick);\n}\n", "export async function fetchTrafficLanes(state, time, signal) {\r\n const href = /* alloc */ new URL(state.url, document.baseURI).href;\r\n if (/\\.m?js(?:[?#]|$)/i.test(state.url)) return (await import(href)).default(time, state.layer, signal);\r\n if (!state.file) {\r\n const response = await fetch(href, /* alloc */ { signal });\r\n if (!response.ok) throw /* alloc */ new Error(`HTTP ${response.status}`);\r\n state.file = await response.json();\r\n }\r\n return state.file;\r\n}\r\n", "export const trafficEmptyList = Object.freeze([]);\n", "import { trafficEmptyList } from '../globals/trafficEmptyList.js';\n// GeoJSON (Multi)LineStrings become lanes ({latlngs, properties, elevation?}); prepare() adds `points` ([x, z, ground]),\n// `lengths` and `length` in layer-local metres.\n\n\n\nexport function toLanes({ features = trafficEmptyList }) {\n const lanes = /* alloc */ [];\n let geometry, properties, lines, line, latlngs, lng, lat, i;\n for ({ geometry, properties } of features) {\n if (geometry?.type !== 'LineString' && geometry?.type !== 'MultiLineString') continue;\n lines = geometry.type === 'MultiLineString' ? geometry.coordinates : null;\n for (i = 0; i < (lines ? lines.length : 1); i++) {\n line = lines ? lines[i] : geometry.coordinates;\n latlngs = /* alloc */ [];\n for ([lng, lat] of line) latlngs.push(/* alloc */ [lat, lng]);\n lanes.push(/* alloc */ {\n latlngs, properties: properties ?? /* alloc */ {},\n elevation: properties?.elevation,\n });\n }\n }\n return lanes;\n}\n", "import { radians } from '../globals/radians.js';\nimport { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { groundTraffic } from './groundTraffic.js';\n\nexport function prepareTraffic(state) {\n const { layer, lanes } = state;\n const crs = layer._map.options.crs, origin = crs.project(sceneByLayer.get(layer).location);\n const metres = Math.cos(sceneByLayer.get(layer).location.lat * radians);\n let lane, lat, lng, point, i;\n for (lane of lanes) {\n lane.points = /* alloc */ [];\n for ([lat, lng] of lane.latlngs) {\n point = crs.project(/* alloc */ new L.LatLng(lat, lng));\n lane.points.push(/* alloc */ [(point.x - origin.x) * metres, -(point.y - origin.y) * metres, 0]);\n }\n lane.lengths = /* alloc */ [0];\n for (i = 1; i < lane.points.length; i++) {\n lane.lengths.push(lane.lengths[i - 1] + Math.hypot(lane.points[i][0] - lane.points[i - 1][0], lane.points[i][1] - lane.points[i - 1][1]));\n }\n lane.length = lane.lengths.at(-1);\n }\n groundTraffic(state);\n disposeTrafficObject(state, state.route);\n state.route = null;\n state.tripsKey = null;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { getElevation } from '../terrain/getElevation.js';\n\nexport function groundTraffic(state) {\n const { layer, lanes } = state;\n const terrain = sceneByLayer.get(cameraByMap.get(layer._map)._terrain3D)?._terrainReady && cameraByMap.get(layer._map)._terrain3D, base = sceneByLayer.get(layer).root.position[1];\n let lane, i, elevation;\n for (lane of lanes) {\n for (i = 0; i < lane.points.length; i++) {\n elevation = terrain && (lane.elevation ?? getElevation(terrain, lane.latlngs[i]));\n lane.points[i][2] = Number.isFinite(elevation) && Number.isFinite(base) ? elevation - base : 0;\n }\n }\n state.lanesDirty = true;\n state.nextCheck = -Infinity;\n}\n", "import { toLanes } from './toLanes.js';\nimport { prepareTraffic } from './prepareTraffic.js';\n\nexport function loadedTrafficLanes(state, signal, data) {\r\n if (signal.aborted || !state.layer._map) return;\r\n state.error = null;\r\n if (data === state.loaded) {\r\n state.nextCheck = -Infinity;\r\n if (!state.frame) state.tick();\r\n return;\r\n }\r\n state.loaded = data;\r\n state.lanes = toLanes(data);\r\n prepareTraffic(state);\r\n if (!state.frame) state.tick();\r\n}\n", "import { failTraffic } from './failTraffic.js';\n\nexport function failedTrafficLoad(state, signal, error) {\r\n if (!signal.aborted && error.name !== 'AbortError') failTraffic(state, error);\r\n}\n", "import { trafficNow } from './trafficNow.js';\nimport { fetchTrafficLanes } from './fetchTrafficLanes.js';\nimport { loadedTrafficLanes } from './loadedTrafficLanes.js';\nimport { failedTrafficLoad } from './failedTrafficLoad.js';\n\nexport function loadTraffic(state) {\n const { time } = trafficNow(state);\n if (!Number.isFinite(time?.getTime())) return;\n state.request?.abort();\n const { signal } = state.request = /* alloc */ new AbortController();\n fetchTrafficLanes(state, time, signal).then(\n loadedTrafficLanes.bind(null, state, signal),\n failedTrafficLoad.bind(null, state, signal),\n );\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { loadTraffic } from './loadTraffic.js';\n\nexport function updateTraffic(state, event) {\r\n if (event?.layer && !sceneByLayer.get(event.layer).control?.time) return;\r\n cancelAnimationFrame(state.frame);\r\n loadTraffic(state);\r\n state.tick();\r\n}\n", "import { disposeTrafficObject } from './disposeTrafficObject.js';\nimport { groundTraffic } from './groundTraffic.js';\nimport { trafficBounds } from './trafficBounds.js';\n\nexport function updateTrafficTerrain(state) {\r\n if (!state.lanes.length) return;\r\n groundTraffic(state);\r\n disposeTrafficObject(state, state.route);\r\n state.route = null;\r\n if (state.mesh) trafficBounds(state);\r\n if (!state.frame) state.tick();\r\n}\n", "import { L } from '../globals/L.js';\nimport { initialize } from './initialize.js';\nimport { onAdd } from './onAdd.js';\nimport { onRemove } from './onRemove.js';\n\n/**\n * Third-person walk mode, toggled by a map button (and Esc): a pedestrian at the map centre runs with W/S (or \u2191/\u2193) and\n * turns with A/D (or \u2190/\u2192); the camera swings back behind it while it moves. Dragging the map only turns the camera\n * (bearing, pitch); the wheel changes the camera distance.\n * The walker follows the terrain, bridges included, and `control.walker` exposes `{ latlng, heading, phase }`.\n * Options: `speed` (m/s, default 70), `distance` (camera distance in metres, default 20), `position` (button corner, default 'bottomright').\n * Visible meshes of the other 3D layers (buildings, trees, models, streetlights) are solid; terrain and traffic are not.\n */\nL.Control.Walk = L.Control.extend({\n options: { position: 'bottomright', speed: 70, distance: 20 },\n initialize,\n onAdd,\n onRemove,\n});\n", "import { L } from '../globals/L.js';\nimport { createWalk } from './createWalk.js';\r\n\r\nexport function initialize(options) {\r\n L.Util.setOptions(this, options);\r\n createWalk(this, this.options);\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { init3D } from '../scene/init3D.js';\nimport { onBlur } from './onBlur.js';\nimport { onKey } from './onKey.js';\nimport { onPointer } from './onPointer.js';\nimport { onTerrain } from './onTerrain.js';\nimport { start } from './start.js';\nimport { step } from './step.js';\nimport { stop } from './stop.js';\nimport { toggle } from './toggle.js';\n\nexport function createWalk(control, {\n speed,\n distance,\n ...options\n}) {\n const layer = /* alloc */ new L.Layer();\n sceneByLayer.get(layer)._type = 'walk';\n init3D(layer, options);\n const keys = /* alloc */ new Set();\n const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control');\n container.style.cssText = 'display:flex;align-items:center;background:#fff;';\n const button = L.DomUtil.create('button', '', container);\n button.type = 'button';\n button.title = 'Walk';\n button.setAttribute('aria-label', 'Walk');\n button.setAttribute('aria-pressed', 'false');\n button.textContent = '\uD83D\uDEB6';\n button.style.cssText = 'width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;';\n const hint = L.DomUtil.create('small', '', container);\n hint.style.cssText = 'display:none;padding:0 8px;color:#333;white-space:nowrap;';\n hint.textContent = 'W/S: run \u00B7 A/D: turn \u00B7 hold Space: ascend \u00B7 drag: look around \u00B7 Esc: exit';\n L.DomEvent.disableClickPropagation(container);\n\n const context = /* alloc */ {\n layer,\n speed,\n distance,\n keys,\n container,\n button,\n hint,\n meshes: null,\n frame: null,\n last: undefined,\n swing: 0,\n verticalSpeed: 0,\n saved: null,\n hitData: null,\n local: null,\n state: control.walker = sceneByLayer.get(layer).walker = /* alloc */ { latlng: null, heading: 0, phase: 0, height: 0 }\n }\n context.step = step.bind(context);\n context.onKey = onKey.bind(context);\n context.onBlur = onBlur.bind(context);\n context.onPointer = onPointer.bind(context);\n context.onTerrain = onTerrain.bind(context);\n context.start = start.bind(context);\n context.stop = stop.bind(context);\n context.toggle = toggle.bind(context);\n control._walk = context;\n L.DomEvent.on(button, 'click', context.toggle);\n}\n", "export function onBlur() {\r\n this.keys.clear();\r\n}\n", "// W/S (\u2191/\u2193) run forward/back along the heading, A/D (\u2190/\u2192) turn: [forward, turn].\nexport const moves = {\n KeyW: [1, 0],\n ArrowUp: [1, 0],\n KeyS: [-1, 0],\n ArrowDown: [-1, 0],\n KeyD: [0, 1],\n ArrowRight: [0, 1],\n KeyA: [0, -1],\n ArrowLeft: [0, -1]\n};\n", "import { L } from '../globals/L.js';\nimport { mapSetPitch } from '../camera/mapSetPitch.js';\nimport * as disposeMesh from '../rendering/disposeMesh.js';\nimport { onKey } from './onKey.js';\nimport { onBlur } from './onBlur.js';\nimport { onPointer } from './onPointer.js';\nimport { onTerrain } from './onTerrain.js';\n\nexport function stop() {\n const map = this.layer._map;\n cancelAnimationFrame(this.frame);\n this.keys.clear(); this.dragging = false;\n this.state.height = this.verticalSpeed = 0;\n L.DomEvent.off(document, 'keydown keyup', this.onKey);\n L.DomEvent.off(window, 'blur', this.onBlur);\n let mesh, name;\n if (this.meshes) for (mesh of this.meshes) disposeMesh.disposeMesh(this.layer, mesh);\n this.meshes = null;\n this.button.setAttribute('aria-pressed', 'false');\n this.button.style.background = '#fff';\n this.hint.style.display = 'none';\n if (!map || !this.saved) return;\n L.DomEvent.off(map.getContainer(), 'pointerdown pointermove pointerup pointercancel', this.onPointer);\n map.off('terrainchange', this.onTerrain);\n map.options.scrollWheelZoom = this.saved.scrollWheelZoom;\n for (name of this.saved.handlers) map[name].enable();\n map.setView(this.state.latlng, this.saved.zoom, /* alloc */ { animate: false });\n mapSetPitch(map, this.saved.pitch);\n this.saved = null;\n}\n", "import { mapSetPitchAndBearing } from '../camera/mapSetPitchAndBearing.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nexport function onPointer(event) {\n // Dragging only turns the camera around the walker: horizontal = bearing, vertical = pitch.\n const map = this.layer._map;\n if (event.type === 'pointerdown') {\n if (event.button !== 0 || event.target.closest('.leaflet-control')) return;\n this.dragX = event.clientX;\n this.dragY = event.clientY;\n this.dragging = true;\n map.getContainer().setPointerCapture(event.pointerId);\n } else if (this.dragging && event.type === 'pointermove') {\n mapSetPitchAndBearing(map, Math.max(20, Math.min(85, mapGetPitch(map) - (event.clientY - this.dragY) * 0.2)), mapGetBearing(map) - (event.clientX - this.dragX) * 0.25);\n this.dragX = event.clientX;\n this.dragY = event.clientY;\n } else this.dragging = false;\n}\n", "// [part, pivot x, pivot y, swing sign]\nexport const limbs = [\n ['body', 0, 0, 0],\n ['leg', -0.09, 0.9, 1],\n ['leg', 0.09, 0.9, -1],\n ['arm', -0.25, 1.42, -1],\n ['arm', 0.25, 1.42, 1]\n];\n", "import { radians } from '../globals/radians.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { cameraByMap } from '../globals/cameraByMap.js';\n\n\nimport { getElevation } from '../terrain/getElevation.js';\n\nexport function local(output) {\n const { layer, state } = this;\n const map = layer._map, crs = map.options.crs, origin = crs.project(sceneByLayer.get(layer).location);\n const metres = Math.cos(sceneByLayer.get(layer).location.lat * radians);\n const p = crs.project(state.latlng), terrain = sceneByLayer.get(cameraByMap.get(map)._terrain3D)?._terrainReady && cameraByMap.get(map)._terrain3D;\n const ground = (terrain && getElevation(terrain, state.latlng)) || 0;\n output[0] = (p.x - origin.x) * metres;\n output[1] = ground + (state.height ?? 0) - sceneByLayer.get(layer).root.position[1];\n output[2] = -(p.y - origin.y) * metres;\n return output;\n}\n", "import { limbs } from '../globals/limbs.js';\n\nimport { update } from '../scene/update.js';\n\nimport { local } from './local.js';\n\nexport function place() {\n const [x, y, z] = local.call(this, this.local);\n // Model forward is -z; a yaw of -heading turns it to the compass heading (x east, -z north).\n const yaw = -this.state.heading, cos = Math.cos(yaw), sin = Math.sin(yaw);\n let i, px, py, sign, mesh;\n for (i = 0; i < limbs.length; i++) {\n [, px, py, sign] = limbs[i];\n mesh = this.meshes[i];\n mesh.position[0] = x + px * cos; mesh.position[1] = y + py; mesh.position[2] = z - px * sin;\n mesh.rotation[0] = sign * this.swing * Math.sin(this.state.phase);\n mesh.rotation[1] = yaw;\n }\n update(this.layer);\n}\n", "import { place } from './place.js';\n\nexport function onTerrain() {\r\n if (this.meshes) place.call(this);\r\n}\n", "import { moves } from '../globals/moves.js';\n\n\nimport { stop } from './stop.js';\n\nexport function onKey(event) {\n if (event.type === 'keyup' && event.code === 'Space') this.keys.delete('Space');\n // Text fields and sliders keep their keys; buttons and checkboxes don't.\n if (event.target.closest?.('input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]') ||\n event.ctrlKey || event.altKey || event.metaKey) return;\n if (event.type === 'keydown' && event.code === 'Escape') { this.stop(); return; }\n if (!moves[event.code] && event.code !== 'Space') return;\n event.preventDefault();\n if (event.type === 'keydown') this.keys.add(event.code); else this.keys.delete(event.code);\n}\n", "import { radians } from '../globals/radians.js';\nimport { earthCirc } from '../globals/earthCirc.js';\nimport { L } from '../globals/L.js';\nimport { sceneWalkHandlers } from '../globals/sceneWalkHandlers.js';\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\nimport { mapSetPitch } from '../camera/mapSetPitch.js';\nimport { step } from './step.js';\nimport { onKey } from './onKey.js';\nimport { onBlur } from './onBlur.js';\nimport { onPointer } from './onPointer.js';\nimport { onTerrain } from './onTerrain.js';\n\n\nexport function start() {\n const map = this.layer._map;\n if (this.saved || !map) return;\n this.state.latlng = map.getCenter();\n this.state.height = this.verticalSpeed = 0;\n // Zoom whose camera distance (1.5 viewport heights, as in scene/render.js) is about `distance` metres behind the walker.\n const pixelsPerMetre = map.getSize().y * 1.5 / this.distance;\n const zoom = Math.min(map.getMaxZoom(), Math.log2(pixelsPerMetre * earthCirc * Math.cos(this.state.latlng.lat * radians) / 256));\n let name;\n this.saved = /* alloc */ {\n zoom: map.getZoom(), pitch: mapGetPitch(map), scrollWheelZoom: map.options.scrollWheelZoom,\n handlers: /* alloc */ [],\n };\n for (name of sceneWalkHandlers) {\n if (map[name]?.enabled()) this.saved.handlers.push(name);\n }\n for (name of this.saved.handlers) map[name].disable();\n // Wheel zoom moves the camera closer or farther, keeping the walker centred.\n map.options.scrollWheelZoom = this.saved.scrollWheelZoom && 'center';\n this.state.heading = -mapGetBearing(map) * radians;\n map.setView(this.state.latlng, zoom, /* alloc */ { animate: false });\n mapSetPitch(map, 75);\n L.DomEvent.on(document, 'keydown keyup', this.onKey);\n L.DomEvent.on(window, 'blur', this.onBlur);\n L.DomEvent.on(map.getContainer(), 'pointerdown pointermove pointerup pointercancel', this.onPointer);\n map.on('terrainchange', this.onTerrain);\n this.button.setAttribute('aria-pressed', 'true');\n this.button.style.background = '#e4e4e4';\n this.hint.style.display = '';\n this.last = undefined;\n this.frame = requestAnimationFrame(this.step);\n}\n", "export const sceneWalkHandlers = ['dragging', 'keyboard', 'doubleClickZoom', 'boxZoom'];\n", "export function wrap(angle) {\n return Math.atan2(Math.sin(angle), Math.cos(angle));\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nexport function shouldSkipOther(other, layer) {\n return other === layer || sceneByLayer.get(other)._type === 'terrain' || sceneByLayer.get(other)._type === 'traffic';\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { intersectMeshes } from '../collision/intersectMeshes.js';\r\nimport { traverse } from '../scene/traverse.js';\r\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\r\nimport { collectVisibleMesh } from '../picking/collectVisibleMesh.js';\r\nimport { shouldSkipOther } from '../picking/shouldSkipOther.js';\r\nimport { local } from './local.js';\r\n\r\nexport function land(previousY) {\r\n const state = sceneByLayer.get(this.layer), ray = state.raycaster;\r\n const feet = local.call(this, this.local), root = state.root;\r\n const x = root.position[0] + feet[0] * root.scale[0];\r\n const y = root.position[1] + feet[1] * root.scale[1];\r\n const z = root.position[2] + feet[2] * root.scale[2];\r\n if (y > previousY || this.verticalSpeed > 0) return;\r\n updateWorldMatrix(state.scene);\r\n ray.origin[0] = x; ray.origin[1] = previousY + 0.01; ray.origin[2] = z;\r\n ray.direction[0] = 0; ray.direction[1] = -1; ray.direction[2] = 0;\r\n ray.meshes.length = 0;\r\n let layer, hit;\r\n for (layer of sceneByLayer.get(state._shared)._layers) {\r\n if (shouldSkipOther(layer, this.layer) || sceneByLayer.get(layer).kind === 'raster' || layer.options.nightLight) continue;\r\n traverse(sceneByLayer.get(layer).root, collectVisibleMesh, ray.meshes);\r\n }\r\n for (hit of intersectMeshes(ray, ray.meshes)) {\r\n if (hit.point[1] < y - 0.001) break;\r\n this.state.height += (hit.point[1] - y) / root.scale[1];\r\n this.verticalSpeed = 0;\r\n break;\r\n }\r\n ray.meshes.length = 0;\r\n}\r\n", "import { L } from '../globals/L.js';\r\nimport { radians } from '../globals/radians.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\nimport { local } from './local.js';\r\nimport { blocked } from './blocked.js';\r\n\r\nexport function moveWalker(forward, dt) {\r\n const metres = forward * this.speed * dt, { lat, lng } = this.state.latlng;\r\n const { position, scale } = sceneByLayer.get(this.layer).root;\r\n let east = Math.sin(this.state.heading) * metres, north = Math.cos(this.state.heading) * metres;\r\n const feet = local.call(this, this.local);\r\n let i;\r\n for (i = 0; i < feet.length; i++) feet[i] = position[i] + scale[i] * feet[i];\r\n // World x is east, z south; keep 0.3 m from walls and slide along them.\r\n const wall = blocked.call(this, east, north, feet);\r\n if (wall) {\r\n const into = east * wall[0] - north * wall[1];\r\n east -= into * wall[0]; north += into * wall[1];\r\n if (blocked.call(this, east, north, feet)) east = north = 0;\r\n }\r\n this.state.latlng = /* alloc */ new L.LatLng(lat + north / 111320, lng + east / (111320 * Math.cos(lat * radians)));\r\n this.state.phase += Math.hypot(east, north) / 1.6 * Math.PI;\r\n}\r\n", "export const colliders = new WeakMap();\n", "export function transformTriangle(v, p, index, i, m) {\r\n let k, j, x, y, z;\r\n for (k = 0; k < 3; k++) {\r\n j = (index ? index.data[i + k] : i + k) * 3, x = p[j], y = p[j + 1], z = p[j + 2];\r\n v[k * 3] = m[0] * x + m[4] * y + m[8] * z + m[12];\r\n v[k * 3 + 1] = m[1] * x + m[5] * y + m[9] * z + m[13];\r\n v[k * 3 + 2] = m[2] * x + m[6] * y + m[10] * z + m[14];\r\n }\r\n}\r\n", "import { CELL } from '../globals/CELL.js';\r\n\r\nexport function indexTriangle(cells, v, t) {\r\n let ix, iz, key;\r\n for (ix = Math.floor(Math.min(v[0], v[3], v[6]) / CELL); ix <= Math.floor(Math.max(v[0], v[3], v[6]) / CELL); ix++)\r\n for (iz = Math.floor(Math.min(v[2], v[5], v[8]) / CELL); iz <= Math.floor(Math.max(v[2], v[5], v[8]) / CELL); iz++) {\r\n key = ix + ',' + iz;\r\n if (!cells.has(key)) cells.set(key, /* alloc */ []);\r\n cells.get(key).push(t);\r\n }\r\n}\r\n", "import { colliders } from '../globals/colliders.js';\nimport { transformTriangle } from './transformTriangle.js';\nimport { indexTriangle } from './indexTriangle.js';\n\n\nexport function collider(mesh) {\n let c = colliders.get(mesh.geometry);\n if (c) return c;\n const m = mesh.worldMatrix, { position: { data: p }, index, normal, uv } = mesh.geometry.attributes;\n\n const count = index ? index.count : p.length / 3;\n const tri = /* alloc */ [];\n const nrm = /* alloc */ [];\n const cells = /* alloc */ new Map();\n const v = /* alloc */ [];\n\n let i, first, j, ex, ey, ez, fx, fy, fz, nx, nz, ny, length, a, h, t;\n for (i = 0; i < count; i += 3) {\n first = index ? index.data[i] : i;\n // Streetlight halos (uv.x <= 2, see scene/picking.js) are light, not matter.\n if (mesh.program.nightLight && uv && uv.data[first * 2] <= 2) {\n continue;\n }\n transformTriangle(v, p, index, i, m);\n ex = v[3] - v[0], ey = v[4] - v[1], ez = v[5] - v[2], fx = v[6] - v[0], fy = v[7] - v[1], fz = v[8] - v[2];\n\n nx = ey * fz - ez * fy, nz = ex * fy - ey * fx;\n\n ny = ez * fx - ex * fz, length = Math.hypot(nx, ny, nz);\n\n if (!length || Math.abs(ny) > 0.9 * length) {\n continue;\n }\n\n if (normal) {\n // The stored normal tells the outside, whatever the winding.\n j = first * 3, a = normal.data;\n if ((m[0] * a[j] + m[4] * a[j + 1] + m[8] * a[j + 2]) * nx + (m[2] * a[j] + m[6] * a[j + 1] + m[10] * a[j + 2]) * nz < 0) { nx = -nx; nz = -nz; }\n }\n\n h = Math.hypot(nx, nz), t = nrm.length / 2;\n\n tri.push(...v);\n nrm.push(nx / h, nz / h);\n\n indexTriangle(cells, v, t);\n }\n c = /* alloc */ {\n tri: Float32Array.from(tri),\n nrm: Float32Array.from(nrm),\n cells,\n origin: /* alloc */ [m[12], m[13], m[14]]\n };\n colliders.set(mesh.geometry, c);\n return c;\n}\n", "// M\u00F6ller-Trumbore for the horizontal ray (ox, oy, oz) + d\u00B7(dx, 0, dz) against triangle t; returns d or -1.\nexport function horizontalRay(v, t, ox, oy, oz, dx, dz) {\n const i = t * 9, ex = v[i + 3] - v[i], ey = v[i + 4] - v[i + 1], ez = v[i + 5] - v[i + 2];\n const fx = v[i + 6] - v[i], fy = v[i + 7] - v[i + 1], fz = v[i + 8] - v[i + 2];\n const px = -dz * fy, py = dz * fx - dx * fz, pz = dx * fy, det = ex * px + ey * py + ez * pz;\n if (Math.abs(det) < 1e-9) return -1;\n const tx = ox - v[i], ty = oy - v[i + 1], tz = oz - v[i + 2], u = (tx * px + ty * py + tz * pz) / det;\n if (u < 0 || u > 1) return -1;\n const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex, w = (dx * qx + dz * qz) / det;\n if (w < 0 || u + w > 1) return -1;\n return (fx * qx + fy * qy + fz * qz) / det;\n}\n", "import { horizontalRay } from '../collision/horizontalRay.js';\r\n\r\nexport function hitColliderCell(cell, c, data, ox, oy, oz) {\r\n const { dx, dz, seen } = data;\r\n let t, height, d;\r\n for (t of cell) {\r\n if (seen.has(t) || dx * c.nrm[t * 2] + dz * c.nrm[t * 2 + 1] >= 0) continue;\r\n seen.add(t);\r\n for (height = 0.4; height < 2; height += 1.1) {\r\n d = horizontalRay(c.tri, t, ox, oy + height, oz, dx, dz);\r\n if (d >= 0 && d < data.best) {\r\n data.best = d;\r\n data.found = true;\r\n data.normal[0] = c.nrm[t * 2];\r\n data.normal[1] = c.nrm[t * 2 + 1];\r\n }\r\n }\r\n }\r\n}\r\n", "import { CELL } from '../globals/CELL.js';\n\nimport { computeBounds } from '../geometry/computeBounds.js';\nimport { collider } from '../collision/collider.js';\n\nimport { hitColliderCell } from './hitColliderCell.js';\n\nexport function hitMesh(mesh, data) {\n if (!mesh.visible) return true;\n if (!mesh.geometry?.attributes?.position?.data || mesh.program?.depthTest === false) return;\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\n const m = mesh.worldMatrix, { center: k, radius } = mesh.geometry.bounds;\n const { x, y, z, dx, dz, reach } = data;\n if (Math.hypot(m[0] * k[0] + m[4] * k[1] + m[8] * k[2] + m[12] - x, m[2] * k[0] + m[6] * k[1] + m[10] * k[2] + m[14] - z) >\n radius * Math.hypot(m[0], m[1], m[2]) + reach) return;\n const c = collider(mesh), ox = x - m[12] + c.origin[0], oy = y - m[13] + c.origin[1], oz = z - m[14] + c.origin[2];\n const seen = data.seen;\n seen.clear();\n let ix, iz, cell;\n for (ix = Math.floor(Math.min(ox, ox + dx * reach) / CELL); ix <= Math.floor(Math.max(ox, ox + dx * reach) / CELL); ix++)\n for (iz = Math.floor(Math.min(oz, oz + dz * reach) / CELL); iz <= Math.floor(Math.max(oz, oz + dz * reach) / CELL); iz++) {\n cell = c.cells.get(ix + ',' + iz);\n if (!cell) continue;\n hitColliderCell(cell, c, data, ox, oy, oz);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { traverse } from '../scene/traverse.js';\nimport { updateWorldMatrix } from '../scene/updateWorldMatrix.js';\nimport { shouldSkipOther } from './shouldSkipOther.js';\nimport { hitMesh } from './hitMesh.js';\n\n// Horizontal normal of the nearest wall faced within `reach` metres of the feet at world (x, y, z), walking along\n// the unit (dx, dz); knee and chest rays, so arches and tree crowns above the head let the walker through.\n// ponytail: traffic vehicles and boats move on the GPU and are not obstacles.\n\nexport function hit(layer, x, y, z, dx, dz, reach, data) {\n updateWorldMatrix(sceneByLayer.get(layer).scene);\n data.x = x, data.y = y, data.z = z, data.dx = dx, data.dz = dz, data.reach = reach;\n data.best = reach, data.found = false;\n let other;\n for (other of sceneByLayer.get(sceneByLayer.get(layer)._shared)._layers) {\n if (shouldSkipOther(other, layer)) continue;\n traverse(sceneByLayer.get(other).root, hitMesh, data);\n }\n return data.found ? data.normal : null;\n}\n", "import { hit } from '../picking/hit.js';\r\n\r\nexport function blocked(east, north, feet) {\r\n const length = Math.hypot(east, north);\r\n return length > 1e-6 && hit(this.layer, feet[0], feet[1], feet[2], east / length, -north / length, length + 0.3, this.hitData);\r\n}\r\n", "export function stepWalkerHeight(dt) {\r\n if (this.keys.has('Space')) {\r\n this.verticalSpeed = 6;\r\n this.state.height += this.verticalSpeed * dt;\r\n return true;\r\n }\r\n if (!this.verticalSpeed && !this.state.height) return false;\r\n this.state.height = Math.max(0, this.state.height + this.verticalSpeed * dt - 9.81 * dt * dt / 2);\r\n this.verticalSpeed = this.state.height > 0 ? this.verticalSpeed - 9.81 * dt : 0;\r\n return true;\r\n}\r\n", "import { degrees } from '../globals/degrees.js';\r\nimport { radians } from '../globals/radians.js';\r\nimport { mapGetBearing } from '../camera/mapGetBearing.js';\r\nimport { mapSetPitchAndBearing } from '../camera/mapSetPitchAndBearing.js';\r\nimport { mapGetPitch } from '../camera/mapGetPitch.js';\r\nimport { wrap } from '../utils/wrap.js';\r\n\r\nexport function updateWalkerView(forward, turn, dt) {\r\n const map = this.layer._map;\r\n if (forward || turn) {\r\n // Swing the camera behind the walker.\r\n const bearing = mapGetBearing(map) * radians, behind = wrap(-this.state.heading - bearing);\r\n if (Math.abs(behind) > 1e-3) mapSetPitchAndBearing(map, mapGetPitch(map), (bearing + behind * Math.min(1, dt * 4)) * degrees);\r\n map.setView(this.state.latlng, map.getZoom(), /* alloc */ { animate: false });\r\n }\r\n const target = forward ? 0.9 : 0;\r\n if (Math.abs(this.swing - target) > 1e-3) {\r\n this.swing += (target - this.swing) * Math.min(1, dt * 10);\r\n return true;\r\n }\r\n return false;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { limbs } from '../globals/limbs.js';\nimport { parts } from '../globals/parts.js';\nimport { moves } from '../globals/moves.js';\n\n\nimport * as createMesh from '../rendering/createMesh.js';\nimport { build } from '../geometry/build.js';\n\nimport { wrap } from '../utils/wrap.js';\nimport { local } from './local.js';\nimport { place } from './place.js';\nimport { land } from './land.js';\nimport { moveWalker } from './moveWalker.js';\nimport { stepWalkerHeight } from './stepWalkerHeight.js';\nimport { updateWalkerView } from './updateWalkerView.js';\n\nexport function step(now) {\n const layer = this.layer;\n this.frame = requestAnimationFrame(this.step);\n const dt = Math.min(0.1, (now - (this.last ?? now)) / 1000);\n this.last = now;\n if (!sceneByLayer.get(layer).renderer) return;\n let changed = false;\n let part, key;\n if (!this.meshes) {\n this.meshes = /* alloc */ [];\n for ([part] of limbs) this.meshes.push(createMesh.createMesh(layer, build(parts[part])));\n changed = true;\n }\n const previousY = sceneByLayer.get(layer).root.position[1] +\n local.call(this, this.local)[1] * sceneByLayer.get(layer).root.scale[1];\n if (stepWalkerHeight.call(this, dt)) changed = true;\n let forward = 0, turn = 0;\n for (key of this.keys) { forward += moves[key]?.[0] || 0; turn += moves[key]?.[1] || 0; }\n forward = Math.sign(forward); turn = Math.sign(turn);\n if (turn) { this.state.heading = wrap(this.state.heading + turn * 2.5 * dt); changed = true; }\n if (forward) {\n moveWalker.call(this, forward, dt);\n changed = true;\n }\n if (changed) land.call(this, previousY);\n if (updateWalkerView.call(this, forward, turn, dt)) changed = true;\n if (changed) place.call(this);\n}\n", "import { start } from './start.js';\nimport { stop } from './stop.js';\n\nexport function toggle() {\r\n if (this.saved) stop.call(this); else start.call(this);\r\n}\n", "import { walkByMap } from '../globals/walkByMap.js';\r\n\r\nexport function onAdd(map) {\r\n let state = walkByMap.get(map);\r\n if (state?.control && state.control !== this) {\r\n this._map = null;\r\n throw /* alloc */ new Error('Only one Walk control can be active per map');\r\n }\r\n if (!state) {\r\n state = /* alloc */ {\r\n control: null,\r\n hitData: /* alloc */ {\r\n x: 0, y: 0, z: 0, dx: 0, dz: 0, reach: 0, best: 0, found: false,\r\n seen: /* alloc */ new Set(),\r\n normal: /* alloc */ [0, 0],\r\n },\r\n local: /* alloc */ [0, 0, 0],\r\n };\r\n walkByMap.set(map, state);\r\n }\r\n state.control = this;\r\n state.local.fill(0);\r\n state.hitData.seen.clear();\r\n state.hitData.normal.fill(0);\r\n this._walk.hitData = state.hitData;\r\n this._walk.local = state.local;\r\n this._walk.layer.addTo(map);\r\n return this._walk.container;\r\n}\r\n", "import { walkByMap } from '../globals/walkByMap.js';\r\n\r\nexport function onRemove(map) {\r\n const state = walkByMap.get(map);\r\n if (state?.control !== this) return;\r\n this._walk.stop();\r\n this._walk.layer.remove();\r\n state.control = null;\r\n state.hitData.seen.clear();\r\n this._walk.hitData = null;\r\n this._walk.local = null;\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { closestMethods } from '../globals/closestMethods.js';\nimport { boundsMethods } from '../globals/boundsMethods.js';\nimport { gridInitializers } from '../globals/gridInitializers.js';\n\n\nimport { noOperation } from '../utils/noOperation.js';\nimport { emptyEvents } from '../scene/emptyEvents.js';\nimport { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\n\nimport { closestCameraLayerPoint } from './closestCameraLayerPoint.js';\nimport { cameraCircleBounds } from './cameraCircleBounds.js';\nimport { initializeGridContainer } from './initializeGridContainer.js';\nimport { updateGridOpacity } from './updateGridOpacity.js';\nimport { addRasterImage } from './addRasterImage.js';\nimport { redrawPath } from './redrawPath.js';\n\nexport function initializeNativeLayer() {\n if (this instanceof L.Polyline || this instanceof L.CircleMarker) {\n this.beforeAdd = this._updateBounds = noOperation;\n this.redraw = redrawPath;\n sceneByLayer.get(this).kind = 'path';\n if (this instanceof L.Polyline) {\n closestMethods.set(this, this.closestLayerPoint);\n this.closestLayerPoint = closestCameraLayerPoint;\n }\n if (this instanceof L.Circle) {\n boundsMethods.set(this, this.getBounds);\n this.getBounds = cameraCircleBounds;\n }\n } else if (this instanceof L.GridLayer) {\n gridInitializers.set(this, this._initContainer);\n this._initContainer = initializeGridContainer;\n this._updateOpacity = updateGridOpacity;\n } else if (this instanceof L.ImageOverlay && !(this instanceof L.VideoOverlay) && !(this instanceof L.SVGOverlay)) {\n sceneByLayer.get(this).kind = 'image';\n this._reset = refreshNativeLayerContract;\n }\n}\n", "export const closestMethods = new WeakMap();\n", "export const boundsMethods = new WeakMap();\n", "export const gridInitializers = new WeakMap();\n", "export function emptyEvents() {\n return /* alloc */ {};\n}\n", "import { closestMethods } from '../globals/closestMethods.js';\n\n\nexport function closestCameraLayerPoint(point) {\n this._project();\n this._parts = this._rings;\n return closestMethods.get(this).call(this, point);\n}\n", "import { boundsMethods } from '../globals/boundsMethods.js';\n\n\nexport function cameraCircleBounds() {\n this._project();\n return boundsMethods.get(this).call(this);\n}\n", "import { gridInitializers } from '../globals/gridInitializers.js';\n\n\nexport function initializeGridContainer() {\n gridInitializers.get(this).call(this);\n this._container.remove();\n}\n", "export const pendingGridFades = new Map();\n", "export const gridFadeFrame = { value: null };\n", "import { pendingGridFades } from '../globals/pendingGridFades.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { gridFadeFrame } from '../globals/gridFadeFrame.js';\n\n\n\nexport function cancelGridFade(layer) {\n pendingGridFades.delete(layer);\n sceneByLayer.get(layer)._fadeFrame = null;\n if (!pendingGridFades.size && gridFadeFrame.value !== null) {\n cancelAnimationFrame(gridFadeFrame.value);\n gridFadeFrame.value = null;\n }\n}\n", "import { gridFadeFrame } from '../globals/gridFadeFrame.js';\nimport { pendingGridFades } from '../globals/pendingGridFades.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\n\nimport { updateGridOpacity } from './updateGridOpacity.js';\n\nexport function runGridFades() {\n gridFadeFrame.value = null;\n const layers = /* alloc */ [...pendingGridFades];\n let layer, version;\n for ([layer, version] of layers) {\n if (pendingGridFades.get(layer) !== version) continue;\n pendingGridFades.delete(layer);\n sceneByLayer.get(layer)._fadeFrame = null;\n updateGridOpacity.call(layer);\n }\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingGridFades } from '../globals/pendingGridFades.js';\nimport { gridFadeFrame } from '../globals/gridFadeFrame.js';\n\n\n\nimport { runGridFades } from './runGridFades.js';\n\nexport function scheduleGridFade(layer) {\n sceneByLayer.get(layer)._fadeVersion = (sceneByLayer.get(layer)._fadeVersion || 0) + 1;\n pendingGridFades.set(layer, sceneByLayer.get(layer)._fadeVersion);\n if (gridFadeFrame.value === null) gridFadeFrame.value = requestAnimationFrame(runGridFades);\n sceneByLayer.get(layer)._fadeFrame = gridFadeFrame.value;\n}\n", "\nimport { cancelGridFade } from './cancelGridFade.js';\nimport { scheduleGridFade } from './scheduleGridFade.js';\n\nexport function updateGridOpacity() {\n if (!this._map) return;\n const layer = this, now = Date.now();\n let fading = false, prune = false;\n let key, tile;\n for (key in this._tiles) {\n if (!Object.hasOwn(this._tiles, key)) continue;\n tile = this._tiles[key];\n if (!tile.current || !tile.loaded) continue;\n tile._gpuOpacity = this._map._fadeAnimated ? Math.min(1, (now - tile.loaded) / 200) : 1;\n if (tile._gpuOpacity < 1) fading = true;\n else if (!tile.active) {\n this._onOpaqueTile(tile);\n tile.active = true;\n prune = true;\n }\n }\n if (prune && !this._noPrune) this._pruneTiles();\n refreshNativeLayerContract(this);\n cancelGridFade(layer);\n if (fading) scheduleGridFade(layer);\n}\nimport { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\n", "export const pendingRasterLoads = [];\n", "import { pendingRasterLoads } from '../globals/pendingRasterLoads.js';\n\n\nexport function fireRasterLoad() {\n pendingRasterLoads.shift()?.fire('load');\n}\n", "import { pendingRasterLoads } from '../globals/pendingRasterLoads.js';\n\n\nimport { fireRasterLoad } from './fireRasterLoad.js';\n\nexport function addRasterImage() {\n if (!this._image) this._initImage();\n if (this._image.complete && this._image.naturalWidth) {\n pendingRasterLoads.push(this);\n queueMicrotask(fireRasterLoad);\n }\n}\n", "import { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\r\n\r\nexport function redrawPath() {\r\n refreshNativeLayerContract(this);\r\n return this;\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { layerProto } from '../globals/layerProto.js';\n\n\n\nimport { initNativeGPU } from '../core/initNativeGPU.js';\nimport { removeLayerEvents } from './removeLayerEvents.js';\nimport { addSceneLayer } from './addSceneLayer.js';\nimport { get3DEvents } from './get3DEvents.js';\nimport { getRasterEvents } from '../raster/getRasterEvents.js';\nimport { emptyEvents } from './emptyEvents.js';\nimport { isNativeLayer } from './isNativeLayer.js';\n\nexport function layerLayerAdd(event) {\n const native = isNativeLayer(this);\n if (native) {\n if (this instanceof L.GridLayer || this instanceof L.ImageOverlay) {\n this.options.crossOrigin ||= true;\n }\n if (this instanceof L.Marker) this.options.icon.options.crossOrigin ||= true;\n }\n const map = event.target, state = sceneByLayer.get(this);\n if (!map.hasLayer(this)) return;\n if (state.kind) {\n this._map = map;\n this._zoomAnimated = map._zoomAnimated;\n if (state.kind !== 'pending' && state.kind !== 'time') {\n state.events = state.kind === 'raster' ? getRasterEvents(this) :\n state._3d ? get3DEvents(this) : emptyEvents();\n state.eventMap = map;\n map.on(state.events, this);\n this.once('remove', removeLayerEvents, this);\n }\n addSceneLayer(this, map);\n this.fire('add');\n map.fire('layeradd', /* alloc */ { layer: this });\n } else {\n layerProto.value._layerAdd.call(this, event);\n }\n if (!native || !event.target.hasLayer(this)) return;\n initNativeGPU(this, event.target);\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\r\n\r\nexport function removeLayerEvents() {\r\n const state = sceneByLayer.get(this);\r\n state.eventMap.off(state.events, this);\r\n state.events = state.eventMap = null;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\r\nimport { onAdd3DLayer } from './onAdd3DLayer.js';\r\nimport { onPMTileAdd } from '../raster/onPMTileAdd.js';\r\nimport { onTerrainAdd } from '../terrain/onTerrainAdd.js';\r\nimport { addRasterImage } from '../core/addRasterImage.js';\r\nimport { addTimeLayer } from '../sunlight/addTimeLayer.js';\r\n\r\nexport function addSceneLayer(layer, map) {\r\n switch (sceneByLayer.get(layer).kind) {\r\n case '3d': return onAdd3DLayer(layer, map);\r\n case 'raster': return onPMTileAdd(layer, map);\r\n case 'terrain': return onTerrainAdd(layer, map);\r\n case 'image': return addRasterImage.call(layer, map);\r\n case 'time': return addTimeLayer.call(layer, map);\r\n }\r\n}\r\n", "import { L } from '../globals/L.js';\r\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\r\n\r\nexport function isNativeLayer(layer) {\r\n return !sceneByLayer.get(layer)._3d && (\r\n layer instanceof L.GridLayer ||\r\n layer instanceof L.Polyline ||\r\n layer instanceof L.CircleMarker ||\r\n layer instanceof L.Marker && !(layer.options.icon instanceof L.DivIcon) ||\r\n layer instanceof L.ImageOverlay && !(layer instanceof L.VideoOverlay) && !(layer instanceof L.SVGOverlay)\r\n );\r\n}\r\n", "import { L } from '../globals/L.js';\nimport { sceneEmptyOptions } from '../globals/sceneEmptyOptions.js';\nimport { layerProto } from '../globals/layerProto.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { pendingInitializations } from '../globals/pendingInitializations.js';\nimport { loading } from '../globals/loading.js';\n\n\n\nimport { init3D } from './init3D.js';\nimport { noOperation } from '../utils/noOperation.js';\nimport { resolveNextInitialization } from './resolveNextInitialization.js';\nimport { initializeLayer } from './initializeLayer.js';\n\nexport function layerInitialize(options = sceneEmptyOptions) {\n if (!sceneByLayer.has(this)) {\n sceneByLayer.set(this, /* alloc */ {});\n }\n if (Object.getPrototypeOf(this) !== L.Layer.prototype || !options?.source) {\n if (layerProto.value.initialize) return layerProto.value.initialize.apply(this, arguments);\n L.Util.setOptions(this, options);\n return;\n }\n const {\n source: {\n type = options.source.data?.type === 'FeatureCollection'\n ? 'geojson'\n : /\\.pmtiles(?:[?#]|$)/i.test(options.source.url) ? 'pmtiles'\n : /\\.tiff?(?:[?#]|$)/i.test(options.source.url) ? 'cog' : '3d',\n ...source\n },\n ...core\n } = options;\n const settings = /* alloc */ { ...source, ...core };\n L.Util.setOptions(this, core);\n sceneByLayer.get(this)._type = type;\n if (type === '3d') {\n init3D(this, settings);\n return;\n }\n sceneByLayer.get(this).kind = 'pending';\n const task = /* alloc */ { layer: this, type, settings, ready: null };\n pendingInitializations.push(task);\n loading.value = loading.value.catch(noOperation).then(resolveNextInitialization);\n const ready = sceneByLayer.get(this).ready = loading.value.then(initializeLayer);\n task.ready = ready;\n ready.catch(noOperation);\n}\n", "export const pendingInitializations = [];\n", "export const loading = { value: Promise.resolve() };\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\n\nimport { setGeoJSONLayerData } from './setGeoJSONLayerData.js';\nimport { init3D } from '../scene/init3D.js';\n\nexport function initializeGeoJSON(layer, options) {\n sceneByLayer.get(layer)._geojson = true;\n init3D(layer, options);\n}\n", "export function validateCogRange(source, offset, length) {\r\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) || offset < 0 ||\r\n length <= 0 || length > 32000000 || !Number.isSafeInteger(offset + length) ||\r\n source.size !== undefined && offset + length > source.size) {\r\n throw /* alloc */ new Error('Invalid COG byte range');\r\n }\r\n}\r\n", "export function validateCogContentRange(source, range, rangeStart, length) {\r\n if (!range || Number(range[1]) !== rangeStart || Number(range[2]) !== rangeStart + length - 1 ||\r\n !Number.isSafeInteger(Number(range[3])) || Number(range[3]) < rangeStart + length ||\r\n (source.containerSize ?? source.size) !== undefined &&\r\n (source.containerSize ?? source.size) !== Number(range[3])) {\r\n throw /* alloc */ new Error('Invalid COG range response');\r\n }\r\n}\r\n", "export function invalidCogFullResponse(response) {\r\n return response.status !== 200 || Number(response.headers.get('Content-Length')) > 32000000;\r\n}\r\n", "import { validateCogContentRange } from './validateCogContentRange.js';\r\nimport { invalidCogFullResponse } from './invalidCogFullResponse.js';\r\n\r\nexport function validateCogResponse(source, response, rangeStart, length) {\r\n const etag = response.headers.get('ETag');\r\n if (source.etag && source.etag !== etag) throw /* alloc */ new Error('COG changed; recreate the layer');\r\n if (etag) source.etag = etag;\r\n const range = /^bytes (\\d+)-(\\d+)\\/(\\d+)$/.exec(response.headers.get('Content-Range') || '');\r\n if (response.status === 206) {\r\n validateCogContentRange(source, range, rangeStart, length);\r\n if (source.baseOffset === undefined) source.size = Number(range[3]);\r\n } else if (invalidCogFullResponse(response)) {\r\n throw /* alloc */ new Error('COG server must support byte ranges for files over 32 MB');\r\n }\r\n}\r\n", "export async function readCogBody(response, length) {\r\n const reader = response.body.getReader(), chunks = /* alloc */ [];\r\n let total = 0, part;\r\n try {\r\n while (!(part = await reader.read()).done) {\r\n total += part.value.byteLength;\r\n if (total > (response.status === 206 ? length : 32000000)) {\r\n await reader.cancel();\r\n throw /* alloc */ new Error('Oversized COG response');\r\n }\r\n chunks.push(part.value);\r\n }\r\n } finally {\r\n reader.releaseLock();\r\n }\r\n const data = /* alloc */ new Uint8Array(total);\r\n let start = 0, chunk;\r\n for (chunk of chunks) { data.set(chunk, start); start += chunk.length; }\r\n return data;\r\n}\r\n", "import { validateCogRange } from './validateCogRange.js';\r\nimport { validateCogResponse } from './validateCogResponse.js';\r\nimport { readCogBody } from './readCogBody.js';\r\n\r\nexport async function readCog(source, offset, length, signal) {\r\n signal?.throwIfAborted();\r\n validateCogRange(source, offset, length);\r\n if (source.full) return source.full.slice(offset, offset + length);\r\n const rangeStart = (source.baseOffset || 0) + offset;\r\n const response = await fetch(source.url, /* alloc */ {\r\n headers: /* alloc */ { Range: `bytes=${rangeStart}-${rangeStart + length - 1}` }, signal,\r\n });\r\n if (!response.ok) throw /* alloc */ new Error(`Unable to read COG: HTTP ${response.status}`);\r\n validateCogResponse(source, response, rangeStart, length);\r\n const data = await readCogBody(response, length);\r\n if (response.status === 200) {\r\n if (source.baseOffset === undefined) source.size = data.byteLength;\r\n else if (data.byteLength !== source.containerSize) throw /* alloc */ new Error('Truncated PMTiles COG container');\r\n source.full = source.baseOffset === undefined ? data.buffer\r\n : data.slice(source.baseOffset, source.baseOffset + source.size);\r\n }\r\n const result = response.status === 200 ? source.full.slice(offset, offset + length) : data.buffer;\r\n if (result.byteLength !== length) throw /* alloc */ new Error('Truncated COG byte range');\r\n return result;\r\n}\r\n", "export const cogTags = [256, 257, 258, 259, 262, 277, 284, 317, 322, 323, 324, 325, 339, 33550, 33922, 34735];\r\n", "import { readCog } from './readCog.js';\r\n\r\nexport async function readCogTag(source, entries, i, tag, little) {\r\n const type = entries.getUint16(i * 12 + 2, little);\r\n const size = type === 3 ? 2 : type === 4 ? 4 : type === 12 ? 8 : 0;\r\n const length = entries.getUint32(i * 12 + 4, little);\r\n if (!size || !length || length > 1048576) throw /* alloc */ new Error(`Unsupported COG tag ${tag}`);\r\n const data = size * length <= 4 ? /* alloc */ new DataView(entries.buffer, i * 12 + 8, 4)\r\n : /* alloc */ new DataView(await readCog(source, entries.getUint32(i * 12 + 8, little), size * length));\r\n const values = /* alloc */ [];\r\n let j;\r\n for (j = 0; j < length; j++) values.push(type === 3 ? data.getUint16(j * size, little)\r\n : type === 4 ? data.getUint32(j * size, little) : data.getFloat64(j * size, little));\r\n return values;\r\n}\r\n", "import { readCog } from './readCog.js';\r\nimport { cogTags } from '../globals/cogTags.js';\r\nimport { readCogTag } from './readCogTag.js';\r\n\r\nexport async function readCogDirectory(source, offset) {\r\n const little = source.little;\r\n const count = /* alloc */ new DataView(await readCog(source, offset, 2)).getUint16(0, little);\r\n if (!count || count > 128) throw /* alloc */ new Error('Invalid COG directory size');\r\n const entries = /* alloc */ new DataView(await readCog(source, offset + 2, count * 12 + 4));\r\n const tags = /* alloc */ new Map();\r\n let i, tag;\r\n for (i = 0; i < count; i++) {\r\n tag = entries.getUint16(i * 12, little);\r\n if (tag === 42113) throw /* alloc */ new Error('COG nodata tags are not supported; export complete tiles');\r\n if (tag === 34264) throw /* alloc */ new Error('COG affine transformation matrices are not supported');\r\n if (!cogTags.includes(tag)) continue;\r\n if (tags.has(tag)) throw /* alloc */ new Error('Duplicate COG tag');\r\n tags.set(tag, await readCogTag(source, entries, i, tag, little));\r\n }\r\n return /* alloc */ { tags, next: entries.getUint32(count * 12, little) };\r\n}\r\n", "export function validCogDimensions(tags, width, height) {\r\n return !!width && !!height && width % 256 === 0 && height % 256 === 0 &&\r\n tags.get(322)?.[0] === 256 && tags.get(323)?.[0] === 256 &&\r\n (tags.get(259)?.[0] === 1 || tags.get(259)?.[0] === 8) &&\r\n (tags.get(284)?.[0] ?? 1) === 1 && (tags.get(317)?.[0] ?? 1) === 1;\r\n}\r\n", "export function validCogEncoding(tags, samples, bits, format, elevation, bytes, unsigned) {\r\n if (elevation) return tags.get(262)?.[0] === 1;\r\n return (samples === 3 || samples === 4) && bits?.length === samples && bytes && unsigned &&\r\n tags.get(262)?.[0] === 2;\r\n}\r\n", "import { validCogDimensions } from './validCogDimensions.js';\r\nimport { validCogEncoding } from './validCogEncoding.js';\r\n\r\nexport function getCogProfile(tags) {\r\n const width = tags.get(256)?.[0], height = tags.get(257)?.[0], samples = tags.get(277)?.[0] ?? 1;\r\n const bits = tags.get(258), format = tags.get(339) || /* alloc */ [1];\r\n let bytes = true, unsigned = true, floating = true, value;\r\n for (value of bits || /* alloc */ []) bytes &&= value === 8;\r\n for (value of format) { unsigned &&= value === 1; floating &&= value === 3; }\r\n const elevation = samples === 1 && bits?.length === 1 && bits[0] === 32 && floating;\r\n if (!validCogDimensions(tags, width, height) ||\r\n !validCogEncoding(tags, samples, bits, format, elevation, bytes, unsigned)) {\r\n throw /* alloc */ new Error('Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor');\r\n }\r\n return /* alloc */ { width, height, samples, elevation };\r\n}\r\n", "export function hasCogProjection(keys) {\r\n let projected = false, area = false, i;\r\n if (keys) for (i = 4; i < keys.length; i += 4) {\r\n if (keys[i + 1] !== 0 || keys[i + 2] !== 1) continue;\r\n if (keys[i] === 3072 && keys[i + 3] === 3857) projected = true;\r\n if (keys[i] === 1025 && keys[i + 3] === 1) area = true;\r\n }\r\n return projected && area;\r\n}\r\n", "export function finiteCogValues(values) {\r\n let value;\r\n for (value of values || /* alloc */ []) if (!Number.isFinite(value)) return false;\r\n return true;\r\n}\r\n", "import { finiteCogValues } from './finiteCogValues.js';\r\n\r\nexport function validCogGeoArrays(keys, scale, tie) {\r\n return !!keys && keys[0] === 1 && keys.length === 4 + keys[3] * 4 &&\r\n !!scale && scale.length === 3 && finiteCogValues(scale) &&\r\n scale[0] > 0 && Math.abs(scale[0] - scale[1]) <= 1e-8 &&\r\n !!tie && tie.length === 6 && finiteCogValues(tie) && tie[0] === 0 && tie[1] === 0;\r\n}\r\n", "import { hasCogProjection } from './hasCogProjection.js';\r\nimport { validCogGeoArrays } from './validCogGeoArrays.js';\r\n\r\nexport function getCogBase(tags, width, height, elevation) {\r\n const keys = tags.get(34735), scale = tags.get(33550), tie = tags.get(33922);\r\n if (!validCogGeoArrays(keys, scale, tie) || !hasCogProjection(keys)) {\r\n throw /* alloc */ new Error('COG must use north-up EPSG:3857 PixelIsArea georeferencing');\r\n }\r\n return /* alloc */ { width, height, resolution: scale[0], left: tie[3], top: tie[4], elevation };\r\n}\r\n", "export function validCogGrid(source, base, profile, zoom, x, y, resolution) {\r\n return zoom >= 0 && zoom <= 24 &&\r\n Math.abs(20037508.342789244 * 2 / (256 * 2 ** zoom) - resolution) <= resolution * 1e-7 &&\r\n (!profile.elevation || Number.isInteger(x) && Number.isInteger(y)) &&\r\n Math.abs(base.width / profile.width - base.height / profile.height) <= 1e-7 &&\r\n profile.elevation === base.elevation &&\r\n x >= 0 && y >= 0 && x + profile.width / 256 <= 2 ** zoom && y + profile.height / 256 <= 2 ** zoom &&\r\n !source.levels.has(zoom) && !(base.elevation && source.levels.size);\r\n}\r\n", "export function validateCogOffsets(source, level) {\r\n if (level.offsets?.length !== level.columns * level.rows || level.lengths?.length !== level.offsets.length) {\r\n throw /* alloc */ new Error('Invalid COG tile offsets or lengths');\r\n }\r\n let i;\r\n for (i = 0; i < level.offsets.length; i++) {\r\n if (!level.offsets[i] || !level.lengths[i] || level.lengths[i] > 1048576 ||\r\n level.offsets[i] + level.lengths[i] > source.size) throw /* alloc */ new Error('Invalid COG tile offsets or lengths');\r\n }\r\n}\r\n", "import { getCogProfile } from './getCogProfile.js';\r\nimport { getCogBase } from './getCogBase.js';\r\nimport { validCogGrid } from './validCogGrid.js';\r\nimport { validateCogOffsets } from './validateCogOffsets.js';\r\n\r\nexport function readCogLevel(source, directory, state) {\r\n const tags = directory.tags, profile = getCogProfile(tags);\r\n if (!state.base) state.base = getCogBase(tags, profile.width, profile.height, profile.elevation);\r\n const base = state.base, resolution = base.resolution * base.width / profile.width;\r\n const zoom = Math.round(Math.log2(20037508.342789244 * 2 / (256 * resolution)));\r\n const span = 20037508.342789244 * 2 / 2 ** zoom;\r\n let x = (base.left + 20037508.342789244) / span;\r\n let y = (20037508.342789244 - base.top) / span;\r\n if (Math.abs(x - Math.round(x)) < 1e-6) x = Math.round(x);\r\n if (Math.abs(y - Math.round(y)) < 1e-6) y = Math.round(y);\r\n if (!validCogGrid(source, base, profile, zoom, x, y, resolution)) {\r\n throw /* alloc */ new Error('COG levels must align with the Web Mercator XYZ tile grid');\r\n }\r\n const level = /* alloc */ {\r\n x, y, columns: profile.width / 256, rows: profile.height / 256, samples: profile.samples,\r\n elevation: profile.elevation, compression: tags.get(259)[0], offsets: tags.get(324), lengths: tags.get(325),\r\n };\r\n validateCogOffsets(source, level);\r\n source.levels.set(zoom, level);\r\n state.minZoom = Math.min(state.minZoom, zoom);\r\n state.maxZoom = Math.max(state.maxZoom, zoom);\r\n}\r\n", "import { readCogDirectory } from './readCogDirectory.js';\r\nimport { readCogLevel } from './readCogLevel.js';\r\n\r\nexport async function readCogDirectories(source, offset) {\r\n const state = /* alloc */ { base: null, minZoom: Infinity, maxZoom: -Infinity };\r\n const seen = /* alloc */ new Set();\r\n let directory;\r\n while (offset) {\r\n if (seen.has(offset) || seen.size >= 24) throw /* alloc */ new Error('Cyclic or excessive COG directories');\r\n seen.add(offset);\r\n directory = await readCogDirectory(source, offset);\r\n readCogLevel(source, directory, state);\r\n offset = directory.next;\r\n }\r\n if (!state.base) throw /* alloc */ new Error('COG has no image directory');\r\n if (source.levels.size !== state.maxZoom - state.minZoom + 1) {\r\n throw /* alloc */ new Error('COG overview zooms must be contiguous');\r\n }\r\n return /* alloc */ { base: state.base, minZoom: state.minZoom, maxZoom: state.maxZoom };\r\n}\r\n", "export async function decodeCogTile(data, length, compression) {\r\n if (compression === 1) {\r\n if (data.byteLength !== length) throw /* alloc */ new Error('Invalid uncompressed COG tile size');\r\n return data;\r\n }\r\n const stream = /* alloc */ new Blob(/* alloc */ [data]).stream()\r\n .pipeThrough(/* alloc */ new DecompressionStream('deflate'));\r\n const reader = stream.getReader(), result = /* alloc */ new Uint8Array(length);\r\n let offset = 0, chunk;\r\n try {\r\n while (!(chunk = await reader.read()).done) {\r\n if (offset + chunk.value.length > length) {\r\n await reader.cancel();\r\n throw /* alloc */ new Error('Oversized decoded COG tile');\r\n }\r\n result.set(chunk.value, offset);\r\n offset += chunk.value.length;\r\n }\r\n } finally {\r\n reader.releaseLock();\r\n }\r\n if (offset !== length) throw /* alloc */ new Error('Truncated decoded COG tile');\r\n return result.buffer;\r\n}\r\n", "import { readCog } from './readCog.js';\r\nimport { decodeCogTile } from './decodeCogTile.js';\r\n\r\nexport async function readCogBlock(source, level, x, y, signal) {\r\n const index = y * level.columns + x;\r\n return decodeCogTile(await readCog(source, level.offsets[index], level.lengths[index], signal),\r\n 256 * 256 * (level.elevation ? 4 : level.samples), level.compression);\r\n}\r\n", "import { readCogBlock } from './readCogBlock.js';\r\n\r\nexport async function getElevationTile(source, level, x, y, signal) {\r\n const data = await readCogBlock(source, level, x - level.x, y - level.y, signal);\r\n signal?.throwIfAborted();\r\n const view = /* alloc */ new DataView(data), heights = /* alloc */ new Float32Array(256 * 256);\r\n let i, height;\r\n for (i = 0; i < heights.length; i++) {\r\n height = view.getFloat32(i * 4, source.little);\r\n if (!Number.isFinite(height) || height < -12000 || height > 10000) {\r\n throw /* alloc */ new Error('Invalid or missing COG elevation sample');\r\n }\r\n heights[i] = height;\r\n }\r\n return /* alloc */ { data: heights.buffer };\r\n}\r\n", "import { readCogBlock } from './readCogBlock.js';\r\n\r\nexport async function getColorTile(source, level, x, y, signal) {\r\n const canvas = /* alloc */ new OffscreenCanvas(256, 256), context = canvas.getContext('2d');\r\n if (!context) throw /* alloc */ new Error('Unable to create COG tile canvas');\r\n const left = (x - level.x) * 256, top = (y - level.y) * 256;\r\n let bx, by, pixels, rgba, i, j, bitmap;\r\n for (by = Math.max(0, Math.floor(top / 256)); by < Math.min(level.rows, Math.ceil(top / 256 + 1)); by++) {\r\n for (bx = Math.max(0, Math.floor(left / 256)); bx < Math.min(level.columns, Math.ceil(left / 256 + 1)); bx++) {\r\n pixels = /* alloc */ new Uint8Array(await readCogBlock(source, level, bx, by, signal));\r\n signal?.throwIfAborted();\r\n rgba = /* alloc */ new Uint8ClampedArray(256 * 256 * 4);\r\n for (i = 0, j = 0; i < pixels.length; i += level.samples, j += 4) {\r\n rgba[j] = pixels[i]; rgba[j + 1] = pixels[i + 1]; rgba[j + 2] = pixels[i + 2];\r\n rgba[j + 3] = level.samples === 4 ? pixels[i + 3] : 255;\r\n }\r\n bitmap = await createImageBitmap(/* alloc */ new ImageData(rgba, 256, 256));\r\n context.drawImage(bitmap, bx * 256 - left, by * 256 - top);\r\n bitmap.close();\r\n }\r\n }\r\n const image = canvas.transferToImageBitmap();\r\n if (signal?.aborted) { image.close(); signal.throwIfAborted(); }\r\n return /* alloc */ { image };\r\n}\r\n", "export function validCogTileCoordinates(z, x, y) {\r\n return Number.isSafeInteger(z) && Number.isSafeInteger(x) && Number.isSafeInteger(y) &&\r\n z >= 0 && z <= 24 && x >= 0 && y >= 0 && x < 2 ** z && y < 2 ** z;\r\n}\r\n", "import { getElevationTile } from './getElevationTile.js';\r\nimport { getColorTile } from './getColorTile.js';\r\nimport { validCogTileCoordinates } from './validCogTileCoordinates.js';\r\n\r\nexport async function getCogTile(source, z, x, y, signal) {\r\n signal?.throwIfAborted();\r\n if (!validCogTileCoordinates(z, x, y)) throw /* alloc */ new Error('Invalid COG tile coordinates');\r\n const level = source.levels.get(z);\r\n if (!level || x + 1 <= level.x || y + 1 <= level.y || x >= level.x + level.columns || y >= level.y + level.rows) return;\r\n if (level.elevation) return getElevationTile(source, level, x, y, signal);\r\n return getColorTile(source, level, x, y, signal);\r\n}\r\n", "export function getCogHeader(source) {\r\n return source.header;\r\n}\r\n", "export function validateCogContainer(container, header) {\r\n if (header.tileType !== 0 || header.tileCompression !== 1 ||\r\n !Number.isSafeInteger(header.jsonMetadataOffset) || !Number.isSafeInteger(header.jsonMetadataLength) ||\r\n header.jsonMetadataLength <= 0 || header.jsonMetadataLength > 1048576 ||\r\n !Number.isSafeInteger(header.tileDataOffset) || !Number.isSafeInteger(header.tileDataLength) ||\r\n header.tileDataOffset < 127 || header.tileDataOffset + header.tileDataLength > container.size) {\r\n throw /* alloc */ new Error('Invalid PMTiles COG asset container');\r\n }\r\n}\r\n", "import { decompress } from '../archives/decompress.js';\r\nimport { readCog } from './readCog.js';\r\n\r\nexport async function getCogAssetEntry(container, header, asset) {\r\n const metadata = JSON.parse(/* alloc */ new TextDecoder().decode(await decompress(\r\n await readCog(container, header.jsonMetadataOffset, header.jsonMetadataLength), header.internalCompression)));\r\n const assets = metadata.cog_assets || /* alloc */ {};\r\n const entry = Object.hasOwn(assets, asset) ? metadata.cog_assets[asset] : null;\r\n if (metadata.format !== 'cog-assets-v1' || !entry || !Number.isSafeInteger(entry.offset) ||\r\n !Number.isSafeInteger(entry.length) || entry.offset < 0 || entry.length < 8 ||\r\n entry.offset + entry.length > header.tileDataLength) {\r\n throw /* alloc */ new Error(`Invalid or missing PMTiles COG asset: ${asset}`);\r\n }\r\n return entry;\r\n}\r\n", "import { decodeHeader } from '../archives/decodeHeader.js';\r\nimport { readCog } from './readCog.js';\r\nimport { validateCogContainer } from './validateCogContainer.js';\r\nimport { getCogAssetEntry } from './getCogAssetEntry.js';\r\n\r\nexport async function openCogAsset(url, asset) {\r\n const container = /* alloc */ { url };\r\n const header = decodeHeader(await readCog(container, 0, 127));\r\n validateCogContainer(container, header);\r\n const entry = await getCogAssetEntry(container, header, asset);\r\n const baseOffset = header.tileDataOffset + entry.offset;\r\n return /* alloc */ { url, baseOffset, size: entry.length, containerSize: container.size,\r\n etag: container.etag, full: container.full?.slice(baseOffset, baseOffset + entry.length) };\r\n}\r\n", "import { readCog } from './readCog.js';\r\nimport { readCogDirectories } from './readCogDirectories.js';\r\nimport { getCogTile } from './getCogTile.js';\r\nimport { getCogHeader } from './getCogHeader.js';\r\nimport { openCogAsset } from './openCogAsset.js';\r\n\r\n/** EPSG:3857 COGs, standalone or named assets in a PMTiles container. */\r\nexport async function openCog(url, asset) {\r\n const source = asset === undefined ? /* alloc */ { url } : await openCogAsset(url, asset);\r\n source.levels = /* alloc */ new Map();\r\n const header = /* alloc */ new DataView(await readCog(source, 0, 8));\r\n const order = header.getUint16(0);\r\n if (order !== 0x4949 && order !== 0x4d4d) throw /* alloc */ new Error('Invalid TIFF byte order');\r\n source.little = order === 0x4949;\r\n if (header.getUint16(2, source.little) !== 42) throw /* alloc */ new Error('Expected classic TIFF (BigTIFF is not supported)');\r\n const { base, minZoom, maxZoom } = await readCogDirectories(source, header.getUint32(4, source.little));\r\n const half = 20037508.342789244;\r\n const left = base.left + base.resolution / 2, right = base.left + (base.width - 0.5) * base.resolution;\r\n const top = base.top - base.resolution / 2, bottom = base.top - (base.height - 0.5) * base.resolution;\r\n source.header = /* alloc */ {\r\n minZoom, maxZoom, tileType: base.elevation ? 0 : 2,\r\n minLon: left / half * 180, maxLon: right / half * 180,\r\n minLat: Math.atan(Math.sinh(bottom / half * Math.PI)) * 180 / Math.PI,\r\n maxLat: Math.atan(Math.sinh(top / half * Math.PI)) * 180 / Math.PI,\r\n };\r\n return /* alloc */ {\r\n getHeader: getCogHeader.bind(null, source),\r\n getZxy: getCogTile.bind(null, source),\r\n };\r\n}\r\n", "import { initRaster } from '../raster/initRaster.js';\r\nimport { openCog } from './openCog.js';\r\n\r\nexport function initCog(layer, options) {\r\n initRaster(layer, /* alloc */ { ariaLabel: 'COG raster', ...options,\r\n archive: options.archive || openCog(/* alloc */ new URL(options.url, document.baseURI).href, options.asset) });\r\n}\r\n", "import { initializeGeoJSON } from '../sources/initializeGeoJSON.js';\nimport { initRaster } from '../raster/initRaster.js';\nimport { initTerrain } from '../terrain/initTerrain.js';\nimport { initTraffic } from '../traffic/initTraffic.js';\nimport { initCog } from '../cog/initCog.js';\n\nexport function initializerFor(type) {\n switch (type) {\n case 'geojson': return initializeGeoJSON;\n case 'pmtiles': return initRaster;\n case 'cog': return initCog;\n case 'terrain': return initTerrain;\n case 'traffic': return initTraffic;\n default: return null;\n }\n}\n", "import { pendingInitializations } from '../globals/pendingInitializations.js';\n\n\nimport { initializerFor } from './initializerFor.js';\n\nexport function resolveNextInitialization() {\n const task = pendingInitializations.shift();\n task.initialize = initializerFor(task.type);\n if (!task.initialize) {\n task.error = /* alloc */ new Error(`Unknown layer type: ${task.type}`);\n }\n return task;\n}\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { reportError } from './reportError.js';\n\n\nexport function initializeLayer(task) {\n const { layer, ready } = task;\n if (task.error) {\n reportError(layer, task.error);\n return Promise.reject(task.error);\n }\n try {\n const map = layer._map;\n map?.removeLayer(layer);\n delete sceneByLayer.get(layer).kind;\n task.initialize(layer, task.settings);\n map?.addLayer(layer);\n return sceneByLayer.get(layer).ready === ready ? layer : sceneByLayer.get(layer).ready;\n } catch (error) {\n layer.fire('error', /* alloc */ { error });\n throw error;\n }\n}\n", "import { L } from '../globals/L.js';\nimport { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { removeLayer as sharedRemoveLayer } from '../globals/removeLayer.js';\n\r\nimport { removeSceneLayer } from '../scene/removeSceneLayer.js';\r\n\r\n\r\n\r\nexport function removeLayer(layer) {\r\n const id = L.Util.stamp(layer);\r\n if (!this._layers[id]) return this;\r\n const state = sceneByLayer.get(layer);\r\n if (!state.kind) return sharedRemoveLayer.value.call(this, layer);\r\n if (this._loaded) removeSceneLayer(layer, this);\r\n delete this._layers[id];\r\n if (this._loaded) {\r\n this.fire('layerremove', /* alloc */ { layer });\r\n layer.fire('remove');\r\n }\r\n layer._map = layer._mapToAdd = null;\r\n return this;\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\n\r\nimport { onRemove3DLayer } from './onRemove3DLayer.js';\r\nimport { onPMTileRemove } from '../raster/onPMTileRemove.js';\r\nimport { onTerrainRemove } from '../terrain/onTerrainRemove.js';\r\nimport { removeTimeLayer } from '../sunlight/removeTimeLayer.js';\r\n\r\nexport function removeSceneLayer(layer, map) {\r\n switch (sceneByLayer.get(layer).kind) {\r\n case '3d': return onRemove3DLayer(layer, map);\r\n case 'raster': return onPMTileRemove(layer, map);\r\n case 'terrain': return onTerrainRemove(layer, map);\r\n case 'time': return removeTimeLayer.call(layer, map);\r\n }\r\n}\r\n", "import { mapGetPitch } from './mapGetPitch.js';\r\n\r\nexport function getPitch() {\r\n return mapGetPitch(this);\r\n}\r\n", "import { mapGetBearing } from './mapGetBearing.js';\r\n\r\nexport function getBearing() {\r\n return mapGetBearing(this);\r\n}\r\n", "import { refreshNativeLayerContract } from './refreshNativeLayerContract.js';\r\n\r\nexport function markerSetRotation(marker, rotation) {\r\n if (!Number.isFinite(rotation)) throw /* alloc */ new TypeError('Marker rotation must be finite');\r\n marker.options.rotation = rotation;\r\n marker.update();\r\n refreshNativeLayerContract(marker);\r\n return marker;\r\n}\r\n", "import { markerSetRotation } from './markerSetRotation.js';\r\n\r\nexport function setRotation(rotation) {\r\n return markerSetRotation(this, rotation);\r\n}\r\n", "import { sceneByLayer } from '../globals/sceneByLayer.js';\nimport { layerCallInitHooks as sharedLayerCallInitHooks } from '../globals/layerCallInitHooks.js';\n\r\n\r\nimport { initializeNativeLayer } from './initializeNativeLayer.js';\r\n\r\nexport function layerCallInitHooks() {\r\n if (!sceneByLayer.has(this)) {\r\n sceneByLayer.set(this, /* alloc */ {});\r\n }\r\n const initialized = this._initHooksCalled;\r\n sharedLayerCallInitHooks.value.call(this);\r\n if (!initialized) initializeNativeLayer.call(this);\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["L", "init_L", "__esmMin", "cameraByMap", "init_cameraByMap", "__esmMin", "radians", "init_radians", "__esmMin", "degrees", "init_degrees", "__esmMin", "mapGetPitch", "map", "cameraByMap", "init_mapGetPitch", "__esmMin", "init_cameraByMap", "mapGetBearing", "map", "cameraByMap", "init_mapGetBearing", "__esmMin", "init_cameraByMap", "cameraEmptyOptions", "init_cameraEmptyOptions", "__esmMin", "updateSky", "height", "pitch", "mapGetPitch", "radians", "far", "distance", "top", "cameraByMap", "L", "init_updateSky", "__esmMin", "init_L", "init_radians", "init_cameraByMap", "init_mapGetPitch", "mapSetPitchAndBearing", "map", "pitch", "bearing", "previousPitch", "mapGetPitch", "previousBearing", "mapGetBearing", "cameraByMap", "updateSky", "init_mapSetPitchAndBearing", "__esmMin", "init_cameraByMap", "init_mapGetPitch", "init_mapGetBearing", "init_updateSky", "cameraAnimations", "init_cameraAnimations", "__esmMin", "cameraAnimationFrame", "init_cameraAnimationFrame", "__esmMin", "cancelCameraAnimation", "map", "cameraAnimations", "cameraByMap", "cameraAnimationFrame", "init_cancelCameraAnimation", "__esmMin", "init_cameraAnimations", "init_cameraByMap", "init_cameraAnimationFrame", "Compass", "init_Compass", "__esmMin", "ContainerResize", "init_ContainerResize", "__esmMin", "PitchDrag", "init_PitchDrag", "__esmMin", "ShiftRotate", "init_ShiftRotate", "__esmMin", "TouchMode", "init_TouchMode", "__esmMin", "touchByContainer", "init_touchByContainer", "__esmMin", "cameraTouchStates", "init_cameraTouchStates", "__esmMin", "cameraListenerOptions", "init_cameraListenerOptions", "__esmMin", "notifyCameraTouchChange", "init_notifyCameraTouchChange", "__esmMin", "cameraDragSensitivity", "init_cameraDragSensitivity", "__esmMin", "cameraBearingSensitivity", "init_cameraBearingSensitivity", "__esmMin", "cameraFocusOptions", "init_cameraFocusOptions", "__esmMin", "cameraAnimatedOptions", "init_cameraAnimatedOptions", "__esmMin", "runCameraAnimations", "now", "cameraAnimationFrame", "pending", "cameraAnimations", "failure", "map", "animation", "progress", "eased", "cameraByMap", "mapSetPitchAndBearing", "scheduleCameraAnimation", "error", "init_runCameraAnimations", "__esmMin", "init_cameraAnimationFrame", "init_cameraAnimations", "init_cameraByMap", "init_mapSetPitchAndBearing", "init_scheduleCameraAnimation", "scheduleCameraAnimation", "map", "animation", "cameraAnimations", "cameraAnimationFrame", "runCameraAnimations", "cameraByMap", "init_scheduleCameraAnimation", "__esmMin", "init_cameraAnimations", "init_cameraAnimationFrame", "init_cameraByMap", "init_runCameraAnimations", "mapAnimateCamera", "map", "pitch", "bearing", "options", "cameraEmptyOptions", "cancelCameraAnimation", "mapSetPitchAndBearing", "duration", "start", "fromPitch", "mapGetPitch", "fromBearing", "mapGetBearing", "delta", "animation", "cameraByMap", "scheduleCameraAnimation", "init_mapAnimateCamera", "__esmMin", "init_cameraEmptyOptions", "init_cameraByMap", "init_mapSetPitchAndBearing", "init_mapGetPitch", "init_mapGetBearing", "init_cancelCameraAnimation", "init_scheduleCameraAnimation", "mapResetNorthPitch", "map", "options", "cameraAnimatedOptions", "mapAnimateCamera", "init_mapResetNorthPitch", "__esmMin", "init_cameraAnimatedOptions", "init_mapAnimateCamera", "mapSetBearing", "map", "bearing", "options", "mapAnimateCamera", "mapGetPitch", "init_mapSetBearing", "__esmMin", "init_mapAnimateCamera", "init_mapGetPitch", "mapResetNorth", "map", "options", "cameraAnimatedOptions", "mapSetBearing", "init_mapResetNorth", "__esmMin", "init_cameraAnimatedOptions", "init_mapSetBearing", "rotateButtonClick", "event", "control", "map", "mapResetNorthPitch", "mapResetNorth", "cameraFocusOptions", "init_rotateButtonClick", "__esmMin", "init_cameraFocusOptions", "init_mapResetNorthPitch", "init_mapResetNorth", "mapSetPitch", "map", "pitch", "options", "mapAnimateCamera", "mapGetBearing", "init_mapSetPitch", "__esmMin", "init_mapAnimateCamera", "init_mapGetBearing", "rotateButtonKeydown", "event", "control", "map", "step", "mapSetBearing", "mapGetBearing", "mapSetPitch", "mapGetPitch", "init_rotateButtonKeydown", "__esmMin", "init_mapSetBearing", "init_mapGetBearing", "init_mapSetPitch", "init_mapGetPitch", "refreshRotateControl", "map", "pitch", "mapGetPitch", "radians", "mapGetBearing", "init_refreshRotateControl", "__esmMin", "init_radians", "init_mapGetPitch", "init_mapGetBearing", "dragStates", "init_dragStates", "__esmMin", "cameraDrags", "init_cameraDrags", "__esmMin", "editable", "target", "init_editable", "__esmMin", "cameraDragDown", "event", "state", "dragStates", "editable", "rect", "cameraFocusOptions", "init_cameraDragDown", "__esmMin", "init_dragStates", "init_cameraFocusOptions", "init_editable", "mapStopPitchBearingAnimation", "map", "cancelCameraAnimation", "init_mapStopPitchBearingAnimation", "__esmMin", "init_cancelCameraAnimation", "cameraDragMove", "event", "state", "dragStates", "x", "y", "mapStopPitchBearingAnimation", "bearing", "angle", "degrees", "mapSetPitchAndBearing", "mapGetPitch", "mapGetBearing", "init_cameraDragMove", "__esmMin", "init_degrees", "init_dragStates", "init_mapStopPitchBearingAnimation", "init_mapSetPitchAndBearing", "init_mapGetPitch", "init_mapGetBearing", "finishCameraDrag", "state", "event", "finished", "init_finishCameraDrag", "__esmMin", "cameraDragEnd", "event", "finishCameraDrag", "dragStates", "init_cameraDragEnd", "__esmMin", "init_dragStates", "init_finishCameraDrag", "cameraDragClick", "event", "state", "dragStates", "init_cameraDragClick", "__esmMin", "init_dragStates", "cameraDragContextMenu", "event", "state", "dragStates", "init_cameraDragContextMenu", "__esmMin", "init_dragStates", "endAllCameraDrags", "state", "cameraDrags", "finishCameraDrag", "init_endAllCameraDrags", "__esmMin", "init_cameraDrags", "init_finishCameraDrag", "dragCamera", "map", "element", "accept", "sensitivity", "cameraDragSensitivity", "orbit", "state", "dragStates", "cameraDrags", "cameraDragDown", "cameraDragMove", "cameraDragEnd", "cameraDragClick", "cameraDragContextMenu", "endAllCameraDrags", "init_dragCamera", "__esmMin", "init_cameraDragSensitivity", "init_dragStates", "init_cameraDrags", "init_cameraDragDown", "init_cameraDragMove", "init_cameraDragEnd", "init_cameraDragClick", "init_cameraDragContextMenu", "init_endAllCameraDrags", "acceptRotateDrag", "event", "init_acceptRotateDrag", "__esmMin", "refreshRotateFocus", "refreshRotateControl", "init_refreshRotateFocus", "__esmMin", "init_refreshRotateControl", "rotateOnAdd", "map", "container", "L", "button", "arrow", "rotateButtonClick", "rotateButtonKeydown", "refreshRotateControl", "dragCamera", "acceptRotateDrag", "cameraDragSensitivity", "cameraBearingSensitivity", "refreshRotateFocus", "init_rotateOnAdd", "__esmMin", "init_L", "init_cameraDragSensitivity", "init_cameraBearingSensitivity", "init_rotateButtonClick", "init_rotateButtonKeydown", "init_refreshRotateControl", "init_dragCamera", "init_acceptRotateDrag", "init_refreshRotateFocus", "removeCameraDrag", "state", "finishCameraDrag", "element", "cameraDragDown", "cameraDragMove", "cameraDragEnd", "cameraDragClick", "cameraDragContextMenu", "dragStates", "cameraDrags", "endAllCameraDrags", "init_removeCameraDrag", "__esmMin", "init_dragStates", "init_cameraDrags", "init_finishCameraDrag", "init_cameraDragDown", "init_cameraDragMove", "init_cameraDragEnd", "init_cameraDragClick", "init_cameraDragContextMenu", "init_endAllCameraDrags", "pitchDragRemoveHooks", "removeCameraDrag", "init_pitchDragRemoveHooks", "__esmMin", "init_removeCameraDrag", "rotateOnRemove", "map", "pitchDragRemoveHooks", "init_rotateOnRemove", "__esmMin", "init_pitchDragRemoveHooks", "rotateControl", "options", "L", "init_rotateControl", "__esmMin", "init_L", "shiftRotateWheel", "event", "handler", "editable", "mapSetBearing", "mapGetBearing", "init_shiftRotateWheel", "__esmMin", "init_mapSetBearing", "init_mapGetBearing", "init_editable", "shiftRotateAddHooks", "container", "shiftRotateWheel", "cameraListenerOptions", "init_shiftRotateAddHooks", "__esmMin", "init_cameraListenerOptions", "init_shiftRotateWheel", "shiftRotateRemoveHooks", "container", "init_shiftRotateRemoveHooks", "__esmMin", "acceptPitchDrag", "event", "init_acceptPitchDrag", "__esmMin", "pitchDragAddHooks", "dragCamera", "acceptPitchDrag", "cameraDragSensitivity", "init_pitchDragAddHooks", "__esmMin", "init_cameraDragSensitivity", "init_dragCamera", "init_acceptPitchDrag", "compassOrientation", "event", "handler", "bearing", "orientation", "mapSetBearing", "init_compassOrientation", "__esmMin", "init_mapSetBearing", "failCompassPermission", "handler", "error", "init_failCompassPermission", "__esmMin", "finishCompassPermission", "handlerResult", "permissionResult", "handler", "generation", "failCompassPermission", "error", "init_finishCompassPermission", "__esmMin", "init_failCompassPermission", "compassAddHooks", "compassOrientation", "permission", "request", "error", "finishCompassPermission", "init_compassAddHooks", "__esmMin", "init_compassOrientation", "init_finishCompassPermission", "compassRemoveHooks", "init_compassRemoveHooks", "__esmMin", "resizeMap", "entries", "init_resizeMap", "__esmMin", "containerResizeAddHooks", "container", "resizeMap", "init_containerResizeAddHooks", "__esmMin", "init_resizeMap", "containerResizeRemoveHooks", "container", "init_containerResizeRemoveHooks", "__esmMin", "startCameraTouch", "event", "state", "touchByContainer", "map", "container", "cameraByMap", "a", "b", "mapStopPitchBearingAnimation", "rect", "middle", "L", "mapGetBearing", "mapGetPitch", "init_startCameraTouch", "__esmMin", "init_L", "init_touchByContainer", "init_cameraByMap", "init_mapStopPitchBearingAnimation", "init_mapGetBearing", "init_mapGetPitch", "moveCameraTouch", "event", "state", "touchByContainer", "map", "container", "touch", "a", "b", "angle", "rect", "middle", "delta", "degrees", "mapSetPitchAndBearing", "cameraByMap", "distance", "zoom", "projected", "init_moveCameraTouch", "__esmMin", "init_degrees", "init_touchByContainer", "init_cameraByMap", "init_mapSetPitchAndBearing", "endCameraTouch", "state", "event", "map", "container", "touch", "init_endCameraTouch", "__esmMin", "endCameraTouchEvent", "event", "endCameraTouch", "touchByContainer", "init_endCameraTouchEvent", "__esmMin", "init_touchByContainer", "init_endCameraTouch", "changeCameraTouch", "state", "cameraByMap", "map", "container", "active", "endCameraTouch", "init_changeCameraTouch", "__esmMin", "init_cameraByMap", "init_endCameraTouch", "endAllCameraTouches", "state", "cameraTouchStates", "endCameraTouch", "init_endAllCameraTouches", "__esmMin", "init_cameraTouchStates", "init_endCameraTouch", "cleanupCameraTouch", "state", "cameraByMap", "container", "map", "endCameraTouch", "startCameraTouch", "moveCameraTouch", "endCameraTouchEvent", "cameraTouchStates", "endAllCameraTouches", "changeCameraTouch", "touchByContainer", "init_cleanupCameraTouch", "__esmMin", "init_cameraByMap", "init_cameraTouchStates", "init_touchByContainer", "init_endCameraTouch", "init_startCameraTouch", "init_moveCameraTouch", "init_endCameraTouchEvent", "init_endAllCameraTouches", "init_changeCameraTouch", "addCameraHandler", "map", "name", "Type", "handler", "cameraByMap", "init_addCameraHandler", "__esmMin", "init_cameraByMap", "cameraControls_exports", "__export", "cameraControls", "map", "addCameraHandler", "ContainerResize", "ShiftRotate", "PitchDrag", "Compass", "TouchMode", "container", "state", "cameraByMap", "touchByContainer", "cameraTouchStates", "startCameraTouch", "cameraListenerOptions", "moveCameraTouch", "endCameraTouchEvent", "endAllCameraTouches", "changeCameraTouch", "L", "cameraEmptyOptions", "cleanupCameraTouch", "init_cameraControls", "__esmMin", "init_L", "init_Compass", "init_ContainerResize", "init_PitchDrag", "init_ShiftRotate", "init_TouchMode", "init_cameraByMap", "init_touchByContainer", "init_cameraTouchStates", "init_cameraListenerOptions", "init_cameraEmptyOptions", "init_notifyCameraTouchChange", "init_rotateOnAdd", "init_rotateOnRemove", "init_rotateControl", "init_shiftRotateAddHooks", "init_shiftRotateRemoveHooks", "init_pitchDragAddHooks", "init_pitchDragRemoveHooks", "init_compassAddHooks", "init_compassRemoveHooks", "init_containerResizeAddHooks", "init_containerResizeRemoveHooks", "init_startCameraTouch", "init_moveCameraTouch", "init_endCameraTouchEvent", "init_changeCameraTouch", "init_cleanupCameraTouch", "init_endAllCameraTouches", "init_addCameraHandler", "compassAddHooks", "compassRemoveHooks", "containerResizeAddHooks", "containerResizeRemoveHooks", "pitchDragAddHooks", "pitchDragRemoveHooks", "shiftRotateAddHooks", "shiftRotateRemoveHooks", "notifyCameraTouchChange", "rotateOnAdd", "rotateOnRemove", "rotateControl", "init_L", "layerProto", "layerCallInitHooks", "removeLayer", "init_L", "mapMethods", "markerMethods", "popupEvents", "tooltipEvents", "popupPosition", "popupPan", "tooltipPosition", "tiledBounds", "gridEvents", "sceneByLayer", "init_L", "init_cameraByMap", "init_L", "init_cameraByMap", "imageStates", "nativeImageRefresh", "event", "states", "imageStates", "state", "refreshNativeLayer", "nativeImageError", "event", "states", "imageStates", "state", "removeImageState", "image", "state", "states", "imageStates", "addImageState", "image", "state", "states", "imageStates", "pendingUpdates", "frameCommands", "nativeRenderByLayer", "init_cameraByMap", "meshStack", "init_cameraByMap", "init_L", "mapUpdateCameraOverlays", "map", "layer", "L", "updateZoomCamera", "backend", "now", "map", "view", "sceneByLayer", "proxy", "animation", "progress", "targetScale", "scale", "from", "to", "cameraByMap", "mapUpdateCameraOverlays", "synchronizeZoomView", "backend", "now", "map", "animation", "time", "start", "sceneByLayer", "meshStack", "updateZoomCamera", "depthTexture", "destroyAfterSubmission", "layer", "texture", "submitted", "error", "destroyTexture", "layer", "texture", "destroyAfterSubmission", "sceneByLayer", "resizeRenderer", "backend", "size", "sceneByLayer", "destroyTexture", "depthTexture", "init_radians", "init_degrees", "cameraFov", "degrees", "earthCirc", "init_cameraByMap", "walkByMap", "init_mapGetPitch", "init_mapGetBearing", "halfRadians", "updateCamera", "camera", "position", "target", "up", "x", "y", "z", "viewMatrix", "projectionMatrix", "projectionViewMatrix", "i", "value", "zLength", "xLength", "viewTransform", "f", "halfRadians", "n", "r", "projectionTransform", "combined", "init_L", "bridgeElevation", "point", "bridges", "bucket", "bridge", "a", "b", "c", "d", "u", "v", "sample", "tiles", "px", "py", "tileX", "tileY", "tile", "elevation", "terrainElevation", "point", "tiles", "x", "y", "x0", "y0", "fx", "fy", "a", "sample", "b", "c", "d", "getElevation", "backend", "location", "sceneByLayer", "point", "L", "bridgeElevation", "terrainElevation", "init_cameraByMap", "animationPoint", "map", "point", "inverse", "view", "cameraByMap", "half", "scale", "shift", "updateMapCamera", "backend", "size", "map", "zoom", "cameraByMap", "pixelsPerMeter", "earthCirc", "sceneByLayer", "radians", "origin", "animationPoint", "mapMethods", "distance", "targetX", "walker", "walkByMap", "targetY", "getElevation", "targetZ", "pitch", "mapGetPitch", "bearing", "mapGetBearing", "camera", "cameraFov", "updateCamera", "worldMatrixChanged", "node", "changed", "i", "value", "state", "init_degrees", "composeLocalTransform", "node", "matrix", "degrees", "updateWorldMatrix", "node", "parent", "parentVersion", "matrixMode", "changed", "child", "worldMatrixChanged", "local", "world", "composeLocalTransform", "computeBounds", "geometry", "min", "max", "data", "instances", "axis", "offset", "low", "high", "center", "radius", "collectVisibleMesh", "mesh", "projection", "frustum", "frustumLengths", "candidates", "computeBounds", "bounds", "world", "center", "x", "y", "z", "clipZ", "clipW", "radius", "collectMeshes", "mesh", "sunlight", "projection", "frustum", "frustumLengths", "candidates", "shadowMeshes", "collectVisibleMesh", "child", "collectFrameMeshes", "backend", "sunlight", "sceneChanged", "projection", "sceneByLayer", "renderer", "frustum", "frustumLengths", "i", "axis", "plane", "j", "offset", "candidates", "shadowMeshes", "updateWorldMatrix", "collectMeshes", "init_L", "roofSignatures", "init_radians", "roofTiles", "roofMin", "roofSize", "roofShader", "roofPipeline", "roofBlitSampler", "ensureRoofBlit", "renderer", "device", "module", "roofShader", "roofPipeline", "roofBlitSampler", "roofBuffer", "roofPass", "roofImage", "roofTarget", "roofCopySize", "uploadRoofTile", "device", "tile", "source", "roofImage", "roofTarget", "roofCopySize", "roofBindGroup", "roofCommands", "roofOpacities", "compareRoofTiles", "a", "b", "composeRoofAtlas", "backend", "tiles", "zoom", "min", "size", "width", "height", "renderer", "sceneByLayer", "device", "map", "opacityLength", "roofOpacities", "opacities", "opacityBuffer", "roofBuffer", "encoder", "atlasPass", "roofPass", "compareRoofTiles", "i", "tile", "layer", "coords", "source", "tileSize", "x", "y", "uploadRoofTile", "roofBindGroup", "roofCommands", "collectRoofTiles", "rasters", "tiles", "zoom", "layer", "tile", "sceneByLayer", "roofTexture", "roofSampler", "resizeRoofTexture", "backend", "roof", "width", "height", "renderer", "sceneByLayer", "descriptor", "roofTexture", "destroyTexture", "roofSampler", "rebuildRoofAtlas", "backend", "rasters", "signature", "now", "map", "renderer", "sceneByLayer", "tiles", "roofTiles", "zoom", "collectRoofTiles", "minX", "minY", "maxX", "maxY", "coords", "tileSize", "origin", "min", "roofMin", "size", "roofSize", "scale", "width", "height", "pixels", "earthCirc", "radians", "roof", "resizeRoofTexture", "ensureRoofBlit", "composeRoofAtlas", "updateRoofAtlas", "backend", "rasters", "now", "signatures", "roofSignatures", "loading", "layer", "L", "sceneByLayer", "signature", "rebuildRoofAtlas", "updateRoofRaster", "backend", "now", "map", "rasters", "sceneByLayer", "hasRoofTexture", "layer", "updateRoofAtlas", "destroyTexture", "compareMeshDepth", "a", "b", "compareMeshes", "a", "b", "compareMeshDepth", "sortMeshes", "meshes", "compareMeshes", "init_radians", "roofFootprint", "mesh", "backend", "layer", "map", "bounds", "world", "state", "sceneByLayer", "zoom", "origin", "scale", "earthCirc", "radians", "minX", "minY", "maxX", "maxY", "i", "x", "y", "z", "px", "py", "nw", "se", "subtractRoofTile", "remaining", "tile", "zoom", "size", "left", "top", "pieces", "x0", "y0", "x1", "y1", "l", "t", "r", "b", "roofCoverage", "mesh", "backend", "rasters", "intersectsArchive", "pending", "layer", "footprint", "remaining", "tile", "sceneByLayer", "roofFootprint", "subtractRoofTile", "revealRoofMesh", "backend", "mesh", "rasters", "sceneByLayer", "roofCoverage", "prepareFrameMeshes", "backend", "rasters", "now", "meshes", "candidates", "sceneByLayer", "shadowMeshes", "renderer", "appearing", "mesh", "progress", "revealRoofMesh", "sortMeshes", "minGroundZoom", "maxGroundZoom", "shadowCount", "frameBuffer", "prepareFrameBuffer", "backend", "meshes", "shadowMeshes", "renderer", "sceneByLayer", "destroyTexture", "frameBuffer", "sunBindGroup", "bindSunlight", "layer", "sun", "sceneByLayer", "sunBindGroup", "writeLightCell", "values", "i", "key", "offsets", "data", "j", "o", "visitLightCells", "values", "i", "minX", "minZ", "cellSize", "columns", "offsets", "data", "radius", "x", "z", "y", "c", "key", "writeLightCell", "visitCells", "packed", "minX", "minZ", "cellSize", "columns", "offsets", "data", "values", "i", "visitLightCells", "lightGrid", "packed", "maxBytes", "count", "values", "value", "key", "cellSize", "data", "minX", "minZ", "maxX", "maxZ", "columns", "rows", "counts", "next", "visitCells", "entries", "length", "offset", "lightScale", "worldLights", "lights", "m", "values", "i", "x", "y", "z", "radius", "color", "flux", "w", "lightScale", "cacheLightGrid", "meshes", "previous", "maxBytes", "unchanged", "mesh", "matrix", "lights", "cache", "sameMatrix", "j", "worldLights", "packed", "snapshots", "lightGrid", "geometryEmpty", "collectLightMeshes", "node", "fixed", "moving", "child", "geometryEmpty", "updatePointLights", "backend", "device", "sun", "sceneByLayer", "fixed", "moving", "layer", "collectLightMeshes", "maxBytes", "staticGrid", "cacheLightGrid", "dynamicGrid", "size", "uploadStatic", "destroyTexture", "bindSunlight", "prepareFrameUniforms", "backend", "meshes", "shadowMeshes", "sunlight", "renderer", "sceneByLayer", "camera", "view", "direction", "x", "y", "z", "lightX", "lightY", "lightZ", "lightLength", "skyLength", "prepareFrameBuffer", "frameData", "night", "tint", "updatePointLights", "scenePass", "meshOffsets", "meshPipeline", "alphaBlend", "drawPipeline", "renderer", "mesh", "cullMode", "frontFace", "program", "depthCompare", "pipelineKey", "pipeline", "meshPipeline", "alphaBlend", "prepareMeshCutout", "renderer", "mesh", "base", "data", "cutout", "prepareMeshUniforms", "renderer", "mesh", "uniforms", "offset", "data", "base", "prepareMeshCutout", "meshImage", "meshTarget", "meshCopySize", "uploadMeshTexture", "device", "texture", "meshImage", "meshTarget", "meshCopySize", "meshBindGroup", "drawEntries", "drawMeshEntry", "drawFrameEntry", "drawTerrainEntry", "drawTextureEntries", "drawSamplerEntries", "bindMeshTextures", "renderer", "mesh", "textures", "program", "entries", "drawEntries", "drawMeshEntry", "drawFrameEntry", "drawTerrainEntry", "boundTextures", "i", "binding", "texture", "drawTextureEntries", "drawSamplerEntries", "meshBindGroup", "prepareMeshTextures", "renderer", "mesh", "program", "device", "textures", "binding", "texture", "i", "uploadMeshTexture", "bindingsChanged", "bindMeshTextures", "drawGeometry", "backend", "mesh", "pass", "cullMode", "frontFace", "geometry", "renderer", "sceneByLayer", "device", "pipeline", "drawPipeline", "offset", "prepareMeshUniforms", "prepareMeshTextures", "meshOffsets", "instances", "attribute", "index", "drawSceneMeshes", "backend", "encoder", "meshes", "renderer", "sceneByLayer", "pass", "scenePass", "mesh", "world", "uniforms", "determinant", "frontFace", "program", "drawGeometry", "disabledShadow", "shadowValues", "shadowMeshMatches", "cache", "mesh", "previous", "range", "attribute", "shadowCacheMatches", "sun", "meshes", "sunlight", "cache", "unchanged", "i", "mesh", "shadowMeshMatches", "shadowBounds", "shadowCamera", "shadowLow", "shadowHigh", "meshShadowBounds", "mesh", "bounds", "matrix", "cached", "x", "y", "z", "w", "axis", "value", "shadowBounds", "meshes", "output", "min", "max", "mesh", "bounds", "matrix", "cached", "axis", "computeBounds", "meshShadowBounds", "shadowMatrix", "meshes", "sunlight", "min", "max", "shadowBounds", "camera", "shadowCamera", "low", "shadowLow", "high", "shadowHigh", "i", "axis", "x", "y", "z", "value", "radius", "updateCamera", "view", "scaleX", "scaleY", "scaleZ", "matrix", "shadowMeshLayout", "shadowDepthLayout", "depthBindGroup", "shadowShader", "shadowPipeline", "shadowPipelineLayout", "positionLayout", "instanceLayout", "shadowInstanceLayouts", "positionLayout", "instanceLayout", "shadowLayouts", "positionLayout", "ensureShadowPipeline", "device", "sun", "instanced", "key", "shadowMeshLayout", "shadowDepthLayout", "depthBindGroup", "shader", "shadowShader", "buffers", "shadowInstanceLayouts", "shadowLayouts", "shadowPipeline", "shadowPipelineLayout", "shadowPass", "shadowBindGroup", "shadowOffsets", "drawShadowMeshes", "backend", "encoder", "meshes", "renderer", "sceneByLayer", "device", "sun", "pass", "shadowPass", "pipeline", "mesh", "instances", "nextPipeline", "offset", "attribute", "index", "range", "shadowBindGroup", "shadowOffsets", "shadowTexture", "resizeSunlight", "backend", "size", "device", "sceneByLayer", "sun", "destroyTexture", "shadowTexture", "bindSunlight", "renderSunlight", "backend", "encoder", "meshes", "sunlight", "renderer", "sceneByLayer", "device", "sun", "disabledShadow", "shadowCacheMatches", "values", "shadowValues", "resizeSunlight", "shadowMatrix", "ensureShadowPipeline", "mesh", "drawShadowMeshes", "snapshots", "mesh2", "cancelUpdate", "backend", "frame", "sceneByLayer", "pendingUpdates", "setParent", "node", "parent", "removeRasterTile", "layer", "tile", "sceneByLayer", "mesh", "setParent", "update", "destroyTexture", "releaseRasterTile", "backend", "tile", "key", "sceneByLayer", "removeRasterTile", "setParent", "destroyTexture", "update", "pruneRasterTiles", "backend", "wanted", "sceneByLayer", "now", "pending", "key", "tile", "parts", "overlaps", "coords", "zoom", "releaseRasterTile", "init_L", "current", "state", "sceneByLayer", "init_L", "coreWhite", "init_L", "styleNativeMesh", "state", "mesh", "color", "opacity", "source", "marker", "paneOrder", "order", "L", "zIndex", "sceneByLayer", "coreQuadIndices", "coreQuadUV", "coreSampler", "disposeMesh", "backend", "mesh", "setParent", "update", "attribute", "uploadCanvasTexture", "state", "key", "texture", "image", "device", "width", "height", "bitmap", "current", "refreshNativeLayer", "error", "uploadNativeImage", "state", "key", "texture", "image", "device", "width", "height", "error", "textureFor", "state", "key", "image", "backend", "textures", "meshes", "texture", "url", "mesh", "disposeMesh", "destroyTexture", "width", "height", "device", "sceneByLayer", "coreSampler", "uploadCanvasTexture", "uploadNativeImage", "init_L", "defaultMaterial", "meshBuffer", "nextId", "emptyNode", "vertexShader", "fragmentShader", "pipelineLayout", "elevationWGSL", "normalLayout", "colorLayout", "uVLayout", "programLayout", "programEntries", "meshLayoutEntry", "frameLayoutEntry", "terrainLayoutEntry", "textureLayoutEntries", "samplerLayoutEntries", "createProgramLayout", "device", "shaders", "bindGroupEntries", "programEntries", "meshLayoutEntry", "frameLayoutEntry", "terrainLayoutEntry", "texture", "entry", "index", "textureLayoutEntries", "samplerLayoutEntries", "layout", "programLayout", "createProgramUniforms", "material", "uniforms", "textureBinding", "bindings", "name", "enabled", "current", "validateRoofMaterial", "material", "name", "value", "roofVertexShader", "material", "roofOpacity", "materialVertexShader", "material", "sparkle", "elevationWGSL", "hasTerrain", "textured", "hasRoof", "instanceOffset", "roofVertexShader", "materialBaseShader", "material", "hasBase", "hasRoof", "materialSurfaceShader", "material", "sparkle", "hasBase", "hasMetal", "hasEmissive", "hasOcclusion", "hasRoof", "materialBaseShader", "materialShaders", "material", "defaultMaterial", "sparkle", "elevationWGSL", "hasBase", "hasMetal", "hasEmissive", "hasOcclusion", "hasRoof", "validateRoofMaterial", "hasTerrain", "textured", "vertex", "materialVertexShader", "bindings", "baseBinding", "textureBinding", "metalBinding", "emissiveBinding", "occlusionBinding", "roofBinding", "fragment", "materialSurfaceShader", "reportCompilation", "backend", "pending", "info", "message", "infos", "errors", "errorCount", "error", "createProgram", "backend", "material", "defaultMaterial", "shaders", "materialShaders", "elevationWGSL", "vertex", "sceneByLayer", "vertexShader", "fragment", "fragmentShader", "reportCompilation", "vertexBuffers", "positionLayout", "normalLayout", "colorLayout", "uVLayout", "instanceLayout", "bindGroupLayout", "createProgramLayout", "pipelineLayout", "uniforms", "createProgramUniforms", "createMesh", "backend", "data", "material", "defaultMaterial", "usage", "program", "device", "sceneByLayer", "attributes", "name", "values", "array", "size", "buffer", "meshBuffer", "mesh", "emptyNode", "createProgram", "nextId", "setParent", "update", "putNativeMesh", "state", "key", "position", "color", "opacity", "texture", "uv", "backend", "source", "meshes", "mesh", "normal", "index", "data", "material", "disposeMesh", "createMesh", "L", "attribute", "styleNativeMesh", "quadNativeMesh", "state", "key", "image", "corners", "opacity", "texture", "textureFor", "indices", "coreQuadIndices", "position", "uv", "index", "coreQuadUV", "putNativeMesh", "coreWhite", "init_radians", "localPosition", "state", "latlng", "map", "backend", "crs", "origin", "sceneByLayer", "point", "metres", "radians", "boundsQuad", "state", "bounds", "positions", "i", "corner", "localPosition", "syncGridLayer", "state", "source", "textures", "meshes", "key", "tile", "opacity", "retained", "mesh", "nw", "se", "styleNativeMesh", "coreWhite", "quadNativeMesh", "boundsQuad", "L", "syncImageOverlay", "state", "source", "quadNativeMesh", "boundsQuad", "coreMatrixKeys", "init_L", "init_radians", "init_mapGetBearing", "markerCameraIconPoint", "marker", "x", "y", "rotation", "mapGetBearing", "radians", "scale", "L", "transformNativePoint", "target", "matrix", "x", "y", "z", "w", "markerImageBounds", "state", "key", "image", "options", "dimensions", "bounds", "anchor", "markerQuadCorners", "state", "key", "image", "source", "map", "backend", "position", "localPosition", "size", "matrices", "root", "camera", "point", "worldMatrix", "sceneByLayer", "projection", "i", "keyName", "coreMatrixKeys", "transformNativePoint", "clipX", "clipY", "clipZ", "clipW", "width", "height", "anchorX", "anchorY", "markerImageBounds", "centerX", "centerY", "left", "top", "corners", "pointX", "pointY", "offset", "x", "y", "markerCameraIconPoint", "syncMarker", "state", "source", "i", "key", "image", "mesh", "quadNativeMesh", "markerQuadCorners", "geometryPixelStates", "init_L", "init_L", "triangle", "point", "target", "a", "b", "c", "init_L", "tau", "init_L", "diskAt", "center", "radius", "radiusY", "count", "index", "L", "tau", "disk", "point", "center", "radius", "target", "radiusY", "count", "i", "triangle", "diskAt", "segment", "context", "a", "b", "startCap", "endCap", "options", "width", "stroke", "point", "radius", "length", "direction", "normal", "L", "triangle", "disk", "init_L", "lineJoin", "context", "points", "i", "b", "length", "options", "width", "point", "stroke", "a", "radius", "disk", "previous", "previousLength", "incoming", "outgoing", "side", "n1", "L", "n2", "from", "to", "denominator", "miter", "triangle", "dashedSegment", "context", "a", "b", "length", "distance", "period", "dash", "offset", "phase", "index", "end", "delta", "segment", "line", "context", "points", "closed", "options", "width", "dash", "distance", "period", "value", "i", "a", "b", "length", "dashedSegment", "segment", "lineJoin", "minimumX", "ring", "minimum", "point", "mergeHoles", "source", "target", "start", "width", "middle", "end", "left", "right", "output", "sortHoles", "holes", "buffer", "entries", "ring", "width", "start", "previous", "i", "minimumX", "source", "target", "mergeHoles", "cross", "a", "b", "c", "equal", "a", "b", "clean", "ring", "changed", "i", "a", "b", "c", "equal", "cross", "isClockWise", "points", "area", "i", "a", "b", "polygonRings", "paths", "vertices", "rings", "offset", "index", "path", "ring", "clean", "isClockWise", "inside", "point", "ring", "result", "i", "j", "a", "b", "insideHole", "point", "rings", "i", "inside", "on", "p", "q", "intersects", "a", "b", "c", "d", "equal", "abC", "cross", "abD", "cdA", "cdB", "on", "crossesRing", "a", "b", "ring", "i", "intersects", "crossesBoundary", "a", "b", "polygon", "rings", "crossesRing", "connectHole", "polygon", "hole", "rings", "mid", "h2", "p2", "distance", "h", "p", "a", "b", "d", "inside", "insideHole", "crossesBoundary", "containsVertex", "polygon", "a", "b", "c", "p", "equal", "cross", "clipEars", "polygon", "result", "clipped", "i", "a", "b", "c", "p", "cross", "containsVertex", "triangle", "area", "ring", "sum", "i", "p", "q", "validateArea", "rings", "vertices", "result", "holeArea", "actual", "i", "triangle", "area", "expected", "cross", "triangulate", "contour", "holes", "geometryEmpty", "paths", "points", "p", "index", "hole", "vertices", "rings", "polygonRings", "polygon", "holesToConnect", "sortHoles", "mid", "connectHole", "result", "clipEars", "validateArea", "polygon", "context", "rings", "closed", "options", "fill", "point", "map", "projected", "ring", "path", "latlng", "indices", "valid", "vertices", "triangulate", "triangle", "line", "visit", "context", "coordinates", "closed", "child", "L", "polygon", "dashValues", "options", "values", "dash", "value", "allZero", "init_L", "init_L", "circleAt", "center", "radius", "radiusY", "count", "index", "offset", "angle", "tau", "L", "circleGeometry", "source", "context", "map", "point", "fill", "stroke", "options", "dash", "width", "center", "radius", "radiusY", "index", "i", "L", "projected", "disk", "count", "points", "circleAt", "line", "triangle", "nativeGeometry", "source", "map", "point", "fill", "stroke", "options", "width", "dash", "dashValues", "context", "L", "circleGeometry", "closed", "visit", "localPixel", "state", "point", "localPosition", "localPixelForGeometry", "point", "localPixel", "geometryPixelStates", "toSRGB", "value", "channel", "n", "h", "l", "a", "k", "parseColor", "value", "a", "toSRGB", "channel", "context", "g", "b", "syncVectorLayer", "state", "source", "geometryPixelStates", "geometry", "nativeGeometry", "localPixelForGeometry", "fill", "stroke", "i", "key", "positions", "color", "opacity", "r", "g", "b", "parseColor", "putNativeMesh", "pruneNativeResources", "state", "meshes", "textures", "backend", "mesh", "texture", "key", "disposeMesh", "destroyTexture", "synchronizeNativeLayer", "state", "source", "meshes", "textures", "current", "sceneByLayer", "mesh", "texture", "L", "syncGridLayer", "syncImageOverlay", "syncMarker", "syncVectorLayer", "pruneNativeResources", "beforeNativeRender", "state", "synchronizeNativeLayer", "error", "render", "backend", "cancelUpdate", "sceneByLayer", "map", "now", "size", "synchronizeZoomView", "resizeRenderer", "updateMapCamera", "updateWorldMatrix", "sceneChanged", "layer", "native", "nativeRenderByLayer", "beforeNativeRender", "sunlight", "cameraByMap", "collectFrameMeshes", "shadowMeshes", "renderer", "rasters", "updateRoofRaster", "meshes", "appearing", "prepareFrameMeshes", "encoder", "prepareFrameUniforms", "renderSunlight", "drawSceneMeshes", "frameCommands", "pruneRasterTiles", "update", "renderPendingUpdates", "updates", "pendingUpdates", "failure", "backend", "sceneByLayer", "render", "error", "update", "backend", "shared", "sceneByLayer", "first", "pendingUpdates", "renderPendingUpdates", "init_L", "hideTargets", "state", "source", "htmlIcon", "L", "icon", "shadow", "i", "element", "refreshNativeLayer", "state", "hideTargets", "source", "i", "image", "nativeImageRefresh", "nativeImageError", "removeImageState", "addImageState", "sceneByLayer", "update", "nativeLayerMethod", "name", "source", "args", "state", "sceneByLayer", "result", "layer", "zIndex", "L", "extreme", "edge", "cameraByMap", "refreshNativeLayer", "nativeSetLatLng", "args", "nativeLayerMethod", "nativeSetLatLngs", "args", "nativeLayerMethod", "nativeAddLatLng", "args", "nativeLayerMethod", "nativeSetRadius", "args", "nativeLayerMethod", "nativeSetStyle", "args", "nativeLayerMethod", "nativeRedraw", "args", "nativeLayerMethod", "nativeSetIcon", "args", "nativeLayerMethod", "nativeSetUrl", "args", "nativeLayerMethod", "nativeSetBounds", "args", "nativeLayerMethod", "nativeSetOpacity", "args", "nativeLayerMethod", "nativeSetZIndex", "args", "nativeLayerMethod", "nativeSetZIndexOffset", "args", "nativeLayerMethod", "nativeBringToFront", "args", "nativeLayerMethod", "nativeBringToBack", "args", "nativeLayerMethod", "nativeMethodHandlers", "nativeSetLatLng", "nativeSetLatLngs", "nativeAddLatLng", "nativeSetRadius", "nativeSetStyle", "nativeRedraw", "nativeSetIcon", "nativeSetUrl", "nativeSetBounds", "nativeSetOpacity", "nativeSetZIndex", "nativeSetZIndexOffset", "nativeBringToFront", "nativeBringToBack", "init_L", "sceneEmptyOptions", "createLayer", "options", "sceneEmptyOptions", "L", "init_L", "nativeEventMaps", "trafficByLayer", "mergeHits", "source", "target", "start", "width", "middle", "end", "left", "right", "output", "sortHits", "hits", "buffer", "source", "target", "width", "start", "previous", "i", "mergeHits", "localRay", "ray", "mesh", "origin", "direction", "inverseValues", "value", "x", "y", "z", "w", "directionLength", "rayBounds", "mesh", "origin", "direction", "computeBounds", "near", "far", "i", "b", "readTriangle", "mesh", "i", "a", "b", "c", "position", "index", "instanceOffset", "vertices", "vertex", "offset", "x", "y", "z", "ai", "bi", "ci", "hiddenLightHit", "mesh", "i", "u", "v", "night", "index", "uv", "idA", "idB", "idC", "x", "y", "triangleDistance", "mesh", "i", "a", "b", "c", "origin", "direction", "night", "ex", "ey", "ez", "fx", "fy", "fz", "px", "py", "pz", "det", "tx", "ty", "tz", "u", "qx", "qy", "qz", "v", "hiddenLightHit", "worldHit", "ray", "mesh", "origin", "direction", "closest", "faceIndex", "x", "y", "z", "matrix", "w", "worldPoint", "intersectMeshes", "ray", "meshes", "night", "hits", "a", "b", "c", "origin", "direction", "mesh", "position", "index", "instanceOffset", "vertices", "closest", "faceIndex", "i", "distance", "localRay", "rayBounds", "readTriangle", "triangleDistance", "worldHit", "sortHits", "traverse", "node", "callback", "context", "child", "collectVisibleMesh", "mesh", "meshes", "along", "points", "lengths", "s", "target", "end", "middle", "a", "b", "d", "t", "locateTraffic", "state", "trip", "points", "lengths", "length", "distance", "position", "along", "placeTraffic", "state", "position", "normal", "i", "trip", "cx", "y", "cz", "dx", "dz", "k", "o", "lx", "lz", "nx", "nz", "locateTraffic", "validateCameraInverse", "matrix", "column", "row", "raycast", "backend", "event", "objects", "sceneByLayer", "recursive", "traffic", "trafficByLayer", "placeTraffic", "rect", "updateWorldMatrix", "updateCamera", "inverseCamera", "matrix", "x", "y", "endX", "endY", "endZ", "endW", "object", "validateCameraInverse", "direction", "rayLength", "meshes", "traverse", "collectVisibleMesh", "intersectMeshes", "restoreNativeEvents", "map", "descriptor", "handle", "renderers", "coreEventTypes", "init_L", "compareNativeHits", "a", "b", "nativeEventSource", "context", "event", "type", "hits", "candidate", "source", "backend", "L", "raycast", "compareNativeHits", "updateNativeHover", "map", "context", "event", "source", "bypassNativeEvent", "map", "context", "event", "type", "target", "dom", "updateNativeHover", "handleNativeMapEvent", "event", "type", "targets", "map", "context", "nativeEventMaps", "fireDOMEvent", "owner", "renderers", "sceneByLayer", "coreEventTypes", "bypassNativeEvent", "source", "nativeEventSource", "updateNativeHover", "nativeEvents", "state", "map", "context", "nativeEventMaps", "pointer", "L", "handleNativeMapEvent", "restoreNativeEvents", "removeNativeEvents", "state", "context", "map", "nativeEventMaps", "refreshNativeEvent", "refreshNativeLayer", "init_cameraByMap", "updateNativeLayerView", "sceneByLayer", "update", "disposeNativeLayer", "state", "source", "map", "backend", "meshes", "textures", "images", "refreshNativeEvent", "updateNativeLayerView", "removeNativeEvents", "name", "methods", "mesh", "texture", "image", "disposeMesh", "destroyTexture", "nativeImageRefresh", "nativeImageError", "removeImageState", "nativeRenderByLayer", "resolveNativeReady", "rejectNativeReady", "error", "forwardNativeError", "error", "nativeLayer", "state", "source", "map", "backend", "createLayer", "cameraByMap", "L", "refreshNativeEvent", "updateNativeLayerView", "nativeEvents", "name", "own", "original", "nativeMethodHandlers", "ready", "resolveNativeReady", "rejectNativeReady", "forwardNativeError", "refreshNativeLayer", "error", "disposeNativeLayer", "current", "nativeRenderByLayer", "synchronizeNativeLayer", "update", "removeTargets", "state", "sceneByLayer", "disposeNativeLayer", "element", "readyNativeGPU", "state", "sceneByLayer", "nativeLayer", "reportError", "source", "error", "initNativeGPU", "source", "map", "sceneByLayer", "style", "state", "hideTargets", "removeTargets", "readyNativeGPU", "reportError", "cameraAngles", "init_L", "pointOf", "point", "L", "init_radians", "init_mapGetBearing", "init_mapGetPitch", "angles", "map", "target", "bearing", "mapGetBearing", "radians", "pitch", "mapGetPitch", "project", "map", "point", "inverse", "limit", "size", "halfX", "halfY", "distance", "result", "pointOf", "cos", "sin", "tilt", "rise", "angles", "cameraAngles", "x", "y", "far", "denominator", "v", "u", "scale", "mapLayerPointToContainerPoint", "point", "project", "animationPoint", "mapMethods", "mapContainerPointToLayerPoint", "point", "mapMethods", "animationPoint", "project", "mapGetCenterLayerPoint", "mapMethods", "mapPanBy", "offset", "options", "half", "ground", "project", "pointOf", "mapMethods", "init_L", "init_mapGetPitch", "init_mapGetBearing", "mapSetZoomAround", "latlng", "zoom", "options", "mapGetPitch", "mapGetBearing", "mapMethods", "scale", "half", "screen", "L", "center", "anchor", "next", "cameraZeroPadding", "init_mapGetPitch", "init_mapGetBearing", "mapPanInside", "latlng", "options", "mapGetPitch", "mapGetBearing", "mapMethods", "min", "pointOf", "cameraZeroPadding", "max", "screen", "safe", "delta", "init_L", "init_mapGetPitch", "init_mapGetBearing", "init_L", "groundBounds", "map", "padding", "cameraZeroPadding", "min", "pointOf", "max", "bounds", "L", "minX", "minY", "i", "project", "mapLimitCenter", "center", "zoom", "bounds", "mapGetPitch", "mapGetBearing", "mapMethods", "half", "footprint", "groundBounds", "point", "view", "L", "offset", "init_mapGetPitch", "init_mapGetBearing", "mapLimitOffset", "offset", "bounds", "mapGetPitch", "mapGetBearing", "mapMethods", "half", "ground", "project", "center", "limited", "init_mapGetPitch", "init_mapGetBearing", "init_L", "init_cameraEmptyOptions", "verticalGroundY", "y", "tilt", "distance", "rise", "far", "fitCameraBounds", "map", "bounds", "options", "cameraEmptyOptions", "L", "zoom", "half", "distance", "min", "pointOf", "cameraZeroPadding", "max", "cos", "sin", "tilt", "rise", "angles", "cameraAngles", "y", "far", "top", "verticalGroundY", "bottom", "origin", "low", "high", "leftSlope", "rightSlope", "slope", "left", "right", "corners", "i", "latlng", "p", "x", "scale", "target", "snap", "actual", "vMin", "vMax", "v", "centerY", "centerX", "mapGetBoundsCenterZoom", "bounds", "options", "mapGetPitch", "mapGetBearing", "fitCameraBounds", "mapMethods", "init_L", "init_mapGetPitch", "init_mapGetBearing", "mapGetBoundsZoom", "bounds", "inside", "padding", "mapGetPitch", "mapGetBearing", "mapMethods", "fitCameraBounds", "pointOf", "cameraZeroPadding", "L", "footprint", "groundBounds", "size", "zoom", "snap", "mapTryAnimatedPan", "center", "options", "offset", "mapMethods", "init_L", "init_mapGetPitch", "init_mapGetBearing", "mapGetBounds", "mapGetPitch", "mapGetBearing", "mapMethods", "footprint", "groundBounds", "bounds", "L", "i", "point", "raw", "animationPoint", "init_cameraByMap", "init_mapSetPitchAndBearing", "init_updateSky", "constrainCameraToBounds", "init_cameraByMap", "init_cancelCameraAnimation", "init_cameraByMap", "init_mapGetPitch", "init_mapGetBearing", "adjustCameraDrag", "map", "draggable", "cameraByMap", "mapGetPitch", "mapGetBearing", "half", "delta", "ground", "project", "cleanupCameraMap", "cancelCameraAnimation", "cameraByMap", "adjustCameraDrag", "init_cameraByMap", "cameraMapReady", "draggable", "cameraByMap", "adjustCameraDrag", "loadCameraControls", "map", "cameraControls", "error", "noOperation", "initializeCameraMap", "cameraByMap", "style", "mapSetPitchAndBearing", "updateSky", "constrainCameraToBounds", "cleanupCameraMap", "cameraMapReady", "loadCameraControls", "noOperation", "init_L", "markerSetIcon", "icon", "L", "result", "markerMethods", "initNativeGPU", "markerGetEvents", "events", "markerMethods", "displayPoint", "map", "point", "markerSetPos", "point", "markerMethods", "displayPoint", "i", "element", "key", "direction", "options", "anchor", "markerCameraIconPoint", "refreshNativeLayerContract", "layer", "native", "sceneByLayer", "refreshNativeLayer", "markerUpdateZIndex", "offset", "markerMethods", "changed", "sceneByLayer", "refreshNativeLayerContract", "dragByHandler", "init_L", "cameraMarkerOnDrag", "event", "map", "screen", "L", "point", "dragByHandler", "init_L", "init_mapGetPitch", "init_mapGetBearing", "pendingMarkerPan", "markerPanFrame", "runMarkerPanFrame", "markerPanFrame", "pending", "pendingMarkerPan", "drag", "event", "scheduleMarkerPan", "drag", "event", "pendingMarkerPan", "markerPanFrame", "runMarkerPanFrame", "adjustCameraMarkerPan", "event", "marker", "map", "mapGetPitch", "mapGetBearing", "dragByHandler", "screen", "L", "size", "padding", "pointOf", "speed", "movement", "pane", "shift", "scheduleMarkerPan", "cameraMarkerDrag", "dragByHandler", "drag", "original", "adjustPan", "cameraMarkerOnDrag", "adjustCameraMarkerPan", "markerInitInteraction", "result", "markerMethods", "cameraMarkerDrag", "popupGetEvents", "events", "popupEvents", "tooltipGetEvents", "events", "tooltipEvents", "init_mapGetPitch", "init_mapGetBearing", "popupAdjustPan", "map", "mapGetPitch", "mapGetBearing", "popupPan", "rect", "container", "min", "pointOf", "max", "left", "top", "right", "bottom", "dx", "dy", "screen", "delta", "init_L", "popupUpdatePosition", "popupPosition", "point", "delta", "displayPoint", "L", "init_L", "tooltipSetPosition", "point", "tooltipPosition", "delta", "displayPoint", "L", "init_L", "gridlayerGetEvents", "events", "gridEvents", "L", "init_L", "init_mapGetBearing", "init_mapGetPitch", "gridlayerGetTiledPixelBounds", "center", "mapGetBearing", "mapGetPitch", "tiledBounds", "bounds", "L", "mapMethods", "L", "mapLayerPointToContainerPoint", "mapContainerPointToLayerPoint", "mapGetCenterLayerPoint", "mapPanBy", "mapSetZoomAround", "mapPanInside", "mapLimitCenter", "mapLimitOffset", "mapGetBoundsCenterZoom", "mapGetBoundsZoom", "mapTryAnimatedPan", "mapGetBounds", "initializeCameraMap", "markerMethods", "markerSetIcon", "markerGetEvents", "markerSetPos", "markerUpdateZIndex", "markerInitInteraction", "popupEvents", "popupGetEvents", "tooltipEvents", "tooltipGetEvents", "popupPosition", "popupPan", "popupAdjustPan", "popupUpdatePosition", "tooltipPosition", "tooltipSetPosition", "tiledBounds", "gridEvents", "gridlayerGetEvents", "gridlayerGetTiledPixelBounds", "init_L", "init_radians", "lampDirections", "ring", "point", "radius", "points", "lampDirections", "i", "lampPostGeometry", "point", "style", "addTriangle", "color", "parseColor", "radius", "center", "r", "low", "high", "points", "i", "a", "b", "nx", "nz", "section", "ring", "lampDirections", "quad", "addTriangle", "color", "a", "b", "c", "d", "height", "nx", "ny", "nz", "emitter", "point", "u", "v", "axis", "lightGeometry", "point", "style", "addTriangle", "color", "parseColor", "axis", "quad", "emitter", "roundProfile", "ringDirections", "ring", "point", "radius", "result", "ringDirections", "i", "surface", "point", "addTriangle", "lowRadius", "low", "highRadius", "high", "color", "lower", "ring", "upper", "i", "next", "slope", "length", "nx", "nz", "ny", "normalX", "normalZ", "ringDirections", "validateTree", "trunkRadius", "crownRadius", "crownBottom", "bottom", "top", "crownShape", "treeGeometry", "point", "style", "addTriangle", "top", "bottom", "trunkRadius", "crownRadius", "crownBottom", "crownShape", "validateTree", "trunk", "parseColor", "crown", "surface", "i", "low", "lr", "high", "hr", "base", "ring", "roundProfile", "updateStatus", "backend", "enabled", "progress", "area", "sceneByLayer", "archiveDecoder", "tileId", "z", "x", "y", "id", "n", "s", "rx", "ry", "swap", "headerOffsets", "headerFlags", "headerBounds", "decodeHeader", "data", "view", "header", "i", "headerOffsets", "headerFlags", "headerBounds", "read", "backend", "offset", "length", "signal", "response", "sceneByLayer", "etag", "data", "getHeader", "layer", "sceneByLayer", "read", "decodeHeader", "directoryReader", "varint", "reader", "bytes", "value", "factor", "byte", "decodeDirectory", "data", "reader", "directoryReader", "bytes", "count", "varint", "entries", "tileId", "i", "entry", "value", "decompress", "data", "compression", "blob", "stream", "loadDirectory", "backend", "offset", "length", "compression", "decodeDirectory", "decompress", "read", "getDirectoryEntries", "backend", "offset", "length", "compression", "directories", "sceneByLayer", "key", "loadDirectory", "pending", "error", "findDirectoryEntry", "entries", "id", "low", "high", "mid", "getTileData", "backend", "header", "entry", "id", "signal", "data", "decompress", "read", "findTile", "backend", "header", "id", "signal", "offset", "length", "firstOffset", "secondOffset", "thirdOffset", "depth", "entries", "entry", "tile", "getDirectoryEntries", "findDirectoryEntry", "getTileData", "getZxy", "backend", "z", "x", "y", "signal", "sceneByLayer", "id", "tileId", "header", "getHeader", "findTile", "loadSource", "layer", "area", "sceneByLayer", "data", "url", "sourceUrl", "response", "result", "getZxy", "archiveDecoder", "init_cameraByMap", "init_L", "init_L", "init_cameraByMap", "projectedTree", "context", "lon", "lat", "backend", "crs", "origin", "metres", "map", "location", "L", "point", "elevation", "cameraByMap", "getElevation", "sceneByLayer", "triangleContexts", "groundOffset", "point", "addTriangle", "context", "a", "ah", "b", "bh", "c", "ch", "nx", "ny", "nz", "color", "backend", "positions", "normals", "colors", "uvs", "ux", "uy", "uz", "vx", "vy", "vz", "point", "height", "groundOffset", "addGeneratedTriangle", "args", "addTriangle", "triangleContexts", "generateTreeGeometry", "context", "generator", "point", "style", "triangleContexts", "addGeneratedTriangle", "buildAreaPoint", "context", "feature", "lon", "lat", "style", "baseColor", "backend", "top", "projected", "projectedTree", "support", "generateTreeGeometry", "lampPostGeometry", "lightGeometry", "treeGeometry", "init_L", "init_cameraByMap", "projectRing", "context", "ring", "backend", "crs", "origin", "metres", "map", "path", "i", "lng", "lat", "location", "point", "elevation", "L", "cameraByMap", "getElevation", "sceneByLayer", "buildAreaPolygon", "context", "rings", "top", "bottom", "baseColor", "paths", "ring", "path", "point", "a", "b", "index", "sign", "i", "length", "nx", "nz", "projectRing", "points", "triangulate", "addTriangle", "isClockWise", "featureAnchor", "feature", "nightLight", "geometry", "point", "coordinates", "extrusionStyle", "backend", "feature", "style", "top", "bottom", "buildAreaFeature", "context", "feature", "backend", "area", "map", "coords", "coordinates", "featureAnchor", "geometry", "isTree", "lon", "lat", "anchor", "L", "style", "extrusionStyle", "top", "bottom", "color", "baseColor", "parseColor", "vertexStart", "buildAreaPoint", "polygon", "buildAreaPolygon", "vertexEnd", "instanceAreaGeometry", "context", "positions", "normals", "colors", "featureFaces", "vertices", "length", "originX", "originY", "originZ", "template", "i", "instance", "face", "start", "offsets", "attachAreaMesh", "context", "backend", "area", "device", "sceneByLayer", "data", "instanceAreaGeometry", "attributes", "name", "attribute", "meshGeometry", "emptyNode", "createProgram", "nextId", "setParent", "update", "init_radians", "sourceAreaContext", "backend", "area", "map", "crs", "origin", "sceneByLayer", "radians", "buildArea", "backend", "area", "map", "feature", "sceneByLayer", "cameraByMap", "data", "loadSource", "context", "sourceAreaContext", "deadline", "buildAreaFeature", "attachAreaMesh", "error", "pump", "compareDistance", "a", "b", "pendingSourceAreas", "layers", "map", "pending", "layer", "area", "center", "sceneByLayer", "compareDistance", "pump", "backend", "map", "shared", "renderers", "layers", "layer", "area", "areaBackend", "sceneByLayer", "pending", "pendingSourceAreas", "inflight", "buildArea", "updateStatus", "setHighlight", "backend", "feature", "sceneByLayer", "update", "showFeature", "backend", "feature", "event", "tooltip", "sceneByLayer", "rect", "x", "y", "shared", "layer", "visible", "releaseArea", "backend", "area", "attribute", "sceneByLayer", "setHighlight", "showFeature", "setParent", "update", "geometry", "compareAreaDistance", "a", "b", "updateArea", "backend", "sceneByLayer", "pump", "z", "center", "bounds", "nw", "se", "archiveNW", "archiveSE", "wanted", "x", "y", "key", "area", "coords", "releaseArea", "areas", "compareAreaDistance", "init_cameraByMap", "setTerrainHeight", "layer", "sceneByLayer", "terrain", "cameraByMap", "elevation", "getElevation", "offset", "restoreGeometry", "geometry", "device", "name", "attribute", "oldBuffer", "restoreMaterialTextures", "material", "device", "name", "texture", "restoreObject", "object", "backend", "shared", "sceneByLayer", "texture", "geometry", "material", "device", "restoreGeometry", "restoreMaterialTextures", "createProgram", "rendererDevices", "showWebGPUWarning", "map", "container", "warning", "link", "failAttachment", "error", "backend", "map", "showWebGPUWarning", "sceneByLayer", "renderers", "requestAdapter", "backend", "map", "adapter", "error", "failAttachment", "requestDevice", "adapter", "backend", "map", "error", "failAttachment", "rendererDeviceError", "event", "map", "rendererDevices", "owner", "renderers", "sceneByLayer", "layer", "rendererDeviceLost", "info", "device", "map", "rendererDevices", "owner", "renderers", "sceneByLayer", "error", "layer", "createSceneCamera", "sceneSunlightUniforms", "initializeRendererResources", "backend", "device", "layout", "buffer", "sceneByLayer", "sampler", "lights", "sceneSunlightUniforms", "resizeSunlight", "emptyImage", "pendingMapChanges", "renderPendingMapChange", "layer", "pendingMapChanges", "sceneByLayer", "update", "render", "onMapChange", "layer", "sceneByLayer", "pendingMapChanges", "renderPendingMapChange", "startZoom", "sceneByLayer", "pendingZoomAnimations", "renderPendingZoomAnimation", "layer", "pendingZoomAnimations", "sceneByLayer", "render", "onZoomAnim", "event", "map", "sceneByLayer", "pendingZoomAnimations", "renderPendingZoomAnimation", "init_cameraByMap", "endZoom", "backend", "animation", "sceneByLayer", "cameraByMap", "mapUpdateCameraOverlays", "update", "mountRenderer", "backend", "map", "canvas", "sceneByLayer", "pane", "onMapChange", "startZoom", "onZoomAnim", "endZoom", "initializeSharedRenderer", "backend", "map", "canvas", "failAttachment", "adapter", "requestAdapter", "device", "requestDevice", "rendererDevices", "rendererDeviceError", "rendererDeviceLost", "context", "format", "sceneByLayer", "emptyNode", "createSceneCamera", "initializeRendererResources", "mountRenderer", "attach", "backend", "map", "shared", "renderers", "sceneByLayer", "noOperation", "initializeSharedRenderer", "render", "origin", "point", "metres", "radians", "setTerrainHeight", "setParent", "traverse", "restoreObject", "update", "updateArea", "init_L", "findFeature", "backend", "event", "sceneByLayer", "hit", "object", "ranges", "low", "high", "middle", "range", "raycast", "onClick", "layer", "event", "feature", "findFeature", "sceneByLayer", "setHighlight", "showFeature", "onPointerLeave", "layer", "sceneByLayer", "setHighlight", "showFeature", "onPointerMove", "layer", "event", "sceneByLayer", "findFeature", "setHighlight", "showFeature", "pointerMove", "event", "onPointerMove", "pointerClick", "event", "onClick", "pointerLeave", "onPointerLeave", "attachLayer", "backend", "map", "attach", "sceneByLayer", "error", "onAdd3DLayer", "backend", "map", "sceneByLayer", "center", "L", "pointerMove", "pointerClick", "pointerLeave", "attachLayer", "init_L", "sceneTransferFields", "init_cameraByMap", "sceneCleanupFields", "releaseRenderer", "renderer", "backend", "error", "releaseSharedScene", "backend", "map", "sceneByLayer", "destroyTexture", "animation", "cameraByMap", "renderer", "releaseRenderer", "renderers", "key", "sceneCleanupFields", "onRemove3DLayer", "backend", "map", "sceneByLayer", "onPointerLeave", "L", "area", "key", "layer", "releaseArea", "updateStatus", "shared", "setParent", "onMapChange", "startZoom", "onZoomAnim", "endZoom", "cancelUpdate", "next", "sceneTransferFields", "renderers", "update", "releaseSharedScene", "onTerrainChange", "layer", "area", "sceneByLayer", "releaseArea", "updateArea", "init_cameraByMap", "geometryDecoder", "hasUnsupportedPrimitives", "meshes", "mesh", "primitive", "decodeModel", "data", "view", "decoder", "geometryDecoder", "description", "offset", "length", "type", "chunk", "binary", "hasUnsupportedPrimitives", "init_radians", "init_L", "vertexNormals", "p", "indices", "normals", "i", "a", "b", "c", "ux", "uy", "uz", "vx", "vy", "vz", "j", "nx", "ny", "nz", "index", "length", "collectMeshes", "node", "meshes", "child", "conformModelToTerrain", "layer", "terrain", "sceneByLayer", "meshes", "collectMeshes", "mesh", "positions", "geometry", "position", "normals", "attribute", "normal", "world", "inverse", "i", "x", "y", "z", "worldY", "weight", "worldX", "worldZ", "point", "elevation", "offset", "computeBounds", "updateWorldMatrix", "map", "crs", "origin", "metres", "radians", "pixelScale", "L", "getElevation", "vertexNormals", "update", "init_cameraByMap", "loadBuffer", "buffer", "directory", "response", "geometryImageOptions", "loadImage", "description", "directory", "image", "blob", "view", "buffer", "response", "geometryImageOptions", "loadModelResources", "backend", "description", "directory", "bufferRequests", "buffer", "geometryEmpty", "loadBuffer", "sceneByLayer", "imageRequests", "image", "loadImage", "images", "cameraByMap", "textureSampler", "sampler", "textureFor", "context", "reference", "color", "backend", "description", "images", "textures", "device", "sceneByLayer", "key", "texture", "sampler", "image", "format", "samplerOptions", "textureSampler", "materialFor", "context", "material", "backend", "pbr", "textureFor", "createModelContext", "backend", "description", "images", "context", "material", "geometryEmpty", "materialFor", "geometryQuaternion", "geometryScale", "geometryTranslation", "nodeMatrix", "spec", "x", "y", "z", "w", "geometryQuaternion", "sx", "sy", "sz", "geometryScale", "geometryTranslation", "geometrySemantics", "types", "sizes", "readAccessorValue", "input", "Type", "at", "readAccessorValues", "description", "Type", "size", "data", "accessorCount", "indices", "viewIndex", "offset", "count", "stride", "view", "bytes", "buffer", "input", "i", "j", "at", "output", "readAccessorValue", "readSparseAccessor", "description", "spec", "Type", "size", "data", "sparse", "Index", "types", "view", "offset", "indices", "readAccessorValues", "normalizeAccessor", "spec", "Type", "data", "size", "normalized", "i", "readAccessor", "description", "index", "spec", "Type", "types", "size", "sizes", "data", "readAccessorValues", "readSparseAccessor", "normalizeAccessor", "readModelAttributes", "description", "primitive", "attributes", "semantic", "name", "geometrySemantics", "readAccessor", "vertexCount", "attribute", "readModelIndices", "description", "primitive", "attributes", "vertexCount", "index", "readAccessor", "value", "createModelGeometry", "context", "primitive", "attributes", "normals", "vertexNormals", "style", "program", "createProgram", "device", "sceneByLayer", "name", "attribute", "geometry", "modelNode", "context", "index", "backend", "description", "active", "spec", "group", "emptyNode", "nodeMatrix", "primitive", "attributeData", "attributes", "vertexCount", "built", "mesh", "child", "readModelAttributes", "readModelIndices", "createModelGeometry", "nextId", "setParent", "geometryEmpty", "releaseModelResources", "context", "resource", "attribute", "buildModelNodes", "context", "scene", "nodes", "index", "modelNode", "error", "releaseModelResources", "applyModelTransform", "backend", "model", "sceneByLayer", "x", "y", "z", "loadModel", "backend", "sceneByLayer", "url", "response", "data", "description", "decodeModel", "directory", "images", "loadModelResources", "context", "createModelContext", "scene", "nodes", "buildModelNodes", "model", "emptyNode", "node", "setParent", "applyModelTransform", "conformModelToTerrain", "cameraByMap", "get3DEvents", "layer", "events", "sceneByLayer", "updateArea", "onTerrainChange", "ready3D", "layer", "sceneByLayer", "emptyNode", "getHeader", "attach", "loadModel", "update", "error", "init_L", "init_L", "placeEntryElement", "input", "layer", "element", "label", "L", "group", "placeEntry", "map", "layer", "element", "input", "entry", "L", "placeEntryElement", "placeUnderEntry", "state", "nested", "placeEntry", "onPlace", "pendingPlacements", "runPlacements", "state", "pendingPlacements", "placeUnderEntry", "replaceEntry", "pendingPlacements", "runPlacements", "removeEntry", "replaceEntry", "group", "underEntry", "layer", "element", "onPlace", "state", "replaceEntry", "removeEntry", "placeUnderEntry", "layerCountTitle", "scene", "formatted", "pending", "error", "renderLayerCount", "scene", "count", "pending", "error", "status", "loading", "formatted", "text", "title", "layerCountTitle", "updateLayerCount", "event", "layer", "scene", "sceneByLayer", "status", "underEntry", "count", "pending", "error", "area", "renderLayerCount", "init3D", "layer", "options", "sceneEmptyOptions", "sceneByLayer", "L", "isModel", "status", "updateLayerCount", "ready3D", "noOperation", "init_L", "wantedTiles", "coverageTiles", "comparePendingTiles", "a", "b", "blobParts", "init_radians", "init_cameraByMap", "rasterPoint", "demTexture", "demTarget", "demLayout", "demSize", "copyTerrainTile", "atlas", "values", "start", "columns", "row", "column", "value", "terrainAtlas", "tiles", "bounds", "columns", "rows", "atlas", "key", "values", "coordinates", "x", "y", "start", "copyTerrainTile", "rasterProgram", "backend", "texture", "state", "sceneByLayer", "device", "bounds", "columns", "rows", "elevations", "low", "high", "terrainAtlas", "destroyTexture", "demTexture", "demTarget", "demLayout", "demSize", "createProgram", "demBuffer", "terrainGrid", "divisions", "vertices", "positions", "normals", "uvs", "indices", "row", "column", "a", "b", "c", "d", "vertex", "index", "terrainBuffers", "backend", "divisions", "state", "sceneByLayer", "device", "attributes", "terrainGrid", "name", "attribute", "demBuffer", "terrainTileGeometry", "backend", "attributes", "sizeX", "sizeZ", "scene", "sceneByLayer", "base", "bottom", "top", "addRasterTile", "backend", "layer", "coords", "tile", "sceneByLayer", "cameraByMap", "divisions", "map", "crs", "origin", "metres", "radians", "scale", "terrainScale", "point", "rasterPoint", "corner", "opposite", "device", "texture", "program", "rasterProgram", "attributes", "terrainBuffers", "base", "sizeX", "sizeZ", "geometry", "terrainTileGeometry", "mesh", "nextId", "setParent", "update", "registerTerrainTile", "backend", "coords", "tile", "sceneByLayer", "addRasterTile", "error", "init_radians", "rasterTexture", "rasterSampler", "rasterBuffer", "rasterPositions", "rasterNormals", "rasterUVs", "rasterIndices", "createGeometry", "device", "attributes", "rasterPositions", "rasterNormals", "rasterUVs", "rasterIndices", "name", "attribute", "rasterBuffer", "createRasterMesh", "backend", "tile", "device", "sceneByLayer", "texture", "rasterTexture", "rasterSampler", "source", "meshImage", "destination", "meshTarget", "dimensions", "meshCopySize", "createProgram", "createGeometry", "coords", "crs", "origin", "metres", "radians", "scale", "point", "rasterPoint", "corner", "opposite", "sizeX", "sizeZ", "nextId", "setParent", "finishRasterTile", "backend", "tile", "sceneByLayer", "result", "getZxy", "blobParts", "blob", "createRasterMesh", "registerTerrainTile", "update", "error", "pumpRasterTiles", "pruneRasterTiles", "loadRasterTile", "backend", "tile", "first", "sceneByLayer", "finishRasterTile", "pumpRasterTiles", "backend", "map", "center", "pending", "tile", "coords", "sceneByLayer", "comparePendingTiles", "loadRasterTile", "retainRasterTiles", "backend", "required", "tiles", "sceneByLayer", "key", "tile", "coords", "releaseRasterTile", "archiveNorthWest", "archiveSouthEast", "rasterTileRange", "map", "header", "zoom", "bounds", "northwest", "southeast", "archiveNorthWest", "archiveSouthEast", "archiveMin", "archiveMax", "center", "updateRasterTiles", "backend", "map", "sceneByLayer", "zoom", "range", "rasterTileRange", "wanted", "wantedTiles", "x", "y", "key", "coords", "parent", "coverage", "coverageTiles", "parentZoom", "factor", "required", "retainRasterTiles", "pumpRasterTiles", "pruneRasterTiles", "getRasterEvents", "layer", "update", "updateRasterTiles", "readyRaster", "layer", "archive", "header", "getHeader", "sceneByLayer", "reportError", "layer", "error", "init_cameraByMap", "setRasterTerrain", "backend", "terrain", "sceneByLayer", "tile", "removeRasterTile", "setParent", "registerTerrainTile", "finishAttachment", "backend", "map", "attached", "sceneByLayer", "setRasterTerrain", "cameraByMap", "error", "updateAttachedTiles", "backend", "map", "attached", "sceneByLayer", "updateRasterTiles", "error", "onPMTileAdd", "backend", "map", "sceneByLayer", "attached", "attach", "finishAttachment", "updateAttachedTiles", "releaseRasterTiles", "backend", "tile", "attribute", "sceneByLayer", "releaseRasterTile", "destroyTexture", "onPMTileRemove", "backend", "map", "releaseRasterTiles", "sceneByLayer", "onRemove3DLayer", "init_L", "initRaster", "layer", "options", "sceneByLayer", "L", "emptyNode", "readyRaster", "reportError", "init_cameraByMap", "renderEmpty", "clearLayerTerrain", "layer", "sceneByLayer", "setRasterTerrain", "onTerrainRemove", "layer", "map", "sceneByLayer", "clearLayerTerrain", "tile", "l", "grid", "attribute", "removeRasterTile", "cameraByMap", "conformModelToTerrain", "setTerrainHeight", "destroyTexture", "renderEmpty", "disposeMesh", "onRemove3DLayer", "init_cameraByMap", "loadTerrainTiles", "state", "backend", "archive", "controller", "tiles", "coords", "result", "getZxy", "sceneByLayer", "readBridges", "response", "init_L", "terrainTileQueue", "backend", "header", "scene", "sceneByLayer", "map", "archiveNorthWest", "northwest", "archiveSouthEast", "southeast", "L", "tiles", "center", "x", "y", "compareDistance", "init_radians", "init_L", "local", "lng", "lat", "z", "crs", "origin", "metres", "base", "p", "L", "bridgePaths", "rings", "pixels", "paths", "start", "ring", "path", "i", "indexBridge", "backend", "pixels", "triangles", "bridgeTriangles", "minX", "minY", "maxX", "maxY", "t", "triangle", "i", "p", "x", "y", "key", "bucket", "bridge", "sceneByLayer", "bridgeFaces", "context", "points", "triangles", "position", "normal", "color", "b", "c", "pa", "pb", "pc", "i", "k", "p", "bridgeEdge", "context", "p", "q", "position", "normal", "color", "length", "nx", "nz", "k", "corner", "bridgeSides", "context", "points", "rings", "start", "ring", "i", "bridgeEdge", "bridgePolygon", "context", "polygon", "backend", "map", "zoom", "crs", "origin", "metres", "base", "rings", "ring", "path", "lng", "lat", "z", "p", "coordinate", "paths", "contour", "holes", "triangles", "pixels", "points", "local", "bridgePaths", "triangulate", "indexBridge", "bridgeFaces", "bridgeSides", "addBridges", "backend", "geojson", "map", "crs", "zoom", "sceneByLayer", "origin", "metres", "radians", "base", "position", "normal", "color", "context", "geometry", "polygons", "polygonIndex", "bridgePolygon", "createMesh", "applyTerrain", "backend", "map", "bridges", "scene", "sceneByLayer", "getElevation", "layer", "setTerrainHeight", "conformModelToTerrain", "addBridges", "update", "loadTerrain", "backend", "sceneByLayer", "controller", "i", "archive", "createLayer", "header", "map", "tiles", "terrainTileQueue", "state", "workers", "loadTerrainTiles", "bridges", "readBridges", "applyTerrain", "error", "loadReadyTerrain", "loadTerrain", "setLayerTerrain", "layer", "sceneByLayer", "setRasterTerrain", "onTerrainAdd", "backend", "map", "cameraByMap", "onAdd3DLayer", "sceneByLayer", "loadTerrain", "pending", "loadReadyTerrain", "setLayerTerrain", "initTerrain", "layer", "options", "terrainSource", "layerOptions", "init3D", "sceneByLayer", "init_L", "init_cameraByMap", "sunlightByControl", "sunByMap", "init_L", "init_radians", "init_cameraByMap", "init_mapGetPitch", "init_mapGetBearing", "projectCelestialBody", "dir", "size", "pitch", "bearing", "target", "x", "y", "z", "forward", "updateCelestialDisc", "disc", "body", "sky", "size", "pitch", "bearing", "projection", "point", "projectCelestialBody", "left", "top", "updateSky", "map", "originalSky", "sunDisc", "moonDisc", "projection", "sun", "cameraByMap", "sky", "size", "pitch", "mapGetPitch", "radians", "bearing", "mapGetBearing", "updateCelestialDisc", "init_cameraByMap", "atmosphereStops", "atmosphereColor", "mix", "a", "b", "t", "values", "rgb", "values", "rounded", "i", "atmosphere", "altitude", "stops", "atmosphereStops", "upper", "i", "b", "a", "t", "rgb", "mix", "atmosphereColor", "solarTime", "date", "lat", "lng", "time", "init_radians", "horizontalPosition", "d", "lat", "lng", "ascension", "declination", "hourAngle", "radians", "latitude", "altitude", "azimuth", "init_radians", "init_radians", "sinObliquity", "radians", "init_radians", "cosObliquity", "radians", "moonPosition", "date", "lat", "lng", "d", "solarTime", "anomaly", "radians", "longitude", "latitude", "x", "y", "cosObliquity", "sinObliquity", "z", "horizontalPosition", "init_radians", "solarPosition", "date", "lat", "lng", "d", "solarTime", "mean", "radians", "longitude", "declination", "sinObliquity", "ascension", "cosObliquity", "horizontalPosition", "render", "map", "renderer", "renderers", "update", "updateSun", "state", "control", "map", "date", "slider", "output", "status", "time", "center", "sun", "cameraByMap", "solarPosition", "atmosphere", "moonPosition", "updateSky", "render", "error", "useLiveTime", "state", "updateSun", "init_cameraByMap", "useSelectedTime", "state", "control", "map", "date", "slider", "status", "cameraByMap", "updateSky", "render", "updateSun", "createSun", "map", "disc", "sunDisc", "L", "moonDisc", "container", "date", "slider", "output", "now", "timeRow", "status", "note", "state", "updateSun", "updateSky", "useLiveTime", "useSelectedTime", "tickSun", "state", "updateSun", "onAddSun", "control", "map", "state", "sunByMap", "createSun", "cameraByMap", "sunlightByControl", "tickSun", "init_L", "addTimeLayer", "map", "sceneByLayer", "init_L", "removeTimeLayer", "L", "sceneByLayer", "initialize", "options", "L", "sceneByLayer", "onAdd", "map", "onAddSun", "init_L", "styleTimeControl", "container", "nested", "addTo", "map", "L", "container", "underEntry", "styleTimeControl", "init_L", "remove", "L", "init_cameraByMap", "removeSun", "state", "map", "timer", "sunDisc", "moonDisc", "shared", "sunByMap", "cameraByMap", "updateSky", "render", "onRemoveSun", "sunlight", "sunlightByControl", "removeSun", "L", "initialize", "onAdd", "onRemoveSun", "addTo", "remove", "init_L", "trafficEmptyOptions", "paints", "dark", "skin", "trousers", "box", "x0", "x1", "z0", "z1", "bicycleModel", "index", "paint", "paints", "box", "dark", "skin", "trousers", "shirt", "parts", "box", "trousers", "shirt", "skin", "dark", "pedestrianModel", "index", "model", "parts", "paints", "box", "trousers", "skin", "routeColor", "properties", "color", "value", "glass", "white", "tyre", "headlight", "taillight", "carriage", "center", "length", "color", "front", "rear", "box", "glass", "white", "tyre", "headlight", "taillight", "busModel", "index", "properties", "carriage", "routeColor", "tramModel", "index", "properties", "color", "routeColor", "parts", "car", "carriage", "metroModel", "index", "properties", "color", "routeColor", "parts", "car", "carriage", "mirror", "x0", "x1", "z0", "z1", "rest", "box", "carModel", "i", "paint", "paints", "mirror", "tyre", "box", "glass", "headlight", "taillight", "hull", "boatBenches", "benches", "i", "mirror", "boatModel", "hull", "white", "box", "glass", "mirror", "boatBenches", "vehicles", "bicycleModel", "pedestrianModel", "busModel", "tramModel", "metroModel", "carModel", "boatModel", "trafficShader", "triangle", "position", "normal", "color", "a", "b", "c", "tint", "ux", "uy", "uz", "vx", "vy", "vz", "nx", "ny", "nz", "length", "i", "point", "build", "parts", "position", "normal", "color", "low", "high", "ring", "bottom", "top", "tint", "topRing", "x", "z", "i", "j", "triangle", "tooltip", "p", "content", "text", "startTraffic", "state", "underEntry", "addTraffic", "state", "trafficByLayer", "startTraffic", "disposeTrafficObject", "state", "object", "sceneByLayer", "setHighlight", "showFeature", "disposeMesh", "destroyTrafficGpu", "state", "removeTraffic", "state", "disposeTrafficObject", "trafficByLayer", "destroyTrafficGpu", "readyTraffic", "state", "startTraffic", "init_cameraByMap", "trafficNow", "state", "control", "cameraByMap", "live", "vehicleOffsets", "length", "flow", "velocity", "count", "offsets", "i", "trafficClocks", "clockMinutes", "clockTime", "parts", "compareDepartures", "a", "b", "scheduledTrips", "date", "timeZone", "duration", "services", "time", "clock", "trafficClocks", "parts", "part", "from", "to", "every", "months", "weekdays", "departure", "minute", "weekday", "departures", "clockMinutes", "compareDepartures", "trips", "tripsAt", "time", "lanes", "velocity", "trips", "l", "lane", "timetable", "flow", "trip", "travelled", "offsets", "k", "scheduledTrips", "vehicleOffsets", "failTraffic", "state", "error", "trafficRouteMaterial", "appendRouteDash", "position", "normal", "color", "a", "b", "dx", "dz", "x", "z", "start", "end", "r", "g", "blue", "px", "pz", "py", "qx", "qz", "qy", "vertex", "appendRouteSegment", "position", "normal", "color", "points", "lengths", "i", "r", "g", "blue", "a", "b", "dx", "dz", "length", "x", "z", "distance", "start", "end", "appendRouteDash", "routeGeometry", "lanes", "position", "normal", "color", "points", "lengths", "properties", "raw", "rgb", "r", "g", "blue", "i", "appendRouteSegment", "createTrafficMesh", "state", "data", "featureFaces", "material", "usage", "result", "createMesh", "drawTrafficRoute", "state", "createTrafficMesh", "routeGeometry", "trafficRouteMaterial", "trafficBounds", "state", "radius", "height", "i", "lane", "x", "z", "y", "data", "extent", "computeBounds", "rebuildTrafficMesh", "state", "trips", "model", "vertices", "disposeTrafficObject", "color", "featureFaces", "i", "trip", "component", "build", "count", "createTrafficMesh", "trafficEmptyOptions", "trafficBounds", "trafficStorage", "device", "data", "buffer", "uploadTrafficLanes", "state", "device", "lane", "i", "point", "count", "data", "offset", "trafficStorage", "rebaseTraffic", "state", "device", "sceneByLayer", "destroyTrafficGpu", "template", "trafficStorage", "i", "trip", "binding", "uploadTrafficLanes", "data", "index", "position", "normal", "entries", "buffer", "trafficStatusText", "state", "valid", "refreshTrafficTrips", "state", "time", "ms", "valid", "text", "tripsAt", "trafficStatusText", "error", "failTraffic", "key", "trip", "routeNeeded", "changed", "drawTrafficRoute", "rebuildTrafficMesh", "rebaseTraffic", "moveTraffic", "state", "seconds", "device", "encoder", "pass", "updateTrafficLights", "state", "lights", "trip", "x", "y", "z", "dx", "dz", "lx", "ly", "lz", "light", "locateTraffic", "updateTrafficPose", "state", "ms", "live", "moveTraffic", "updateTrafficLights", "tickTraffic", "state", "sceneByLayer", "live", "time", "trafficNow", "ms", "valid", "changed", "refreshTrafficTrips", "updateTrafficPose", "update", "fetchTrafficLanes", "state", "time", "signal", "href", "response", "trafficEmptyList", "toLanes", "features", "trafficEmptyList", "lanes", "geometry", "properties", "lines", "line", "latlngs", "lng", "lat", "i", "init_radians", "init_L", "init_cameraByMap", "groundTraffic", "state", "layer", "lanes", "terrain", "sceneByLayer", "cameraByMap", "base", "lane", "i", "elevation", "getElevation", "prepareTraffic", "state", "layer", "lanes", "crs", "origin", "sceneByLayer", "metres", "radians", "lane", "lat", "lng", "point", "i", "L", "groundTraffic", "disposeTrafficObject", "loadedTrafficLanes", "state", "signal", "data", "toLanes", "prepareTraffic", "failedTrafficLoad", "state", "signal", "error", "failTraffic", "loadTraffic", "state", "time", "trafficNow", "signal", "fetchTrafficLanes", "loadedTrafficLanes", "failedTrafficLoad", "updateTraffic", "state", "event", "sceneByLayer", "loadTraffic", "updateTrafficTerrain", "state", "groundTraffic", "disposeTrafficObject", "trafficBounds", "initTraffic", "layer", "url", "vehicle", "side", "outline", "velocity", "options", "trafficEmptyOptions", "model", "lights", "defaultSide", "vehicles", "init3D", "tooltip", "status", "L", "template", "build", "stride", "vertices", "params", "paramFloats", "paramInts", "state", "trafficShader", "tickTraffic", "updateTraffic", "updateTrafficTerrain", "trafficByLayer", "readyTraffic", "addTraffic", "removeTraffic", "init_L", "init_L", "init_L", "onBlur", "moves", "init_L", "init_mapSetPitch", "init_mapSetPitchAndBearing", "init_mapGetPitch", "init_mapGetBearing", "onPointer", "event", "map", "mapSetPitchAndBearing", "mapGetPitch", "mapGetBearing", "limbs", "init_radians", "init_cameraByMap", "local", "output", "layer", "state", "map", "crs", "origin", "sceneByLayer", "metres", "radians", "p", "terrain", "cameraByMap", "ground", "getElevation", "place", "x", "y", "z", "local", "yaw", "cos", "sin", "i", "px", "py", "sign", "mesh", "limbs", "update", "onTerrain", "place", "stop", "map", "L", "mesh", "name", "disposeMesh", "mapSetPitch", "onKey", "event", "moves", "init_radians", "init_L", "sceneWalkHandlers", "init_mapGetPitch", "init_mapGetBearing", "init_mapSetPitch", "wrap", "angle", "shouldSkipOther", "other", "layer", "sceneByLayer", "land", "previousY", "state", "sceneByLayer", "ray", "feet", "local", "root", "x", "y", "z", "updateWorldMatrix", "layer", "hit", "shouldSkipOther", "traverse", "collectVisibleMesh", "intersectMeshes", "init_L", "init_radians", "colliders", "transformTriangle", "v", "p", "index", "i", "m", "k", "j", "x", "y", "z", "indexTriangle", "cells", "v", "t", "ix", "iz", "key", "collider", "mesh", "c", "colliders", "m", "p", "index", "normal", "uv", "count", "tri", "nrm", "cells", "v", "i", "first", "j", "ex", "ey", "ez", "fx", "fy", "fz", "nx", "nz", "ny", "length", "a", "h", "t", "transformTriangle", "indexTriangle", "horizontalRay", "v", "ox", "oy", "oz", "dx", "dz", "i", "ex", "ey", "ez", "fx", "fy", "fz", "px", "py", "pz", "det", "tx", "ty", "tz", "u", "qx", "qy", "qz", "w", "hitColliderCell", "cell", "c", "data", "ox", "oy", "oz", "dx", "dz", "seen", "t", "height", "d", "horizontalRay", "hitMesh", "mesh", "data", "computeBounds", "m", "k", "radius", "x", "y", "z", "dx", "dz", "reach", "collider", "ox", "oy", "oz", "ix", "iz", "cell", "hitColliderCell", "hit", "layer", "x", "y", "z", "dx", "dz", "reach", "data", "updateWorldMatrix", "sceneByLayer", "other", "shouldSkipOther", "traverse", "hitMesh", "blocked", "east", "north", "feet", "length", "hit", "moveWalker", "forward", "dt", "metres", "lat", "lng", "position", "scale", "sceneByLayer", "east", "north", "feet", "local", "i", "wall", "blocked", "into", "L", "radians", "stepWalkerHeight", "dt", "init_degrees", "init_radians", "init_mapGetBearing", "init_mapSetPitchAndBearing", "init_mapGetPitch", "updateWalkerView", "forward", "turn", "dt", "map", "bearing", "mapGetBearing", "radians", "behind", "wrap", "mapSetPitchAndBearing", "mapGetPitch", "degrees", "target", "step", "now", "layer", "dt", "sceneByLayer", "changed", "part", "key", "limbs", "createMesh", "build", "parts", "previousY", "local", "stepWalkerHeight", "forward", "turn", "moves", "wrap", "moveWalker", "land", "updateWalkerView", "place", "start", "map", "pixelsPerMetre", "zoom", "earthCirc", "radians", "name", "mapGetPitch", "sceneWalkHandlers", "mapGetBearing", "mapSetPitch", "L", "toggle", "stop", "start", "createWalk", "control", "speed", "distance", "options", "layer", "L", "sceneByLayer", "init3D", "keys", "container", "button", "hint", "context", "step", "onKey", "onBlur", "onPointer", "onTerrain", "start", "stop", "toggle", "initialize", "options", "L", "createWalk", "onAdd", "map", "state", "walkByMap", "onRemove", "map", "state", "walkByMap", "L", "initialize", "onAdd", "onRemove", "init_L", "closestMethods", "boundsMethods", "gridInitializers", "emptyEvents", "closestCameraLayerPoint", "point", "closestMethods", "cameraCircleBounds", "boundsMethods", "initializeGridContainer", "gridInitializers", "pendingGridFades", "gridFadeFrame", "cancelGridFade", "layer", "pendingGridFades", "sceneByLayer", "gridFadeFrame", "runGridFades", "gridFadeFrame", "layers", "pendingGridFades", "layer", "version", "sceneByLayer", "updateGridOpacity", "scheduleGridFade", "layer", "sceneByLayer", "pendingGridFades", "gridFadeFrame", "runGridFades", "updateGridOpacity", "layer", "now", "fading", "prune", "key", "tile", "refreshNativeLayerContract", "cancelGridFade", "scheduleGridFade", "pendingRasterLoads", "fireRasterLoad", "pendingRasterLoads", "addRasterImage", "pendingRasterLoads", "fireRasterLoad", "redrawPath", "refreshNativeLayerContract", "initializeNativeLayer", "L", "noOperation", "redrawPath", "sceneByLayer", "closestMethods", "closestCameraLayerPoint", "boundsMethods", "cameraCircleBounds", "gridInitializers", "initializeGridContainer", "updateGridOpacity", "refreshNativeLayerContract", "init_L", "removeLayerEvents", "state", "sceneByLayer", "addSceneLayer", "layer", "map", "sceneByLayer", "onAdd3DLayer", "onPMTileAdd", "onTerrainAdd", "addRasterImage", "addTimeLayer", "init_L", "isNativeLayer", "layer", "sceneByLayer", "L", "layerLayerAdd", "event", "native", "isNativeLayer", "L", "map", "state", "sceneByLayer", "getRasterEvents", "get3DEvents", "emptyEvents", "removeLayerEvents", "addSceneLayer", "layerProto", "initNativeGPU", "init_L", "pendingInitializations", "loading", "initializeGeoJSON", "layer", "options", "sceneByLayer", "init3D", "validateCogRange", "source", "offset", "length", "validateCogContentRange", "source", "range", "rangeStart", "length", "invalidCogFullResponse", "response", "validateCogResponse", "source", "response", "rangeStart", "length", "etag", "range", "validateCogContentRange", "invalidCogFullResponse", "readCogBody", "response", "length", "reader", "chunks", "total", "part", "data", "start", "chunk", "readCog", "source", "offset", "length", "signal", "validateCogRange", "rangeStart", "response", "validateCogResponse", "data", "readCogBody", "result", "cogTags", "readCogTag", "source", "entries", "i", "tag", "little", "type", "size", "length", "data", "readCog", "values", "j", "readCogDirectory", "source", "offset", "little", "count", "readCog", "entries", "tags", "i", "tag", "cogTags", "readCogTag", "validCogDimensions", "tags", "width", "height", "validCogEncoding", "tags", "samples", "bits", "format", "elevation", "bytes", "unsigned", "getCogProfile", "tags", "width", "height", "samples", "bits", "format", "bytes", "unsigned", "floating", "value", "elevation", "validCogDimensions", "validCogEncoding", "hasCogProjection", "keys", "projected", "area", "i", "finiteCogValues", "values", "value", "validCogGeoArrays", "keys", "scale", "tie", "finiteCogValues", "getCogBase", "tags", "width", "height", "elevation", "keys", "scale", "tie", "validCogGeoArrays", "hasCogProjection", "validCogGrid", "source", "base", "profile", "zoom", "x", "y", "resolution", "validateCogOffsets", "source", "level", "i", "readCogLevel", "source", "directory", "state", "tags", "profile", "getCogProfile", "getCogBase", "base", "resolution", "zoom", "span", "x", "y", "validCogGrid", "level", "validateCogOffsets", "readCogDirectories", "source", "offset", "state", "seen", "directory", "readCogDirectory", "readCogLevel", "decodeCogTile", "data", "length", "compression", "reader", "result", "offset", "chunk", "readCogBlock", "source", "level", "x", "y", "signal", "index", "decodeCogTile", "readCog", "getElevationTile", "source", "level", "x", "y", "signal", "data", "readCogBlock", "view", "heights", "i", "height", "getColorTile", "source", "level", "x", "y", "signal", "canvas", "context", "left", "top", "bx", "by", "pixels", "rgba", "i", "j", "bitmap", "readCogBlock", "image", "validCogTileCoordinates", "z", "x", "y", "getCogTile", "source", "z", "x", "y", "signal", "validCogTileCoordinates", "level", "getElevationTile", "getColorTile", "getCogHeader", "source", "validateCogContainer", "container", "header", "getCogAssetEntry", "container", "header", "asset", "metadata", "decompress", "readCog", "assets", "entry", "openCogAsset", "url", "asset", "container", "header", "decodeHeader", "readCog", "validateCogContainer", "entry", "getCogAssetEntry", "baseOffset", "openCog", "url", "asset", "source", "openCogAsset", "header", "readCog", "order", "base", "minZoom", "maxZoom", "readCogDirectories", "half", "left", "right", "top", "bottom", "getCogHeader", "getCogTile", "initCog", "layer", "options", "initRaster", "openCog", "initializerFor", "type", "initializeGeoJSON", "initRaster", "initCog", "initTerrain", "initTraffic", "resolveNextInitialization", "task", "pendingInitializations", "initializerFor", "initializeLayer", "task", "layer", "ready", "reportError", "map", "sceneByLayer", "error", "layerInitialize", "options", "sceneEmptyOptions", "sceneByLayer", "L", "layerProto", "type", "source", "core", "settings", "init3D", "task", "pendingInitializations", "loading", "noOperation", "resolveNextInitialization", "ready", "initializeLayer", "init_L", "removeSceneLayer", "layer", "map", "sceneByLayer", "onRemove3DLayer", "onPMTileRemove", "onTerrainRemove", "removeTimeLayer", "removeLayer", "layer", "id", "L", "sceneByLayer", "removeSceneLayer", "init_mapGetPitch", "getPitch", "mapGetPitch", "init_mapGetBearing", "getBearing", "mapGetBearing", "markerSetRotation", "marker", "rotation", "refreshNativeLayerContract", "setRotation", "rotation", "markerSetRotation", "layerCallInitHooks", "sceneByLayer", "initialized", "initializeNativeLayer", "layerProto", "L", "layerCallInitHooks", "layerInitialize", "layerLayerAdd", "removeLayer", "getPitch", "getBearing", "setRotation"]
7
7
  }