@deck.gl/geo-layers 9.0.0-beta.2 → 9.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/dist/dist.dev.js +2798 -7198
  2. package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
  3. package/{typed → dist}/geohash-layer/geohash-layer.d.ts +1 -1
  4. package/dist/geohash-layer/geohash-layer.d.ts.map +1 -0
  5. package/dist/geohash-layer/geohash-layer.js +19 -0
  6. package/dist/geohash-layer/geohash-utils.js +50 -0
  7. package/dist/great-circle-layer/great-circle-layer.js +12 -0
  8. package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +1 -1
  9. package/dist/h3-layers/h3-cluster-layer.d.ts.map +1 -0
  10. package/dist/h3-layers/h3-cluster-layer.js +47 -0
  11. package/dist/h3-layers/h3-hexagon-layer.js +204 -0
  12. package/dist/h3-layers/h3-utils.js +56 -0
  13. package/dist/index.cjs +3202 -0
  14. package/dist/index.cjs.map +7 -0
  15. package/dist/index.d.ts +31 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +36 -0
  18. package/dist/{esm/mesh-layer → mesh-layer}/mesh-layer-fragment.glsl.js +0 -1
  19. package/dist/{esm/mesh-layer → mesh-layer}/mesh-layer-vertex.glsl.js +0 -1
  20. package/dist/mesh-layer/mesh-layer.js +129 -0
  21. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
  22. package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
  23. package/dist/mvt-layer/coordinate-transform.js +41 -0
  24. package/dist/mvt-layer/find-index-binary.d.ts +11 -0
  25. package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
  26. package/dist/mvt-layer/find-index-binary.js +96 -0
  27. package/{typed → dist}/mvt-layer/mvt-layer.d.ts +8 -6
  28. package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
  29. package/dist/mvt-layer/mvt-layer.js +310 -0
  30. package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +1 -1
  31. package/dist/quadkey-layer/quadkey-layer.d.ts.map +1 -0
  32. package/dist/quadkey-layer/quadkey-layer.js +22 -0
  33. package/dist/quadkey-layer/quadkey-utils.js +26 -0
  34. package/dist/s2-layer/s2-geometry.js +123 -0
  35. package/{typed → dist}/s2-layer/s2-layer.d.ts +1 -1
  36. package/dist/s2-layer/s2-layer.d.ts.map +1 -0
  37. package/dist/s2-layer/s2-layer.js +38 -0
  38. package/dist/s2-layer/s2-utils.js +87 -0
  39. package/{typed → dist}/terrain-layer/terrain-layer.d.ts +4 -4
  40. package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
  41. package/dist/terrain-layer/terrain-layer.js +233 -0
  42. package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
  43. package/{typed → dist}/tile-layer/tile-layer.d.ts +3 -3
  44. package/dist/tile-layer/tile-layer.d.ts.map +1 -0
  45. package/dist/tile-layer/tile-layer.js +204 -0
  46. package/dist/tileset-2d/index.d.ts +7 -0
  47. package/dist/tileset-2d/index.d.ts.map +1 -0
  48. package/dist/tileset-2d/index.js +4 -0
  49. package/dist/tileset-2d/memoize.js +41 -0
  50. package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +3 -2
  51. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  52. package/dist/tileset-2d/tile-2d-header.js +135 -0
  53. package/dist/tileset-2d/tile-2d-traversal.d.ts +4 -0
  54. package/dist/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  55. package/dist/tileset-2d/tile-2d-traversal.js +182 -0
  56. package/{typed → dist}/tileset-2d/tileset-2d.d.ts +7 -7
  57. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  58. package/dist/tileset-2d/tileset-2d.js +456 -0
  59. package/dist/tileset-2d/types.js +1 -0
  60. package/{typed → dist}/tileset-2d/utils.d.ts +3 -3
  61. package/dist/tileset-2d/utils.d.ts.map +1 -0
  62. package/dist/tileset-2d/utils.js +234 -0
  63. package/dist/trips-layer/trips-layer.js +93 -0
  64. package/dist/wms-layer/utils.js +13 -0
  65. package/dist/wms-layer/wms-layer.js +192 -0
  66. package/dist.min.js +27 -162
  67. package/package.json +32 -18
  68. package/src/index.ts +5 -5
  69. package/src/mvt-layer/coordinate-transform.ts +1 -1
  70. package/src/mvt-layer/find-index-binary.ts +5 -9
  71. package/src/mvt-layer/mvt-layer.ts +25 -15
  72. package/src/terrain-layer/terrain-layer.ts +13 -3
  73. package/src/tile-layer/tile-layer.ts +8 -9
  74. package/src/tileset-2d/tile-2d-header.ts +2 -1
  75. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  76. package/src/tileset-2d/tileset-2d.ts +7 -3
  77. package/src/tileset-2d/utils.ts +2 -2
  78. package/src/wms-layer/wms-layer.ts +1 -1
  79. package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
  80. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
  81. package/dist/es5/geohash-layer/geohash-layer.js +0 -67
  82. package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
  83. package/dist/es5/geohash-layer/geohash-utils.js +0 -77
  84. package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
  85. package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
  86. package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
  87. package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
  88. package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
  89. package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
  90. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
  91. package/dist/es5/h3-layers/h3-utils.js +0 -111
  92. package/dist/es5/h3-layers/h3-utils.js.map +0 -1
  93. package/dist/es5/index.js +0 -132
  94. package/dist/es5/index.js.map +0 -1
  95. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
  96. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  97. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
  98. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  99. package/dist/es5/mesh-layer/mesh-layer.js +0 -217
  100. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  101. package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
  102. package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
  103. package/dist/es5/mvt-layer/find-index-binary.js +0 -127
  104. package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
  105. package/dist/es5/mvt-layer/mvt-layer.js +0 -533
  106. package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
  107. package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
  108. package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
  109. package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
  110. package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
  111. package/dist/es5/s2-layer/s2-geometry.js +0 -158
  112. package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
  113. package/dist/es5/s2-layer/s2-layer.js +0 -67
  114. package/dist/es5/s2-layer/s2-layer.js.map +0 -1
  115. package/dist/es5/s2-layer/s2-utils.js +0 -80
  116. package/dist/es5/s2-layer/s2-utils.js.map +0 -1
  117. package/dist/es5/terrain-layer/terrain-layer.js +0 -347
  118. package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
  119. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
  120. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  121. package/dist/es5/tile-layer/tile-layer.js +0 -363
  122. package/dist/es5/tile-layer/tile-layer.js.map +0 -1
  123. package/dist/es5/tileset-2d/index.js +0 -66
  124. package/dist/es5/tileset-2d/index.js.map +0 -1
  125. package/dist/es5/tileset-2d/memoize.js +0 -47
  126. package/dist/es5/tileset-2d/memoize.js.map +0 -1
  127. package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
  128. package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
  129. package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
  130. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
  131. package/dist/es5/tileset-2d/tileset-2d.js +0 -757
  132. package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
  133. package/dist/es5/tileset-2d/types.js +0 -2
  134. package/dist/es5/tileset-2d/types.js.map +0 -1
  135. package/dist/es5/tileset-2d/utils.js +0 -302
  136. package/dist/es5/tileset-2d/utils.js.map +0 -1
  137. package/dist/es5/trips-layer/trips-layer.js +0 -114
  138. package/dist/es5/trips-layer/trips-layer.js.map +0 -1
  139. package/dist/es5/wms-layer/utils.js +0 -18
  140. package/dist/es5/wms-layer/utils.js.map +0 -1
  141. package/dist/es5/wms-layer/wms-layer.js +0 -376
  142. package/dist/es5/wms-layer/wms-layer.js.map +0 -1
  143. package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
  144. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
  145. package/dist/esm/geohash-layer/geohash-layer.js +0 -26
  146. package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
  147. package/dist/esm/geohash-layer/geohash-utils.js +0 -56
  148. package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
  149. package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
  150. package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
  151. package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
  152. package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
  153. package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
  154. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
  155. package/dist/esm/h3-layers/h3-utils.js +0 -54
  156. package/dist/esm/h3-layers/h3-utils.js.map +0 -1
  157. package/dist/esm/index.js +0 -17
  158. package/dist/esm/index.js.map +0 -1
  159. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
  160. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
  161. package/dist/esm/mesh-layer/mesh-layer.js +0 -178
  162. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  163. package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
  164. package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
  165. package/dist/esm/mvt-layer/find-index-binary.js +0 -99
  166. package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
  167. package/dist/esm/mvt-layer/mvt-layer.js +0 -427
  168. package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
  169. package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
  170. package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
  171. package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
  172. package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
  173. package/dist/esm/s2-layer/s2-geometry.js +0 -126
  174. package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
  175. package/dist/esm/s2-layer/s2-layer.js +0 -26
  176. package/dist/esm/s2-layer/s2-layer.js.map +0 -1
  177. package/dist/esm/s2-layer/s2-utils.js +0 -69
  178. package/dist/esm/s2-layer/s2-utils.js.map +0 -1
  179. package/dist/esm/terrain-layer/terrain-layer.js +0 -292
  180. package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
  181. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
  182. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  183. package/dist/esm/tile-layer/tile-layer.js +0 -299
  184. package/dist/esm/tile-layer/tile-layer.js.map +0 -1
  185. package/dist/esm/tileset-2d/index.js +0 -4
  186. package/dist/esm/tileset-2d/index.js.map +0 -1
  187. package/dist/esm/tileset-2d/memoize.js +0 -40
  188. package/dist/esm/tileset-2d/memoize.js.map +0 -1
  189. package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
  190. package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
  191. package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
  192. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
  193. package/dist/esm/tileset-2d/tileset-2d.js +0 -509
  194. package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
  195. package/dist/esm/tileset-2d/types.js +0 -2
  196. package/dist/esm/tileset-2d/types.js.map +0 -1
  197. package/dist/esm/tileset-2d/utils.js +0 -233
  198. package/dist/esm/tileset-2d/utils.js.map +0 -1
  199. package/dist/esm/trips-layer/trips-layer.js +0 -88
  200. package/dist/esm/trips-layer/trips-layer.js.map +0 -1
  201. package/dist/esm/wms-layer/utils.js +0 -9
  202. package/dist/esm/wms-layer/utils.js.map +0 -1
  203. package/dist/esm/wms-layer/wms-layer.js +0 -231
  204. package/dist/esm/wms-layer/wms-layer.js.map +0 -1
  205. package/typed/geohash-layer/geohash-layer.d.ts.map +0 -1
  206. package/typed/h3-layers/h3-cluster-layer.d.ts.map +0 -1
  207. package/typed/index.d.ts +0 -31
  208. package/typed/index.d.ts.map +0 -1
  209. package/typed/mvt-layer/find-index-binary.d.ts +0 -12
  210. package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
  211. package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
  212. package/typed/quadkey-layer/quadkey-layer.d.ts.map +0 -1
  213. package/typed/s2-layer/s2-layer.d.ts.map +0 -1
  214. package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
  215. package/typed/tile-layer/tile-layer.d.ts.map +0 -1
  216. package/typed/tileset-2d/index.d.ts +0 -7
  217. package/typed/tileset-2d/index.d.ts.map +0 -1
  218. package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
  219. package/typed/tileset-2d/tile-2d-traversal.d.ts +0 -4
  220. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +0 -1
  221. package/typed/tileset-2d/tileset-2d.d.ts.map +0 -1
  222. package/typed/tileset-2d/utils.d.ts.map +0 -1
  223. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
  224. /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
  225. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
  226. /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
  227. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
  228. /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
  229. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
  230. /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
  231. /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
  232. /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
  233. /package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -0
  234. /package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +0 -0
  235. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
  236. /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
  237. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
  238. /package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +0 -0
  239. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
  240. /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
  241. /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
  242. /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
  243. /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
  244. /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
  245. /package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +0 -0
  246. /package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +0 -0
  247. /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
  248. /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
  249. /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
  250. /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
  251. /package/{typed → dist}/trips-layer/trips-layer.d.ts +0 -0
  252. /package/{typed → dist}/trips-layer/trips-layer.d.ts.map +0 -0
  253. /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
  254. /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
  255. /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
  256. /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
