@deck.gl/mapbox 8.8.4 → 8.8.7

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/dist.dev.js CHANGED
@@ -219,12 +219,14 @@ function drawLayer(deck, map, layer) {
219
219
  let {
220
220
  currentViewport
221
221
  } = deck.userData;
222
+ let clearStack = false;
222
223
 
223
224
  if (!currentViewport) {
224
225
  // This is the first layer drawn in this render cycle.
225
226
  // Generate viewport from the current map state.
226
227
  currentViewport = getViewport(deck, map, true);
227
228
  deck.userData.currentViewport = currentViewport;
229
+ clearStack = true;
228
230
  }
229
231
 
230
232
  if (!deck.isInitialized) {
@@ -236,6 +238,7 @@ function drawLayer(deck, map, layer) {
236
238
  layerFilter: ({
237
239
  layer: deckLayer
238
240
  }) => layer.id === deckLayer.id,
241
+ clearStack,
239
242
  clearCanvas: false
240
243
  });
241
244
  }
@@ -346,12 +349,9 @@ function updateLayers(deck) {
346
349
  }
347
350
 
348
351
  const layers = [];
349
- let layerIndex = 0;
350
352
  deck.userData.mapboxLayers.forEach(deckLayer => {
351
353
  const LayerType = deckLayer.props.type;
352
- const layer = new LayerType(deckLayer.props, {
353
- _offset: layerIndex++
354
- });
354
+ const layer = new LayerType(deckLayer.props);
355
355
  layers.push(layer);
356
356
  });
