@deck.gl/carto 9.0.17 → 9.0.18

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.
package/dist/index.cjs CHANGED
@@ -31,7 +31,7 @@ __export(dist_exports, {
31
31
  CARTO_SOURCES: () => CARTO_SOURCES,
32
32
  CartoAPIError: () => CartoAPIError,
33
33
  H3TileLayer: () => H3TileLayer,
34
- QuadbinHeatmapTileLayer: () => quadbin_heatmap_tile_layer_default,
34
+ HeatmapTileLayer: () => heatmap_tile_layer_default,
35
35
  QuadbinTileLayer: () => QuadbinTileLayer,
36
36
  RasterTileLayer: () => RasterTileLayer,
37
37
  SOURCE_DEFAULTS: () => SOURCE_DEFAULTS,
@@ -273,7 +273,7 @@ var isObject = (x) => x !== null && typeof x === "object";
273
273
  var isPureObject = (x) => isObject(x) && x.constructor === {}.constructor;
274
274
 
275
275
  // dist/layers/schema/carto-raster-tile-loader.js
276
- var VERSION = true ? "9.0.17" : "latest";
276
+ var VERSION = true ? "9.0.18" : "latest";
277
277
  var id = "cartoRasterTile";
278
278
  var DEFAULT_OPTIONS = {
279
279
  cartoRasterTile: {
@@ -544,7 +544,7 @@ function binaryToSpatialjson(binary) {
544
544
  }
545
545
 
546
546
  // dist/layers/schema/carto-spatial-tile-loader.js
547
- var VERSION2 = true ? "9.0.17" : "latest";
547
+ var VERSION2 = true ? "9.0.18" : "latest";
548
548
  var id2 = "cartoSpatialTile";
549
549
  var DEFAULT_OPTIONS2 = {
550
550
  cartoSpatialTile: {
@@ -775,280 +775,12 @@ var H3TileLayer = _H3TileLayer;
775
775
  _H3TileLayer.defaultProps = defaultProps2;
776
776
  })();
777
777
 
778
- // dist/layers/point-label-layer.js
779
- var import_core6 = require("@deck.gl/core");
780
- var import_layers = require("@deck.gl/layers");
781
- var [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];
782
- var _EnhancedTextBackgroundLayer = class extends import_layers._TextBackgroundLayer {
783
- getShaders() {
784
- const shaders = super.getShaders();
785
- let vs = shaders.vs;
786
- vs = vs.replaceAll("padding.", "_padding.");
787
- vs = vs.replace("void main(void) {", "void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);");
788
- return { ...shaders, vs };
789
- }
790
- };
791
- var EnhancedTextBackgroundLayer = _EnhancedTextBackgroundLayer;
792
- (() => {
793
- _EnhancedTextBackgroundLayer.layerName = "EnhancedTextBackgroundLayer";
794
- })();
795
- var _EnhancedTextLayer = class extends import_layers.TextLayer {
796
- filterSubLayer({ layer, renderPass }) {
797
- const background = layer.id.includes("primary-background");
798
- if (renderPass === "collision") {
799
- return background;
800
- }
801
- return !background;
802
- }
803
- };
804
- var EnhancedTextLayer = _EnhancedTextLayer;
805
- (() => {
806
- _EnhancedTextLayer.layerName = "EnhancedTextLayer";
807
- })();
808
- var defaultProps3 = {
809
- ...import_layers.TextLayer.defaultProps,
810
- getRadius: { type: "accessor", value: 1 },
811
- radiusScale: { type: "number", min: 0, value: 1 }
812
- };
813
- var _PointLabelLayer = class extends import_core6.CompositeLayer {
814
- calculatePixelOffset(secondary) {
815
- const { getTextAnchor: anchor, getAlignmentBaseline: alignment, getRadius, getSecondaryText, radiusScale, secondarySizeScale, sizeScale } = this.props;
816
- const xMult = anchor === "middle" ? 0 : anchor === "start" ? 1 : -1;
817
- const yMult = alignment === "center" ? 0 : alignment === "bottom" ? 1 : -1;
818
- const xPadding = sizeScale / 4;
819
- const yPadding = sizeScale * (1 + 1 / 4);
820
- const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
821
- let yOffset = secondary ? secondaryOffset : 0;
822
- if (anchor === "middle" && alignment === "top" && getSecondaryText) {
823
- yOffset -= secondaryOffset;
824
- yOffset -= secondarySizeScale;
825
- yOffset += sizeScale;
826
- }
827
- const radiusPadding = 1 + 1 / 4;
828
- return typeof getRadius === "function" ? (d, info) => {
829
- const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
830
- return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
831
- } : [
832
- xMult * (getRadius * radiusScale * radiusPadding + xPadding),
833
- yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset
834
- ];
835
- }
836
- calculateBackgroundPadding() {
837
- const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;
838
- const paddingX = 12 * sizeScale;
839
- const paddingY = 3 * sizeScale;
840
- const backgroundPadding = [0, 0, 0, 0];
841
- if (alignment === "top") {
842
- backgroundPadding[TOP] = paddingY;
843
- } else if (alignment === "bottom") {
844
- backgroundPadding[BOTTOM] = paddingY;
845
- } else {
846
- backgroundPadding[TOP] = 0.5 * paddingY;
847
- backgroundPadding[BOTTOM] = 0.5 * paddingY;
848
- }
849
- if (anchor === "start") {
850
- backgroundPadding[LEFT] = paddingX;
851
- } else if (anchor === "end") {
852
- backgroundPadding[RIGHT] = paddingX;
853
- } else {
854
- backgroundPadding[LEFT] = 0.5 * paddingX;
855
- backgroundPadding[RIGHT] = 0.5 * paddingX;
856
- }
857
- return backgroundPadding;
858
- }
859
- renderTextLayer(id4, { updateTriggers: updateTriggersOverride = {}, ...props }) {
860
- const { data, characterSet, fontFamily, fontSettings, fontWeight, outlineColor, outlineWidth, sizeScale, radiusScale, getAlignmentBaseline, getColor, getPosition, getTextAnchor, updateTriggers } = this.props;
861
- return new EnhancedTextLayer(this.getSubLayerProps({
862
- id: id4,
863
- data,
864
- characterSet,
865
- fontFamily,
866
- fontSettings,
867
- fontWeight,
868
- outlineColor,
869
- outlineWidth,
870
- sizeScale,
871
- getAlignmentBaseline,
872
- getColor,
873
- getPosition,
874
- getTextAnchor,
875
- updateTriggers: {
876
- ...updateTriggers,
877
- ...updateTriggersOverride,
878
- getPixelOffset: [
879
- updateTriggers.getRadius,
880
- updateTriggers.getTextAnchor,
881
- updateTriggers.getAlignmentBaseline,
882
- radiusScale,
883
- sizeScale
884
- ]
885
- }
886
- }), {
887
- getSize: 1,
888
- _subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }
889
- }, props);
890
- }
891
- renderLayers() {
892
- const { getText, getSecondaryColor, getSecondaryText, secondaryOutlineColor, secondarySizeScale, updateTriggers } = this.props;
893
- const getPixelOffset = this.calculatePixelOffset(false);
894
- const backgroundPadding = this.calculateBackgroundPadding();
895
- const out = [
896
- this.renderTextLayer(`${updateTriggers.getText}-primary`, {
897
- backgroundPadding,
898
- getText,
899
- getPixelOffset,
900
- background: true
901
- }),
902
- Boolean(getSecondaryText) && this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {
903
- getText: getSecondaryText,
904
- getPixelOffset: this.calculatePixelOffset(true),
905
- getAlignmentBaseline: "top",
906
- ...getSecondaryColor && { getColor: getSecondaryColor },
907
- ...secondarySizeScale && { sizeScale: secondarySizeScale },
908
- ...secondaryOutlineColor && { outlineColor: secondaryOutlineColor }
909
- })
910
- ];
911
- return out;
912
- }
913
- };
914
- var PointLabelLayer = _PointLabelLayer;
915
- (() => {
916
- _PointLabelLayer.layerName = "PointLabelLayer";
917
- })();
918
- (() => {
919
- _PointLabelLayer.defaultProps = defaultProps3;
920
- })();
921
-
922
- // dist/layers/quadbin-tile-layer.js
923
- var import_core7 = require("@deck.gl/core");
924
-
925
- // dist/layers/quadbin-layer.js
926
- var import_geo_layers4 = require("@deck.gl/geo-layers");
927
-
928
- // dist/layers/quadbin-utils.js
929
- var import_web_mercator = require("@math.gl/web-mercator");
930
- var import_quadbin2 = require("quadbin");
931
- var TILE_SIZE = 512;
932
- function quadbinToOffset(quadbin) {
933
- const { x, y, z } = (0, import_quadbin2.cellToTile)(quadbin);
934
- const scale = TILE_SIZE / (1 << z);
935
- return [x * scale, TILE_SIZE - y * scale, scale];
936
- }
937
- function quadbinToWorldBounds(quadbin, coverage) {
938
- const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);
939
- return [
940
- [xOffset, yOffset],
941
- [xOffset + coverage * scale, yOffset - coverage * scale]
942
- ];
943
- }
944
- function getQuadbinPolygon(quadbin, coverage = 1) {
945
- const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);
946
- const [w, n] = (0, import_web_mercator.worldToLngLat)(topLeft);
947
- const [e, s] = (0, import_web_mercator.worldToLngLat)(bottomRight);
948
- return [e, n, e, s, w, s, w, n, e, n];
949
- }
950
-
951
- // dist/layers/quadbin-layer.js
952
- var defaultProps4 = {
953
- getQuadbin: { type: "accessor", value: (d) => d.quadbin }
954
- };
955
- var _QuadbinLayer = class extends import_geo_layers4._GeoCellLayer {
956
- indexToBounds() {
957
- const { data, extruded, getQuadbin } = this.props;
958
- const coverage = extruded ? 0.99 : 1;
959
- return {
960
- data,
961
- _normalize: false,
962
- positionFormat: "XY",
963
- getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),
964
- updateTriggers: { getPolygon: coverage }
965
- };
966
- }
967
- };
968
- var QuadbinLayer = _QuadbinLayer;
969
- (() => {
970
- _QuadbinLayer.layerName = "QuadbinLayer";
971
- })();
972
- (() => {
973
- _QuadbinLayer.defaultProps = defaultProps4;
974
- })();
975
-
976
- // dist/layers/quadbin-tileset-2d.js
977
- var import_geo_layers5 = require("@deck.gl/geo-layers");
978
- var import_quadbin3 = require("quadbin");
979
- var QuadbinTileset2D = class extends import_geo_layers5._Tileset2D {
980
- getTileIndices(opts) {
981
- return super.getTileIndices(opts).map(import_quadbin3.tileToCell).map((q) => ({ q, i: (0, import_quadbin3.bigIntToHex)(q) }));
982
- }
983
- getTileId({ q, i }) {
984
- return i || (0, import_quadbin3.bigIntToHex)(q);
985
- }
986
- getTileMetadata({ q }) {
987
- return super.getTileMetadata((0, import_quadbin3.cellToTile)(q));
988
- }
989
- getTileZoom({ q }) {
990
- return Number((0, import_quadbin3.getResolution)(q));
991
- }
992
- getParentIndex({ q }) {
993
- return { q: (0, import_quadbin3.cellToParent)(q) };
994
- }
995
- };
996
-
997
- // dist/layers/quadbin-tile-layer.js
998
- var import_quadbin4 = require("quadbin");
999
- var renderSubLayers2 = (props) => {
1000
- const { data } = props;
1001
- if (!data || !data.length)
1002
- return null;
1003
- const isBigInt = typeof data[0].id === "bigint";
1004
- return new QuadbinLayer(props, {
1005
- getQuadbin: isBigInt ? (d) => d.id : (d) => (0, import_quadbin4.hexToBigInt)(d.id)
1006
- });
1007
- };
1008
- var defaultProps5 = {
1009
- data: TilejsonPropType,
1010
- tileSize: DEFAULT_TILE_SIZE
1011
- };
1012
- var _QuadbinTileLayer = class extends import_core7.CompositeLayer {
1013
- getLoadOptions() {
1014
- const loadOptions = super.getLoadOptions() || {};
1015
- const tileJSON = this.props.data;
1016
- injectAccessToken(loadOptions, tileJSON.accessToken);
1017
- loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: "quadbin" };
1018
- return loadOptions;
1019
- }
1020
- renderLayers() {
1021
- const tileJSON = this.props.data;
1022
- if (!tileJSON)
1023
- return null;
1024
- const { tiles: data, maxresolution: maxZoom } = tileJSON;
1025
- return [
1026
- new SpatialIndexTileLayer(this.props, {
1027
- id: `quadbin-tile-layer-${this.props.id}`,
1028
- data,
1029
- TilesetClass: QuadbinTileset2D,
1030
- renderSubLayers: renderSubLayers2,
1031
- maxZoom,
1032
- loadOptions: this.getLoadOptions()
1033
- })
1034
- ];
1035
- }
1036
- };
1037
- var QuadbinTileLayer = _QuadbinTileLayer;
1038
- (() => {
1039
- _QuadbinTileLayer.layerName = "QuadbinTileLayer";
1040
- })();
1041
- (() => {
1042
- _QuadbinTileLayer.defaultProps = defaultProps5;
1043
- })();
1044
-
1045
- // dist/layers/quadbin-heatmap-tile-layer.js
778
+ // dist/layers/heatmap-tile-layer.js
1046
779
  var import_quadbin5 = require("quadbin");
