@deck.gl/mapbox 8.8.2 → 8.8.5
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 +12 -8
- package/dist/es5/deck-utils.js +6 -7
- package/dist/es5/deck-utils.js.map +1 -1
- package/dist/es5/resolve-layers.js +4 -1
- package/dist/es5/resolve-layers.js.map +1 -1
- package/dist/esm/deck-utils.js +6 -7
- package/dist/esm/deck-utils.js.map +1 -1
- package/dist/esm/resolve-layers.js +5 -1
- package/dist/esm/resolve-layers.js.map +1 -1
- package/dist.min.js +1 -1
- package/package.json +2 -2
- package/src/deck-utils.ts +7 -4
- package/src/resolve-layers.ts +5 -1
- package/typed/deck-utils.d.ts.map +1 -1
- package/typed/resolve-layers.d.ts.map +1 -1
package/dist/dist.dev.js
CHANGED
|
@@ -167,6 +167,7 @@ function getDeckInstance({
|
|
|
167
167
|
id: 'mapbox'
|
|
168
168
|
})]
|
|
169
169
|
};
|
|
170
|
+
let deckInstance;
|
|
170
171
|
|
|
171
172
|
if (!deck || deck.props.gl === gl) {
|
|
172
173
|
// deck is using the WebGLContext created by mapbox
|
|
@@ -180,11 +181,9 @@ function getDeckInstance({
|
|
|
180
181
|
}); // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.
|
|
181
182
|
// Otherwise (pure JS use case), we use the map's viewState to drive deck.
|
|
182
183
|
|
|
183
|
-
map.on('move', () => onMapMove(
|
|
184
|
+
map.on('move', () => onMapMove(deckInstance, map));
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
let deckInstance;
|
|
187
|
-
|
|
188
187
|
if (deck) {
|
|
189
188
|
deckInstance = deck;
|
|
190
189
|
deck.setProps(deckProps);
|
|
@@ -220,12 +219,14 @@ function drawLayer(deck, map, layer) {
|
|
|
220
219
|
let {
|
|
221
220
|
currentViewport
|
|
222
221
|
} = deck.userData;
|
|
222
|
+
let clearStack = false;
|
|
223
223
|
|
|
224
224
|
if (!currentViewport) {
|
|
225
225
|
// This is the first layer drawn in this render cycle.
|
|
226
226
|
// Generate viewport from the current map state.
|
|
227
227
|
currentViewport = getViewport(deck, map, true);
|
|
228
228
|
deck.userData.currentViewport = currentViewport;
|
|
229
|
+
clearStack = true;
|
|
229
230
|
}
|
|
230
231
|
|
|
231
232
|
if (!deck.isInitialized) {
|
|
@@ -237,6 +238,7 @@ function drawLayer(deck, map, layer) {
|
|
|
237
238
|
layerFilter: ({
|
|
238
239
|
layer: deckLayer
|
|
239
240
|
}) => layer.id === deckLayer.id,
|
|
241
|
+
clearStack,
|
|
240
242
|
clearCanvas: false
|
|
241
243
|
});
|
|
242
244
|
}
|
|
@@ -347,12 +349,9 @@ function updateLayers(deck) {
|
|
|
347
349
|
}
|
|
348
350
|
|
|
349
351
|
const layers = [];
|
|
350
|
-
let layerIndex = 0;
|
|
351
352
|
deck.userData.mapboxLayers.forEach(deckLayer => {
|
|
352
353
|
const LayerType = deckLayer.props.type;
|
|
353
|
-
const layer = new LayerType(deckLayer.props
|
|
354
|
-
_offset: layerIndex++
|
|
355
|
-
});
|
|
354
|
+
const layer = new LayerType(deckLayer.props);
|
|
356
355
|
layers.push(layer);
|
|
357
356
|
});
|
|
358
357
|
deck.setProps({
|
|
@@ -757,7 +756,12 @@ function resolveLayers(map, deck, oldLayers, newLayers) {
|
|
|
757
756
|
|
|
758
757
|
|
|
759
758
|
for (const layer of layers) {
|
|
760
|
-
|
|
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 {
|
|
761
765
|
map.addLayer(new _mapbox_layer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
|
762
766
|
id: layer.id,
|
|
763
767
|
deck
|
package/dist/es5/deck-utils.js
CHANGED
|
@@ -45,6 +45,7 @@ function getDeckInstance(_ref) {
|
|
|
45
45
|
id: 'mapbox'
|
|
46
46
|
})]
|
|
47
47
|
};
|
|
48
|
+
var deckInstance;
|
|
48
49
|
|
|
49
50
|
if (!deck || deck.props.gl === gl) {
|
|
50
51
|
Object.assign(deckProps, {
|
|
@@ -55,12 +56,10 @@ function getDeckInstance(_ref) {
|
|
|
55
56
|
viewState: getViewState(map)
|
|
56
57
|
});
|
|
57
58
|
map.on('move', function () {
|
|
58
|
-
return onMapMove(
|
|
59
|
+
return onMapMove(deckInstance, map);
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
var deckInstance;
|
|
63
|
-
|
|
64
63
|
if (deck) {
|
|
65
64
|
deckInstance = deck;
|
|
66
65
|
deck.setProps(deckProps);
|
|
@@ -99,10 +98,12 @@ function updateLayer(deck, layer) {
|
|
|
99
98
|
function drawLayer(deck, map, layer) {
|
|
100
99
|
var _ref2 = deck.userData,
|
|
101
100
|
currentViewport = _ref2.currentViewport;
|
|
101
|
+
var clearStack = false;
|
|
102
102
|
|
|
103
103
|
if (!currentViewport) {
|
|
104
104
|
currentViewport = getViewport(deck, map, true);
|
|
105
105
|
deck.userData.currentViewport = currentViewport;
|
|
106
|
+
clearStack = true;
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
if (!deck.isInitialized) {
|
|
@@ -115,6 +116,7 @@ function drawLayer(deck, map, layer) {
|
|
|
115
116
|
var deckLayer = _ref3.layer;
|
|
116
117
|
return layer.id === deckLayer.id;
|
|
117
118
|
},
|
|
119
|
+
clearStack: clearStack,
|
|
118
120
|
clearCanvas: false
|
|
119
121
|
});
|
|
120
122
|
}
|
|
@@ -225,12 +227,9 @@ function updateLayers(deck) {
|
|
|
225
227
|
}
|
|
226
228
|
|
|
227
229
|
var layers = [];
|
|
228
|
-
var layerIndex = 0;
|
|
229
230
|
deck.userData.mapboxLayers.forEach(function (deckLayer) {
|
|
230
231
|
var LayerType = deckLayer.props.type;
|
|
231
|
-
var layer = new LayerType(deckLayer.props
|
|
232
|
-
_offset: layerIndex++
|
|
233
|
-
});
|
|
232
|
+
var layer = new LayerType(deckLayer.props);
|
|
234
233
|
layers.push(layer);
|
|
235
234
|
});
|
|
236
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","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","deckInstance","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 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(deck!, map));\n }\n\n let deckInstance: Deck;\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 (
|
|
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","
|
|
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"}
|
package/dist/esm/deck-utils.js
CHANGED
|
@@ -28,6 +28,7 @@ export function getDeckInstance({
|
|
|
28
28
|
id: 'mapbox'
|
|
29
29
|
})]
|
|
30
30
|
};
|
|
31
|
+
let deckInstance;
|
|
31
32
|
|
|
32
33
|
if (!deck || deck.props.gl === gl) {
|
|
33
34
|
Object.assign(deckProps, {
|
|
@@ -37,11 +38,9 @@ export function getDeckInstance({
|
|
|
37
38
|
touchAction: 'unset',
|
|
38
39
|
viewState: getViewState(map)
|
|
39
40
|
});
|
|
40
|
-
map.on('move', () => onMapMove(
|
|
41
|
+
map.on('move', () => onMapMove(deckInstance, map));
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
let deckInstance;
|
|
44
|
-
|
|
45
44
|
if (deck) {
|
|
46
45
|
deckInstance = deck;
|
|
47
46
|
deck.setProps(deckProps);
|
|
@@ -77,10 +76,12 @@ export function drawLayer(deck, map, layer) {
|
|
|
77
76
|
let {
|
|
78
77
|
currentViewport
|
|
79
78
|
} = deck.userData;
|
|
79
|
+
let clearStack = false;
|
|
80
80
|
|
|
81
81
|
if (!currentViewport) {
|
|
82
82
|
currentViewport = getViewport(deck, map, true);
|
|
83
83
|
deck.userData.currentViewport = currentViewport;
|
|
84
|
+
clearStack = true;
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
if (!deck.isInitialized) {
|
|
@@ -92,6 +93,7 @@ export function drawLayer(deck, map, layer) {
|
|
|
92
93
|
layerFilter: ({
|
|
93
94
|
layer: deckLayer
|
|
94
95
|
}) => layer.id === deckLayer.id,
|
|
96
|
+
clearStack,
|
|
95
97
|
clearCanvas: false
|
|
96
98
|
});
|
|
97
99
|
}
|
|
@@ -189,12 +191,9 @@ function updateLayers(deck) {
|
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
const layers = [];
|
|
192
|
-
let layerIndex = 0;
|
|
193
194
|
deck.userData.mapboxLayers.forEach(deckLayer => {
|
|
194
195
|
const LayerType = deckLayer.props.type;
|
|
195
|
-
const layer = new LayerType(deckLayer.props
|
|
196
|
-
_offset: layerIndex++
|
|
197
|
-
});
|
|
196
|
+
const layer = new LayerType(deckLayer.props);
|
|
198
197
|
layers.push(layer);
|
|
199
198
|
});
|
|
200
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","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","deckInstance","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 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(deck!, map));\n }\n\n let deckInstance: Deck;\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
|
-
|
|
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","
|
|
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})}(r,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.
|
|
5
|
+
"version": "8.8.5",
|
|
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": "
|
|
38
|
+
"gitHead": "96af77adfd71563e0da68acd4e7ae318f551c5de"
|
|
39
39
|
}
|
package/src/deck-utils.ts
CHANGED
|
@@ -47,6 +47,8 @@ export function getDeckInstance({
|
|
|
47
47
|
views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
+
let deckInstance: Deck;
|
|
51
|
+
|
|
50
52
|
if (!deck || deck.props.gl === gl) {
|
|
51
53
|
// deck is using the WebGLContext created by mapbox
|
|
52
54
|
// block deck from setting the canvas size
|
|
@@ -59,10 +61,9 @@ export function getDeckInstance({
|
|
|
59
61
|
});
|
|
60
62
|
// If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.
|
|
61
63
|
// Otherwise (pure JS use case), we use the map's viewState to drive deck.
|
|
62
|
-
map.on('move', () => onMapMove(
|
|
64
|
+
map.on('move', () => onMapMove(deckInstance, map));
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
let deckInstance: Deck;
|
|
66
67
|
if (deck) {
|
|
67
68
|
deckInstance = deck;
|
|
68
69
|
deck.setProps(deckProps);
|
|
@@ -101,11 +102,13 @@ export function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {
|
|
|
101
102
|
|
|
102
103
|
export function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {
|
|
103
104
|
let {currentViewport} = deck.userData as UserData;
|
|
105
|
+
let clearStack: boolean = false;
|
|
104
106
|
if (!currentViewport) {
|
|
105
107
|
// This is the first layer drawn in this render cycle.
|
|
106
108
|
// Generate viewport from the current map state.
|
|
107
109
|
currentViewport = getViewport(deck, map, true);
|
|
108
110
|
(deck.userData as UserData).currentViewport = currentViewport;
|
|
111
|
+
clearStack = true;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
114
|
if (!deck.isInitialized) {
|
|
@@ -115,6 +118,7 @@ export function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {
|
|
|
115
118
|
deck._drawLayers('mapbox-repaint', {
|
|
116
119
|
viewports: [currentViewport],
|
|
117
120
|
layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,
|
|
121
|
+
clearStack,
|
|
118
122
|
clearCanvas: false
|
|
119
123
|
});
|
|
120
124
|
}
|
|
@@ -235,10 +239,9 @@ function updateLayers(deck: Deck): void {
|
|
|
235
239
|
}
|
|
236
240
|
|
|
237
241
|
const layers: Layer[] = [];
|
|
238
|
-
let layerIndex = 0;
|
|
239
242
|
(deck.userData as UserData).mapboxLayers.forEach(deckLayer => {
|
|
240
243
|
const LayerType = deckLayer.props.type;
|
|
241
|
-
const layer = new LayerType(deckLayer.props
|
|
244
|
+
const layer = new LayerType(deckLayer.props);
|
|
242
245
|
layers.push(layer);
|
|
243
246
|
});
|
|
244
247
|
deck.setProps({layers});
|
package/src/resolve-layers.ts
CHANGED
|
@@ -39,7 +39,11 @@ export function resolveLayers(
|
|
|
39
39
|
|
|
40
40
|
// Step 2: add missing layers
|
|
41
41
|
for (const layer of layers) {
|
|
42
|
-
|
|
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,
|
|
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,
|
|
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"}
|