357
357
  deck.setProps({
@@ -756,7 +756,12 @@ function resolveLayers(map, deck, oldLayers, newLayers) {
756
756
 
757
757
 
758
758
  for (const layer of layers) {
759
- if (!map.getLayer(layer.id)) {
759
+ const mapboxLayer = map.getLayer(layer.id);
760
+
761
+ if (mapboxLayer) {
762
+ // @ts-expect-error not typed
763
+ mapboxLayer.implementation.setProps(layer.props);
764
+ } else {
760
765
  map.addLayer(new _mapbox_layer__WEBPACK_IMPORTED_MODULE_1__["default"]({
761
766
  id: layer.id,
762
767
  deck
@@ -98,10 +98,12 @@ function updateLayer(deck, layer) {
98
98
  function drawLayer(deck, map, layer) {
99
99
  var _ref2 = deck.userData,
100
100
  currentViewport = _ref2.currentViewport;
101
+ var clearStack = false;
101
102
 
102
103
  if (!currentViewport) {
103
104
  currentViewport = getViewport(deck, map, true);
104
105
  deck.userData.currentViewport = currentViewport;
106
+ clearStack = true;
105
107
  }
106
108
 
107
109
  if (!deck.isInitialized) {
@@ -114,6 +116,7 @@ function drawLayer(deck, map, layer) {
114
116
  var deckLayer = _ref3.layer;
115
117
  return layer.id === deckLayer.id;
116
118
  },
119
+ clearStack: clearStack,
117
120
  clearCanvas: false
118
121
  });
119
122
  }
@@ -224,12 +227,9 @@ function updateLayers(deck) {
224
227
  }
225
228
 
226
229
  var layers = [];
227
- var layerIndex = 0;
228
230
  deck.userData.mapboxLayers.forEach(function (deckLayer) {
229
231
  var LayerType = deckLayer.props.type;
230
- var layer = new LayerType(deckLayer.props, {
231
- _offset: layerIndex++
232
- });
232
+ var layer = new LayerType(deckLayer.props);
233
233
  layers.push(layer);
234
234
  });
235
235
  deck.setProps({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deck-utils.ts"],"names":["getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","reason","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","MapView","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","Deck","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","getCenter","lng","lat","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","WebMercatorViewport","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","layerIndex","forEach","LayerType","type","_offset","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: (reason: string) => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n customRender?.(reason);\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n let layerIndex = 0;\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props, {_offset: layerIndex++});\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
1
+ {"version":3,"sources":["../../src/deck-utils.ts"],"names":["getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","reason","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","MapView","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","Deck","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","getCenter","lng","lat","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","WebMercatorViewport","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: (reason: string) => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n customRender?.(reason);\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
@@ -70,8 +70,11 @@ function resolveLayers(map, deck, oldLayers, newLayers) {
70
70
  try {
71
71
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
72
72
  var _layer = _step3.value;
73
+ var mapboxLayer = map.getLayer(_layer.id);
73
74
 
74
- if (!map.getLayer(_layer.id)) {
75
+ if (mapboxLayer) {
76
+ mapboxLayer.implementation.setProps(_layer.props);
77
+ } else {
75
78
  map.addLayer(new _mapboxLayer.default({
76
79
  id: _layer.id,
77
80
  deck: deck
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/resolve-layers.ts"],"names":["UNDEFINED_BEFORE_ID","resolveLayers","map","deck","oldLayers","newLayers","style","_loaded","layers","Boolean","prevLayers","prevLayerIds","Set","l","id","layer","delete","getLayer","removeLayer","addLayer","MapboxLayer","props","beforeId","mapLayers","_order","layerGroups","includes","push","layerGroup","lastLayerIndex","length","indexOf","lastLayerId","undefined","i","layerId","layerIndex","moveLayer"],"mappings":"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","sourcesContent":["import {_flatten as flatten} from '@deck.gl/core';\nimport MapboxLayer from './mapbox-layer';\n\nimport type {Deck, LayersList, Layer} from '@deck.gl/core';\nimport type {Map} from 'mapbox-gl';\n\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n\n/** Insert Deck layers into the mapbox Map according to the user-defined order */\nexport function resolveLayers(\n map?: Map,\n deck?: Deck,\n oldLayers?: LayersList,\n newLayers?: LayersList\n) {\n // Wait until map style is loaded\n // @ts-ignore non-public map property\n if (!map || !deck || !map.style || !map.style._loaded) {\n return;\n }\n\n const layers = flatten(newLayers, Boolean) as Layer[];\n\n if (oldLayers !== newLayers) {\n // Step 1: remove layers that no longer exist\n const prevLayers = flatten(oldLayers, Boolean) as Layer[];\n const prevLayerIds = new Set<string>(prevLayers.map(l => l.id));\n\n for (const layer of layers) {\n prevLayerIds.delete(layer.id);\n }\n\n for (const id of prevLayerIds) {\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n }\n }\n\n // Step 2: add missing layers\n for (const layer of layers) {\n if (!map.getLayer(layer.id)) {\n map.addLayer(\n new MapboxLayer({id: layer.id, deck}),\n // @ts-expect-error beforeId is not defined in LayerProps\n layer.props.beforeId\n );\n }\n }\n\n // Step 3: check the order of layers\n // If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]\n // If beforeId is not defined, the deck layer should appear after all mapbox layers\n // When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers\n // @ts-ignore non-public map property\n const mapLayers: string[] = map.style._order;\n\n // Group deck layers by beforeId\n const layerGroups: Record<string, string[]> = {};\n for (const layer of layers) {\n // @ts-expect-error beforeId is not defined in LayerProps\n let {beforeId} = layer.props;\n if (!beforeId || !mapLayers.includes(beforeId)) {\n beforeId = UNDEFINED_BEFORE_ID;\n }\n layerGroups[beforeId] = layerGroups[beforeId] || [];\n layerGroups[beforeId].push(layer.id);\n }\n\n for (const beforeId in layerGroups) {\n const layerGroup = layerGroups[beforeId];\n let lastLayerIndex =\n beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n for (let i = layerGroup.length - 1; i >= 0; i--) {\n const layerId = layerGroup[i];\n const layerIndex = mapLayers.indexOf(layerId);\n if (layerIndex !== lastLayerIndex - 1) {\n map.moveLayer(layerId, lastLayerId);\n if (layerIndex > lastLayerIndex) {\n // The last layer's index have changed\n lastLayerIndex++;\n }\n }\n lastLayerIndex--;\n lastLayerId = layerId;\n }\n }\n}\n"],"file":"resolve-layers.js"}
1
+ {"version":3,"sources":["../../src/resolve-layers.ts"],"names":["UNDEFINED_BEFORE_ID","resolveLayers","map","deck","oldLayers","newLayers","style","_loaded","layers","Boolean","prevLayers","prevLayerIds","Set","l","id","layer","delete","getLayer","removeLayer","mapboxLayer","implementation","setProps","props","addLayer","MapboxLayer","beforeId","mapLayers","_order","layerGroups","includes","push","layerGroup","lastLayerIndex","length","indexOf","lastLayerId","undefined","i","layerId","layerIndex","moveLayer"],"mappings":"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","sourcesContent":["import {_flatten as flatten} from '@deck.gl/core';\nimport MapboxLayer from './mapbox-layer';\n\nimport type {Deck, LayersList, Layer} from '@deck.gl/core';\nimport type {Map} from 'mapbox-gl';\n\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n\n/** Insert Deck layers into the mapbox Map according to the user-defined order */\nexport function resolveLayers(\n map?: Map,\n deck?: Deck,\n oldLayers?: LayersList,\n newLayers?: LayersList\n) {\n // Wait until map style is loaded\n // @ts-ignore non-public map property\n if (!map || !deck || !map.style || !map.style._loaded) {\n return;\n }\n\n const layers = flatten(newLayers, Boolean) as Layer[];\n\n if (oldLayers !== newLayers) {\n // Step 1: remove layers that no longer exist\n const prevLayers = flatten(oldLayers, Boolean) as Layer[];\n const prevLayerIds = new Set<string>(prevLayers.map(l => l.id));\n\n for (const layer of layers) {\n prevLayerIds.delete(layer.id);\n }\n\n for (const id of prevLayerIds) {\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n }\n }\n\n // Step 2: add missing layers\n for (const layer of layers) {\n const mapboxLayer = map.getLayer(layer.id) as MapboxLayer<Layer>;\n if (mapboxLayer) {\n // @ts-expect-error not typed\n mapboxLayer.implementation.setProps(layer.props);\n } else {\n map.addLayer(\n new MapboxLayer({id: layer.id, deck}),\n // @ts-expect-error beforeId is not defined in LayerProps\n layer.props.beforeId\n );\n }\n }\n\n // Step 3: check the order of layers\n // If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]\n // If beforeId is not defined, the deck layer should appear after all mapbox layers\n // When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers\n // @ts-ignore non-public map property\n const mapLayers: string[] = map.style._order;\n\n // Group deck layers by beforeId\n const layerGroups: Record<string, string[]> = {};\n for (const layer of layers) {\n // @ts-expect-error beforeId is not defined in LayerProps\n let {beforeId} = layer.props;\n if (!beforeId || !mapLayers.includes(beforeId)) {\n beforeId = UNDEFINED_BEFORE_ID;\n }\n layerGroups[beforeId] = layerGroups[beforeId] || [];\n layerGroups[beforeId].push(layer.id);\n }\n\n for (const beforeId in layerGroups) {\n const layerGroup = layerGroups[beforeId];\n let lastLayerIndex =\n beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n for (let i = layerGroup.length - 1; i >= 0; i--) {\n const layerId = layerGroup[i];\n const layerIndex = mapLayers.indexOf(layerId);\n if (layerIndex !== lastLayerIndex - 1) {\n map.moveLayer(layerId, lastLayerId);\n if (layerIndex > lastLayerIndex) {\n // The last layer's index have changed\n lastLayerIndex++;\n }\n }\n lastLayerIndex--;\n lastLayerId = layerId;\n }\n }\n}\n"],"file":"resolve-layers.js"}
@@ -76,10 +76,12 @@ export function drawLayer(deck, map, layer) {
76
76
  let {
77
77
  currentViewport
78
78
  } = deck.userData;
79
+ let clearStack = false;
79
80
 
80
81
  if (!currentViewport) {
81
82
  currentViewport = getViewport(deck, map, true);
82
83
  deck.userData.currentViewport = currentViewport;
84
+ clearStack = true;
83
85
  }
84
86
 
85
87
  if (!deck.isInitialized) {
@@ -91,6 +93,7 @@ export function drawLayer(deck, map, layer) {
91
93
  layerFilter: ({
92
94
  layer: deckLayer
93
95
  }) => layer.id === deckLayer.id,
96
+ clearStack,
94
97
  clearCanvas: false
95
98
  });
96
99
  }
@@ -188,12 +191,9 @@ function updateLayers(deck) {
188
191
  }
189
192
 
190
193
  const layers = [];
191
- let layerIndex = 0;
192
194
  deck.userData.mapboxLayers.forEach(deckLayer => {
193
195
  const LayerType = deckLayer.props.type;
194
- const layer = new LayerType(deckLayer.props, {
195
- _offset: layerIndex++
196
- });
196
+ const layer = new LayerType(deckLayer.props);
197
197
  layers.push(layer);
198
198
  });
199
199
  deck.setProps({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deck-utils.ts"],"names":["Deck","WebMercatorViewport","MapView","_flatten","flatten","getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","reason","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","lng","lat","getCenter","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","layerIndex","forEach","LayerType","type","_offset","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: (reason: string) => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n customRender?.(reason);\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n let layerIndex = 0;\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props, {_offset: layerIndex++});\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
1
+ {"version":3,"sources":["../../src/deck-utils.ts"],"names":["Deck","WebMercatorViewport","MapView","_flatten","flatten","getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","reason","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","lng","lat","getCenter","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: (reason: string) => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n customRender?.(reason);\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
@@ -24,7 +24,11 @@ export function resolveLayers(map, deck, oldLayers, newLayers) {
24
24
  }
25
25
 
26
26
  for (const layer of layers) {
27
- if (!map.getLayer(layer.id)) {
27
+ const mapboxLayer = map.getLayer(layer.id);
28
+
29
+ if (mapboxLayer) {
30
+ mapboxLayer.implementation.setProps(layer.props);
31
+ } else {
28
32
  map.addLayer(new MapboxLayer({
29
33
  id: layer.id,
30
34
  deck
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/resolve-layers.ts"],"names":["_flatten","flatten","MapboxLayer","UNDEFINED_BEFORE_ID","resolveLayers","map","deck","oldLayers","newLayers","style","_loaded","layers","Boolean","prevLayers","prevLayerIds","Set","l","id","layer","delete","getLayer","removeLayer","addLayer","props","beforeId","mapLayers","_order","layerGroups","includes","push","layerGroup","lastLayerIndex","length","indexOf","lastLayerId","undefined","i","layerId","layerIndex","moveLayer"],"mappings":"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","sourcesContent":["import {_flatten as flatten} from '@deck.gl/core';\nimport MapboxLayer from './mapbox-layer';\n\nimport type {Deck, LayersList, Layer} from '@deck.gl/core';\nimport type {Map} from 'mapbox-gl';\n\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n\n/** Insert Deck layers into the mapbox Map according to the user-defined order */\nexport function resolveLayers(\n map?: Map,\n deck?: Deck,\n oldLayers?: LayersList,\n newLayers?: LayersList\n) {\n // Wait until map style is loaded\n // @ts-ignore non-public map property\n if (!map || !deck || !map.style || !map.style._loaded) {\n return;\n }\n\n const layers = flatten(newLayers, Boolean) as Layer[];\n\n if (oldLayers !== newLayers) {\n // Step 1: remove layers that no longer exist\n const prevLayers = flatten(oldLayers, Boolean) as Layer[];\n const prevLayerIds = new Set<string>(prevLayers.map(l => l.id));\n\n for (const layer of layers) {\n prevLayerIds.delete(layer.id);\n }\n\n for (const id of prevLayerIds) {\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n }\n }\n\n // Step 2: add missing layers\n for (const layer of layers) {\n if (!map.getLayer(layer.id)) {\n map.addLayer(\n new MapboxLayer({id: layer.id, deck}),\n // @ts-expect-error beforeId is not defined in LayerProps\n layer.props.beforeId\n );\n }\n }\n\n // Step 3: check the order of layers\n // If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]\n // If beforeId is not defined, the deck layer should appear after all mapbox layers\n // When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers\n // @ts-ignore non-public map property\n const mapLayers: string[] = map.style._order;\n\n // Group deck layers by beforeId\n const layerGroups: Record<string, string[]> = {};\n for (const layer of layers) {\n // @ts-expect-error beforeId is not defined in LayerProps\n let {beforeId} = layer.props;\n if (!beforeId || !mapLayers.includes(beforeId)) {\n beforeId = UNDEFINED_BEFORE_ID;\n }\n layerGroups[beforeId] = layerGroups[beforeId] || [];\n layerGroups[beforeId].push(layer.id);\n }\n\n for (const beforeId in layerGroups) {\n const layerGroup = layerGroups[beforeId];\n let lastLayerIndex =\n beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n for (let i = layerGroup.length - 1; i >= 0; i--) {\n const layerId = layerGroup[i];\n const layerIndex = mapLayers.indexOf(layerId);\n if (layerIndex !== lastLayerIndex - 1) {\n map.moveLayer(layerId, lastLayerId);\n if (layerIndex > lastLayerIndex) {\n // The last layer's index have changed\n lastLayerIndex++;\n }\n }\n lastLayerIndex--;\n lastLayerId = layerId;\n }\n }\n}\n"],"file":"resolve-layers.js"}
1
+ {"version":3,"sources":["../../src/resolve-layers.ts"],"names":["_flatten","flatten","MapboxLayer","UNDEFINED_BEFORE_ID","resolveLayers","map","deck","oldLayers","newLayers","style","_loaded","layers","Boolean","prevLayers","prevLayerIds","Set","l","id","layer","delete","getLayer","removeLayer","mapboxLayer","implementation","setProps","props","addLayer","beforeId","mapLayers","_order","layerGroups","includes","push","layerGroup","lastLayerIndex","length","indexOf","lastLayerId","undefined","i","layerId","layerIndex","moveLayer"],"mappings":"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","sourcesContent":["import {_flatten as flatten} from '@deck.gl/core';\nimport MapboxLayer from './mapbox-layer';\n\nimport type {Deck, LayersList, Layer} from '@deck.gl/core';\nimport type {Map} from 'mapbox-gl';\n\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n\n/** Insert Deck layers into the mapbox Map according to the user-defined order */\nexport function resolveLayers(\n map?: Map,\n deck?: Deck,\n oldLayers?: LayersList,\n newLayers?: LayersList\n) {\n // Wait until map style is loaded\n // @ts-ignore non-public map property\n if (!map || !deck || !map.style || !map.style._loaded) {\n return;\n }\n\n const layers = flatten(newLayers, Boolean) as Layer[];\n\n if (oldLayers !== newLayers) {\n // Step 1: remove layers that no longer exist\n const prevLayers = flatten(oldLayers, Boolean) as Layer[];\n const prevLayerIds = new Set<string>(prevLayers.map(l => l.id));\n\n for (const layer of layers) {\n prevLayerIds.delete(layer.id);\n }\n\n for (const id of prevLayerIds) {\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n }\n }\n\n // Step 2: add missing layers\n for (const layer of layers) {\n const mapboxLayer = map.getLayer(layer.id) as MapboxLayer<Layer>;\n if (mapboxLayer) {\n // @ts-expect-error not typed\n mapboxLayer.implementation.setProps(layer.props);\n } else {\n map.addLayer(\n new MapboxLayer({id: layer.id, deck}),\n // @ts-expect-error beforeId is not defined in LayerProps\n layer.props.beforeId\n );\n }\n }\n\n // Step 3: check the order of layers\n // If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]\n // If beforeId is not defined, the deck layer should appear after all mapbox layers\n // When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers\n // @ts-ignore non-public map property\n const mapLayers: string[] = map.style._order;\n\n // Group deck layers by beforeId\n const layerGroups: Record<string, string[]> = {};\n for (const layer of layers) {\n // @ts-expect-error beforeId is not defined in LayerProps\n let {beforeId} = layer.props;\n if (!beforeId || !mapLayers.includes(beforeId)) {\n beforeId = UNDEFINED_BEFORE_ID;\n }\n layerGroups[beforeId] = layerGroups[beforeId] || [];\n layerGroups[beforeId].push(layer.id);\n }\n\n for (const beforeId in layerGroups) {\n const layerGroup = layerGroups[beforeId];\n let lastLayerIndex =\n beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n for (let i = layerGroup.length - 1; i >= 0; i--) {\n const layerId = layerGroup[i];\n const layerIndex = mapLayers.indexOf(layerId);\n if (layerIndex !== lastLayerIndex - 1) {\n map.moveLayer(layerId, lastLayerId);\n if (layerIndex > lastLayerIndex) {\n // The last layer's index have changed\n lastLayerIndex++;\n }\n }\n lastLayerIndex--;\n lastLayerId = layerId;\n }\n }\n}\n"],"file":"resolve-layers.js"}
package/dist.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("deck")):"function"==typeof define&&define.amd?define(["deck"],t):"object"==typeof exports?exports.deck=t(require("deck")):e.deck=t(e.deck)}(window,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(t,n){t.exports=e},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){var r=n(7),i=n(8),o=n(9);e.exports=function(e,t){return r(e)||i(e,t)||o()}},function(e,t,n){var r=n(10);e.exports=function(e,t){if(null==e)return{};var n,i,o=r(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}},function(e,t,n){var r=n(11),i=globalThis.deck||{};if(!i.Layer)throw new Error("@deck.gl/core is not found");e.exports=Object.assign(i,r)},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}},function(e,t,n){"use strict";n.r(t);var r=n(2),i=n.n(r),o=n(3),a=n.n(o),s=n(0),u=n.n(s),c=n(4),l=n.n(c),d=n(1);function p(e){var t=e.map,n=e.gl,r=e.deck;if(t.__deck)return t.__deck;var i,o=null==r?void 0:r.props._customRender,a={useDevicePixels:!0,_customRender:function(e){t.triggerRepaint(),null==o||o(e)},parameters:{depthMask:!0,depthTest:!0,blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthFunc:515,blendEquation:32774},views:r&&r.props.views||[new d.MapView({id:"mapbox"})]};return r&&r.props.gl!==n||(Object.assign(a,{gl:n,width:null,height:null,touchAction:"unset",viewState:f(t)}),t.on("move",(function(){return function(e,t){e.setProps({viewState:f(t)}),e.needsRedraw({clearRedrawFlags:!0})}(i,t)}))),r?(i=r,r.setProps(a),r.userData.isExternal=!0):(i=new d.Deck(a),t.on("remove",(function(){i.finalize(),t.__deck=null}))),i.userData.mapboxLayers=new Set,i.userData.mapboxVersion=function(e){var t=0,n=0,r=e.version;if(r){var i=r.split(".").slice(0,2).map(Number),o=l()(i,2);t=o[0],n=o[1]}return{major:t,minor:n}}(t),t.__deck=i,t.on("render",(function(){i.isInitialized&&function(e,t){var n=e.userData,r=n.mapboxLayers;if(n.isExternal){var i=Array.from(r,(function(e){return e.id})),o=Object(d._flatten)(e.props.layers,Boolean).some((function(e){return e&&!i.includes(e.id)})),a=e.getViewports(),s=a.findIndex((function(e){return"mapbox"===e.id})),u=a.length>1||s<0;(o||u)&&(s>=0&&((a=a.slice())[s]=v(e,t,!1)),e._drawLayers("mapbox-repaint",{viewports:a,layerFilter:function(t){return(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!i.includes(t.layer.id))},clearCanvas:!1}))}e.userData.currentViewport=null}(i,t)})),i}function f(e){var t=e.getCenter();return{longitude:(t.lng+540)%360-180,latitude:t.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()}}function v(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=e.userData,i=r.mapboxVersion;return new d.WebMercatorViewport(Object.assign({id:"mapbox",x:0,y:0,width:e.width,height:e.height},f(t),n?{nearZMultiplier:1===i.major&&i.minor>=3||i.major>=2?.02:1/(e.height||1)}:{nearZMultiplier:.1}))}function h(e){if(!e.userData.isExternal){var t=[],n=0;e.userData.mapboxLayers.forEach((function(e){var r=new(0,e.props.type)(e.props,{_offset:n++});t.push(r)})),e.setProps({layers:t})}}var y=function(){function e(t){if(i()(this,e),u()(this,"id",void 0),u()(this,"type",void 0),u()(this,"renderingMode",void 0),u()(this,"map",void 0),u()(this,"deck",void 0),u()(this,"props",void 0),!t.id)throw new Error("Layer must have an unique id");this.id=t.id,this.type="custom",this.renderingMode=t.renderingMode||"3d",this.map=null,this.deck=null,this.props=t}return a()(e,[{key:"onAdd",value:function(e,t){var n,r;this.map=e,this.deck=p({map:e,gl:t,deck:this.props.deck}),n=this.deck,r=this,n.userData.mapboxLayers.add(r),h(n)}},{key:"onRemove",value:function(){var e,t;this.deck&&(e=this.deck,t=this,e.userData.mapboxLayers.delete(t),h(e))}},{key:"setProps",value:function(e){Object.assign(this.props,e,{id:this.id}),this.deck&&h(this.deck)}},{key:"render",value:function(){var e,t,n,r;e=this.deck,t=this.map,n=this,(r=e.userData.currentViewport)||(r=v(e,t,!0),e.userData.currentViewport=r),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[r],layerFilter:function(e){var t=e.layer;return n.id===t.id},clearCanvas:!1})}}]),e}(),_=n(5),b=n.n(_);function m(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function g(e,t,n,r){if(e&&t&&e.style&&e.style._loaded){var i=Object(d._flatten)(r,Boolean);if(n!==r){var o,a=Object(d._flatten)(n,Boolean),s=new Set(a.map((function(e){return e.id}))),u=m(i);try{for(u.s();!(o=u.n()).done;){var c=o.value;s.delete(c.id)}}catch(e){u.e(e)}finally{u.f()}var l,p=m(s);try{for(p.s();!(l=p.n()).done;){var f=l.value;e.getLayer(f)&&e.removeLayer(f)}}catch(e){p.e(e)}finally{p.f()}}var v,h=m(i);try{for(h.s();!(v=h.n()).done;){var _=v.value;e.getLayer(_.id)||e.addLayer(new y({id:_.id,deck:t}),_.props.beforeId)}}catch(e){h.e(e)}finally{h.f()}var b,k=e.style._order,g={},w=m(i);try{for(w.s();!(b=w.n()).done;){var O=b.value,j=O.props.beforeId;j&&k.includes(j)||(j="__UNDEFINED__"),g[j]=g[j]||[],g[j].push(O.id)}}catch(e){w.e(e)}finally{w.f()}for(var x in g)for(var E=g[x],S="__UNDEFINED__"===x?k.length:k.indexOf(x),P="__UNDEFINED__"===x?void 0:x,D=E.length-1;D>=0;D--){var M=E[D],C=k.indexOf(M);C!==S-1&&(e.moveLayer(M,P),C>S&&S++),S--,P=M}}}var w=["interleaved"];function O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?O(Object(n),!0).forEach((function(t){u()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var x=function(){function e(t){var n=this;i()(this,e),u()(this,"_props",void 0),u()(this,"_deck",void 0),u()(this,"_map",void 0),u()(this,"_container",void 0),u()(this,"_interleaved",void 0),u()(this,"_handleStyleChange",(function(){g(n._map,n._deck,n._props.layers,n._props.layers)})),u()(this,"_updateContainerSize",(function(){if(n._map&&n._container){var e=n._map.getContainer(),t=e.clientWidth,r=e.clientHeight;Object.assign(n._container.style,{width:"".concat(t,"px"),height:"".concat(r,"px")})}})),u()(this,"_updateViewState",(function(){var e=n._deck;e&&(e.setProps({viewState:f(n._map)}),e.redraw())})),u()(this,"_handleMouseEvent",(function(e){var t=n._deck;if(t){var r={type:e.type,offsetCenter:e.point,srcEvent:e};switch(e.type){case"click":r.tapCount=1,t._onPointerDown(r),t._onEvent(r);break;case"dblclick":r.type="click",r.tapCount=2,t._onEvent(r);break;case"mousemove":r.type="pointermove",t._onPointerMove(r);break;case"mouseout":r.type="pointerleave",t._onPointerMove(r);break;default:return}}}));var r=t.interleaved,o=void 0!==r&&r,a=b()(t,w);this._interleaved=o,this._props=a}return a()(e,[{key:"setProps",value:function(e){this._interleaved&&e.layers&&g(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,e),this._deck&&this._deck.setProps(this._props)}},{key:"onAdd",value:function(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}},{key:"_onAddOverlaid",value:function(e){var t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,pointerEvents:"none"}),this._container=t,this._deck=new d.Deck(j(j({},this._props),{},{parent:t,viewState:f(e)})),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}},{key:"_onAddInterleaved",value:function(e){return this._deck=new d.Deck(j(j({},this._props),{},{gl:e.painter.context.gl})),e.on("styledata",this._handleStyleChange),g(e,this._deck,[],this._props.layers),document.createElement("div")}},{key:"onRemove",value:function(){var e,t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),null===(e=this._deck)||void 0===e||e.finalize(),this._deck=void 0,this._map=void 0,this._container=void 0}},{key:"_onRemoveOverlaid",value:function(e){e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent)}},{key:"_onRemoveInterleaved",value:function(e){e.off("styledata",this._handleStyleChange),g(e,this._deck,this._props.layers,[])}},{key:"getDefaultPosition",value:function(){return"top-left"}},{key:"pickObject",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObject(e)}},{key:"pickMultipleObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickMultipleObjects(e)}},{key:"pickObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObjects(e)}},{key:"finalize",value:function(){this._map&&this._map.removeControl(this)}}]),e}();n.d(t,"MapboxLayer",(function(){return y})),n.d(t,"MapboxOverlay",(function(){return x}))}])}));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("deck")):"function"==typeof define&&define.amd?define(["deck"],t):"object"==typeof exports?exports.deck=t(require("deck")):e.deck=t(e.deck)}(window,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(t,n){t.exports=e},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){var r=n(7),i=n(8),o=n(9);e.exports=function(e,t){return r(e)||i(e,t)||o()}},function(e,t,n){var r=n(10);e.exports=function(e,t){if(null==e)return{};var n,i,o=r(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}},function(e,t,n){var r=n(11),i=globalThis.deck||{};if(!i.Layer)throw new Error("@deck.gl/core is not found");e.exports=Object.assign(i,r)},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}},function(e,t,n){"use strict";n.r(t);var r=n(2),i=n.n(r),o=n(3),a=n.n(o),s=n(0),u=n.n(s),c=n(4),l=n.n(c),d=n(1);function p(e){var t=e.map,n=e.gl,r=e.deck;if(t.__deck)return t.__deck;var i,o=null==r?void 0:r.props._customRender,a={useDevicePixels:!0,_customRender:function(e){t.triggerRepaint(),null==o||o(e)},parameters:{depthMask:!0,depthTest:!0,blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthFunc:515,blendEquation:32774},views:r&&r.props.views||[new d.MapView({id:"mapbox"})]};return r&&r.props.gl!==n||(Object.assign(a,{gl:n,width:null,height:null,touchAction:"unset",viewState:f(t)}),t.on("move",(function(){return function(e,t){e.setProps({viewState:f(t)}),e.needsRedraw({clearRedrawFlags:!0})}(i,t)}))),r?(i=r,r.setProps(a),r.userData.isExternal=!0):(i=new d.Deck(a),t.on("remove",(function(){i.finalize(),t.__deck=null}))),i.userData.mapboxLayers=new Set,i.userData.mapboxVersion=function(e){var t=0,n=0,r=e.version;if(r){var i=r.split(".").slice(0,2).map(Number),o=l()(i,2);t=o[0],n=o[1]}return{major:t,minor:n}}(t),t.__deck=i,t.on("render",(function(){i.isInitialized&&function(e,t){var n=e.userData,r=n.mapboxLayers;if(n.isExternal){var i=Array.from(r,(function(e){return e.id})),o=Object(d._flatten)(e.props.layers,Boolean).some((function(e){return e&&!i.includes(e.id)})),a=e.getViewports(),s=a.findIndex((function(e){return"mapbox"===e.id})),u=a.length>1||s<0;(o||u)&&(s>=0&&((a=a.slice())[s]=v(e,t,!1)),e._drawLayers("mapbox-repaint",{viewports:a,layerFilter:function(t){return(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!i.includes(t.layer.id))},clearCanvas:!1}))}e.userData.currentViewport=null}(i,t)})),i}function f(e){var t=e.getCenter();return{longitude:(t.lng+540)%360-180,latitude:t.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()}}function v(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=e.userData,i=r.mapboxVersion;return new d.WebMercatorViewport(Object.assign({id:"mapbox",x:0,y:0,width:e.width,height:e.height},f(t),n?{nearZMultiplier:1===i.major&&i.minor>=3||i.major>=2?.02:1/(e.height||1)}:{nearZMultiplier:.1}))}function h(e){if(!e.userData.isExternal){var t=[];e.userData.mapboxLayers.forEach((function(e){var n=new(0,e.props.type)(e.props);t.push(n)})),e.setProps({layers:t})}}var y=function(){function e(t){if(i()(this,e),u()(this,"id",void 0),u()(this,"type",void 0),u()(this,"renderingMode",void 0),u()(this,"map",void 0),u()(this,"deck",void 0),u()(this,"props",void 0),!t.id)throw new Error("Layer must have an unique id");this.id=t.id,this.type="custom",this.renderingMode=t.renderingMode||"3d",this.map=null,this.deck=null,this.props=t}return a()(e,[{key:"onAdd",value:function(e,t){var n,r;this.map=e,this.deck=p({map:e,gl:t,deck:this.props.deck}),n=this.deck,r=this,n.userData.mapboxLayers.add(r),h(n)}},{key:"onRemove",value:function(){var e,t;this.deck&&(e=this.deck,t=this,e.userData.mapboxLayers.delete(t),h(e))}},{key:"setProps",value:function(e){Object.assign(this.props,e,{id:this.id}),this.deck&&h(this.deck)}},{key:"render",value:function(){var e,t,n,r,i;e=this.deck,t=this.map,n=this,r=e.userData.currentViewport,i=!1,r||(r=v(e,t,!0),e.userData.currentViewport=r,i=!0),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[r],layerFilter:function(e){var t=e.layer;return n.id===t.id},clearStack:i,clearCanvas:!1})}}]),e}(),_=n(5),b=n.n(_);function m(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function g(e,t,n,r){if(e&&t&&e.style&&e.style._loaded){var i=Object(d._flatten)(r,Boolean);if(n!==r){var o,a=Object(d._flatten)(n,Boolean),s=new Set(a.map((function(e){return e.id}))),u=m(i);try{for(u.s();!(o=u.n()).done;){var c=o.value;s.delete(c.id)}}catch(e){u.e(e)}finally{u.f()}var l,p=m(s);try{for(p.s();!(l=p.n()).done;){var f=l.value;e.getLayer(f)&&e.removeLayer(f)}}catch(e){p.e(e)}finally{p.f()}}var v,h=m(i);try{for(h.s();!(v=h.n()).done;){var _=v.value,b=e.getLayer(_.id);b?b.implementation.setProps(_.props):e.addLayer(new y({id:_.id,deck:t}),_.props.beforeId)}}catch(e){h.e(e)}finally{h.f()}var k,g=e.style._order,w={},O=m(i);try{for(O.s();!(k=O.n()).done;){var j=k.value,x=j.props.beforeId;x&&g.includes(x)||(x="__UNDEFINED__"),w[x]=w[x]||[],w[x].push(j.id)}}catch(e){O.e(e)}finally{O.f()}for(var E in w)for(var S=w[E],P="__UNDEFINED__"===E?g.length:g.indexOf(E),D="__UNDEFINED__"===E?void 0:E,M=S.length-1;M>=0;M--){var C=S[M],A=g.indexOf(C);A!==P-1&&(e.moveLayer(C,D),A>P&&P++),P--,D=C}}}var w=["interleaved"];function O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?O(Object(n),!0).forEach((function(t){u()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var x=function(){function e(t){var n=this;i()(this,e),u()(this,"_props",void 0),u()(this,"_deck",void 0),u()(this,"_map",void 0),u()(this,"_container",void 0),u()(this,"_interleaved",void 0),u()(this,"_handleStyleChange",(function(){g(n._map,n._deck,n._props.layers,n._props.layers)})),u()(this,"_updateContainerSize",(function(){if(n._map&&n._container){var e=n._map.getContainer(),t=e.clientWidth,r=e.clientHeight;Object.assign(n._container.style,{width:"".concat(t,"px"),height:"".concat(r,"px")})}})),u()(this,"_updateViewState",(function(){var e=n._deck;e&&(e.setProps({viewState:f(n._map)}),e.redraw())})),u()(this,"_handleMouseEvent",(function(e){var t=n._deck;if(t){var r={type:e.type,offsetCenter:e.point,srcEvent:e};switch(e.type){case"click":r.tapCount=1,t._onPointerDown(r),t._onEvent(r);break;case"dblclick":r.type="click",r.tapCount=2,t._onEvent(r);break;case"mousemove":r.type="pointermove",t._onPointerMove(r);break;case"mouseout":r.type="pointerleave",t._onPointerMove(r);break;default:return}}}));var r=t.interleaved,o=void 0!==r&&r,a=b()(t,w);this._interleaved=o,this._props=a}return a()(e,[{key:"setProps",value:function(e){this._interleaved&&e.layers&&g(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,e),this._deck&&this._deck.setProps(this._props)}},{key:"onAdd",value:function(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}},{key:"_onAddOverlaid",value:function(e){var t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,pointerEvents:"none"}),this._container=t,this._deck=new d.Deck(j(j({},this._props),{},{parent:t,viewState:f(e)})),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}},{key:"_onAddInterleaved",value:function(e){return this._deck=new d.Deck(j(j({},this._props),{},{gl:e.painter.context.gl})),e.on("styledata",this._handleStyleChange),g(e,this._deck,[],this._props.layers),document.createElement("div")}},{key:"onRemove",value:function(){var e,t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),null===(e=this._deck)||void 0===e||e.finalize(),this._deck=void 0,this._map=void 0,this._container=void 0}},{key:"_onRemoveOverlaid",value:function(e){e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent)}},{key:"_onRemoveInterleaved",value:function(e){e.off("styledata",this._handleStyleChange),g(e,this._deck,this._props.layers,[])}},{key:"getDefaultPosition",value:function(){return"top-left"}},{key:"pickObject",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObject(e)}},{key:"pickMultipleObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickMultipleObjects(e)}},{key:"pickObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObjects(e)}},{key:"finalize",value:function(){this._map&&this._map.removeControl(this)}}]),e}();n.d(t,"MapboxLayer",(function(){return y})),n.d(t,"MapboxOverlay",(function(){return x}))}])}));
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/mapbox",
3
3
  "description": "Use deck.gl layers as custom mapbox-gl-js layers",
4
4
  "license": "MIT",
5
- "version": "8.8.4",
5
+ "version": "8.8.7",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -35,5 +35,5 @@
35
35
  "peerDependencies": {
36
36
  "@deck.gl/core": "^8.0.0"
37
37
  },
38
- "gitHead": "faab03adb63f2e2470d9c202dd740610be2ebc22"
38
+ "gitHead": "4485a8be47b76ba5f28447af304c683a00bbb4eb"
39
39
  }
package/src/deck-utils.ts CHANGED
@@ -102,11 +102,13 @@ export function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {
102
102
 
103
103
  export function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {
104
104
  let {currentViewport} = deck.userData as UserData;
105
+ let clearStack: boolean = false;
105
106
  if (!currentViewport) {
106
107
  // This is the first layer drawn in this render cycle.
107
108
  // Generate viewport from the current map state.
108
109
  currentViewport = getViewport(deck, map, true);
109
110
  (deck.userData as UserData).currentViewport = currentViewport;
111
+ clearStack = true;
110
112
  }
111
113
 
112
114
  if (!deck.isInitialized) {
@@ -116,6 +118,7 @@ export function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {
116
118
  deck._drawLayers('mapbox-repaint', {
117
119
  viewports: [currentViewport],
118
120
  layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,
121
+ clearStack,
119
122
  clearCanvas: false
120
123
  });
121
124
  }
@@ -236,10 +239,9 @@ function updateLayers(deck: Deck): void {
236
239
  }
237
240
 
238
241
  const layers: Layer[] = [];
239
- let layerIndex = 0;
240
242
  (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {
241
243
  const LayerType = deckLayer.props.type;
242
- const layer = new LayerType(deckLayer.props, {_offset: layerIndex++});
244
+ const layer = new LayerType(deckLayer.props);
243
245
  layers.push(layer);
244
246
  });
245
247
  deck.setProps({layers});
@@ -39,7 +39,11 @@ export function resolveLayers(
39
39
 
40
40
  // Step 2: add missing layers
41
41
  for (const layer of layers) {
42
- if (!map.getLayer(layer.id)) {
42
+ const mapboxLayer = map.getLayer(layer.id) as MapboxLayer<Layer>;
43
+ if (mapboxLayer) {
44
+ // @ts-expect-error not typed
45
+ mapboxLayer.implementation.setProps(layer.props);
46
+ } else {
43
47
  map.addLayer(
44
48
  new MapboxLayer({id: layer.id, deck}),
45
49
  // @ts-expect-error beforeId is not defined in LayerProps
@@ -1 +1 @@
1
- {"version":3,"file":"deck-utils.d.ts","sourceRoot":"","sources":["../src/deck-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAoD,MAAM,eAAe,CAAC;AACtF,OAAO,KAAK,EAAY,YAAY,EAAQ,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,WAAW,CAAC;AASnC,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,EAAE,EACF,IAAI,EACL,EAAE;IACD,GAAG,EAAE,GAAG,GAAG;QAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;KAAC,CAAC;IAClC,EAAE,EAAE,qBAAqB,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,GAAG,IAAI,CAkEP;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAGlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAGrE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAErE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAkB7E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG;IACrD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAaA"}
1
+ {"version":3,"file":"deck-utils.d.ts","sourceRoot":"","sources":["../src/deck-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAoD,MAAM,eAAe,CAAC;AACtF,OAAO,KAAK,EAAY,YAAY,EAAQ,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,WAAW,CAAC;AASnC,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,EAAE,EACF,IAAI,EACL,EAAE;IACD,GAAG,EAAE,GAAG,GAAG;QAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;KAAC,CAAC;IAClC,EAAE,EAAE,qBAAqB,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,GAAG,IAAI,CAkEP;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAGlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAGrE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAErE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAqB7E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG;IACrD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAaA"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-layers.d.ts","sourceRoot":"","sources":["../src/resolve-layers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,IAAI,EAAE,UAAU,EAAQ,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,WAAW,CAAC;AAInC,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,GAAG,CAAC,EAAE,GAAG,EACT,IAAI,CAAC,EAAE,IAAI,EACX,SAAS,CAAC,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,UAAU,QA2EvB"}
1
+ {"version":3,"file":"resolve-layers.d.ts","sourceRoot":"","sources":["../src/resolve-layers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,IAAI,EAAE,UAAU,EAAQ,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,WAAW,CAAC;AAInC,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,GAAG,CAAC,EAAE,GAAG,EACT,IAAI,CAAC,EAAE,IAAI,EACX,SAAS,CAAC,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,UAAU,QA+EvB"}
@@ -1,185 +0,0 @@
1
- import { Deck, WebMercatorViewport, MapView, _flatten as flatten } from '@deck.gl/core';
2
- export function getDeckInstance({ map, gl, deck }) {
3
- // Only create one deck instance per context
4
- if (map.__deck) {
5
- return map.__deck;
6
- }
7
- const customRender = deck?.props._customRender;
8
- const deckProps = {
9
- useDevicePixels: true,
10
- _customRender: (reason) => {
11
- map.triggerRepaint();
12
- // customRender may be subscribed by DeckGL React component to update child props
13
- // make sure it is still called
14
- customRender?.(reason);
15
- },
16
- // TODO: import these defaults from a single source of truth
17
- parameters: {
18
- depthMask: true,
19
- depthTest: true,
20
- blend: true,
21
- blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],
22
- polygonOffsetFill: true,
23
- depthFunc: gl.LEQUAL,
24
- blendEquation: gl.FUNC_ADD
25
- },
26
- views: (deck && deck.props.views) || [new MapView({ id: 'mapbox' })]
27
- };
28
- if (!deck || deck.props.gl === gl) {
29
- // deck is using the WebGLContext created by mapbox
30
- // block deck from setting the canvas size
31
- Object.assign(deckProps, {
32
- gl,
33
- width: null,
34
- height: null,
35
- touchAction: 'unset',
36
- viewState: getViewState(map)
37
- });
38
- // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.
39
- // Otherwise (pure JS use case), we use the map's viewState to drive deck.
40
- map.on('move', () => onMapMove(deck, map));
41
- }
42
- if (deck) {
43
- deck.setProps(deckProps);
44
- deck.userData.isExternal = true;
45
- }
46
- else {
47
- deck = new Deck(deckProps);
48
- map.on('remove', () => {
49
- deck.finalize();
50
- map.__deck = null;
51
- });
52
- }
53
- deck.userData.mapboxLayers = new Set();
54
- deck.userData.mapboxVersion = getMapboxVersion(map);
55
- map.__deck = deck;
56
- map.on('render', () => {
57
- // @ts-expect-error (2445) protected property
58
- if (deck.layerManager)
59
- afterRender(deck, map);
60
- });
61
- return deck;
62
- }
63
- export function addLayer(deck, layer) {
64
- deck.userData.mapboxLayers.add(layer);
65
- updateLayers(deck);
66
- }
67
- export function removeLayer(deck, layer) {
68
- deck.userData.mapboxLayers.delete(layer);
69
- updateLayers(deck);
70
- }
71
- export function updateLayer(deck, layer) {
72
- updateLayers(deck);
73
- }
74
- export function drawLayer(deck, map, layer) {
75
- let { currentViewport } = deck.userData;
76
- if (!currentViewport) {
77
- // This is the first layer drawn in this render cycle.
78
- // Generate viewport from the current map state.
79
- currentViewport = getViewport(deck, map, true);
80
- deck.userData.currentViewport = currentViewport;
81
- }
82
- // @ts-expect-error (2445) protected property
83
- if (!deck.layerManager) {
84
- return;
85
- }
86
- deck._drawLayers('mapbox-repaint', {
87
- viewports: [currentViewport],
88
- layerFilter: ({ layer: deckLayer }) => layer.id === deckLayer.id,
89
- clearCanvas: false
90
- });
91
- }
92
- export function getViewState(map) {
93
- const { lng, lat } = map.getCenter();
94
- return {
95
- // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian
96
- // https://github.com/visgl/deck.gl/issues/6894
97
- longitude: ((lng + 540) % 360) - 180,
98
- latitude: lat,
99
- zoom: map.getZoom(),
100
- bearing: map.getBearing(),
101
- pitch: map.getPitch(),
102
- repeat: map.getRenderWorldCopies()
103
- };
104
- }
105
- function getMapboxVersion(map) {
106
- // parse mapbox version string
107
- let major = 0;
108
- let minor = 0;
109
- // @ts-ignore (2339) undefined property
110
- const version = map.version;
111
- if (version) {
112
- [major, minor] = version.split('.').slice(0, 2).map(Number);
113
- }
114
- return { major, minor };
115
- }
116
- function getViewport(deck, map, useMapboxProjection = true) {
117
- const { mapboxVersion } = deck.userData;
118
- return new WebMercatorViewport(Object.assign({
119
- id: 'mapbox',
120
- x: 0,
121
- y: 0,
122
- width: deck.width,
123
- height: deck.height
124
- }, getViewState(map), useMapboxProjection
125
- ? {
126
- // match mapbox's projection matrix
127
- // A change of near plane was made in 1.3.0
128
- // https://github.com/mapbox/mapbox-gl-js/pull/8502
129
- nearZMultiplier: (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2
130
- ? 0.02
131
- : 1 / (deck.height || 1)
132
- }
133
- : {
134
- // use deck.gl's own default
135
- nearZMultiplier: 0.1
136
- }));
137
- }
138
- function afterRender(deck, map) {
139
- const { mapboxLayers, isExternal } = deck.userData;
140
- if (isExternal) {
141
- // Draw non-Mapbox layers
142
- const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);
143
- const deckLayers = flatten(deck.props.layers, Boolean);
144
- const hasNonMapboxLayers = deckLayers.some(layer => layer && !mapboxLayerIds.includes(layer.id));
145
- let viewports = deck.getViewports();
146
- const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');
147
- const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;
148
- if (hasNonMapboxLayers || hasNonMapboxViews) {
149
- if (mapboxViewportIdx >= 0) {
150
- viewports = viewports.slice();
151
- viewports[mapboxViewportIdx] = getViewport(deck, map, false);
152
- }
153
- deck._drawLayers('mapbox-repaint', {
154
- viewports,
155
- layerFilter: params => (!deck.props.layerFilter || deck.props.layerFilter(params)) &&
156
- (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),
157
- clearCanvas: false
158
- });
159
- }
160
- }
161
- // End of render cycle, clear generated viewport
162
- deck.userData.currentViewport = null;
163
- }
164
- function onMapMove(deck, map) {
165
- deck.setProps({
166
- viewState: getViewState(map)
167
- });
168
- // Camera changed, will trigger a map repaint right after this
169
- // Clear any change flag triggered by setting viewState so that deck does not request
170
- // a second repaint
171
- deck.needsRedraw({ clearRedrawFlags: true });
172
- }
173
- function updateLayers(deck) {
174
- if (deck.userData.isExternal) {
175
- return;
176
- }
177
- const layers = [];
178
- let layerIndex = 0;
179
- deck.userData.mapboxLayers.forEach(deckLayer => {
180
- const LayerType = deckLayer.props.type;
181
- const layer = new LayerType(deckLayer.props, { _offset: layerIndex++ });
182
- layers.push(layer);
183
- });
184
- deck.setProps({ layers });
185
- }
package/typed/index.js DELETED
@@ -1,2 +0,0 @@
1
- export { default as MapboxLayer } from './mapbox-layer';
2
- export { default as MapboxOverlay } from './mapbox-overlay';
@@ -1,37 +0,0 @@
1
- import { getDeckInstance, addLayer, removeLayer, updateLayer, drawLayer } from './deck-utils';
2
- export default class MapboxLayer {
3
- /* eslint-disable no-this-before-super */
4
- constructor(props) {
5
- if (!props.id) {
6
- throw new Error('Layer must have an unique id');
7
- }
8
- this.id = props.id;
9
- this.type = 'custom';
10
- this.renderingMode = props.renderingMode || '3d';
11
- this.map = null;
12
- this.deck = null;
13
- this.props = props;
14
- }
15
- /* Mapbox custom layer methods */
16
- onAdd(map, gl) {
17
- this.map = map;
18
- this.deck = getDeckInstance({ map, gl, deck: this.props.deck });
19
- addLayer(this.deck, this);
20
- }
21
- onRemove() {
22
- if (this.deck) {
23
- removeLayer(this.deck, this);
24
- }
25
- }
26
- setProps(props) {
27
- // id cannot be changed
28
- Object.assign(this.props, props, { id: this.id });
29
- // safe guard in case setProps is called before onAdd
30
- if (this.deck) {
31
- updateLayer(this.deck, this);
32
- }
33
- }
34
- render() {
35
- drawLayer(this.deck, this.map, this);
36
- }
37
- }
@@ -1,139 +0,0 @@
1
- import { Deck, assert } from '@deck.gl/core';
2
- import { getViewState } from './deck-utils';
3
- /**
4
- * Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface
5
- * Renders deck.gl layers over the base map and automatically synchronizes with the map's camera
6
- */
7
- export default class MapboxOverlay {
8
- constructor(props) {
9
- this._updateContainerSize = () => {
10
- if (this._map && this._container) {
11
- const { clientWidth, clientHeight } = this._map.getContainer();
12
- Object.assign(this._container.style, {
13
- width: `${clientWidth}px`,
14
- height: `${clientHeight}px`
15
- });
16
- }
17
- };
18
- this._updateViewState = () => {
19
- const deck = this._deck;
20
- if (deck) {
21
- // @ts-ignore (2345) map is always defined if deck is
22
- deck.setProps({ viewState: getViewState(this._map) });
23
- // Redraw immediately if view state has changed
24
- deck.redraw();
25
- }
26
- };
27
- this._handleMouseEvent = (event) => {
28
- const deck = this._deck;
29
- if (!deck) {
30
- return;
31
- }
32
- const mockEvent = {
33
- type: event.type,
34
- offsetCenter: event.point,
35
- srcEvent: event
36
- };
37
- switch (event.type) {
38
- case 'click':
39
- mockEvent.tapCount = 1;
40
- // Hack: because we do not listen to pointer down, perform picking now
41
- deck._onPointerDown(mockEvent);
42
- deck._onEvent(mockEvent);
43
- break;
44
- case 'dblclick':
45
- mockEvent.type = 'click';
46
- mockEvent.tapCount = 2;
47
- deck._onEvent(mockEvent);
48
- break;
49
- case 'mousemove':
50
- mockEvent.type = 'pointermove';
51
- deck._onPointerMove(mockEvent);
52
- break;
53
- case 'mouseout':
54
- mockEvent.type = 'pointerleave';
55
- deck._onPointerMove(mockEvent);
56
- break;
57
- default:
58
- return;
59
- }
60
- };
61
- this._props = { ...props };
62
- }
63
- /** Update (partial) props of the underlying Deck instance. */
64
- setProps(props) {
65
- Object.assign(this._props, props);
66
- if ('viewState' in this._props) {
67
- delete this._props.viewState;
68
- }
69
- if (this._deck) {
70
- this._deck.setProps(this._props);
71
- }
72
- }
73
- /** Called when the control is added to a map */
74
- onAdd(map) {
75
- this._map = map;
76
- /* global document */
77
- const container = document.createElement('div');
78
- Object.assign(container.style, {
79
- position: 'absolute',
80
- left: 0,
81
- top: 0,
82
- pointerEvents: 'none'
83
- });
84
- this._container = container;
85
- this._deck = new Deck({
86
- ...this._props,
87
- parent: container,
88
- viewState: getViewState(map)
89
- });
90
- map.on('resize', this._updateContainerSize);
91
- map.on('render', this._updateViewState);
92
- map.on('mousemove', this._handleMouseEvent);
93
- map.on('mouseout', this._handleMouseEvent);
94
- map.on('click', this._handleMouseEvent);
95
- map.on('dblclick', this._handleMouseEvent);
96
- this._updateContainerSize();
97
- return container;
98
- }
99
- /** Called when the control is removed from a map */
100
- onRemove() {
101
- const map = this._map;
102
- if (map) {
103
- map.off('resize', this._updateContainerSize);
104
- map.off('render', this._updateViewState);
105
- map.off('mousemove', this._handleMouseEvent);
106
- map.off('mouseout', this._handleMouseEvent);
107
- map.off('click', this._handleMouseEvent);
108
- map.off('dblclick', this._handleMouseEvent);
109
- }
110
- this._deck?.finalize();
111
- this._deck = undefined;
112
- this._map = undefined;
113
- this._container = undefined;
114
- }
115
- getDefaultPosition() {
116
- return 'top-left';
117
- }
118
- /** Forwards the Deck.pickObject method */
119
- pickObject(params) {
120
- assert(this._deck);
121
- return this._deck.pickObject(params);
122
- }
123
- /** Forwards the Deck.pickMultipleObjects method */
124
- pickMultipleObjects(params) {
125
- assert(this._deck);
126
- return this._deck.pickMultipleObjects(params);
127
- }
128
- /** Forwards the Deck.pickObjects method */
129
- pickObjects(params) {
130
- assert(this._deck);
131
- return this._deck.pickObjects(params);
132
- }
133
- /** Remove from map and releases all resources */
134
- finalize() {
135
- if (this._map) {
136
- this._map.removeControl(this);
137
- }
138
- }
139
- }