@@ -0,0 +1,302 @@
1
+ import { Geometry } from '@luma.gl/engine';
2
+ import { CompositeLayer, COORDINATE_SYSTEM, log } from '@deck.gl/core';
3
+ import { PointCloudLayer } from '@deck.gl/layers';
4
+ import { ScenegraphLayer } from '@deck.gl/mesh-layers';
5
+ import { default as MeshLayer } from "../mesh-layer/mesh-layer.js";
6
+ import { load } from '@loaders.gl/core';
7
+ import { Tileset3D, TILE_TYPE } from '@loaders.gl/tiles';
8
+ import { Tiles3DLoader } from '@loaders.gl/3d-tiles';
9
+ const SINGLE_DATA = [0];
10
+ const defaultProps = {
11
+ getPointColor: { type: 'accessor', value: [0, 0, 0, 255] },
12
+ pointSize: 1.0,
13
+ // Disable async data loading (handling it in _loadTileSet)
14
+ data: '',
15
+ loader: Tiles3DLoader,
16
+ onTilesetLoad: { type: 'function', value: tileset3d => { } },
17
+ onTileLoad: { type: 'function', value: tileHeader => { } },
18
+ onTileUnload: { type: 'function', value: tileHeader => { } },
19
+ onTileError: { type: 'function', value: (tile, message, url) => { } },
20
+ _getMeshColor: { type: 'function', value: tileHeader => [255, 255, 255] }
21
+ };
22
+ /** Render 3d tiles data formatted according to the [3D Tiles Specification](https://www.opengeospatial.org/standards/3DTiles) and [`ESRI I3S`](https://github.com/Esri/i3s-spec) */
23
+ export default class Tile3DLayer extends CompositeLayer {
24
+ static { this.defaultProps = defaultProps; }
25
+ static { this.layerName = 'Tile3DLayer'; }
26
+ initializeState() {
27
+ if ('onTileLoadFail' in this.props) {
28
+ log.removed('onTileLoadFail', 'onTileError')();
29
+ }
30
+ // prop verification
31
+ this.state = {
32
+ layerMap: {},
33
+ tileset3d: null,
34
+ activeViewports: {},
35
+ lastUpdatedViewports: null
36
+ };
37
+ }
38
+ get isLoaded() {
39
+ return Boolean(this.state?.tileset3d?.isLoaded() && super.isLoaded);
40
+ }
41
+ shouldUpdateState({ changeFlags }) {
42
+ return changeFlags.somethingChanged;
43
+ }
44
+ updateState({ props, oldProps, changeFlags }) {
45
+ if (props.data && props.data !== oldProps.data) {
46
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
47
+ this._loadTileset(props.data);
48
+ }
49
+ if (changeFlags.viewportChanged) {
50
+ const { activeViewports } = this.state;
51
+ const viewportsNumber = Object.keys(activeViewports).length;
52
+ if (viewportsNumber) {
53
+ this._updateTileset(activeViewports);
54
+ this.state.lastUpdatedViewports = activeViewports;
55
+ this.state.activeViewports = {};
56
+ }
57
+ }
58
+ if (changeFlags.propsChanged) {
59
+ const { layerMap } = this.state;
60
+ for (const key in layerMap) {
61
+ layerMap[key].needsUpdate = true;
62
+ }
63
+ }
64
+ }
65
+ activateViewport(viewport) {
66
+ const { activeViewports, lastUpdatedViewports } = this.state;
67
+ this.internalState.viewport = viewport;
68
+ activeViewports[viewport.id] = viewport;
69
+ const lastViewport = lastUpdatedViewports?.[viewport.id];
70
+ if (!lastViewport || !viewport.equals(lastViewport)) {
71
+ this.setChangeFlags({ viewportChanged: true });
72
+ this.setNeedsUpdate();
73
+ }
74
+ }
75
+ getPickingInfo({ info, sourceLayer }) {
76
+ const sourceTile = sourceLayer && sourceLayer.props.tile;
77
+ if (info.picked) {
78
+ info.object = sourceTile;
79
+ }
80
+ info.sourceTile = sourceTile;
81
+ return info;
82
+ }
83
+ filterSubLayer({ layer, viewport }) {
84
+ // All sublayers will have a tile prop
85
+ const { tile } = layer.props;
86
+ const { id: viewportId } = viewport;
87
+ return tile.selected && tile.viewportIds.includes(viewportId);
88
+ }
89
+ _updateAutoHighlight(info) {
90
+ const sourceTile = info.sourceTile;
91
+ const layerCache = this.state.layerMap[sourceTile?.id];
92
+ if (layerCache && layerCache.layer) {
93
+ layerCache.layer.updateAutoHighlight(info);
94
+ }
95
+ }
96
+ async _loadTileset(tilesetUrl) {
97
+ const { loadOptions = {} } = this.props;
98
+ // TODO: deprecate `loader` in v9.0
99
+ // @ts-ignore
100
+ const loaders = this.props.loader || this.props.loaders;
101
+ const loader = Array.isArray(loaders) ? loaders[0] : loaders;
102
+ const options = { loadOptions: { ...loadOptions } };
103
+ let actualTilesetUrl = tilesetUrl;
104
+ if (loader.preload) {
105
+ const preloadOptions = await loader.preload(tilesetUrl, loadOptions);
106
+ if (preloadOptions.url) {
107
+ actualTilesetUrl = preloadOptions.url;
108
+ }
109
+ if (preloadOptions.headers) {
110
+ options.loadOptions.fetch = {
111
+ ...options.loadOptions.fetch,
112
+ headers: preloadOptions.headers
113
+ };
114
+ }
115
+ Object.assign(options, preloadOptions);
116
+ }
117
+ const tilesetJson = await load(actualTilesetUrl, loader, options.loadOptions);
118
+ const tileset3d = new Tileset3D(tilesetJson, {
119
+ onTileLoad: this._onTileLoad.bind(this),
120
+ onTileUnload: this._onTileUnload.bind(this),
121
+ onTileError: this.props.onTileError,
122
+ ...options
123
+ });
124
+ this.setState({
125
+ tileset3d,
126
+ layerMap: {}
127
+ });
128
+ this._updateTileset(this.state.activeViewports);
129
+ this.props.onTilesetLoad(tileset3d);
130
+ }
131
+ _onTileLoad(tileHeader) {
132
+ const { lastUpdatedViewports } = this.state;
133
+ this.props.onTileLoad(tileHeader);
134
+ this._updateTileset(lastUpdatedViewports);
135
+ this.setNeedsUpdate();
136
+ }
137
+ _onTileUnload(tileHeader) {
138
+ // Was cleaned up from tileset cache. We no longer need to track it.
139
+ delete this.state.layerMap[tileHeader.id];
140
+ this.props.onTileUnload(tileHeader);
141
+ }
142
+ _updateTileset(viewports) {
143
+ if (!viewports) {
144
+ return;
145
+ }
146
+ const { tileset3d } = this.state;
147
+ const { timeline } = this.context;
148
+ const viewportsNumber = Object.keys(viewports).length;
149
+ if (!timeline || !viewportsNumber || !tileset3d) {
150
+ return;
151
+ }
152
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
153
+ tileset3d.selectTiles(Object.values(viewports)).then(frameNumber => {
154
+ const tilesetChanged = this.state.frameNumber !== frameNumber;
155
+ if (tilesetChanged) {
156
+ this.setState({ frameNumber });
157
+ }
158
+ });
159
+ }
160
+ _getSubLayer(tileHeader, oldLayer) {
161
+ if (!tileHeader.content) {
162
+ return null;
163
+ }
164
+ switch (tileHeader.type) {
165
+ case TILE_TYPE.POINTCLOUD:
166
+ return this._makePointCloudLayer(tileHeader, oldLayer);
167
+ case TILE_TYPE.SCENEGRAPH:
168
+ return this._make3DModelLayer(tileHeader);
169
+ case TILE_TYPE.MESH:
170
+ return this._makeSimpleMeshLayer(tileHeader, oldLayer);
171
+ default:
172
+ throw new Error(`Tile3DLayer: Failed to render layer of type ${tileHeader.content.type}`);
173
+ }
174
+ }
175
+ _makePointCloudLayer(tileHeader, oldLayer) {
176
+ const { attributes, pointCount, constantRGBA, cartographicOrigin, modelMatrix } = tileHeader.content;
177
+ const { positions, normals, colors } = attributes;
178
+ if (!positions) {
179
+ return null;
180
+ }
181
+ const data = (oldLayer && oldLayer.props.data) || {
182
+ header: {
183
+ vertexCount: pointCount
184
+ },
185
+ attributes: {
186
+ POSITION: positions,
187
+ NORMAL: normals,
188
+ COLOR_0: colors
189
+ }
190
+ };
191
+ const { pointSize, getPointColor } = this.props;
192
+ const SubLayerClass = this.getSubLayerClass('pointcloud', PointCloudLayer);
193
+ return new SubLayerClass({
194
+ pointSize
195
+ }, this.getSubLayerProps({
196
+ id: 'pointcloud'
197
+ }), {
198
+ id: `${this.id}-pointcloud-${tileHeader.id}`,
199
+ tile: tileHeader,
200
+ data,
201
+ coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
202
+ coordinateOrigin: cartographicOrigin,
203
+ modelMatrix,
204
+ getColor: constantRGBA || getPointColor,
205
+ _offset: 0
206
+ });
207
+ }
208
+ _make3DModelLayer(tileHeader) {
209
+ const { gltf, instances, cartographicOrigin, modelMatrix } = tileHeader.content;
210
+ const SubLayerClass = this.getSubLayerClass('scenegraph', ScenegraphLayer);
211
+ return new SubLayerClass({
212
+ _lighting: 'pbr'
213
+ }, this.getSubLayerProps({
214
+ id: 'scenegraph'
215
+ }), {
216
+ id: `${this.id}-scenegraph-${tileHeader.id}`,
217
+ tile: tileHeader,
218
+ data: instances || SINGLE_DATA,
219
+ scenegraph: gltf,
220
+ coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
221
+ coordinateOrigin: cartographicOrigin,
222
+ modelMatrix,
223
+ getTransformMatrix: instance => instance.modelMatrix,
224
+ getPosition: [0, 0, 0],
225
+ _offset: 0
226
+ });
227
+ }
228
+ _makeSimpleMeshLayer(tileHeader, oldLayer) {
229
+ const content = tileHeader.content;
230
+ const { attributes, indices, modelMatrix, cartographicOrigin, coordinateSystem = COORDINATE_SYSTEM.METER_OFFSETS, material, featureIds } = content;
231
+ const { _getMeshColor } = this.props;
232
+ const geometry = (oldLayer && oldLayer.props.mesh) ||
233
+ new Geometry({
234
+ topology: 'triangle-list',
235
+ attributes: getMeshGeometry(attributes),
236
+ indices
237
+ });
238
+ const SubLayerClass = this.getSubLayerClass('mesh', MeshLayer);
239
+ return new SubLayerClass(this.getSubLayerProps({
240
+ id: 'mesh'
241
+ }), {
242
+ id: `${this.id}-mesh-${tileHeader.id}`,
243
+ tile: tileHeader,
244
+ mesh: geometry,
245
+ data: SINGLE_DATA,
246
+ getColor: _getMeshColor(tileHeader),
247
+ pbrMaterial: material,
248
+ modelMatrix,
249
+ coordinateOrigin: cartographicOrigin,
250
+ coordinateSystem,
251
+ featureIds,
252
+ _offset: 0
253
+ });
254
+ }
255
+ renderLayers() {
256
+ const { tileset3d, layerMap } = this.state;
257
+ if (!tileset3d) {
258
+ return null;
259
+ }
260
+ // loaders.gl doesn't provide a type for tileset3d.tiles
261
+ return tileset3d.tiles
262
+ .map(tile => {
263
+ const layerCache = (layerMap[tile.id] = layerMap[tile.id] || { tile });
264
+ let { layer } = layerCache;
265
+ if (tile.selected) {
266
+ // render selected tiles
267
+ if (!layer) {
268
+ // create layer
269
+ layer = this._getSubLayer(tile);
270
+ }
271
+ else if (layerCache.needsUpdate) {
272
+ // props have changed, rerender layer
273
+ layer = this._getSubLayer(tile, layer);
274
+ layerCache.needsUpdate = false;
275
+ }
276
+ }
277
+ layerCache.layer = layer;
278
+ return layer;
279
+ })
280
+ .filter(Boolean);
281
+ }
282
+ }
283
+ function getMeshGeometry(contentAttributes) {
284
+ const attributes = {};
285
+ attributes.positions = {
286
+ ...contentAttributes.positions,
287
+ value: new Float32Array(contentAttributes.positions.value)
288
+ };
289
+ if (contentAttributes.normals) {
290
+ attributes.normals = contentAttributes.normals;
291
+ }
292
+ if (contentAttributes.texCoords) {
293
+ attributes.texCoords = contentAttributes.texCoords;
294
+ }
295
+ if (contentAttributes.colors) {
296
+ attributes.colors = contentAttributes.colors;
297
+ }
298
+ if (contentAttributes.uvRegions) {
299
+ attributes.uvRegions = contentAttributes.uvRegions;
300
+ }
301
+ return attributes;
302
+ }
@@ -1,8 +1,8 @@
1
1
  import { CompositeLayer, CompositeLayerProps, Layer, LayerProps, UpdateParameters, PickingInfo, GetPickingInfoParams, DefaultProps, FilterContext } from '@deck.gl/core';
