@kepler.gl/deckgl-layers 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (198) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +341 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +574 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +99 -0
  13. package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
  14. package/dist/cjs/globe/globe-view.js +404 -0
  15. package/dist/cjs/globe/index.js +140 -0
  16. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  17. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  18. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  19. package/dist/cjs/index.js +163 -0
  20. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  21. package/dist/cjs/layer-utils/cluster-utils.js +95 -0
  22. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  23. package/dist/cjs/layer-utils/globe-cell-utils.js +203 -0
  24. package/dist/cjs/layer-utils/globe-cell-utils.spec.js +118 -0
  25. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  26. package/dist/cjs/line-layer/line-layer.js +95 -0
  27. package/dist/cjs/raster/images.js +271 -0
  28. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  33. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  34. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  40. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  41. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/cjs/raster/types.js +6 -0
  43. package/dist/cjs/raster/util.js +139 -0
  44. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  45. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  46. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  47. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  48. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  49. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  50. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  51. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  55. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  56. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  57. package/dist/{raster → cjs/raster}/webgl/texture/mask.js +5 -2
  58. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  59. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  60. package/dist/cjs/raster/webgl/types.js +6 -0
  61. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  62. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  63. package/dist/cjs/wms/wms-layer.js +624 -0
  64. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  65. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  66. package/dist/esm/3d-building-layer/types.js +3 -0
  67. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  68. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  69. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  70. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  71. package/dist/esm/globe/atmosphere-layer.js +335 -0
  72. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  73. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  74. package/dist/esm/globe/globe-layers.js +566 -0
  75. package/dist/esm/globe/globe-stars-layer.js +92 -0
  76. package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
  77. package/dist/esm/globe/globe-view.js +398 -0
  78. package/dist/esm/globe/index.js +26 -0
  79. package/dist/esm/globe/mvt-label-layer.js +187 -0
  80. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  81. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  82. package/dist/esm/index.js +22 -0
  83. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  84. package/dist/esm/layer-utils/cluster-utils.js +89 -0
  85. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  86. package/dist/esm/layer-utils/globe-cell-utils.js +197 -0
  87. package/dist/esm/layer-utils/globe-cell-utils.spec.js +115 -0
  88. package/dist/esm/layer-utils/shader-utils.js +32 -0
  89. package/dist/esm/line-layer/line-layer.js +91 -0
  90. package/dist/esm/raster/images.js +267 -0
  91. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  95. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  96. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  97. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  102. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  103. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  104. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  105. package/dist/esm/raster/types.js +3 -0
  106. package/dist/esm/raster/util.js +134 -0
  107. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  108. package/dist/esm/raster/webgl/color/filter.js +52 -0
  109. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  110. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  111. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  112. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  113. package/dist/esm/raster/webgl/index.js +26 -0
  114. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  115. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  116. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  117. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  118. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  119. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  120. package/dist/esm/raster/webgl/texture/mask.js +47 -0
  121. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  122. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  123. package/dist/esm/raster/webgl/types.js +3 -0
  124. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  125. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  126. package/dist/esm/wms/wms-layer.js +619 -0
  127. package/dist/globe/atmosphere-layer.d.ts +58 -0
  128. package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
  129. package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
  130. package/dist/globe/globe-layers.d.ts +108 -0
  131. package/dist/globe/globe-stars-layer.d.ts +10 -0
  132. package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
  133. package/dist/globe/globe-view.d.ts +23 -0
  134. package/dist/globe/index.d.ts +8 -0
  135. package/dist/globe/mvt-label-layer.d.ts +7928 -0
  136. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +138 -56
  137. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +138 -56
  138. package/dist/index.d.ts +1 -0
  139. package/dist/layer-utils/cluster-utils.d.ts +6 -1
  140. package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
  141. package/dist/layer-utils/globe-cell-utils.spec.d.ts +1 -0
  142. package/dist/raster/images.d.ts +10 -1
  143. package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
  144. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
  145. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
  146. package/dist/wms/wms-layer.d.ts +27 -0
  147. package/package.json +22 -13
  148. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  149. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  150. package/dist/3d-building-layer/types.js +0 -6
  151. package/dist/cluster-layer/cluster-layer.js +0 -293
  152. package/dist/column-layer/enhanced-column-layer.js +0 -135
  153. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  154. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -90
  155. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -108
  156. package/dist/index.js +0 -152
  157. package/dist/layer-utils/aggregation-utils.js +0 -181
  158. package/dist/layer-utils/cluster-utils.js +0 -93
  159. package/dist/layer-utils/cpu-aggregator.js +0 -798
  160. package/dist/layer-utils/shader-utils.js +0 -38
  161. package/dist/line-layer/line-layer.js +0 -95
  162. package/dist/raster/images.js +0 -259
  163. package/dist/raster/pipeline-validation-patch.js +0 -101
  164. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
  165. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  166. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  167. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  168. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  169. package/dist/raster/raster-layer/raster-layer.js +0 -237
  170. package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
  171. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  172. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  173. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  174. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  175. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  176. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  177. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -271
  178. package/dist/raster/raster-processing-uniforms.js +0 -124
  179. package/dist/raster/types.js +0 -6
  180. package/dist/raster/util.js +0 -139
  181. package/dist/raster/webgl/color/colormap.js +0 -45
  182. package/dist/raster/webgl/color/filter.js +0 -58
  183. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  184. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  185. package/dist/raster/webgl/color/saturation.js +0 -42
  186. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  187. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  188. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  189. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  190. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  191. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  192. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  193. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  194. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  195. package/dist/raster/webgl/types.js +0 -6
  196. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -51
  197. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  198. package/dist/wms/wms-layer.js +0 -424
