tangram-core 0.3.0__cp310-cp310-manylinux_2_28_aarch64.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 (162) hide show
  1. tangram_core/App.vue +441 -0
  2. tangram_core/CommandPalette.vue +200 -0
  3. tangram_core/HighlightText.vue +32 -0
  4. tangram_core/__Timeline.vue +300 -0
  5. tangram_core/__init__.py +5 -0
  6. tangram_core/__main__.py +331 -0
  7. tangram_core/_core.cpython-310-aarch64-linux-gnu.so +0 -0
  8. tangram_core/_core.pyi +38 -0
  9. tangram_core/api.ts +652 -0
  10. tangram_core/backend.py +458 -0
  11. tangram_core/components.ts +2 -0
  12. tangram_core/config.py +167 -0
  13. tangram_core/dist-frontend/aggregation-layers.js +521 -0
  14. tangram_core/dist-frontend/aggregation-layers.js.map +1 -0
  15. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js +2 -0
  16. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
  17. tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js +11 -0
  18. tangram_core/dist-frontend/assets/array-utils-flat-BBMak426.js.map +1 -0
  19. tangram_core/dist-frontend/assets/assert-cyW4mg7q.js +3 -0
  20. tangram_core/dist-frontend/assets/assert-cyW4mg7q.js.map +1 -0
  21. tangram_core/dist-frontend/assets/b612-latin-400-italic-DePNXA0a.woff +0 -0
  22. tangram_core/dist-frontend/assets/b612-latin-400-italic-a-4GLPtl.woff2 +0 -0
  23. tangram_core/dist-frontend/assets/b612-latin-400-normal-CC98FVm_.woff2 +0 -0
  24. tangram_core/dist-frontend/assets/b612-latin-400-normal-JbZ7xwUX.woff +0 -0
  25. tangram_core/dist-frontend/assets/b612-latin-700-normal-B_Snq1wd.woff +0 -0
  26. tangram_core/dist-frontend/assets/b612-latin-700-normal-BinQrnoB.woff2 +0 -0
  27. tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js +26 -0
  28. tangram_core/dist-frontend/assets/clip-extension-D-rbmFPj.js.map +1 -0
  29. tangram_core/dist-frontend/assets/color-CUNNsFV-.js +17 -0
  30. tangram_core/dist-frontend/assets/color-CUNNsFV-.js.map +1 -0
  31. tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js +2 -0
  32. tangram_core/dist-frontend/assets/cube-geometry-v0HQ793i.js.map +1 -0
  33. tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js +2 -0
  34. tangram_core/dist-frontend/assets/deep-equal-BTW2ZN6S.js.map +1 -0
  35. tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js +2 -0
  36. tangram_core/dist-frontend/assets/fly-to-interpolator-CIXGjOdo.js.map +1 -0
  37. tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js +1010 -0
  38. tangram_core/dist-frontend/assets/geojson-layer-DgMOQ4Qu.js.map +1 -0
  39. tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js +94 -0
  40. tangram_core/dist-frontend/assets/globe-view-Day_n1iB.js.map +1 -0
  41. tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js +2 -0
  42. tangram_core/dist-frontend/assets/globe-viewport-tqhQW7C4.js.map +1 -0
  43. tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js +2 -0
  44. tangram_core/dist-frontend/assets/image-loader-hHJsndO6.js.map +1 -0
  45. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-DTZQ6lD6.woff2 +0 -0
  46. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-HYADljCo.woff +0 -0
  47. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-ByjKuJjN.woff2 +0 -0
  48. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-DzgUY3Rl.woff +0 -0
  49. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-BaHVOdFB.woff2 +0 -0
  50. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-yvPjCxxx.woff +0 -0
  51. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-D0Kpgs_9.woff2 +0 -0
  52. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-Dlt-daqV.woff +0 -0
  53. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-ByiM2lek.woff +0 -0
  54. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-DfC_iMic.woff2 +0 -0
  55. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DLCFFAUf.woff +0 -0
  56. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DuasYmn8.woff2 +0 -0
  57. tangram_core/dist-frontend/assets/index-CcogpxdD.js +824 -0
  58. tangram_core/dist-frontend/assets/index-CcogpxdD.js.map +1 -0
  59. tangram_core/dist-frontend/assets/index-SSLdizTv.css +1 -0
  60. tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js +555 -0
  61. tangram_core/dist-frontend/assets/layer-DPcO4AXQ.js.map +1 -0
  62. tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js +2 -0
  63. tangram_core/dist-frontend/assets/layer-extension-CYwTXf73.js.map +1 -0
  64. tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js +1123 -0
  65. tangram_core/dist-frontend/assets/mesh-layers-wiqredoy.js.map +1 -0
  66. tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js +2 -0
  67. tangram_core/dist-frontend/assets/orthographic-viewport-B4nCj5tn.js.map +1 -0
  68. tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js +2 -0
  69. tangram_core/dist-frontend/assets/pick-layers-pass-C-3k0wbN.js.map +1 -0
  70. tangram_core/dist-frontend/assets/project-BTjD2Imj.js +760 -0
  71. tangram_core/dist-frontend/assets/project-BTjD2Imj.js.map +1 -0
  72. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-4qS3_zkX.woff2 +0 -0
  73. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-CDK-EZBY.woff +0 -0
  74. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-Bgns473E.woff +0 -0
  75. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-_T2aQlWs.woff2 +0 -0
  76. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-CvEVpWxD.woff +0 -0
  77. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-s4PklZE0.woff2 +0 -0
  78. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-9RN-Z7cI.woff2 +0 -0
  79. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-BGMkBBYx.woff +0 -0
  80. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-C7erd-g8.woff +0 -0
  81. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-DR5R5TWx.woff2 +0 -0
  82. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-DGo1Ayjq.woff2 +0 -0
  83. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-WtM1l1qc.woff +0 -0
  84. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-C8FNIdXm.woff2 +0 -0
  85. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-TLDmfi3Q.woff +0 -0
  86. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CTXjXnze.woff2 +0 -0
  87. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CWPRiRXS.woff +0 -0
  88. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-CR6qj4Z4.woff2 +0 -0
  89. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-DHRaIs10.woff +0 -0
  90. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-D5vBSIyg.woff2 +0 -0
  91. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-FabMgVmk.woff +0 -0
  92. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-BIN62cw9.woff +0 -0
  93. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-Hsn-wDIp.woff2 +0 -0
  94. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-89Up2Xly.woff +0 -0
  95. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-DWMOA2VK.woff2 +0 -0
  96. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-D_BR-3LG.woff2 +0 -0
  97. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-om57GXsO.woff +0 -0
  98. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-BICmKrXV.woff2 +0 -0
  99. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-D2e7XwB1.woff +0 -0
  100. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-3p2daRJW.woff2 +0 -0
  101. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-Dc9bsamC.woff +0 -0
  102. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-BOl6B_hI.woff +0 -0
  103. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-DRbp0YnP.woff2 +0 -0
  104. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-BXrkWnoY.woff +0 -0
  105. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-Bhem1d5z.woff2 +0 -0
  106. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-DT8nEsYA.woff +0 -0
  107. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-OHaX69iP.woff2 +0 -0
  108. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-CcSTXKtO.woff2 +0 -0
  109. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-JgPl2bDS.woff +0 -0
  110. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-B004qtqu.woff2 +0 -0
  111. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-O6H_RRvN.woff +0 -0
  112. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-BwUYFJ2t.woff2 +0 -0
  113. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-DV8QogUk.woff +0 -0
  114. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-0o1laQ-g.woff2 +0 -0
  115. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-CPsdS8_S.woff +0 -0
  116. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-G9shSJ2z.woff +0 -0
  117. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-TFWhjk13.woff2 +0 -0
  118. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-BtNeb9D6.woff +0 -0
  119. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-D35V1G0s.woff2 +0 -0
  120. tangram_core/dist-frontend/assets/shader-Cbdysp2j.js +843 -0
  121. tangram_core/dist-frontend/assets/shader-Cbdysp2j.js.map +1 -0
  122. tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js +392 -0
  123. tangram_core/dist-frontend/assets/solid-polygon-layer-DJFl_7Ca.js.map +1 -0
  124. tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js +2 -0
  125. tangram_core/dist-frontend/assets/tesselator-CENyUZ2p.js.map +1 -0
  126. tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js +7 -0
  127. tangram_core/dist-frontend/assets/webgl-developer-tools-utTNOsNf.js.map +1 -0
  128. tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js +3 -0
  129. tangram_core/dist-frontend/assets/webgl-device-BYRB-GQX.js.map +1 -0
  130. tangram_core/dist-frontend/assets/widget-BjgEeHAL.js +2 -0
  131. tangram_core/dist-frontend/assets/widget-BjgEeHAL.js.map +1 -0
  132. tangram_core/dist-frontend/core.js +60 -0
  133. tangram_core/dist-frontend/core.js.map +1 -0
  134. tangram_core/dist-frontend/extensions.js +609 -0
  135. tangram_core/dist-frontend/extensions.js.map +1 -0
  136. tangram_core/dist-frontend/favicon.ico +0 -0
  137. tangram_core/dist-frontend/favicon.png +0 -0
  138. tangram_core/dist-frontend/geo-layers.js +115 -0
  139. tangram_core/dist-frontend/geo-layers.js.map +1 -0
  140. tangram_core/dist-frontend/index.html +39 -0
  141. tangram_core/dist-frontend/json.js +3 -0
  142. tangram_core/dist-frontend/json.js.map +1 -0
  143. tangram_core/dist-frontend/layers.js +268 -0
  144. tangram_core/dist-frontend/layers.js.map +1 -0
  145. tangram_core/dist-frontend/mapbox.js +2 -0
  146. tangram_core/dist-frontend/mapbox.js.map +1 -0
  147. tangram_core/dist-frontend/mesh-layers.js +2 -0
  148. tangram_core/dist-frontend/mesh-layers.js.map +1 -0
  149. tangram_core/dist-frontend/widgets.js +3 -0
  150. tangram_core/dist-frontend/widgets.js.map +1 -0
  151. tangram_core/main.ts +28 -0
  152. tangram_core/package.json +62 -0
  153. tangram_core/plugin.py +109 -0
  154. tangram_core/plugin.ts +47 -0
  155. tangram_core/redis.py +89 -0
  156. tangram_core/user.css +114 -0
  157. tangram_core/utils.ts +143 -0
  158. tangram_core/vite-plugin-tangram.mjs +155 -0
  159. tangram_core-0.3.0.dist-info/METADATA +101 -0
  160. tangram_core-0.3.0.dist-info/RECORD +162 -0
  161. tangram_core-0.3.0.dist-info/WHEEL +4 -0
  162. tangram_core-0.3.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-polygon-layer-DJFl_7Ca.js","sources":["../../../../node_modules/.pnpm/@math.gl+polygon@4.1.0/node_modules/@math.gl/polygon/dist/polygon-utils.js","../../../../node_modules/.pnpm/@math.gl+polygon@4.1.0/node_modules/@math.gl/polygon/dist/utils.js","../../../../node_modules/.pnpm/@math.gl+polygon@4.1.0/node_modules/@math.gl/polygon/dist/lineclip.js","../../../../node_modules/.pnpm/@math.gl+polygon@4.1.0/node_modules/@math.gl/polygon/dist/cut-by-grid.js","../../../../node_modules/.pnpm/@math.gl+polygon@4.1.0/node_modules/@math.gl/polygon/dist/cut-by-mercator-bounds.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/column-layer/column-geometry.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/column-layer/column-layer-uniforms.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/column-layer/column-layer-vertex.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/column-layer/column-layer-fragment.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/column-layer/column-layer.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path-tesselator.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path-layer-uniforms.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path-layer-vertex.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path-layer-fragment.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/path-layer/path-layer.js","../../../../node_modules/.pnpm/earcut@2.2.4/node_modules/earcut/src/earcut.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/polygon.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/polygon-tesselator.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer-uniforms.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer-vertex-top.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer-vertex-side.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer-fragment.glsl.js","../../../../node_modules/.pnpm/@deck.gl+layers@9.2.6_@deck.gl+core@9.2.6_@loaders.gl+core@4.3.4_@luma.gl+core@9.2.6_@l_5aff0b42a0cad74c3df9dc79be75de3a/node_modules/@deck.gl/layers/dist/solid-polygon-layer/solid-polygon-layer.js"],"sourcesContent":["// math.gl\n// SPDX-License-Identifier: MIT and ISC\n// Copyright (c) vis.gl contributors\n/* eslint-disable max-statements, max-depth, complexity, no-unused-expressions */\nimport { equals } from '@math.gl/core';\nexport const WINDING = {\n CLOCKWISE: 1,\n COUNTER_CLOCKWISE: -1\n};\n/**\n * Checks winding direction of the polygon and reverses the polygon in case of opposite winding direction.\n * Note: points are modified in-place.\n * @param points An array that represents points of the polygon.\n * @param direction Requested winding direction. 1 is for clockwise, -1 for counterclockwise winding direction.\n * @param options Parameters of the polygon.\n * @return Returns true if the winding direction was changed.\n */\nexport function modifyPolygonWindingDirection(points, direction, options = {}) {\n const windingDirection = getPolygonWindingDirection(points, options);\n if (windingDirection !== direction) {\n reversePolygon(points, options);\n return true;\n }\n return false;\n}\n/**\n * Returns winding direction of the polygon.\n * @param points An array that represents points of the polygon.\n * @param options Parameters of the polygon.\n * @returns Winding direction of the polygon.\n */\nexport function getPolygonWindingDirection(points, options = {}) {\n return Math.sign(getPolygonSignedArea(points, options));\n}\nexport const DimIndex = {\n x: 0,\n y: 1,\n z: 2\n};\n/**\n * Returns signed area of the polygon.\n * @param points An array that represents points of the polygon.\n * @param options Parameters of the polygon.\n * @returns Signed area of the polygon.\n * https://en.wikipedia.org/wiki/Shoelace_formula\n */\nexport function getPolygonSignedArea(points, options = {}) {\n const { start = 0, end = points.length, plane = 'xy' } = options;\n const dim = options.size || 2;\n let area = 0;\n const i0 = DimIndex[plane[0]];\n const i1 = DimIndex[plane[1]];\n for (let i = start, j = end - dim; i < end; i += dim) {\n area += (points[i + i0] - points[j + i0]) * (points[i + i1] + points[j + i1]);\n j = i;\n }\n return area / 2;\n}\n/**\n * Calls the visitor callback for each segment in the polygon.\n * @param points An array that represents points of the polygon\n * @param visitor A callback to call for each segment.\n * @param options Parameters of the polygon.\n */\nexport function forEachSegmentInPolygon(points, visitor, options = {}) {\n const { start = 0, end = points.length, size = 2, isClosed } = options;\n const numPoints = (end - start) / size;\n for (let i = 0; i < numPoints - 1; ++i) {\n visitor(points[start + i * size], points[start + i * size + 1], points[start + (i + 1) * size], points[start + (i + 1) * size + 1], i, i + 1);\n }\n const endPointIndex = start + (numPoints - 1) * size;\n const isClosedEx = isClosed ||\n (equals(points[start], points[endPointIndex]) &&\n equals(points[start + 1], points[endPointIndex + 1]));\n if (!isClosedEx) {\n visitor(points[endPointIndex], points[endPointIndex + 1], points[start], points[start + 1], numPoints - 1, 0);\n }\n}\nfunction reversePolygon(points, options) {\n const { start = 0, end = points.length, size = 2 } = options;\n const numPoints = (end - start) / size;\n const numSwaps = Math.floor(numPoints / 2);\n for (let i = 0; i < numSwaps; ++i) {\n const b1 = start + i * size;\n const b2 = start + (numPoints - 1 - i) * size;\n for (let j = 0; j < size; ++j) {\n const tmp = points[b1 + j];\n points[b1 + j] = points[b2 + j];\n points[b2 + j] = tmp;\n }\n }\n}\n/**\n * Checks winding direction of the polygon and reverses the polygon in case of opposite winding direction.\n * Note: points are modified in-place.\n * @param points Array of points that represent the polygon.\n * @param direction Requested winding direction. 1 is for clockwise, -1 for counterclockwise winding direction.\n * @param options Parameters of the polygon.\n * @return Returns true if the winding direction was changed.\n */\nexport function modifyPolygonWindingDirectionPoints(points, direction, options = {}) {\n const currentDirection = getPolygonWindingDirectionPoints(points, options);\n if (currentDirection !== direction) {\n points.reverse();\n return true;\n }\n return false;\n}\n/**\n * Returns winding direction of the polygon.\n * @param points Array of points that represent the polygon.\n * @param options Parameters of the polygon.\n * @returns Winding direction of the polygon.\n */\nexport function getPolygonWindingDirectionPoints(points, options = {}) {\n return Math.sign(getPolygonSignedAreaPoints(points, options));\n}\n/**\n * Returns signed area of the polygon.\n * @param points Array of points that represent the polygon.\n * @param options Parameters of the polygon.\n * @returns Signed area of the polygon.\n */\nexport function getPolygonSignedAreaPoints(points, options = {}) {\n // https://en.wikipedia.org/wiki/Shoelace_formula\n const { start = 0, end = points.length, plane = 'xy' } = options;\n let area = 0;\n const i0 = DimIndex[plane[0]];\n const i1 = DimIndex[plane[1]];\n for (let i = start, j = end - 1; i < end; ++i) {\n area += (points[i][i0] - points[j][i0]) * (points[i][i1] + points[j][i1]);\n j = i;\n }\n return area / 2;\n}\n/**\n * Calls visitor callback for each segment in the polygon.\n * @param points Array of points that represent the polygon.\n * @param visitor A callback to call for each segment.\n * @param options Parameters of the polygon.\n */\nexport function forEachSegmentInPolygonPoints(points, visitor, options = {}) {\n const { start = 0, end = points.length, isClosed } = options;\n for (let i = start; i < end - 1; ++i) {\n visitor(points[i], points[i + 1], i, i + 1);\n }\n const isClosedEx = isClosed || equals(points[end - 1], points[0]);\n if (!isClosedEx) {\n visitor(points[end - 1], points[0], end - 1, 0);\n }\n}\n//# sourceMappingURL=polygon-utils.js.map","// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function push(target, source) {\n const size = source.length;\n const startIndex = target.length;\n // dedupe, if source is the same point as the last vertex\n if (startIndex > 0) {\n let isDuplicate = true;\n for (let i = 0; i < size; i++) {\n if (target[startIndex - size + i] !== source[i]) {\n isDuplicate = false;\n break;\n }\n }\n if (isDuplicate) {\n return false;\n }\n }\n for (let i = 0; i < size; i++) {\n target[startIndex + i] = source[i];\n }\n return true;\n}\nexport function copy(target, source) {\n const size = source.length;\n for (let i = 0; i < size; i++) {\n target[i] = source[i];\n }\n}\nexport function getPointAtIndex(positions, index, size, offset, out = []) {\n const startI = offset + index * size;\n for (let i = 0; i < size; i++) {\n out[i] = positions[startI + i];\n }\n return out;\n}\n//# sourceMappingURL=utils.js.map","// math.gl\n// SPDX-License-Identifier: MIT and ISC\n// Copyright (c) vis.gl contributors\n/*\n Adapted from https://github.com/mapbox/lineclip to work with flat arrays\n and 3d positions\n\n ISC License\n\n Copyright (c) 2015, Mapbox\n\n Permission to use, copy, modify, and/or distribute this software for any purpose\n with or without fee is hereby granted, provided that the above copyright notice\n and this permission notice appear in all copies.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n THIS SOFTWARE.\n\n */\n/* eslint-disable max-statements, max-depth, complexity */\nimport { push, copy, getPointAtIndex } from \"./utils.js\";\n/**\n * Cohen-Sutherland line clipping algorithm, adapted to efficiently\n * handle polylines rather than just segments\n */\nexport function clipPolyline(positions, bbox, options) {\n const { size = 2, startIndex = 0, endIndex = positions.length } = options || {};\n const numPoints = (endIndex - startIndex) / size;\n const result = [];\n let part = [];\n let a;\n let b;\n let codeA = -1;\n let codeB;\n let lastCode;\n for (let i = 1; i < numPoints; i++) {\n a = getPointAtIndex(positions, i - 1, size, startIndex, a);\n b = getPointAtIndex(positions, i, size, startIndex, b);\n if (codeA < 0) {\n codeA = bitCode(a, bbox);\n }\n codeB = lastCode = bitCode(b, bbox);\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(codeA | codeB)) {\n // accept\n push(part, a);\n if (codeB !== lastCode) {\n // segment went outside\n push(part, b);\n if (i < numPoints - 1) {\n // start a new line\n result.push(part);\n part = [];\n }\n }\n else if (i === numPoints - 1) {\n push(part, b);\n }\n break;\n }\n else if (codeA & codeB) {\n // trivial reject\n break;\n }\n else if (codeA) {\n // a outside, intersect with clip edge\n intersect(a, b, codeA, bbox, a);\n codeA = bitCode(a, bbox);\n }\n else {\n // b outside\n intersect(a, b, codeB, bbox, b);\n codeB = bitCode(b, bbox);\n }\n }\n codeA = lastCode;\n }\n if (part.length)\n result.push(part);\n return result;\n}\n/**\n * Sutherland-Hodgeman polygon clipping algorithm\n * polygon must be closed (first vertex == last vertex)\n */\nexport function clipPolygon(positions, bbox, options) {\n const { size = 2, endIndex = positions.length } = options || {};\n let { startIndex = 0 } = options || {};\n let numPoints = (endIndex - startIndex) / size;\n let result;\n let p;\n let prev;\n let inside;\n let prevInside;\n // clip against each side of the clip rectangle\n for (let edge = 1; edge <= 8; edge *= 2) {\n result = [];\n prev = getPointAtIndex(positions, numPoints - 1, size, startIndex, prev);\n prevInside = !(bitCode(prev, bbox) & edge);\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n inside = !(bitCode(p, bbox) & edge);\n // if segment goes through the clip window, add an intersection\n if (inside !== prevInside)\n push(result, intersect(prev, p, edge, bbox));\n if (inside)\n push(result, p); // add a point if it's inside\n copy(prev, p);\n prevInside = inside;\n }\n // close loop\n positions = result;\n startIndex = 0;\n numPoints = result.length / size;\n if (!numPoints)\n break;\n }\n return result;\n}\n/** intersect a segment against one of the 4 lines that make up the bbox */\nexport function intersect(a, b, edge, bbox, out = []) {\n let t;\n // Forces out[snapI] to be on the bbox edge\n // Interpolation introduces precision issue which may cause lineclip to be\n // stuck in an infinite loop\n let snap;\n if (edge & 8) {\n // top\n t = (bbox[3] - a[1]) / (b[1] - a[1]);\n snap = 3;\n }\n else if (edge & 4) {\n // bottom\n t = (bbox[1] - a[1]) / (b[1] - a[1]);\n snap = 1;\n }\n else if (edge & 2) {\n // right\n t = (bbox[2] - a[0]) / (b[0] - a[0]);\n snap = 2;\n }\n else if (edge & 1) {\n // left\n t = (bbox[0] - a[0]) / (b[0] - a[0]);\n snap = 0;\n }\n else {\n return null;\n }\n for (let i = 0; i < a.length; i++) {\n out[i] = (snap & 1) === i ? bbox[snap] : t * (b[i] - a[i]) + a[i];\n }\n return out;\n}\n/**\n * bit code reflects the point position relative to the bbox:\n * left mid right\n * top 1001 1000 1010\n * mid 0001 0000 0010\n * bottom 0101 0100 0110\n */\nexport function bitCode(p, bbox) {\n let code = 0;\n if (p[0] < bbox[0])\n code |= 1;\n // left\n else if (p[0] > bbox[2])\n code |= 2; // right\n if (p[1] < bbox[1])\n code |= 4;\n // bottom\n else if (p[1] > bbox[3])\n code |= 8; // top\n return code;\n}\n//# sourceMappingURL=lineclip.js.map","// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable max-statements, max-depth, complexity, no-unused-expressions */\nimport { bitCode, intersect } from \"./lineclip.js\";\nimport { getPointAtIndex, copy, push } from \"./utils.js\";\nexport function cutPolylineByGrid(positions, options) {\n const { size = 2, broken = false, gridResolution = 10, gridOffset = [0, 0], startIndex = 0, endIndex = positions.length } = options || {};\n const numPoints = (endIndex - startIndex) / size;\n let part = [];\n const result = [part];\n const a = getPointAtIndex(positions, 0, size, startIndex);\n let b;\n let codeB;\n const cell = getGridCell(a, gridResolution, gridOffset, []);\n const scratchPoint = [];\n push(part, a);\n for (let i = 1; i < numPoints; i++) {\n b = getPointAtIndex(positions, i, size, startIndex, b);\n codeB = bitCode(b, cell);\n while (codeB) {\n // find the intersection with the current cell\n intersect(a, b, codeB, cell, scratchPoint);\n const codeAlt = bitCode(scratchPoint, cell);\n if (codeAlt) {\n intersect(a, scratchPoint, codeAlt, cell, scratchPoint);\n codeB = codeAlt;\n }\n push(part, scratchPoint);\n // move to the next cell\n copy(a, scratchPoint);\n moveToNeighborCell(cell, gridResolution, codeB);\n if (broken && part.length > size) {\n part = [];\n result.push(part);\n push(part, a);\n }\n codeB = bitCode(b, cell);\n }\n push(part, b);\n copy(a, b);\n }\n return broken ? result : result[0];\n}\nconst TYPE_INSIDE = 0;\nconst TYPE_BORDER = 1;\n/**\n * Cuts a polygon by a pre-defined grid\n */\nexport function cutPolygonByGrid(positions, holeIndices = null, options) {\n if (!positions.length) {\n // input is empty\n return [];\n }\n const { size = 2, gridResolution = 10, gridOffset = [0, 0], edgeTypes = false } = options || {};\n const result = [];\n const queue = [\n {\n pos: positions,\n types: edgeTypes ? new Array(positions.length / size).fill(TYPE_BORDER) : null,\n holes: holeIndices || []\n }\n ];\n const bbox = [[], []];\n // @ts-ignore\n let cell = [];\n // Recursively bisect polygon until every part fit in a single grid cell\n while (queue.length) {\n const { pos, types, holes } = queue.shift();\n // Get the bounding box of the outer polygon\n getBoundingBox(pos, size, holes[0] || pos.length, bbox);\n cell = getGridCell(bbox[0], gridResolution, gridOffset, cell);\n const code = bitCode(bbox[1], cell);\n if (code) {\n // Split the outer ring at the boundary\n let parts = bisectPolygon(pos, types, size, 0, holes[0] || pos.length, cell, code);\n const polygonLow = { pos: parts[0].pos, types: parts[0].types, holes: [] };\n const polygonHigh = { pos: parts[1].pos, types: parts[1].types, holes: [] };\n queue.push(polygonLow, polygonHigh);\n // Split each hole at the boundary\n for (let i = 0; i < holes.length; i++) {\n parts = bisectPolygon(pos, types, size, holes[i], holes[i + 1] || pos.length, cell, code);\n if (parts[0]) {\n polygonLow.holes.push(polygonLow.pos.length);\n polygonLow.pos = concatInPlace(polygonLow.pos, parts[0].pos);\n if (edgeTypes) {\n polygonLow.types = concatInPlace(polygonLow.types, parts[0].types);\n }\n }\n if (parts[1]) {\n polygonHigh.holes.push(polygonHigh.pos.length);\n polygonHigh.pos = concatInPlace(polygonHigh.pos, parts[1].pos);\n if (edgeTypes) {\n polygonHigh.types = concatInPlace(polygonHigh.types, parts[1].types);\n }\n }\n }\n }\n else {\n // Polygon fits in a single cell, no more processing required\n const polygon = { positions: pos };\n if (edgeTypes) {\n polygon.edgeTypes = types;\n }\n if (holes.length) {\n polygon.holeIndices = holes;\n }\n result.push(polygon);\n }\n }\n return result;\n}\n// edgeTypes:\n// TYPE_BORDER - edge from the original polygon\n// TYPE_INSIDE - inside the original polygon\n// eslint-disable-next-line max-params\nfunction bisectPolygon(positions, edgeTypes, size, startIndex, endIndex, bbox, edge) {\n const numPoints = (endIndex - startIndex) / size;\n const resultLow = [];\n const resultHigh = [];\n const typesLow = [];\n const typesHigh = [];\n const scratchPoint = [];\n let p;\n let side;\n let type;\n const prev = getPointAtIndex(positions, numPoints - 1, size, startIndex);\n let prevSide = Math.sign(edge & 8 ? prev[1] - bbox[3] : prev[0] - bbox[2]);\n let prevType = edgeTypes && edgeTypes[numPoints - 1];\n let lowPointCount = 0;\n let highPointCount = 0;\n for (let i = 0; i < numPoints; i++) {\n p = getPointAtIndex(positions, i, size, startIndex, p);\n side = Math.sign(edge & 8 ? p[1] - bbox[3] : p[0] - bbox[2]);\n type = edgeTypes && edgeTypes[startIndex / size + i];\n // if segment goes through the boundary, add an intersection\n if (side && prevSide && prevSide !== side) {\n intersect(prev, p, edge, bbox, scratchPoint);\n push(resultLow, scratchPoint) && typesLow.push(prevType);\n push(resultHigh, scratchPoint) && typesHigh.push(prevType);\n }\n if (side <= 0) {\n push(resultLow, p) && typesLow.push(type);\n lowPointCount -= side;\n }\n else if (typesLow.length) {\n typesLow[typesLow.length - 1] = TYPE_INSIDE;\n }\n if (side >= 0) {\n push(resultHigh, p) && typesHigh.push(type);\n highPointCount += side;\n }\n else if (typesHigh.length) {\n typesHigh[typesHigh.length - 1] = TYPE_INSIDE;\n }\n copy(prev, p);\n prevSide = side;\n prevType = type;\n }\n return [\n lowPointCount ? { pos: resultLow, types: edgeTypes && typesLow } : null,\n highPointCount ? { pos: resultHigh, types: edgeTypes && typesHigh } : null\n ];\n}\nfunction getGridCell(p, gridResolution, gridOffset, out) {\n const left = Math.floor((p[0] - gridOffset[0]) / gridResolution) * gridResolution + gridOffset[0];\n const bottom = Math.floor((p[1] - gridOffset[1]) / gridResolution) * gridResolution + gridOffset[1];\n out[0] = left;\n out[1] = bottom;\n out[2] = left + gridResolution;\n out[3] = bottom + gridResolution;\n return out;\n}\nfunction moveToNeighborCell(cell, gridResolution, edge) {\n if (edge & 8) {\n // top\n cell[1] += gridResolution;\n cell[3] += gridResolution;\n }\n else if (edge & 4) {\n // bottom\n cell[1] -= gridResolution;\n cell[3] -= gridResolution;\n }\n else if (edge & 2) {\n // right\n cell[0] += gridResolution;\n cell[2] += gridResolution;\n }\n else if (edge & 1) {\n // left\n cell[0] -= gridResolution;\n cell[2] -= gridResolution;\n }\n}\nfunction getBoundingBox(positions, size, endIndex, out) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (let i = 0; i < endIndex; i += size) {\n const x = positions[i];\n const y = positions[i + 1];\n minX = x < minX ? x : minX;\n maxX = x > maxX ? x : maxX;\n minY = y < minY ? y : minY;\n maxY = y > maxY ? y : maxY;\n }\n out[0][0] = minX;\n out[0][1] = minY;\n out[1][0] = maxX;\n out[1][1] = maxY;\n return out;\n}\nfunction concatInPlace(arr1, arr2) {\n for (let i = 0; i < arr2.length; i++) {\n arr1.push(arr2[i]);\n }\n return arr1;\n}\n//# sourceMappingURL=cut-by-grid.js.map","// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { cutPolylineByGrid, cutPolygonByGrid } from \"./cut-by-grid.js\";\nimport { getPointAtIndex, push } from \"./utils.js\";\n// https://en.wikipedia.org/wiki/Web_Mercator_projection\nconst DEFAULT_MAX_LATITUDE = 85.051129;\n/** https://user-images.githubusercontent.com/2059298/78465769-938b7a00-76ae-11ea-9b95-1f4c26425ab9.png */\nexport function cutPolylineByMercatorBounds(positions, options) {\n const { size = 2, startIndex = 0, endIndex = positions.length, normalize = true } = options || {};\n // Remap longitudes so that each segment takes the shorter path\n const newPositions = positions.slice(startIndex, endIndex);\n wrapLongitudesForShortestPath(newPositions, size, 0, endIndex - startIndex);\n const parts = cutPolylineByGrid(newPositions, {\n size,\n broken: true,\n gridResolution: 360,\n gridOffset: [-180, -180]\n });\n if (normalize) {\n // Each part is guaranteed to be in a single copy of the world\n // Map longitudes back to [-180, 180]\n for (const part of parts) {\n shiftLongitudesIntoRange(part, size);\n }\n }\n return parts;\n}\n/** https://user-images.githubusercontent.com/2059298/78465770-94241080-76ae-11ea-809a-6a8534dac1d9.png */\nexport function cutPolygonByMercatorBounds(positions, holeIndices = null, options) {\n const { size = 2, normalize = true, edgeTypes = false } = options || {};\n holeIndices = holeIndices || [];\n const newPositions = [];\n const newHoleIndices = [];\n let srcStartIndex = 0;\n let targetIndex = 0;\n for (let ringIndex = 0; ringIndex <= holeIndices.length; ringIndex++) {\n // srcStartIndex/srcEndIndex define the ring in the original positions\n const srcEndIndex = holeIndices[ringIndex] || positions.length;\n // targetStartIndex/targetIndex define the ring in newPositions\n const targetStartIndex = targetIndex;\n // In case the ring contains a pole (e.g. Antarctica), we'll have to insert vertices\n // The insertion point is defined by the vertex closest to the pole\n // Split the the ring by the insertion point when copying to newPositions\n const splitIndex = findSplitIndex(positions, size, srcStartIndex, srcEndIndex);\n for (let i = splitIndex; i < srcEndIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n for (let i = srcStartIndex; i < splitIndex; i++) {\n newPositions[targetIndex++] = positions[i];\n }\n // Remap longitudes so that each segment takes the shorter path\n wrapLongitudesForShortestPath(newPositions, size, targetStartIndex, targetIndex);\n // Handle the case when the ring contains a pole\n insertPoleVertices(newPositions, size, targetStartIndex, targetIndex, options?.maxLatitude);\n srcStartIndex = srcEndIndex;\n newHoleIndices[ringIndex] = targetIndex;\n }\n newHoleIndices.pop();\n const parts = cutPolygonByGrid(newPositions, newHoleIndices, {\n size,\n gridResolution: 360,\n gridOffset: [-180, -180],\n edgeTypes\n });\n if (normalize) {\n // Each part is guaranteed to be in a single copy of the world\n // Map longitudes back to [-180, 180]\n for (const part of parts) {\n // @ts-expect-error (mutates readonly array) May mutate newPositions, which is created by us\n shiftLongitudesIntoRange(part.positions, size);\n }\n }\n return parts;\n}\n/* Helpers */\n// See comments for insertPoleVertices\nfunction findSplitIndex(positions, size, startIndex, endIndex) {\n let maxLat = -1;\n let pointIndex = -1;\n for (let i = startIndex + 1; i < endIndex; i += size) {\n const lat = Math.abs(positions[i]);\n if (lat > maxLat) {\n maxLat = lat;\n pointIndex = i - 1;\n }\n }\n return pointIndex;\n}\n// https://user-images.githubusercontent.com/2059298/78857483-5987e400-79de-11ea-98fc-0631287a8431.png\n//\n// If the polygon contains a pole, to tesselate it correctly, we need to insert the edge\n// of map into the polygon. This requires adding two vertices that represent the pole, by\n// drawing a perpendicular line to the Mercator map edge from a selected vertex on the ring.\n//\n// We select the insertion position carefully so that the inserted line segments do not\n// intersect with the ring itself. This is ensured by findSplitIndex, which returns the\n// vertex closest to the pole.\nfunction insertPoleVertices(positions, size, startIndex, endIndex, maxLatitude = DEFAULT_MAX_LATITUDE) {\n // Check if the ring contains a pole\n const firstLng = positions[startIndex];\n const lastLng = positions[endIndex - size];\n if (Math.abs(firstLng - lastLng) > 180) {\n // The ring does not make a round trip\n // Add the nearest pole to the vertices so that the polygon tesselates correctly\n const p = getPointAtIndex(positions, 0, size, startIndex);\n // Copy the first vertex to the world of the last vertex\n p[0] += Math.round((lastLng - firstLng) / 360) * 360;\n push(positions, p);\n // Project the copied vertex to the edge of the map\n p[1] = Math.sign(p[1]) * maxLatitude;\n push(positions, p);\n // Project the first vertex to the edge of the map\n p[0] = firstLng;\n push(positions, p);\n }\n}\nfunction wrapLongitudesForShortestPath(positions, size, startIndex, endIndex) {\n let prevLng = positions[0];\n let lng;\n for (let i = startIndex; i < endIndex; i += size) {\n lng = positions[i];\n const delta = lng - prevLng;\n if (delta > 180 || delta < -180) {\n lng -= Math.round(delta / 360) * 360;\n }\n positions[i] = prevLng = lng;\n }\n}\nfunction shiftLongitudesIntoRange(positions, size) {\n let refLng;\n const pointCount = positions.length / size;\n // Find a longitude that is not on the edge of a world\n // Which we will use to determine which world copy it is\n for (let i = 0; i < pointCount; i++) {\n refLng = positions[i * size];\n if ((refLng + 180) % 360 !== 0) {\n break;\n }\n }\n const delta = -Math.round(refLng / 360) * 360;\n if (delta === 0) {\n return;\n }\n for (let i = 0; i < pointCount; i++) {\n positions[i * size] += delta;\n }\n}\n//# sourceMappingURL=cut-by-mercator-bounds.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@deck.gl/core';\nimport { Geometry } from '@luma.gl/engine';\nimport { modifyPolygonWindingDirection, WINDING } from '@math.gl/polygon';\nexport default class ColumnGeometry extends Geometry {\n constructor(props) {\n const { indices, attributes } = tesselateColumn(props);\n super({\n ...props,\n indices,\n // @ts-expect-error\n attributes\n });\n }\n}\n/* eslint-disable max-statements, complexity */\nfunction tesselateColumn(props) {\n const { radius, height = 1, nradial = 10 } = props;\n let { vertices } = props;\n if (vertices) {\n log.assert(vertices.length >= nradial); // `vertices` must contain at least `diskResolution` points\n vertices = vertices.flatMap(v => [v[0], v[1]]);\n modifyPolygonWindingDirection(vertices, WINDING.COUNTER_CLOCKWISE);\n }\n const isExtruded = height > 0;\n const vertsAroundEdge = nradial + 1; // loop\n const numVertices = isExtruded\n ? vertsAroundEdge * 3 + 1 // top, side top edge, side bottom edge, one additional degenerage vertex\n : nradial; // top\n const stepAngle = (Math.PI * 2) / nradial;\n // Used for wireframe\n const indices = new Uint16Array(isExtruded ? nradial * 3 * 2 : 0); // top loop, side vertical, bottom loop\n const positions = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n let i = 0;\n // side tesselation: 0, 1, 2, 3, 4, 5, ...\n //\n // 0 - 2 - 4 ... top\n // | / | / |\n // 1 - 3 - 5 ... bottom\n //\n if (isExtruded) {\n for (let j = 0; j < vertsAroundEdge; j++) {\n const a = j * stepAngle;\n const vertexIndex = j % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n for (let k = 0; k < 2; k++) {\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = (1 / 2 - k) * height;\n normals[i + 0] = vertices ? vertices[vertexIndex * 2] : cos;\n normals[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin;\n i += 3;\n }\n }\n // duplicate the last vertex to create proper degenerate triangle.\n positions[i + 0] = positions[i - 3];\n positions[i + 1] = positions[i - 2];\n positions[i + 2] = positions[i - 1];\n i += 3;\n }\n // The column geometry is rendered as a triangle strip, so\n // in order to render sides and top in one go we need to use degenerate triangles.\n // Duplicate last vertex of side trinagles and first vertex of the top cap to preserve winding order.\n // top tesselation: 0, -1, 1, -2, 2, -3, 3, ...\n //\n // 0 -- 1\n // / \\\n // -1 2\n // | |\n // -2 3\n // \\ /\n // -3 -- 4\n //\n for (let j = isExtruded ? 0 : 1; j < vertsAroundEdge; j++) {\n const v = Math.floor(j / 2) * Math.sign(0.5 - (j % 2));\n const a = v * stepAngle;\n const vertexIndex = (v + nradial) % nradial;\n const sin = Math.sin(a);\n const cos = Math.cos(a);\n positions[i + 0] = vertices ? vertices[vertexIndex * 2] : cos * radius;\n positions[i + 1] = vertices ? vertices[vertexIndex * 2 + 1] : sin * radius;\n positions[i + 2] = height / 2;\n normals[i + 2] = 1;\n i += 3;\n }\n if (isExtruded) {\n let index = 0;\n for (let j = 0; j < nradial; j++) {\n // top loop\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 2;\n // side vertical\n indices[index++] = j * 2 + 0;\n indices[index++] = j * 2 + 1;\n // bottom loop\n indices[index++] = j * 2 + 1;\n indices[index++] = j * 2 + 3;\n }\n }\n return {\n indices,\n attributes: {\n POSITION: { size: 3, value: positions },\n NORMAL: { size: 3, value: normals }\n }\n };\n}\n//# sourceMappingURL=column-geometry.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform columnUniforms {\n float radius;\n float angle;\n vec2 offset;\n bool extruded;\n bool stroked;\n bool isStroke;\n float coverage;\n float elevationScale;\n float edgeDistance;\n float widthScale;\n float widthMinPixels;\n float widthMaxPixels;\n highp int radiusUnits;\n highp int widthUnits;\n} column;\n`;\nexport const columnUniforms = {\n name: 'column',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n radius: 'f32',\n angle: 'f32',\n offset: 'vec2<f32>',\n extruded: 'f32',\n stroked: 'f32',\n isStroke: 'f32',\n coverage: 'f32',\n elevationScale: 'f32',\n edgeDistance: 'f32',\n widthScale: 'f32',\n widthMinPixels: 'f32',\n widthMaxPixels: 'f32',\n radiusUnits: 'i32',\n widthUnits: 'i32'\n }\n};\n//# sourceMappingURL=column-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `#version 300 es\n#define SHADER_NAME column-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin vec3 instancePositions;\nin float instanceElevations;\nin vec3 instancePositions64Low;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin float instanceStrokeWidths;\nin vec3 instancePickingColors;\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec3 cameraPosition;\nout vec4 position_commonspace;\n#endif\nvoid main(void) {\ngeometry.worldPosition = instancePositions;\nvec4 color = column.isStroke ? instanceLineColors : instanceFillColors;\nmat2 rotationMatrix = mat2(cos(column.angle), sin(column.angle), -sin(column.angle), cos(column.angle));\nfloat elevation = 0.0;\nfloat strokeOffsetRatio = 1.0;\nif (column.extruded) {\nelevation = instanceElevations * (positions.z + 1.0) / 2.0 * column.elevationScale;\n} else if (column.stroked) {\nfloat widthPixels = clamp(\nproject_size_to_pixel(instanceStrokeWidths * column.widthScale, column.widthUnits),\ncolumn.widthMinPixels, column.widthMaxPixels) / 2.0;\nfloat halfOffset = project_pixel_size(widthPixels) / project_size(column.edgeDistance * column.coverage * column.radius);\nif (column.isStroke) {\nstrokeOffsetRatio -= sign(positions.z) * halfOffset;\n} else {\nstrokeOffsetRatio -= halfOffset;\n}\n}\nfloat shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\nfloat dotRadius = column.radius * column.coverage * shouldRender;\ngeometry.pickingColor = instancePickingColors;\nvec3 centroidPosition = vec3(instancePositions.xy, instancePositions.z + elevation);\nvec3 centroidPosition64Low = instancePositions64Low;\nvec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius;\nif (column.radiusUnits == UNIT_METERS) {\noffset = project_size(offset);\n}\nvec3 pos = vec3(offset, 0.);\nDECKGL_FILTER_SIZE(pos, geometry);\ngl_Position = project_position_to_clipspace(centroidPosition, centroidPosition64Low, pos, geometry.position);\ngeometry.normal = project_normal(vec3(rotationMatrix * normals.xy, normals.z));\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (column.extruded && !column.isStroke) {\n#ifdef FLAT_SHADING\ncameraPosition = project.cameraPosition;\nposition_commonspace = geometry.position;\nvColor = vec4(color.rgb, color.a * layer.opacity);\n#else\nvec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, color.a * layer.opacity);\n#endif\n} else {\nvColor = vec4(color.rgb, color.a * layer.opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=column-layer-vertex.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `#version 300 es\n#define SHADER_NAME column-layer-fragment-shader\nprecision highp float;\nout vec4 fragColor;\nin vec4 vColor;\n#ifdef FLAT_SHADING\nin vec3 cameraPosition;\nin vec4 position_commonspace;\n#endif\nvoid main(void) {\nfragColor = vColor;\ngeometry.uv = vec2(0.);\n#ifdef FLAT_SHADING\nif (column.extruded && !column.isStroke && !bool(picking.isActive)) {\nvec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\nfragColor.rgb = lighting_getLightColor(vColor.rgb, cameraPosition, position_commonspace.xyz, normal);\n}\n#endif\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=column-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 { gouraudMaterial, phongMaterial } from '@luma.gl/shadertools';\nimport { Model } from '@luma.gl/engine';\nimport ColumnGeometry from \"./column-geometry.js\";\nimport { columnUniforms } from \"./column-layer-uniforms.js\";\nimport vs from \"./column-layer-vertex.glsl.js\";\nimport fs from \"./column-layer-fragment.glsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n diskResolution: { type: 'number', min: 4, value: 20 },\n vertices: null,\n radius: { type: 'number', min: 0, value: 1000 },\n angle: { type: 'number', value: 0 },\n offset: { type: 'array', value: [0, 0] },\n coverage: { type: 'number', min: 0, max: 1, value: 1 },\n elevationScale: { type: 'number', min: 0, value: 1 },\n radiusUnits: 'meters',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n extruded: true,\n wireframe: false,\n filled: true,\n stroked: false,\n flatShading: false,\n getPosition: { type: 'accessor', value: (x) => x.position },\n getFillColor: { type: 'accessor', value: DEFAULT_COLOR },\n getLineColor: { type: 'accessor', value: DEFAULT_COLOR },\n getLineWidth: { type: 'accessor', value: 1 },\n getElevation: { type: 'accessor', value: 1000 },\n material: true,\n getColor: { deprecatedFor: ['getFillColor', 'getLineColor'] }\n};\n/** Render extruded cylinders (tessellated regular polygons) at given coordinates. */\nclass ColumnLayer extends Layer {\n getShaders() {\n const defines = {};\n const { flatShading } = this.props;\n if (flatShading) {\n defines.FLAT_SHADING = 1;\n }\n return super.getShaders({\n vs,\n fs,\n defines,\n modules: [project32, flatShading ? phongMaterial : gouraudMaterial, picking, columnUniforms]\n });\n }\n /**\n * DeckGL calls initializeState when GL context is available\n * Essentially a deferred constructor\n */\n initializeState() {\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instancePositions: {\n size: 3,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: true,\n accessor: 'getPosition'\n },\n instanceElevations: {\n size: 1,\n transition: true,\n accessor: 'getElevation'\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getLineWidth',\n transition: true\n }\n });\n /* eslint-enable max-len */\n }\n updateState(params) {\n super.updateState(params);\n const { props, oldProps, changeFlags } = params;\n const regenerateModels = changeFlags.extensionsChanged || props.flatShading !== oldProps.flatShading;\n if (regenerateModels) {\n this.state.models?.forEach(model => model.destroy());\n this.setState(this._getModels());\n this.getAttributeManager().invalidateAll();\n }\n const instanceCount = this.getNumInstances();\n this.state.fillModel.setInstanceCount(instanceCount);\n this.state.wireframeModel.setInstanceCount(instanceCount);\n if (regenerateModels ||\n props.diskResolution !== oldProps.diskResolution ||\n props.vertices !== oldProps.vertices ||\n (props.extruded || props.stroked) !== (oldProps.extruded || oldProps.stroked)) {\n this._updateGeometry(props);\n }\n }\n getGeometry(diskResolution, vertices, hasThinkness) {\n const geometry = new ColumnGeometry({\n radius: 1,\n height: hasThinkness ? 2 : 0,\n vertices,\n nradial: diskResolution\n });\n let meanVertexDistance = 0;\n if (vertices) {\n for (let i = 0; i < diskResolution; i++) {\n const p = vertices[i];\n const d = Math.sqrt(p[0] * p[0] + p[1] * p[1]);\n meanVertexDistance += d / diskResolution;\n }\n }\n else {\n meanVertexDistance = 1;\n }\n this.setState({\n edgeDistance: Math.cos(Math.PI / diskResolution) * meanVertexDistance\n });\n return geometry;\n }\n _getModels() {\n const shaders = this.getShaders();\n const bufferLayout = this.getAttributeManager().getBufferLayouts();\n const fillModel = new Model(this.context.device, {\n ...shaders,\n id: `${this.props.id}-fill`,\n bufferLayout,\n isInstanced: true\n });\n const wireframeModel = new Model(this.context.device, {\n ...shaders,\n id: `${this.props.id}-wireframe`,\n bufferLayout,\n isInstanced: true\n });\n return {\n fillModel,\n wireframeModel,\n models: [wireframeModel, fillModel]\n };\n }\n _updateGeometry({ diskResolution, vertices, extruded, stroked }) {\n const geometry = this.getGeometry(diskResolution, vertices, extruded || stroked);\n this.setState({\n fillVertexCount: geometry.attributes.POSITION.value.length / 3\n });\n const fillModel = this.state.fillModel;\n const wireframeModel = this.state.wireframeModel;\n fillModel.setGeometry(geometry);\n fillModel.setTopology('triangle-strip');\n // Disable indices\n fillModel.setIndexBuffer(null);\n wireframeModel.setGeometry(geometry);\n wireframeModel.setTopology('line-list');\n }\n draw({ uniforms }) {\n const { lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, radiusUnits, elevationScale, extruded, filled, stroked, wireframe, offset, coverage, radius, angle } = this.props;\n const fillModel = this.state.fillModel;\n const wireframeModel = this.state.wireframeModel;\n const { fillVertexCount, edgeDistance } = this.state;\n const columnProps = {\n radius,\n angle: (angle / 180) * Math.PI,\n offset,\n extruded,\n stroked,\n coverage,\n elevationScale,\n edgeDistance,\n radiusUnits: UNIT[radiusUnits],\n widthUnits: UNIT[lineWidthUnits],\n widthScale: lineWidthScale,\n widthMinPixels: lineWidthMinPixels,\n widthMaxPixels: lineWidthMaxPixels\n };\n // When drawing 3d: draw wireframe first so it doesn't get occluded by depth test\n if (extruded && wireframe) {\n wireframeModel.shaderInputs.setProps({\n column: {\n ...columnProps,\n isStroke: true\n }\n });\n wireframeModel.draw(this.context.renderPass);\n }\n if (filled) {\n // model.setProps({isIndexed: false});\n fillModel.setVertexCount(fillVertexCount);\n fillModel.shaderInputs.setProps({\n column: {\n ...columnProps,\n isStroke: false\n }\n });\n fillModel.draw(this.context.renderPass);\n }\n // When drawing 2d: draw fill before stroke so that the outline is always on top\n if (!extruded && stroked) {\n // model.setProps({isIndexed: false});\n // The width of the stroke is achieved by flattening the side of the cylinder.\n // Skip the last 1/3 of the vertices which is the top.\n fillModel.setVertexCount((fillVertexCount * 2) / 3);\n fillModel.shaderInputs.setProps({\n column: {\n ...columnProps,\n isStroke: true\n }\n });\n fillModel.draw(this.context.renderPass);\n }\n }\n}\nColumnLayer.layerName = 'ColumnLayer';\nColumnLayer.defaultProps = defaultProps;\nexport default ColumnLayer;\n//# sourceMappingURL=column-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { cutPolylineByGrid, cutPolylineByMercatorBounds } from '@math.gl/polygon';\n/**\n * Flattens a nested path object\n * Cut the feature if needed (globe projection, wrap longitude, etc.)\n * Returns a flat array of path positions, or a list of flat arrays representing multiple paths\n */\nexport function normalizePath(path, size, gridResolution, wrapLongitude) {\n let flatPath;\n if (Array.isArray(path[0])) {\n const length = path.length * size;\n flatPath = new Array(length);\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < size; j++) {\n flatPath[i * size + j] = path[i][j] || 0;\n }\n }\n }\n else {\n flatPath = path;\n }\n if (gridResolution) {\n return cutPolylineByGrid(flatPath, { size, gridResolution });\n }\n if (wrapLongitude) {\n return cutPolylineByMercatorBounds(flatPath, { size });\n }\n return flatPath;\n}\n//# sourceMappingURL=path.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Tesselator } from '@deck.gl/core';\nimport { normalizePath } from \"./path.js\";\nconst START_CAP = 1;\nconst END_CAP = 2;\nconst INVALID = 4;\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PathTesselator extends Tesselator {\n constructor(opts) {\n super({\n ...opts,\n attributes: {\n // Padding covers shaderAttributes for last segment in largest case fp64\n // additional vertex + hi & low parts, 3 * 6\n positions: {\n size: 3,\n padding: 18,\n initialize: true,\n type: opts.fp64 ? Float64Array : Float32Array\n },\n segmentTypes: { size: 1, type: Uint8ClampedArray }\n }\n });\n }\n /** Get packed attribute by name */\n get(attributeName) {\n return this.attributes[attributeName];\n }\n /* Implement base Tesselator interface */\n getGeometryFromBuffer(buffer) {\n if (this.normalize) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization\n return null;\n }\n /* Implement base Tesselator interface */\n normalizeGeometry(path) {\n if (this.normalize) {\n return normalizePath(path, this.positionSize, this.opts.resolution, this.opts.wrapLongitude);\n }\n return path;\n }\n /* Implement base Tesselator interface */\n getGeometrySize(path) {\n if (isCut(path)) {\n let size = 0;\n for (const subPath of path) {\n size += this.getGeometrySize(subPath);\n }\n return size;\n }\n const numPoints = this.getPathLength(path);\n if (numPoints < 2) {\n // invalid path\n return 0;\n }\n if (this.isClosed(path)) {\n // minimum 3 vertices\n return numPoints < 3 ? 0 : numPoints + 2;\n }\n return numPoints;\n }\n /* Implement base Tesselator interface */\n updateGeometryAttributes(path, context) {\n if (context.geometrySize === 0) {\n return;\n }\n if (path && isCut(path)) {\n for (const subPath of path) {\n const geometrySize = this.getGeometrySize(subPath);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPath, context);\n context.vertexStart += geometrySize;\n }\n }\n else {\n this._updateSegmentTypes(path, context);\n this._updatePositions(path, context);\n }\n }\n _updateSegmentTypes(path, context) {\n const segmentTypes = this.attributes.segmentTypes;\n const isPathClosed = path ? this.isClosed(path) : false;\n const { vertexStart, geometrySize } = context;\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n segmentTypes.fill(0, vertexStart, vertexStart + geometrySize);\n if (isPathClosed) {\n segmentTypes[vertexStart] = INVALID;\n segmentTypes[vertexStart + geometrySize - 2] = INVALID;\n }\n else {\n segmentTypes[vertexStart] += START_CAP;\n segmentTypes[vertexStart + geometrySize - 2] += END_CAP;\n }\n segmentTypes[vertexStart + geometrySize - 1] = INVALID;\n }\n _updatePositions(path, context) {\n const { positions } = this.attributes;\n if (!positions || !path) {\n return;\n }\n const { vertexStart, geometrySize } = context;\n const p = new Array(3);\n // positions -- A0 A1 B0 B1 B2 B3 B0 B1 B2 --\n // segmentTypes 3 4 4 0 0 0 0 4 4\n for (let i = vertexStart, ptIndex = 0; ptIndex < geometrySize; i++, ptIndex++) {\n this.getPointOnPath(path, ptIndex, p);\n positions[i * 3] = p[0];\n positions[i * 3 + 1] = p[1];\n positions[i * 3 + 2] = p[2];\n }\n }\n // Utilities\n /** Returns the number of points in the path */\n getPathLength(path) {\n return path.length / this.positionSize;\n }\n /** Returns a point on the path at the specified index */\n getPointOnPath(path, index, target = []) {\n const { positionSize } = this;\n if (index * positionSize >= path.length) {\n // loop\n index += 1 - path.length / positionSize;\n }\n const i = index * positionSize;\n target[0] = path[i];\n target[1] = path[i + 1];\n target[2] = (positionSize === 3 && path[i + 2]) || 0;\n return target;\n }\n // Returns true if the first and last points are identical\n isClosed(path) {\n if (!this.normalize) {\n return Boolean(this.opts.loop);\n }\n const { positionSize } = this;\n const lastPointIndex = path.length - positionSize;\n return (path[0] === path[lastPointIndex] &&\n path[1] === path[lastPointIndex + 1] &&\n (positionSize === 2 || path[2] === path[lastPointIndex + 2]));\n }\n}\nfunction isCut(path) {\n return Array.isArray(path[0]);\n}\n//# sourceMappingURL=path-tesselator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform pathUniforms {\n float widthScale;\n float widthMinPixels;\n float widthMaxPixels;\n float jointType;\n float capType;\n float miterLimit;\n bool billboard;\n highp int widthUnits;\n} path;\n`;\nexport const pathUniforms = {\n name: 'path',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n widthScale: 'f32',\n widthMinPixels: 'f32',\n widthMaxPixels: 'f32',\n jointType: 'f32',\n capType: 'f32',\n miterLimit: 'f32',\n billboard: 'f32',\n widthUnits: 'i32'\n }\n};\n//# sourceMappingURL=path-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 path-layer-vertex-shader\nin vec2 positions;\nin float instanceTypes;\nin vec3 instanceStartPositions;\nin vec3 instanceEndPositions;\nin vec3 instanceLeftPositions;\nin vec3 instanceRightPositions;\nin vec3 instanceLeftPositions64Low;\nin vec3 instanceStartPositions64Low;\nin vec3 instanceEndPositions64Low;\nin vec3 instanceRightPositions64Low;\nin float instanceStrokeWidths;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nuniform float opacity;\nout vec4 vColor;\nout vec2 vCornerOffset;\nout float vMiterLength;\nout vec2 vPathPosition;\nout float vPathLength;\nout float vJointType;\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\nfloat flipIfTrue(bool flag) {\nreturn -(float(flag) * 2. - 1.);\n}\nvec3 getLineJoinOffset(\nvec3 prevPoint, vec3 currPoint, vec3 nextPoint,\nvec2 width\n) {\nbool isEnd = positions.x > 0.0;\nfloat sideOfPath = positions.y;\nfloat isJoint = float(sideOfPath == 0.0);\nvec3 deltaA3 = (currPoint - prevPoint);\nvec3 deltaB3 = (nextPoint - currPoint);\nmat3 rotationMatrix;\nbool needsRotation = !path.billboard && project_needs_rotation(currPoint, rotationMatrix);\nif (needsRotation) {\ndeltaA3 = deltaA3 * rotationMatrix;\ndeltaB3 = deltaB3 * rotationMatrix;\n}\nvec2 deltaA = deltaA3.xy / width;\nvec2 deltaB = deltaB3.xy / width;\nfloat lenA = length(deltaA);\nfloat lenB = length(deltaB);\nvec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\nvec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\nvec2 perpA = vec2(-dirA.y, dirA.x);\nvec2 perpB = vec2(-dirB.y, dirB.x);\nvec2 tangent = dirA + dirB;\ntangent = length(tangent) > 0. ? normalize(tangent) : perpA;\nvec2 miterVec = vec2(-tangent.y, tangent.x);\nvec2 dir = isEnd ? dirA : dirB;\nvec2 perp = isEnd ? perpA : perpB;\nfloat L = isEnd ? lenA : lenB;\nfloat sinHalfA = abs(dot(miterVec, perp));\nfloat cosHalfA = abs(dot(dirA, miterVec));\nfloat turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\nfloat cornerPosition = sideOfPath * turnDirection;\nfloat miterSize = 1.0 / max(sinHalfA, EPSILON);\nmiterSize = mix(\nmin(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\nmiterSize,\nstep(0.0, cornerPosition)\n);\nvec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n* (sideOfPath + isJoint * turnDirection);\nbool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\nbool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\nbool isCap = isStartCap || isEndCap;\nif (isCap) {\noffsetVec = mix(perp * sideOfPath, dir * path.capType * 4.0 * flipIfTrue(isStartCap), isJoint);\nvJointType = path.capType;\n} else {\nvJointType = path.jointType;\n}\nvPathLength = L;\nvCornerOffset = offsetVec;\nvMiterLength = dot(vCornerOffset, miterVec * turnDirection);\nvMiterLength = isCap ? isJoint : vMiterLength;\nvec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\nvPathPosition = vec2(\ndot(offsetFromStartOfPath, perp),\ndot(offsetFromStartOfPath, dir)\n);\ngeometry.uv = vPathPosition;\nfloat isValid = step(instanceTypes, 3.5);\nvec3 offset = vec3(offsetVec * width * isValid, 0.0);\nif (needsRotation) {\noffset = rotationMatrix * offset;\n}\nreturn offset;\n}\nvoid clipLine(inout vec4 position, vec4 refPosition) {\nif (position.w < EPSILON) {\nfloat r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\nposition = refPosition + (position - refPosition) * r;\n}\n}\nvoid main() {\ngeometry.pickingColor = instancePickingColors;\nvColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);\nfloat isEnd = positions.x;\nvec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\nvec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\nvec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\nvec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\nvec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\nvec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\ngeometry.worldPosition = currPosition;\nvec2 widthPixels = vec2(clamp(\nproject_size_to_pixel(instanceStrokeWidths * path.widthScale, path.widthUnits),\npath.widthMinPixels, path.widthMaxPixels) / 2.0);\nvec3 width;\nif (path.billboard) {\nvec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\nvec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\nvec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\nclipLine(prevPositionScreen, currPositionScreen);\nclipLine(nextPositionScreen, currPositionScreen);\nclipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\nwidth = vec3(widthPixels, 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(\nprevPositionScreen.xyz / prevPositionScreen.w,\ncurrPositionScreen.xyz / currPositionScreen.w,\nnextPositionScreen.xyz / nextPositionScreen.w,\nproject_pixel_size_to_clipspace(width.xy)\n);\nDECKGL_FILTER_GL_POSITION(currPositionScreen, geometry);\ngl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w);\n} else {\nprevPosition = project_position(prevPosition, prevPosition64Low);\ncurrPosition = project_position(currPosition, currPosition64Low);\nnextPosition = project_position(nextPosition, nextPosition64Low);\nwidth = vec3(project_pixel_size(widthPixels), 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy);\ngeometry.position = vec4(currPosition + offset, 1.0);\ngl_Position = project_common_position_to_clipspace(geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=path-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 path-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nin vec2 vCornerOffset;\nin float vMiterLength;\nin vec2 vPathPosition;\nin float vPathLength;\nin float vJointType;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = vPathPosition;\nif (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\nif (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\ndiscard;\n}\nif (vJointType < 0.5 && vMiterLength > path.miterLimit + 1.0) {\ndiscard;\n}\n}\nfragColor = vColor;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=path-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 PathTesselator from \"./path-tesselator.js\";\nimport { pathUniforms } from \"./path-layer-uniforms.js\";\nimport vs from \"./path-layer-vertex.glsl.js\";\nimport fs from \"./path-layer-fragment.glsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n widthUnits: 'meters',\n widthScale: { type: 'number', min: 0, value: 1 },\n widthMinPixels: { type: 'number', min: 0, value: 0 },\n widthMaxPixels: { type: 'number', min: 0, value: Number.MAX_SAFE_INTEGER },\n jointRounded: false,\n capRounded: false,\n miterLimit: { type: 'number', min: 0, value: 4 },\n billboard: false,\n _pathType: null,\n getPath: { type: 'accessor', value: (object) => object.path },\n getColor: { type: 'accessor', value: DEFAULT_COLOR },\n getWidth: { type: 'accessor', value: 1 },\n // deprecated props\n rounded: { deprecatedFor: ['jointRounded', 'capRounded'] }\n};\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\n/** Render lists of coordinate points as extruded polylines with mitering. */\nclass PathLayer extends Layer {\n getShaders() {\n return super.getShaders({ vs, fs, modules: [project32, picking, pathUniforms] }); // 'project' module added by default.\n }\n get wrapLongitude() {\n return false;\n }\n getBounds() {\n return this.getAttributeManager()?.getBounds(['vertexPositions']);\n }\n initializeState() {\n const noAlloc = true;\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n vertexPositions: {\n size: 3,\n // Start filling buffer from 1 vertex in\n vertexOffset: 1,\n type: 'float64',\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPath',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n instanceLeftPositions: {\n vertexOffset: 0\n },\n instanceStartPositions: {\n vertexOffset: 1\n },\n instanceEndPositions: {\n vertexOffset: 2\n },\n instanceRightPositions: {\n vertexOffset: 3\n }\n }\n },\n instanceTypes: {\n size: 1,\n type: 'uint8',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateSegmentTypes,\n noAlloc\n },\n instanceStrokeWidths: {\n size: 1,\n accessor: 'getWidth',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: 1\n },\n instanceColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n accessor: 'getColor',\n transition: ATTRIBUTE_TRANSITION,\n defaultValue: DEFAULT_COLOR\n },\n instancePickingColors: {\n size: 4,\n type: 'uint8',\n accessor: (object, { index, target: value }) => this.encodePickingColor(object && object.__source ? object.__source.index : index, value)\n }\n });\n /* eslint-enable max-len */\n this.setState({\n pathTesselator: new PathTesselator({\n fp64: this.use64bitPositions()\n })\n });\n }\n updateState(params) {\n super.updateState(params);\n const { props, changeFlags } = params;\n const attributeManager = this.getAttributeManager();\n const geometryChanged = changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPath));\n if (geometryChanged) {\n const { pathTesselator } = this.state;\n const buffers = props.data.attributes || {};\n pathTesselator.updateGeometry({\n data: props.data,\n geometryBuffer: buffers.getPath,\n buffers,\n normalize: !props._pathType,\n loop: props._pathType === 'loop',\n getGeometry: props.getPath,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n dataChanged: changeFlags.dataChanged\n });\n this.setState({\n numInstances: pathTesselator.instanceCount,\n startIndices: pathTesselator.vertexStarts\n });\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n attributeManager.invalidateAll();\n }\n }\n if (changeFlags.extensionsChanged) {\n this.state.model?.destroy();\n this.state.model = this._getModel();\n attributeManager.invalidateAll();\n }\n }\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n const { index } = info;\n const data = this.props.data;\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = data.find(d => d.__source.index === index);\n }\n return info;\n }\n /** Override base Layer method */\n disablePickingIndex(objectIndex) {\n const data = this.props.data;\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < data.length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n }\n else {\n super.disablePickingIndex(objectIndex);\n }\n }\n draw({ uniforms }) {\n const { jointRounded, capRounded, billboard, miterLimit, widthUnits, widthScale, widthMinPixels, widthMaxPixels } = this.props;\n const model = this.state.model;\n const pathProps = {\n jointType: Number(jointRounded),\n capType: Number(capRounded),\n billboard,\n widthUnits: UNIT[widthUnits],\n widthScale,\n miterLimit,\n widthMinPixels,\n widthMaxPixels\n };\n model.shaderInputs.setProps({ path: pathProps });\n model.draw(this.context.renderPass);\n }\n _getModel() {\n /*\n * _\n * \"-_ 1 3 5\n * _ \"o---------------------o-------------------_-o\n * - / \"\"--..__ '. _.-' /\n * _ \"@- - - - - \"\"--..__- - - - x - - - -_.@' /\n * \"-_ / \"\"--..__ '. _,-` : /\n * \"o----------------------------\"\"-o' : /\n * 0,2 4 / '. : /\n * / '.: /\n * / :'. /\n * / : ', /\n * / : o\n */\n // prettier-ignore\n const SEGMENT_INDICES = [\n // start corner\n 0, 1, 2,\n // body\n 1, 4, 2,\n 1, 3, 4,\n // end corner\n 3, 5, 4\n ];\n // [0] position on segment - 0: start, 1: end\n // [1] side of path - -1: left, 0: center (joint), 1: right\n // prettier-ignore\n const SEGMENT_POSITIONS = [\n // bevel start corner\n 0, 0,\n // start inner corner\n 0, -1,\n // start outer corner\n 0, 1,\n // end inner corner\n 1, -1,\n // end outer corner\n 1, 1,\n // bevel end corner\n 1, 0\n ];\n 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 indices: new Uint16Array(SEGMENT_INDICES),\n positions: { value: new Float32Array(SEGMENT_POSITIONS), size: 2 }\n }\n }),\n isInstanced: true\n });\n }\n calculatePositions(attribute) {\n const { pathTesselator } = this.state;\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('positions');\n }\n calculateSegmentTypes(attribute) {\n const { pathTesselator } = this.state;\n attribute.startIndices = pathTesselator.vertexStarts;\n attribute.value = pathTesselator.get('segmentTypes');\n }\n}\nPathLayer.defaultProps = defaultProps;\nPathLayer.layerName = 'PathLayer';\nexport default PathLayer;\n//# sourceMappingURL=path-layer.js.map","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable max-params */\nimport earcut from 'earcut';\nimport { modifyPolygonWindingDirection, WINDING } from '@math.gl/polygon';\nconst OUTER_POLYGON_WINDING = WINDING.CLOCKWISE;\nconst HOLE_POLYGON_WINDING = WINDING.COUNTER_CLOCKWISE;\n/** A scratch object for sending winding options */\nconst windingOptions = {\n isClosed: true\n};\n/**\n * Ensure a polygon is valid format\n */\nfunction validate(polygon) {\n polygon = (polygon && polygon.positions) || polygon;\n if (!Array.isArray(polygon) && !ArrayBuffer.isView(polygon)) {\n throw new Error('invalid polygon');\n }\n}\n/** Get the positions from a normalized polygon */\nexport function getPositions(polygon) {\n return 'positions' in polygon ? polygon.positions : polygon;\n}\n/** Get the hole indices from a normalized polygon */\nexport function getHoleIndices(polygon) {\n return 'holeIndices' in polygon ? polygon.holeIndices : null;\n}\n/**\n * Check if a polygon is nested or flat\n * Returns true if the polygon is a flat polygon (i.e. not an array of polygons)\n */\nfunction isNested(polygon) {\n return Array.isArray(polygon[0]);\n}\n/**\n * Check if a polygon is simple or complex\n * Returns true if the polygon is a simple polygon (i.e. not an array of polygons)\n */\nfunction isSimple(polygon) {\n return polygon.length >= 1 && polygon[0].length >= 2 && Number.isFinite(polygon[0][0]);\n}\n/**\n * Check if a simple polygon is a closed ring\n * Returns true if the simple polygon is a closed ring\n */\nfunction isNestedRingClosed(simplePolygon) {\n // check if first and last vertex are the same\n const p0 = simplePolygon[0];\n const p1 = simplePolygon[simplePolygon.length - 1];\n return p0[0] === p1[0] && p0[1] === p1[1] && p0[2] === p1[2];\n}\n/**\n * Check if a simple flat array is a closed ring\n * Returns true if the simple flat array is a closed ring\n */\nfunction isFlatRingClosed(positions, \n/** size of a position, 2 (xy) or 3 (xyz) */\nsize, \n/** start index of the path in the positions array */\nstartIndex, \n/** end index of the path in the positions array */\nendIndex) {\n for (let i = 0; i < size; i++) {\n if (positions[startIndex + i] !== positions[endIndex - size + i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Copy a simple polygon coordinates into a flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyNestedRing(\n/** destination */\ntarget, \n/** index in the destination to start copying into */\ntargetStartIndex, \n/** the source polygon */\nsimplePolygon, \n/** size of a position, 2 (xy) or 3 (xyz) */\nsize, \n/** modify polygon to be of the specified winding direction */\nwindingDirection) {\n let targetIndex = targetStartIndex;\n const len = simplePolygon.length;\n for (let i = 0; i < len; i++) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[i][j] || 0;\n }\n }\n if (!isNestedRingClosed(simplePolygon)) {\n for (let j = 0; j < size; j++) {\n target[targetIndex++] = simplePolygon[0][j] || 0;\n }\n }\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n return targetIndex;\n}\n/**\n * Copy a simple flat array into another flat array, closes the ring if needed.\n * Returns the index of the write head in the destination\n */\nfunction copyFlatRing(\n/** destination */\ntarget, \n/** index in the destination to start copying into */\ntargetStartIndex, \n/** the source polygon */\npositions, \n/** size of a position, 2 (xy) or 3 (xyz) */\nsize, \n/** start index of the path in the positions array */\nsrcStartIndex = 0, \n/** end index of the path in the positions array */\nsrcEndIndex, windingDirection) {\n srcEndIndex = srcEndIndex || positions.length;\n const srcLength = srcEndIndex - srcStartIndex;\n if (srcLength <= 0) {\n return targetStartIndex;\n }\n let targetIndex = targetStartIndex;\n for (let i = 0; i < srcLength; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n if (!isFlatRingClosed(positions, size, srcStartIndex, srcEndIndex)) {\n for (let i = 0; i < size; i++) {\n target[targetIndex++] = positions[srcStartIndex + i];\n }\n }\n windingOptions.start = targetStartIndex;\n windingOptions.end = targetIndex;\n windingOptions.size = size;\n modifyPolygonWindingDirection(target, windingDirection, windingOptions);\n return targetIndex;\n}\n/**\n * Normalize any polygon representation into the \"complex flat\" format\n */\n/* eslint-disable max-statements */\nexport function normalize(polygon, positionSize) {\n validate(polygon);\n const positions = [];\n const holeIndices = [];\n if ('positions' in polygon) {\n // complex flat\n const { positions: srcPositions, holeIndices: srcHoleIndices } = polygon;\n if (srcHoleIndices) {\n let targetIndex = 0;\n // split the positions array into `holeIndices.length + 1` rings\n // holeIndices[-1] falls back to 0\n // holeIndices[holeIndices.length] falls back to positions.length\n for (let i = 0; i <= srcHoleIndices.length; i++) {\n targetIndex = copyFlatRing(positions, targetIndex, srcPositions, positionSize, srcHoleIndices[i - 1], srcHoleIndices[i], i === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING);\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n return { positions, holeIndices };\n }\n polygon = srcPositions;\n }\n if (!isNested(polygon)) {\n // simple flat\n copyFlatRing(positions, 0, polygon, positionSize, 0, positions.length, OUTER_POLYGON_WINDING);\n return positions;\n }\n if (!isSimple(polygon)) {\n // complex polygon\n let targetIndex = 0;\n for (const [polygonIndex, simplePolygon] of polygon.entries()) {\n targetIndex = copyNestedRing(positions, targetIndex, simplePolygon, positionSize, polygonIndex === 0 ? OUTER_POLYGON_WINDING : HOLE_POLYGON_WINDING);\n holeIndices.push(targetIndex);\n }\n // The last one is not a starting index of a hole, remove\n holeIndices.pop();\n // last index points to the end of the array, remove it\n return { positions, holeIndices };\n }\n // simple polygon\n copyNestedRing(positions, 0, polygon, positionSize, OUTER_POLYGON_WINDING);\n return positions;\n}\n/* eslint-enable max-statements */\n/*\n * Calculate the area of a single plane of the polygon\n */\nfunction getPlaneArea(positions, xIndex, yIndex) {\n const numVerts = positions.length / 3;\n let area = 0;\n for (let i = 0; i < numVerts; i++) {\n const j = (i + 1) % numVerts;\n area += positions[i * 3 + xIndex] * positions[j * 3 + yIndex];\n area -= positions[j * 3 + xIndex] * positions[i * 3 + yIndex];\n }\n return Math.abs(area / 2);\n}\nfunction permutePositions(positions, xIndex, yIndex, zIndex) {\n const numVerts = positions.length / 3;\n for (let i = 0; i < numVerts; i++) {\n const o = i * 3;\n const x = positions[o + 0];\n const y = positions[o + 1];\n const z = positions[o + 2];\n positions[o + xIndex] = x;\n positions[o + yIndex] = y;\n positions[o + zIndex] = z;\n }\n}\n/**\n * Get vertex indices for drawing polygon mesh (triangulation)\n */\n// eslint-disable-next-line complexity, max-statements\nexport function getSurfaceIndices(polygon, positionSize, preproject, full3d) {\n let holeIndices = getHoleIndices(polygon);\n if (holeIndices) {\n holeIndices = holeIndices.map(positionIndex => positionIndex / positionSize);\n }\n let positions = getPositions(polygon);\n const is3d = full3d && positionSize === 3;\n if (preproject) {\n // When tesselating lnglat coordinates, project them to the common space for accuracy\n const n = positions.length;\n // Clone the array\n positions = positions.slice();\n const p = [];\n for (let i = 0; i < n; i += positionSize) {\n p[0] = positions[i];\n p[1] = positions[i + 1];\n if (is3d) {\n p[2] = positions[i + 2];\n }\n const xy = preproject(p);\n positions[i] = xy[0];\n positions[i + 1] = xy[1];\n if (is3d) {\n positions[i + 2] = xy[2];\n }\n }\n }\n if (is3d) {\n // calculate plane with largest area\n const xyArea = getPlaneArea(positions, 0, 1);\n const xzArea = getPlaneArea(positions, 0, 2);\n const yzArea = getPlaneArea(positions, 1, 2);\n if (!xyArea && !xzArea && !yzArea) {\n return []; // no planes have area, nothing we can do\n }\n // permute positions to make the largest plane xy for earcut\n if (xyArea > xzArea && xyArea > yzArea) {\n // xy plane largest, nothing to do\n }\n else if (xzArea > yzArea) {\n // xz plane largest, permute to make xyz -> xzy\n if (!preproject) {\n positions = positions.slice();\n }\n permutePositions(positions, 0, 2, 1);\n }\n else {\n // yz plane largest, permute to make xyz -> yzx\n if (!preproject) {\n positions = positions.slice();\n }\n permutePositions(positions, 2, 0, 1);\n }\n }\n // Let earcut triangulate the polygon\n return earcut(positions, holeIndices, positionSize);\n}\n//# sourceMappingURL=polygon.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Handles tesselation of polygons with holes\n// - 2D surfaces\n// - 2D outlines\n// - 3D surfaces (top and sides only)\n// - 3D wireframes (not yet)\nimport * as Polygon from \"./polygon.js\";\nimport { Tesselator } from '@deck.gl/core';\nimport { cutPolygonByGrid, cutPolygonByMercatorBounds } from '@math.gl/polygon';\n// This class is set up to allow querying one attribute at a time\n// the way the AttributeManager expects it\nexport default class PolygonTesselator extends Tesselator {\n constructor(opts) {\n const { fp64, IndexType = Uint32Array } = opts;\n super({\n ...opts,\n attributes: {\n positions: { size: 3, type: fp64 ? Float64Array : Float32Array },\n vertexValid: { type: Uint16Array, size: 1 },\n indices: { type: IndexType, size: 1 }\n }\n });\n }\n /** Get attribute by name */\n get(attributeName) {\n const { attributes } = this;\n if (attributeName === 'indices') {\n return attributes.indices && attributes.indices.subarray(0, this.vertexCount);\n }\n return attributes[attributeName];\n }\n /** Override base Tesselator method */\n updateGeometry(opts) {\n super.updateGeometry(opts);\n const externalIndices = this.buffers.indices;\n if (externalIndices) {\n // @ts-ignore (2339) value is not defined on TypedArray (fall through)\n this.vertexCount = (externalIndices.value || externalIndices).length;\n }\n else if (this.data && !this.getGeometry) {\n throw new Error('missing indices buffer');\n }\n }\n /** Implement base Tesselator interface */\n normalizeGeometry(polygon) {\n if (this.normalize) {\n const normalizedPolygon = Polygon.normalize(polygon, this.positionSize);\n if (this.opts.resolution) {\n return cutPolygonByGrid(Polygon.getPositions(normalizedPolygon), Polygon.getHoleIndices(normalizedPolygon), {\n size: this.positionSize,\n gridResolution: this.opts.resolution,\n edgeTypes: true\n });\n }\n if (this.opts.wrapLongitude) {\n return cutPolygonByMercatorBounds(Polygon.getPositions(normalizedPolygon), Polygon.getHoleIndices(normalizedPolygon), {\n size: this.positionSize,\n maxLatitude: 86,\n edgeTypes: true\n });\n }\n return normalizedPolygon;\n }\n // normalize is explicitly set to false, assume that user passed in already normalized polygons\n return polygon;\n }\n /** Implement base Tesselator interface */\n getGeometrySize(polygon) {\n if (isCut(polygon)) {\n let size = 0;\n for (const subPolygon of polygon) {\n size += this.getGeometrySize(subPolygon);\n }\n return size;\n }\n return Polygon.getPositions(polygon).length / this.positionSize;\n }\n /** Override base Tesselator method */\n getGeometryFromBuffer(buffer) {\n if (this.normalize || !this.buffers.indices) {\n return super.getGeometryFromBuffer(buffer);\n }\n // we don't need to read the positions if no normalization/tesselation\n return null;\n }\n /** Implement base Tesselator interface */\n updateGeometryAttributes(polygon, context) {\n if (polygon && isCut(polygon)) {\n for (const subPolygon of polygon) {\n const geometrySize = this.getGeometrySize(subPolygon);\n context.geometrySize = geometrySize;\n this.updateGeometryAttributes(subPolygon, context);\n context.vertexStart += geometrySize;\n context.indexStart = this.indexStarts[context.geometryIndex + 1];\n }\n }\n else {\n const normalizedPolygon = polygon;\n this._updateIndices(normalizedPolygon, context);\n this._updatePositions(normalizedPolygon, context);\n this._updateVertexValid(normalizedPolygon, context);\n }\n }\n // Flatten the indices array\n _updateIndices(polygon, { geometryIndex, vertexStart: offset, indexStart }) {\n const { attributes, indexStarts, typedArrayManager } = this;\n let target = attributes.indices;\n if (!target || !polygon) {\n return;\n }\n let i = indexStart;\n // 1. get triangulated indices for the internal areas\n const indices = Polygon.getSurfaceIndices(polygon, this.positionSize, this.opts.preproject, this.opts.full3d);\n // make sure the buffer is large enough\n target = typedArrayManager.allocate(target, indexStart + indices.length, {\n copy: true\n });\n // 2. offset each index by the number of indices in previous polygons\n for (let j = 0; j < indices.length; j++) {\n target[i++] = indices[j] + offset;\n }\n indexStarts[geometryIndex + 1] = indexStart + indices.length;\n attributes.indices = target;\n }\n // Flatten out all the vertices of all the sub subPolygons\n _updatePositions(polygon, { vertexStart, geometrySize }) {\n const { attributes: { positions }, positionSize } = this;\n if (!positions || !polygon) {\n return;\n }\n const polygonPositions = Polygon.getPositions(polygon);\n for (let i = vertexStart, j = 0; j < geometrySize; i++, j++) {\n const x = polygonPositions[j * positionSize];\n const y = polygonPositions[j * positionSize + 1];\n const z = positionSize > 2 ? polygonPositions[j * positionSize + 2] : 0;\n positions[i * 3] = x;\n positions[i * 3 + 1] = y;\n positions[i * 3 + 2] = z;\n }\n }\n _updateVertexValid(polygon, { vertexStart, geometrySize }) {\n const { positionSize } = this;\n const vertexValid = this.attributes.vertexValid;\n const holeIndices = polygon && Polygon.getHoleIndices(polygon);\n /* We are reusing the some buffer for `nextPositions` by offseting one vertex\n * to the left. As a result,\n * the last vertex of each ring overlaps with the first vertex of the next ring.\n * `vertexValid` is used to mark the end of each ring so we don't draw these\n * segments:\n positions A0 A1 A2 A3 A4 B0 B1 B2 C0 ...\n nextPositions A1 A2 A3 A4 B0 B1 B2 C0 C1 ...\n vertexValid 1 1 1 1 0 1 1 0 1 ...\n */\n if (polygon && polygon.edgeTypes) {\n vertexValid.set(polygon.edgeTypes, vertexStart);\n }\n else {\n vertexValid.fill(1, vertexStart, vertexStart + geometrySize);\n }\n if (holeIndices) {\n for (let j = 0; j < holeIndices.length; j++) {\n vertexValid[vertexStart + holeIndices[j] / positionSize - 1] = 0;\n }\n }\n vertexValid[vertexStart + geometrySize - 1] = 0;\n }\n}\nfunction isCut(polygon) {\n return Array.isArray(polygon) && polygon.length > 0 && !Number.isFinite(polygon[0]);\n}\n//# sourceMappingURL=polygon-tesselator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform solidPolygonUniforms {\n bool extruded;\n bool isWireframe;\n float elevationScale;\n} solidPolygon;\n`;\nexport const solidPolygonUniforms = {\n name: 'solidPolygon',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n extruded: 'f32',\n isWireframe: 'f32',\n elevationScale: 'f32'\n }\n};\n//# sourceMappingURL=solid-polygon-layer-uniforms.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default `\\\nin vec4 fillColors;\nin vec4 lineColors;\nin vec3 pickingColors;\nout vec4 vColor;\nstruct PolygonProps {\nvec3 positions;\nvec3 positions64Low;\nvec3 normal;\nfloat elevations;\n};\nvec3 project_offset_normal(vec3 vector) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject.coordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\nreturn normalize(vector * project.commonUnitsPerWorldUnit);\n}\nreturn project_normal(vector);\n}\nvoid calculatePosition(PolygonProps props) {\nvec3 pos = props.positions;\nvec3 pos64Low = props.positions64Low;\nvec3 normal = props.normal;\nvec4 colors = solidPolygon.isWireframe ? lineColors : fillColors;\ngeometry.worldPosition = props.positions;\ngeometry.pickingColor = pickingColors;\nif (solidPolygon.extruded) {\npos.z += props.elevations * solidPolygon.elevationScale;\n}\ngl_Position = project_position_to_clipspace(pos, pos64Low, vec3(0.), geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (solidPolygon.extruded) {\n#ifdef IS_SIDE_VERTEX\nnormal = project_offset_normal(normal);\n#else\nnormal = project_normal(normal);\n#endif\ngeometry.normal = normal;\nvec3 lightColor = lighting_getLightColor(colors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, colors.a * layer.opacity);\n} else {\nvColor = vec4(colors.rgb, colors.a * layer.opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n//# sourceMappingURL=solid-polygon-layer-vertex-main.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport main from \"./solid-polygon-layer-vertex-main.glsl.js\";\nexport default `\\\n#version 300 es\n#define SHADER_NAME solid-polygon-layer-vertex-shader\nin vec3 vertexPositions;\nin vec3 vertexPositions64Low;\nin float elevations;\n${main}\nvoid main(void) {\nPolygonProps props;\nprops.positions = vertexPositions;\nprops.positions64Low = vertexPositions64Low;\nprops.elevations = elevations;\nprops.normal = vec3(0.0, 0.0, 1.0);\ncalculatePosition(props);\n}\n`;\n//# sourceMappingURL=solid-polygon-layer-vertex-top.glsl.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport main from \"./solid-polygon-layer-vertex-main.glsl.js\";\nexport default `\\\n#version 300 es\n#define SHADER_NAME solid-polygon-layer-vertex-shader-side\n#define IS_SIDE_VERTEX\nin vec2 positions;\nin vec3 vertexPositions;\nin vec3 nextVertexPositions;\nin vec3 vertexPositions64Low;\nin vec3 nextVertexPositions64Low;\nin float elevations;\nin float instanceVertexValid;\n${main}\nvoid main(void) {\nif(instanceVertexValid < 0.5){\ngl_Position = vec4(0.);\nreturn;\n}\nPolygonProps props;\nvec3 pos;\nvec3 pos64Low;\nvec3 nextPos;\nvec3 nextPos64Low;\n#if RING_WINDING_ORDER_CW == 1\npos = vertexPositions;\npos64Low = vertexPositions64Low;\nnextPos = nextVertexPositions;\nnextPos64Low = nextVertexPositions64Low;\n#else\npos = nextVertexPositions;\npos64Low = nextVertexPositions64Low;\nnextPos = vertexPositions;\nnextPos64Low = vertexPositions64Low;\n#endif\nprops.positions = mix(pos, nextPos, positions.x);\nprops.positions64Low = mix(pos64Low, nextPos64Low, positions.x);\nprops.normal = vec3(\npos.y - nextPos.y + (pos64Low.y - nextPos64Low.y),\nnextPos.x - pos.x + (nextPos64Low.x - pos64Low.x),\n0.0);\nprops.elevations = elevations * positions.y;\ncalculatePosition(props);\n}\n`;\n//# sourceMappingURL=solid-polygon-layer-vertex-side.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 solid-polygon-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nout vec4 fragColor;\nvoid main(void) {\nfragColor = vColor;\ngeometry.uv = vec2(0.);\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n//# sourceMappingURL=solid-polygon-layer-fragment.glsl.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, Geometry } from '@luma.gl/engine';\nimport { gouraudMaterial } from '@luma.gl/shadertools';\n// Polygon geometry generation is managed by the polygon tesselator\nimport PolygonTesselator from \"./polygon-tesselator.js\";\nimport { solidPolygonUniforms } from \"./solid-polygon-layer-uniforms.js\";\nimport vsTop from \"./solid-polygon-layer-vertex-top.glsl.js\";\nimport vsSide from \"./solid-polygon-layer-vertex-side.glsl.js\";\nimport fs from \"./solid-polygon-layer-fragment.glsl.js\";\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst defaultProps = {\n filled: true,\n extruded: false,\n wireframe: false,\n _normalize: true,\n _windingOrder: 'CW',\n _full3d: false,\n elevationScale: { type: 'number', min: 0, value: 1 },\n getPolygon: { type: 'accessor', value: (f) => f.polygon },\n getElevation: { type: 'accessor', value: 1000 },\n getFillColor: { type: 'accessor', value: DEFAULT_COLOR },\n getLineColor: { type: 'accessor', value: DEFAULT_COLOR },\n material: true\n};\nconst ATTRIBUTE_TRANSITION = {\n enter: (value, chunk) => {\n return chunk.length ? chunk.subarray(chunk.length - value.length) : value;\n }\n};\nclass SolidPolygonLayer extends Layer {\n getShaders(type) {\n return super.getShaders({\n vs: type === 'top' ? vsTop : vsSide,\n fs,\n defines: {\n RING_WINDING_ORDER_CW: !this.props._normalize && this.props._windingOrder === 'CCW' ? 0 : 1\n },\n modules: [project32, gouraudMaterial, picking, solidPolygonUniforms]\n });\n }\n get wrapLongitude() {\n return false;\n }\n getBounds() {\n return this.getAttributeManager()?.getBounds(['vertexPositions']);\n }\n initializeState() {\n const { viewport } = this.context;\n let { coordinateSystem } = this.props;\n const { _full3d } = this.props;\n if (viewport.isGeospatial && coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {\n coordinateSystem = COORDINATE_SYSTEM.LNGLAT;\n }\n let preproject;\n if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n if (_full3d) {\n preproject = viewport.projectPosition.bind(viewport);\n }\n else {\n preproject = viewport.projectFlat.bind(viewport);\n }\n }\n this.setState({\n numInstances: 0,\n polygonTesselator: new PolygonTesselator({\n // Lnglat coordinates are usually projected non-linearly, which affects tesselation results\n // Provide a preproject function if the coordinates are in lnglat\n preproject,\n fp64: this.use64bitPositions(),\n IndexType: Uint32Array\n })\n });\n const attributeManager = this.getAttributeManager();\n const noAlloc = true;\n attributeManager.remove(['instancePickingColors']);\n /* eslint-disable max-len */\n attributeManager.add({\n indices: {\n size: 1,\n isIndexed: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateIndices,\n noAlloc\n },\n vertexPositions: {\n size: 3,\n type: 'float64',\n stepMode: 'dynamic',\n fp64: this.use64bitPositions(),\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getPolygon',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculatePositions,\n noAlloc,\n shaderAttributes: {\n nextVertexPositions: {\n vertexOffset: 1\n }\n }\n },\n instanceVertexValid: {\n size: 1,\n type: 'uint16',\n stepMode: 'instance',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateVertexValid,\n noAlloc\n },\n elevations: {\n size: 1,\n stepMode: 'dynamic',\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getElevation'\n },\n fillColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n stepMode: 'dynamic',\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getFillColor',\n defaultValue: DEFAULT_COLOR\n },\n lineColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n stepMode: 'dynamic',\n transition: ATTRIBUTE_TRANSITION,\n accessor: 'getLineColor',\n defaultValue: DEFAULT_COLOR\n },\n pickingColors: {\n size: 4,\n type: 'uint8',\n stepMode: 'dynamic',\n accessor: (object, { index, target: value }) => this.encodePickingColor(object && object.__source ? object.__source.index : index, value)\n }\n });\n /* eslint-enable max-len */\n }\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n const { index } = info;\n const data = this.props.data;\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n info.object = data.find(d => d.__source.index === index);\n }\n return info;\n }\n disablePickingIndex(objectIndex) {\n const data = this.props.data;\n // Check if data comes from a composite layer, wrapped with getSubLayerRow\n if (data[0] && data[0].__source) {\n // index decoded from picking color refers to the source index\n for (let i = 0; i < data.length; i++) {\n if (data[i].__source.index === objectIndex) {\n this._disablePickingIndex(i);\n }\n }\n }\n else {\n super.disablePickingIndex(objectIndex);\n }\n }\n draw({ uniforms }) {\n const { extruded, filled, wireframe, elevationScale } = this.props;\n const { topModel, sideModel, wireframeModel, polygonTesselator } = this.state;\n const renderUniforms = {\n extruded: Boolean(extruded),\n elevationScale,\n isWireframe: false\n };\n // Note - the order is important\n if (wireframeModel && wireframe) {\n wireframeModel.setInstanceCount(polygonTesselator.instanceCount - 1);\n wireframeModel.shaderInputs.setProps({ solidPolygon: { ...renderUniforms, isWireframe: true } });\n wireframeModel.draw(this.context.renderPass);\n }\n if (sideModel && filled) {\n sideModel.setInstanceCount(polygonTesselator.instanceCount - 1);\n sideModel.shaderInputs.setProps({ solidPolygon: renderUniforms });\n sideModel.draw(this.context.renderPass);\n }\n if (topModel && filled) {\n topModel.setVertexCount(polygonTesselator.vertexCount);\n topModel.shaderInputs.setProps({ solidPolygon: renderUniforms });\n topModel.draw(this.context.renderPass);\n }\n }\n updateState(updateParams) {\n super.updateState(updateParams);\n this.updateGeometry(updateParams);\n const { props, oldProps, changeFlags } = updateParams;\n const attributeManager = this.getAttributeManager();\n const regenerateModels = changeFlags.extensionsChanged ||\n props.filled !== oldProps.filled ||\n props.extruded !== oldProps.extruded;\n if (regenerateModels) {\n this.state.models?.forEach(model => model.destroy());\n this.setState(this._getModels());\n attributeManager.invalidateAll();\n }\n }\n updateGeometry({ props, oldProps, changeFlags }) {\n const geometryConfigChanged = changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon));\n // When the geometry config or the data is changed,\n // tessellator needs to be invoked\n if (geometryConfigChanged) {\n const { polygonTesselator } = this.state;\n const buffers = props.data.attributes || {};\n polygonTesselator.updateGeometry({\n data: props.data,\n normalize: props._normalize,\n geometryBuffer: buffers.getPolygon,\n buffers,\n getGeometry: props.getPolygon,\n positionFormat: props.positionFormat,\n wrapLongitude: props.wrapLongitude,\n // TODO - move the flag out of the viewport\n resolution: this.context.viewport.resolution,\n fp64: this.use64bitPositions(),\n dataChanged: changeFlags.dataChanged,\n full3d: props._full3d\n });\n this.setState({\n numInstances: polygonTesselator.instanceCount,\n startIndices: polygonTesselator.vertexStarts\n });\n if (!changeFlags.dataChanged) {\n // Base `layer.updateState` only invalidates all attributes on data change\n // Cover the rest of the scenarios here\n this.getAttributeManager().invalidateAll();\n }\n }\n }\n _getModels() {\n const { id, filled, extruded } = this.props;\n let topModel;\n let sideModel;\n let wireframeModel;\n if (filled) {\n const shaders = this.getShaders('top');\n shaders.defines.NON_INSTANCED_MODEL = 1;\n const bufferLayout = this.getAttributeManager().getBufferLayouts({ isInstanced: false });\n topModel = new Model(this.context.device, {\n ...shaders,\n id: `${id}-top`,\n topology: 'triangle-list',\n bufferLayout,\n isIndexed: true,\n userData: {\n excludeAttributes: { instanceVertexValid: true }\n }\n });\n }\n if (extruded) {\n const bufferLayout = this.getAttributeManager().getBufferLayouts({ isInstanced: true });\n sideModel = new Model(this.context.device, {\n ...this.getShaders('side'),\n id: `${id}-side`,\n bufferLayout,\n geometry: new Geometry({\n topology: 'triangle-strip',\n attributes: {\n // top right - top left - bottom right - bottom left\n positions: {\n size: 2,\n value: new Float32Array([1, 0, 0, 0, 1, 1, 0, 1])\n }\n }\n }),\n isInstanced: true,\n userData: {\n excludeAttributes: { indices: true }\n }\n });\n wireframeModel = new Model(this.context.device, {\n ...this.getShaders('side'),\n id: `${id}-wireframe`,\n bufferLayout,\n geometry: new Geometry({\n topology: 'line-strip',\n attributes: {\n // top right - top left - bottom left - bottom right\n positions: {\n size: 2,\n value: new Float32Array([1, 0, 0, 0, 0, 1, 1, 1])\n }\n }\n }),\n isInstanced: true,\n userData: {\n excludeAttributes: { indices: true }\n }\n });\n }\n return {\n models: [sideModel, wireframeModel, topModel].filter(Boolean),\n topModel,\n sideModel,\n wireframeModel\n };\n }\n calculateIndices(attribute) {\n const { polygonTesselator } = this.state;\n attribute.startIndices = polygonTesselator.indexStarts;\n attribute.value = polygonTesselator.get('indices');\n }\n calculatePositions(attribute) {\n const { polygonTesselator } = this.state;\n attribute.startIndices = polygonTesselator.vertexStarts;\n attribute.value = polygonTesselator.get('positions');\n }\n calculateVertexValid(attribute) {\n attribute.value = this.state.polygonTesselator.get('vertexValid');\n }\n}\nSolidPolygonLayer.defaultProps = defaultProps;\nSolidPolygonLayer.layerName = 'SolidPolygonLayer';\nexport default SolidPolygonLayer;\n//# sourceMappingURL=solid-polygon-layer.js.map"],"names":["WINDING","modifyPolygonWindingDirection","points","direction","options","getPolygonWindingDirection","reversePolygon","getPolygonSignedArea","DimIndex","start","end","plane","dim","area","i0","i1","i","j","size","numPoints","numSwaps","b1","b2","tmp","push","target","source","startIndex","isDuplicate","copy","getPointAtIndex","positions","index","offset","out","startI","intersect","a","b","edge","bbox","t","snap","bitCode","p","code","cutPolylineByGrid","broken","gridResolution","gridOffset","endIndex","part","result","codeB","cell","getGridCell","scratchPoint","codeAlt","moveToNeighborCell","TYPE_INSIDE","TYPE_BORDER","cutPolygonByGrid","holeIndices","edgeTypes","queue","pos","types","holes","getBoundingBox","parts","bisectPolygon","polygonLow","polygonHigh","concatInPlace","polygon","resultLow","resultHigh","typesLow","typesHigh","side","type","prev","prevSide","prevType","lowPointCount","highPointCount","left","bottom","minX","maxX","minY","maxY","x","y","arr1","arr2","DEFAULT_MAX_LATITUDE","cutPolylineByMercatorBounds","normalize","newPositions","wrapLongitudesForShortestPath","shiftLongitudesIntoRange","cutPolygonByMercatorBounds","newHoleIndices","srcStartIndex","targetIndex","ringIndex","srcEndIndex","targetStartIndex","splitIndex","findSplitIndex","insertPoleVertices","maxLat","pointIndex","lat","maxLatitude","firstLng","lastLng","prevLng","lng","delta","refLng","pointCount","ColumnGeometry","Geometry","props","indices","attributes","tesselateColumn","radius","height","nradial","vertices","log","v","isExtruded","vertsAroundEdge","numVertices","stepAngle","normals","vertexIndex","sin","cos","k","uniformBlock","columnUniforms","vs$1","fs$2","DEFAULT_COLOR","defaultProps","ColumnLayer","Layer","defines","flatShading","vs","fs","project32","phongMaterial","gouraudMaterial","picking","params","oldProps","changeFlags","regenerateModels","model","instanceCount","diskResolution","hasThinkness","geometry","meanVertexDistance","d","shaders","bufferLayout","fillModel","Model","wireframeModel","extruded","stroked","uniforms","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","radiusUnits","elevationScale","filled","wireframe","coverage","angle","fillVertexCount","edgeDistance","columnProps","UNIT","normalizePath","path","wrapLongitude","flatPath","length","START_CAP","END_CAP","INVALID","PathTesselator","Tesselator","opts","attributeName","buffer","isCut","subPath","context","geometrySize","segmentTypes","isPathClosed","vertexStart","ptIndex","positionSize","lastPointIndex","pathUniforms","fs$1","object","ATTRIBUTE_TRANSITION","value","chunk","PathLayer","attributeManager","pathTesselator","buffers","info","data","objectIndex","jointRounded","capRounded","billboard","miterLimit","widthUnits","widthScale","widthMinPixels","widthMaxPixels","pathProps","SEGMENT_INDICES","SEGMENT_POSITIONS","attribute","earcutModule","earcut","hasHoles","outerLen","outerNode","linkedList","triangles","invSize","eliminateHoles","earcutLinked","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","again","ear","pass","indexCurve","stop","next","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","ax","bx","cx","ay","by","cy","x0","y0","x1","y1","pointInTriangle","minZ","zOrder","maxZ","n","intersects","locallyInside","isValidDiagonal","splitPolygon","len","list","getLeftmost","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","m","mx","my","tanMin","tan","sectorContainsSector","sortLinked","q","e","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","o1","sign","o2","o3","o4","onSegment","num","inside","a2","Node","an","bp","polygonArea","trianglesArea","sum","holeIndex","OUTER_POLYGON_WINDING","HOLE_POLYGON_WINDING","windingOptions","validate","getPositions","getHoleIndices","isNested","isSimple","isNestedRingClosed","simplePolygon","p0","isFlatRingClosed","copyNestedRing","windingDirection","copyFlatRing","srcLength","srcPositions","srcHoleIndices","polygonIndex","getPlaneArea","xIndex","yIndex","numVerts","permutePositions","zIndex","o","z","getSurfaceIndices","preproject","full3d","positionIndex","is3d","xy","xyArea","xzArea","yzArea","PolygonTesselator","fp64","IndexType","externalIndices","normalizedPolygon","Polygon.normalize","Polygon.getPositions","Polygon.getHoleIndices","subPolygon","geometryIndex","indexStart","indexStarts","typedArrayManager","Polygon.getSurfaceIndices","polygonPositions","vertexValid","solidPolygonUniforms","main","vsTop","vsSide","f","SolidPolygonLayer","viewport","coordinateSystem","_full3d","COORDINATE_SYSTEM","noAlloc","topModel","sideModel","polygonTesselator","renderUniforms","updateParams","id"],"mappings":"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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]}