2
2
  import { LayersList } from '@deck.gl/core';
3
- import type { TileLoadProps, ZRange } from '../tileset-2d';
4
- import { Tileset2D, Tile2DHeader, RefinementStrategy, Tileset2DProps } from '../tileset-2d';
5
- import { URLTemplate } from '../tileset-2d';
3
+ import type { TileLoadProps, ZRange } from "../tileset-2d/index.js";
4
+ import { Tileset2D, Tile2DHeader, RefinementStrategy, Tileset2DProps } from "../tileset-2d/index.js";
5
+ import { URLTemplate } from "../tileset-2d/index.js";
6
6
  /** All props supported by the TileLayer */
7
7
  export type TileLayerProps<DataT = unknown> = CompositeLayerProps & _TileLayerProps<DataT>;
8
8
  /** Props added by the TileLayer */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-layer.d.ts","sourceRoot":"","sources":["../../src/tile-layer/tile-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ import { CompositeLayer, _flatten as flatten } from '@deck.gl/core';
2
+ import { GeoJsonLayer } from '@deck.gl/layers';
3
+ import { Tileset2D, STRATEGY_DEFAULT } from "../tileset-2d/index.js";
4
+ import { urlType, getURLFromTemplate } from "../tileset-2d/index.js";
5
+ const defaultProps = {
6
+ TilesetClass: Tileset2D,
7
+ data: { type: 'data', value: [] },
8
+ dataComparator: urlType.equal,
9
+ renderSubLayers: { type: 'function', value: (props) => new GeoJsonLayer(props) },
10
+ getTileData: { type: 'function', optional: true, value: null },
11
+ // TODO - change to onViewportLoad to align with Tile3DLayer
12
+ onViewportLoad: { type: 'function', optional: true, value: null },
13
+ onTileLoad: { type: 'function', value: tile => { } },
14
+ onTileUnload: { type: 'function', value: tile => { } },
15
+ // eslint-disable-next-line
16
+ onTileError: { type: 'function', value: err => console.error(err) },
17
+ extent: { type: 'array', optional: true, value: null, compare: true },
18
+ tileSize: 512,
19
+ maxZoom: null,
20
+ minZoom: 0,
21
+ maxCacheSize: null,
22
+ maxCacheByteSize: null,
23
+ refinementStrategy: STRATEGY_DEFAULT,
24
+ zRange: null,
25
+ maxRequests: 6,
26
+ zoomOffset: 0
27
+ };
28
+ /**
29
+ * The TileLayer is a composite layer that makes it possible to visualize very large datasets.
30
+ *
31
+ * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.
32
+ */
33
+ export default class TileLayer extends CompositeLayer {
34
+ static { this.defaultProps = defaultProps; }
35
+ static { this.layerName = 'TileLayer'; }
36
+ initializeState() {
37
+ this.state = {
38
+ tileset: null,
39
+ isLoaded: false
40
+ };
41
+ }
42
+ finalizeState() {
43
+ this.state?.tileset?.finalize();
44
+ }
45
+ get isLoaded() {
46
+ return Boolean(this.state?.tileset?.selectedTiles?.every(tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)));
47
+ }
48
+ shouldUpdateState({ changeFlags }) {
49
+ return changeFlags.somethingChanged;
50
+ }
51
+ updateState({ changeFlags }) {
52
+ let { tileset } = this.state;
53
+ const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
54
+ const dataChanged = changeFlags.dataChanged ||
55
+ (changeFlags.updateTriggersChanged &&
56
+ (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));
57
+ if (!tileset) {
58
+ tileset = new this.props.TilesetClass(this._getTilesetOptions());
59
+ this.setState({ tileset });
60
+ }
61
+ else if (propsChanged) {
62
+ tileset.setOptions(this._getTilesetOptions());
63
+ if (dataChanged) {
64
+ // reload all tiles
65
+ // use cached layers until new content is loaded
66
+ tileset.reloadAll();
67
+ }
68
+ else {
69
+ // some render options changed, regenerate sub layers now
70
+ tileset.tiles.forEach(tile => {
71
+ tile.layers = null;
72
+ });
73
+ }
74
+ }
75
+ this._updateTileset();
76
+ }
77
+ _getTilesetOptions() {
78
+ const { tileSize, maxCacheSize, maxCacheByteSize, refinementStrategy, extent, maxZoom, minZoom, maxRequests, zoomOffset } = this.props;
79
+ return {
80
+ maxCacheSize,
81
+ maxCacheByteSize,
82
+ maxZoom,
83
+ minZoom,
84
+ tileSize,
85
+ refinementStrategy,
86
+ extent,
87
+ maxRequests,
88
+ zoomOffset,
89
+ getTileData: this.getTileData.bind(this),
90
+ onTileLoad: this._onTileLoad.bind(this),
91
+ onTileError: this._onTileError.bind(this),
92
+ onTileUnload: this._onTileUnload.bind(this)
93
+ };
94
+ }
95
+ _updateTileset() {
96
+ const tileset = this.state.tileset;
97
+ const { zRange, modelMatrix } = this.props;
98
+ const frameNumber = tileset.update(this.context.viewport, { zRange, modelMatrix });
99
+ const { isLoaded } = tileset;
100
+ const loadingStateChanged = this.state.isLoaded !== isLoaded;
101
+ const tilesetChanged = this.state.frameNumber !== frameNumber;
102
+ if (isLoaded && (loadingStateChanged || tilesetChanged)) {
103
+ this._onViewportLoad();
104
+ }
105
+ if (tilesetChanged) {
106
+ // Save the tileset frame number - trigger a rerender
107
+ this.setState({ frameNumber });
108
+ }
109
+ // Save the loaded state - should not trigger a rerender
110
+ this.state.isLoaded = isLoaded;
111
+ }
112
+ _onViewportLoad() {
113
+ const { tileset } = this.state;
114
+ const { onViewportLoad } = this.props;
115
+ if (onViewportLoad) {
116
+ // This method can only be called when tileset is defined and updated
117
+ onViewportLoad(tileset.selectedTiles);
118
+ }
119
+ }
120
+ _onTileLoad(tile) {
121
+ this.props.onTileLoad(tile);
122
+ tile.layers = null;
123
+ this.setNeedsUpdate();
124
+ }
125
+ _onTileError(error, tile) {
126
+ this.props.onTileError(error);
127
+ tile.layers = null;
128
+ this.setNeedsUpdate();
129
+ }
130
+ _onTileUnload(tile) {
131
+ this.props.onTileUnload(tile);
132
+ }
133
+ // Methods for subclass to override
134
+ getTileData(tile) {
135
+ const { data, getTileData, fetch } = this.props;
136
+ const { signal } = tile;
137
+ tile.url =
138
+ typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;
139
+ if (getTileData) {
140
+ return getTileData(tile);
141
+ }
142
+ if (fetch && tile.url) {
143
+ return fetch(tile.url, { propName: 'data', layer: this, signal });
144
+ }
145
+ return null;
146
+ }
147
+ renderSubLayers(props) {
148
+ return this.props.renderSubLayers(props);
149
+ }
150
+ getSubLayerPropsByTile(tile) {
151
+ return null;
152
+ }
153
+ getPickingInfo({ info, sourceLayer }) {
154
+ const sourceTile = sourceLayer.props.tile;
155
+ if (info.picked) {
156
+ info.tile = sourceTile;
157
+ }
158
+ info.sourceTile = sourceTile;
159
+ return info;
160
+ }
161
+ _updateAutoHighlight(info) {
162
+ const sourceTile = info.sourceTile;
163
+ if (sourceTile && sourceTile.layers) {
164
+ for (const layer of sourceTile.layers) {
165
+ layer.updateAutoHighlight(info);
166
+ }
167
+ }
168
+ }
169
+ renderLayers() {
170
+ return this.state.tileset.tiles.map((tile) => {
171
+ const subLayerProps = this.getSubLayerPropsByTile(tile);
172
+ // cache the rendered layer in the tile
173
+ if (!tile.isLoaded && !tile.content) {
174
+ // nothing to show
175
+ }
176
+ else if (!tile.layers) {
177
+ const layers = this.renderSubLayers({
178
+ ...this.props,
179
+ ...this.getSubLayerProps({
180
+ id: tile.id,
181
+ updateTriggers: this.props.updateTriggers
182
+ }),
183
+ data: tile.content,
184
+ _offset: 0,
185
+ tile
186
+ });
187
+ tile.layers = flatten(layers, Boolean).map(layer => layer.clone({
188
+ tile,
189
+ ...subLayerProps
190
+ }));
191
+ }
192
+ else if (subLayerProps &&
193
+ tile.layers[0] &&
194
+ Object.keys(subLayerProps).some(propName => tile.layers[0].props[propName] !== subLayerProps[propName])) {
195
+ tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
196
+ }
197
+ return tile.layers;
198
+ });
199
+ }
200
+ filterSubLayer({ layer, cullRect }) {
201
+ const { tile } = layer.props;
202
+ return this.state.tileset.isTileVisible(tile, cullRect);
203
+ }
204
+ }
@@ -0,0 +1,7 @@
1
+ export type { TileLoadProps, Bounds, ZRange, GeoBoundingBox, NonGeoBoundingBox, TileBoundingBox } from "./types.js";
2
+ export type { Tileset2DProps, RefinementStrategy } from "./tileset-2d.js";
3
+ export { Tileset2D, STRATEGY_DEFAULT } from "./tileset-2d.js";
4
+ export { Tile2DHeader } from "./tile-2d-header.js";
5
+ export type { URLTemplate } from "./utils.js";
6
+ export { isGeoBoundingBox, isURLTemplate, urlType, getURLFromTemplate, getTileIndices, tileToBoundingBox } from "./utils.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,aAAa,EACb,MAAM,EACN,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,mBAAgB;AAEjB,YAAY,EAAC,cAAc,EAAE,kBAAkB,EAAC,wBAAqB;AACrE,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAC,wBAAqB;AAEzD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAE9C,YAAY,EAAC,WAAW,EAAC,mBAAgB;AACzC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EAClB,mBAAgB"}
@@ -0,0 +1,4 @@
1
+ // deck.gl, MIT license
2
+ export { Tileset2D, STRATEGY_DEFAULT } from "./tileset-2d.js";
3
+ export { Tile2DHeader } from "./tile-2d-header.js";
4
+ export { isGeoBoundingBox, isURLTemplate, urlType, getURLFromTemplate, getTileIndices, tileToBoundingBox } from "./utils.js";
@@ -0,0 +1,41 @@
1
+ // deck.gl, MIT license
2
+ // @note - this is a duplicate of the deck.gl core export (because Tileset2D should be deck.gl independent)
3
+ /**
4
+ * Speed up consecutive function calls by caching the result of calls with identical input
5
+ * https://en.wikipedia.org/wiki/Memoization
6
+ * @param compute - the function to be memoized
7
+ */
8
+ export function memoize(compute) {
9
+ let cachedArgs = {};
10
+ let cachedResult;
11
+ return (args) => {
12
+ for (const key in args) {
13
+ if (!isEqual(args[key], cachedArgs[key])) {
14
+ cachedResult = compute(args);
15
+ cachedArgs = args;
16
+ break;
17
+ }
18
+ }
19
+ return cachedResult;
20
+ };
21
+ }
22
+ function isEqual(a, b) {
23
+ if (a === b) {
24
+ return true;
25
+ }
26
+ if (Array.isArray(a)) {
27
+ // Special treatment for arrays: compare 1-level deep
28
+ // This is to support equality of matrix/coordinate props
29
+ const len = a.length;
30
+ if (!b || b.length !== len) {
31
+ return false;
32
+ }
33
+ for (let i = 0; i < len; i++) {
34
+ if (a[i] !== b[i]) {
35
+ return false;
36
+ }
37
+ }
38
+ return true;
39
+ }
40
+ return false;
41
+ }
@@ -1,5 +1,6 @@
1
1
  import { RequestScheduler } from '@loaders.gl/loader-utils';