@@ -0,0 +1,197 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
6
+ import _get from "@babel/runtime/helpers/esm/get";
7
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
8
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
12
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
13
+ function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
14
+ // SPDX-License-Identifier: MIT
15
+ // Copyright contributors to the kepler.gl project
16
+
17
+ import { WebMercatorViewport } from '@deck.gl/core';
18
+
19
+ /**
20
+ * deck.gl's aggregation cell layers (GridCellLayer / HexagonCellLayer) position
21
+ * each cell in flat mercator "common space" (a 2D XY plane) and then draw it with
22
+ * `project_common_position_to_clipspace`, which only multiplies by the
23
+ * view-projection matrix. Under `_GlobeView` this leaves the cells on the flat XY
24
+ * plane that passes through the center of the globe instead of on its surface
25
+ * (the base ColumnLayer works on the globe because it feeds real lng/lat through
26
+ * `project_position` -> `project_globe_`; the aggregation cell shaders skip that).
27
+ *
28
+ * To fix this we remap the already-computed flat common-space vertex position back
29
+ * to lng/lat (inverse Web Mercator) and then onto the sphere with the same math
30
+ * `project_globe_` uses for geographic layers. Because we remap every vertex of the
31
+ * cell footprint (not just the centroid), the flat quad/hexagon naturally curves
32
+ * onto the surface. Elevation (extruded cells, stored in `geometry.position.z` in
33
+ * common units) is added along the radius so columns rise radially off the globe.
34
+ *
35
+ * The remap is gated by a `globeMode` uniform so 2D/3D mercator rendering is
36
+ * byte-for-byte unchanged.
37
+ *
38
+ * `WORLD_SCALE`, `PI`, `GLOBE_RADIUS` and `project.commonOrigin` are all provided
39
+ * by deck.gl's project shader module which these layers include.
40
+ */
41
+
42
+ // deck.gl 9 / luma 9 sets custom uniforms via UBO-backed shader modules (there is
43
+ // no Model.setUniforms). This minimal module exposes the globe-mode flag.
44
+ var globeCellUniforms = {
45
+ name: 'globeCell',
46
+ vs: "layout(std140) uniform globeCellUniforms {\n float globeMode;\n} globeCellProps;\n",
47
+ uniformTypes: {
48
+ globeMode: 'f32'
49
+ }
50
+ };
51
+ var GLOBE_CELL_DECL = /* glsl */"\n// Inverse of deck.gl project_mercator_: flat common XY -> lng/lat (degrees).\nvec2 kepler_commonToLngLat(vec2 commonXY) {\n float lng = degrees(commonXY.x / WORLD_SCALE - PI);\n float lat = degrees(2.0 * atan(exp(commonXY.y / WORLD_SCALE - PI)) - PI * 0.5);\n return vec2(lng, lat);\n}\n\n// Same math as deck.gl project_globe_. elevationCommon is in common units already\n// (GLOBE_RADIUS space), matching how project_globe_ scales z off EARTH_RADIUS.\nvec3 kepler_lngLatToGlobe(vec2 lngLat, float elevationCommon) {\n float lambda = radians(lngLat.x);\n float phi = radians(lngLat.y);\n float cosPhi = cos(phi);\n float D = GLOBE_RADIUS + elevationCommon;\n return vec3(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n";
52
+
53
+ /**
54
+ * Rewrites a grid/hexagon cell vertex shader so that, in globe mode, the final
55
+ * clip-space position is derived from the sphere surface instead of the flat XY
56
+ * plane. In 2D/3D mode the original path is kept unchanged.
57
+ */
58
+ export function addGlobeCellProjection(vs, type) {
59
+ var decl = "".concat(GLOBE_CELL_DECL, "\nvoid main(void) {");
60
+ var withDecl = vs.includes('void main(void) {') ? vs.replace('void main(void) {', decl) : vs;
61
+ var target = 'gl_Position = project_common_position_to_clipspace(geometry.position);';
62
+ if (!withDecl.includes(target)) {
63
+ // Shader shape changed in a deck.gl update; leave the original so we don't crash.
64
+ // eslint-disable-next-line no-console
65
+ console.error("Cannot edit ".concat(type, " globe cell shader"));
66
+ return withDecl;
67
+ }
68
+ return withDecl.replace(target, "if (globeCellProps.globeMode > 0.5) {\n vec2 lngLat = kepler_commonToLngLat(geometry.position.xy + project.commonOrigin.xy);\n vec3 globePos = kepler_lngLatToGlobe(lngLat, geometry.position.z);\n geometry.position = vec4(globePos, 1.0);\n }\n gl_Position = project_common_position_to_clipspace(geometry.position);");
69
+ }
70
+
71
+ /**
72
+ * deck.gl 9's Grid/Hexagon aggregation compute bin positions and the cell layer's
73
+ * "common space" from `this.context.viewport`. Under `_GlobeView` that common space
74
+ * is the globe's 3D-projected space (projectFlat is identity on lng/lat, positions
75
+ * bin off the sphere-projected XY), which both mis-bins data and — combined with the
76
+ * flat cell shader — drops cells onto the plane through the globe center.
77
+ *
78
+ * We sidestep this by running `_updateBinOptions` with a WebMercatorViewport that
79
+ * matches the current globe camera. That makes binning, `cellOriginCommon` /
80
+ * `cellSizeCommon` (or `radiusCommon` / `hexOriginCommon`) and the cell shader's
81
+ * flat position all live in genuine Web Mercator common space, which the cell shader
82
+ * remap (`addGlobeCellProjection`) then curves back onto the sphere. In 2D/3D mode
83
+ * this is a no-op.
84
+ *
85
+ * `callSuper` runs deck.gl's original `_updateBinOptions` while the viewport is
86
+ * temporarily swapped. The swap is synchronous and restored in `finally`.
87
+ */
88
+ export function runBinOptionsWithMercatorViewport(layer, callSuper) {
89
+ var _layer$context;
90
+ var viewport = (_layer$context = layer.context) === null || _layer$context === void 0 ? void 0 : _layer$context.viewport;
91
+ var isGlobe = Boolean(viewport === null || viewport === void 0 ? void 0 : viewport.resolution);
92
+ if (!isGlobe) {
93
+ callSuper();
94
+ return;
95
+ }
96
+ var mercatorViewport = new WebMercatorViewport({
97
+ width: viewport.width,
98
+ height: viewport.height,
99
+ longitude: viewport.longitude,
100
+ latitude: viewport.latitude,
101
+ zoom: viewport.zoom
102
+ });
103
+ var originalViewport = layer.context.viewport;
104
+ layer.context.viewport = mercatorViewport;
105
+ try {
106
+ callSuper();
107
+ } finally {
108
+ layer.context.viewport = originalViewport;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Wraps a deck.gl aggregation cell layer class (GridCellLayer / HexagonCellLayer)
114
+ * with a subclass that injects the globe surface remap into its vertex shader.
115
+ *
116
+ * We create the subclass dynamically from whatever default class deck.gl provides
117
+ * to `getSubLayerClass` so we don't have to import the (non-public) cell layer
118
+ * classes directly. Results are cached per base class so deck.gl sees a stable
119
+ * layer class across renders (layers are recreated every frame) and shader
120
+ * compilation / sublayer diffing stays stable.
121
+ */
122
+ var globeCellClassCache = new WeakMap();
123
+ /**
124
+ * deck.gl's GridCellLayer / HexagonCellLayer bind the `colorRange` palette
125
+ * texture only when the `colorRange` *prop* changes. ColumnLayer (the parent)
126
+ * destroys and recreates `fillModel` whenever `extensionsChanged` fires —
127
+ * which happens when Light & Shadow registers the shadow shader module.
128
+ * The new model starts with empty bindings, the colorRange check is a no-op,
129
+ * and luma.gl skips the draw: "Binding colorRange not found in …-cells-fill-cached".
130
+ * Recreating the Kepler layer "fixes" it because initialize/update then sees a
131
+ * colorRange change against empty oldProps and binds the texture again.
132
+ *
133
+ * Re-bind the existing texture onto whatever fillModel is current. Harmless
134
+ * when the parent already bound it; required after a model rebuild.
135
+ */
136
+ function bindColorRangeTexture(layer, moduleName) {
137
+ var _layer$state, _layer$state2;
138
+ var model = (_layer$state = layer.state) === null || _layer$state === void 0 ? void 0 : _layer$state.fillModel;
139
+ var colorTexture = (_layer$state2 = layer.state) === null || _layer$state2 === void 0 ? void 0 : _layer$state2.colorTexture;
140
+ if (model !== null && model !== void 0 && model.shaderInputs && colorTexture) {
141
+ model.shaderInputs.setProps(_defineProperty({}, moduleName, {
142
+ colorRange: colorTexture
143
+ }));
144
+ }
145
+ }
146
+ export function makeGlobeCellLayerClass(BaseCellLayer, type) {
147
+ var cached = globeCellClassCache.get(BaseCellLayer);
148
+ if (cached) {
149
+ return cached;
150
+ }
151
+ var GlobeCellLayer = /*#__PURE__*/function (_ref) {
152
+ function GlobeCellLayer() {
153
+ _classCallCheck(this, GlobeCellLayer);
154
+ return _callSuper(this, GlobeCellLayer, arguments);
155
+ }
156
+ _inherits(GlobeCellLayer, _ref);
157
+ return _createClass(GlobeCellLayer, [{
158
+ key: "getShaders",
159
+ value: function getShaders() {
160
+ var shaders = _superPropGet(GlobeCellLayer, "getShaders", this, 3)([]);
161
+ return _objectSpread(_objectSpread({}, shaders), {}, {
162
+ vs: addGlobeCellProjection(shaders.vs, type),
163
+ modules: [].concat(_toConsumableArray(shaders.modules || []), [globeCellUniforms])
164
+ });
165
+ }
166
+ }, {
167
+ key: "updateState",
168
+ value: function updateState(params) {
169
+ _superPropGet(GlobeCellLayer, "updateState", this, 3)([params]);
170
+ bindColorRangeTexture(this, type);
171
+ }
172
+ }, {
173
+ key: "draw",
174
+ value: function draw(opts) {
175
+ var globeMode = this.context.viewport.resolution ? 1.0 : 0.0;
176
+ // GridCellLayer / HexagonCellLayer render through a single fillModel and set
177
+ // their own module props in draw(); set ours first so it merges (setProps is
178
+ // per-module). deck.gl 9 has no Model.setUniforms — uniforms go through
179
+ // shaderInputs UBO modules.
180
+ var model = this.state.fillModel;
181
+ if (model !== null && model !== void 0 && model.shaderInputs) {
182
+ model.shaderInputs.setProps({
183
+ globeCell: {
184
+ globeMode: globeMode
185
+ }
186
+ });
187
+ }
188
+ bindColorRangeTexture(this, type);
189
+ _superPropGet(GlobeCellLayer, "draw", this, 3)([opts]);
190
+ }
191
+ }]);
192
+ }(BaseCellLayer);
193
+ GlobeCellLayer.layerName = "Globe".concat(type, "CellLayer");
194
+ globeCellClassCache.set(BaseCellLayer, GlobeCellLayer);
195
+ return GlobeCellLayer;
196
+ }
197
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXZWJNZXJjYXRvclZpZXdwb3J0IiwiZ2xvYmVDZWxsVW5pZm9ybXMiLCJuYW1lIiwidnMiLCJ1bmlmb3JtVHlwZXMiLCJnbG9iZU1vZGUiLCJHTE9CRV9DRUxMX0RFQ0wiLCJhZGRHbG9iZUNlbGxQcm9qZWN0aW9uIiwidHlwZSIsImRlY2wiLCJjb25jYXQiLCJ3aXRoRGVjbCIsImluY2x1ZGVzIiwicmVwbGFjZSIsInRhcmdldCIsImNvbnNvbGUiLCJlcnJvciIsInJ1bkJpbk9wdGlvbnNXaXRoTWVyY2F0b3JWaWV3cG9ydCIsImxheWVyIiwiY2FsbFN1cGVyIiwiX2xheWVyJGNvbnRleHQiLCJ2aWV3cG9ydCIsImNvbnRleHQiLCJpc0dsb2JlIiwiQm9vbGVhbiIsInJlc29sdXRpb24iLCJtZXJjYXRvclZpZXdwb3J0Iiwid2lkdGgiLCJoZWlnaHQiLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInpvb20iLCJvcmlnaW5hbFZpZXdwb3J0IiwiZ2xvYmVDZWxsQ2xhc3NDYWNoZSIsIldlYWtNYXAiLCJiaW5kQ29sb3JSYW5nZVRleHR1cmUiLCJtb2R1bGVOYW1lIiwiX2xheWVyJHN0YXRlIiwiX2xheWVyJHN0YXRlMiIsIm1vZGVsIiwic3RhdGUiLCJmaWxsTW9kZWwiLCJjb2xvclRleHR1cmUiLCJzaGFkZXJJbnB1dHMiLCJzZXRQcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImNvbG9yUmFuZ2UiLCJtYWtlR2xvYmVDZWxsTGF5ZXJDbGFzcyIsIkJhc2VDZWxsTGF5ZXIiLCJjYWNoZWQiLCJnZXQiLCJHbG9iZUNlbGxMYXllciIsIl9yZWYiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJnZXRTaGFkZXJzIiwic2hhZGVycyIsIl9zdXBlclByb3BHZXQiLCJfb2JqZWN0U3ByZWFkIiwibW9kdWxlcyIsIl90b0NvbnN1bWFibGVBcnJheSIsInVwZGF0ZVN0YXRlIiwicGFyYW1zIiwiZHJhdyIsIm9wdHMiLCJnbG9iZUNlbGwiLCJsYXllck5hbWUiLCJzZXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5ZXItdXRpbHMvZ2xvYmUtY2VsbC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1dlYk1lcmNhdG9yVmlld3BvcnR9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG4vKipcbiAqIGRlY2suZ2wncyBhZ2dyZWdhdGlvbiBjZWxsIGxheWVycyAoR3JpZENlbGxMYXllciAvIEhleGFnb25DZWxsTGF5ZXIpIHBvc2l0aW9uXG4gKiBlYWNoIGNlbGwgaW4gZmxhdCBtZXJjYXRvciBcImNvbW1vbiBzcGFjZVwiIChhIDJEIFhZIHBsYW5lKSBhbmQgdGhlbiBkcmF3IGl0IHdpdGhcbiAqIGBwcm9qZWN0X2NvbW1vbl9wb3NpdGlvbl90b19jbGlwc3BhY2VgLCB3aGljaCBvbmx5IG11bHRpcGxpZXMgYnkgdGhlXG4gKiB2aWV3LXByb2plY3Rpb24gbWF0cml4LiBVbmRlciBgX0dsb2JlVmlld2AgdGhpcyBsZWF2ZXMgdGhlIGNlbGxzIG9uIHRoZSBmbGF0IFhZXG4gKiBwbGFuZSB0aGF0IHBhc3NlcyB0aHJvdWdoIHRoZSBjZW50ZXIgb2YgdGhlIGdsb2JlIGluc3RlYWQgb2Ygb24gaXRzIHN1cmZhY2VcbiAqICh0aGUgYmFzZSBDb2x1bW5MYXllciB3b3JrcyBvbiB0aGUgZ2xvYmUgYmVjYXVzZSBpdCBmZWVkcyByZWFsIGxuZy9sYXQgdGhyb3VnaFxuICogYHByb2plY3RfcG9zaXRpb25gIC0+IGBwcm9qZWN0X2dsb2JlX2A7IHRoZSBhZ2dyZWdhdGlvbiBjZWxsIHNoYWRlcnMgc2tpcCB0aGF0KS5cbiAqXG4gKiBUbyBmaXggdGhpcyB3ZSByZW1hcCB0aGUgYWxyZWFkeS1jb21wdXRlZCBmbGF0IGNvbW1vbi1zcGFjZSB2ZXJ0ZXggcG9zaXRpb24gYmFja1xuICogdG8gbG5nL2xhdCAoaW52ZXJzZSBXZWIgTWVyY2F0b3IpIGFuZCB0aGVuIG9udG8gdGhlIHNwaGVyZSB3aXRoIHRoZSBzYW1lIG1hdGhcbiAqIGBwcm9qZWN0X2dsb2JlX2AgdXNlcyBmb3IgZ2VvZ3JhcGhpYyBsYXllcnMuIEJlY2F1c2Ugd2UgcmVtYXAgZXZlcnkgdmVydGV4IG9mIHRoZVxuICogY2VsbCBmb290cHJpbnQgKG5vdCBqdXN0IHRoZSBjZW50cm9pZCksIHRoZSBmbGF0IHF1YWQvaGV4YWdvbiBuYXR1cmFsbHkgY3VydmVzXG4gKiBvbnRvIHRoZSBzdXJmYWNlLiBFbGV2YXRpb24gKGV4dHJ1ZGVkIGNlbGxzLCBzdG9yZWQgaW4gYGdlb21ldHJ5LnBvc2l0aW9uLnpgIGluXG4gKiBjb21tb24gdW5pdHMpIGlzIGFkZGVkIGFsb25nIHRoZSByYWRpdXMgc28gY29sdW1ucyByaXNlIHJhZGlhbGx5IG9mZiB0aGUgZ2xvYmUuXG4gKlxuICogVGhlIHJlbWFwIGlzIGdhdGVkIGJ5IGEgYGdsb2JlTW9kZWAgdW5pZm9ybSBzbyAyRC8zRCBtZXJjYXRvciByZW5kZXJpbmcgaXNcbiAqIGJ5dGUtZm9yLWJ5dGUgdW5jaGFuZ2VkLlxuICpcbiAqIGBXT1JMRF9TQ0FMRWAsIGBQSWAsIGBHTE9CRV9SQURJVVNgIGFuZCBgcHJvamVjdC5jb21tb25PcmlnaW5gIGFyZSBhbGwgcHJvdmlkZWRcbiAqIGJ5IGRlY2suZ2wncyBwcm9qZWN0IHNoYWRlciBtb2R1bGUgd2hpY2ggdGhlc2UgbGF5ZXJzIGluY2x1ZGUuXG4gKi9cblxuLy8gZGVjay5nbCA5IC8gbHVtYSA5IHNldHMgY3VzdG9tIHVuaWZvcm1zIHZpYSBVQk8tYmFja2VkIHNoYWRlciBtb2R1bGVzICh0aGVyZSBpc1xuLy8gbm8gTW9kZWwuc2V0VW5pZm9ybXMpLiBUaGlzIG1pbmltYWwgbW9kdWxlIGV4cG9zZXMgdGhlIGdsb2JlLW1vZGUgZmxhZy5cbmNvbnN0IGdsb2JlQ2VsbFVuaWZvcm1zID0ge1xuICBuYW1lOiAnZ2xvYmVDZWxsJyxcbiAgdnM6IGBsYXlvdXQoc3RkMTQwKSB1bmlmb3JtIGdsb2JlQ2VsbFVuaWZvcm1zIHtcbiAgZmxvYXQgZ2xvYmVNb2RlO1xufSBnbG9iZUNlbGxQcm9wcztcbmAsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIGdsb2JlTW9kZTogJ2YzMidcbiAgfVxufSBhcyBjb25zdDtcblxuY29uc3QgR0xPQkVfQ0VMTF9ERUNMID0gLyogZ2xzbCAqLyBgXG4vLyBJbnZlcnNlIG9mIGRlY2suZ2wgcHJvamVjdF9tZXJjYXRvcl86IGZsYXQgY29tbW9uIFhZIC0+IGxuZy9sYXQgKGRlZ3JlZXMpLlxudmVjMiBrZXBsZXJfY29tbW9uVG9MbmdMYXQodmVjMiBjb21tb25YWSkge1xuICBmbG9hdCBsbmcgPSBkZWdyZWVzKGNvbW1vblhZLnggLyBXT1JMRF9TQ0FMRSAtIFBJKTtcbiAgZmxvYXQgbGF0ID0gZGVncmVlcygyLjAgKiBhdGFuKGV4cChjb21tb25YWS55IC8gV09STERfU0NBTEUgLSBQSSkpIC0gUEkgKiAwLjUpO1xuICByZXR1cm4gdmVjMihsbmcsIGxhdCk7XG59XG5cbi8vIFNhbWUgbWF0aCBhcyBkZWNrLmdsIHByb2plY3RfZ2xvYmVfLiBlbGV2YXRpb25Db21tb24gaXMgaW4gY29tbW9uIHVuaXRzIGFscmVhZHlcbi8vIChHTE9CRV9SQURJVVMgc3BhY2UpLCBtYXRjaGluZyBob3cgcHJvamVjdF9nbG9iZV8gc2NhbGVzIHogb2ZmIEVBUlRIX1JBRElVUy5cbnZlYzMga2VwbGVyX2xuZ0xhdFRvR2xvYmUodmVjMiBsbmdMYXQsIGZsb2F0IGVsZXZhdGlvbkNvbW1vbikge1xuICBmbG9hdCBsYW1iZGEgPSByYWRpYW5zKGxuZ0xhdC54KTtcbiAgZmxvYXQgcGhpID0gcmFkaWFucyhsbmdMYXQueSk7XG4gIGZsb2F0IGNvc1BoaSA9IGNvcyhwaGkpO1xuICBmbG9hdCBEID0gR0xPQkVfUkFESVVTICsgZWxldmF0aW9uQ29tbW9uO1xuICByZXR1cm4gdmVjMyhcbiAgICBzaW4obGFtYmRhKSAqIGNvc1BoaSxcbiAgICAtY29zKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgc2luKHBoaSlcbiAgKSAqIEQ7XG59XG5gO1xuXG4vKipcbiAqIFJld3JpdGVzIGEgZ3JpZC9oZXhhZ29uIGNlbGwgdmVydGV4IHNoYWRlciBzbyB0aGF0LCBpbiBnbG9iZSBtb2RlLCB0aGUgZmluYWxcbiAqIGNsaXAtc3BhY2UgcG9zaXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSBzcGhlcmUgc3VyZmFjZSBpbnN0ZWFkIG9mIHRoZSBmbGF0IFhZXG4gKiBwbGFuZS4gSW4gMkQvM0QgbW9kZSB0aGUgb3JpZ2luYWwgcGF0aCBpcyBrZXB0IHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEdsb2JlQ2VsbFByb2plY3Rpb24odnM6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGVjbCA9IGAke0dMT0JFX0NFTExfREVDTH1cXG52b2lkIG1haW4odm9pZCkge2A7XG4gIGNvbnN0IHdpdGhEZWNsID0gdnMuaW5jbHVkZXMoJ3ZvaWQgbWFpbih2b2lkKSB7JykgPyB2cy5yZXBsYWNlKCd2b2lkIG1haW4odm9pZCkgeycsIGRlY2wpIDogdnM7XG5cbiAgY29uc3QgdGFyZ2V0ID0gJ2dsX1Bvc2l0aW9uID0gcHJvamVjdF9jb21tb25fcG9zaXRpb25fdG9fY2xpcHNwYWNlKGdlb21ldHJ5LnBvc2l0aW9uKTsnO1xuICBpZiAoIXdpdGhEZWNsLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAvLyBTaGFkZXIgc2hhcGUgY2hhbmdlZCBpbiBhIGRlY2suZ2wgdXBkYXRlOyBsZWF2ZSB0aGUgb3JpZ2luYWwgc28gd2UgZG9uJ3QgY3Jhc2guXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZWRpdCAke3R5cGV9IGdsb2JlIGNlbGwgc2hhZGVyYCk7XG4gICAgcmV0dXJuIHdpdGhEZWNsO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhEZWNsLnJlcGxhY2UoXG4gICAgdGFyZ2V0LFxuICAgIGBpZiAoZ2xvYmVDZWxsUHJvcHMuZ2xvYmVNb2RlID4gMC41KSB7XG4gICAgICB2ZWMyIGxuZ0xhdCA9IGtlcGxlcl9jb21tb25Ub0xuZ0xhdChnZW9tZXRyeS5wb3NpdGlvbi54eSArIHByb2plY3QuY29tbW9uT3JpZ2luLnh5KTtcbiAgICAgIHZlYzMgZ2xvYmVQb3MgPSBrZXBsZXJfbG5nTGF0VG9HbG9iZShsbmdMYXQsIGdlb21ldHJ5LnBvc2l0aW9uLnopO1xuICAgICAgZ2VvbWV0cnkucG9zaXRpb24gPSB2ZWM0KGdsb2JlUG9zLCAxLjApO1xuICAgIH1cbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfY29tbW9uX3Bvc2l0aW9uX3RvX2NsaXBzcGFjZShnZW9tZXRyeS5wb3NpdGlvbik7YFxuICApO1xufVxuXG4vKipcbiAqIGRlY2suZ2wgOSdzIEdyaWQvSGV4YWdvbiBhZ2dyZWdhdGlvbiBjb21wdXRlIGJpbiBwb3NpdGlvbnMgYW5kIHRoZSBjZWxsIGxheWVyJ3NcbiAqIFwiY29tbW9uIHNwYWNlXCIgZnJvbSBgdGhpcy5jb250ZXh0LnZpZXdwb3J0YC4gVW5kZXIgYF9HbG9iZVZpZXdgIHRoYXQgY29tbW9uIHNwYWNlXG4gKiBpcyB0aGUgZ2xvYmUncyAzRC1wcm9qZWN0ZWQgc3BhY2UgKHByb2plY3RGbGF0IGlzIGlkZW50aXR5IG9uIGxuZy9sYXQsIHBvc2l0aW9uc1xuICogYmluIG9mZiB0aGUgc3BoZXJlLXByb2plY3RlZCBYWSksIHdoaWNoIGJvdGggbWlzLWJpbnMgZGF0YSBhbmQg4oCUIGNvbWJpbmVkIHdpdGggdGhlXG4gKiBmbGF0IGNlbGwgc2hhZGVyIOKAlCBkcm9wcyBjZWxscyBvbnRvIHRoZSBwbGFuZSB0aHJvdWdoIHRoZSBnbG9iZSBjZW50ZXIuXG4gKlxuICogV2Ugc2lkZXN0ZXAgdGhpcyBieSBydW5uaW5nIGBfdXBkYXRlQmluT3B0aW9uc2Agd2l0aCBhIFdlYk1lcmNhdG9yVmlld3BvcnQgdGhhdFxuICogbWF0Y2hlcyB0aGUgY3VycmVudCBnbG9iZSBjYW1lcmEuIFRoYXQgbWFrZXMgYmlubmluZywgYGNlbGxPcmlnaW5Db21tb25gIC9cbiAqIGBjZWxsU2l6ZUNvbW1vbmAgKG9yIGByYWRpdXNDb21tb25gIC8gYGhleE9yaWdpbkNvbW1vbmApIGFuZCB0aGUgY2VsbCBzaGFkZXInc1xuICogZmxhdCBwb3NpdGlvbiBhbGwgbGl2ZSBpbiBnZW51aW5lIFdlYiBNZXJjYXRvciBjb21tb24gc3BhY2UsIHdoaWNoIHRoZSBjZWxsIHNoYWRlclxuICogcmVtYXAgKGBhZGRHbG9iZUNlbGxQcm9qZWN0aW9uYCkgdGhlbiBjdXJ2ZXMgYmFjayBvbnRvIHRoZSBzcGhlcmUuIEluIDJELzNEIG1vZGVcbiAqIHRoaXMgaXMgYSBuby1vcC5cbiAqXG4gKiBgY2FsbFN1cGVyYCBydW5zIGRlY2suZ2wncyBvcmlnaW5hbCBgX3VwZGF0ZUJpbk9wdGlvbnNgIHdoaWxlIHRoZSB2aWV3cG9ydCBpc1xuICogdGVtcG9yYXJpbHkgc3dhcHBlZC4gVGhlIHN3YXAgaXMgc3luY2hyb25vdXMgYW5kIHJlc3RvcmVkIGluIGBmaW5hbGx5YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkJpbk9wdGlvbnNXaXRoTWVyY2F0b3JWaWV3cG9ydChsYXllcjogYW55LCBjYWxsU3VwZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgY29uc3Qgdmlld3BvcnQgPSBsYXllci5jb250ZXh0Py52aWV3cG9ydDtcbiAgY29uc3QgaXNHbG9iZSA9IEJvb2xlYW4odmlld3BvcnQ/LnJlc29sdXRpb24pO1xuICBpZiAoIWlzR2xvYmUpIHtcbiAgICBjYWxsU3VwZXIoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtZXJjYXRvclZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe1xuICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCxcbiAgICBsb25naXR1ZGU6IHZpZXdwb3J0LmxvbmdpdHVkZSxcbiAgICBsYXRpdHVkZTogdmlld3BvcnQubGF0aXR1ZGUsXG4gICAgem9vbTogdmlld3BvcnQuem9vbVxuICB9KTtcblxuICBjb25zdCBvcmlnaW5hbFZpZXdwb3J0ID0gbGF5ZXIuY29udGV4dC52aWV3cG9ydDtcbiAgbGF5ZXIuY29udGV4dC52aWV3cG9ydCA9IG1lcmNhdG9yVmlld3BvcnQ7XG4gIHRyeSB7XG4gICAgY2FsbFN1cGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgbGF5ZXIuY29udGV4dC52aWV3cG9ydCA9IG9yaWdpbmFsVmlld3BvcnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIGRlY2suZ2wgYWdncmVnYXRpb24gY2VsbCBsYXllciBjbGFzcyAoR3JpZENlbGxMYXllciAvIEhleGFnb25DZWxsTGF5ZXIpXG4gKiB3aXRoIGEgc3ViY2xhc3MgdGhhdCBpbmplY3RzIHRoZSBnbG9iZSBzdXJmYWNlIHJlbWFwIGludG8gaXRzIHZlcnRleCBzaGFkZXIuXG4gKlxuICogV2UgY3JlYXRlIHRoZSBzdWJjbGFzcyBkeW5hbWljYWxseSBmcm9tIHdoYXRldmVyIGRlZmF1bHQgY2xhc3MgZGVjay5nbCBwcm92aWRlc1xuICogdG8gYGdldFN1YkxheWVyQ2xhc3NgIHNvIHdlIGRvbid0IGhhdmUgdG8gaW1wb3J0IHRoZSAobm9uLXB1YmxpYykgY2VsbCBsYXllclxuICogY2xhc3NlcyBkaXJlY3RseS4gUmVzdWx0cyBhcmUgY2FjaGVkIHBlciBiYXNlIGNsYXNzIHNvIGRlY2suZ2wgc2VlcyBhIHN0YWJsZVxuICogbGF5ZXIgY2xhc3MgYWNyb3NzIHJlbmRlcnMgKGxheWVycyBhcmUgcmVjcmVhdGVkIGV2ZXJ5IGZyYW1lKSBhbmQgc2hhZGVyXG4gKiBjb21waWxhdGlvbiAvIHN1YmxheWVyIGRpZmZpbmcgc3RheXMgc3RhYmxlLlxuICovXG5jb25zdCBnbG9iZUNlbGxDbGFzc0NhY2hlID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBvYmplY3Q+KCk7XG5cbnR5cGUgTGF5ZXJDb25zdHJ1Y3RvciA9IHtuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55OyBsYXllck5hbWU/OiBzdHJpbmd9O1xuXG4vKipcbiAqIGRlY2suZ2wncyBHcmlkQ2VsbExheWVyIC8gSGV4YWdvbkNlbGxMYXllciBiaW5kIHRoZSBgY29sb3JSYW5nZWAgcGFsZXR0ZVxuICogdGV4dHVyZSBvbmx5IHdoZW4gdGhlIGBjb2xvclJhbmdlYCAqcHJvcCogY2hhbmdlcy4gQ29sdW1uTGF5ZXIgKHRoZSBwYXJlbnQpXG4gKiBkZXN0cm95cyBhbmQgcmVjcmVhdGVzIGBmaWxsTW9kZWxgIHdoZW5ldmVyIGBleHRlbnNpb25zQ2hhbmdlZGAgZmlyZXMg4oCUXG4gKiB3aGljaCBoYXBwZW5zIHdoZW4gTGlnaHQgJiBTaGFkb3cgcmVnaXN0ZXJzIHRoZSBzaGFkb3cgc2hhZGVyIG1vZHVsZS5cbiAqIFRoZSBuZXcgbW9kZWwgc3RhcnRzIHdpdGggZW1wdHkgYmluZGluZ3MsIHRoZSBjb2xvclJhbmdlIGNoZWNrIGlzIGEgbm8tb3AsXG4gKiBhbmQgbHVtYS5nbCBza2lwcyB0aGUgZHJhdzogXCJCaW5kaW5nIGNvbG9yUmFuZ2Ugbm90IGZvdW5kIGluIOKApi1jZWxscy1maWxsLWNhY2hlZFwiLlxuICogUmVjcmVhdGluZyB0aGUgS2VwbGVyIGxheWVyIFwiZml4ZXNcIiBpdCBiZWNhdXNlIGluaXRpYWxpemUvdXBkYXRlIHRoZW4gc2VlcyBhXG4gKiBjb2xvclJhbmdlIGNoYW5nZSBhZ2FpbnN0IGVtcHR5IG9sZFByb3BzIGFuZCBiaW5kcyB0aGUgdGV4dHVyZSBhZ2Fpbi5cbiAqXG4gKiBSZS1iaW5kIHRoZSBleGlzdGluZyB0ZXh0dXJlIG9udG8gd2hhdGV2ZXIgZmlsbE1vZGVsIGlzIGN1cnJlbnQuIEhhcm1sZXNzXG4gKiB3aGVuIHRoZSBwYXJlbnQgYWxyZWFkeSBib3VuZCBpdDsgcmVxdWlyZWQgYWZ0ZXIgYSBtb2RlbCByZWJ1aWxkLlxuICovXG5mdW5jdGlvbiBiaW5kQ29sb3JSYW5nZVRleHR1cmUobGF5ZXI6IGFueSwgbW9kdWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IG1vZGVsID0gbGF5ZXIuc3RhdGU/LmZpbGxNb2RlbDtcbiAgY29uc3QgY29sb3JUZXh0dXJlID0gbGF5ZXIuc3RhdGU/LmNvbG9yVGV4dHVyZTtcbiAgaWYgKG1vZGVsPy5zaGFkZXJJbnB1dHMgJiYgY29sb3JUZXh0dXJlKSB7XG4gICAgbW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtbbW9kdWxlTmFtZV06IHtjb2xvclJhbmdlOiBjb2xvclRleHR1cmV9fSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VHbG9iZUNlbGxMYXllckNsYXNzPFQgZXh0ZW5kcyBMYXllckNvbnN0cnVjdG9yPihcbiAgQmFzZUNlbGxMYXllcjogVCxcbiAgdHlwZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3QgY2FjaGVkID0gZ2xvYmVDZWxsQ2xhc3NDYWNoZS5nZXQoQmFzZUNlbGxMYXllcik7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkIGFzIFQ7XG4gIH1cblxuICBjbGFzcyBHbG9iZUNlbGxMYXllciBleHRlbmRzIChCYXNlQ2VsbExheWVyIGFzIHtuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55fSkge1xuICAgIGdldFNoYWRlcnMoKSB7XG4gICAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2hhZGVycyxcbiAgICAgICAgdnM6IGFkZEdsb2JlQ2VsbFByb2plY3Rpb24oc2hhZGVycy52cywgdHlwZSksXG4gICAgICAgIG1vZHVsZXM6IFsuLi4oc2hhZGVycy5tb2R1bGVzIHx8IFtdKSwgZ2xvYmVDZWxsVW5pZm9ybXNdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHVwZGF0ZVN0YXRlKHBhcmFtczogYW55KSB7XG4gICAgICBzdXBlci51cGRhdGVTdGF0ZShwYXJhbXMpO1xuICAgICAgYmluZENvbG9yUmFuZ2VUZXh0dXJlKHRoaXMsIHR5cGUpO1xuICAgIH1cblxuICAgIGRyYXcob3B0czogYW55KSB7XG4gICAgICBjb25zdCBnbG9iZU1vZGUgPSAodGhpcy5jb250ZXh0LnZpZXdwb3J0IGFzIGFueSkucmVzb2x1dGlvbiA/IDEuMCA6IDAuMDtcbiAgICAgIC8vIEdyaWRDZWxsTGF5ZXIgLyBIZXhhZ29uQ2VsbExheWVyIHJlbmRlciB0aHJvdWdoIGEgc2luZ2xlIGZpbGxNb2RlbCBhbmQgc2V0XG4gICAgICAvLyB0aGVpciBvd24gbW9kdWxlIHByb3BzIGluIGRyYXcoKTsgc2V0IG91cnMgZmlyc3Qgc28gaXQgbWVyZ2VzIChzZXRQcm9wcyBpc1xuICAgICAgLy8gcGVyLW1vZHVsZSkuIGRlY2suZ2wgOSBoYXMgbm8gTW9kZWwuc2V0VW5pZm9ybXMg4oCUIHVuaWZvcm1zIGdvIHRocm91Z2hcbiAgICAgIC8vIHNoYWRlcklucHV0cyBVQk8gbW9kdWxlcy5cbiAgICAgIGNvbnN0IG1vZGVsID0gKHRoaXMuc3RhdGUgYXMgYW55KS5maWxsTW9kZWw7XG4gICAgICBpZiAobW9kZWw/LnNoYWRlcklucHV0cykge1xuICAgICAgICBtb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe2dsb2JlQ2VsbDoge2dsb2JlTW9kZX19KTtcbiAgICAgIH1cbiAgICAgIGJpbmRDb2xvclJhbmdlVGV4dHVyZSh0aGlzLCB0eXBlKTtcbiAgICAgIHN1cGVyLmRyYXcob3B0cyk7XG4gICAgfVxuICB9XG4gIChHbG9iZUNlbGxMYXllciBhcyB1bmtub3duIGFzIHtsYXllck5hbWU6IHN0cmluZ30pLmxheWVyTmFtZSA9IGBHbG9iZSR7dHlwZX1DZWxsTGF5ZXJgO1xuICBnbG9iZUNlbGxDbGFzc0NhY2hlLnNldChCYXNlQ2VsbExheWVyLCBHbG9iZUNlbGxMYXllcik7XG4gIHJldHVybiBHbG9iZUNlbGxMYXllciBhcyB1bmtub3duIGFzIFQ7XG59XG4iXSwi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
@@ -0,0 +1,115 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ // SPDX-License-Identifier: MIT
5
+ // Copyright contributors to the kepler.gl project
6
+
7
+ import { makeGlobeCellLayerClass } from './globe-cell-utils';
8
+ function makeFakeCellLayerClass() {
9
+ return /*#__PURE__*/function () {
10
+ function FakeCellLayer() {
11
+ _classCallCheck(this, FakeCellLayer);
12
+ _defineProperty(this, "state", {});
13
+ _defineProperty(this, "context", {
14
+ viewport: {}
15
+ });
16
+ }
17
+ return _createClass(FakeCellLayer, [{
18
+ key: "getShaders",
19
+ value: function getShaders() {
20
+ return {
21
+ vs: 'void main(void) { gl_Position = project_common_position_to_clipspace(geometry.position); }',
22
+ modules: []
23
+ };
24
+ }
25
+
26
+ // deck.gl ColumnLayer recreates fillModel on extensionsChanged and does not
27
+ // copy over the colorRange texture binding. GridCellLayer / HexagonCellLayer
28
+ // only bind that texture when the colorRange *prop* changes.
29
+ }, {
30
+ key: "updateState",
31
+ value: function updateState(_params) {
32
+ this.state.fillModel = {
33
+ shaderInputs: {
34
+ setProps: jest.fn()
35
+ }
36
+ };
37
+ }
38
+ }, {
39
+ key: "draw",
40
+ value: function draw(_opts) {
41
+ // no-op stub so GlobeCellLayer.draw can call super.draw()
42
+ }
43
+ }]);
44
+ }();
45
+ }
46
+ describe('globe-cell-utils colorRange rebind', function () {
47
+ test('rebinds colorRange onto a rebuilt fillModel (grid)', function () {
48
+ var _layer$state$fillMode;
49
+ var GlobeGridCell = makeGlobeCellLayerClass(makeFakeCellLayerClass(), 'grid');
50
+ var layer = new GlobeGridCell();
51
+ layer.state.colorTexture = {
52
+ id: 'color-range-tex'
53
+ };
54
+ layer.updateState({
55
+ changeFlags: {
56
+ extensionsChanged: true
57
+ },
58
+ props: {
59
+ colorRange: ['#fff']
60
+ },
61
+ oldProps: {
62
+ colorRange: ['#fff']
63
+ }
64
+ });
65
+ expect((_layer$state$fillMode = layer.state.fillModel) === null || _layer$state$fillMode === void 0 ? void 0 : _layer$state$fillMode.shaderInputs.setProps).toHaveBeenCalledWith({
66
+ grid: {
67
+ colorRange: layer.state.colorTexture
68
+ }
69
+ });
70
+ });
71
+ test('rebinds colorRange onto a rebuilt fillModel (hexagon)', function () {
72
+ var _layer$state$fillMode2;
73
+ var GlobeHexCell = makeGlobeCellLayerClass(makeFakeCellLayerClass(), 'hexagon');
74
+ var layer = new GlobeHexCell();
75
+ layer.state.colorTexture = {
76
+ id: 'color-range-tex'
77
+ };
78
+ layer.updateState({
79
+ changeFlags: {
80
+ extensionsChanged: true
81
+ },
82
+ props: {
83
+ colorRange: ['#fff']
84
+ },
85
+ oldProps: {
86
+ colorRange: ['#fff']
87
+ }
88
+ });
89
+ expect((_layer$state$fillMode2 = layer.state.fillModel) === null || _layer$state$fillMode2 === void 0 ? void 0 : _layer$state$fillMode2.shaderInputs.setProps).toHaveBeenCalledWith({
90
+ hexagon: {
91
+ colorRange: layer.state.colorTexture
92
+ }
93
+ });
94
+ });
95
+ test('draw also rebinds colorRange so the first frame after rebuild is valid', function () {
96
+ var GlobeGridCell = makeGlobeCellLayerClass(makeFakeCellLayerClass(), 'grid');
97
+ var layer = new GlobeGridCell();
98
+ var setProps = jest.fn();
99
+ layer.state.colorTexture = {
100
+ id: 'color-range-tex'
101
+ };
102
+ layer.state.fillModel = {
103
+ shaderInputs: {
104
+ setProps: setProps
105
+ }
106
+ };
107
+ layer.draw({});
108
+ expect(setProps).toHaveBeenCalledWith({
109
+ grid: {
110
+ colorRange: layer.state.colorTexture
111
+ }
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWtlR2xvYmVDZWxsTGF5ZXJDbGFzcyIsIm1ha2VGYWtlQ2VsbExheWVyQ2xhc3MiLCJGYWtlQ2VsbExheWVyIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5Iiwidmlld3BvcnQiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsImdldFNoYWRlcnMiLCJ2cyIsIm1vZHVsZXMiLCJ1cGRhdGVTdGF0ZSIsIl9wYXJhbXMiLCJzdGF0ZSIsImZpbGxNb2RlbCIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwiamVzdCIsImZuIiwiZHJhdyIsIl9vcHRzIiwiZGVzY3JpYmUiLCJ0ZXN0IiwiX2xheWVyJHN0YXRlJGZpbGxNb2RlIiwiR2xvYmVHcmlkQ2VsbCIsImxheWVyIiwiY29sb3JUZXh0dXJlIiwiaWQiLCJjaGFuZ2VGbGFncyIsImV4dGVuc2lvbnNDaGFuZ2VkIiwicHJvcHMiLCJjb2xvclJhbmdlIiwib2xkUHJvcHMiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImdyaWQiLCJfbGF5ZXIkc3RhdGUkZmlsbE1vZGUyIiwiR2xvYmVIZXhDZWxsIiwiaGV4YWdvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllci11dGlscy9nbG9iZS1jZWxsLXV0aWxzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHttYWtlR2xvYmVDZWxsTGF5ZXJDbGFzc30gZnJvbSAnLi9nbG9iZS1jZWxsLXV0aWxzJztcblxuZnVuY3Rpb24gbWFrZUZha2VDZWxsTGF5ZXJDbGFzcygpIHtcbiAgcmV0dXJuIGNsYXNzIEZha2VDZWxsTGF5ZXIge1xuICAgIHN0YXRlOiB7XG4gICAgICBmaWxsTW9kZWw/OiB7c2hhZGVySW5wdXRzOiB7c2V0UHJvcHM6IGplc3QuTW9ja319O1xuICAgICAgY29sb3JUZXh0dXJlPzoge2lkOiBzdHJpbmd9O1xuICAgIH0gPSB7fTtcbiAgICBjb250ZXh0ID0ge3ZpZXdwb3J0OiB7fX07XG5cbiAgICBnZXRTaGFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdnM6ICd2b2lkIG1haW4odm9pZCkgeyBnbF9Qb3NpdGlvbiA9IHByb2plY3RfY29tbW9uX3Bvc2l0aW9uX3RvX2NsaXBzcGFjZShnZW9tZXRyeS5wb3NpdGlvbik7IH0nLFxuICAgICAgICBtb2R1bGVzOiBbXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBkZWNrLmdsIENvbHVtbkxheWVyIHJlY3JlYXRlcyBmaWxsTW9kZWwgb24gZXh0ZW5zaW9uc0NoYW5nZWQgYW5kIGRvZXMgbm90XG4gICAgLy8gY29weSBvdmVyIHRoZSBjb2xvclJhbmdlIHRleHR1cmUgYmluZGluZy4gR3JpZENlbGxMYXllciAvIEhleGFnb25DZWxsTGF5ZXJcbiAgICAvLyBvbmx5IGJpbmQgdGhhdCB0ZXh0dXJlIHdoZW4gdGhlIGNvbG9yUmFuZ2UgKnByb3AqIGNoYW5nZXMuXG4gICAgdXBkYXRlU3RhdGUoX3BhcmFtcz86IHVua25vd24pIHtcbiAgICAgIHRoaXMuc3RhdGUuZmlsbE1vZGVsID0ge3NoYWRlcklucHV0czoge3NldFByb3BzOiBqZXN0LmZuKCl9fTtcbiAgICB9XG5cbiAgICBkcmF3KF9vcHRzPzogdW5rbm93bikge1xuICAgICAgLy8gbm8tb3Agc3R1YiBzbyBHbG9iZUNlbGxMYXllci5kcmF3IGNhbiBjYWxsIHN1cGVyLmRyYXcoKVxuICAgIH1cbiAgfTtcbn1cblxuZGVzY3JpYmUoJ2dsb2JlLWNlbGwtdXRpbHMgY29sb3JSYW5nZSByZWJpbmQnLCAoKSA9PiB7XG4gIHRlc3QoJ3JlYmluZHMgY29sb3JSYW5nZSBvbnRvIGEgcmVidWlsdCBmaWxsTW9kZWwgKGdyaWQpJywgKCkgPT4ge1xuICAgIGNvbnN0IEdsb2JlR3JpZENlbGwgPSBtYWtlR2xvYmVDZWxsTGF5ZXJDbGFzcyhtYWtlRmFrZUNlbGxMYXllckNsYXNzKCksICdncmlkJyk7XG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgR2xvYmVHcmlkQ2VsbCgpO1xuICAgIGxheWVyLnN0YXRlLmNvbG9yVGV4dHVyZSA9IHtpZDogJ2NvbG9yLXJhbmdlLXRleCd9O1xuXG4gICAgbGF5ZXIudXBkYXRlU3RhdGUoe1xuICAgICAgY2hhbmdlRmxhZ3M6IHtleHRlbnNpb25zQ2hhbmdlZDogdHJ1ZX0sXG4gICAgICBwcm9wczoge2NvbG9yUmFuZ2U6IFsnI2ZmZiddfSxcbiAgICAgIG9sZFByb3BzOiB7Y29sb3JSYW5nZTogWycjZmZmJ119XG4gICAgfSk7XG5cbiAgICBleHBlY3QobGF5ZXIuc3RhdGUuZmlsbE1vZGVsPy5zaGFkZXJJbnB1dHMuc2V0UHJvcHMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIGdyaWQ6IHtjb2xvclJhbmdlOiBsYXllci5zdGF0ZS5jb2xvclRleHR1cmV9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JlYmluZHMgY29sb3JSYW5nZSBvbnRvIGEgcmVidWlsdCBmaWxsTW9kZWwgKGhleGFnb24pJywgKCkgPT4ge1xuICAgIGNvbnN0IEdsb2JlSGV4Q2VsbCA9IG1ha2VHbG9iZUNlbGxMYXllckNsYXNzKG1ha2VGYWtlQ2VsbExheWVyQ2xhc3MoKSwgJ2hleGFnb24nKTtcbiAgICBjb25zdCBsYXllciA9IG5ldyBHbG9iZUhleENlbGwoKTtcbiAgICBsYXllci5zdGF0ZS5jb2xvclRleHR1cmUgPSB7aWQ6ICdjb2xvci1yYW5nZS10ZXgnfTtcblxuICAgIGxheWVyLnVwZGF0ZVN0YXRlKHtcbiAgICAgIGNoYW5nZUZsYWdzOiB7ZXh0ZW5zaW9uc0NoYW5nZWQ6IHRydWV9LFxuICAgICAgcHJvcHM6IHtjb2xvclJhbmdlOiBbJyNmZmYnXX0sXG4gICAgICBvbGRQcm9wczoge2NvbG9yUmFuZ2U6IFsnI2ZmZiddfVxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGxheWVyLnN0YXRlLmZpbGxNb2RlbD8uc2hhZGVySW5wdXRzLnNldFByb3BzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICBoZXhhZ29uOiB7Y29sb3JSYW5nZTogbGF5ZXIuc3RhdGUuY29sb3JUZXh0dXJlfVxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkcmF3IGFsc28gcmViaW5kcyBjb2xvclJhbmdlIHNvIHRoZSBmaXJzdCBmcmFtZSBhZnRlciByZWJ1aWxkIGlzIHZhbGlkJywgKCkgPT4ge1xuICAgIGNvbnN0IEdsb2JlR3JpZENlbGwgPSBtYWtlR2xvYmVDZWxsTGF5ZXJDbGFzcyhtYWtlRmFrZUNlbGxMYXllckNsYXNzKCksICdncmlkJyk7XG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgR2xvYmVHcmlkQ2VsbCgpO1xuICAgIGNvbnN0IHNldFByb3BzID0gamVzdC5mbigpO1xuICAgIGxheWVyLnN0YXRlLmNvbG9yVGV4dHVyZSA9IHtpZDogJ2NvbG9yLXJhbmdlLXRleCd9O1xuICAgIGxheWVyLnN0YXRlLmZpbGxNb2RlbCA9IHtzaGFkZXJJbnB1dHM6IHtzZXRQcm9wc319O1xuXG4gICAgbGF5ZXIuZHJhdyh7fSk7XG5cbiAgICBleHBlY3Qoc2V0UHJvcHMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIGdyaWQ6IHtjb2xvclJhbmdlOiBsYXllci5zdGF0ZS5jb2xvclRleHR1cmV9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsdUJBQXVCLFFBQU8sb0JBQW9CO0FBRTFELFNBQVNDLHNCQUFzQkEsQ0FBQSxFQUFHO0VBQ2hDO0lBQUEsU0FBQUMsY0FBQTtNQUFBQyxlQUFBLE9BQUFELGFBQUE7TUFBQUUsZUFBQSxnQkFJTSxDQUFDLENBQUM7TUFBQUEsZUFBQSxrQkFDSTtRQUFDQyxRQUFRLEVBQUUsQ0FBQztNQUFDLENBQUM7SUFBQTtJQUFBLE9BQUFDLFlBQUEsQ0FBQUosYUFBQTtNQUFBSyxHQUFBO01BQUFDLEtBQUEsRUFF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
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ import { console as Console } from 'global/window';
5
+
6
+ /*
7
+ * Amendment to default layer vertex shader
8
+ * @param {string} vs
9
+ * @param {string} type
10
+ * @param {string} originalText
11
+ * @param {string} testToReplace
12
+ * @return {string} output shader
13
+ *
14
+ */
15
+ export function editShader(vs, type, originalText, testToReplace) {
16
+ if (!vs.includes(originalText)) {
17
+ // Here we call Console.error when we fail to edit deck.gl shader
18
+ // This should be caught by layer test
19
+ Console.error("Cannot edit ".concat(type, " layer shader"));
20
+ return vs;
21
+ }
22
+ return vs.replace(originalText, testToReplace);
23
+ }
24
+ export function insertBefore(vs, type, insertBeforeText, textToInsert) {
25
+ var at = vs.indexOf(insertBeforeText);
26
+ if (at < 0) {
27
+ Console.error("Cannot edit ".concat(type, " layer shader"));
28
+ return vs;
29
+ }
30
+ return vs.slice(0, at) + textToInsert + vs.slice(at);
31
+ }
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25zb2xlIiwiQ29uc29sZSIsImVkaXRTaGFkZXIiLCJ2cyIsInR5cGUiLCJvcmlnaW5hbFRleHQiLCJ0ZXN0VG9SZXBsYWNlIiwiaW5jbHVkZXMiLCJlcnJvciIsImNvbmNhdCIsInJlcGxhY2UiLCJpbnNlcnRCZWZvcmUiLCJpbnNlcnRCZWZvcmVUZXh0IiwidGV4dFRvSW5zZXJ0IiwiYXQiLCJpbmRleE9mIiwic2xpY2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5ZXItdXRpbHMvc2hhZGVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcblxuLypcbiAqIEFtZW5kbWVudCB0byBkZWZhdWx0IGxheWVyIHZlcnRleCBzaGFkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXN0VG9SZXBsYWNlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IG91dHB1dCBzaGFkZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZGl0U2hhZGVyKHZzOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgb3JpZ2luYWxUZXh0OiBzdHJpbmcsIHRlc3RUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoIXZzLmluY2x1ZGVzKG9yaWdpbmFsVGV4dCkpIHtcbiAgICAvLyBIZXJlIHdlIGNhbGwgQ29uc29sZS5lcnJvciB3aGVuIHdlIGZhaWwgdG8gZWRpdCBkZWNrLmdsIHNoYWRlclxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBsYXllciB0ZXN0XG4gICAgQ29uc29sZS5lcnJvcihgQ2Fubm90IGVkaXQgJHt0eXBlfSBsYXllciBzaGFkZXJgKTtcbiAgICByZXR1cm4gdnM7XG4gIH1cblxuICByZXR1cm4gdnMucmVwbGFjZShvcmlnaW5hbFRleHQsIHRlc3RUb1JlcGxhY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKFxuICB2czogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIGluc2VydEJlZm9yZVRleHQ6IHN0cmluZyxcbiAgdGV4dFRvSW5zZXJ0OiBzdHJpbmdcbikge1xuICBjb25zdCBhdCA9IHZzLmluZGV4T2YoaW5zZXJ0QmVmb3JlVGV4dCk7XG4gIGlmIChhdCA8IDApIHtcbiAgICBDb25zb2xlLmVycm9yKGBDYW5ub3QgZWRpdCAke3R5cGV9IGxheWVyIHNoYWRlcmApO1xuICAgIHJldHVybiB2cztcbiAgfVxuXG4gIHJldHVybiB2cy5zbGljZSgwLCBhdCkgKyB0ZXh0VG9JbnNlcnQgKyB2cy5zbGljZShhdCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxVQUFVQSxDQUFDQyxFQUFVLEVBQUVDLElBQVksRUFBRUMsWUFBb0IsRUFBRUMsYUFBcUIsRUFBRTtFQUNoRyxJQUFJLENBQUNILEVBQUUsQ0FBQ0ksUUFBUSxDQUFDRixZQUFZLENBQUMsRUFBRTtJQUM5QjtJQUNBO0lBQ0FKLE9BQU8sQ0FBQ08sS0FBSyxnQkFBQUMsTUFBQSxDQUFnQkwsSUFBSSxrQkFBZSxDQUFDO0lBQ2pELE9BQU9ELEVBQUU7RUFDWDtFQUVBLE9BQU9BLEVBQUUsQ0FBQ08sT0FBTyxDQUFDTCxZQUFZLEVBQUVDLGFBQWEsQ0FBQztBQUNoRDtBQUVBLE9BQU8sU0FBU0ssWUFBWUEsQ0FDMUJSLEVBQVUsRUFDVkMsSUFBWSxFQUNaUSxnQkFBd0IsRUFDeEJDLFlBQW9CLEVBQ3BCO0VBQ0EsSUFBTUMsRUFBRSxHQUFHWCxFQUFFLENBQUNZLE9BQU8sQ0FBQ0gsZ0JBQWdCLENBQUM7RUFDdkMsSUFBSUUsRUFBRSxHQUFHLENBQUMsRUFBRTtJQUNWYixPQUFPLENBQUNPLEtBQUssZ0JBQUFDLE1BQUEsQ0FBZ0JMLElBQUksa0JBQWUsQ0FBQztJQUNqRCxPQUFPRCxFQUFFO0VBQ1g7RUFFQSxPQUFPQSxFQUFFLENBQUNhLEtBQUssQ0FBQyxDQUFDLEVBQUVGLEVBQUUsQ0FBQyxHQUFHRCxZQUFZLEdBQUdWLEVBQUUsQ0FBQ2EsS0FBSyxDQUFDRixFQUFFLENBQUM7QUFDdEQiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,91 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
6
+ import _get from "@babel/runtime/helpers/esm/get";
7
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
8
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
9
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
10
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
+ function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ // SPDX-License-Identifier: MIT
15
+ // Copyright contributors to the kepler.gl project
16
+
17
+ import { LineLayer } from '@deck.gl/layers';
18
+ import { editShader } from '../';
19
+ var elevationScaleUniforms = {
20
+ name: 'elevationScale',
21
+ vs: "uniform elevationScaleUniforms {\n float elevationScale;\n} elevationScaleProps;\n",
22
+ uniformTypes: {
23
+ elevationScale: 'f32'
24
+ }
25
+ };
26
+ var defaultProps = _objectSpread(_objectSpread({}, LineLayer.defaultProps), {}, {
27
+ getTargetColor: function getTargetColor(x) {
28
+ return x.color || [0, 0, 0, 255];
29
+ }
30
+ });
31
+ function addInstanceColorShader(vs) {
32
+ var targetColorVs = editShader(vs, 'line target color vs', 'in vec4 instanceColors;', 'in vec4 instanceColors; in vec4 instanceTargetColors;');
33
+ return editShader(targetColorVs, 'line color vs', 'vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);', "vec4 color = mix(instanceColors, instanceTargetColors, positions.x);" + "vColor = vec4(color.rgb, color.a * layer.opacity);");
34
+ }
35
+ function addElevationScale(vs) {
36
+ return editShader(vs, 'line elevation scale vs - multiply by elevation scale', "geometry.worldPosition = instanceSourcePositions;\ngeometry.worldPositionAlt = instanceTargetPositions;\nvec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;", "vec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;\nsource_world.z *= elevationScaleProps.elevationScale;\ntarget_world.z *= elevationScaleProps.elevationScale;\ngeometry.worldPosition = source_world;\ngeometry.worldPositionAlt = target_world;");
37
+ }
38
+ var EnhancedLineLayer = /*#__PURE__*/function (_LineLayer) {
39
+ function EnhancedLineLayer() {
40
+ _classCallCheck(this, EnhancedLineLayer);
41
+ return _callSuper(this, EnhancedLineLayer, arguments);
42
+ }
43
+ _inherits(EnhancedLineLayer, _LineLayer);
44
+ return _createClass(EnhancedLineLayer, [{
45
+ key: "getShaders",
46
+ value: function getShaders() {
47
+ var shaders = _superPropGet(EnhancedLineLayer, "getShaders", this, 3)([]);
48
+ var vs = addInstanceColorShader(shaders.vs);
49
+ vs = addElevationScale(vs);
50
+ return _objectSpread(_objectSpread({}, shaders), {}, {
51
+ vs: vs,
52
+ modules: [].concat(_toConsumableArray(shaders.modules || []), [elevationScaleUniforms])
53
+ });
54
+ }
55
+ }, {
56
+ key: "draw",
57
+ value: function draw(opts) {
58
+ var model = this.state.model;
59
+ if (model) {
60
+ var _this$props$elevation;
61
+ model.shaderInputs.setProps({
62
+ elevationScale: {
63
+ elevationScale: (_this$props$elevation = this.props.elevationScale) !== null && _this$props$elevation !== void 0 ? _this$props$elevation : 1
64
+ }
65
+ });
66
+ }
67
+ _superPropGet(EnhancedLineLayer, "draw", this, 3)([opts]);
68
+ }
69
+ }, {
70
+ key: "initializeState",
71
+ value: function initializeState() {
72
+ var _this$props$colorForm;
73
+ _superPropGet(EnhancedLineLayer, "initializeState", this, 3)([]);
74
+ var _ref = this.state,
75
+ attributeManager = _ref.attributeManager;
76
+ attributeManager.addInstanced({
77
+ instanceTargetColors: {
78
+ size: (_this$props$colorForm = this.props.colorFormat) === null || _this$props$colorForm === void 0 ? void 0 : _this$props$colorForm.length,
79
+ type: 'unorm8',
80
+ transition: true,
81
+ accessor: 'getTargetColor',
82
+ defaultValue: [0, 0, 0, 255]
83
+ }
84
+ });
85
+ }
86
+ }]);
87
+ }(LineLayer);
88
+ export { EnhancedLineLayer as default };
89
+ EnhancedLineLayer.layerName = 'EnhancedLineLayer';
90
+ EnhancedLineLayer.defaultProps = defaultProps;
91
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaW5lTGF5ZXIiLCJlZGl0U2hhZGVyIiwiZWxldmF0aW9uU2NhbGVVbmlmb3JtcyIsIm5hbWUiLCJ2cyIsInVuaWZvcm1UeXBlcyIsImVsZXZhdGlvblNjYWxlIiwiZGVmYXVsdFByb3BzIiwiX29iamVjdFNwcmVhZCIsImdldFRhcmdldENvbG9yIiwieCIsImNvbG9yIiwiYWRkSW5zdGFuY2VDb2xvclNoYWRlciIsInRhcmdldENvbG9yVnMiLCJhZGRFbGV2YXRpb25TY2FsZSIsIkVuaGFuY2VkTGluZUxheWVyIiwiX0xpbmVMYXllciIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsImdldFNoYWRlcnMiLCJzaGFkZXJzIiwiX3N1cGVyUHJvcEdldCIsIm1vZHVsZXMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJkcmF3Iiwib3B0cyIsIm1vZGVsIiwic3RhdGUiLCJfdGhpcyRwcm9wcyRlbGV2YXRpb24iLCJzaGFkZXJJbnB1dHMiLCJzZXRQcm9wcyIsInByb3BzIiwiaW5pdGlhbGl6ZVN0YXRlIiwiX3RoaXMkcHJvcHMkY29sb3JGb3JtIiwiX3JlZiIsImF0dHJpYnV0ZU1hbmFnZXIiLCJhZGRJbnN0YW5jZWQiLCJpbnN0YW5jZVRhcmdldENvbG9ycyIsInNpemUiLCJjb2xvckZvcm1hdCIsImxlbmd0aCIsInR5cGUiLCJ0cmFuc2l0aW9uIiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0IiwibGF5ZXJOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpbmUtbGF5ZXIvbGluZS1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0xpbmVMYXllciwgTGluZUxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQgdHlwZSB7Q29sb3IsIEF0dHJpYnV0ZU1hbmFnZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi8nO1xuXG50eXBlIFJHQkFDb2xvciA9IENvbG9yO1xuXG5jb25zdCBlbGV2YXRpb25TY2FsZVVuaWZvcm1zID0ge1xuICBuYW1lOiAnZWxldmF0aW9uU2NhbGUnLFxuICB2czogYHVuaWZvcm0gZWxldmF0aW9uU2NhbGVVbmlmb3JtcyB7XG4gIGZsb2F0IGVsZXZhdGlvblNjYWxlO1xufSBlbGV2YXRpb25TY2FsZVByb3BzO1xuYCxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgZWxldmF0aW9uU2NhbGU6ICdmMzInXG4gIH1cbn07XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgLi4uTGluZUxheWVyLmRlZmF1bHRQcm9wcyxcbiAgZ2V0VGFyZ2V0Q29sb3I6IHggPT4geC5jb2xvciB8fCBbMCwgMCwgMCwgMjU1XVxufTtcblxuZnVuY3Rpb24gYWRkSW5zdGFuY2VDb2xvclNoYWRlcih2cykge1xuICBjb25zdCB0YXJnZXRDb2xvclZzID0gZWRpdFNoYWRlcihcbiAgICB2cyxcbiAgICAnbGluZSB0YXJnZXQgY29sb3IgdnMnLFxuICAgICdpbiB2ZWM0IGluc3RhbmNlQ29sb3JzOycsXG4gICAgJ2luIHZlYzQgaW5zdGFuY2VDb2xvcnM7IGluIHZlYzQgaW5zdGFuY2VUYXJnZXRDb2xvcnM7J1xuICApO1xuXG4gIHJldHVybiBlZGl0U2hhZGVyKFxuICAgIHRhcmdldENvbG9yVnMsXG4gICAgJ2xpbmUgY29sb3IgdnMnLFxuICAgICd2Q29sb3IgPSB2ZWM0KGluc3RhbmNlQ29sb3JzLnJnYiwgaW5zdGFuY2VDb2xvcnMuYSAqIGxheWVyLm9wYWNpdHkpOycsXG4gICAgYHZlYzQgY29sb3IgPSBtaXgoaW5zdGFuY2VDb2xvcnMsIGluc3RhbmNlVGFyZ2V0Q29sb3JzLCBwb3NpdGlvbnMueCk7YCArXG4gICAgICBgdkNvbG9yID0gdmVjNChjb2xvci5yZ2IsIGNvbG9yLmEgKiBsYXllci5vcGFjaXR5KTtgXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZXZhdGlvblNjYWxlKHZzKSB7XG4gIHJldHVybiBlZGl0U2hhZGVyKFxuICAgIHZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSB2cyAtIG11bHRpcGx5IGJ5IGVsZXZhdGlvbiBzY2FsZScsXG4gICAgYGdlb21ldHJ5LndvcmxkUG9zaXRpb24gPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbmdlb21ldHJ5LndvcmxkUG9zaXRpb25BbHQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbnZlYzMgc291cmNlX3dvcmxkID0gaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG52ZWMzIHRhcmdldF93b3JsZCA9IGluc3RhbmNlVGFyZ2V0UG9zaXRpb25zO2AsXG4gICAgYHZlYzMgc291cmNlX3dvcmxkID0gaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG52ZWMzIHRhcmdldF93b3JsZCA9IGluc3RhbmNlVGFyZ2V0UG9zaXRpb25zO1xuc291cmNlX3dvcmxkLnogKj0gZWxldmF0aW9uU2NhbGVQcm9wcy5lbGV2YXRpb25TY2FsZTtcbnRhcmdldF93b3JsZC56ICo9IGVsZXZhdGlvblNjYWxlUHJvcHMuZWxldmF0aW9uU2NhbGU7XG5nZW9tZXRyeS53b3JsZFBvc2l0aW9uID0gc291cmNlX3dvcmxkO1xuZ2VvbWV0cnkud29ybGRQb3NpdGlvbkFsdCA9IHRhcmdldF93b3JsZDtgXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuaGFuY2VkTGluZUxheWVyIGV4dGVuZHMgTGluZUxheWVyPFxuICBhbnksXG4gIExpbmVMYXllclByb3BzPGFueT4gJiB7ZWxldmF0aW9uU2NhbGU6IG51bWJlcjsgZ2V0VGFyZ2V0Q29sb3I6IFJHQkFDb2xvcn1cbj4ge1xuICBnZXRTaGFkZXJzKCkge1xuICAgIGNvbnN0IHNoYWRlcnMgPSBzdXBlci5nZXRTaGFkZXJzKCk7XG5cbiAgICBsZXQgdnMgPSBhZGRJbnN0YW5jZUNvbG9yU2hhZGVyKHNoYWRlcnMudnMpO1xuICAgIHZzID0gYWRkRWxldmF0aW9uU2NhbGUodnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYWRlcnMsXG4gICAgICB2cyxcbiAgICAgIG1vZHVsZXM6IFsuLi4oc2hhZGVycy5tb2R1bGVzIHx8IFtdKSwgZWxldmF0aW9uU2NhbGVVbmlmb3Jtc11cbiAgICB9O1xuICB9XG5cbiAgZHJhdyhvcHRzKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnN0YXRlLm1vZGVsO1xuICAgIGlmIChtb2RlbCkge1xuICAgICAgbW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgICAgZWxldmF0aW9uU2NhbGU6IHtcbiAgICAgICAgICBlbGV2YXRpb25TY2FsZTogdGhpcy5wcm9wcy5lbGV2YXRpb25TY2FsZSA/PyAxXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlci5kcmF3KG9wdHMpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemVTdGF0ZSgpO1xuICAgIGNvbnN0IHthdHRyaWJ1dGVNYW5hZ2VyfSA9IHRoaXMuc3RhdGUgYXMge2F0dHJpYnV0ZU1hbmFnZXI6IEF0dHJpYnV0ZU1hbmFnZXJ9O1xuICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlVGFyZ2V0Q29sb3JzOiB7XG4gICAgICAgIHNpemU6IHRoaXMucHJvcHMuY29sb3JGb3JtYXQ/Lmxlbmd0aCxcbiAgICAgICAgdHlwZTogJ3Vub3JtOCcsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0VGFyZ2V0Q29sb3InLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLCAwLCAwLCAyNTVdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuRW5oYW5jZWRMaW5lTGF5ZXIubGF5ZXJOYW1lID0gJ0VuaGFuY2VkTGluZUxheWVyJztcbkVuaGFuY2VkTGluZUxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsU0FBUyxRQUF1QixpQkFBaUI7QUFFekQsU0FBUUMsVUFBVSxRQUFPLEtBQUs7QUFJOUIsSUFBTUMsc0JBQXNCLEdBQUc7RUFDN0JDLElBQUksRUFBRSxnQkFBZ0I7RUFDdEJDLEVBQUUsdUZBR0g7RUFDQ0MsWUFBWSxFQUFFO0lBQ1pDLGNBQWMsRUFBRTtFQUNsQjtBQUNGLENBQUM7QUFFRCxJQUFNQyxZQUFZLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNiUixTQUFTLENBQUNPLFlBQVk7RUFDekJFLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBRUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQUE7QUFBQSxFQUMvQztBQUVELFNBQVNDLHNCQUFzQkEsQ0FBQ1IsRUFBRSxFQUFFO0VBQ2xDLElBQU1TLGFBQWEsR0FBR1osVUFBVSxDQUM5QkcsRUFBRSxFQUNGLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsdURBQ0YsQ0FBQztFQUVELE9BQU9ILFVBQVUsQ0FDZlksYUFBYSxFQUNiLGVBQWUsRUFDZixzRUFBc0UsRUFDdEUsNkhBRUYsQ0FBQztBQUNIO0FBRUEsU0FBU0MsaUJBQWlCQSxDQUFDVixFQUFFLEVBQUU7RUFDN0IsT0FBT0gsVUFBVSxDQUNmRyxFQUFFLEVBQ0YsdURBQXVELHNlQVd6RCxDQUFDO0FBQ0g7QUFBQyxJQUVvQlcsaUJBQWlCLDBCQUFBQyxVQUFBO0VBQUEsU0FBQUQsa0JBQUE7SUFBQUUsZUFBQSxPQUFBRixpQkFBQTtJQUFBLE9BQUFHLFVBQUEsT0FBQUgsaUJBQUEsRUFBQUksU0FBQTtFQUFBO0VBQUFDLFNBQUEsQ0FBQUwsaUJBQUEsRUFBQUMsVUFBQTtFQUFBLE9BQUFLLFlBQUEsQ0FBQU4saUJBQUE7SUFBQU8sR0FBQTtJQUFBQyxLQUFBLEVBSXBDLFNBQUFDLFVBQVVBLENBQUEsRUFBRztNQUNYLElBQU1DLE9BQU8sR0FBQUMsYUFBQSxDQUFBWCxpQkFBQSw0QkFBcUI7TUFFbEMsSUFBSVgsRUFBRSxHQUFHUSxzQkFBc0IsQ0FBQ2EsT0FBTyxDQUFDckIsRUFBRSxDQUFDO01BQzNDQSxFQUFFLEdBQUdVLGlCQUFpQixDQUFDVixFQUFFLENBQUM7TUFFMUIsT0FBQUksYUFBQSxDQUFBQSxhQUFBLEtBQ0tpQixPQUFPO1FBQ1ZyQixFQUFFLEVBQUZBLEVBQUU7UUFDRnVCLE9BQU8sS0FBQUMsTUFBQSxDQUFBQyxrQkFBQSxDQUFPSixPQUFPLENBQUNFLE9BQU8sSUFBSSxFQUFFLElBQUd6QixzQkFBc0I7TUFBQztJQUVqRTtFQUFDO0lBQUFvQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBTyxJQUFJQSxDQUFDQyxJQUFJLEVBQUU7TUFDVCxJQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDQyxLQUFLLENBQUNELEtBQUs7TUFDOUIsSUFBSUEsS0FBSyxFQUFFO1FBQUEsSUFBQUUscUJBQUE7UUFDVEYsS0FBSyxDQUFDRyxZQUFZLENBQUNDLFFBQVEsQ0FBQztVQUMxQjlCLGNBQWMsRUFBRTtZQUNkQSxjQUFjLEdBQUE0QixxQkFBQSxHQUFFLElBQUksQ0FBQ0csS0FBSyxDQUFDL0IsY0FBYyxjQUFBNEIscUJBQUEsY0FBQUEscUJBQUEsR0FBSTtVQUMvQztRQUNGLENBQUMsQ0FBQztNQUNKO01BQ0FSLGFBQUEsQ0FBQVgsaUJBQUEsb0JBQVdnQixJQUFJO0lBQ2pCO0VBQUM7SUFBQVQsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWUsZUFBZUEsQ0FBQSxFQUFHO01BQUEsSUFBQUMscUJBQUE7TUFDaEJiLGFBQUEsQ0FBQVgsaUJBQUE7TUFDQSxJQUFBeUIsSUFBQSxHQUEyQixJQUFJLENBQUNQLEtBQUs7UUFBOUJRLGdCQUFnQixHQUFBRCxJQUFBLENBQWhCQyxnQkFBZ0I7TUFDdkJBLGdCQUFnQixDQUFDQyxZQUFZLENBQUM7UUFDNUJDLG9CQUFvQixFQUFFO1VBQ3BCQyxJQUFJLEdBQUFMLHFCQUFBLEdBQUUsSUFBSSxDQUFDRixLQUFLLENBQUNRLFdBQVcsY0FBQU4scUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3Qk8sTUFBTTtVQUNwQ0MsSUFBSSxFQUFFLFFBQVE7VUFDZEMsVUFBVSxFQUFFLElBQUk7VUFDaEJDLFFBQVEsRUFBRSxnQkFBZ0I7VUFDMUJDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7UUFDN0I7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0FBQUEsRUF6QzRDbEQsU0FBUztBQUFBLFNBQW5DZSxpQkFBaUIsSUFBQW9DLE9BQUE7QUE0Q3RDcEMsaUJBQWlCLENBQUNxQyxTQUFTLEdBQUcsbUJBQW1CO0FBQ2pEckMsaUJBQWlCLENBQUNSLFlBQVksR0FBR0EsWUFBWSIsImlnbm9yZUxpc3QiOltdfQ==