1047
- var import_core9 = require("@deck.gl/core");
1048
- var import_layers2 = require("@deck.gl/layers");
780
+ var import_core8 = require("@deck.gl/core");
781
+ var import_layers = require("@deck.gl/layers");
1049
782
 
1050
783
  // dist/layers/heatmap.js
1051
- var import_shadertools = require("@luma.gl/shadertools");
1052
784
  var fs = `uniform heatmapUniforms {
1053
785
  vec2 delta;
1054
786
  float radiusPixels;
@@ -1059,9 +791,9 @@ vec3 color3;
1059
791
  vec3 color4;
1060
792
  vec3 color5;
1061
793
  vec3 color6;
794
+ float intensity;
1062
795
  float opacity;
1063
796
  } heatmap;
1064
- const float SUPPORT = 8.0;
1065
797
  const vec4 STOPS = vec4(0.2, 0.4, 0.6, 0.8);
1066
798
  vec3 colorGradient(float value) {
1067
799
  vec3 c1;
@@ -1079,17 +811,16 @@ c1 = heatmap.color3; c2 = heatmap.color4;
1079
811
  } else if (value < STOPS.w) {
1080
812
  range = STOPS.zw;
1081
813
  c1 = heatmap.color4; c2 = heatmap.color5;
1082
- } else if (value < 1.0 ) {
814
+ } else {
1083
815
  range = vec2(STOPS.w, 1.0);
1084
816
  c1 = heatmap.color5; c2 = heatmap.color6;
1085
- } else {
1086
- range = vec2(1.0, 10.0);
1087
- c1 = heatmap.color6; c2 = vec3(255.0);
1088
817
  }
1089
- float f = (value - range.x) / (range.y - range.x);
818
+ float f = (clamp(value, 0.0, 1.0) - range.x) / (range.y - range.x);
1090
819
  return mix(c1, c2, f) / 255.0;
1091
820
  }
1092
821
  const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
822
+ const float MAX_VAL = SHIFT.z * 255.0;
823
+ const float SCALE = MAX_VAL / 8.0;
1093
824
  vec4 pack(float value) {
1094
825
  return vec4(mod(vec3(value, floor(value / SHIFT.yz)), 256.0), 255.0) / 255.0;
1095
826
  }
@@ -1099,12 +830,12 @@ return 255.0 * dot(color, SHIFT);
1099
830
  vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
1100
831
  bool firstPass = (heatmap.delta.y < 0.5);
1101
832
  float accumulator = 0.0;
1102
- float offset = 0.5 * random(vec3(12.9898, 78.233, 151.7182), 0.0);
1103
- const float sigma = SUPPORT / 3.0;
1104
- const float a = -0.5 / (sigma * sigma);
1105
- const float w0 = 0.3989422804014327 / sigma;
833
+ float SUPPORT = clamp(heatmap.radiusPixels / 2.0, 8.0, 32.0);
834
+ float sigma = SUPPORT / 3.0;
835
+ float a = -0.5 / (sigma * sigma);
836
+ float w0 = 0.3989422804014327 / sigma;
1106
837
  for (float t = -SUPPORT; t <= SUPPORT; t++) {
1107
- vec2 percent = (t * heatmap.delta + offset - 0.5) / SUPPORT;
838
+ vec2 percent = (t * heatmap.delta - 0.5) / SUPPORT;
1108
839
  vec2 delta = percent * heatmap.radiusPixels / texSize;
1109
840
  vec4 offsetColor = texture(source, texCoord + delta);
1110
841
  float value = unpack(offsetColor.rgb);
@@ -1114,7 +845,9 @@ accumulator += value * weight;
1114
845
  if (firstPass) {
1115
846
  return pack(accumulator);
1116
847
  }
1117
- float f = (accumulator - heatmap.colorDomain[0]) / (heatmap.colorDomain[1] - heatmap.colorDomain[0]);
848
+ float density = 10.0 * heatmap.intensity * accumulator / SCALE;
849
+ vec2 domain = heatmap.colorDomain;
850
+ float f = (density - domain[0]) / (domain[1] - domain[0]);
1118
851
  vec4 color = vec4(0.0);
1119
852
  color.rgb = colorGradient(f);
1120
853
  color.a = smoothstep(0.0, 0.1, f);
@@ -1143,6 +876,7 @@ var heatmap = {
1143
876
  color4: { value: [0, 0, 0] },
1144
877
  color5: { value: [0, 0, 0] },
1145
878
  color6: { value: [0, 0, 0] },
879
+ intensity: { value: 1, min: 0.1, max: 10 },
1146
880
  opacity: { value: 1, min: 0, max: 1 }
1147
881
  },
1148
882
  uniformTypes: {
@@ -1155,10 +889,11 @@ var heatmap = {
1155
889
  color4: "vec3<f32>",
1156
890
  color5: "vec3<f32>",
1157
891
  color6: "vec3<f32>",
892
+ intensity: "f32",
1158
893
  opacity: "f32"
1159
894
  },
1160
895
  getUniforms: (opts) => {
1161
- const { delta = [1, 0], colorRange = defaultColorRange, radiusPixels = 20, colorDomain = [0, 1], opacity = 1 } = opts;
896
+ const { delta = [1, 0], colorRange = defaultColorRange, radiusPixels = 20, colorDomain = [0, 1], intensity = 1, opacity = 1 } = opts;
1162
897
  const [color1, color2, color3, color4, color5, color6] = colorRange;
1163
898
  return {
1164
899
  delta,
@@ -1170,10 +905,10 @@ var heatmap = {
1170
905
  color6,
1171
906
  radiusPixels,
1172
907
  colorDomain,
908
+ intensity,
1173
909
  opacity
1174
910
  };
1175
911
  },
1176
- dependencies: [import_shadertools.random],
1177
912
  fs,
1178
913
  passes: [
1179
914
  { sampler: true, uniforms: { delta: [1, 0] } },
@@ -1182,7 +917,7 @@ var heatmap = {
1182
917
  };
1183
918
 
1184
919
  // dist/layers/post-process-utils.js
1185
- var import_core8 = require("@deck.gl/core");
920
+ var import_core6 = require("@deck.gl/core");
1186
921
  var TEXTURE_PROPS = {
1187
922
  format: "rgba8unorm",
1188
923
  mipmaps: false,
@@ -1199,7 +934,7 @@ function getPostProcessLayer(layer) {
1199
934
  }
1200
935
  return layer;
1201
936
  }
1202
- var _DrawCallbackLayer = class extends import_core8.Layer {
937
+ var _DrawCallbackLayer = class extends import_core6.Layer {
1203
938
  initializeState() {
1204
939
  this.id = `draw-callback-${getPostProcessLayer(this).props.id}`;
1205
940
  }
@@ -1209,125 +944,261 @@ var _DrawCallbackLayer = class extends import_core8.Layer {
1209
944
  };
1210
945
  var DrawCallbackLayer = _DrawCallbackLayer;
1211
946
  (() => {
1212
- _DrawCallbackLayer.layerName = "DrawCallbackLayer";
947
+ _DrawCallbackLayer.layerName = "DrawCallbackLayer";
948
+ })();
949
+ function RTTModifier(BaseLayer) {
950
+ var _a;
951
+ return _a = class extends BaseLayer {
952
+ draw(opts) {
953
+ const { moduleParameters } = opts;
954
+ const { picking } = moduleParameters;
955
+ const postProcessLayer = getPostProcessLayer(this);
956
+ if (!picking.isActive) {
957
+ postProcessLayer.enableRTT(opts);
958
+ }
959
+ super.draw(opts);
960
+ if (!picking.isActive) {
961
+ postProcessLayer.disableRTT();
962
+ }
963
+ }
964
+ }, (() => {
965
+ _a.layerName = `RTT-${BaseLayer.layerName}`;
966
+ })(), _a;
967
+ }
968
+ function PostProcessModifier(BaseLayer, effect) {
969
+ var _a;
970
+ return _a = class extends BaseLayer {
971
+ initializeState(context) {
972
+ super.initializeState(context);
973
+ this._createTextures();
974
+ this.internalState.postProcess = new import_core6.PostProcessEffect(effect, this.props);
975
+ this.internalState.postProcess.setup(context);
976
+ }
977
+ updateState(params) {
978
+ super.updateState(params);
979
+ this.internalState.postProcess.setProps(this.props);
980
+ }
981
+ renderLayers() {
982
+ let subLayers = super.renderLayers();
983
+ if (!subLayers) {
984
+ return null;
985
+ }
986
+ subLayers = Array.isArray(subLayers) ? subLayers : [subLayers];
987
+ return [...subLayers, new DrawCallbackLayer()];
988
+ }
989
+ _createTextures() {
990
+ const { device } = this.context;
991
+ this.internalState.renderBuffers = [0, 1].map((i) => {
992
+ return device.createFramebuffer({
993
+ id: `layer-fbo-${i}`,
994
+ colorAttachments: [device.createTexture(TEXTURE_PROPS)],
995
+ depthStencilAttachment: "depth16unorm"
996
+ });
997
+ });
998
+ }
999
+ _resizeBuffers(opts) {
1000
+ const { moduleParameters } = opts;
1001
+ const { viewport } = this.context;
1002
+ const width = moduleParameters.devicePixelRatio * viewport.width;
1003
+ const height = moduleParameters.devicePixelRatio * viewport.height;
1004
+ this.internalState.renderBuffers.forEach((fbo) => fbo.resize({ width, height }));
1005
+ }
1006
+ enableRTT(opts) {
1007
+ this._resizeBuffers(opts);
1008
+ this.internalState.originalRenderPass = this.context.renderPass;
1009
+ const [framebuffer] = this.internalState.renderBuffers;
1010
+ this.internalState.internalRenderPass = this.context.device.beginRenderPass({
1011
+ framebuffer,
1012
+ parameters: { viewport: [0, 0, framebuffer.width, framebuffer.height] },
1013
+ clearColor: this.internalState.renderInProgress ? false : [0, 0, 0, 0]
1014
+ });
1015
+ this.internalState.renderInProgress = true;
1016
+ this.context.renderPass = this.internalState.internalRenderPass;
1017
+ }
1018
+ disableRTT() {
1019
+ this.internalState.internalRenderPass.end();
1020
+ this.context.renderPass = this.internalState.originalRenderPass;
1021
+ }
1022
+ applyPostProcess() {
1023
+ if (!this.internalState.renderInProgress) {
1024
+ return;
1025
+ }
1026
+ const [inputBuffer, swapBuffer] = this.internalState.renderBuffers;
1027
+ const { framebuffer: target } = this.context.renderPass.props;
1028
+ this.internalState.postProcess.postRender({
1029
+ inputBuffer,
1030
+ swapBuffer,
1031
+ target
1032
+ });
1033
+ this.internalState.renderInProgress = false;
1034
+ }
1035
+ }, (() => {
1036
+ _a.layerName = `PostProcess${BaseLayer.layerName}`;
1037
+ })(), _a;
1038
+ }
1039
+
1040
+ // dist/layers/quadbin-tile-layer.js
1041
+ var import_core7 = require("@deck.gl/core");
1042
+
1043
+ // dist/layers/quadbin-layer.js
1044
+ var import_geo_layers4 = require("@deck.gl/geo-layers");
1045
+
1046
+ // dist/layers/quadbin-utils.js
1047
+ var import_web_mercator = require("@math.gl/web-mercator");
1048
+ var import_quadbin2 = require("quadbin");
1049
+ var TILE_SIZE = 512;
1050
+ function quadbinToOffset(quadbin) {
1051
+ const { x, y, z } = (0, import_quadbin2.cellToTile)(quadbin);
1052
+ const scale = TILE_SIZE / (1 << z);
1053
+ return [x * scale, TILE_SIZE - y * scale, scale];
1054
+ }
1055
+ function quadbinToWorldBounds(quadbin, coverage) {
1056
+ const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);
1057
+ return [
1058
+ [xOffset, yOffset],
1059
+ [xOffset + coverage * scale, yOffset - coverage * scale]
1060
+ ];
1061
+ }
1062
+ function getQuadbinPolygon(quadbin, coverage = 1) {
1063
+ const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);
1064
+ const [w, n] = (0, import_web_mercator.worldToLngLat)(topLeft);
1065
+ const [e, s] = (0, import_web_mercator.worldToLngLat)(bottomRight);
1066
+ return [e, n, e, s, w, s, w, n, e, n];
1067
+ }
1068
+
1069
+ // dist/layers/quadbin-layer.js
1070
+ var defaultProps3 = {
1071
+ getQuadbin: { type: "accessor", value: (d) => d.quadbin }
1072
+ };
1073
+ var _QuadbinLayer = class extends import_geo_layers4._GeoCellLayer {
1074
+ indexToBounds() {
1075
+ const { data, extruded, getQuadbin } = this.props;
1076
+ const coverage = extruded ? 0.99 : 1;
1077
+ return {
1078
+ data,
1079
+ _normalize: false,
1080
+ positionFormat: "XY",
1081
+ getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),
1082
+ updateTriggers: { getPolygon: coverage }
1083
+ };
1084
+ }
1085
+ };
1086
+ var QuadbinLayer = _QuadbinLayer;
1087
+ (() => {
1088
+ _QuadbinLayer.layerName = "QuadbinLayer";
1089
+ })();
1090
+ (() => {
1091
+ _QuadbinLayer.defaultProps = defaultProps3;
1092
+ })();
1093
+
1094
+ // dist/layers/quadbin-tileset-2d.js
1095
+ var import_geo_layers5 = require("@deck.gl/geo-layers");
1096
+ var import_quadbin3 = require("quadbin");
1097
+ var QuadbinTileset2D = class extends import_geo_layers5._Tileset2D {
1098
+ getTileIndices(opts) {
1099
+ return super.getTileIndices(opts).map(import_quadbin3.tileToCell).map((q) => ({ q, i: (0, import_quadbin3.bigIntToHex)(q) }));
1100
+ }
1101
+ getTileId({ q, i }) {
1102
+ return i || (0, import_quadbin3.bigIntToHex)(q);
1103
+ }
1104
+ getTileMetadata({ q }) {
1105
+ return super.getTileMetadata((0, import_quadbin3.cellToTile)(q));
1106
+ }
1107
+ getTileZoom({ q }) {
1108
+ return Number((0, import_quadbin3.getResolution)(q));
1109
+ }
1110
+ getParentIndex({ q }) {
1111
+ return { q: (0, import_quadbin3.cellToParent)(q) };
1112
+ }
1113
+ };
1114
+
1115
+ // dist/layers/quadbin-tile-layer.js
1116
+ var import_quadbin4 = require("quadbin");
1117
+ var renderSubLayers2 = (props) => {
1118
+ const { data } = props;
1119
+ if (!data || !data.length)
1120
+ return null;
1121
+ const isBigInt = typeof data[0].id === "bigint";
1122
+ return new QuadbinLayer(props, {
1123
+ getQuadbin: isBigInt ? (d) => d.id : (d) => (0, import_quadbin4.hexToBigInt)(d.id)
1124
+ });
1125
+ };
1126
+ var defaultProps4 = {
1127
+ data: TilejsonPropType,
1128
+ tileSize: DEFAULT_TILE_SIZE
1129
+ };
1130
+ var _QuadbinTileLayer = class extends import_core7.CompositeLayer {
1131
+ getLoadOptions() {
1132
+ const loadOptions = super.getLoadOptions() || {};
1133
+ const tileJSON = this.props.data;
1134
+ injectAccessToken(loadOptions, tileJSON.accessToken);
1135
+ loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: "quadbin" };
1136
+ return loadOptions;
1137
+ }
1138
+ renderLayers() {
1139
+ const tileJSON = this.props.data;
1140
+ if (!tileJSON)
1141
+ return null;
1142
+ const { tiles: data, maxresolution: maxZoom } = tileJSON;
1143
+ return [
1144
+ new SpatialIndexTileLayer(this.props, {
1145
+ id: `quadbin-tile-layer-${this.props.id}`,
1146
+ data,
1147
+ TilesetClass: QuadbinTileset2D,
1148
+ renderSubLayers: renderSubLayers2,
1149
+ maxZoom,
1150
+ loadOptions: this.getLoadOptions()
1151
+ })
1152
+ ];
1153
+ }
1154
+ };
1155
+ var QuadbinTileLayer = _QuadbinTileLayer;
1156
+ (() => {
1157
+ _QuadbinTileLayer.layerName = "QuadbinTileLayer";
1158
+ })();
1159
+ (() => {
1160
+ _QuadbinTileLayer.defaultProps = defaultProps4;
1213
1161
  })();
1214
- function RTTModifier(BaseLayer) {
1215
- var _a;
1216
- return _a = class extends BaseLayer {
1217
- draw(opts) {
1218
- const { moduleParameters } = opts;
1219
- const { picking } = moduleParameters;
1220
- const postProcessLayer = getPostProcessLayer(this);
1221
- if (!picking.isActive) {
1222
- postProcessLayer.enableRTT(opts);
1223
- }
1224
- super.draw(opts);
1225
- if (!picking.isActive) {
1226
- postProcessLayer.disableRTT();
1227
- }
1228
- }
1229
- }, (() => {
1230
- _a.layerName = `RTT-${BaseLayer.layerName}`;
1231
- })(), _a;
1232
- }
1233
- function PostProcessModifier(BaseLayer, effect) {
1234
- var _a;
1235
- return _a = class extends BaseLayer {
1236
- initializeState(context) {
1237
- super.initializeState(context);
1238
- this._createTextures();
1239
- this.internalState.postProcess = new import_core8.PostProcessEffect(effect, this.props);
1240
- this.internalState.postProcess.setup(context);
1241
- }
1242
- updateState(params) {
1243
- super.updateState(params);
1244
- this.internalState.postProcess.setProps(this.props);
1245
- }
1246
- renderLayers() {
1247
- let subLayers = super.renderLayers();
1248
- if (!subLayers) {
1249
- return null;
1250
- }
1251
- subLayers = Array.isArray(subLayers) ? subLayers : [subLayers];
1252
- return [...subLayers, new DrawCallbackLayer()];
1253
- }
1254
- _createTextures() {
1255
- const { device } = this.context;
1256
- this.internalState.renderBuffers = [0, 1].map((i) => {
1257
- return device.createFramebuffer({
1258
- id: `layer-fbo-${i}`,
1259
- colorAttachments: [device.createTexture(TEXTURE_PROPS)],
1260
- depthStencilAttachment: "depth16unorm"
1261
- });
1262
- });
1263
- }
1264
- _resizeBuffers(opts) {
1265
- const { moduleParameters } = opts;
1266
- const { viewport } = this.context;
1267
- const width = moduleParameters.devicePixelRatio * viewport.width;
1268
- const height = moduleParameters.devicePixelRatio * viewport.height;
1269
- this.internalState.renderBuffers.forEach((fbo) => fbo.resize({ width, height }));
1270
- }
1271
- enableRTT(opts) {
1272
- this._resizeBuffers(opts);
1273
- this.internalState.originalRenderPass = this.context.renderPass;
1274
- const [framebuffer] = this.internalState.renderBuffers;
1275
- this.internalState.internalRenderPass = this.context.device.beginRenderPass({
1276
- framebuffer,
1277
- parameters: { viewport: [0, 0, framebuffer.width, framebuffer.height] },
1278
- clearColor: this.internalState.renderInProgress ? false : [0, 0, 0, 0]
1279
- });
1280
- this.internalState.renderInProgress = true;
1281
- this.context.renderPass = this.internalState.internalRenderPass;
1282
- }
1283
- disableRTT() {
1284
- this.internalState.internalRenderPass.end();
1285
- this.context.renderPass = this.internalState.originalRenderPass;
1286
- }
1287
- applyPostProcess() {
1288
- if (!this.internalState.renderInProgress) {
1289
- return;
1290
- }
1291
- const [inputBuffer, swapBuffer] = this.internalState.renderBuffers;
1292
- const { framebuffer: target } = this.context.renderPass.props;
1293
- this.internalState.postProcess.postRender({
1294
- inputBuffer,
1295
- swapBuffer,
1296
- target
1297
- });
1298
- this.internalState.renderInProgress = false;
1299
- }
1300
- }, (() => {
1301
- _a.layerName = `PostProcess${BaseLayer.layerName}`;
1302
- })(), _a;
1303
- }
1304
1162
 
1305
- // dist/layers/quadbin-heatmap-tile-layer.js
1306
- var _RTTSolidPolygonLayer = class extends RTTModifier(import_layers2.SolidPolygonLayer) {
1163
+ // dist/layers/heatmap-tile-layer.js
1164
+ function unitDensityForCell(cell) {
1165
+ const cellResolution = Number((0, import_quadbin5.getResolution)(cell));
1166
+ return Math.pow(4, cellResolution);
1167
+ }
1168
+ var _RTTSolidPolygonLayer = class extends RTTModifier(import_layers.SolidPolygonLayer) {
1307
1169
  getShaders(type) {
1308
1170
  const shaders = super.getShaders(type);
1309
1171
  shaders.inject = {
1310
- "vs:#decl": "uniform float cellResolution;",
1311
- "vs:DECKGL_FILTER_COLOR": `
1312
- const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
1313
- float value = 255.0 * dot(SHIFT, color.rgb);
1172
+ "vs:#decl": `
1173
+ uniform float densityFactor;
1174
+ `,
1175
+ "vs:#main-end": `
1176
+ // Value from getWeight accessor
1177
+ float weight = elevations;
1314
1178
 
1315
1179
  // Keep "power" delivered to screen constant when tiles update
1316
- float relativeZoom = log2(project_uScale) - cellResolution + 3.5; // range 0-1
1317
- float relativeArea = pow(2.0, -2.0 * relativeZoom); // range 0.25-1
1318
- value *= relativeArea;
1180
+ // by outputting normalized density
1181
+ weight *= densityFactor;
1319
1182
 
1320
1183
  // Pack float into 3 channels to pass to heatmap shader
1321
- color = vec4(mod(vec3(value, floor(value / SHIFT.yz)), 256.0), 255.0) / 255.0;
1322
- `
1184
+ // SCALE value important, as we don't want to saturate
1185
+ // but also want enough definition to avoid banding
1186
+ const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
1187
+ const float MAX_VAL = SHIFT.z * 255.0;
1188
+ const float SCALE = MAX_VAL / 8.0;
1189
+ weight *= SCALE;
1190
+ weight = clamp(weight, 0.0, MAX_VAL);
1191
+ vColor = vec4(mod(vec3(weight, floor(weight / SHIFT.yz)), 256.0), 255.0) / 255.0;
1192
+ `
1323
1193
  };
1324
1194
  return shaders;
1325
1195
  }
1326
1196
  draw(opts) {
1327
- const cell0 = this.props.data[0];
1328
- const cellResolution = Number((0, import_quadbin5.getResolution)(cell0.id));
1197
+ const cell = this.props.data[0];
1198
+ const maxDensity = this.props.elevationScale;
1199
+ const densityFactor = unitDensityForCell(cell.id) / maxDensity;
1329
1200
  for (const model of this.state.models) {
1330
- model.setUniforms({ cellResolution });
1201
+ model.setUniforms({ densityFactor });
1331
1202
  }
1332
1203
  super.draw(opts);
1333
1204
  }
@@ -1337,17 +1208,30 @@ var RTTSolidPolygonLayer = _RTTSolidPolygonLayer;
1337
1208
  _RTTSolidPolygonLayer.layerName = "RTTSolidPolygonLayer";
1338
1209
  })();
1339
1210
  var PostProcessQuadbinTileLayer = PostProcessModifier(QuadbinTileLayer, heatmap);
1340
- function encodeWeight(w) {
1341
- return [w % 256, Math.floor(w / 256), Math.floor(w / (256 * 256))];
1342
- }
1343
- var defaultProps6 = {
1211
+ var defaultProps5 = {
1344
1212
  data: TilejsonPropType,
1345
- getWeight: { type: "accessor", value: 1 }
1213
+ getWeight: { type: "accessor", value: 1 },
1214
+ onMaxDensityChange: { type: "function", optional: true, value: null },
1215
+ colorDomain: { type: "array", value: [0, 1] },
1216
+ intensity: { type: "number", value: 1 },
1217
+ radiusPixels: { type: "number", min: 0, max: 100, value: 20 }
1346
1218
  };
1347
- var _QuadbinHeatmapTileLayer = class extends import_core9.CompositeLayer {
1219
+ var _HeatmapTileLayer = class extends import_core8.CompositeLayer {
1220
+ initializeState() {
1221
+ this.state = {
1222
+ isLoaded: false,
1223
+ tiles: /* @__PURE__ */ new Set(),
1224
+ viewportChanged: false
1225
+ };
1226
+ }
1227
+ shouldUpdateState({ changeFlags }) {
1228
+ const { viewportChanged } = changeFlags;
1229
+ this.setState({ viewportChanged });
1230
+ return changeFlags.somethingChanged;
1231
+ }
1348
1232
  renderLayers() {
1349
1233
  var _a, _b, _c;
1350
- const { data, getWeight, colorDomain, colorRange, radiusPixels, _subLayerProps, updateTriggers, ...tileLayerProps } = this.props;
1234
+ const { data, getWeight, colorDomain, colorRange, intensity, radiusPixels, _subLayerProps, updateTriggers, onMaxDensityChange, onViewportLoad, onTileLoad, onTileUnload, ...tileLayerProps } = this.props;
1351
1235
  const subLayerProps = {
1352
1236
  ..._subLayerProps,
1353
1237
  cell: {
@@ -1361,29 +1245,221 @@ var _QuadbinHeatmapTileLayer = class extends import_core9.CompositeLayer {
1361
1245
  }
1362
1246
  }
1363
1247
  };
1364
- const getFillColor = typeof getWeight === "function" ? (d, info) => encodeWeight(getWeight(d, info)) : encodeWeight(getWeight);
1248
+ let tileZ = 0;
1249
+ let maxDensity = 0;
1250
+ const tiles = [...this.state.tiles].filter((t) => t.isVisible && t.data);
1251
+ for (const tile of tiles) {
1252
+ const cell = tile.data[0];
1253
+ const unitDensity = unitDensityForCell(cell.id);
1254
+ maxDensity = Math.max(tile.userData.maxWeight * unitDensity, maxDensity);
1255
+ tileZ = Math.max(tile.zoom, tileZ);
1256
+ }
1257
+ const overzoom = this.context.viewport.zoom - tileZ;
1258
+ const estimatedMaxDensity = maxDensity * Math.pow(2, overzoom);
1259
+ maxDensity = estimatedMaxDensity;
1260
+ if (typeof onMaxDensityChange === "function") {
1261
+ onMaxDensityChange(maxDensity);
1262
+ }
1365
1263
  return new PostProcessQuadbinTileLayer(tileLayerProps, this.getSubLayerProps({
1366
1264
  id: "heatmap",
1367
1265
  data,
1368
- getFillColor,
1266
+ getFillColor: 0,
1267
+ getElevation: getWeight,
1268
+ elevationScale: maxDensity,
1369
1269
  colorDomain,
1370
1270
  colorRange,
1371
1271
  radiusPixels,
1272
+ intensity,
1372
1273
  _subLayerProps: subLayerProps,
1274
+ refinementStrategy: "no-overlap",
1275
+ extruded: false,
1276
+ stroked: false,
1373
1277
  updateTriggers: {
1374
- getPosition: updateTriggers.getWeight
1375
- }
1278
+ getElevation: updateTriggers.getWeight
1279
+ },
1280
+ onViewportLoad: (tiles2) => {
1281
+ this.setState({ isLoaded: true });
1282
+ if (typeof onViewportLoad === "function") {
1283
+ onViewportLoad(tiles2);
1284
+ }
1285
+ },
1286
+ onTileLoad: (tile) => {
1287
+ let maxWeight = -Infinity;
1288
+ if (typeof getWeight !== "function") {
1289
+ maxWeight = getWeight;
1290
+ } else if (tile.content) {
1291
+ for (const d of tile.content) {
1292
+ maxWeight = Math.max(getWeight(d, {}), maxWeight);
1293
+ }
1294
+ }
1295
+ tile.userData = { maxWeight };
1296
+ this.state.tiles.add(tile);
1297
+ if (typeof onTileLoad === "function") {
1298
+ onTileLoad(tile);
1299
+ }
1300
+ },
1301
+ onTileUnload: (tile) => {
1302
+ this.state.tiles.delete(tile);
1303
+ if (typeof onTileUnload === "function") {
1304
+ onTileUnload(tile);
1305
+ }
1306
+ },
1307
+ transitions: { elevationScale: { type: "spring", stiffness: 0.3, damping: 0.5 } }
1376
1308
  }));
1377
1309
  }
1378
1310
  };
1379
- var QuadbinHeatmapTileLayer = _QuadbinHeatmapTileLayer;
1311
+ var HeatmapTileLayer = _HeatmapTileLayer;
1312
+ (() => {
1313
+ _HeatmapTileLayer.layerName = "HeatmapTileLayer";
1314
+ })();
1315
+ (() => {
1316
+ _HeatmapTileLayer.defaultProps = defaultProps5;
1317
+ })();
1318
+ var heatmap_tile_layer_default = HeatmapTileLayer;
1319
+
1320
+ // dist/layers/point-label-layer.js
1321
+ var import_core9 = require("@deck.gl/core");
1322
+ var import_layers2 = require("@deck.gl/layers");
1323
+ var [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];
1324
+ var _EnhancedTextBackgroundLayer = class extends import_layers2._TextBackgroundLayer {
1325
+ getShaders() {
1326
+ const shaders = super.getShaders();
1327
+ let vs = shaders.vs;
1328
+ vs = vs.replaceAll("padding.", "_padding.");
1329
+ vs = vs.replace("void main(void) {", "void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);");
1330
+ return { ...shaders, vs };
1331
+ }
1332
+ };
1333
+ var EnhancedTextBackgroundLayer = _EnhancedTextBackgroundLayer;
1334
+ (() => {
1335
+ _EnhancedTextBackgroundLayer.layerName = "EnhancedTextBackgroundLayer";
1336
+ })();
1337
+ var _EnhancedTextLayer = class extends import_layers2.TextLayer {
1338
+ filterSubLayer({ layer, renderPass }) {
1339
+ const background = layer.id.includes("primary-background");
1340
+ if (renderPass === "collision") {
1341
+ return background;
1342
+ }
1343
+ return !background;
1344
+ }
1345
+ };
1346
+ var EnhancedTextLayer = _EnhancedTextLayer;
1347
+ (() => {
1348
+ _EnhancedTextLayer.layerName = "EnhancedTextLayer";
1349
+ })();
1350
+ var defaultProps6 = {
1351
+ ...import_layers2.TextLayer.defaultProps,
1352
+ getRadius: { type: "accessor", value: 1 },
1353
+ radiusScale: { type: "number", min: 0, value: 1 }
1354
+ };
1355
+ var _PointLabelLayer = class extends import_core9.CompositeLayer {
1356
+ calculatePixelOffset(secondary) {
1357
+ const { getTextAnchor: anchor, getAlignmentBaseline: alignment, getRadius, getSecondaryText, radiusScale, secondarySizeScale, sizeScale } = this.props;
1358
+ const xMult = anchor === "middle" ? 0 : anchor === "start" ? 1 : -1;
1359
+ const yMult = alignment === "center" ? 0 : alignment === "bottom" ? 1 : -1;
1360
+ const xPadding = sizeScale / 4;
1361
+ const yPadding = sizeScale * (1 + 1 / 4);
1362
+ const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
1363
+ let yOffset = secondary ? secondaryOffset : 0;
1364
+ if (anchor === "middle" && alignment === "top" && getSecondaryText) {
1365
+ yOffset -= secondaryOffset;
1366
+ yOffset -= secondarySizeScale;
1367
+ yOffset += sizeScale;
1368
+ }
1369
+ const radiusPadding = 1 + 1 / 4;
1370
+ return typeof getRadius === "function" ? (d, info) => {
1371
+ const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
1372
+ return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
1373
+ } : [
1374
+ xMult * (getRadius * radiusScale * radiusPadding + xPadding),
1375
+ yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset
1376
+ ];
1377
+ }
1378
+ calculateBackgroundPadding() {
1379
+ const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;
1380
+ const paddingX = 12 * sizeScale;
1381
+ const paddingY = 3 * sizeScale;
1382
+ const backgroundPadding = [0, 0, 0, 0];
1383
+ if (alignment === "top") {
1384
+ backgroundPadding[TOP] = paddingY;
1385
+ } else if (alignment === "bottom") {
1386
+ backgroundPadding[BOTTOM] = paddingY;
1387
+ } else {
1388
+ backgroundPadding[TOP] = 0.5 * paddingY;
1389
+ backgroundPadding[BOTTOM] = 0.5 * paddingY;
1390
+ }
1391
+ if (anchor === "start") {
1392
+ backgroundPadding[LEFT] = paddingX;
1393
+ } else if (anchor === "end") {
1394
+ backgroundPadding[RIGHT] = paddingX;
1395
+ } else {
1396
+ backgroundPadding[LEFT] = 0.5 * paddingX;
1397
+ backgroundPadding[RIGHT] = 0.5 * paddingX;
1398
+ }
1399
+ return backgroundPadding;
1400
+ }
1401
+ renderTextLayer(id4, { updateTriggers: updateTriggersOverride = {}, ...props }) {
1402
+ const { data, characterSet, fontFamily, fontSettings, fontWeight, outlineColor, outlineWidth, sizeScale, radiusScale, getAlignmentBaseline, getColor, getPosition, getTextAnchor, updateTriggers } = this.props;
1403
+ return new EnhancedTextLayer(this.getSubLayerProps({
1404
+ id: id4,
1405
+ data,
1406
+ characterSet,
1407
+ fontFamily,
1408
+ fontSettings,
1409
+ fontWeight,
1410
+ outlineColor,
1411
+ outlineWidth,
1412
+ sizeScale,
1413
+ getAlignmentBaseline,
1414
+ getColor,
1415
+ getPosition,
1416
+ getTextAnchor,
1417
+ updateTriggers: {
1418
+ ...updateTriggers,
1419
+ ...updateTriggersOverride,
1420
+ getPixelOffset: [
1421
+ updateTriggers.getRadius,
1422
+ updateTriggers.getTextAnchor,
1423
+ updateTriggers.getAlignmentBaseline,
1424
+ radiusScale,
1425
+ sizeScale
1426
+ ]
1427
+ }
1428
+ }), {
1429
+ getSize: 1,
1430
+ _subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }
1431
+ }, props);
1432
+ }
1433
+ renderLayers() {
1434
+ const { getText, getSecondaryColor, getSecondaryText, secondaryOutlineColor, secondarySizeScale, updateTriggers } = this.props;
1435
+ const getPixelOffset = this.calculatePixelOffset(false);
1436
+ const backgroundPadding = this.calculateBackgroundPadding();
1437
+ const out = [
1438
+ this.renderTextLayer(`${updateTriggers.getText}-primary`, {
1439
+ backgroundPadding,
1440
+ getText,
1441
+ getPixelOffset,
1442
+ background: true
1443
+ }),
1444
+ Boolean(getSecondaryText) && this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {
1445
+ getText: getSecondaryText,
1446
+ getPixelOffset: this.calculatePixelOffset(true),
1447
+ getAlignmentBaseline: "top",
1448
+ ...getSecondaryColor && { getColor: getSecondaryColor },
1449
+ ...secondarySizeScale && { sizeScale: secondarySizeScale },
1450
+ ...secondaryOutlineColor && { outlineColor: secondaryOutlineColor }
1451
+ })
1452
+ ];
1453
+ return out;
1454
+ }
1455
+ };
1456
+ var PointLabelLayer = _PointLabelLayer;
1380
1457
  (() => {
1381
- _QuadbinHeatmapTileLayer.layerName = "QuadbinHeatmapTileLayer";
1458
+ _PointLabelLayer.layerName = "PointLabelLayer";
1382
1459
  })();
1383
1460
  (() => {
1384
- _QuadbinHeatmapTileLayer.defaultProps = defaultProps6;
1461
+ _PointLabelLayer.defaultProps = defaultProps6;
1385
1462
  })();
1386
- var quadbin_heatmap_tile_layer_default = QuadbinHeatmapTileLayer;
1387
1463
 
1388
1464
  // dist/layers/raster-tile-layer.js
1389
1465
  var import_core11 = require("@deck.gl/core");
@@ -1639,7 +1715,7 @@ var carto_properties_tile_loader_default = CartoPropertiesTileLoader;
1639
1715
 
1640
1716
  // dist/layers/schema/carto-vector-tile-loader.js
1641
1717
  var import_earcut = __toESM(require("earcut"), 1);
1642
- var VERSION3 = true ? "9.0.17" : "latest";
1718
+ var VERSION3 = true ? "9.0.18" : "latest";
1643
1719
  var id3 = "cartoVectorTile";
1644
1720
  var DEFAULT_OPTIONS3 = {
1645
1721
  cartoVectorTile: {
@@ -1699,7 +1775,6 @@ var carto_vector_tile_loader_default = CartoVectorTileLoader;
1699
1775
  var import_extensions = require("@deck.gl/extensions");
1700
1776
  var import_geo_layers6 = require("@deck.gl/geo-layers");
1701
1777
  var import_layers4 = require("@deck.gl/layers");
1702
- var import_gis = require("@loaders.gl/gis");
1703
1778
  (0, import_core12.registerLoaders)([carto_properties_tile_loader_default, carto_vector_tile_loader_default]);
1704
1779
  var defaultProps9 = {
1705
1780
  ...import_geo_layers6.MVTLayer.defaultProps,
@@ -1778,15 +1853,10 @@ var _VectorTileLayer = class extends import_geo_layers6.MVTLayer {
1778
1853
  const subLayer = new import_layers4.GeoJsonLayer(subLayerProps);
1779
1854
  return subLayer;
1780
1855
  }
1781
- getPickingInfo(params) {
1782
- const info = super.getPickingInfo(params);
1783
- if (this.state.binary && info.index !== -1) {
1784
- const { data } = params.sourceLayer.props;
1785
- info.object = (0, import_gis.binaryToGeojson)(data, {
1786
- globalFeatureId: info.index
1787
- });
1788
- }
1789
- return info;
1856
+ _isWGS84() {
1857
+ if (this.state.mvt)
1858
+ return super._isWGS84();
1859
+ return true;
1790
1860
  }
1791
1861
  };
1792
1862
  var VectorTileLayer = _VectorTileLayer;
@@ -3229,9 +3299,9 @@ var query = async function(options) {
3229
3299
  // dist/index.js
3230
3300
  var CARTO_LAYERS = {
3231
3301
  H3TileLayer,
3302
+ HeatmapTileLayer: heatmap_tile_layer_default,
3232
3303
  _PointLabelLayer: PointLabelLayer,
3233
3304
  QuadbinTileLayer,
3234
- QuadbinHeatmapTileLayer: quadbin_heatmap_tile_layer_default,
3235
3305
  RasterTileLayer,
3236
3306
  VectorTileLayer
3237
3307
  };