2
- import { TileBoundingBox, TileIndex, TileLoadProps } from './types';
2
+ import { TileBoundingBox, TileIndex, TileLoadProps } from "./types.js";
3
+ import type { Layer } from '@deck.gl/core';
3
4
  export type TileLoadDataProps<DataT = any> = {
4
5
  requestScheduler: RequestScheduler;
5
6
  getData: (props: TileLoadProps) => Promise<DataT>;
@@ -14,7 +15,7 @@ export declare class Tile2DHeader<DataT = any> {
14
15
  children: Tile2DHeader[] | null;
15
16
  content: DataT | null;
16
17
  state?: number;
17
- layers?: any[] | null;
18
+ layers?: Layer[] | null;
18
19
  id: string;
19
20
  zoom: number;
20
21
  userData?: Record<string, any>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-2d-header.d.ts","sourceRoot":"","sources":["../../src/tileset-2d/tile-2d-header.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,aAAa,EAAC,mBAAgB;AAClE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,GAAG,IAAI;IAC3C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,qBAAa,YAAY,CAAC,KAAK,GAAG,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAExB,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,EAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,KAAK,CAAmB;gBAEpB,KAAK,EAAE,SAAS;IAiB5B,4CAA4C;IAC5C,IAAI,IAAI,IAAI,eAAe,CAE1B;IAGD,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,EAgB9B;IAED,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAE/C;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,UAAU,IAAI,MAAM,CAOvB;YAGa,SAAS;IA8DvB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,cAAc,IAAI,IAAI;IAQtB,KAAK,IAAI,IAAI;CAQd"}