@@ -0,0 +1,2 @@
1
+ import{l as z,P as C,a as A,b as E,L as M,g as j,c as O}from"./layer-DPcO4AXQ.js";import{P as B,f as R,d as N}from"./webgl-developer-tools-utTNOsNf.js";import{v as U,B as w}from"./deep-equal-BTW2ZN6S.js";import{a as D}from"./assert-cyW4mg7q.js";const H={props:{},name:"gouraudMaterial",vs:E.replace("phongMaterial","gouraudMaterial"),fs:A.replace("phongMaterial","gouraudMaterial"),source:C.replaceAll("phongMaterial","gouraudMaterial"),defines:{LIGHTING_VERTEX:!0},dependencies:[z],uniformTypes:{ambient:"f32",diffuse:"f32",shininess:"f32",specularColor:"vec3<f32>"},defaultUniforms:{ambient:.35,diffuse:.6,shininess:32,specularColor:[.15,.15,.15]},getUniforms(b){const e={...b};return e.specularColor&&(e.specularColor=e.specularColor.map(r=>r/255)),{...H.defaultUniforms,...e}}},F="compositeLayer.renderLayers";class I extends M{get isComposite(){return!0}get isDrawable(){return!1}get isLoaded(){return super.isLoaded&&this.getSubLayers().every(e=>e.isLoaded)}getSubLayers(){return this.internalState&&this.internalState.subLayers||[]}initializeState(e){}setState(e){super.setState(e),this.setNeedsUpdate()}getPickingInfo({info:e}){const{object:r}=e;return r&&r.__source&&r.__source.parent&&r.__source.parent.id===this.id&&(e.object=r.__source.object,e.index=r.__source.index),e}filterSubLayer(e){return!0}shouldRenderSubLayer(e,r){return r&&r.length}getSubLayerClass(e,r){const{_subLayerProps:t}=this.props;return t&&t[e]&&t[e].type||r}getSubLayerRow(e,r,t){return e.__source={parent:this,object:r,index:t},e}getSubLayerAccessor(e){if(typeof e=="function"){const r={index:-1,data:this.props.data,target:[]};return(t,s)=>t&&t.__source?(r.index=t.__source.index,e(t.__source.object,r)):e(t,s)}return e}getSubLayerProps(e={}){const{opacity:r,pickable:t,visible:s,parameters:i,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:c,highlightColor:l,coordinateSystem:p,coordinateOrigin:u,wrapLongitude:n,positionFormat:h,modelMatrix:S,extensions:_,fetch:T,operation:v,_subLayerProps:L}=this.props,f={id:"",updateTriggers:{},opacity:r,pickable:t,visible:s,parameters:i,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:c,highlightColor:l,coordinateSystem:p,coordinateOrigin:u,wrapLongitude:n,positionFormat:h,modelMatrix:S,extensions:_,fetch:T,operation:v},d=L&&e.id&&L[e.id],x=d&&d.updateTriggers,P=e.id||"sublayer";if(d){const y=this.props[B],g=e.type?e.type._propTypes:{};for(const m in d){const G=g[m]||y[m];G&&G.type==="accessor"&&(d[m]=this.getSubLayerAccessor(d[m]))}}Object.assign(f,e,d),f.id=`${this.props.id}-${P}`,f.updateTriggers={all:this.props.updateTriggers?.all,...e.updateTriggers,...x};for(const y of _){const g=y.getSubLayerProps.call(this,y);g&&Object.assign(f,g,{updateTriggers:Object.assign(f.updateTriggers,g.updateTriggers)})}return f}_updateAutoHighlight(e){for(const r of this.getSubLayers())r.updateAutoHighlight(e)}_getAttributeManager(){return null}_postUpdate(e,r){let t=this.internalState.subLayers;const s=!t||this.needsUpdate();if(s){const i=this.renderLayers();t=R(i,Boolean),this.internalState.subLayers=t}N(F,this,s,t);for(const i of t)i.parent=this}}I.layerName="CompositeLayer";class X{constructor(e){this.indexStarts=[0],this.vertexStarts=[0],this.vertexCount=0,this.instanceCount=0;const{attributes:r={}}=e;this.typedArrayManager=U,this.attributes={},this._attributeDefs=r,this.opts=e,this.updateGeometry(e)}updateGeometry(e){Object.assign(this.opts,e);const{data:r,buffers:t={},getGeometry:s,geometryBuffer:i,positionFormat:o,dataChanged:a,normalize:c=!0}=this.opts;if(this.data=r,this.getGeometry=s,this.positionSize=i&&i.size||(o==="XY"?2:3),this.buffers=t,this.normalize=c,i&&(D(r.startIndices),this.getGeometry=this.getGeometryFromBuffer(i),c||(t.vertexPositions=i)),this.geometryBuffer=t.vertexPositions,Array.isArray(a))for(const l of a)this._rebuildGeometry(l);else this._rebuildGeometry()}updatePartialGeometry({startRow:e,endRow:r}){this._rebuildGeometry({startRow:e,endRow:r})}getGeometryFromBuffer(e){const r=e.value||e;return ArrayBuffer.isView(r)?j(r,{size:this.positionSize,offset:e.offset,stride:e.stride,startIndices:this.data.startIndices}):null}_allocate(e,r){const{attributes:t,buffers:s,_attributeDefs:i,typedArrayManager:o}=this;for(const a in i)if(a in s)o.release(t[a]),t[a]=null;else{const c=i[a];c.copy=r,t[a]=o.allocate(t[a],e,c)}}_forEachGeometry(e,r,t){const{data:s,getGeometry:i}=this,{iterable:o,objectInfo:a}=O(s,r,t);for(const c of o){a.index++;const l=i?i(c,a):null;e(l,a.index)}}_rebuildGeometry(e){if(!this.data)return;let{indexStarts:r,vertexStarts:t,instanceCount:s}=this;const{data:i,geometryBuffer:o}=this,{startRow:a=0,endRow:c=1/0}=e||{},l={};if(e||(r=[0],t=[0]),this.normalize||!o)this._forEachGeometry((u,n)=>{const h=u&&this.normalizeGeometry(u);l[n]=h,t[n+1]=t[n]+(h?this.getGeometrySize(h):0)},a,c),s=t[t.length-1];else if(t=i.startIndices,s=t[i.length]||0,ArrayBuffer.isView(o))s=s||o.length/this.positionSize;else if(o instanceof w){const u=this.positionSize*4;s=s||o.byteLength/u}else if(o.buffer){const u=o.stride||this.positionSize*4;s=s||o.buffer.byteLength/u}else if(o.value){const u=o.value,n=o.stride/u.BYTES_PER_ELEMENT||this.positionSize;s=s||u.length/n}this._allocate(s,!!e),this.indexStarts=r,this.vertexStarts=t,this.instanceCount=s;const p={};this._forEachGeometry((u,n)=>{const h=l[n]||u;p.vertexStart=t[n],p.indexStart=r[n];const S=n<t.length-1?t[n+1]:s;p.geometrySize=S-t[n],p.geometryIndex=n,this.updateGeometryAttributes(h,p)},a,c),this.vertexCount=r[r.length-1]}}export{I as C,X as T,H as g};
2
+ //# sourceMappingURL=tesselator-CENyUZ2p.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tesselator-CENyUZ2p.js","sources":["../../../../node_modules/.pnpm/@luma.gl+shadertools@9.2.6_@luma.gl+core@9.2.6/node_modules/@luma.gl/shadertools/dist/modules/lighting/gouraud-material/gouraud-material.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/lib/composite-layer.js","../../../../node_modules/.pnpm/@deck.gl+core@9.2.6/node_modules/@deck.gl/core/dist/utils/tesselator.js"],"sourcesContent":["// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { lighting } from \"../lights/lighting.js\";\nimport { PHONG_VS, PHONG_FS } from \"../phong-material/phong-shaders-glsl.js\";\nimport { PHONG_WGSL } from \"../phong-material/phong-shaders-wgsl.js\";\n/** In Gouraud shading, color is calculated for each triangle vertex normal, and then color is interpolated colors across the triangle */\nexport const gouraudMaterial = {\n props: {},\n name: 'gouraudMaterial',\n // Note these are switched between phong and gouraud\n vs: PHONG_FS.replace('phongMaterial', 'gouraudMaterial'),\n fs: PHONG_VS.replace('phongMaterial', 'gouraudMaterial'),\n source: PHONG_WGSL.replaceAll('phongMaterial', 'gouraudMaterial'),\n defines: {\n LIGHTING_VERTEX: true\n },\n dependencies: [lighting],\n uniformTypes: {\n ambient: 'f32',\n diffuse: 'f32',\n shininess: 'f32',\n specularColor: 'vec3<f32>'\n },\n defaultUniforms: {\n ambient: 0.35,\n diffuse: 0.6,\n shininess: 32,\n specularColor: [0.15, 0.15, 0.15]\n },\n getUniforms(props) {\n const uniforms = { ...props };\n if (uniforms.specularColor) {\n uniforms.specularColor = uniforms.specularColor.map(x => x / 255);\n }\n return { ...gouraudMaterial.defaultUniforms, ...uniforms };\n }\n};\n//# sourceMappingURL=gouraud-material.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Layer from \"./layer.js\";\nimport debug from \"../debug/index.js\";\nimport { flatten } from \"../utils/flatten.js\";\nimport { PROP_TYPES_SYMBOL } from \"../lifecycle/constants.js\";\nconst TRACE_RENDER_LAYERS = 'compositeLayer.renderLayers';\nclass CompositeLayer extends Layer {\n /** `true` if this layer renders other layers */\n get isComposite() {\n return true;\n }\n /** `true` if the layer renders to screen */\n get isDrawable() {\n return false;\n }\n /** Returns true if all async resources are loaded */\n get isLoaded() {\n return super.isLoaded && this.getSubLayers().every(layer => layer.isLoaded);\n }\n /** Return last rendered sub layers */\n getSubLayers() {\n return (this.internalState && this.internalState.subLayers) || [];\n }\n // initializeState is usually not needed for composite layers\n // Provide empty definition to disable check for missing definition\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n initializeState(context) { }\n /** Updates selected state members and marks the composite layer to need rerender */\n setState(updateObject) {\n super.setState(updateObject);\n // Trigger a layer update\n // Although conceptually layer.draw and compositeLayer.renderLayers are equivalent,\n // they are executed during different lifecycles.\n // draw can be called without calling updateState (e.g. most viewport changes),\n // while renderLayers can only be called during a recursive layer update.\n this.setNeedsUpdate();\n }\n /** called to augment the info object that is bubbled up from a sublayer\n override Layer.getPickingInfo() because decoding / setting uniform do\n not apply to a composite layer. */\n getPickingInfo({ info }) {\n const { object } = info;\n const isDataWrapped = object && object.__source && object.__source.parent && object.__source.parent.id === this.id;\n if (!isDataWrapped) {\n return info;\n }\n // override object with picked data\n info.object = object.__source.object;\n info.index = object.__source.index;\n return info;\n }\n /**\n * Filters sub layers at draw time. Return true if the sub layer should be drawn.\n */\n filterSubLayer(context) {\n return true;\n }\n /** Returns true if sub layer needs to be rendered */\n shouldRenderSubLayer(subLayerId, data) {\n return data && data.length;\n }\n /** Returns sub layer class for a specific sublayer */\n getSubLayerClass(subLayerId, DefaultLayerClass) {\n const { _subLayerProps: overridingProps } = this.props;\n return ((overridingProps &&\n overridingProps[subLayerId] &&\n overridingProps[subLayerId].type) ||\n DefaultLayerClass);\n }\n /** When casting user data into another format to pass to sublayers,\n add reference to the original object and object index */\n getSubLayerRow(row, sourceObject, sourceObjectIndex) {\n // @ts-ignore (TS2339) adding undefined property\n row.__source = {\n parent: this,\n object: sourceObject,\n index: sourceObjectIndex\n };\n return row;\n }\n /** Some composite layers cast user data into another format before passing to sublayers\n We need to unwrap them before calling the accessor so that they see the original data\n objects */\n getSubLayerAccessor(accessor) {\n if (typeof accessor === 'function') {\n const objectInfo = {\n index: -1,\n // @ts-ignore accessing resolved data\n data: this.props.data,\n target: []\n };\n return (x, i) => {\n if (x && x.__source) {\n objectInfo.index = x.__source.index;\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x.__source.object, objectInfo);\n }\n // @ts-ignore (TS2349) Out is never a function\n return accessor(x, i);\n };\n }\n return accessor;\n }\n /** Returns sub layer props for a specific sublayer */\n // eslint-disable-next-line complexity\n getSubLayerProps(sublayerProps = {}) {\n const { opacity, pickable, visible, parameters, getPolygonOffset, highlightedObjectIndex, autoHighlight, highlightColor, coordinateSystem, coordinateOrigin, wrapLongitude, positionFormat, modelMatrix, extensions, fetch, operation, _subLayerProps: overridingProps } = this.props;\n const newProps = {\n id: '',\n updateTriggers: {},\n opacity,\n pickable,\n visible,\n parameters,\n getPolygonOffset,\n highlightedObjectIndex,\n autoHighlight,\n highlightColor,\n coordinateSystem,\n coordinateOrigin,\n wrapLongitude,\n positionFormat,\n modelMatrix,\n extensions,\n fetch,\n operation\n };\n const overridingSublayerProps = overridingProps && sublayerProps.id && overridingProps[sublayerProps.id];\n const overridingSublayerTriggers = overridingSublayerProps && overridingSublayerProps.updateTriggers;\n const sublayerId = sublayerProps.id || 'sublayer';\n if (overridingSublayerProps) {\n const propTypes = this.props[PROP_TYPES_SYMBOL];\n const subLayerPropTypes = sublayerProps.type ? sublayerProps.type._propTypes : {};\n for (const key in overridingSublayerProps) {\n const propType = subLayerPropTypes[key] || propTypes[key];\n // eslint-disable-next-line\n if (propType && propType.type === 'accessor') {\n overridingSublayerProps[key] = this.getSubLayerAccessor(overridingSublayerProps[key]);\n }\n }\n }\n Object.assign(newProps, sublayerProps, \n // experimental feature that allows users to override sublayer props via parent layer prop\n overridingSublayerProps);\n newProps.id = `${this.props.id}-${sublayerId}`;\n newProps.updateTriggers = {\n all: this.props.updateTriggers?.all,\n ...sublayerProps.updateTriggers,\n ...overridingSublayerTriggers\n };\n // Pass through extension props\n // @ts-ignore (TS2532) extensions is always defined after merging with default props\n for (const extension of extensions) {\n const passThroughProps = extension.getSubLayerProps.call(this, extension);\n if (passThroughProps) {\n Object.assign(newProps, passThroughProps, {\n updateTriggers: Object.assign(newProps.updateTriggers, passThroughProps.updateTriggers)\n });\n }\n }\n return newProps;\n }\n /** Update sub layers to highlight the hovered object */\n _updateAutoHighlight(info) {\n for (const layer of this.getSubLayers()) {\n layer.updateAutoHighlight(info);\n }\n }\n /** Override base Layer method */\n _getAttributeManager() {\n return null;\n }\n /** (Internal) Called after an update to rerender sub layers */\n _postUpdate(updateParams, forceUpdate) {\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n let subLayers = this.internalState.subLayers;\n const shouldUpdate = !subLayers || this.needsUpdate();\n if (shouldUpdate) {\n const subLayersList = this.renderLayers();\n // Flatten the returned array, removing any null, undefined or false\n // this allows layers to render sublayers conditionally\n // (see CompositeLayer.renderLayers docs)\n subLayers = flatten(subLayersList, Boolean);\n // @ts-ignore (TS2531) this method is only called internally when internalState is defined\n this.internalState.subLayers = subLayers;\n }\n debug(TRACE_RENDER_LAYERS, this, shouldUpdate, subLayers);\n // populate reference to parent layer (this layer)\n // NOTE: needs to be done even when reusing layers as the parent may have changed\n for (const layer of subLayers) {\n layer.parent = this;\n }\n }\n}\nCompositeLayer.layerName = 'CompositeLayer';\nexport default CompositeLayer;\n//# sourceMappingURL=composite-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { createIterable, getAccessorFromBuffer } from \"./iterable-utils.js\";\nimport defaultTypedArrayManager from \"./typed-array-manager.js\";\nimport assert from \"./assert.js\";\nimport { Buffer } from '@luma.gl/core';\nexport default class Tesselator {\n constructor(opts) {\n this.indexStarts = [0];\n this.vertexStarts = [0];\n this.vertexCount = 0;\n this.instanceCount = 0;\n const { attributes = {} } = opts;\n this.typedArrayManager = defaultTypedArrayManager;\n this.attributes = {};\n this._attributeDefs = attributes;\n this.opts = opts;\n this.updateGeometry(opts);\n }\n /* Public methods */\n updateGeometry(opts) {\n Object.assign(this.opts, opts);\n const { data, buffers = {}, getGeometry, geometryBuffer, positionFormat, dataChanged, normalize = true } = this.opts;\n this.data = data;\n this.getGeometry = getGeometry;\n this.positionSize =\n // @ts-ignore (2339) when geometryBuffer is a luma Buffer, size falls back to positionFormat\n (geometryBuffer && geometryBuffer.size) || (positionFormat === 'XY' ? 2 : 3);\n this.buffers = buffers;\n this.normalize = normalize;\n // Handle external logical value\n if (geometryBuffer) {\n assert(data.startIndices); // binary data missing startIndices\n this.getGeometry = this.getGeometryFromBuffer(geometryBuffer);\n if (!normalize) {\n // skip packing and set attribute value directly\n // TODO - avoid mutating user-provided object\n buffers.vertexPositions = geometryBuffer;\n }\n }\n this.geometryBuffer = buffers.vertexPositions;\n if (Array.isArray(dataChanged)) {\n // is partial update\n for (const dataRange of dataChanged) {\n this._rebuildGeometry(dataRange);\n }\n }\n else {\n this._rebuildGeometry();\n }\n }\n updatePartialGeometry({ startRow, endRow }) {\n this._rebuildGeometry({ startRow, endRow });\n }\n getGeometryFromBuffer(geometryBuffer) {\n const value = geometryBuffer.value || geometryBuffer;\n if (!ArrayBuffer.isView(value)) {\n // Cannot read binary geometries\n return null;\n }\n // @ts-ignore (2322) NumericArray not assignable to GeometryT\n return getAccessorFromBuffer(value, {\n size: this.positionSize,\n offset: geometryBuffer.offset,\n stride: geometryBuffer.stride,\n startIndices: this.data.startIndices\n });\n }\n /* Private utility methods */\n _allocate(instanceCount, copy) {\n // allocate attributes\n const { attributes, buffers, _attributeDefs, typedArrayManager } = this;\n for (const name in _attributeDefs) {\n if (name in buffers) {\n // Use external buffer\n typedArrayManager.release(attributes[name]);\n attributes[name] = null;\n }\n else {\n const def = _attributeDefs[name];\n // If dataRange is supplied, this is a partial update.\n // In case we need to reallocate the typed array, it will need the old values copied\n // before performing partial update.\n def.copy = copy;\n attributes[name] = typedArrayManager.allocate(attributes[name], instanceCount, def);\n }\n }\n }\n /**\n * Visit all objects\n * `data` is expected to be an iterable consistent with the base Layer expectation\n */\n _forEachGeometry(visitor, startRow, endRow) {\n const { data, getGeometry } = this;\n const { iterable, objectInfo } = createIterable(data, startRow, endRow);\n for (const object of iterable) {\n objectInfo.index++;\n const geometry = getGeometry ? getGeometry(object, objectInfo) : null;\n visitor(geometry, objectInfo.index);\n }\n }\n /* eslint-disable complexity,max-statements */\n _rebuildGeometry(dataRange) {\n if (!this.data) {\n return;\n }\n let { indexStarts, vertexStarts, instanceCount } = this;\n const { data, geometryBuffer } = this;\n const { startRow = 0, endRow = Infinity } = dataRange || {};\n const normalizedData = {};\n if (!dataRange) {\n // Full update - regenerate buffer layout from scratch\n indexStarts = [0];\n vertexStarts = [0];\n }\n if (this.normalize || !geometryBuffer) {\n this._forEachGeometry((geometry, dataIndex) => {\n const normalizedGeometry = geometry && this.normalizeGeometry(geometry);\n normalizedData[dataIndex] = normalizedGeometry;\n vertexStarts[dataIndex + 1] =\n vertexStarts[dataIndex] +\n (normalizedGeometry ? this.getGeometrySize(normalizedGeometry) : 0);\n }, startRow, endRow);\n // count instances\n instanceCount = vertexStarts[vertexStarts.length - 1];\n }\n else {\n // assume user provided data is already normalized\n vertexStarts = data.startIndices;\n instanceCount = vertexStarts[data.length] || 0;\n if (ArrayBuffer.isView(geometryBuffer)) {\n instanceCount = instanceCount || geometryBuffer.length / this.positionSize;\n }\n else if (geometryBuffer instanceof Buffer) {\n const byteStride = this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.byteLength / byteStride;\n }\n else if (geometryBuffer.buffer) {\n const byteStride = geometryBuffer.stride || this.positionSize * 4;\n instanceCount = instanceCount || geometryBuffer.buffer.byteLength / byteStride;\n }\n else if (geometryBuffer.value) {\n const bufferValue = geometryBuffer.value;\n const elementStride = \n // @ts-ignore (2339) if stride is not specified, will fall through to positionSize\n geometryBuffer.stride / bufferValue.BYTES_PER_ELEMENT || this.positionSize;\n instanceCount = instanceCount || bufferValue.length / elementStride;\n }\n }\n // allocate attributes\n this._allocate(instanceCount, Boolean(dataRange));\n this.indexStarts = indexStarts;\n this.vertexStarts = vertexStarts;\n this.instanceCount = instanceCount;\n // @ts-ignore (2739) context will be populated in the loop\n const context = {};\n this._forEachGeometry((geometry, dataIndex) => {\n const normalizedGeometry = normalizedData[dataIndex] || geometry;\n context.vertexStart = vertexStarts[dataIndex];\n context.indexStart = indexStarts[dataIndex];\n const vertexEnd = dataIndex < vertexStarts.length - 1 ? vertexStarts[dataIndex + 1] : instanceCount;\n context.geometrySize = vertexEnd - vertexStarts[dataIndex];\n context.geometryIndex = dataIndex;\n this.updateGeometryAttributes(normalizedGeometry, context);\n }, startRow, endRow);\n this.vertexCount = indexStarts[indexStarts.length - 1];\n }\n}\n//# sourceMappingURL=tesselator.js.map"],"names":["gouraudMaterial","PHONG_FS","PHONG_VS","PHONG_WGSL","lighting","props","uniforms","x","TRACE_RENDER_LAYERS","CompositeLayer","Layer","layer","context","updateObject","info","object","subLayerId","data","DefaultLayerClass","overridingProps","row","sourceObject","sourceObjectIndex","accessor","objectInfo","i","sublayerProps","opacity","pickable","visible","parameters","getPolygonOffset","highlightedObjectIndex","autoHighlight","highlightColor","coordinateSystem","coordinateOrigin","wrapLongitude","positionFormat","modelMatrix","extensions","fetch","operation","newProps","overridingSublayerProps","overridingSublayerTriggers","sublayerId","propTypes","PROP_TYPES_SYMBOL","subLayerPropTypes","key","propType","extension","passThroughProps","updateParams","forceUpdate","subLayers","shouldUpdate","subLayersList","flatten","debug","Tesselator","opts","attributes","defaultTypedArrayManager","buffers","getGeometry","geometryBuffer","dataChanged","normalize","assert","dataRange","startRow","endRow","value","getAccessorFromBuffer","instanceCount","copy","_attributeDefs","typedArrayManager","name","def","visitor","iterable","createIterable","geometry","indexStarts","vertexStarts","normalizedData","dataIndex","normalizedGeometry","Buffer","byteStride","bufferValue","elementStride","vertexEnd"],"mappings":"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","x_google_ignoreList":[0,1,2]}