tangram-core 0.2.0__cp313-cp313-win_amd64.whl

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 (171) hide show
  1. tangram_core/App.vue +335 -0
  2. tangram_core/__init__.py +5 -0
  3. tangram_core/__main__.py +141 -0
  4. tangram_core/_core.cp313-win_amd64.pyd +0 -0
  5. tangram_core/_core.pyi +38 -0
  6. tangram_core/api.ts +456 -0
  7. tangram_core/backend.py +335 -0
  8. tangram_core/colour.ts +71 -0
  9. tangram_core/config.py +122 -0
  10. tangram_core/dist-frontend/aggregation-layers.js +521 -0
  11. tangram_core/dist-frontend/aggregation-layers.js.map +1 -0
  12. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js +2 -0
  13. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
  14. tangram_core/dist-frontend/assets/array-utils-flat-wyE8tIYR.js +11 -0
  15. tangram_core/dist-frontend/assets/array-utils-flat-wyE8tIYR.js.map +1 -0
  16. tangram_core/dist-frontend/assets/assert-hrfsarFU.js +3 -0
  17. tangram_core/dist-frontend/assets/assert-hrfsarFU.js.map +1 -0
  18. tangram_core/dist-frontend/assets/b612-latin-400-italic-DePNXA0a.woff +0 -0
  19. tangram_core/dist-frontend/assets/b612-latin-400-italic-a-4GLPtl.woff2 +0 -0
  20. tangram_core/dist-frontend/assets/b612-latin-400-normal-CC98FVm_.woff2 +0 -0
  21. tangram_core/dist-frontend/assets/b612-latin-400-normal-JbZ7xwUX.woff +0 -0
  22. tangram_core/dist-frontend/assets/b612-latin-700-normal-B_Snq1wd.woff +0 -0
  23. tangram_core/dist-frontend/assets/b612-latin-700-normal-BinQrnoB.woff2 +0 -0
  24. tangram_core/dist-frontend/assets/clip-extension-DTCP51Ak.js +26 -0
  25. tangram_core/dist-frontend/assets/clip-extension-DTCP51Ak.js.map +1 -0
  26. tangram_core/dist-frontend/assets/color-CUNNsFV-.js +17 -0
  27. tangram_core/dist-frontend/assets/color-CUNNsFV-.js.map +1 -0
  28. tangram_core/dist-frontend/assets/cube-geometry-CzJ_uBWa.js +2 -0
  29. tangram_core/dist-frontend/assets/cube-geometry-CzJ_uBWa.js.map +1 -0
  30. tangram_core/dist-frontend/assets/deep-equal-uriyKJca.js +2 -0
  31. tangram_core/dist-frontend/assets/deep-equal-uriyKJca.js.map +1 -0
  32. tangram_core/dist-frontend/assets/fly-to-interpolator-DlKiy9_S.js +2 -0
  33. tangram_core/dist-frontend/assets/fly-to-interpolator-DlKiy9_S.js.map +1 -0
  34. tangram_core/dist-frontend/assets/geojson-layer-CLhXLxdI.js +1010 -0
  35. tangram_core/dist-frontend/assets/geojson-layer-CLhXLxdI.js.map +1 -0
  36. tangram_core/dist-frontend/assets/globe-view-DKhftlA1.js +94 -0
  37. tangram_core/dist-frontend/assets/globe-view-DKhftlA1.js.map +1 -0
  38. tangram_core/dist-frontend/assets/globe-viewport-CPES4D4P.js +2 -0
  39. tangram_core/dist-frontend/assets/globe-viewport-CPES4D4P.js.map +1 -0
  40. tangram_core/dist-frontend/assets/image-loader-ClbNCMXW.js +2 -0
  41. tangram_core/dist-frontend/assets/image-loader-ClbNCMXW.js.map +1 -0
  42. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-DTZQ6lD6.woff2 +0 -0
  43. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-HYADljCo.woff +0 -0
  44. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-ByjKuJjN.woff2 +0 -0
  45. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-DzgUY3Rl.woff +0 -0
  46. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-BaHVOdFB.woff2 +0 -0
  47. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-yvPjCxxx.woff +0 -0
  48. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-D0Kpgs_9.woff2 +0 -0
  49. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-Dlt-daqV.woff +0 -0
  50. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-ByiM2lek.woff +0 -0
  51. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-DfC_iMic.woff2 +0 -0
  52. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DLCFFAUf.woff +0 -0
  53. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DuasYmn8.woff2 +0 -0
  54. tangram_core/dist-frontend/assets/index-UPPakSLR.css +1 -0
  55. tangram_core/dist-frontend/assets/index-r8T0kY2p.js +821 -0
  56. tangram_core/dist-frontend/assets/index-r8T0kY2p.js.map +1 -0
  57. tangram_core/dist-frontend/assets/layer-DO63TrsS.js +555 -0
  58. tangram_core/dist-frontend/assets/layer-DO63TrsS.js.map +1 -0
  59. tangram_core/dist-frontend/assets/layer-extension-CZ3zsHuN.js +2 -0
  60. tangram_core/dist-frontend/assets/layer-extension-CZ3zsHuN.js.map +1 -0
  61. tangram_core/dist-frontend/assets/mesh-layers-BSECKarm.js +1123 -0
  62. tangram_core/dist-frontend/assets/mesh-layers-BSECKarm.js.map +1 -0
  63. tangram_core/dist-frontend/assets/orthographic-viewport-CzZmHDEZ.js +2 -0
  64. tangram_core/dist-frontend/assets/orthographic-viewport-CzZmHDEZ.js.map +1 -0
  65. tangram_core/dist-frontend/assets/pick-layers-pass-xhWsgZtf.js +2 -0
  66. tangram_core/dist-frontend/assets/pick-layers-pass-xhWsgZtf.js.map +1 -0
  67. tangram_core/dist-frontend/assets/project-CrvReKGW.js +760 -0
  68. tangram_core/dist-frontend/assets/project-CrvReKGW.js.map +1 -0
  69. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-4qS3_zkX.woff2 +0 -0
  70. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-CDK-EZBY.woff +0 -0
  71. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-Bgns473E.woff +0 -0
  72. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-_T2aQlWs.woff2 +0 -0
  73. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-CvEVpWxD.woff +0 -0
  74. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-s4PklZE0.woff2 +0 -0
  75. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-9RN-Z7cI.woff2 +0 -0
  76. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-BGMkBBYx.woff +0 -0
  77. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-C7erd-g8.woff +0 -0
  78. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-DR5R5TWx.woff2 +0 -0
  79. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-DGo1Ayjq.woff2 +0 -0
  80. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-WtM1l1qc.woff +0 -0
  81. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-C8FNIdXm.woff2 +0 -0
  82. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-TLDmfi3Q.woff +0 -0
  83. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CTXjXnze.woff2 +0 -0
  84. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CWPRiRXS.woff +0 -0
  85. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-CR6qj4Z4.woff2 +0 -0
  86. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-DHRaIs10.woff +0 -0
  87. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-D5vBSIyg.woff2 +0 -0
  88. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-FabMgVmk.woff +0 -0
  89. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-BIN62cw9.woff +0 -0
  90. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-Hsn-wDIp.woff2 +0 -0
  91. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-89Up2Xly.woff +0 -0
  92. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-DWMOA2VK.woff2 +0 -0
  93. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-D_BR-3LG.woff2 +0 -0
  94. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-om57GXsO.woff +0 -0
  95. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-BICmKrXV.woff2 +0 -0
  96. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-D2e7XwB1.woff +0 -0
  97. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-3p2daRJW.woff2 +0 -0
  98. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-Dc9bsamC.woff +0 -0
  99. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-BOl6B_hI.woff +0 -0
  100. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-DRbp0YnP.woff2 +0 -0
  101. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-BXrkWnoY.woff +0 -0
  102. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-Bhem1d5z.woff2 +0 -0
  103. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-DT8nEsYA.woff +0 -0
  104. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-OHaX69iP.woff2 +0 -0
  105. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-CcSTXKtO.woff2 +0 -0
  106. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-JgPl2bDS.woff +0 -0
  107. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-B004qtqu.woff2 +0 -0
  108. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-O6H_RRvN.woff +0 -0
  109. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-BwUYFJ2t.woff2 +0 -0
  110. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-DV8QogUk.woff +0 -0
  111. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-0o1laQ-g.woff2 +0 -0
  112. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-CPsdS8_S.woff +0 -0
  113. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-G9shSJ2z.woff +0 -0
  114. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-TFWhjk13.woff2 +0 -0
  115. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-BtNeb9D6.woff +0 -0
  116. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-D35V1G0s.woff2 +0 -0
  117. tangram_core/dist-frontend/assets/shader-BJmsOfPx.js +843 -0
  118. tangram_core/dist-frontend/assets/shader-BJmsOfPx.js.map +1 -0
  119. tangram_core/dist-frontend/assets/solid-polygon-layer-DiarVGxh.js +392 -0
  120. tangram_core/dist-frontend/assets/solid-polygon-layer-DiarVGxh.js.map +1 -0
  121. tangram_core/dist-frontend/assets/tesselator-49Dw9L5A.js +2 -0
  122. tangram_core/dist-frontend/assets/tesselator-49Dw9L5A.js.map +1 -0
  123. tangram_core/dist-frontend/assets/webgl-developer-tools-CZl8qVFg.js +7 -0
  124. tangram_core/dist-frontend/assets/webgl-developer-tools-CZl8qVFg.js.map +1 -0
  125. tangram_core/dist-frontend/assets/webgl-device-BY0-CUP6.js +3 -0
  126. tangram_core/dist-frontend/assets/webgl-device-BY0-CUP6.js.map +1 -0
  127. tangram_core/dist-frontend/assets/widget-BbOeHGj0.js +2 -0
  128. tangram_core/dist-frontend/assets/widget-BbOeHGj0.js.map +1 -0
  129. tangram_core/dist-frontend/core.js +60 -0
  130. tangram_core/dist-frontend/core.js.map +1 -0
  131. tangram_core/dist-frontend/extensions.js +609 -0
  132. tangram_core/dist-frontend/extensions.js.map +1 -0
  133. tangram_core/dist-frontend/favicon.ico +0 -0
  134. tangram_core/dist-frontend/favicon.png +0 -0
  135. tangram_core/dist-frontend/font-awesome.min.css +4 -0
  136. tangram_core/dist-frontend/fonts/FontAwesome.otf +0 -0
  137. tangram_core/dist-frontend/fonts/fontawesome-webfont.eot +0 -0
  138. tangram_core/dist-frontend/fonts/fontawesome-webfont.svg +2671 -0
  139. tangram_core/dist-frontend/fonts/fontawesome-webfont.ttf +0 -0
  140. tangram_core/dist-frontend/fonts/fontawesome-webfont.woff +0 -0
  141. tangram_core/dist-frontend/fonts/fontawesome-webfont.woff2 +0 -0
  142. tangram_core/dist-frontend/geo-layers.js +115 -0
  143. tangram_core/dist-frontend/geo-layers.js.map +1 -0
  144. tangram_core/dist-frontend/index.html +38 -0
  145. tangram_core/dist-frontend/json.js +3 -0
  146. tangram_core/dist-frontend/json.js.map +1 -0
  147. tangram_core/dist-frontend/layers.js +268 -0
  148. tangram_core/dist-frontend/layers.js.map +1 -0
  149. tangram_core/dist-frontend/lit-html.js +7 -0
  150. tangram_core/dist-frontend/lit-html.js.map +1 -0
  151. tangram_core/dist-frontend/mapbox.js +2 -0
  152. tangram_core/dist-frontend/mapbox.js.map +1 -0
  153. tangram_core/dist-frontend/maplibre-gl.js +59 -0
  154. tangram_core/dist-frontend/maplibre-gl.js.map +1 -0
  155. tangram_core/dist-frontend/mesh-layers.js +2 -0
  156. tangram_core/dist-frontend/mesh-layers.js.map +1 -0
  157. tangram_core/dist-frontend/rs1090_wasm.js +813 -0
  158. tangram_core/dist-frontend/rs1090_wasm_bg.wasm +0 -0
  159. tangram_core/dist-frontend/vue.esm-browser.prod.js +13 -0
  160. tangram_core/dist-frontend/widgets.js +3 -0
  161. tangram_core/dist-frontend/widgets.js.map +1 -0
  162. tangram_core/main.ts +16 -0
  163. tangram_core/plugin.py +70 -0
  164. tangram_core/plugin.ts +41 -0
  165. tangram_core/redis.py +89 -0
  166. tangram_core/user.css +114 -0
  167. tangram_core/vite-plugin-tangram.mjs +88 -0
  168. tangram_core-0.2.0.dist-info/METADATA +37 -0
  169. tangram_core-0.2.0.dist-info/RECORD +171 -0
  170. tangram_core-0.2.0.dist-info/WHEEL +4 -0
  171. tangram_core-0.2.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geojson-layer-CLhXLxdI.js","sources":["../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/arc-layer/arc-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/arc-layer/arc-layer-vertex.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/arc-layer/arc-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/arc-layer/arc-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/bitmap-layer/create-mesh.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/bitmap-layer/bitmap-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/bitmap-layer/bitmap-layer-vertex.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/bitmap-layer/bitmap-layer-fragment.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/bitmap-layer/bitmap-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/icon-layer/icon-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/icon-layer/icon-layer-vertex.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/icon-layer/icon-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/icon-layer/icon-manager.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/icon-layer/icon-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/point-cloud-layer/point-cloud-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/point-cloud-layer/point-cloud-layer-vertex.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/point-cloud-layer/point-cloud-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/point-cloud-layer/point-cloud-layer.wgsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/point-cloud-layer/point-cloud-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/scatterplot-layer/scatterplot-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/scatterplot-layer/scatterplot-layer-vertex.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/scatterplot-layer/scatterplot-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/scatterplot-layer/scatterplot-layer.wgsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/scatterplot-layer/scatterplot-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/utils.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/polygon-layer/polygon-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/geojson-layer/geojson-binary.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/multi-icon-layer/sdf-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/multi-icon-layer/multi-icon-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/multi-icon-layer/multi-icon-layer.js","../../../../../../node_modules/.pnpm/@mapbox+tiny-sdf@2.0.7/node_modules/@mapbox/tiny-sdf/index.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/utils.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/lru-cache.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/font-atlas-manager.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/text-background-layer/text-background-layer-uniforms.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/text-background-layer/text-background-layer-vertex.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/text-background-layer/text-background-layer-fragment.glsl.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/text-background-layer/text-background-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/text-layer/text-layer.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/geojson-layer/sub-layer-map.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/geojson-layer/geojson.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/geojson-layer/geojson-layer-props.js","../../../../../../node_modules/.pnpm/@deck.gl+layers@9.2.2_@deck.gl+core@9.2.2_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.4_@l_7c6c451d1cd7df4d1061915e19ef692b/node_modules/@deck.gl/layers/dist/geojson-layer/geojson-layer.js"],"sourcesContent":["// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform arcUniforms {\n bool greatCircle;\n bool useShortestPath;\n float numSegments;\n float widthScale;\n float widthMinPixels;\n float widthMaxPixels;\n highp int widthUnits;\n} arc;\n`;\nexport const arcUniforms = {\n name: 'arc',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n greatCircle: 'f32',\n useShortestPath: 'f32',\n numSegments: 'f32',\n widthScale: 'f32',\n widthMinPixels: 'f32',\n widthMaxPixels: 'f32',\n widthUnits: 'i32'\n }\n};\n//# sourceMappingURL=arc-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME arc-layer-vertex-shader\nin vec4 instanceSourceColors;\nin vec4 instanceTargetColors;\nin vec3 instanceSourcePositions;\nin vec3 instanceSourcePositions64Low;\nin vec3 instanceTargetPositions;\nin vec3 instanceTargetPositions64Low;\nin vec3 instancePickingColors;\nin float instanceWidths;\nin float instanceHeights;\nin float instanceTilts;\nout vec4 vColor;\nout vec2 uv;\nout float isValid;\nfloat paraboloid(float distance, float sourceZ, float targetZ, float ratio) {\nfloat deltaZ = targetZ - sourceZ;\nfloat dh = distance * instanceHeights;\nif (dh == 0.0) {\nreturn sourceZ + deltaZ * ratio;\n}\nfloat unitZ = deltaZ / dh;\nfloat p2 = unitZ * unitZ + 1.0;\nfloat dir = step(deltaZ, 0.0);\nfloat z0 = mix(sourceZ, targetZ, dir);\nfloat r = mix(ratio, 1.0 - ratio, dir);\nreturn sqrt(r * (p2 - r)) * dh + z0;\n}\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {\nvec2 dir_screenspace = normalize(line_clipspace * project.viewportSize);\ndir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\nreturn dir_screenspace * offset_direction * width / 2.0;\n}\nfloat getSegmentRatio(float index) {\nreturn smoothstep(0.0, 1.0, index / (arc.numSegments - 1.0));\n}\nvec3 interpolateFlat(vec3 source, vec3 target, float segmentRatio) {\nfloat distance = length(source.xy - target.xy);\nfloat z = paraboloid(distance, source.z, target.z, segmentRatio);\nfloat tiltAngle = radians(instanceTilts);\nvec2 tiltDirection = normalize(target.xy - source.xy);\nvec2 tilt = vec2(-tiltDirection.y, tiltDirection.x) * z * sin(tiltAngle);\nreturn vec3(\nmix(source.xy, target.xy, segmentRatio) + tilt,\nz * cos(tiltAngle)\n);\n}\nfloat getAngularDist (vec2 source, vec2 target) {\nvec2 sourceRadians = radians(source);\nvec2 targetRadians = radians(target);\nvec2 sin_half_delta = sin((sourceRadians - targetRadians) / 2.0);\nvec2 shd_sq = sin_half_delta * sin_half_delta;\nfloat a = shd_sq.y + cos(sourceRadians.y) * cos(targetRadians.y) * shd_sq.x;\nreturn 2.0 * asin(sqrt(a));\n}\nvec3 interpolateGreatCircle(vec3 source, vec3 target, vec3 source3D, vec3 target3D, float angularDist, float t) {\nvec2 lngLat;\nif(abs(angularDist - PI) < 0.001) {\nlngLat = (1.0 - t) * source.xy + t * target.xy;\n} else {\nfloat a = sin((1.0 - t) * angularDist);\nfloat b = sin(t * angularDist);\nvec3 p = source3D.yxz * a + target3D.yxz * b;\nlngLat = degrees(vec2(atan(p.y, -p.x), atan(p.z, length(p.xy))));\n}\nfloat z = paraboloid(angularDist * EARTH_RADIUS, source.z, target.z, t);\nreturn vec3(lngLat, z);\n}\nvoid main(void) {\ngeometry.worldPosition = instanceSourcePositions;\ngeometry.worldPositionAlt = instanceTargetPositions;\nfloat segmentIndex = float(gl_VertexID / 2);\nfloat segmentSide = mod(float(gl_VertexID), 2.) == 0. ? -1. : 1.;\nfloat segmentRatio = getSegmentRatio(segmentIndex);\nfloat prevSegmentRatio = getSegmentRatio(max(0.0, segmentIndex - 1.0));\nfloat nextSegmentRatio = getSegmentRatio(min(arc.numSegments - 1.0, segmentIndex + 1.0));\nfloat indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\nisValid = 1.0;\nuv = vec2(segmentRatio, segmentSide);\ngeometry.uv = uv;\ngeometry.pickingColor = instancePickingColors;\nvec4 curr;\nvec4 next;\nvec3 source;\nvec3 target;\nif ((arc.greatCircle || project.projectionMode == PROJECTION_MODE_GLOBE) && project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nsource = project_globe_(vec3(instanceSourcePositions.xy, 0.0));\ntarget = project_globe_(vec3(instanceTargetPositions.xy, 0.0));\nfloat angularDist = getAngularDist(instanceSourcePositions.xy, instanceTargetPositions.xy);\nvec3 prevPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, prevSegmentRatio);\nvec3 currPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, segmentRatio);\nvec3 nextPos = interpolateGreatCircle(instanceSourcePositions, instanceTargetPositions, source, target, angularDist, nextSegmentRatio);\nif (abs(currPos.x - prevPos.x) > 180.0) {\nindexDir = -1.0;\nisValid = 0.0;\n} else if (abs(currPos.x - nextPos.x) > 180.0) {\nindexDir = 1.0;\nisValid = 0.0;\n}\nnextPos = indexDir < 0.0 ? prevPos : nextPos;\nnextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\nif (isValid == 0.0) {\nnextPos.x += nextPos.x > 0.0 ? -360.0 : 360.0;\nfloat t = ((currPos.x > 0.0 ? 180.0 : -180.0) - currPos.x) / (nextPos.x - currPos.x);\ncurrPos = mix(currPos, nextPos, t);\nsegmentRatio = mix(segmentRatio, nextSegmentRatio, t);\n}\nvec3 currPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, segmentRatio);\nvec3 nextPos64Low = mix(instanceSourcePositions64Low, instanceTargetPositions64Low, nextSegmentRatio);\ncurr = project_position_to_clipspace(currPos, currPos64Low, vec3(0.0), geometry.position);\nnext = project_position_to_clipspace(nextPos, nextPos64Low, vec3(0.0));\n} else {\nvec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;\nif (arc.useShortestPath) {\nsource_world.x = mod(source_world.x + 180., 360.0) - 180.;\ntarget_world.x = mod(target_world.x + 180., 360.0) - 180.;\nfloat deltaLng = target_world.x - source_world.x;\nif (deltaLng > 180.) target_world.x -= 360.;\nif (deltaLng < -180.) source_world.x -= 360.;\n}\nsource = project_position(source_world, instanceSourcePositions64Low);\ntarget = project_position(target_world, instanceTargetPositions64Low);\nfloat antiMeridianX = 0.0;\nif (arc.useShortestPath) {\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\nantiMeridianX = -(project.coordinateOrigin.x + 180.) / 360. * TILE_SIZE;\n}\nfloat thresholdRatio = (antiMeridianX - source.x) / (target.x - source.x);\nif (prevSegmentRatio <= thresholdRatio && nextSegmentRatio > thresholdRatio) {\nisValid = 0.0;\nindexDir = sign(segmentRatio - thresholdRatio);\nsegmentRatio = thresholdRatio;\n}\n}\nnextSegmentRatio = indexDir < 0.0 ? prevSegmentRatio : nextSegmentRatio;\nvec3 currPos = interpolateFlat(source, target, segmentRatio);\nvec3 nextPos = interpolateFlat(source, target, nextSegmentRatio);\nif (arc.useShortestPath) {\nif (nextPos.x < antiMeridianX) {\ncurrPos.x += TILE_SIZE;\nnextPos.x += TILE_SIZE;\n}\n}\ncurr = project_common_position_to_clipspace(vec4(currPos, 1.0));\nnext = project_common_position_to_clipspace(vec4(nextPos, 1.0));\ngeometry.position = vec4(currPos, 1.0);\n}\nfloat widthPixels = clamp(\nproject_size_to_pixel(instanceWidths * arc.widthScale, arc.widthUnits),\narc.widthMinPixels, arc.widthMaxPixels\n);\nvec3 offset = vec3(\ngetExtrusionOffset((next.xy - curr.xy) * indexDir, segmentSide, widthPixels),\n0.0);\nDECKGL_FILTER_SIZE(offset, geometry);\nDECKGL_FILTER_GL_POSITION(curr, geometry);\ngl_Position = curr + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0);\nvec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio);\nvColor = vec4(color.rgb, color.a * layer.opacity);\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=arc-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME arc-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nin vec2 uv;\nin float isValid;\nout vec4 fragColor;\nvoid main(void) {\nif (isValid == 0.0) {\ndiscard;\n}\nfragColor = vColor;\ngeometry.uv = uv;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=arc-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, project32, picking, UNIT } from '@deck.gl/core';\nimport { Model } from '@luma.gl/engine';\nimport { arcUniforms } from \"./arc-layer-uniforms.js\";\nimport vs from \"./arc-layer-vertex.glsl.js\";\nimport fs from \"./arc-layer-fragment.glsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n getSourcePosition: { type: 'accessor', value: (x) => x.sourcePosition },\n getTargetPosition: { type: 'accessor', value: (x) => x.targetPosition },\n getSourceColor: { type: 'accessor', value: DEFAULT_COLOR },\n getTargetColor: { type: 'accessor', value: DEFAULT_COLOR },\n getWidth: { type: 'accessor', value: 1 },\n getHeight: { type: 'accessor', value: 1 },\n getTilt: { type: 'accessor', value: 0 },\n greatCircle: false,\n numSegments: { type: 'number', value: 50, min: 1 },\n widthUnits: 'pixels',\n widthScale: { type: 'number', value: 1, min: 0 },\n widthMinPixels: { type: 'number', value: 0, min: 0 },\n widthMaxPixels: { type: 'number', value: Number.MAX_SAFE_INTEGER, min: 0 }\n};\n/** Render raised arcs joining pairs of source and target coordinates. */\nclass ArcLayer extends Layer {\n getBounds() {\n return this.getAttributeManager()?.getBounds([\n 'instanceSourcePositions',\n 'instanceTargetPositions'\n ]);\n }\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, picking, arcUniforms] }); // 'project' module added by default.\n }\n // This layer has its own wrapLongitude logic\n get wrapLongitude() {\n return false;\n }\n initializeState() {\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceSourcePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getSourcePosition'\n },\n instanceTargetPositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getTargetPosition'\n },\n instanceSourceColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getSourceColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceTargetColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getTargetColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceWidths: {\n size: 1,\n transition: true,\n accessor: 'getWidth',\n defaultValue: 1\n },\n instanceHeights: {\n size: 1,\n transition: true,\n accessor: 'getHeight',\n defaultValue: 1\n },\n instanceTilts: {\n size: 1,\n transition: true,\n accessor: 'getTilt',\n defaultValue: 0\n }\n });\n /* eslint-enable max-len */\n }\n updateState(params) {\n super.updateState(params);\n if (params.changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n this.getAttributeManager().invalidateAll();\n }\n }\n draw({ uniforms }) {\n const { widthUnits, widthScale, widthMinPixels, widthMaxPixels, greatCircle, wrapLongitude, numSegments } = this.props;\n const arcProps = {\n numSegments,\n widthUnits: UNIT[widthUnits],\n widthScale,\n widthMinPixels,\n widthMaxPixels,\n greatCircle,\n useShortestPath: wrapLongitude\n };\n const model = this.state.model;\n model.shaderInputs.setProps({ arc: arcProps });\n model.setVertexCount(numSegments * 2);\n model.draw(this.context.renderPass);\n }\n _getModel() {\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n topology: 'triangle-strip',\n isInstanced: true\n });\n }\n}\nArcLayer.layerName = 'ArcLayer';\nArcLayer.defaultProps = defaultProps;\nexport default ArcLayer;\n//# sourceMappingURL=arc-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { lerp } from '@math.gl/core';\nconst DEFAULT_INDICES = new Uint32Array([0, 2, 1, 0, 3, 2]);\nconst DEFAULT_TEX_COORDS = new Float32Array([0, 1, 0, 0, 1, 0, 1, 1]);\n/*\n 1 ---- 2\n | |\n | |\n 0 ---- 3\n*/\n/* eslint-disable max-statements */\nexport default function createMesh(bounds, resolution) {\n if (!resolution) {\n return createQuad(bounds);\n }\n const maxXSpan = Math.max(Math.abs(bounds[0][0] - bounds[3][0]), Math.abs(bounds[1][0] - bounds[2][0]));\n const maxYSpan = Math.max(Math.abs(bounds[1][1] - bounds[0][1]), Math.abs(bounds[2][1] - bounds[3][1]));\n const uCount = Math.ceil(maxXSpan / resolution) + 1;\n const vCount = Math.ceil(maxYSpan / resolution) + 1;\n const vertexCount = (uCount - 1) * (vCount - 1) * 6;\n const indices = new Uint32Array(vertexCount);\n const texCoords = new Float32Array(uCount * vCount * 2);\n const positions = new Float64Array(uCount * vCount * 3);\n // Tesselate\n let vertex = 0;\n let index = 0;\n for (let u = 0; u < uCount; u++) {\n const ut = u / (uCount - 1);\n for (let v = 0; v < vCount; v++) {\n const vt = v / (vCount - 1);\n const p = interpolateQuad(bounds, ut, vt);\n positions[vertex * 3 + 0] = p[0];\n positions[vertex * 3 + 1] = p[1];\n positions[vertex * 3 + 2] = p[2] || 0;\n texCoords[vertex * 2 + 0] = ut;\n texCoords[vertex * 2 + 1] = 1 - vt;\n if (u > 0 && v > 0) {\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - vCount - 1;\n indices[index++] = vertex - 1;\n indices[index++] = vertex - vCount;\n indices[index++] = vertex - 1;\n indices[index++] = vertex;\n }\n vertex++;\n }\n }\n return {\n vertexCount,\n positions,\n indices,\n texCoords\n };\n}\nfunction createQuad(bounds) {\n const positions = new Float64Array(12);\n // [[minX, minY], [minX, maxY], [maxX, maxY], [maxX, minY]]\n for (let i = 0; i < bounds.length; i++) {\n positions[i * 3 + 0] = bounds[i][0];\n positions[i * 3 + 1] = bounds[i][1];\n positions[i * 3 + 2] = bounds[i][2] || 0;\n }\n return {\n vertexCount: 6,\n positions,\n indices: DEFAULT_INDICES,\n texCoords: DEFAULT_TEX_COORDS\n };\n}\nfunction interpolateQuad(quad, ut, vt) {\n return lerp(lerp(quad[0], quad[1], vt), lerp(quad[3], quad[2], vt), ut);\n}\n//# sourceMappingURL=create-mesh.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform bitmapUniforms {\n vec4 bounds;\n float coordinateConversion;\n float desaturate;\n vec3 tintColor;\n vec4 transparentColor;\n} bitmap;\n`;\nexport const bitmapUniforms = {\n name: 'bitmap',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n bounds: 'vec4<f32>',\n coordinateConversion: 'f32',\n desaturate: 'f32',\n tintColor: 'vec3<f32>',\n transparentColor: 'vec4<f32>'\n }\n};\n//# sourceMappingURL=bitmap-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME bitmap-layer-vertex-shader\n\nin vec2 texCoords;\nin vec3 positions;\nin vec3 positions64Low;\n\nout vec2 vTexCoord;\nout vec2 vTexPos;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n\n if (bitmap.coordinateConversion < -0.5) {\n vTexPos = geometry.position.xy + project.commonOrigin.xy;\n } else if (bitmap.coordinateConversion > 0.5) {\n vTexPos = geometry.worldPosition.xy;\n }\n\n vec4 color = vec4(0.0);\n DECKGL_FILTER_COLOR(color, geometry);\n}\n`;\n//# sourceMappingURL=bitmap-layer-vertex.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Pack the top 12 bits of two normalized floats into 3 8-bit (rgb) values\n * This enables addressing 4096x4096 individual pixels\n *\n * returns vec3 encoded RGB colors\n * result.r - top 8 bits of u\n * result.g - top 8 bits of v\n * result.b - next 4 bits of u and v: (u + v * 16)\n */\nconst packUVsIntoRGB = `\nvec3 packUVsIntoRGB(vec2 uv) {\n // Extract the top 8 bits. We want values to be truncated down so we can add a fraction\n vec2 uv8bit = floor(uv * 256.);\n\n // Calculate the normalized remainders of u and v parts that do not fit into 8 bits\n // Scale and clamp to 0-1 range\n vec2 uvFraction = fract(uv * 256.);\n vec2 uvFraction4bit = floor(uvFraction * 16.);\n\n // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates\n float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.;\n\n return vec3(uv8bit, fractions) / 255.;\n}\n`;\nexport default `\\\n#version 300 es\n#define SHADER_NAME bitmap-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D bitmapTexture;\n\nin vec2 vTexCoord;\nin vec2 vTexPos;\n\nout vec4 fragColor;\n\n/* projection utils */\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / PI / 2.0;\n\n// from degrees to Web Mercator\nvec2 lnglat_to_mercator(vec2 lnglat) {\n float x = lnglat.x;\n float y = clamp(lnglat.y, -89.9, 89.9);\n return vec2(\n radians(x) + PI,\n PI + log(tan(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// from Web Mercator to degrees\nvec2 mercator_to_lnglat(vec2 xy) {\n xy /= WORLD_SCALE;\n return degrees(vec2(\n xy.x - PI,\n atan(exp(xy.y - PI)) * 2.0 - PI * 0.5\n ));\n}\n/* End projection utils */\n\n// apply desaturation\nvec3 color_desaturate(vec3 color) {\n float luminance = (color.r + color.g + color.b) * 0.333333333;\n return mix(color, vec3(luminance), bitmap.desaturate);\n}\n\n// apply tint\nvec3 color_tint(vec3 color) {\n return color * bitmap.tintColor;\n}\n\n// blend with background color\nvec4 apply_opacity(vec3 color, float alpha) {\n if (bitmap.transparentColor.a == 0.0) {\n return vec4(color, alpha);\n }\n float blendedAlpha = alpha + bitmap.transparentColor.a * (1.0 - alpha);\n float highLightRatio = alpha / blendedAlpha;\n vec3 blendedRGB = mix(bitmap.transparentColor.rgb, color, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - bitmap.bounds[0]) / (bitmap.bounds[2] - bitmap.bounds[0]),\n (pos.y - bitmap.bounds[3]) / (bitmap.bounds[1] - bitmap.bounds[3])\n );\n}\n\n${packUVsIntoRGB}\n\nvoid main(void) {\n vec2 uv = vTexCoord;\n if (bitmap.coordinateConversion < -0.5) {\n vec2 lnglat = mercator_to_lnglat(vTexPos);\n uv = getUV(lnglat);\n } else if (bitmap.coordinateConversion > 0.5) {\n vec2 commonPos = lnglat_to_mercator(vTexPos);\n uv = getUV(commonPos);\n }\n vec4 bitmapColor = texture(bitmapTexture, uv);\n\n fragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * layer.opacity);\n\n geometry.uv = uv;\n DECKGL_FILTER_COLOR(fragColor, geometry);\n\n if (bool(picking.isActive) && !bool(picking.isAttribute)) {\n // Since instance information is not used, we can use picking color for pixel index\n fragColor.rgb = packUVsIntoRGB(uv);\n }\n}\n`;\n//# sourceMappingURL=bitmap-layer-fragment.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, project32, picking, COORDINATE_SYSTEM } from '@deck.gl/core';\nimport { Model } from '@luma.gl/engine';\nimport { lngLatToWorld } from '@math.gl/web-mercator';\nimport createMesh from \"./create-mesh.js\";\nimport { bitmapUniforms } from \"./bitmap-layer-uniforms.js\";\nimport vs from \"./bitmap-layer-vertex.js\";\nimport fs from \"./bitmap-layer-fragment.js\";\nconst defaultProps = {\n image: { type: 'image', value: null, async: true },\n bounds: { type: 'array', value: [1, 0, 0, 1], compare: true },\n _imageCoordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n desaturate: { type: 'number', min: 0, max: 1, value: 0 },\n // More context: because of the blending mode we're using for ground imagery,\n // alpha is not effective when blending the bitmap layers with the base map.\n // Instead we need to manually dim/blend rgb values with a background color.\n transparentColor: { type: 'color', value: [0, 0, 0, 0] },\n tintColor: { type: 'color', value: [255, 255, 255] },\n textureParameters: { type: 'object', ignore: true, value: null }\n};\n/** Render a bitmap at specified boundaries. */\nclass BitmapLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, picking, bitmapUniforms] });\n }\n initializeState() {\n const attributeManager = this.getAttributeManager();\n attributeManager.remove(['instancePickingColors']);\n const noAlloc = true;\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n update: attribute => (attribute.value = this.state.mesh.indices),\n noAlloc\n },\n positions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n update: attribute => (attribute.value = this.state.mesh.positions),\n noAlloc\n },\n texCoords: {\n size: 2,\n update: attribute => (attribute.value = this.state.mesh.texCoords),\n noAlloc\n }\n });\n }\n updateState({ props, oldProps, changeFlags }) {\n // setup model first\n const attributeManager = this.getAttributeManager();\n if (changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n attributeManager.invalidateAll();\n }\n if (props.bounds !== oldProps.bounds) {\n const oldMesh = this.state.mesh;\n const mesh = this._createMesh();\n this.state.model.setVertexCount(mesh.vertexCount);\n for (const key in mesh) {\n if (oldMesh && oldMesh[key] !== mesh[key]) {\n attributeManager.invalidate(key);\n }\n }\n this.setState({ mesh, ...this._getCoordinateUniforms() });\n }\n else if (props._imageCoordinateSystem !== oldProps._imageCoordinateSystem) {\n this.setState(this._getCoordinateUniforms());\n }\n }\n getPickingInfo(params) {\n const { image } = this.props;\n const info = params.info;\n if (!info.color || !image) {\n info.bitmap = null;\n return info;\n }\n const { width, height } = image;\n // Picking color doesn't represent object index in this layer\n info.index = 0;\n // Calculate uv and pixel in bitmap\n const uv = unpackUVsFromRGB(info.color);\n info.bitmap = {\n size: { width, height },\n uv,\n pixel: [Math.floor(uv[0] * width), Math.floor(uv[1] * height)]\n };\n return info;\n }\n // Override base Layer multi-depth picking logic\n disablePickingIndex() {\n this.setState({ disablePicking: true });\n }\n restorePickingColors() {\n this.setState({ disablePicking: false });\n }\n _updateAutoHighlight(info) {\n super._updateAutoHighlight({\n ...info,\n color: this.encodePickingColor(0)\n });\n }\n _createMesh() {\n const { bounds } = this.props;\n let normalizedBounds = bounds;\n // bounds as [minX, minY, maxX, maxY]\n if (isRectangularBounds(bounds)) {\n /*\n (minX0, maxY3) ---- (maxX2, maxY3)\n | |\n | |\n | |\n (minX0, minY1) ---- (maxX2, minY1)\n */\n normalizedBounds = [\n [bounds[0], bounds[1]],\n [bounds[0], bounds[3]],\n [bounds[2], bounds[3]],\n [bounds[2], bounds[1]]\n ];\n }\n return createMesh(normalizedBounds, this.context.viewport.resolution);\n }\n _getModel() {\n /*\n 0,0 --- 1,0\n | |\n 0,1 --- 1,1\n */\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n topology: 'triangle-list',\n isInstanced: false\n });\n }\n draw(opts) {\n const { shaderModuleProps } = opts;\n const { model, coordinateConversion, bounds, disablePicking } = this.state;\n const { image, desaturate, transparentColor, tintColor } = this.props;\n if (shaderModuleProps.picking.isActive && disablePicking) {\n return;\n }\n // // TODO fix zFighting\n // Render the image\n if (image && model) {\n const bitmapProps = {\n bitmapTexture: image,\n bounds,\n coordinateConversion,\n desaturate,\n tintColor: tintColor.slice(0, 3).map(x => x / 255),\n transparentColor: transparentColor.map(x => x / 255)\n };\n model.shaderInputs.setProps({ bitmap: bitmapProps });\n model.draw(this.context.renderPass);\n }\n }\n _getCoordinateUniforms() {\n const { LNGLAT, CARTESIAN, DEFAULT } = COORDINATE_SYSTEM;\n let { _imageCoordinateSystem: imageCoordinateSystem } = this.props;\n if (imageCoordinateSystem !== DEFAULT) {\n const { bounds } = this.props;\n if (!isRectangularBounds(bounds)) {\n throw new Error('_imageCoordinateSystem only supports rectangular bounds');\n }\n // The default behavior (linearly interpolated tex coords)\n const defaultImageCoordinateSystem = this.context.viewport.resolution ? LNGLAT : CARTESIAN;\n imageCoordinateSystem = imageCoordinateSystem === LNGLAT ? LNGLAT : CARTESIAN;\n if (imageCoordinateSystem === LNGLAT && defaultImageCoordinateSystem === CARTESIAN) {\n // LNGLAT in Mercator, e.g. display LNGLAT-encoded image in WebMercator projection\n return { coordinateConversion: -1, bounds };\n }\n if (imageCoordinateSystem === CARTESIAN && defaultImageCoordinateSystem === LNGLAT) {\n // Mercator in LNGLAT, e.g. display WebMercator encoded image in Globe projection\n const bottomLeft = lngLatToWorld([bounds[0], bounds[1]]);\n const topRight = lngLatToWorld([bounds[2], bounds[3]]);\n return {\n coordinateConversion: 1,\n bounds: [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]\n };\n }\n }\n return {\n coordinateConversion: 0,\n bounds: [0, 0, 0, 0]\n };\n }\n}\nBitmapLayer.layerName = 'BitmapLayer';\nBitmapLayer.defaultProps = defaultProps;\nexport default BitmapLayer;\n/**\n * Decode uv floats from rgb bytes where b contains 4-bit fractions of uv\n * @param {number[]} color\n * @returns {number[]} uvs\n * https://stackoverflow.com/questions/30242013/glsl-compressing-packing-multiple-0-1-colours-var4-into-a-single-var4-variab\n */\nfunction unpackUVsFromRGB(color) {\n const [u, v, fracUV] = color;\n const vFrac = (fracUV & 0xf0) / 256;\n const uFrac = (fracUV & 0x0f) / 16;\n return [(u + uFrac) / 256, (v + vFrac) / 256];\n}\nfunction isRectangularBounds(bounds) {\n return Number.isFinite(bounds[0]);\n}\n//# sourceMappingURL=bitmap-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform iconUniforms {\n float sizeScale;\n vec2 iconsTextureDim;\n float sizeBasis;\n float sizeMinPixels;\n float sizeMaxPixels;\n bool billboard;\n highp int sizeUnits;\n float alphaCutoff;\n} icon;\n`;\nexport const iconUniforms = {\n name: 'icon',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n sizeScale: 'f32',\n iconsTextureDim: 'vec2<f32>',\n sizeBasis: 'f32',\n sizeMinPixels: 'f32',\n sizeMaxPixels: 'f32',\n billboard: 'f32',\n sizeUnits: 'i32',\n alphaCutoff: 'f32'\n }\n};\n//# sourceMappingURL=icon-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME icon-layer-vertex-shader\nin vec2 positions;\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin float instanceSizes;\nin float instanceAngles;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin vec4 instanceIconFrames;\nin float instanceColorModes;\nin vec2 instanceOffsets;\nin vec2 instancePixelOffset;\nout float vColorMode;\nout vec4 vColor;\nout vec2 vTextureCoords;\nout vec2 uv;\nvec2 rotate_by_angle(vec2 vertex, float angle) {\nfloat angle_radian = angle * PI / 180.0;\nfloat cos_angle = cos(angle_radian);\nfloat sin_angle = sin(angle_radian);\nmat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\nreturn rotationMatrix * vertex;\n}\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\ngeometry.uv = positions;\ngeometry.pickingColor = instancePickingColors;\nuv = positions;\nvec2 iconSize = instanceIconFrames.zw;\nfloat sizePixels = clamp(\nproject_size_to_pixel(instanceSizes * icon.sizeScale, icon.sizeUnits),\nicon.sizeMinPixels, icon.sizeMaxPixels\n);\nfloat iconConstraint = icon.sizeBasis == 0.0 ? iconSize.x : iconSize.y;\nfloat instanceScale = iconConstraint == 0.0 ? 0.0 : sizePixels / iconConstraint;\nvec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\npixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * instanceScale;\npixelOffset += instancePixelOffset;\npixelOffset.y *= -1.0;\nif (icon.billboard) {\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nvec3 offset = vec3(pixelOffset, 0.0);\nDECKGL_FILTER_SIZE(offset, geometry);\ngl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n} else {\nvec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\nDECKGL_FILTER_SIZE(offset_common, geometry);\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nvTextureCoords = mix(\ninstanceIconFrames.xy,\ninstanceIconFrames.xy + iconSize,\n(positions.xy + 1.0) / 2.0\n) / icon.iconsTextureDim;\nvColor = instanceColors;\nDECKGL_FILTER_COLOR(vColor, geometry);\nvColorMode = instanceColorModes;\n}\n`;\n//# sourceMappingURL=icon-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME icon-layer-fragment-shader\nprecision highp float;\nuniform sampler2D iconsTexture;\nin float vColorMode;\nin vec4 vColor;\nin vec2 vTextureCoords;\nin vec2 uv;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = uv;\nvec4 texColor = texture(iconsTexture, vTextureCoords);\nvec3 color = mix(texColor.rgb, vColor.rgb, vColorMode);\nfloat a = texColor.a * layer.opacity * vColor.a;\nif (a < icon.alphaCutoff) {\ndiscard;\n}\nfragColor = vec4(color, a);\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=icon-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { load } from '@loaders.gl/core';\nimport { createIterable } from '@deck.gl/core';\nconst DEFAULT_CANVAS_WIDTH = 1024;\nconst DEFAULT_BUFFER = 4;\nconst noop = () => { };\nconst DEFAULT_SAMPLER_PARAMETERS = {\n minFilter: 'linear',\n mipmapFilter: 'linear',\n // LINEAR is the default value but explicitly set it here\n magFilter: 'linear',\n // minimize texture boundary artifacts\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n};\nconst MISSING_ICON = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\nfunction nextPowOfTwo(number) {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n// update comment to create a new texture and copy original data.\nfunction resizeImage(ctx, imageData, maxWidth, maxHeight) {\n const resizeRatio = Math.min(maxWidth / imageData.width, maxHeight / imageData.height);\n const width = Math.floor(imageData.width * resizeRatio);\n const height = Math.floor(imageData.height * resizeRatio);\n if (resizeRatio === 1) {\n // No resizing required\n return { image: imageData, width, height };\n }\n ctx.canvas.height = height;\n ctx.canvas.width = width;\n ctx.clearRect(0, 0, width, height);\n // image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight\n ctx.drawImage(imageData, 0, 0, imageData.width, imageData.height, 0, 0, width, height);\n return { image: ctx.canvas, width, height };\n}\nfunction getIconId(icon) {\n return icon && (icon.id || icon.url);\n}\n// resize texture without losing original data\nfunction resizeTexture(texture, width, height, sampler) {\n const { width: oldWidth, height: oldHeight, device } = texture;\n const newTexture = device.createTexture({\n format: 'rgba8unorm',\n width,\n height,\n sampler,\n mipLevels: device.getMipLevelCount(width, height)\n });\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyTextureToTexture({\n sourceTexture: texture,\n destinationTexture: newTexture,\n width: oldWidth,\n height: oldHeight\n });\n commandEncoder.finish();\n newTexture.generateMipmapsWebGL();\n texture.destroy();\n return newTexture;\n}\n// traverse icons in a row of icon atlas\n// extend each icon with left-top coordinates\nfunction buildRowMapping(mapping, columns, yOffset) {\n for (let i = 0; i < columns.length; i++) {\n const { icon, xOffset } = columns[i];\n const id = getIconId(icon);\n mapping[id] = {\n ...icon,\n x: xOffset,\n y: yOffset\n };\n }\n}\n/**\n * Generate coordinate mapping to retrieve icon left-top position from an icon atlas\n */\nexport function buildMapping({ icons, buffer, mapping = {}, xOffset = 0, yOffset = 0, rowHeight = 0, canvasWidth }) {\n let columns = [];\n // Strategy to layout all the icons into a texture:\n // traverse the icons sequentially, layout the icons from left to right, top to bottom\n // when the sum of the icons width is equal or larger than canvasWidth,\n // move to next row starting from total height so far plus max height of the icons in previous row\n // row width is equal to canvasWidth\n // row height is decided by the max height of the icons in that row\n // mapping coordinates of each icon is its left-top position in the texture\n for (let i = 0; i < icons.length; i++) {\n const icon = icons[i];\n const id = getIconId(icon);\n if (!mapping[id]) {\n const { height, width } = icon;\n // fill one row\n if (xOffset + width + buffer > canvasWidth) {\n buildRowMapping(mapping, columns, yOffset);\n xOffset = 0;\n yOffset = rowHeight + yOffset + buffer;\n rowHeight = 0;\n columns = [];\n }\n columns.push({\n icon,\n xOffset\n });\n xOffset = xOffset + width + buffer;\n rowHeight = Math.max(rowHeight, height);\n }\n }\n if (columns.length > 0) {\n buildRowMapping(mapping, columns, yOffset);\n }\n return {\n mapping,\n rowHeight,\n xOffset,\n yOffset,\n canvasWidth,\n canvasHeight: nextPowOfTwo(rowHeight + yOffset + buffer)\n };\n}\n// extract icons from data\n// return icons should be unique, and not cached or cached but url changed\nexport function getDiffIcons(data, getIcon, cachedIcons) {\n if (!data || !getIcon) {\n return null;\n }\n cachedIcons = cachedIcons || {};\n const icons = {};\n const { iterable, objectInfo } = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const icon = getIcon(object, objectInfo);\n const id = getIconId(icon);\n if (!icon) {\n throw new Error('Icon is missing.');\n }\n if (!icon.url) {\n throw new Error('Icon url is missing.');\n }\n if (!icons[id] && (!cachedIcons[id] || icon.url !== cachedIcons[id].url)) {\n icons[id] = { ...icon, source: object, sourceIndex: objectInfo.index };\n }\n }\n return icons;\n}\nexport default class IconManager {\n constructor(device, { onUpdate = noop, onError = noop }) {\n this._loadOptions = null;\n this._texture = null;\n this._externalTexture = null;\n this._mapping = {};\n this._samplerParameters = null;\n /** count of pending requests to fetch icons */\n this._pendingCount = 0;\n this._autoPacking = false;\n // / internal state used for autoPacking\n this._xOffset = 0;\n this._yOffset = 0;\n this._rowHeight = 0;\n this._buffer = DEFAULT_BUFFER;\n this._canvasWidth = DEFAULT_CANVAS_WIDTH;\n this._canvasHeight = 0;\n this._canvas = null;\n this.device = device;\n this.onUpdate = onUpdate;\n this.onError = onError;\n }\n finalize() {\n this._texture?.delete();\n }\n getTexture() {\n return this._texture || this._externalTexture;\n }\n getIconMapping(icon) {\n const id = this._autoPacking ? getIconId(icon) : icon;\n return this._mapping[id] || MISSING_ICON;\n }\n setProps({ loadOptions, autoPacking, iconAtlas, iconMapping, textureParameters }) {\n if (loadOptions) {\n this._loadOptions = loadOptions;\n }\n if (autoPacking !== undefined) {\n this._autoPacking = autoPacking;\n }\n if (iconMapping) {\n this._mapping = iconMapping;\n }\n if (iconAtlas) {\n this._texture?.delete();\n this._texture = null;\n this._externalTexture = iconAtlas;\n }\n if (textureParameters) {\n this._samplerParameters = textureParameters;\n }\n }\n get isLoaded() {\n return this._pendingCount === 0;\n }\n packIcons(data, getIcon) {\n if (!this._autoPacking || typeof document === 'undefined') {\n return;\n }\n const icons = Object.values(getDiffIcons(data, getIcon, this._mapping) || {});\n if (icons.length > 0) {\n // generate icon mapping\n const { mapping, xOffset, yOffset, rowHeight, canvasHeight } = buildMapping({\n icons,\n buffer: this._buffer,\n canvasWidth: this._canvasWidth,\n mapping: this._mapping,\n rowHeight: this._rowHeight,\n xOffset: this._xOffset,\n yOffset: this._yOffset\n });\n this._rowHeight = rowHeight;\n this._mapping = mapping;\n this._xOffset = xOffset;\n this._yOffset = yOffset;\n this._canvasHeight = canvasHeight;\n // create new texture\n if (!this._texture) {\n this._texture = this.device.createTexture({\n format: 'rgba8unorm',\n data: null,\n width: this._canvasWidth,\n height: this._canvasHeight,\n sampler: this._samplerParameters || DEFAULT_SAMPLER_PARAMETERS,\n mipLevels: this.device.getMipLevelCount(this._canvasWidth, this._canvasHeight)\n });\n }\n if (this._texture.height !== this._canvasHeight) {\n this._texture = resizeTexture(this._texture, this._canvasWidth, this._canvasHeight, this._samplerParameters || DEFAULT_SAMPLER_PARAMETERS);\n }\n this.onUpdate();\n // load images\n this._canvas = this._canvas || document.createElement('canvas');\n this._loadIcons(icons);\n this._texture?.generateMipmapsWebGL();\n }\n }\n _loadIcons(icons) {\n // This method is only called in the auto packing case, where _canvas is defined\n const ctx = this._canvas.getContext('2d', {\n willReadFrequently: true\n });\n for (const icon of icons) {\n this._pendingCount++;\n load(icon.url, this._loadOptions)\n .then(imageData => {\n const id = getIconId(icon);\n const iconDef = this._mapping[id];\n const { x, y, width: maxWidth, height: maxHeight } = iconDef;\n const { image, width, height } = resizeImage(ctx, imageData, maxWidth, maxHeight);\n this._texture?.copyExternalImage({\n image,\n x: x + (maxWidth - width) / 2,\n y: y + (maxHeight - height) / 2,\n width,\n height\n });\n iconDef.width = width;\n iconDef.height = height;\n // Call to regenerate mipmaps after modifying texture(s)\n this._texture?.generateMipmapsWebGL();\n this.onUpdate();\n })\n .catch(error => {\n this.onError({\n url: icon.url,\n source: icon.source,\n sourceIndex: icon.sourceIndex,\n loadOptions: this._loadOptions,\n error\n });\n })\n .finally(() => {\n this._pendingCount--;\n });\n }\n }\n}\n//# sourceMappingURL=icon-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, project32, picking, log, UNIT } from '@deck.gl/core';\nimport { Model, Geometry } from '@luma.gl/engine';\nimport { iconUniforms } from \"./icon-layer-uniforms.js\";\nimport vs from \"./icon-layer-vertex.glsl.js\";\nimport fs from \"./icon-layer-fragment.glsl.js\";\nimport IconManager from \"./icon-manager.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n iconAtlas: { type: 'image', value: null, async: true },\n iconMapping: { type: 'object', value: {}, async: true },\n sizeScale: { type: 'number', value: 1, min: 0 },\n billboard: true,\n sizeUnits: 'pixels',\n sizeBasis: 'height',\n sizeMinPixels: { type: 'number', min: 0, value: 0 }, // min point radius in pixels\n sizeMaxPixels: { type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER }, // max point radius in pixels\n alphaCutoff: { type: 'number', value: 0.05, min: 0, max: 1 },\n getPosition: { type: 'accessor', value: (x) => x.position },\n getIcon: { type: 'accessor', value: (x) => x.icon },\n getColor: { type: 'accessor', value: DEFAULT_COLOR },\n getSize: { type: 'accessor', value: 1 },\n getAngle: { type: 'accessor', value: 0 },\n getPixelOffset: { type: 'accessor', value: [0, 0] },\n onIconError: { type: 'function', value: null, optional: true },\n textureParameters: { type: 'object', ignore: true, value: null }\n};\n/** Render raster icons at given coordinates. */\nclass IconLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, picking, iconUniforms] });\n }\n initializeState() {\n this.state = {\n iconManager: new IconManager(this.context.device, {\n onUpdate: this._onUpdate.bind(this),\n onError: this._onError.bind(this)\n })\n };\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instancePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceOffsets: {\n size: 2,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceOffset\n },\n instanceIconFrames: {\n size: 4,\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceIconFrame\n },\n instanceColorModes: {\n size: 1,\n type: 'uint8',\n accessor: 'getIcon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n transform: this.getInstanceColorMode\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instancePixelOffset: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n }\n });\n /* eslint-enable max-len */\n }\n /* eslint-disable max-statements, complexity */\n updateState(params) {\n super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const attributeManager = this.getAttributeManager();\n const { iconAtlas, iconMapping, data, getIcon, textureParameters } = props;\n const { iconManager } = this.state;\n if (typeof iconAtlas === 'string') {\n return;\n }\n // internalState is always defined during updateState\n const prePacked = iconAtlas || this.internalState.isAsyncPropLoading('iconAtlas');\n iconManager.setProps({\n loadOptions: props.loadOptions,\n autoPacking: !prePacked,\n iconAtlas,\n iconMapping: prePacked ? iconMapping : null,\n textureParameters\n });\n // prepacked iconAtlas from user\n if (prePacked) {\n if (oldProps.iconMapping !== props.iconMapping) {\n attributeManager.invalidate('getIcon');\n }\n }\n else if (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getIcon))) {\n // Auto packing - getIcon is expected to return an object\n iconManager.packIcons(data, getIcon);\n }\n if (changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n attributeManager.invalidateAll();\n }\n }\n /* eslint-enable max-statements, complexity */\n get isLoaded() {\n return super.isLoaded && this.state.iconManager.isLoaded;\n }\n finalizeState(context) {\n super.finalizeState(context);\n // Release resources held by the icon manager\n this.state.iconManager.finalize();\n }\n draw({ uniforms }) {\n const { sizeScale, sizeBasis, sizeMinPixels, sizeMaxPixels, sizeUnits, billboard, alphaCutoff } = this.props;\n const { iconManager } = this.state;\n const iconsTexture = iconManager.getTexture();\n if (iconsTexture) {\n const model = this.state.model;\n const iconProps = {\n iconsTexture,\n iconsTextureDim: [iconsTexture.width, iconsTexture.height],\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeBasis: sizeBasis === 'height' ? 1.0 : 0.0,\n sizeMinPixels,\n sizeMaxPixels,\n billboard,\n alphaCutoff\n };\n model.shaderInputs.setProps({ icon: iconProps });\n model.draw(this.context.renderPass);\n }\n }\n _getModel() {\n // The icon-layer vertex shader uses 2d positions\n // specifed via: in vec2 positions;\n const positions = [-1, -1, 1, -1, -1, 1, 1, 1];\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-strip',\n attributes: {\n // The size must be explicitly passed here otherwise luma.gl\n // will default to assuming that positions are 3D (x,y,z)\n positions: {\n size: 2,\n value: new Float32Array(positions)\n }\n }\n }),\n isInstanced: true\n });\n }\n _onUpdate() {\n this.setNeedsRedraw();\n }\n _onError(evt) {\n const onIconError = this.getCurrentLayer()?.props.onIconError;\n if (onIconError) {\n onIconError(evt);\n }\n else {\n log.error(evt.error.message)();\n }\n }\n getInstanceOffset(icon) {\n const { width, height, anchorX = width / 2, anchorY = height / 2 } = this.state.iconManager.getIconMapping(icon);\n return [width / 2 - anchorX, height / 2 - anchorY];\n }\n getInstanceColorMode(icon) {\n const mapping = this.state.iconManager.getIconMapping(icon);\n return mapping.mask ? 1 : 0;\n }\n getInstanceIconFrame(icon) {\n const { x, y, width, height } = this.state.iconManager.getIconMapping(icon);\n return [x, y, width, height];\n }\n}\nIconLayer.defaultProps = defaultProps;\nIconLayer.layerName = 'IconLayer';\nexport default IconLayer;\n//# sourceMappingURL=icon-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst wgslUniformBlock = /* wgsl */ `\\\nstruct PointCloudUniforms {\n radiusPixels: f32,\n sizeUnits: i32,\n};\n\n@group(0) @binding(3)\nvar<uniform> pointCloud: PointCloudUniforms;\n`;\nconst glslUniformBlock = `\\\nuniform pointCloudUniforms {\n float radiusPixels;\n highp int sizeUnits;\n} pointCloud;\n`;\nexport const pointCloudUniforms = {\n name: 'pointCloud',\n source: wgslUniformBlock,\n vs: glslUniformBlock,\n fs: glslUniformBlock,\n uniformTypes: {\n radiusPixels: 'f32',\n sizeUnits: 'i32'\n }\n};\n//# sourceMappingURL=point-cloud-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME point-cloud-layer-vertex-shader\nin vec3 positions;\nin vec3 instanceNormals;\nin vec4 instanceColors;\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec3 instancePickingColors;\nout vec4 vColor;\nout vec2 unitPosition;\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\ngeometry.normal = project_normal(instanceNormals);\nunitPosition = positions.xy;\ngeometry.uv = unitPosition;\ngeometry.pickingColor = instancePickingColors;\nvec3 offset = vec3(positions.xy * project_size_to_pixel(pointCloud.radiusPixels, pointCloud.sizeUnits), 0.0);\nDECKGL_FILTER_SIZE(offset, geometry);\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\ngl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\nvec3 lightColor = lighting_getLightColor(instanceColors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, instanceColors.a * layer.opacity);\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=point-cloud-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME point-cloud-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nin vec2 unitPosition;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = unitPosition.xy;\nfloat distToCenter = length(unitPosition);\nif (distToCenter > 1.0) {\ndiscard;\n}\nfragColor = vColor;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=point-cloud-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* wgsl */ `\\\nstruct ConstantAttributes {\n instanceNormals: vec3<f32>,\n instanceColors: vec4<f32>,\n instancePositions: vec3<f32>,\n instancePositions64Low: vec3<f32>,\n instancePickingColors: vec3<f32>\n};\n\nconst constants = ConstantAttributes(\n vec3<f32>(1.0, 0.0, 0.0),\n vec4<f32>(0.0, 0.0, 0.0, 1.0),\n vec3<f32>(0.0),\n vec3<f32>(0.0),\n vec3<f32>(0.0)\n);\n\nstruct Attributes {\n @builtin(instance_index) instanceIndex : u32,\n @builtin(vertex_index) vertexIndex : u32,\n @location(0) positions: vec3<f32>,\n @location(1) instancePositions: vec3<f32>,\n @location(2) instancePositions64Low: vec3<f32>,\n @location(3) instanceNormals: vec3<f32>,\n @location(4) instanceColors: vec4<f32>,\n @location(5) instancePickingColors: vec3<f32>\n};\n\nstruct Varyings {\n @builtin(position) position: vec4<f32>,\n @location(0) vColor: vec4<f32>,\n @location(1) unitPosition: vec2<f32>,\n};\n\n@vertex\nfn vertexMain(attributes: Attributes) -> Varyings {\n var varyings: Varyings;\n \n // var geometry: Geometry;\n // geometry.worldPosition = instancePositions;\n // geometry.normal = project_normal(instanceNormals);\n\n // position on the containing square in [-1, 1] space\n varyings.unitPosition = attributes.positions.xy;\n geometry.uv = varyings.unitPosition;\n geometry.pickingColor = attributes.instancePickingColors;\n\n // Find the center of the point and add the current vertex\n let offset = vec3<f32>(attributes.positions.xy * project_unit_size_to_pixel(pointCloud.radiusPixels, pointCloud.sizeUnits), 0.0);\n // DECKGL_FILTER_SIZE(offset, geometry);\n\n varyings.position = project_position_to_clipspace(attributes.instancePositions, attributes.instancePositions64Low, vec3<f32>(0.0)); // TODO , geometry.position);\n // DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n let clipPixels = project_pixel_size_to_clipspace(offset.xy);\n varyings.position.x += clipPixels.x;\n varyings.position.y += clipPixels.y;\n\n // Apply lighting\n let lightColor = lighting_getLightColor2(attributes.instanceColors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\n\n // Apply opacity to instance color, or return instance picking color\n varyings.vColor = vec4(lightColor, attributes.instanceColors.a * color.opacity);\n // DECKGL_FILTER_COLOR(vColor, geometry);\n\n return varyings;\n}\n\n@fragment\nfn fragmentMain(varyings: Varyings) -> @location(0) vec4<f32> {\n // var geometry: Geometry;\n // geometry.uv = unitPosition.xy;\n\n let distToCenter = length(varyings.unitPosition);\n if (distToCenter > 1.0) {\n discard;\n }\n\n var fragColor: vec4<f32>;\n\n fragColor = varyings.vColor;\n // DECKGL_FILTER_COLOR(fragColor, geometry);\n\n // Apply premultiplied alpha as required by transparent canvas\n fragColor = deckgl_premultiplied_alpha(fragColor);\n\n return fragColor;\n}\n`;\n//# sourceMappingURL=point-cloud-layer.wgsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, color, project32, picking, UNIT } from '@deck.gl/core';\nimport { Model, Geometry } from '@luma.gl/engine';\nimport { gouraudMaterial } from '@luma.gl/shadertools';\nimport { pointCloudUniforms } from \"./point-cloud-layer-uniforms.js\";\nimport vs from \"./point-cloud-layer-vertex.glsl.js\";\nimport fs from \"./point-cloud-layer-fragment.glsl.js\";\nimport source from \"./point-cloud-layer.wgsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_NORMAL = [0, 0, 1];\nconst defaultProps = {\n sizeUnits: 'pixels',\n pointSize: { type: 'number', min: 0, value: 10 }, // point radius in pixels\n getPosition: { type: 'accessor', value: (x) => x.position },\n getNormal: { type: 'accessor', value: DEFAULT_NORMAL },\n getColor: { type: 'accessor', value: DEFAULT_COLOR },\n material: true,\n // Depreated\n radiusPixels: { deprecatedFor: 'pointSize' }\n};\n// support loaders.gl point cloud format\nfunction normalizeData(data) {\n const { header, attributes } = data;\n if (!header || !attributes) {\n return;\n }\n data.length = header.vertexCount;\n if (attributes.POSITION) {\n attributes.instancePositions = attributes.POSITION;\n }\n if (attributes.NORMAL) {\n attributes.instanceNormals = attributes.NORMAL;\n }\n if (attributes.COLOR_0) {\n const { size, value } = attributes.COLOR_0;\n attributes.instanceColors = { size, type: 'unorm8', value };\n }\n}\n/** Render a point cloud with 3D positions, normals and colors. */\nclass PointCloudLayer extends Layer {\n getShaders() {\n return super.getShaders({\n vs,\n fs,\n source,\n modules: [project32, color, gouraudMaterial, picking, pointCloudUniforms]\n });\n }\n initializeState() {\n this.getAttributeManager().addInstanced({\n instancePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceNormals: {\n size: 3,\n transition: true,\n accessor: 'getNormal',\n defaultValue: DEFAULT_NORMAL\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getColor',\n defaultValue: DEFAULT_COLOR\n }\n });\n }\n updateState(params) {\n const { changeFlags, props } = params;\n super.updateState(params);\n if (changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n this.getAttributeManager().invalidateAll();\n }\n if (changeFlags.dataChanged) {\n normalizeData(props.data);\n }\n }\n draw({ uniforms }) {\n const { pointSize, sizeUnits } = this.props;\n const model = this.state.model;\n const pointCloudProps = {\n sizeUnits: UNIT[sizeUnits],\n radiusPixels: pointSize\n };\n model.shaderInputs.setProps({ pointCloud: pointCloudProps });\n if (this.context.device.type === 'webgpu') {\n // @ts-expect-error TODO - this line was needed during WebGPU port\n model.instanceCount = this.props.data.length;\n }\n model.draw(this.context.renderPass);\n }\n _getModel() {\n // TODO(ibgreen): WebGPU complication: Matching attachment state of the renderpass requires including a depth buffer\n const parameters = this.context.device.type === 'webgpu'\n ? {\n depthWriteEnabled: true,\n depthCompare: 'less-equal'\n }\n : undefined;\n // a triangle that minimally cover the unit circle\n const positions = [];\n for (let i = 0; i < 3; i++) {\n const angle = (i / 3) * Math.PI * 2;\n positions.push(Math.cos(angle) * 2, Math.sin(angle) * 2, 0);\n }\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-list',\n attributes: {\n positions: new Float32Array(positions)\n }\n }),\n parameters,\n isInstanced: true\n });\n }\n}\nPointCloudLayer.layerName = 'PointCloudLayer';\nPointCloudLayer.defaultProps = defaultProps;\nexport default PointCloudLayer;\n//# sourceMappingURL=point-cloud-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst glslUniformBlock = `\\\nuniform scatterplotUniforms {\n float radiusScale;\n float radiusMinPixels;\n float radiusMaxPixels;\n float lineWidthScale;\n float lineWidthMinPixels;\n float lineWidthMaxPixels;\n float stroked;\n float filled;\n bool antialiasing;\n bool billboard;\n highp int radiusUnits;\n highp int lineWidthUnits;\n} scatterplot;\n`;\nexport const scatterplotUniforms = {\n name: 'scatterplot',\n vs: glslUniformBlock,\n fs: glslUniformBlock,\n source: '',\n uniformTypes: {\n radiusScale: 'f32',\n radiusMinPixels: 'f32',\n radiusMaxPixels: 'f32',\n lineWidthScale: 'f32',\n lineWidthMinPixels: 'f32',\n lineWidthMaxPixels: 'f32',\n stroked: 'f32',\n filled: 'f32',\n antialiasing: 'f32',\n billboard: 'f32',\n radiusUnits: 'i32',\n lineWidthUnits: 'i32'\n }\n};\n//# sourceMappingURL=scatterplot-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME scatterplot-layer-vertex-shader\nin vec3 positions;\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin float instanceRadius;\nin float instanceLineWidths;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin vec3 instancePickingColors;\nout vec4 vFillColor;\nout vec4 vLineColor;\nout vec2 unitPosition;\nout float innerUnitRadius;\nout float outerRadiusPixels;\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\nouterRadiusPixels = clamp(\nproject_size_to_pixel(scatterplot.radiusScale * instanceRadius, scatterplot.radiusUnits),\nscatterplot.radiusMinPixels, scatterplot.radiusMaxPixels\n);\nfloat lineWidthPixels = clamp(\nproject_size_to_pixel(scatterplot.lineWidthScale * instanceLineWidths, scatterplot.lineWidthUnits),\nscatterplot.lineWidthMinPixels, scatterplot.lineWidthMaxPixels\n);\nouterRadiusPixels += scatterplot.stroked * lineWidthPixels / 2.0;\nfloat edgePadding = scatterplot.antialiasing ? (outerRadiusPixels + SMOOTH_EDGE_RADIUS) / outerRadiusPixels : 1.0;\nunitPosition = edgePadding * positions.xy;\ngeometry.uv = unitPosition;\ngeometry.pickingColor = instancePickingColors;\ninnerUnitRadius = 1.0 - scatterplot.stroked * lineWidthPixels / outerRadiusPixels;\nif (scatterplot.billboard) {\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nvec3 offset = edgePadding * positions * outerRadiusPixels;\nDECKGL_FILTER_SIZE(offset, geometry);\ngl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n} else {\nvec3 offset = edgePadding * positions * project_pixel_size(outerRadiusPixels);\nDECKGL_FILTER_SIZE(offset, geometry);\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset, geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nvFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * layer.opacity);\nDECKGL_FILTER_COLOR(vFillColor, geometry);\nvLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * layer.opacity);\nDECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n//# sourceMappingURL=scatterplot-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* glsl */ `\\\n#version 300 es\n#define SHADER_NAME scatterplot-layer-fragment-shader\nprecision highp float;\nin vec4 vFillColor;\nin vec4 vLineColor;\nin vec2 unitPosition;\nin float innerUnitRadius;\nin float outerRadiusPixels;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = unitPosition;\nfloat distToCenter = length(unitPosition) * outerRadiusPixels;\nfloat inCircle = scatterplot.antialiasing ?\nsmoothedge(distToCenter, outerRadiusPixels) :\nstep(distToCenter, outerRadiusPixels);\nif (inCircle == 0.0) {\ndiscard;\n}\nif (scatterplot.stroked > 0.5) {\nfloat isLine = scatterplot.antialiasing ?\nsmoothedge(innerUnitRadius * outerRadiusPixels, distToCenter) :\nstep(innerUnitRadius * outerRadiusPixels, distToCenter);\nif (scatterplot.filled > 0.5) {\nfragColor = mix(vFillColor, vLineColor, isLine);\n} else {\nif (isLine == 0.0) {\ndiscard;\n}\nfragColor = vec4(vLineColor.rgb, vLineColor.a * isLine);\n}\n} else if (scatterplot.filled < 0.5) {\ndiscard;\n} else {\nfragColor = vFillColor;\n}\nfragColor.a *= inCircle;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=scatterplot-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default /* wgsl */ `\\\n// Main shaders\n\nstruct ScatterplotUniforms {\n radiusScale: f32,\n radiusMinPixels: f32,\n radiusMaxPixels: f32,\n lineWidthScale: f32,\n lineWidthMinPixels: f32,\n lineWidthMaxPixels: f32,\n stroked: f32,\n filled: i32,\n antialiasing: i32,\n billboard: i32,\n radiusUnits: i32,\n lineWidthUnits: i32,\n};\n\nstruct ConstantAttributeUniforms {\n instancePositions: vec3<f32>,\n instancePositions64Low: vec3<f32>,\n instanceRadius: f32,\n instanceLineWidths: f32,\n instanceFillColors: vec4<f32>,\n instanceLineColors: vec4<f32>,\n instancePickingColors: vec3<f32>,\n\n instancePositionsConstant: i32,\n instancePositions64LowConstant: i32,\n instanceRadiusConstant: i32,\n instanceLineWidthsConstant: i32,\n instanceFillColorsConstant: i32,\n instanceLineColorsConstant: i32,\n instancePickingColorsConstant: i32\n};\n\n@group(0) @binding(2) var<uniform> scatterplot: ScatterplotUniforms;\n\nstruct ConstantAttributes {\n instancePositions: vec3<f32>,\n instancePositions64Low: vec3<f32>,\n instanceRadius: f32,\n instanceLineWidths: f32,\n instanceFillColors: vec4<f32>,\n instanceLineColors: vec4<f32>,\n instancePickingColors: vec3<f32>\n};\n\nconst constants = ConstantAttributes(\n vec3<f32>(0.0),\n vec3<f32>(0.0),\n 0.0,\n 0.0,\n vec4<f32>(0.0, 0.0, 0.0, 1.0),\n vec4<f32>(0.0, 0.0, 0.0, 1.0),\n vec3<f32>(0.0)\n);\n\nstruct Attributes {\n @builtin(instance_index) instanceIndex : u32,\n @builtin(vertex_index) vertexIndex : u32,\n @location(0) positions: vec3<f32>,\n @location(1) instancePositions: vec3<f32>,\n @location(2) instancePositions64Low: vec3<f32>,\n @location(3) instanceRadius: f32,\n @location(4) instanceLineWidths: f32,\n @location(5) instanceFillColors: vec4<f32>,\n @location(6) instanceLineColors: vec4<f32>,\n @location(7) instancePickingColors: vec3<f32>\n};\n\nstruct Varyings {\n @builtin(position) position: vec4<f32>,\n @location(0) vFillColor: vec4<f32>,\n @location(1) vLineColor: vec4<f32>,\n @location(2) unitPosition: vec2<f32>,\n @location(3) innerUnitRadius: f32,\n @location(4) outerRadiusPixels: f32,\n};\n\n@vertex\nfn vertexMain(attributes: Attributes) -> Varyings {\n var varyings: Varyings;\n\n // Draw an inline geometry constant array clip space triangle to verify that rendering works.\n // var positions = array<vec2<f32>, 3>(vec2(0.0, 0.5), vec2(-0.5, -0.5), vec2(0.5, -0.5));\n // if (attributes.instanceIndex == 0) {\n // varyings.position = vec4<f32>(positions[attributes.vertexIndex], 0.0, 1.0);\n // return varyings;\n // }\n\n // var geometry: Geometry;\n // geometry.worldPosition = instancePositions;\n\n // Multiply out radius and clamp to limits\n varyings.outerRadiusPixels = clamp(\n project_unit_size_to_pixel(scatterplot.radiusScale * attributes.instanceRadius, scatterplot.radiusUnits),\n scatterplot.radiusMinPixels, scatterplot.radiusMaxPixels\n );\n\n // Multiply out line width and clamp to limits\n let lineWidthPixels = clamp(\n project_unit_size_to_pixel(scatterplot.lineWidthScale * attributes.instanceLineWidths, scatterplot.lineWidthUnits),\n scatterplot.lineWidthMinPixels, scatterplot.lineWidthMaxPixels\n );\n\n // outer radius needs to offset by half stroke width\n varyings.outerRadiusPixels += scatterplot.stroked * lineWidthPixels / 2.0;\n // Expand geometry to accommodate edge smoothing\n let edgePadding = select(\n (varyings.outerRadiusPixels + SMOOTH_EDGE_RADIUS) / varyings.outerRadiusPixels,\n 1.0,\n scatterplot.antialiasing != 0\n );\n\n // position on the containing square in [-1, 1] space\n varyings.unitPosition = edgePadding * attributes.positions.xy;\n geometry.uv = varyings.unitPosition;\n geometry.pickingColor = attributes.instancePickingColors;\n\n varyings.innerUnitRadius = 1.0 - scatterplot.stroked * lineWidthPixels / varyings.outerRadiusPixels;\n\n if (scatterplot.billboard != 0) {\n varyings.position = project_position_to_clipspace(attributes.instancePositions, attributes.instancePositions64Low, vec3<f32>(0.0)); // TODO , geometry.position);\n // DECKGL_FILTER_GL_POSITION(varyings.position, geometry);\n let offset = attributes.positions; // * edgePadding * varyings.outerRadiusPixels;\n // DECKGL_FILTER_SIZE(offset, geometry);\n let clipPixels = project_pixel_size_to_clipspace(offset.xy);\n varyings.position.x = clipPixels.x;\n varyings.position.y = clipPixels.y;\n } else {\n let offset = edgePadding * attributes.positions * project_pixel_size_float(varyings.outerRadiusPixels);\n // DECKGL_FILTER_SIZE(offset, geometry);\n varyings.position = project_position_to_clipspace(attributes.instancePositions, attributes.instancePositions64Low, offset); // TODO , geometry.position);\n // DECKGL_FILTER_GL_POSITION(varyings.position, geometry);\n }\n\n // Apply opacity to instance color, or return instance picking color\n varyings.vFillColor = vec4<f32>(attributes.instanceFillColors.rgb, attributes.instanceFillColors.a * color.opacity);\n // DECKGL_FILTER_COLOR(varyings.vFillColor, geometry);\n varyings.vLineColor = vec4<f32>(attributes.instanceLineColors.rgb, attributes.instanceLineColors.a * color.opacity);\n // DECKGL_FILTER_COLOR(varyings.vLineColor, geometry);\n\n return varyings;\n}\n\n@fragment\nfn fragmentMain(varyings: Varyings) -> @location(0) vec4<f32> {\n // var geometry: Geometry;\n // geometry.uv = unitPosition;\n\n let distToCenter = length(varyings.unitPosition) * varyings.outerRadiusPixels;\n let inCircle = select(\n smoothedge(distToCenter, varyings.outerRadiusPixels),\n step(distToCenter, varyings.outerRadiusPixels),\n scatterplot.antialiasing != 0\n );\n\n if (inCircle == 0.0) {\n discard;\n }\n\n var fragColor: vec4<f32>;\n\n if (scatterplot.stroked != 0) {\n let isLine = select(\n smoothedge(varyings.innerUnitRadius * varyings.outerRadiusPixels, distToCenter),\n step(varyings.innerUnitRadius * varyings.outerRadiusPixels, distToCenter),\n scatterplot.antialiasing != 0\n );\n\n if (scatterplot.filled != 0) {\n fragColor = mix(varyings.vFillColor, varyings.vLineColor, isLine);\n } else {\n if (isLine == 0.0) {\n discard;\n }\n fragColor = vec4<f32>(varyings.vLineColor.rgb, varyings.vLineColor.a * isLine);\n }\n } else if (scatterplot.filled == 0) {\n discard;\n } else {\n fragColor = varyings.vFillColor;\n }\n\n fragColor.a *= inCircle;\n // DECKGL_FILTER_COLOR(fragColor, geometry);\n\n // Apply premultiplied alpha as required by transparent canvas\n fragColor = deckgl_premultiplied_alpha(fragColor);\n\n return fragColor;\n // return vec4<f32>(0, 0, 1, 1);\n}\n`;\n//# sourceMappingURL=scatterplot-layer.wgsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, color, project32, picking, UNIT } from '@deck.gl/core';\nimport { Model, Geometry } from '@luma.gl/engine';\nimport { scatterplotUniforms } from \"./scatterplot-layer-uniforms.js\";\nimport vs from \"./scatterplot-layer-vertex.glsl.js\";\nimport fs from \"./scatterplot-layer-fragment.glsl.js\";\nimport source from \"./scatterplot-layer.wgsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n radiusUnits: 'meters',\n radiusScale: { type: 'number', min: 0, value: 1 },\n radiusMinPixels: { type: 'number', min: 0, value: 0 }, // min point radius in pixels\n radiusMaxPixels: { type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER }, // max point radius in pixels\n lineWidthUnits: 'meters',\n lineWidthScale: { type: 'number', min: 0, value: 1 },\n lineWidthMinPixels: { type: 'number', min: 0, value: 0 },\n lineWidthMaxPixels: { type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER },\n stroked: false,\n filled: true,\n billboard: false,\n antialiasing: true,\n getPosition: { type: 'accessor', value: (x) => x.position },\n getRadius: { type: 'accessor', value: 1 },\n getFillColor: { type: 'accessor', value: DEFAULT_COLOR },\n getLineColor: { type: 'accessor', value: DEFAULT_COLOR },\n getLineWidth: { type: 'accessor', value: 1 },\n // deprecated\n strokeWidth: { deprecatedFor: 'getLineWidth' },\n outline: { deprecatedFor: 'stroked' },\n getColor: { deprecatedFor: ['getFillColor', 'getLineColor'] }\n};\n/** Render circles at given coordinates. */\nclass ScatterplotLayer extends Layer {\n getShaders() {\n return super.getShaders({\n vs,\n fs,\n source,\n modules: [project32, color, picking, scatterplotUniforms]\n });\n }\n initializeState() {\n this.getAttributeManager().addInstanced({\n instancePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceRadius: {\n size: 1,\n transition: true,\n accessor: 'getRadius',\n defaultValue: 1\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n transition: true,\n type: 'unorm8',\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n transition: true,\n type: 'unorm8',\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n updateState(params) {\n super.updateState(params);\n if (params.changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n this.getAttributeManager().invalidateAll();\n }\n }\n draw({ uniforms }) {\n const { radiusUnits, radiusScale, radiusMinPixels, radiusMaxPixels, stroked, filled, billboard, antialiasing, lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels } = this.props;\n const scatterplotProps = {\n stroked,\n filled,\n billboard,\n antialiasing,\n radiusUnits: UNIT[radiusUnits],\n radiusScale,\n radiusMinPixels,\n radiusMaxPixels,\n lineWidthUnits: UNIT[lineWidthUnits],\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels\n };\n const model = this.state.model;\n model.shaderInputs.setProps({ scatterplot: scatterplotProps });\n if (this.context.device.type === 'webgpu') {\n // @ts-expect-error TODO - this line was needed during WebGPU port\n model.instanceCount = this.props.data.length;\n }\n model.draw(this.context.renderPass);\n }\n _getModel() {\n // TODO(ibgreen): WebGPU complication: Matching attachment state of the renderpass requires including a depth buffer\n const parameters = this.context.device.type === 'webgpu'\n ? {\n depthWriteEnabled: true,\n depthCompare: 'less-equal'\n }\n : undefined;\n // a square that minimally cover the unit circle\n const positions = [-1, -1, 0, 1, -1, 0, -1, 1, 0, 1, 1, 0];\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-strip',\n attributes: {\n positions: { size: 3, value: new Float32Array(positions) }\n }\n }),\n isInstanced: true,\n parameters\n });\n }\n}\nScatterplotLayer.defaultProps = defaultProps;\nScatterplotLayer.layerName = 'ScatterplotLayer';\nexport default ScatterplotLayer;\n//# sourceMappingURL=scatterplot-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Assume data array is sorted by <accessor>\n// Replaces the specified range with a new subarray\n// Mutates the data array\n// Returns {startRow, endRow} of the inserted items\nexport function replaceInRange({ data, getIndex, dataRange, replace }) {\n const { startRow = 0, endRow = Infinity } = dataRange;\n const count = data.length;\n let replaceStart = count;\n let replaceEnd = count;\n for (let i = 0; i < count; i++) {\n const row = getIndex(data[i]);\n if (replaceStart > i && row >= startRow) {\n replaceStart = i;\n }\n if (row >= endRow) {\n replaceEnd = i;\n break;\n }\n }\n let index = replaceStart;\n const dataLengthChanged = replaceEnd - replaceStart !== replace.length;\n // Save the items after replaceEnd before we overwrite data\n const endChunk = dataLengthChanged ? data.slice(replaceEnd) : undefined;\n // Insert new items\n for (let i = 0; i < replace.length; i++) {\n data[index++] = replace[i];\n }\n if (endChunk) {\n // Append items after replaceEnd\n for (let i = 0; i < endChunk.length; i++) {\n data[index++] = endChunk[i];\n }\n // Trim additional items\n data.length = index;\n }\n return {\n startRow: replaceStart,\n endRow: replaceStart + replace.length\n };\n}\n//# sourceMappingURL=utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer, createIterable, log } from '@deck.gl/core';\nimport SolidPolygonLayer from \"../solid-polygon-layer/solid-polygon-layer.js\";\nimport PathLayer from \"../path-layer/path-layer.js\";\nimport * as Polygon from \"../solid-polygon-layer/polygon.js\";\nimport { replaceInRange } from \"../utils.js\";\nconst defaultLineColor = [0, 0, 0, 255];\nconst defaultFillColor = [0, 0, 0, 255];\nconst defaultProps = {\n stroked: true,\n filled: true,\n extruded: false,\n elevationScale: 1,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineMiterLimit: 4,\n getPolygon: { type: 'accessor', value: (f) => f.polygon },\n // Polygon fill color\n getFillColor: { type: 'accessor', value: defaultFillColor },\n // Point, line and polygon outline color\n getLineColor: { type: 'accessor', value: defaultLineColor },\n // Line and polygon outline accessors\n getLineWidth: { type: 'accessor', value: 1 },\n // Polygon extrusion accessor\n getElevation: { type: 'accessor', value: 1000 },\n // Optional material for 'lighting' shader module\n material: true\n};\n/** A composite layer that renders filled, stroked and/or extruded polygons. */\nclass PolygonLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n paths: [],\n pathsDiff: null\n };\n if (this.props.getLineDashArray) {\n log.removed('getLineDashArray', 'PathStyleExtension')();\n }\n }\n updateState({ changeFlags }) {\n const geometryChanged = changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n if (geometryChanged && Array.isArray(changeFlags.dataChanged)) {\n const paths = this.state.paths.slice();\n const pathsDiff = changeFlags.dataChanged.map(dataRange => replaceInRange({\n data: paths,\n getIndex: p => p.__source.index,\n dataRange,\n replace: this._getPaths(dataRange)\n }));\n this.setState({ paths, pathsDiff });\n }\n else if (geometryChanged) {\n this.setState({\n paths: this._getPaths(),\n pathsDiff: null\n });\n }\n }\n _getPaths(dataRange = {}) {\n const { data, getPolygon, positionFormat, _normalize } = this.props;\n const paths = [];\n const positionSize = positionFormat === 'XY' ? 2 : 3;\n const { startRow, endRow } = dataRange;\n const { iterable, objectInfo } = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n let polygon = getPolygon(object, objectInfo);\n if (_normalize) {\n polygon = Polygon.normalize(polygon, positionSize);\n }\n const { holeIndices } = polygon;\n const positions = polygon.positions || polygon;\n if (holeIndices) {\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= holeIndices.length; i++) {\n const path = positions.slice(holeIndices[i - 1] || 0, holeIndices[i] || positions.length);\n paths.push(this.getSubLayerRow({ path }, object, objectInfo.index));\n }\n }\n else {\n paths.push(this.getSubLayerRow({ path: positions }, object, objectInfo.index));\n }\n }\n return paths;\n }\n /* eslint-disable complexity */\n renderLayers() {\n // Layer composition props\n const { data, _dataDiff, stroked, filled, extruded, wireframe, _normalize, _windingOrder, elevationScale, transitions, positionFormat } = this.props;\n // Rendering props underlying layer\n const { lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, lineJointRounded, lineMiterLimit, lineDashJustified } = this.props;\n // Accessor props for underlying layers\n const { getFillColor, getLineColor, getLineWidth, getLineDashArray, getElevation, getPolygon, updateTriggers, material } = this.props;\n const { paths, pathsDiff } = this.state;\n const FillLayer = this.getSubLayerClass('fill', SolidPolygonLayer);\n const StrokeLayer = this.getSubLayerClass('stroke', PathLayer);\n // Filled Polygon Layer\n const polygonLayer = this.shouldRenderSubLayer('fill', paths) &&\n new FillLayer({\n _dataDiff,\n extruded,\n elevationScale,\n filled,\n wireframe,\n _normalize,\n _windingOrder,\n getElevation,\n getFillColor,\n getLineColor: extruded && wireframe ? getLineColor : defaultLineColor,\n material,\n transitions\n }, this.getSubLayerProps({\n id: 'fill',\n updateTriggers: updateTriggers && {\n getPolygon: updateTriggers.getPolygon,\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n // using a legacy API to invalid lineColor attributes\n // if (extruded && wireframe) has changed\n lineColors: extruded && wireframe,\n getLineColor: updateTriggers.getLineColor\n }\n }), {\n data,\n positionFormat,\n getPolygon\n });\n // Polygon line layer\n const polygonLineLayer = !extruded &&\n stroked &&\n this.shouldRenderSubLayer('stroke', paths) &&\n new StrokeLayer({\n _dataDiff: pathsDiff && (() => pathsDiff),\n widthUnits: lineWidthUnits,\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels,\n jointRounded: lineJointRounded,\n miterLimit: lineMiterLimit,\n dashJustified: lineDashJustified,\n // Already normalized\n _pathType: 'loop',\n transitions: transitions && {\n getWidth: transitions.getLineWidth,\n getColor: transitions.getLineColor,\n getPath: transitions.getPolygon\n },\n getColor: this.getSubLayerAccessor(getLineColor),\n getWidth: this.getSubLayerAccessor(getLineWidth),\n getDashArray: this.getSubLayerAccessor(getLineDashArray)\n }, this.getSubLayerProps({\n id: 'stroke',\n updateTriggers: updateTriggers && {\n getWidth: updateTriggers.getLineWidth,\n getColor: updateTriggers.getLineColor,\n getDashArray: updateTriggers.getLineDashArray\n }\n }), {\n data: paths,\n positionFormat,\n getPath: x => x.path\n });\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonLayer,\n polygonLineLayer,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonLayer\n ];\n }\n}\nPolygonLayer.layerName = 'PolygonLayer';\nPolygonLayer.defaultProps = defaultProps;\nexport default PolygonLayer;\n//# sourceMappingURL=polygon-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Return the feature for an accesor\n */\nexport function binaryToFeatureForAccesor(data, index) {\n if (!data) {\n return null;\n }\n const featureIndex = 'startIndices' in data ? data.startIndices[index] : index;\n const geometryIndex = data.featureIds.value[featureIndex];\n if (featureIndex !== -1) {\n return getPropertiesForIndex(data, geometryIndex, featureIndex);\n }\n return null;\n}\nfunction getPropertiesForIndex(data, propertiesIndex, numericPropsIndex) {\n const feature = {\n properties: { ...data.properties[propertiesIndex] }\n };\n for (const prop in data.numericProps) {\n feature.properties[prop] = data.numericProps[prop].value[numericPropsIndex];\n }\n return feature;\n}\n// Custom picking color to keep binary indexes\nexport function calculatePickingColors(geojsonBinary, encodePickingColor) {\n const pickingColors = {\n points: null,\n lines: null,\n polygons: null\n };\n for (const key in pickingColors) {\n const featureIds = geojsonBinary[key].globalFeatureIds.value;\n pickingColors[key] = new Uint8ClampedArray(featureIds.length * 4);\n const pickingColor = [];\n for (let i = 0; i < featureIds.length; i++) {\n encodePickingColor(featureIds[i], pickingColor);\n pickingColors[key][i * 4 + 0] = pickingColor[0];\n pickingColors[key][i * 4 + 1] = pickingColor[1];\n pickingColors[key][i * 4 + 2] = pickingColor[2];\n pickingColors[key][i * 4 + 3] = 255;\n }\n }\n return pickingColors;\n}\n//# sourceMappingURL=geojson-binary.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform sdfUniforms {\n float gamma;\n bool enabled;\n float buffer;\n float outlineBuffer;\n vec4 outlineColor;\n} sdf;\n`;\nexport const sdfUniforms = {\n name: 'sdf',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n gamma: 'f32',\n enabled: 'f32',\n buffer: 'f32',\n outlineBuffer: 'f32',\n outlineColor: 'vec4<f32>'\n }\n};\n//# sourceMappingURL=sdf-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME multi-icon-layer-fragment-shader\nprecision highp float;\nuniform sampler2D iconsTexture;\nin vec4 vColor;\nin vec2 vTextureCoords;\nin vec2 uv;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = uv;\nif (!bool(picking.isActive)) {\nfloat alpha = texture(iconsTexture, vTextureCoords).a;\nvec4 color = vColor;\nif (sdf.enabled) {\nfloat distance = alpha;\nalpha = smoothstep(sdf.buffer - sdf.gamma, sdf.buffer + sdf.gamma, distance);\nif (sdf.outlineBuffer > 0.0) {\nfloat inFill = alpha;\nfloat inBorder = smoothstep(sdf.outlineBuffer - sdf.gamma, sdf.outlineBuffer + sdf.gamma, distance);\ncolor = mix(sdf.outlineColor, vColor, inFill);\nalpha = inBorder;\n}\n}\nfloat a = alpha * color.a;\nif (a < icon.alphaCutoff) {\ndiscard;\n}\nfragColor = vec4(color.rgb, a * layer.opacity);\n}\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=multi-icon-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@deck.gl/core';\nimport IconLayer from \"../../icon-layer/icon-layer.js\";\nimport { sdfUniforms } from \"./sdf-uniforms.js\";\nimport fs from \"./multi-icon-layer-fragment.glsl.js\";\n// TODO expose as layer properties\nconst DEFAULT_BUFFER = 192.0 / 256;\nconst EMPTY_ARRAY = [];\nconst defaultProps = {\n getIconOffsets: { type: 'accessor', value: (x) => x.offsets },\n alphaCutoff: 0.001,\n smoothing: 0.1,\n outlineWidth: 0,\n outlineColor: { type: 'color', value: [0, 0, 0, 255] }\n};\nclass MultiIconLayer extends IconLayer {\n getShaders() {\n const shaders = super.getShaders();\n return { ...shaders, modules: [...shaders.modules, sdfUniforms], fs };\n }\n initializeState() {\n super.initializeState();\n const attributeManager = this.getAttributeManager();\n attributeManager.addInstanced({\n instanceOffsets: {\n size: 2,\n accessor: 'getIconOffsets'\n },\n instancePickingColors: {\n type: 'uint8',\n size: 3,\n accessor: (object, { index, target: value }) => this.encodePickingColor(index, value)\n }\n });\n }\n updateState(params) {\n super.updateState(params);\n const { props, oldProps } = params;\n let { outlineColor } = props;\n if (outlineColor !== oldProps.outlineColor) {\n outlineColor = outlineColor.map(x => x / 255);\n outlineColor[3] = Number.isFinite(outlineColor[3]) ? outlineColor[3] : 1;\n this.setState({\n outlineColor\n });\n }\n if (!props.sdf && props.outlineWidth) {\n log.warn(`${this.id}: fontSettings.sdf is required to render outline`)();\n }\n }\n draw(params) {\n const { sdf, smoothing, outlineWidth } = this.props;\n const { outlineColor } = this.state;\n const outlineBuffer = outlineWidth\n ? Math.max(smoothing, DEFAULT_BUFFER * (1 - outlineWidth))\n : -1;\n const model = this.state.model;\n const sdfProps = {\n buffer: DEFAULT_BUFFER,\n outlineBuffer,\n gamma: smoothing,\n enabled: Boolean(sdf),\n outlineColor\n };\n model.shaderInputs.setProps({ sdf: sdfProps });\n super.draw(params);\n // draw text without outline on top to ensure a thick outline won't occlude other characters\n if (sdf && outlineWidth) {\n const { iconManager } = this.state;\n const iconsTexture = iconManager.getTexture();\n if (iconsTexture) {\n model.shaderInputs.setProps({ sdf: { ...sdfProps, outlineBuffer: DEFAULT_BUFFER } });\n model.draw(this.context.renderPass);\n }\n }\n }\n getInstanceOffset(icons) {\n return icons ? Array.from(icons).flatMap(icon => super.getInstanceOffset(icon)) : EMPTY_ARRAY;\n }\n getInstanceColorMode(icons) {\n return 1; // mask\n }\n getInstanceIconFrame(icons) {\n return icons\n ? Array.from(icons).flatMap(icon => super.getInstanceIconFrame(icon))\n : EMPTY_ARRAY;\n }\n}\nMultiIconLayer.defaultProps = defaultProps;\nMultiIconLayer.layerName = 'MultiIconLayer';\nexport default MultiIconLayer;\n//# sourceMappingURL=multi-icon-layer.js.map","const INF = 1e20;\n\nexport default class TinySDF {\n constructor({\n fontSize = 24,\n buffer = 3,\n radius = 8,\n cutoff = 0.25,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontStyle = 'normal',\n lang = null\n } = {}) {\n this.buffer = buffer;\n this.cutoff = cutoff;\n this.radius = radius;\n this.lang = lang;\n\n // make the canvas size big enough to both have the specified buffer around the glyph\n // for \"halo\", and account for some glyphs possibly being larger than their font size\n const size = this.size = fontSize + buffer * 4;\n\n const canvas = this._createCanvas(size);\n const ctx = this.ctx = canvas.getContext('2d', {willReadFrequently: true});\n ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;\n\n ctx.textBaseline = 'alphabetic';\n ctx.textAlign = 'left'; // Necessary so that RTL text doesn't have different alignment\n ctx.fillStyle = 'black';\n\n // temporary arrays for the distance transform\n this.gridOuter = new Float64Array(size * size);\n this.gridInner = new Float64Array(size * size);\n this.f = new Float64Array(size);\n this.z = new Float64Array(size + 1);\n this.v = new Uint16Array(size);\n }\n\n _createCanvas(size) {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = size;\n return canvas;\n }\n\n draw(char) {\n const {\n width: glyphAdvance,\n actualBoundingBoxAscent,\n actualBoundingBoxDescent,\n actualBoundingBoxLeft,\n actualBoundingBoxRight\n } = this.ctx.measureText(char);\n\n // The integer/pixel part of the top alignment is encoded in metrics.glyphTop\n // The remainder is implicitly encoded in the rasterization\n const glyphTop = Math.ceil(actualBoundingBoxAscent);\n const glyphLeft = 0;\n\n // If the glyph overflows the canvas size, it will be clipped at the bottom/right\n const glyphWidth = Math.max(0, Math.min(this.size - this.buffer, Math.ceil(actualBoundingBoxRight - actualBoundingBoxLeft)));\n const glyphHeight = Math.min(this.size - this.buffer, glyphTop + Math.ceil(actualBoundingBoxDescent));\n\n const width = glyphWidth + 2 * this.buffer;\n const height = glyphHeight + 2 * this.buffer;\n\n const len = Math.max(width * height, 0);\n const data = new Uint8ClampedArray(len);\n const glyph = {data, width, height, glyphWidth, glyphHeight, glyphTop, glyphLeft, glyphAdvance};\n if (glyphWidth === 0 || glyphHeight === 0) return glyph;\n\n const {ctx, buffer, gridInner, gridOuter} = this;\n if (this.lang) ctx.lang = this.lang;\n ctx.clearRect(buffer, buffer, glyphWidth, glyphHeight);\n ctx.fillText(char, buffer, buffer + glyphTop);\n const imgData = ctx.getImageData(buffer, buffer, glyphWidth, glyphHeight);\n\n // Initialize grids outside the glyph range to alpha 0\n gridOuter.fill(INF, 0, len);\n gridInner.fill(0, 0, len);\n\n for (let y = 0; y < glyphHeight; y++) {\n for (let x = 0; x < glyphWidth; x++) {\n const a = imgData.data[4 * (y * glyphWidth + x) + 3] / 255; // alpha value\n if (a === 0) continue; // empty pixels\n\n const j = (y + buffer) * width + x + buffer;\n\n if (a === 1) { // fully drawn pixels\n gridOuter[j] = 0;\n gridInner[j] = INF;\n\n } else { // aliased pixels\n const d = 0.5 - a;\n gridOuter[j] = d > 0 ? d * d : 0;\n gridInner[j] = d < 0 ? d * d : 0;\n }\n }\n }\n\n edt(gridOuter, 0, 0, width, height, width, this.f, this.v, this.z);\n edt(gridInner, buffer, buffer, glyphWidth, glyphHeight, width, this.f, this.v, this.z);\n\n for (let i = 0; i < len; i++) {\n const d = Math.sqrt(gridOuter[i]) - Math.sqrt(gridInner[i]);\n data[i] = Math.round(255 - 255 * (d / this.radius + this.cutoff));\n }\n\n return glyph;\n }\n}\n\n// 2D Euclidean squared distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/papers/dt-final.pdf\nfunction edt(data, x0, y0, width, height, gridSize, f, v, z) {\n for (let x = x0; x < x0 + width; x++) edt1d(data, y0 * gridSize + x, gridSize, height, f, v, z);\n for (let y = y0; y < y0 + height; y++) edt1d(data, y * gridSize + x0, 1, width, f, v, z);\n}\n\n// 1D squared distance transform\nfunction edt1d(grid, offset, stride, length, f, v, z) {\n v[0] = 0;\n z[0] = -INF;\n z[1] = INF;\n f[0] = grid[offset];\n\n for (let q = 1, k = 0, s = 0; q < length; q++) {\n f[q] = grid[offset + q * stride];\n const q2 = q * q;\n do {\n const r = v[k];\n s = (f[q] - f[r] + q2 - r * r) / (q - r) / 2;\n } while (s <= z[k] && --k > -1);\n\n k++;\n v[k] = q;\n z[k] = s;\n z[k + 1] = INF;\n }\n\n for (let q = 0, k = 0; q < length; q++) {\n while (z[k + 1] < q) k++;\n const r = v[k];\n const qr = q - r;\n grid[offset + q * stride] = f[r] + qr * qr;\n }\n}\n","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable max-statements, max-params, complexity, max-depth */\n// TODO merge with icon-layer/icon-manager\nimport { log } from '@deck.gl/core';\nconst MISSING_CHAR_WIDTH = 32;\nconst SINGLE_LINE = [];\nexport function nextPowOfTwo(number) {\n return Math.pow(2, Math.ceil(Math.log2(number)));\n}\n/**\n * Generate character mapping table or update from an existing mapping table\n */\nexport function buildMapping({ characterSet, getFontWidth, fontHeight, buffer, maxCanvasWidth, mapping = {}, xOffset = 0, yOffset = 0 }) {\n let row = 0;\n // continue from x position of last character in the old mapping\n let x = xOffset;\n const rowHeight = fontHeight + buffer * 2;\n for (const char of characterSet) {\n if (!mapping[char]) {\n // measure texts\n // TODO - use Advanced text metrics when they are adopted:\n // https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics\n const width = getFontWidth(char);\n if (x + width + buffer * 2 > maxCanvasWidth) {\n x = 0;\n row++;\n }\n mapping[char] = {\n x: x + buffer,\n y: yOffset + row * rowHeight + buffer,\n width,\n height: rowHeight,\n layoutWidth: width,\n layoutHeight: fontHeight\n };\n x += width + buffer * 2;\n }\n }\n return {\n mapping,\n xOffset: x,\n yOffset: yOffset + row * rowHeight,\n canvasHeight: nextPowOfTwo(yOffset + (row + 1) * rowHeight)\n };\n}\nfunction getTextWidth(text, startIndex, endIndex, mapping) {\n let width = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const character = text[i];\n width += mapping[character]?.layoutWidth || 0;\n }\n return width;\n}\nfunction breakAll(text, startIndex, endIndex, maxWidth, iconMapping, target) {\n let rowStartCharIndex = startIndex;\n let rowOffsetLeft = 0;\n for (let i = startIndex; i < endIndex; i++) {\n // 2. figure out where to break lines\n const textWidth = getTextWidth(text, i, i + 1, iconMapping);\n if (rowOffsetLeft + textWidth > maxWidth) {\n if (rowStartCharIndex < i) {\n target.push(i);\n }\n rowStartCharIndex = i;\n rowOffsetLeft = 0;\n }\n rowOffsetLeft += textWidth;\n }\n return rowOffsetLeft;\n}\nfunction breakWord(text, startIndex, endIndex, maxWidth, iconMapping, target) {\n let rowStartCharIndex = startIndex;\n let groupStartCharIndex = startIndex;\n let groupEndCharIndex = startIndex;\n let rowOffsetLeft = 0;\n for (let i = startIndex; i < endIndex; i++) {\n // 1. break text into word groups\n // - if current char is white space\n // - else if next char is white space\n // - else if reach last char\n if (text[i] === ' ') {\n groupEndCharIndex = i + 1;\n }\n else if (text[i + 1] === ' ' || i + 1 === endIndex) {\n groupEndCharIndex = i + 1;\n }\n if (groupEndCharIndex > groupStartCharIndex) {\n // 2. break text into next row at maxWidth\n let groupWidth = getTextWidth(text, groupStartCharIndex, groupEndCharIndex, iconMapping);\n if (rowOffsetLeft + groupWidth > maxWidth) {\n if (rowStartCharIndex < groupStartCharIndex) {\n target.push(groupStartCharIndex);\n rowStartCharIndex = groupStartCharIndex;\n rowOffsetLeft = 0;\n }\n // if a single text group is bigger than maxWidth, then `break-all`\n if (groupWidth > maxWidth) {\n groupWidth = breakAll(text, groupStartCharIndex, groupEndCharIndex, maxWidth, iconMapping, target);\n // move reference to last row\n rowStartCharIndex = target[target.length - 1];\n }\n }\n groupStartCharIndex = groupEndCharIndex;\n rowOffsetLeft += groupWidth;\n }\n }\n return rowOffsetLeft;\n}\n/**\n * Wrap the given text so that each line does not exceed the given max width.\n * Returns a list of indices where line breaks should be inserted.\n */\nexport function autoWrapping(text, wordBreak, maxWidth, iconMapping, startIndex = 0, endIndex) {\n if (endIndex === undefined) {\n endIndex = text.length;\n }\n const result = [];\n if (wordBreak === 'break-all') {\n breakAll(text, startIndex, endIndex, maxWidth, iconMapping, result);\n }\n else {\n breakWord(text, startIndex, endIndex, maxWidth, iconMapping, result);\n }\n return result;\n}\nfunction transformRow(line, startIndex, endIndex, iconMapping, leftOffsets, rowSize) {\n let x = 0;\n let rowHeight = 0;\n for (let i = startIndex; i < endIndex; i++) {\n const character = line[i];\n const frame = iconMapping[character];\n if (frame) {\n if (!rowHeight) {\n // frame.height should be a constant\n rowHeight = frame.layoutHeight;\n }\n leftOffsets[i] = x + frame.layoutWidth / 2;\n x += frame.layoutWidth;\n }\n else {\n log.warn(`Missing character: ${character} (${character.codePointAt(0)})`)();\n leftOffsets[i] = x;\n x += MISSING_CHAR_WIDTH;\n }\n }\n rowSize[0] = x;\n rowSize[1] = rowHeight;\n}\n/**\n * Transform a text paragraph to an array of characters, each character contains\n */\nexport function transformParagraph(paragraph, \n/** CSS line-height */\nlineHeight, \n/** CSS word-break option */\nwordBreak, \n/** CSS max-width */\nmaxWidth, \n/** character mapping table for retrieving a character from font atlas */\niconMapping) {\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const characters = Array.from(paragraph);\n const numCharacters = characters.length;\n const x = new Array(numCharacters);\n const y = new Array(numCharacters);\n const rowWidth = new Array(numCharacters);\n const autoWrappingEnabled = (wordBreak === 'break-word' || wordBreak === 'break-all') && isFinite(maxWidth) && maxWidth > 0;\n // maxWidth and height of the paragraph\n const size = [0, 0];\n const rowSize = [0, 0];\n let rowOffsetTop = 0;\n let lineStartIndex = 0;\n let lineEndIndex = 0;\n for (let i = 0; i <= numCharacters; i++) {\n const char = characters[i];\n if (char === '\\n' || i === numCharacters) {\n lineEndIndex = i;\n }\n if (lineEndIndex > lineStartIndex) {\n const rows = autoWrappingEnabled\n ? autoWrapping(characters, wordBreak, maxWidth, iconMapping, lineStartIndex, lineEndIndex)\n : SINGLE_LINE;\n for (let rowIndex = 0; rowIndex <= rows.length; rowIndex++) {\n const rowStart = rowIndex === 0 ? lineStartIndex : rows[rowIndex - 1];\n const rowEnd = rowIndex < rows.length ? rows[rowIndex] : lineEndIndex;\n transformRow(characters, rowStart, rowEnd, iconMapping, x, rowSize);\n for (let j = rowStart; j < rowEnd; j++) {\n // const rowOffsetLeft = x[j] - rowSize[0] / 2;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const char = characters[j];\n const layoutOffsetY = iconMapping[char]?.layoutOffsetY || 0;\n y[j] = rowOffsetTop + rowSize[1] / 2 + layoutOffsetY;\n rowWidth[j] = rowSize[0];\n }\n rowOffsetTop = rowOffsetTop + rowSize[1] * lineHeight;\n size[0] = Math.max(size[0], rowSize[0]);\n }\n lineStartIndex = lineEndIndex;\n }\n if (char === '\\n') {\n // Make sure result.length matches paragraph.length\n x[lineStartIndex] = 0;\n y[lineStartIndex] = 0;\n rowWidth[lineStartIndex] = 0;\n lineStartIndex++;\n }\n }\n // last row\n size[1] = rowOffsetTop;\n return { x, y, rowWidth, size };\n}\nexport function getTextFromBuffer({ value, length, stride, offset, startIndices, characterSet }) {\n const bytesPerElement = value.BYTES_PER_ELEMENT;\n const elementStride = stride ? stride / bytesPerElement : 1;\n const elementOffset = offset ? offset / bytesPerElement : 0;\n const characterCount = startIndices[length] || Math.ceil((value.length - elementOffset) / elementStride);\n const autoCharacterSet = characterSet && new Set();\n const texts = new Array(length);\n let codes = value;\n if (elementStride > 1 || elementOffset > 0) {\n const ArrayType = value.constructor;\n codes = new ArrayType(characterCount);\n for (let i = 0; i < characterCount; i++) {\n codes[i] = value[i * elementStride + elementOffset];\n }\n }\n for (let index = 0; index < length; index++) {\n const startIndex = startIndices[index];\n const endIndex = startIndices[index + 1] || characterCount;\n const codesAtIndex = codes.subarray(startIndex, endIndex);\n // @ts-ignore TS wants the argument to be number[] but typed array works too\n texts[index] = String.fromCodePoint.apply(null, codesAtIndex);\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n codesAtIndex.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n }\n if (autoCharacterSet) {\n for (const charCode of autoCharacterSet) {\n characterSet.add(String.fromCodePoint(charCode));\n }\n }\n return { texts, characterCount };\n}\n//# sourceMappingURL=utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * LRU Cache class with limit\n *\n * Update order for each get/set operation\n * Delete oldest when reach given limit\n */\nexport default class LRUCache {\n constructor(limit = 5) {\n this._cache = {};\n /** access/update order, first item is oldest, last item is newest */\n this._order = [];\n this.limit = limit;\n }\n get(key) {\n const value = this._cache[key];\n if (value) {\n // update order\n this._deleteOrder(key);\n this._appendOrder(key);\n }\n return value;\n }\n set(key, value) {\n if (!this._cache[key]) {\n // if reach limit, delete the oldest\n if (Object.keys(this._cache).length === this.limit) {\n this.delete(this._order[0]);\n }\n this._cache[key] = value;\n this._appendOrder(key);\n }\n else {\n // if found in cache, delete the old one, insert new one to the first of list\n this.delete(key);\n this._cache[key] = value;\n this._appendOrder(key);\n }\n }\n delete(key) {\n const value = this._cache[key];\n if (value) {\n delete this._cache[key];\n this._deleteOrder(key);\n }\n }\n _deleteOrder(key) {\n const index = this._order.indexOf(key);\n if (index >= 0) {\n this._order.splice(index, 1);\n }\n }\n _appendOrder(key) {\n this._order.push(key);\n }\n}\n//# sourceMappingURL=lru-cache.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global document */\nimport TinySDF from '@mapbox/tiny-sdf';\nimport { log } from '@deck.gl/core';\nimport { buildMapping } from \"./utils.js\";\nimport LRUCache from \"./lru-cache.js\";\n// import type {Texture} from '@deck.gl/core';\nfunction getDefaultCharacterSet() {\n const charSet = [];\n for (let i = 32; i < 128; i++) {\n charSet.push(String.fromCharCode(i));\n }\n return charSet;\n}\nexport const DEFAULT_FONT_SETTINGS = {\n fontFamily: 'Monaco, monospace',\n fontWeight: 'normal',\n characterSet: getDefaultCharacterSet(),\n fontSize: 64,\n buffer: 4,\n sdf: false,\n cutoff: 0.25,\n radius: 12,\n smoothing: 0.1\n};\nconst MAX_CANVAS_WIDTH = 1024;\nconst BASELINE_SCALE = 0.9;\nconst HEIGHT_SCALE = 1.2;\n// only preserve latest three fontAtlas\nconst CACHE_LIMIT = 3;\nlet cache = new LRUCache(CACHE_LIMIT);\n/**\n * get all the chars not in cache\n * @returns chars not in cache\n */\nfunction getNewChars(cacheKey, characterSet) {\n let newCharSet;\n if (typeof characterSet === 'string') {\n newCharSet = new Set(Array.from(characterSet));\n }\n else {\n newCharSet = new Set(characterSet);\n }\n const cachedFontAtlas = cache.get(cacheKey);\n if (!cachedFontAtlas) {\n return newCharSet;\n }\n for (const char in cachedFontAtlas.mapping) {\n if (newCharSet.has(char)) {\n newCharSet.delete(char);\n }\n }\n return newCharSet;\n}\nfunction populateAlphaChannel(alphaChannel, imageData) {\n // populate distance value from tinySDF to image alpha channel\n for (let i = 0; i < alphaChannel.length; i++) {\n imageData.data[4 * i + 3] = alphaChannel[i];\n }\n}\nfunction setTextStyle(ctx, fontFamily, fontSize, fontWeight) {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = '#000';\n ctx.textBaseline = 'alphabetic';\n ctx.textAlign = 'left';\n}\n/**\n * Sets the Font Atlas LRU Cache Limit\n * @param {number} limit LRU Cache limit\n */\nexport function setFontAtlasCacheLimit(limit) {\n log.assert(Number.isFinite(limit) && limit >= CACHE_LIMIT, 'Invalid cache limit');\n cache = new LRUCache(limit);\n}\nexport default class FontAtlasManager {\n constructor() {\n /** Font settings */\n this.props = { ...DEFAULT_FONT_SETTINGS };\n }\n get atlas() {\n return this._atlas;\n }\n // TODO - cut during v9 porting as types reveal this is not correct\n // get texture(): Texture | undefined {\n // return this._atlas;\n // }\n get mapping() {\n return this._atlas && this._atlas.mapping;\n }\n get scale() {\n const { fontSize, buffer } = this.props;\n return (fontSize * HEIGHT_SCALE + buffer * 2) / fontSize;\n }\n setProps(props = {}) {\n Object.assign(this.props, props);\n // update cache key\n this._key = this._getKey();\n const charSet = getNewChars(this._key, this.props.characterSet);\n const cachedFontAtlas = cache.get(this._key);\n // if a fontAtlas associated with the new settings is cached and\n // there are no new chars\n if (cachedFontAtlas && charSet.size === 0) {\n // update texture with cached fontAtlas\n if (this._atlas !== cachedFontAtlas) {\n this._atlas = cachedFontAtlas;\n }\n return;\n }\n // update fontAtlas with new settings\n const fontAtlas = this._generateFontAtlas(charSet, cachedFontAtlas);\n this._atlas = fontAtlas;\n // update cache\n cache.set(this._key, fontAtlas);\n }\n // eslint-disable-next-line max-statements\n _generateFontAtlas(characterSet, cachedFontAtlas) {\n const { fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff } = this.props;\n let canvas = cachedFontAtlas && cachedFontAtlas.data;\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.width = MAX_CANVAS_WIDTH;\n }\n const ctx = canvas.getContext('2d', { willReadFrequently: true });\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n // 1. build mapping\n const { mapping, canvasHeight, xOffset, yOffset } = buildMapping({\n getFontWidth: char => ctx.measureText(char).width,\n fontHeight: fontSize * HEIGHT_SCALE,\n buffer,\n characterSet,\n maxCanvasWidth: MAX_CANVAS_WIDTH,\n ...(cachedFontAtlas && {\n mapping: cachedFontAtlas.mapping,\n xOffset: cachedFontAtlas.xOffset,\n yOffset: cachedFontAtlas.yOffset\n })\n });\n // 2. update canvas\n // copy old canvas data to new canvas only when height changed\n if (canvas.height !== canvasHeight) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n canvas.height = canvasHeight;\n ctx.putImageData(imageData, 0, 0);\n }\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n // 3. layout characters\n if (sdf) {\n const tinySDF = new TinySDF({\n fontSize,\n buffer,\n radius,\n cutoff,\n fontFamily,\n fontWeight: `${fontWeight}`\n });\n for (const char of characterSet) {\n const { data, width, height, glyphTop } = tinySDF.draw(char);\n mapping[char].width = width;\n mapping[char].layoutOffsetY = fontSize * BASELINE_SCALE - glyphTop;\n const imageData = ctx.createImageData(width, height);\n populateAlphaChannel(data, imageData);\n ctx.putImageData(imageData, mapping[char].x, mapping[char].y);\n }\n }\n else {\n for (const char of characterSet) {\n ctx.fillText(char, mapping[char].x, mapping[char].y + buffer + fontSize * BASELINE_SCALE);\n }\n }\n return {\n xOffset,\n yOffset,\n mapping,\n data: canvas,\n width: canvas.width,\n height: canvas.height\n };\n }\n _getKey() {\n const { fontFamily, fontWeight, fontSize, buffer, sdf, radius, cutoff } = this.props;\n if (sdf) {\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer} ${radius} ${cutoff}`;\n }\n return `${fontFamily} ${fontWeight} ${fontSize} ${buffer}`;\n }\n}\n//# sourceMappingURL=font-atlas-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform textBackgroundUniforms {\n bool billboard;\n float sizeScale;\n float sizeMinPixels;\n float sizeMaxPixels;\n vec4 borderRadius;\n vec4 padding;\n highp int sizeUnits;\n bool stroked;\n} textBackground;\n`;\nexport const textBackgroundUniforms = {\n name: 'textBackground',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n billboard: 'f32',\n sizeScale: 'f32',\n sizeMinPixels: 'f32',\n sizeMaxPixels: 'f32',\n borderRadius: 'vec4<f32>',\n padding: 'vec4<f32>',\n sizeUnits: 'i32',\n stroked: 'f32'\n }\n};\n//# sourceMappingURL=text-background-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME text-background-layer-vertex-shader\nin vec2 positions;\nin vec3 instancePositions;\nin vec3 instancePositions64Low;\nin vec4 instanceRects;\nin float instanceSizes;\nin float instanceAngles;\nin vec2 instancePixelOffsets;\nin float instanceLineWidths;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin vec3 instancePickingColors;\nout vec4 vFillColor;\nout vec4 vLineColor;\nout float vLineWidth;\nout vec2 uv;\nout vec2 dimensions;\nvec2 rotate_by_angle(vec2 vertex, float angle) {\nfloat angle_radian = radians(angle);\nfloat cos_angle = cos(angle_radian);\nfloat sin_angle = sin(angle_radian);\nmat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\nreturn rotationMatrix * vertex;\n}\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\ngeometry.uv = positions;\ngeometry.pickingColor = instancePickingColors;\nuv = positions;\nvLineWidth = instanceLineWidths;\nfloat sizePixels = clamp(\nproject_size_to_pixel(instanceSizes * textBackground.sizeScale, textBackground.sizeUnits),\ntextBackground.sizeMinPixels, textBackground.sizeMaxPixels\n);\ndimensions = instanceRects.zw * sizePixels + textBackground.padding.xy + textBackground.padding.zw;\nvec2 pixelOffset = (positions * instanceRects.zw + instanceRects.xy) * sizePixels + mix(-textBackground.padding.xy, textBackground.padding.zw, positions);\npixelOffset = rotate_by_angle(pixelOffset, instanceAngles);\npixelOffset += instancePixelOffsets;\npixelOffset.y *= -1.0;\nif (textBackground.billboard) {\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nvec3 offset = vec3(pixelOffset, 0.0);\nDECKGL_FILTER_SIZE(offset, geometry);\ngl_Position.xy += project_pixel_size_to_clipspace(offset.xy);\n} else {\nvec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0);\nDECKGL_FILTER_SIZE(offset_common, geometry);\ngl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nvFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * layer.opacity);\nDECKGL_FILTER_COLOR(vFillColor, geometry);\nvLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * layer.opacity);\nDECKGL_FILTER_COLOR(vLineColor, geometry);\n}\n`;\n//# sourceMappingURL=text-background-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\n#version 300 es\n#define SHADER_NAME text-background-layer-fragment-shader\nprecision highp float;\nin vec4 vFillColor;\nin vec4 vLineColor;\nin float vLineWidth;\nin vec2 uv;\nin vec2 dimensions;\nout vec4 fragColor;\nfloat round_rect(vec2 p, vec2 size, vec4 radii) {\nvec2 pixelPositionCB = (p - 0.5) * size;\nvec2 sizeCB = size * 0.5;\nfloat maxBorderRadius = min(size.x, size.y) * 0.5;\nvec4 borderRadius = vec4(min(radii, maxBorderRadius));\nborderRadius.xy =\n(pixelPositionCB.x > 0.0) ? borderRadius.xy : borderRadius.zw;\nborderRadius.x = (pixelPositionCB.y > 0.0) ? borderRadius.x : borderRadius.y;\nvec2 q = abs(pixelPositionCB) - sizeCB + borderRadius.x;\nreturn -(min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - borderRadius.x);\n}\nfloat rect(vec2 p, vec2 size) {\nvec2 pixelPosition = p * size;\nreturn min(min(pixelPosition.x, size.x - pixelPosition.x),\nmin(pixelPosition.y, size.y - pixelPosition.y));\n}\nvec4 get_stroked_fragColor(float dist) {\nfloat isBorder = smoothedge(dist, vLineWidth);\nreturn mix(vFillColor, vLineColor, isBorder);\n}\nvoid main(void) {\ngeometry.uv = uv;\nif (textBackground.borderRadius != vec4(0.0)) {\nfloat distToEdge = round_rect(uv, dimensions, textBackground.borderRadius);\nif (textBackground.stroked) {\nfragColor = get_stroked_fragColor(distToEdge);\n} else {\nfragColor = vFillColor;\n}\nfloat shapeAlpha = smoothedge(-distToEdge, 0.0);\nfragColor.a *= shapeAlpha;\n} else {\nif (textBackground.stroked) {\nfloat distToEdge = rect(uv, dimensions);\nfragColor = get_stroked_fragColor(distToEdge);\n} else {\nfragColor = vFillColor;\n}\n}\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=text-background-layer-fragment.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Layer, project32, picking, UNIT } from '@deck.gl/core';\nimport { Geometry } from '@luma.gl/engine';\nimport { Model } from '@luma.gl/engine';\nimport { textBackgroundUniforms } from \"./text-background-layer-uniforms.js\";\nimport vs from \"./text-background-layer-vertex.glsl.js\";\nimport fs from \"./text-background-layer-fragment.glsl.js\";\nconst defaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n borderRadius: { type: 'object', value: 0 },\n padding: { type: 'array', value: [0, 0, 0, 0] },\n getPosition: { type: 'accessor', value: (x) => x.position },\n getSize: { type: 'accessor', value: 1 },\n getAngle: { type: 'accessor', value: 0 },\n getPixelOffset: { type: 'accessor', value: [0, 0] },\n getBoundingRect: { type: 'accessor', value: [0, 0, 0, 0] },\n getFillColor: { type: 'accessor', value: [0, 0, 0, 255] },\n getLineColor: { type: 'accessor', value: [0, 0, 0, 255] },\n getLineWidth: { type: 'accessor', value: 1 }\n};\nclass TextBackgroundLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, picking, textBackgroundUniforms] });\n }\n initializeState() {\n this.getAttributeManager().addInstanced({\n instancePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceSizes: {\n size: 1,\n transition: true,\n accessor: 'getSize',\n defaultValue: 1\n },\n instanceAngles: {\n size: 1,\n transition: true,\n accessor: 'getAngle'\n },\n instanceRects: {\n size: 4,\n accessor: 'getBoundingRect'\n },\n instancePixelOffsets: {\n size: 2,\n transition: true,\n accessor: 'getPixelOffset'\n },\n instanceFillColors: {\n size: 4,\n transition: true,\n type: 'unorm8',\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: 4,\n transition: true,\n type: 'unorm8',\n accessor: 'getLineColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineWidths: {\n size: 1,\n transition: true,\n accessor: 'getLineWidth',\n defaultValue: 1\n }\n });\n }\n updateState(params) {\n super.updateState(params);\n const { changeFlags } = params;\n if (changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n this.getAttributeManager().invalidateAll();\n }\n }\n draw({ uniforms }) {\n const { billboard, sizeScale, sizeUnits, sizeMinPixels, sizeMaxPixels, getLineWidth } = this.props;\n let { padding, borderRadius } = this.props;\n if (padding.length < 4) {\n padding = [padding[0], padding[1], padding[0], padding[1]];\n }\n if (!Array.isArray(borderRadius)) {\n borderRadius = [borderRadius, borderRadius, borderRadius, borderRadius];\n }\n const model = this.state.model;\n const textBackgroundProps = {\n billboard,\n stroked: Boolean(getLineWidth),\n borderRadius,\n padding: padding,\n sizeUnits: UNIT[sizeUnits],\n sizeScale,\n sizeMinPixels,\n sizeMaxPixels\n };\n model.shaderInputs.setProps({ textBackground: textBackgroundProps });\n model.draw(this.context.renderPass);\n }\n _getModel() {\n // a square that minimally cover the unit circle\n const positions = [0, 0, 1, 0, 0, 1, 1, 1];\n return new Model(this.context.device, {\n ...this.getShaders(),\n id: this.props.id,\n bufferLayout: this.getAttributeManager().getBufferLayouts(),\n geometry: new Geometry({\n topology: 'triangle-strip',\n vertexCount: 4,\n attributes: {\n positions: { size: 2, value: new Float32Array(positions) }\n }\n }),\n isInstanced: true\n });\n }\n}\nTextBackgroundLayer.defaultProps = defaultProps;\nTextBackgroundLayer.layerName = 'TextBackgroundLayer';\nexport default TextBackgroundLayer;\n//# sourceMappingURL=text-background-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer, createIterable, log } from '@deck.gl/core';\nimport MultiIconLayer from \"./multi-icon-layer/multi-icon-layer.js\";\nimport FontAtlasManager, { DEFAULT_FONT_SETTINGS, setFontAtlasCacheLimit } from \"./font-atlas-manager.js\";\nimport { transformParagraph, getTextFromBuffer } from \"./utils.js\";\nimport TextBackgroundLayer from \"./text-background-layer/text-background-layer.js\";\nconst TEXT_ANCHOR = {\n start: 1,\n middle: 0,\n end: -1\n};\nconst ALIGNMENT_BASELINE = {\n top: 1,\n center: 0,\n bottom: -1\n};\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_LINE_HEIGHT = 1.0;\nconst defaultProps = {\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n background: false,\n getBackgroundColor: { type: 'accessor', value: [255, 255, 255, 255] },\n getBorderColor: { type: 'accessor', value: DEFAULT_COLOR },\n getBorderWidth: { type: 'accessor', value: 0 },\n backgroundBorderRadius: { type: 'object', value: 0 },\n backgroundPadding: { type: 'array', value: [0, 0, 0, 0] },\n characterSet: { type: 'object', value: DEFAULT_FONT_SETTINGS.characterSet },\n fontFamily: DEFAULT_FONT_SETTINGS.fontFamily,\n fontWeight: DEFAULT_FONT_SETTINGS.fontWeight,\n lineHeight: DEFAULT_LINE_HEIGHT,\n outlineWidth: { type: 'number', value: 0, min: 0 },\n outlineColor: { type: 'color', value: DEFAULT_COLOR },\n fontSettings: { type: 'object', value: {}, compare: 1 },\n // auto wrapping options\n wordBreak: 'break-word',\n maxWidth: { type: 'number', value: -1 },\n getText: { type: 'accessor', value: (x) => x.text },\n getPosition: { type: 'accessor', value: (x) => x.position },\n getColor: { type: 'accessor', value: DEFAULT_COLOR },\n getSize: { type: 'accessor', value: 32 },\n getAngle: { type: 'accessor', value: 0 },\n getTextAnchor: { type: 'accessor', value: 'middle' },\n getAlignmentBaseline: { type: 'accessor', value: 'center' },\n getPixelOffset: { type: 'accessor', value: [0, 0] },\n // deprecated\n backgroundColor: { deprecatedFor: ['background', 'getBackgroundColor'] }\n};\n/** Render text labels at given coordinates. */\nclass TextLayer extends CompositeLayer {\n constructor() {\n super(...arguments);\n /** Returns the x, y, width, height of each text string, relative to pixel size.\n * Used to render the background.\n */\n this.getBoundingRect = (object, objectInfo) => {\n let { size: [width, height] } = this.transformParagraph(object, objectInfo);\n const { fontSize } = this.state.fontAtlasManager.props;\n width /= fontSize;\n height /= fontSize;\n const { getTextAnchor, getAlignmentBaseline } = this.props;\n const anchorX = TEXT_ANCHOR[typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor];\n const anchorY = ALIGNMENT_BASELINE[typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline];\n return [((anchorX - 1) * width) / 2, ((anchorY - 1) * height) / 2, width, height];\n };\n /** Returns the x, y offsets of each character in a text string, in texture size.\n * Used to layout characters in the vertex shader.\n */\n this.getIconOffsets = (object, objectInfo) => {\n const { getTextAnchor, getAlignmentBaseline } = this.props;\n const { x, y, rowWidth, size: [width, height] } = this.transformParagraph(object, objectInfo);\n const anchorX = TEXT_ANCHOR[typeof getTextAnchor === 'function' ? getTextAnchor(object, objectInfo) : getTextAnchor];\n const anchorY = ALIGNMENT_BASELINE[typeof getAlignmentBaseline === 'function'\n ? getAlignmentBaseline(object, objectInfo)\n : getAlignmentBaseline];\n const numCharacters = x.length;\n const offsets = new Array(numCharacters * 2);\n let index = 0;\n for (let i = 0; i < numCharacters; i++) {\n // For a multi-line object, offset in x-direction needs consider\n // the row offset in the paragraph and the object offset in the row\n const rowOffset = ((1 - anchorX) * (width - rowWidth[i])) / 2;\n offsets[index++] = ((anchorX - 1) * width) / 2 + rowOffset + x[i];\n offsets[index++] = ((anchorY - 1) * height) / 2 + y[i];\n }\n return offsets;\n };\n }\n initializeState() {\n this.state = {\n styleVersion: 0,\n fontAtlasManager: new FontAtlasManager()\n };\n // Breaking change in v8.9\n if (this.props.maxWidth > 0) {\n log.once(1, 'v8.9 breaking change: TextLayer maxWidth is now relative to text size')();\n }\n }\n // eslint-disable-next-line complexity\n updateState(params) {\n const { props, oldProps, changeFlags } = params;\n const textChanged = changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getText));\n if (textChanged) {\n this._updateText();\n }\n const fontChanged = this._updateFontAtlas();\n const styleChanged = fontChanged ||\n props.lineHeight !== oldProps.lineHeight ||\n props.wordBreak !== oldProps.wordBreak ||\n props.maxWidth !== oldProps.maxWidth;\n if (styleChanged) {\n this.setState({\n styleVersion: this.state.styleVersion + 1\n });\n }\n }\n getPickingInfo({ info }) {\n // because `TextLayer` assign the same pickingInfoIndex for one text label,\n // here info.index refers the index of text label in props.data\n info.object = info.index >= 0 ? this.props.data[info.index] : null;\n return info;\n }\n /** Returns true if font has changed */\n _updateFontAtlas() {\n const { fontSettings, fontFamily, fontWeight } = this.props;\n const { fontAtlasManager, characterSet } = this.state;\n const fontProps = {\n ...fontSettings,\n characterSet,\n fontFamily,\n fontWeight\n };\n if (!fontAtlasManager.mapping) {\n // This is the first update\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n for (const key in fontProps) {\n if (fontProps[key] !== fontAtlasManager.props[key]) {\n fontAtlasManager.setProps(fontProps);\n return true;\n }\n }\n return false;\n }\n // Text strings are variable width objects\n // Count characters and start offsets\n _updateText() {\n const { data, characterSet } = this.props;\n const textBuffer = data.attributes?.getText;\n let { getText } = this.props;\n let startIndices = data.startIndices;\n let numInstances;\n const autoCharacterSet = characterSet === 'auto' && new Set();\n if (textBuffer && startIndices) {\n const { texts, characterCount } = getTextFromBuffer({\n ...(ArrayBuffer.isView(textBuffer) ? { value: textBuffer } : textBuffer),\n // @ts-ignore if data.attribute is defined then length is expected\n length: data.length,\n startIndices,\n characterSet: autoCharacterSet\n });\n numInstances = characterCount;\n getText = (_, { index }) => texts[index];\n }\n else {\n const { iterable, objectInfo } = createIterable(data);\n startIndices = [0];\n numInstances = 0;\n for (const object of iterable) {\n objectInfo.index++;\n // Break into an array of characters\n // When dealing with double-length unicode characters, `str.length` or `str[i]` do not work\n const text = Array.from(getText(object, objectInfo) || '');\n if (autoCharacterSet) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n text.forEach(autoCharacterSet.add, autoCharacterSet);\n }\n numInstances += text.length;\n startIndices.push(numInstances);\n }\n }\n this.setState({\n getText,\n startIndices,\n numInstances,\n characterSet: autoCharacterSet || characterSet\n });\n }\n /** There are two size systems in this layer:\n \n + Pixel size: user-specified text size, via getSize, sizeScale, sizeUnits etc.\n The layer roughly matches the output of the layer to CSS pixels, e.g. getSize: 12, sizeScale: 2\n in layer props is roughly equivalent to font-size: 24px in CSS.\n + Texture size: internally, character positions in a text blob are calculated using the sizes of iconMapping,\n which depends on how large each character is drawn into the font atlas. This is controlled by\n fontSettings.fontSize (default 64) and most users do not set it manually.\n These numbers are intended to be used in the vertex shader and never to be exposed to the end user.\n \n All surfaces exposed to the user should either use the pixel size or a multiplier relative to the pixel size. */\n /** Calculate the size and position of each character in a text string.\n * Values are in texture size */\n transformParagraph(object, objectInfo) {\n const { fontAtlasManager } = this.state;\n const iconMapping = fontAtlasManager.mapping;\n const getText = this.state.getText;\n const { wordBreak, lineHeight, maxWidth } = this.props;\n const paragraph = getText(object, objectInfo) || '';\n return transformParagraph(paragraph, lineHeight, wordBreak, maxWidth * fontAtlasManager.props.fontSize, iconMapping);\n }\n renderLayers() {\n const { startIndices, numInstances, getText, fontAtlasManager: { scale, atlas, mapping }, styleVersion } = this.state;\n const { data, _dataDiff, getPosition, getColor, getSize, getAngle, getPixelOffset, getBackgroundColor, getBorderColor, getBorderWidth, backgroundBorderRadius, backgroundPadding, background, billboard, fontSettings, outlineWidth, outlineColor, sizeScale, sizeUnits, sizeMinPixels, sizeMaxPixels, transitions, updateTriggers } = this.props;\n const CharactersLayerClass = this.getSubLayerClass('characters', MultiIconLayer);\n const BackgroundLayerClass = this.getSubLayerClass('background', TextBackgroundLayer);\n return [\n background &&\n new BackgroundLayerClass({\n // background props\n getFillColor: getBackgroundColor,\n getLineColor: getBorderColor,\n getLineWidth: getBorderWidth,\n borderRadius: backgroundBorderRadius,\n padding: backgroundPadding,\n // props shared with characters layer\n getPosition,\n getSize,\n getAngle,\n getPixelOffset,\n billboard,\n sizeScale,\n sizeUnits,\n sizeMinPixels,\n sizeMaxPixels,\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getSize: transitions.getSize,\n getFillColor: transitions.getBackgroundColor,\n getLineColor: transitions.getBorderColor,\n getLineWidth: transitions.getBorderWidth,\n getPixelOffset: transitions.getPixelOffset\n }\n }, this.getSubLayerProps({\n id: 'background',\n updateTriggers: {\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getSize: updateTriggers.getSize,\n getFillColor: updateTriggers.getBackgroundColor,\n getLineColor: updateTriggers.getBorderColor,\n getLineWidth: updateTriggers.getBorderWidth,\n getPixelOffset: updateTriggers.getPixelOffset,\n getBoundingRect: {\n getText: updateTriggers.getText,\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }), {\n data: \n // @ts-ignore (2339) attribute is not defined on all data types\n data.attributes && data.attributes.background\n ? // @ts-ignore (2339) attribute is not defined on all data types\n { length: data.length, attributes: data.attributes.background }\n : data,\n _dataDiff,\n // Maintain the same background behavior as <=8.3. Remove in v9?\n autoHighlight: false,\n getBoundingRect: this.getBoundingRect\n }),\n new CharactersLayerClass({\n sdf: fontSettings.sdf,\n smoothing: Number.isFinite(fontSettings.smoothing)\n ? fontSettings.smoothing\n : DEFAULT_FONT_SETTINGS.smoothing,\n outlineWidth: outlineWidth / (fontSettings.radius || DEFAULT_FONT_SETTINGS.radius),\n outlineColor,\n iconAtlas: atlas,\n iconMapping: mapping,\n getPosition,\n getColor,\n getSize,\n getAngle,\n getPixelOffset,\n billboard,\n sizeScale: sizeScale * scale,\n sizeUnits,\n sizeMinPixels: sizeMinPixels * scale,\n sizeMaxPixels: sizeMaxPixels * scale,\n transitions: transitions && {\n getPosition: transitions.getPosition,\n getAngle: transitions.getAngle,\n getColor: transitions.getColor,\n getSize: transitions.getSize,\n getPixelOffset: transitions.getPixelOffset\n }\n }, this.getSubLayerProps({\n id: 'characters',\n updateTriggers: {\n all: updateTriggers.getText,\n getPosition: updateTriggers.getPosition,\n getAngle: updateTriggers.getAngle,\n getColor: updateTriggers.getColor,\n getSize: updateTriggers.getSize,\n getPixelOffset: updateTriggers.getPixelOffset,\n getIconOffsets: {\n getTextAnchor: updateTriggers.getTextAnchor,\n getAlignmentBaseline: updateTriggers.getAlignmentBaseline,\n styleVersion\n }\n }\n }), {\n data,\n _dataDiff,\n startIndices,\n numInstances,\n getIconOffsets: this.getIconOffsets,\n getIcon: getText\n })\n ];\n }\n static set fontAtlasCacheLimit(limit) {\n setFontAtlasCacheLimit(limit);\n }\n}\nTextLayer.defaultProps = defaultProps;\nTextLayer.layerName = 'TextLayer';\nexport default TextLayer;\n//# sourceMappingURL=text-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport IconLayer from \"../icon-layer/icon-layer.js\";\nimport ScatterplotLayer from \"../scatterplot-layer/scatterplot-layer.js\";\nimport TextLayer from \"../text-layer/text-layer.js\";\nimport PathLayer from \"../path-layer/path-layer.js\";\nimport SolidPolygonLayer from \"../solid-polygon-layer/solid-polygon-layer.js\";\nexport const POINT_LAYER = {\n circle: {\n type: ScatterplotLayer,\n props: {\n filled: 'filled',\n stroked: 'stroked',\n lineWidthMaxPixels: 'lineWidthMaxPixels',\n lineWidthMinPixels: 'lineWidthMinPixels',\n lineWidthScale: 'lineWidthScale',\n lineWidthUnits: 'lineWidthUnits',\n pointRadiusMaxPixels: 'radiusMaxPixels',\n pointRadiusMinPixels: 'radiusMinPixels',\n pointRadiusScale: 'radiusScale',\n pointRadiusUnits: 'radiusUnits',\n pointAntialiasing: 'antialiasing',\n pointBillboard: 'billboard',\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor',\n getLineWidth: 'getLineWidth',\n getPointRadius: 'getRadius'\n }\n },\n icon: {\n type: IconLayer,\n props: {\n iconAtlas: 'iconAtlas',\n iconMapping: 'iconMapping',\n iconSizeMaxPixels: 'sizeMaxPixels',\n iconSizeMinPixels: 'sizeMinPixels',\n iconSizeScale: 'sizeScale',\n iconSizeUnits: 'sizeUnits',\n iconAlphaCutoff: 'alphaCutoff',\n iconBillboard: 'billboard',\n getIcon: 'getIcon',\n getIconAngle: 'getAngle',\n getIconColor: 'getColor',\n getIconPixelOffset: 'getPixelOffset',\n getIconSize: 'getSize'\n }\n },\n text: {\n type: TextLayer,\n props: {\n textSizeMaxPixels: 'sizeMaxPixels',\n textSizeMinPixels: 'sizeMinPixels',\n textSizeScale: 'sizeScale',\n textSizeUnits: 'sizeUnits',\n textBackground: 'background',\n textBackgroundPadding: 'backgroundPadding',\n textFontFamily: 'fontFamily',\n textFontWeight: 'fontWeight',\n textLineHeight: 'lineHeight',\n textMaxWidth: 'maxWidth',\n textOutlineColor: 'outlineColor',\n textOutlineWidth: 'outlineWidth',\n textWordBreak: 'wordBreak',\n textCharacterSet: 'characterSet',\n textBillboard: 'billboard',\n textFontSettings: 'fontSettings',\n getText: 'getText',\n getTextAngle: 'getAngle',\n getTextColor: 'getColor',\n getTextPixelOffset: 'getPixelOffset',\n getTextSize: 'getSize',\n getTextAnchor: 'getTextAnchor',\n getTextAlignmentBaseline: 'getAlignmentBaseline',\n getTextBackgroundColor: 'getBackgroundColor',\n getTextBorderColor: 'getBorderColor',\n getTextBorderWidth: 'getBorderWidth'\n }\n }\n};\nexport const LINE_LAYER = {\n type: PathLayer,\n props: {\n lineWidthUnits: 'widthUnits',\n lineWidthScale: 'widthScale',\n lineWidthMinPixels: 'widthMinPixels',\n lineWidthMaxPixels: 'widthMaxPixels',\n lineJointRounded: 'jointRounded',\n lineCapRounded: 'capRounded',\n lineMiterLimit: 'miterLimit',\n lineBillboard: 'billboard',\n getLineColor: 'getColor',\n getLineWidth: 'getWidth'\n }\n};\nexport const POLYGON_LAYER = {\n type: SolidPolygonLayer,\n props: {\n extruded: 'extruded',\n filled: 'filled',\n wireframe: 'wireframe',\n elevationScale: 'elevationScale',\n material: 'material',\n _full3d: '_full3d',\n getElevation: 'getElevation',\n getFillColor: 'getFillColor',\n getLineColor: 'getLineColor'\n }\n};\nexport function getDefaultProps({ type, props }) {\n const result = {};\n for (const key in props) {\n result[key] = type.defaultProps[props[key]];\n }\n return result;\n}\nexport function forwardProps(layer, mapping) {\n const { transitions, updateTriggers } = layer.props;\n const result = {\n updateTriggers: {},\n transitions: transitions && {\n getPosition: transitions.geometry\n }\n };\n for (const sourceKey in mapping) {\n const targetKey = mapping[sourceKey];\n let value = layer.props[sourceKey];\n if (sourceKey.startsWith('get')) {\n // isAccessor\n value = layer.getSubLayerAccessor(value);\n result.updateTriggers[targetKey] = updateTriggers[sourceKey];\n if (transitions) {\n result.transitions[targetKey] = transitions[sourceKey];\n }\n }\n result[targetKey] = value;\n }\n return result;\n}\n//# sourceMappingURL=sub-layer-map.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@deck.gl/core';\n/**\n * \"Normalizes\" complete or partial GeoJSON data into iterable list of features\n * Can accept GeoJSON geometry or \"Feature\", \"FeatureCollection\" in addition\n * to plain arrays and iterables.\n * Works by extracting the feature array or wrapping single objects in an array,\n * so that subsequent code can simply iterate over features.\n *\n * @param {object} geojson - geojson data\n * @param {Object|Array} data - geojson object (FeatureCollection, Feature or\n * Geometry) or array of features\n * @return {Array|\"iteratable\"} - iterable list of features\n */\nexport function getGeojsonFeatures(geojson) {\n // If array, assume this is a list of features\n if (Array.isArray(geojson)) {\n return geojson;\n }\n log.assert(geojson.type, 'GeoJSON does not have type');\n switch (geojson.type) {\n case 'Feature':\n // Wrap the feature in a 'Features' array\n return [geojson];\n case 'FeatureCollection':\n // Just return the 'Features' array from the collection\n log.assert(Array.isArray(geojson.features), 'GeoJSON does not have features array');\n return geojson.features;\n default:\n // Assume it's a geometry, we'll check type in separateGeojsonFeatures\n // Wrap the geometry object in a 'Feature' object and wrap in an array\n return [{ geometry: geojson }];\n }\n}\n// Linearize\nexport function separateGeojsonFeatures(features, wrapFeature, dataRange = {}) {\n const separated = {\n pointFeatures: [],\n lineFeatures: [],\n polygonFeatures: [],\n polygonOutlineFeatures: []\n };\n const { startRow = 0, endRow = features.length } = dataRange;\n for (let featureIndex = startRow; featureIndex < endRow; featureIndex++) {\n const feature = features[featureIndex];\n const { geometry } = feature;\n if (!geometry) {\n // geometry can be null per specification\n continue; // eslint-disable-line no-continue\n }\n if (geometry.type === 'GeometryCollection') {\n log.assert(Array.isArray(geometry.geometries), 'GeoJSON does not have geometries array');\n const { geometries } = geometry;\n for (let i = 0; i < geometries.length; i++) {\n const subGeometry = geometries[i];\n separateGeometry(subGeometry, separated, wrapFeature, feature, featureIndex);\n }\n }\n else {\n separateGeometry(geometry, separated, wrapFeature, feature, featureIndex);\n }\n }\n return separated;\n}\nfunction separateGeometry(geometry, separated, wrapFeature, sourceFeature, sourceFeatureIndex) {\n const { type, coordinates } = geometry;\n const { pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures } = separated;\n if (!validateGeometry(type, coordinates)) {\n // Avoid hard failure if some features are malformed\n log.warn(`${type} coordinates are malformed`)();\n return;\n }\n // Split each feature, but keep track of the source feature and index (for Multi* geometries)\n switch (type) {\n case 'Point':\n pointFeatures.push(wrapFeature({\n geometry\n }, sourceFeature, sourceFeatureIndex));\n break;\n case 'MultiPoint':\n coordinates.forEach(point => {\n pointFeatures.push(wrapFeature({\n geometry: { type: 'Point', coordinates: point }\n }, sourceFeature, sourceFeatureIndex));\n });\n break;\n case 'LineString':\n lineFeatures.push(wrapFeature({\n geometry\n }, sourceFeature, sourceFeatureIndex));\n break;\n case 'MultiLineString':\n // Break multilinestrings into multiple lines\n coordinates.forEach(path => {\n lineFeatures.push(wrapFeature({\n geometry: { type: 'LineString', coordinates: path }\n }, sourceFeature, sourceFeatureIndex));\n });\n break;\n case 'Polygon':\n polygonFeatures.push(wrapFeature({\n geometry\n }, sourceFeature, sourceFeatureIndex));\n // Break polygon into multiple lines\n coordinates.forEach(path => {\n polygonOutlineFeatures.push(wrapFeature({\n geometry: { type: 'LineString', coordinates: path }\n }, sourceFeature, sourceFeatureIndex));\n });\n break;\n case 'MultiPolygon':\n // Break multipolygons into multiple polygons\n coordinates.forEach(polygon => {\n polygonFeatures.push(wrapFeature({\n geometry: { type: 'Polygon', coordinates: polygon }\n }, sourceFeature, sourceFeatureIndex));\n // Break polygon into multiple lines\n polygon.forEach(path => {\n polygonOutlineFeatures.push(wrapFeature({\n geometry: { type: 'LineString', coordinates: path }\n }, sourceFeature, sourceFeatureIndex));\n });\n });\n break;\n default:\n }\n}\n/**\n * Simple GeoJSON validation util. For perf reasons we do not validate against the full spec,\n * only the following:\n - geometry.type is supported\n - geometry.coordinate has correct nesting level\n */\nconst COORDINATE_NEST_LEVEL = {\n Point: 1,\n MultiPoint: 2,\n LineString: 2,\n MultiLineString: 3,\n Polygon: 3,\n MultiPolygon: 4\n};\nexport function validateGeometry(type, coordinates) {\n let nestLevel = COORDINATE_NEST_LEVEL[type];\n log.assert(nestLevel, `Unknown GeoJSON type ${type}`);\n while (coordinates && --nestLevel > 0) {\n coordinates = coordinates[0];\n }\n return coordinates && Number.isFinite(coordinates[0]);\n}\n//# sourceMappingURL=geojson.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { calculatePickingColors } from \"./geojson-binary.js\";\nfunction createEmptyLayerProps() {\n return {\n points: {},\n lines: {},\n polygons: {},\n polygonsOutline: {}\n };\n}\nfunction getCoordinates(f) {\n return f.geometry.coordinates;\n}\nexport function createLayerPropsFromFeatures(features, featuresDiff) {\n const layerProps = createEmptyLayerProps();\n const { pointFeatures, lineFeatures, polygonFeatures, polygonOutlineFeatures } = features;\n layerProps.points.data = pointFeatures;\n layerProps.points._dataDiff = featuresDiff.pointFeatures && (() => featuresDiff.pointFeatures);\n layerProps.points.getPosition = getCoordinates;\n layerProps.lines.data = lineFeatures;\n layerProps.lines._dataDiff = featuresDiff.lineFeatures && (() => featuresDiff.lineFeatures);\n layerProps.lines.getPath = getCoordinates;\n layerProps.polygons.data = polygonFeatures;\n layerProps.polygons._dataDiff =\n featuresDiff.polygonFeatures && (() => featuresDiff.polygonFeatures);\n layerProps.polygons.getPolygon = getCoordinates;\n layerProps.polygonsOutline.data = polygonOutlineFeatures;\n layerProps.polygonsOutline._dataDiff =\n featuresDiff.polygonOutlineFeatures && (() => featuresDiff.polygonOutlineFeatures);\n layerProps.polygonsOutline.getPath = getCoordinates;\n return layerProps;\n}\nexport function createLayerPropsFromBinary(geojsonBinary, encodePickingColor) {\n // The binary data format is documented here\n // https://github.com/visgl/loaders.gl/blob/master/modules/gis/docs/api-reference/geojson-to-binary.md\n // It is the default output from the `MVTLoader` and can also be obtained\n // from GeoJSON by using the `geojsonToBinary` utility function.\n const layerProps = createEmptyLayerProps();\n const { points, lines, polygons } = geojsonBinary;\n const customPickingColors = calculatePickingColors(geojsonBinary, encodePickingColor);\n layerProps.points.data = {\n length: points.positions.value.length / points.positions.size,\n attributes: {\n ...points.attributes,\n getPosition: points.positions,\n instancePickingColors: {\n size: 4,\n value: customPickingColors.points\n }\n },\n properties: points.properties,\n numericProps: points.numericProps,\n featureIds: points.featureIds\n };\n layerProps.lines.data = {\n length: lines.pathIndices.value.length - 1,\n startIndices: lines.pathIndices.value,\n attributes: {\n ...lines.attributes,\n getPath: lines.positions,\n instancePickingColors: {\n size: 4,\n value: customPickingColors.lines\n }\n },\n properties: lines.properties,\n numericProps: lines.numericProps,\n featureIds: lines.featureIds\n };\n layerProps.lines._pathType = 'open';\n const vertexCount = polygons.positions.value.length / polygons.positions.size;\n const vertexValid = Array(vertexCount).fill(1);\n for (const index of polygons.primitivePolygonIndices.value) {\n vertexValid[index - 1] = 0;\n }\n layerProps.polygons.data = {\n length: polygons.polygonIndices.value.length - 1,\n startIndices: polygons.polygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPolygon: polygons.positions,\n instanceVertexValid: {\n size: 1,\n value: new Uint16Array(vertexValid)\n },\n pickingColors: {\n size: 4,\n value: customPickingColors.polygons\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n };\n layerProps.polygons._normalize = false;\n if (polygons.triangles) {\n layerProps.polygons.data.attributes.indices = polygons.triangles.value;\n }\n layerProps.polygonsOutline.data = {\n length: polygons.primitivePolygonIndices.value.length - 1,\n startIndices: polygons.primitivePolygonIndices.value,\n attributes: {\n ...polygons.attributes,\n getPath: polygons.positions,\n instancePickingColors: {\n size: 4,\n value: customPickingColors.polygons\n }\n },\n properties: polygons.properties,\n numericProps: polygons.numericProps,\n featureIds: polygons.featureIds\n };\n layerProps.polygonsOutline._pathType = 'open';\n return layerProps;\n}\n//# sourceMappingURL=geojson-layer-props.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CompositeLayer } from '@deck.gl/core';\nimport { replaceInRange } from \"../utils.js\";\nimport { binaryToFeatureForAccesor } from \"./geojson-binary.js\";\nimport { POINT_LAYER, LINE_LAYER, POLYGON_LAYER, getDefaultProps, forwardProps } from \"./sub-layer-map.js\";\nimport { getGeojsonFeatures, separateGeojsonFeatures } from \"./geojson.js\";\nimport { createLayerPropsFromFeatures, createLayerPropsFromBinary } from \"./geojson-layer-props.js\";\nconst FEATURE_TYPES = ['points', 'linestrings', 'polygons'];\nconst defaultProps = {\n ...getDefaultProps(POINT_LAYER.circle),\n ...getDefaultProps(POINT_LAYER.icon),\n ...getDefaultProps(POINT_LAYER.text),\n ...getDefaultProps(LINE_LAYER),\n ...getDefaultProps(POLYGON_LAYER),\n // Overwrite sub layer defaults\n stroked: true,\n filled: true,\n extruded: false,\n wireframe: false,\n _full3d: false,\n iconAtlas: { type: 'object', value: null },\n iconMapping: { type: 'object', value: {} },\n getIcon: { type: 'accessor', value: f => f.properties.icon },\n getText: { type: 'accessor', value: f => f.properties.text },\n // Self props\n pointType: 'circle',\n // TODO: deprecated, remove in v9\n getRadius: { deprecatedFor: 'getPointRadius' }\n};\n/** Render GeoJSON formatted data as polygons, lines and points (circles, icons and/or texts). */\nclass GeoJsonLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n layerProps: {},\n features: {},\n featuresDiff: {}\n };\n }\n updateState({ props, changeFlags }) {\n if (!changeFlags.dataChanged) {\n return;\n }\n const { data } = this.props;\n const binary = data && 'points' in data && 'polygons' in data && 'lines' in data;\n this.setState({ binary });\n if (binary) {\n this._updateStateBinary({ props, changeFlags });\n }\n else {\n this._updateStateJSON({ props, changeFlags });\n }\n }\n _updateStateBinary({ props, changeFlags }) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const layerProps = createLayerPropsFromBinary(props.data, this.encodePickingColor);\n this.setState({ layerProps });\n }\n _updateStateJSON({ props, changeFlags }) {\n const features = getGeojsonFeatures(props.data);\n const wrapFeature = this.getSubLayerRow.bind(this);\n let newFeatures = {};\n const featuresDiff = {};\n if (Array.isArray(changeFlags.dataChanged)) {\n const oldFeatures = this.state.features;\n for (const key in oldFeatures) {\n newFeatures[key] = oldFeatures[key].slice();\n featuresDiff[key] = [];\n }\n for (const dataRange of changeFlags.dataChanged) {\n const partialFeatures = separateGeojsonFeatures(features, wrapFeature, dataRange);\n for (const key in oldFeatures) {\n featuresDiff[key].push(replaceInRange({\n data: newFeatures[key],\n getIndex: f => f.__source.index,\n dataRange,\n replace: partialFeatures[key]\n }));\n }\n }\n }\n else {\n newFeatures = separateGeojsonFeatures(features, wrapFeature);\n }\n const layerProps = createLayerPropsFromFeatures(newFeatures, featuresDiff);\n this.setState({\n features: newFeatures,\n featuresDiff,\n layerProps\n });\n }\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n const { index, sourceLayer } = info;\n info.featureType = FEATURE_TYPES.find(ft => sourceLayer.id.startsWith(`${this.id}-${ft}-`));\n if (index >= 0 && sourceLayer.id.startsWith(`${this.id}-points-text`) && this.state.binary) {\n info.index = this.props.data.points.globalFeatureIds.value[index];\n }\n return info;\n }\n _updateAutoHighlight(info) {\n // All sub layers except the points layer use source feature index to encode the picking color\n // The points layer uses indices from the points data array.\n const pointLayerIdPrefix = `${this.id}-points-`;\n const sourceIsPoints = info.featureType === 'points';\n for (const layer of this.getSubLayers()) {\n if (layer.id.startsWith(pointLayerIdPrefix) === sourceIsPoints) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n _renderPolygonLayer() {\n const { extruded, wireframe } = this.props;\n const { layerProps } = this.state;\n const id = 'polygons-fill';\n const PolygonFillLayer = this.shouldRenderSubLayer(id, layerProps.polygons?.data) &&\n this.getSubLayerClass(id, POLYGON_LAYER.type);\n if (PolygonFillLayer) {\n const forwardedProps = forwardProps(this, POLYGON_LAYER.props);\n // Avoid building the lineColors attribute if wireframe is off\n const useLineColor = extruded && wireframe;\n if (!useLineColor) {\n delete forwardedProps.getLineColor;\n }\n // using a legacy API to invalid lineColor attributes\n forwardedProps.updateTriggers.lineColors = useLineColor;\n return new PolygonFillLayer(forwardedProps, this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers\n }), layerProps.polygons);\n }\n return null;\n }\n _renderLineLayers() {\n const { extruded, stroked } = this.props;\n const { layerProps } = this.state;\n const polygonStrokeLayerId = 'polygons-stroke';\n const lineStringsLayerId = 'linestrings';\n const PolygonStrokeLayer = !extruded &&\n stroked &&\n this.shouldRenderSubLayer(polygonStrokeLayerId, layerProps.polygonsOutline?.data) &&\n this.getSubLayerClass(polygonStrokeLayerId, LINE_LAYER.type);\n const LineStringsLayer = this.shouldRenderSubLayer(lineStringsLayerId, layerProps.lines?.data) &&\n this.getSubLayerClass(lineStringsLayerId, LINE_LAYER.type);\n if (PolygonStrokeLayer || LineStringsLayer) {\n const forwardedProps = forwardProps(this, LINE_LAYER.props);\n return [\n PolygonStrokeLayer &&\n new PolygonStrokeLayer(forwardedProps, this.getSubLayerProps({\n id: polygonStrokeLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }), layerProps.polygonsOutline),\n LineStringsLayer &&\n new LineStringsLayer(forwardedProps, this.getSubLayerProps({\n id: lineStringsLayerId,\n updateTriggers: forwardedProps.updateTriggers\n }), layerProps.lines)\n ];\n }\n return null;\n }\n _renderPointLayers() {\n const { pointType } = this.props;\n const { layerProps, binary } = this.state;\n let { highlightedObjectIndex } = this.props;\n if (!binary && Number.isFinite(highlightedObjectIndex)) {\n // @ts-expect-error TODO - type non-binary data\n highlightedObjectIndex = layerProps.points.data.findIndex(d => d.__source.index === highlightedObjectIndex);\n }\n // Avoid duplicate sub layer ids\n const types = new Set(pointType.split('+'));\n const pointLayers = [];\n for (const type of types) {\n const id = `points-${type}`;\n const PointLayerMapping = POINT_LAYER[type];\n const PointsLayer = PointLayerMapping &&\n this.shouldRenderSubLayer(id, layerProps.points?.data) &&\n this.getSubLayerClass(id, PointLayerMapping.type);\n if (PointsLayer) {\n const forwardedProps = forwardProps(this, PointLayerMapping.props);\n let pointsLayerProps = layerProps.points;\n if (type === 'text' && binary) {\n // Picking colors are per-point but for text per-character are required\n // getPickingInfo() maps back to the correct index\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n // @ts-expect-error TODO - type binary data\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { instancePickingColors, ...rest } = pointsLayerProps.data.attributes;\n pointsLayerProps = {\n ...pointsLayerProps,\n // @ts-expect-error TODO - type binary data\n data: { ...pointsLayerProps.data, attributes: rest }\n };\n }\n pointLayers.push(new PointsLayer(forwardedProps, this.getSubLayerProps({\n id,\n updateTriggers: forwardedProps.updateTriggers,\n highlightedObjectIndex\n }), pointsLayerProps));\n }\n }\n return pointLayers;\n }\n renderLayers() {\n const { extruded } = this.props;\n const polygonFillLayer = this._renderPolygonLayer();\n const lineLayers = this._renderLineLayers();\n const pointLayers = this._renderPointLayers();\n return [\n // If not extruded: flat fill layer is drawn below outlines\n !extruded && polygonFillLayer,\n lineLayers,\n pointLayers,\n // If extruded: draw fill layer last for correct blending behavior\n extruded && polygonFillLayer\n ];\n }\n getSubLayerAccessor(accessor) {\n const { binary } = this.state;\n if (!binary || typeof accessor !== 'function') {\n return super.getSubLayerAccessor(accessor);\n }\n return (object, info) => {\n const { data, index } = info;\n const feature = binaryToFeatureForAccesor(data, index);\n // @ts-ignore (TS2349) accessor is always function\n return accessor(feature, info);\n };\n }\n}\nGeoJsonLayer.layerName = 'GeoJsonLayer';\nGeoJsonLayer.defaultProps = defaultProps;\nexport default GeoJsonLayer;\n//# sourceMappingURL=geojson-layer.js.map"],"names":["uniformBlock","arcUniforms","vs$5","fs$6","DEFAULT_COLOR","defaultProps","x","ArcLayer","Layer","vs","fs","project32","picking","params","uniforms","widthUnits","widthScale","widthMinPixels","widthMaxPixels","greatCircle","wrapLongitude","numSegments","arcProps","UNIT","model","Model","DEFAULT_INDICES","DEFAULT_TEX_COORDS","createMesh","bounds","resolution","createQuad","maxXSpan","maxYSpan","uCount","vCount","vertexCount","indices","texCoords","positions","vertex","index","ut","v","vt","p","interpolateQuad","i","quad","lerp","bitmapUniforms","vs$4","packUVsIntoRGB","fs$5","COORDINATE_SYSTEM","BitmapLayer","attributeManager","noAlloc","attribute","props","oldProps","changeFlags","oldMesh","mesh","key","image","info","width","height","uv","unpackUVsFromRGB","normalizedBounds","isRectangularBounds","opts","shaderModuleProps","coordinateConversion","disablePicking","desaturate","transparentColor","tintColor","bitmapProps","LNGLAT","CARTESIAN","DEFAULT","imageCoordinateSystem","defaultImageCoordinateSystem","bottomLeft","lngLatToWorld","topRight","color","u","fracUV","vFrac","uFrac","iconUniforms","vs$3","fs$4","DEFAULT_CANVAS_WIDTH","DEFAULT_BUFFER","noop","DEFAULT_SAMPLER_PARAMETERS","MISSING_ICON","nextPowOfTwo","number","resizeImage","ctx","imageData","maxWidth","maxHeight","resizeRatio","getIconId","icon","resizeTexture","texture","sampler","oldWidth","oldHeight","device","newTexture","commandEncoder","buildRowMapping","mapping","columns","yOffset","xOffset","id","buildMapping","icons","buffer","rowHeight","canvasWidth","getDiffIcons","data","getIcon","cachedIcons","iterable","objectInfo","createIterable","object","IconManager","onUpdate","onError","loadOptions","autoPacking","iconAtlas","iconMapping","textureParameters","canvasHeight","load","iconDef","y","error","IconLayer","iconManager","prePacked","context","sizeScale","sizeBasis","sizeMinPixels","sizeMaxPixels","sizeUnits","billboard","alphaCutoff","iconsTexture","iconProps","Geometry","evt","onIconError","log","anchorX","anchorY","wgslUniformBlock","glslUniformBlock","pointCloudUniforms","vs$2","fs$3","source$1","DEFAULT_NORMAL","normalizeData","header","attributes","size","value","PointCloudLayer","source","gouraudMaterial","pointSize","pointCloudProps","parameters","angle","scatterplotUniforms","vs$1","fs$2","ScatterplotLayer","radiusUnits","radiusScale","radiusMinPixels","radiusMaxPixels","stroked","filled","antialiasing","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","scatterplotProps","replaceInRange","getIndex","dataRange","replace","startRow","endRow","count","replaceStart","replaceEnd","row","endChunk","defaultLineColor","defaultFillColor","f","PolygonLayer","CompositeLayer","geometryChanged","paths","pathsDiff","getPolygon","positionFormat","_normalize","positionSize","polygon","Polygon.normalize","holeIndices","path","_dataDiff","extruded","wireframe","_windingOrder","elevationScale","transitions","lineJointRounded","lineMiterLimit","lineDashJustified","getFillColor","getLineColor","getLineWidth","getLineDashArray","getElevation","updateTriggers","material","FillLayer","SolidPolygonLayer","StrokeLayer","PathLayer","polygonLayer","polygonLineLayer","binaryToFeatureForAccesor","featureIndex","geometryIndex","getPropertiesForIndex","propertiesIndex","numericPropsIndex","feature","prop","calculatePickingColors","geojsonBinary","encodePickingColor","pickingColors","featureIds","pickingColor","sdfUniforms","fs$1","EMPTY_ARRAY","MultiIconLayer","shaders","outlineColor","sdf","smoothing","outlineWidth","outlineBuffer","sdfProps","INF","TinySDF","fontSize","radius","cutoff","fontFamily","fontWeight","fontStyle","lang","canvas","char","glyphAdvance","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","actualBoundingBoxRight","glyphTop","glyphLeft","glyphWidth","glyphHeight","len","glyph","gridInner","gridOuter","imgData","a","j","d","edt","x0","y0","gridSize","z","edt1d","grid","offset","stride","length","q","k","s","q2","r","qr","MISSING_CHAR_WIDTH","SINGLE_LINE","characterSet","getFontWidth","fontHeight","maxCanvasWidth","getTextWidth","text","startIndex","endIndex","character","breakAll","target","rowStartCharIndex","rowOffsetLeft","textWidth","breakWord","groupStartCharIndex","groupEndCharIndex","groupWidth","autoWrapping","wordBreak","result","transformRow","line","leftOffsets","rowSize","frame","transformParagraph","paragraph","lineHeight","characters","numCharacters","rowWidth","autoWrappingEnabled","rowOffsetTop","lineStartIndex","lineEndIndex","rows","rowIndex","rowStart","rowEnd","layoutOffsetY","getTextFromBuffer","startIndices","bytesPerElement","elementStride","elementOffset","characterCount","autoCharacterSet","texts","codes","ArrayType","codesAtIndex","charCode","LRUCache","limit","getDefaultCharacterSet","charSet","DEFAULT_FONT_SETTINGS","MAX_CANVAS_WIDTH","BASELINE_SCALE","HEIGHT_SCALE","CACHE_LIMIT","cache","getNewChars","cacheKey","newCharSet","cachedFontAtlas","populateAlphaChannel","alphaChannel","setTextStyle","setFontAtlasCacheLimit","FontAtlasManager","fontAtlas","tinySDF","textBackgroundUniforms","TextBackgroundLayer","padding","borderRadius","textBackgroundProps","TEXT_ANCHOR","ALIGNMENT_BASELINE","DEFAULT_LINE_HEIGHT","TextLayer","getTextAnchor","getAlignmentBaseline","offsets","rowOffset","fontSettings","fontAtlasManager","fontProps","textBuffer","getText","numInstances","_","scale","atlas","styleVersion","getPosition","getColor","getSize","getAngle","getPixelOffset","getBackgroundColor","getBorderColor","getBorderWidth","backgroundBorderRadius","backgroundPadding","background","CharactersLayerClass","BackgroundLayerClass","POINT_LAYER","LINE_LAYER","POLYGON_LAYER","getDefaultProps","type","forwardProps","layer","sourceKey","targetKey","getGeojsonFeatures","geojson","separateGeojsonFeatures","features","wrapFeature","separated","geometry","geometries","subGeometry","separateGeometry","sourceFeature","sourceFeatureIndex","coordinates","pointFeatures","lineFeatures","polygonFeatures","polygonOutlineFeatures","validateGeometry","point","COORDINATE_NEST_LEVEL","nestLevel","createEmptyLayerProps","getCoordinates","createLayerPropsFromFeatures","featuresDiff","layerProps","createLayerPropsFromBinary","points","lines","polygons","customPickingColors","vertexValid","FEATURE_TYPES","GeoJsonLayer","binary","newFeatures","oldFeatures","partialFeatures","sourceLayer","ft","pointLayerIdPrefix","sourceIsPoints","PolygonFillLayer","forwardedProps","useLineColor","polygonStrokeLayerId","lineStringsLayerId","PolygonStrokeLayer","LineStringsLayer","pointType","highlightedObjectIndex","types","pointLayers","PointLayerMapping","PointsLayer","pointsLayerProps","instancePickingColors","rest","polygonFillLayer","lineLayers","accessor"],"mappings":"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GAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECA1BC,GAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECA1BR,GAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42]}