@deck.gl/mapbox 8.8.0-beta.1 → 8.8.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +167 -24
- package/dist/es5/deck-utils.js +13 -11
- package/dist/es5/deck-utils.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mapbox-overlay.js +55 -11
- package/dist/es5/mapbox-overlay.js.map +1 -1
- package/dist/es5/resolve-layers.js +134 -0
- package/dist/es5/resolve-layers.js.map +1 -0
- package/dist/esm/deck-utils.js +13 -11
- package/dist/esm/deck-utils.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mapbox-overlay.js +49 -12
- package/dist/esm/mapbox-overlay.js.map +1 -1
- package/dist/esm/resolve-layers.js +73 -0
- package/dist/esm/resolve-layers.js.map +1 -0
- package/dist.min.js +1 -1
- package/package.json +2 -2
- package/src/deck-utils.ts +20 -11
- package/src/index.ts +2 -0
- package/src/mapbox-overlay.ts +69 -14
- package/src/resolve-layers.ts +89 -0
- package/typed/deck-utils.d.ts +6 -0
- package/typed/deck-utils.d.ts.map +1 -1
- package/typed/index.d.ts +1 -0
- package/typed/index.d.ts.map +1 -1
- package/typed/mapbox-overlay.d.ts +11 -2
- package/typed/mapbox-overlay.d.ts.map +1 -1
- package/typed/resolve-layers.d.ts +5 -0
- package/typed/resolve-layers.d.ts.map +1 -0
package/dist/dist.dev.js
CHANGED
|
@@ -183,25 +183,27 @@ function getDeckInstance({
|
|
|
183
183
|
map.on('move', () => onMapMove(deck, map));
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
+
let deckInstance;
|
|
187
|
+
|
|
186
188
|
if (deck) {
|
|
189
|
+
deckInstance = deck;
|
|
187
190
|
deck.setProps(deckProps);
|
|
188
191
|
deck.userData.isExternal = true;
|
|
189
192
|
} else {
|
|
190
|
-
|
|
193
|
+
deckInstance = new _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["Deck"](deckProps);
|
|
191
194
|
map.on('remove', () => {
|
|
192
|
-
|
|
195
|
+
deckInstance.finalize();
|
|
193
196
|
map.__deck = null;
|
|
194
197
|
});
|
|
195
198
|
}
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
map.__deck =
|
|
200
|
+
deckInstance.userData.mapboxLayers = new Set();
|
|
201
|
+
deckInstance.userData.mapboxVersion = getMapboxVersion(map);
|
|
202
|
+
map.__deck = deckInstance;
|
|
200
203
|
map.on('render', () => {
|
|
201
|
-
|
|
202
|
-
if (deck.layerManager) afterRender(deck, map);
|
|
204
|
+
if (deckInstance.isInitialized) afterRender(deckInstance, map);
|
|
203
205
|
});
|
|
204
|
-
return
|
|
206
|
+
return deckInstance;
|
|
205
207
|
}
|
|
206
208
|
function addLayer(deck, layer) {
|
|
207
209
|
deck.userData.mapboxLayers.add(layer);
|
|
@@ -224,10 +226,9 @@ function drawLayer(deck, map, layer) {
|
|
|
224
226
|
// Generate viewport from the current map state.
|
|
225
227
|
currentViewport = getViewport(deck, map, true);
|
|
226
228
|
deck.userData.currentViewport = currentViewport;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
+
}
|
|
229
230
|
|
|
230
|
-
if (!deck.
|
|
231
|
+
if (!deck.isInitialized) {
|
|
231
232
|
return;
|
|
232
233
|
}
|
|
233
234
|
|
|
@@ -252,6 +253,7 @@ function getViewState(map) {
|
|
|
252
253
|
zoom: map.getZoom(),
|
|
253
254
|
bearing: map.getBearing(),
|
|
254
255
|
pitch: map.getPitch(),
|
|
256
|
+
padding: map.getPadding(),
|
|
255
257
|
repeat: map.getRenderWorldCopies()
|
|
256
258
|
};
|
|
257
259
|
}
|
|
@@ -471,11 +473,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
471
473
|
/* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @deck.gl/core */ "@deck.gl/core");
|
|
472
474
|
/* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__);
|
|
473
475
|
/* harmony import */ var _deck_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deck-utils */ "./src/deck-utils.ts");
|
|
476
|
+
/* harmony import */ var _resolve_layers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./resolve-layers */ "./src/resolve-layers.ts");
|
|
474
477
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
475
478
|
|
|
476
479
|
|
|
477
480
|
|
|
478
481
|
|
|
482
|
+
|
|
479
483
|
/**
|
|
480
484
|
* Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface
|
|
481
485
|
* Renders deck.gl layers over the base map and automatically synchronizes with the map's camera
|
|
@@ -490,6 +494,12 @@ class MapboxOverlay {
|
|
|
490
494
|
|
|
491
495
|
_defineProperty(this, "_container", void 0);
|
|
492
496
|
|
|
497
|
+
_defineProperty(this, "_interleaved", void 0);
|
|
498
|
+
|
|
499
|
+
_defineProperty(this, "_handleStyleChange", () => {
|
|
500
|
+
Object(_resolve_layers__WEBPACK_IMPORTED_MODULE_2__["resolveLayers"])(this._map, this._deck, this._props.layers, this._props.layers);
|
|
501
|
+
});
|
|
502
|
+
|
|
493
503
|
_defineProperty(this, "_updateContainerSize", () => {
|
|
494
504
|
if (this._map && this._container) {
|
|
495
505
|
const {
|
|
@@ -567,19 +577,23 @@ class MapboxOverlay {
|
|
|
567
577
|
}
|
|
568
578
|
});
|
|
569
579
|
|
|
570
|
-
|
|
571
|
-
|
|
580
|
+
const {
|
|
581
|
+
interleaved = false,
|
|
582
|
+
...otherProps
|
|
583
|
+
} = props;
|
|
584
|
+
this._interleaved = interleaved;
|
|
585
|
+
this._props = otherProps;
|
|
572
586
|
}
|
|
573
587
|
/** Update (partial) props of the underlying Deck instance. */
|
|
574
588
|
|
|
575
589
|
|
|
576
590
|
setProps(props) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
if ('viewState' in this._props) {
|
|
580
|
-
delete this._props.viewState;
|
|
591
|
+
if (this._interleaved && props.layers) {
|
|
592
|
+
Object(_resolve_layers__WEBPACK_IMPORTED_MODULE_2__["resolveLayers"])(this._map, this._deck, this._props.layers, props.layers);
|
|
581
593
|
}
|
|
582
594
|
|
|
595
|
+
Object.assign(this._props, props);
|
|
596
|
+
|
|
583
597
|
if (this._deck) {
|
|
584
598
|
this._deck.setProps(this._props);
|
|
585
599
|
}
|
|
@@ -589,8 +603,11 @@ class MapboxOverlay {
|
|
|
589
603
|
|
|
590
604
|
onAdd(map) {
|
|
591
605
|
this._map = map;
|
|
592
|
-
|
|
606
|
+
return this._interleaved ? this._onAddInterleaved(map) : this._onAddOverlaid(map);
|
|
607
|
+
}
|
|
593
608
|
|
|
609
|
+
_onAddOverlaid(map) {
|
|
610
|
+
/* global document */
|
|
594
611
|
const container = document.createElement('div');
|
|
595
612
|
Object.assign(container.style, {
|
|
596
613
|
position: 'absolute',
|
|
@@ -614,6 +631,16 @@ class MapboxOverlay {
|
|
|
614
631
|
|
|
615
632
|
return container;
|
|
616
633
|
}
|
|
634
|
+
|
|
635
|
+
_onAddInterleaved(map) {
|
|
636
|
+
this._deck = new _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["Deck"]({ ...this._props,
|
|
637
|
+
// @ts-ignore non-public map property
|
|
638
|
+
gl: map.painter.context.gl
|
|
639
|
+
});
|
|
640
|
+
map.on('styledata', this._handleStyleChange);
|
|
641
|
+
Object(_resolve_layers__WEBPACK_IMPORTED_MODULE_2__["resolveLayers"])(map, this._deck, [], this._props.layers);
|
|
642
|
+
return document.createElement('div');
|
|
643
|
+
}
|
|
617
644
|
/** Called when the control is removed from a map */
|
|
618
645
|
|
|
619
646
|
|
|
@@ -621,12 +648,11 @@ class MapboxOverlay {
|
|
|
621
648
|
const map = this._map;
|
|
622
649
|
|
|
623
650
|
if (map) {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
map.off('dblclick', this._handleMouseEvent);
|
|
651
|
+
if (this._interleaved) {
|
|
652
|
+
this._onRemoveInterleaved(map);
|
|
653
|
+
} else {
|
|
654
|
+
this._onRemoveOverlaid(map);
|
|
655
|
+
}
|
|
630
656
|
}
|
|
631
657
|
|
|
632
658
|
this._deck?.finalize();
|
|
@@ -635,6 +661,20 @@ class MapboxOverlay {
|
|
|
635
661
|
this._container = undefined;
|
|
636
662
|
}
|
|
637
663
|
|
|
664
|
+
_onRemoveOverlaid(map) {
|
|
665
|
+
map.off('resize', this._updateContainerSize);
|
|
666
|
+
map.off('render', this._updateViewState);
|
|
667
|
+
map.off('mousemove', this._handleMouseEvent);
|
|
668
|
+
map.off('mouseout', this._handleMouseEvent);
|
|
669
|
+
map.off('click', this._handleMouseEvent);
|
|
670
|
+
map.off('dblclick', this._handleMouseEvent);
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
_onRemoveInterleaved(map) {
|
|
674
|
+
map.off('styledata', this._handleStyleChange);
|
|
675
|
+
Object(_resolve_layers__WEBPACK_IMPORTED_MODULE_2__["resolveLayers"])(map, this._deck, this._props.layers, []);
|
|
676
|
+
}
|
|
677
|
+
|
|
638
678
|
getDefaultPosition() {
|
|
639
679
|
return 'top-left';
|
|
640
680
|
}
|
|
@@ -672,6 +712,109 @@ class MapboxOverlay {
|
|
|
672
712
|
|
|
673
713
|
/***/ }),
|
|
674
714
|
|
|
715
|
+
/***/ "./src/resolve-layers.ts":
|
|
716
|
+
/*!*******************************!*\
|
|
717
|
+
!*** ./src/resolve-layers.ts ***!
|
|
718
|
+
\*******************************/
|
|
719
|
+
/*! exports provided: resolveLayers */
|
|
720
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
721
|
+
|
|
722
|
+
"use strict";
|
|
723
|
+
__webpack_require__.r(__webpack_exports__);
|
|
724
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveLayers", function() { return resolveLayers; });
|
|
725
|
+
/* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @deck.gl/core */ "@deck.gl/core");
|
|
726
|
+
/* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__);
|
|
727
|
+
/* harmony import */ var _mapbox_layer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mapbox-layer */ "./src/mapbox-layer.ts");
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
const UNDEFINED_BEFORE_ID = '__UNDEFINED__';
|
|
731
|
+
/** Insert Deck layers into the mapbox Map according to the user-defined order */
|
|
732
|
+
|
|
733
|
+
function resolveLayers(map, deck, oldLayers, newLayers) {
|
|
734
|
+
// Wait until map style is loaded
|
|
735
|
+
// @ts-ignore non-public map property
|
|
736
|
+
if (!map || !deck || !map.style || !map.style._loaded) {
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
const layers = Object(_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["_flatten"])(newLayers, Boolean);
|
|
741
|
+
|
|
742
|
+
if (oldLayers !== newLayers) {
|
|
743
|
+
// Step 1: remove layers that no longer exist
|
|
744
|
+
const prevLayers = Object(_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["_flatten"])(oldLayers, Boolean);
|
|
745
|
+
const prevLayerIds = new Set(prevLayers.map(l => l.id));
|
|
746
|
+
|
|
747
|
+
for (const layer of layers) {
|
|
748
|
+
prevLayerIds.delete(layer.id);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
for (const id of prevLayerIds) {
|
|
752
|
+
if (map.getLayer(id)) {
|
|
753
|
+
map.removeLayer(id);
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
} // Step 2: add missing layers
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
for (const layer of layers) {
|
|
760
|
+
if (!map.getLayer(layer.id)) {
|
|
761
|
+
map.addLayer(new _mapbox_layer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
|
762
|
+
id: layer.id,
|
|
763
|
+
deck
|
|
764
|
+
}), // @ts-expect-error beforeId is not defined in LayerProps
|
|
765
|
+
layer.props.beforeId);
|
|
766
|
+
}
|
|
767
|
+
} // Step 3: check the order of layers
|
|
768
|
+
// If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]
|
|
769
|
+
// If beforeId is not defined, the deck layer should appear after all mapbox layers
|
|
770
|
+
// When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers
|
|
771
|
+
// @ts-ignore non-public map property
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
const mapLayers = map.style._order; // Group deck layers by beforeId
|
|
775
|
+
|
|
776
|
+
const layerGroups = {};
|
|
777
|
+
|
|
778
|
+
for (const layer of layers) {
|
|
779
|
+
// @ts-expect-error beforeId is not defined in LayerProps
|
|
780
|
+
let {
|
|
781
|
+
beforeId
|
|
782
|
+
} = layer.props;
|
|
783
|
+
|
|
784
|
+
if (!beforeId || !mapLayers.includes(beforeId)) {
|
|
785
|
+
beforeId = UNDEFINED_BEFORE_ID;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
layerGroups[beforeId] = layerGroups[beforeId] || [];
|
|
789
|
+
layerGroups[beforeId].push(layer.id);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
for (const beforeId in layerGroups) {
|
|
793
|
+
const layerGroup = layerGroups[beforeId];
|
|
794
|
+
let lastLayerIndex = beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);
|
|
795
|
+
let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;
|
|
796
|
+
|
|
797
|
+
for (let i = layerGroup.length - 1; i >= 0; i--) {
|
|
798
|
+
const layerId = layerGroup[i];
|
|
799
|
+
const layerIndex = mapLayers.indexOf(layerId);
|
|
800
|
+
|
|
801
|
+
if (layerIndex !== lastLayerIndex - 1) {
|
|
802
|
+
map.moveLayer(layerId, lastLayerId);
|
|
803
|
+
|
|
804
|
+
if (layerIndex > lastLayerIndex) {
|
|
805
|
+
// The last layer's index have changed
|
|
806
|
+
lastLayerIndex++;
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
lastLayerIndex--;
|
|
811
|
+
lastLayerId = layerId;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/***/ }),
|
|
817
|
+
|
|
675
818
|
/***/ "@deck.gl/core":
|
|
676
819
|
/*!***********************!*\
|
|
677
820
|
!*** external "deck" ***!
|
package/dist/es5/deck-utils.js
CHANGED
|
@@ -17,8 +17,6 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
17
17
|
var _core = require("@deck.gl/core");
|
|
18
18
|
|
|
19
19
|
function getDeckInstance(_ref) {
|
|
20
|
-
var _deck;
|
|
21
|
-
|
|
22
20
|
var map = _ref.map,
|
|
23
21
|
gl = _ref.gl,
|
|
24
22
|
deck = _ref.deck;
|
|
@@ -27,7 +25,7 @@ function getDeckInstance(_ref) {
|
|
|
27
25
|
return map.__deck;
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
var customRender =
|
|
28
|
+
var customRender = deck === null || deck === void 0 ? void 0 : deck.props._customRender;
|
|
31
29
|
var deckProps = {
|
|
32
30
|
useDevicePixels: true,
|
|
33
31
|
_customRender: function _customRender(reason) {
|
|
@@ -61,24 +59,27 @@ function getDeckInstance(_ref) {
|
|
|
61
59
|
});
|
|
62
60
|
}
|
|
63
61
|
|
|
62
|
+
var deckInstance;
|
|
63
|
+
|
|
64
64
|
if (deck) {
|
|
65
|
+
deckInstance = deck;
|
|
65
66
|
deck.setProps(deckProps);
|
|
66
67
|
deck.userData.isExternal = true;
|
|
67
68
|
} else {
|
|
68
|
-
|
|
69
|
+
deckInstance = new _core.Deck(deckProps);
|
|
69
70
|
map.on('remove', function () {
|
|
70
|
-
|
|
71
|
+
deckInstance.finalize();
|
|
71
72
|
map.__deck = null;
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
map.__deck =
|
|
76
|
+
deckInstance.userData.mapboxLayers = new Set();
|
|
77
|
+
deckInstance.userData.mapboxVersion = getMapboxVersion(map);
|
|
78
|
+
map.__deck = deckInstance;
|
|
78
79
|
map.on('render', function () {
|
|
79
|
-
if (
|
|
80
|
+
if (deckInstance.isInitialized) afterRender(deckInstance, map);
|
|
80
81
|
});
|
|
81
|
-
return
|
|
82
|
+
return deckInstance;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
function addLayer(deck, layer) {
|
|
@@ -104,7 +105,7 @@ function drawLayer(deck, map, layer) {
|
|
|
104
105
|
deck.userData.currentViewport = currentViewport;
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
if (!deck.
|
|
108
|
+
if (!deck.isInitialized) {
|
|
108
109
|
return;
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -129,6 +130,7 @@ function getViewState(map) {
|
|
|
129
130
|
zoom: map.getZoom(),
|
|
130
131
|
bearing: map.getBearing(),
|
|
131
132
|
pitch: map.getPitch(),
|
|
133
|
+
padding: map.getPadding(),
|
|
132
134
|
repeat: map.getRenderWorldCopies()
|
|
133
135
|
};
|
|
134
136
|
}
|
|
@@ -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","setProps","userData","isExternal","Deck","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","layerManager","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","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 if (deck) {\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deck = new Deck(deckProps);\n map.on('remove', () => {\n deck!.finalize();\n map.__deck = null;\n });\n }\n\n (deck.userData as UserData).mapboxLayers = new Set();\n (deck.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deck;\n map.on('render', () => {\n // @ts-expect-error (2445) protected property\n if (deck.layerManager) afterRender(deck, map);\n });\n\n return deck;\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 // @ts-expect-error (2445) protected property\n if (!deck.layerManager) {\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 & {repeat: boolean} {\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 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","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"}
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export {default as MapboxLayer} from './mapbox-layer';\nexport {default as MapboxOverlay} from './mapbox-overlay';\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export {default as MapboxLayer} from './mapbox-layer';\nexport {default as MapboxOverlay} from './mapbox-overlay';\n\nexport type {MapboxOverlayProps} from './mapbox-overlay';\n"],"file":"index.js"}
|
|
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
|
|
10
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
13
|
|
|
12
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -17,6 +19,10 @@ var _core = require("@deck.gl/core");
|
|
|
17
19
|
|
|
18
20
|
var _deckUtils = require("./deck-utils");
|
|
19
21
|
|
|
22
|
+
var _resolveLayers = require("./resolve-layers");
|
|
23
|
+
|
|
24
|
+
var _excluded = ["interleaved"];
|
|
25
|
+
|
|
20
26
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
21
27
|
|
|
22
28
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
@@ -30,6 +36,10 @@ var MapboxOverlay = function () {
|
|
|
30
36
|
(0, _defineProperty2.default)(this, "_deck", void 0);
|
|
31
37
|
(0, _defineProperty2.default)(this, "_map", void 0);
|
|
32
38
|
(0, _defineProperty2.default)(this, "_container", void 0);
|
|
39
|
+
(0, _defineProperty2.default)(this, "_interleaved", void 0);
|
|
40
|
+
(0, _defineProperty2.default)(this, "_handleStyleChange", function () {
|
|
41
|
+
(0, _resolveLayers.resolveLayers)(_this._map, _this._deck, _this._props.layers, _this._props.layers);
|
|
42
|
+
});
|
|
33
43
|
(0, _defineProperty2.default)(this, "_updateContainerSize", function () {
|
|
34
44
|
if (_this._map && _this._container) {
|
|
35
45
|
var _this$_map$getContain = _this._map.getContainer(),
|
|
@@ -101,18 +111,22 @@ var MapboxOverlay = function () {
|
|
|
101
111
|
return;
|
|
102
112
|
}
|
|
103
113
|
});
|
|
104
|
-
|
|
114
|
+
var _props$interleaved = props.interleaved,
|
|
115
|
+
interleaved = _props$interleaved === void 0 ? false : _props$interleaved,
|
|
116
|
+
otherProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
117
|
+
this._interleaved = interleaved;
|
|
118
|
+
this._props = otherProps;
|
|
105
119
|
}
|
|
106
120
|
|
|
107
121
|
(0, _createClass2.default)(MapboxOverlay, [{
|
|
108
122
|
key: "setProps",
|
|
109
123
|
value: function setProps(props) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if ('viewState' in this._props) {
|
|
113
|
-
delete this._props.viewState;
|
|
124
|
+
if (this._interleaved && props.layers) {
|
|
125
|
+
(0, _resolveLayers.resolveLayers)(this._map, this._deck, this._props.layers, props.layers);
|
|
114
126
|
}
|
|
115
127
|
|
|
128
|
+
Object.assign(this._props, props);
|
|
129
|
+
|
|
116
130
|
if (this._deck) {
|
|
117
131
|
this._deck.setProps(this._props);
|
|
118
132
|
}
|
|
@@ -121,6 +135,11 @@ var MapboxOverlay = function () {
|
|
|
121
135
|
key: "onAdd",
|
|
122
136
|
value: function onAdd(map) {
|
|
123
137
|
this._map = map;
|
|
138
|
+
return this._interleaved ? this._onAddInterleaved(map) : this._onAddOverlaid(map);
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
key: "_onAddOverlaid",
|
|
142
|
+
value: function _onAddOverlaid(map) {
|
|
124
143
|
var container = document.createElement('div');
|
|
125
144
|
Object.assign(container.style, {
|
|
126
145
|
position: 'absolute',
|
|
@@ -144,6 +163,16 @@ var MapboxOverlay = function () {
|
|
|
144
163
|
|
|
145
164
|
return container;
|
|
146
165
|
}
|
|
166
|
+
}, {
|
|
167
|
+
key: "_onAddInterleaved",
|
|
168
|
+
value: function _onAddInterleaved(map) {
|
|
169
|
+
this._deck = new _core.Deck(_objectSpread(_objectSpread({}, this._props), {}, {
|
|
170
|
+
gl: map.painter.context.gl
|
|
171
|
+
}));
|
|
172
|
+
map.on('styledata', this._handleStyleChange);
|
|
173
|
+
(0, _resolveLayers.resolveLayers)(map, this._deck, [], this._props.layers);
|
|
174
|
+
return document.createElement('div');
|
|
175
|
+
}
|
|
147
176
|
}, {
|
|
148
177
|
key: "onRemove",
|
|
149
178
|
value: function onRemove() {
|
|
@@ -152,12 +181,11 @@ var MapboxOverlay = function () {
|
|
|
152
181
|
var map = this._map;
|
|
153
182
|
|
|
154
183
|
if (map) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
map.off('dblclick', this._handleMouseEvent);
|
|
184
|
+
if (this._interleaved) {
|
|
185
|
+
this._onRemoveInterleaved(map);
|
|
186
|
+
} else {
|
|
187
|
+
this._onRemoveOverlaid(map);
|
|
188
|
+
}
|
|
161
189
|
}
|
|
162
190
|
|
|
163
191
|
(_this$_deck = this._deck) === null || _this$_deck === void 0 ? void 0 : _this$_deck.finalize();
|
|
@@ -165,6 +193,22 @@ var MapboxOverlay = function () {
|
|
|
165
193
|
this._map = undefined;
|
|
166
194
|
this._container = undefined;
|
|
167
195
|
}
|
|
196
|
+
}, {
|
|
197
|
+
key: "_onRemoveOverlaid",
|
|
198
|
+
value: function _onRemoveOverlaid(map) {
|
|
199
|
+
map.off('resize', this._updateContainerSize);
|
|
200
|
+
map.off('render', this._updateViewState);
|
|
201
|
+
map.off('mousemove', this._handleMouseEvent);
|
|
202
|
+
map.off('mouseout', this._handleMouseEvent);
|
|
203
|
+
map.off('click', this._handleMouseEvent);
|
|
204
|
+
map.off('dblclick', this._handleMouseEvent);
|
|
205
|
+
}
|
|
206
|
+
}, {
|
|
207
|
+
key: "_onRemoveInterleaved",
|
|
208
|
+
value: function _onRemoveInterleaved(map) {
|
|
209
|
+
map.off('styledata', this._handleStyleChange);
|
|
210
|
+
(0, _resolveLayers.resolveLayers)(map, this._deck, this._props.layers, []);
|
|
211
|
+
}
|
|
168
212
|
}, {
|
|
169
213
|
key: "getDefaultPosition",
|
|
170
214
|
value: function getDefaultPosition() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mapbox-overlay.ts"],"names":["MapboxOverlay","props","_map","_container","getContainer","clientWidth","clientHeight","Object","assign","style","width","height","deck","_deck","setProps","viewState","redraw","event","mockEvent","type","offsetCenter","point","srcEvent","tapCount","_onPointerDown","_onEvent","_onPointerMove","_props","map","container","document","createElement","position","left","top","pointerEvents","Deck","parent","on","_updateContainerSize","_updateViewState","_handleMouseEvent","off","finalize","undefined","params","pickObject","pickMultipleObjects","pickObjects","removeControl"],"mappings":"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","sourcesContent":["import {Deck, assert} from '@deck.gl/core';\nimport {getViewState} from './deck-utils';\n\nimport type {Map, IControl, MapMouseEvent} from 'mapbox-gl';\nimport type {MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\nimport type {DeckProps} from '@deck.gl/core';\n\n/**\n * Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface\n * Renders deck.gl layers over the base map and automatically synchronizes with the map's camera\n */\nexport default class MapboxOverlay implements IControl {\n private _props: DeckProps;\n private _deck?: Deck;\n private _map?: Map;\n private _container?: HTMLDivElement;\n\n constructor(props: DeckProps) {\n this._props = {...props};\n }\n\n /** Update (partial) props of the underlying Deck instance. */\n setProps(props: DeckProps): void {\n Object.assign(this._props, props);\n\n if ('viewState' in this._props) {\n delete this._props.viewState;\n }\n\n if (this._deck) {\n this._deck.setProps(this._props);\n }\n }\n\n /** Called when the control is added to a map */\n onAdd(map: Map): HTMLDivElement {\n this._map = map;\n\n /* global document */\n const container = document.createElement('div');\n Object.assign(container.style, {\n position: 'absolute',\n left: 0,\n top: 0,\n pointerEvents: 'none'\n });\n this._container = container;\n\n this._deck = new Deck({\n ...this._props,\n parent: container,\n viewState: getViewState(map)\n });\n\n map.on('resize', this._updateContainerSize);\n map.on('render', this._updateViewState);\n map.on('mousemove', this._handleMouseEvent);\n map.on('mouseout', this._handleMouseEvent);\n map.on('click', this._handleMouseEvent);\n map.on('dblclick', this._handleMouseEvent);\n\n this._updateContainerSize();\n return container;\n }\n\n /** Called when the control is removed from a map */\n onRemove(): void {\n const map = this._map;\n\n if (map) {\n map.off('resize', this._updateContainerSize);\n map.off('render', this._updateViewState);\n map.off('mousemove', this._handleMouseEvent);\n map.off('mouseout', this._handleMouseEvent);\n map.off('click', this._handleMouseEvent);\n map.off('dblclick', this._handleMouseEvent);\n }\n\n this._deck?.finalize();\n this._deck = undefined;\n this._map = undefined;\n this._container = undefined;\n }\n\n getDefaultPosition() {\n return 'top-left';\n }\n\n /** Forwards the Deck.pickObject method */\n pickObject(params: Parameters<Deck['pickObject']>[0]): ReturnType<Deck['pickObject']> {\n assert(this._deck);\n return this._deck.pickObject(params);\n }\n\n /** Forwards the Deck.pickMultipleObjects method */\n pickMultipleObjects(\n params: Parameters<Deck['pickMultipleObjects']>[0]\n ): ReturnType<Deck['pickMultipleObjects']> {\n assert(this._deck);\n return this._deck.pickMultipleObjects(params);\n }\n\n /** Forwards the Deck.pickObjects method */\n pickObjects(params: Parameters<Deck['pickObjects']>[0]): ReturnType<Deck['pickObjects']> {\n assert(this._deck);\n return this._deck.pickObjects(params);\n }\n\n /** Remove from map and releases all resources */\n finalize() {\n if (this._map) {\n this._map.removeControl(this);\n }\n }\n\n private _updateContainerSize = () => {\n if (this._map && this._container) {\n const {clientWidth, clientHeight} = this._map.getContainer();\n Object.assign(this._container.style, {\n width: `${clientWidth}px`,\n height: `${clientHeight}px`\n });\n }\n };\n\n private _updateViewState = () => {\n const deck = this._deck;\n if (deck) {\n // @ts-ignore (2345) map is always defined if deck is\n deck.setProps({viewState: getViewState(this._map)});\n // Redraw immediately if view state has changed\n deck.redraw();\n }\n };\n\n private _handleMouseEvent = (event: MapMouseEvent) => {\n const deck = this._deck;\n if (!deck) {\n return;\n }\n\n const mockEvent: {\n type: string;\n offsetCenter: {x: number; y: number};\n srcEvent: MapMouseEvent;\n tapCount?: number;\n } = {\n type: event.type,\n offsetCenter: event.point,\n srcEvent: event\n };\n\n switch (event.type) {\n case 'click':\n mockEvent.tapCount = 1;\n // Hack: because we do not listen to pointer down, perform picking now\n deck._onPointerDown(mockEvent as MjolnirGestureEvent);\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'dblclick':\n mockEvent.type = 'click';\n mockEvent.tapCount = 2;\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'mousemove':\n mockEvent.type = 'pointermove';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n case 'mouseout':\n mockEvent.type = 'pointerleave';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n default:\n return;\n }\n };\n}\n"],"file":"mapbox-overlay.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/mapbox-overlay.ts"],"names":["MapboxOverlay","props","_map","_deck","_props","layers","_container","getContainer","clientWidth","clientHeight","Object","assign","style","width","height","deck","setProps","viewState","redraw","event","mockEvent","type","offsetCenter","point","srcEvent","tapCount","_onPointerDown","_onEvent","_onPointerMove","interleaved","otherProps","_interleaved","map","_onAddInterleaved","_onAddOverlaid","container","document","createElement","position","left","top","pointerEvents","Deck","parent","on","_updateContainerSize","_updateViewState","_handleMouseEvent","gl","painter","context","_handleStyleChange","_onRemoveInterleaved","_onRemoveOverlaid","finalize","undefined","off","params","pickObject","pickMultipleObjects","pickObjects","removeControl"],"mappings":"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","sourcesContent":["import {Deck, assert} from '@deck.gl/core';\nimport {getViewState} from './deck-utils';\n\nimport type {Map, IControl, MapMouseEvent} from 'mapbox-gl';\nimport type {MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\nimport type {DeckProps} from '@deck.gl/core';\n\nimport {resolveLayers} from './resolve-layers';\n\nexport type MapboxOverlayProps = Omit<\n DeckProps,\n | 'width'\n | 'height'\n | 'gl'\n | 'parent'\n | 'canvas'\n | '_customRender'\n | 'viewState'\n | 'initialViewState'\n | 'controller'\n>;\n\n/**\n * Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface\n * Renders deck.gl layers over the base map and automatically synchronizes with the map's camera\n */\nexport default class MapboxOverlay implements IControl {\n private _props: MapboxOverlayProps;\n private _deck?: Deck;\n private _map?: Map;\n private _container?: HTMLDivElement;\n private _interleaved: boolean;\n\n constructor(\n props: MapboxOverlayProps & {\n interleaved?: boolean;\n }\n ) {\n const {interleaved = false, ...otherProps} = props;\n this._interleaved = interleaved;\n this._props = otherProps;\n }\n\n /** Update (partial) props of the underlying Deck instance. */\n setProps(props: MapboxOverlayProps): void {\n if (this._interleaved && props.layers) {\n resolveLayers(this._map, this._deck, this._props.layers, props.layers);\n }\n\n Object.assign(this._props, props);\n\n if (this._deck) {\n this._deck.setProps(this._props);\n }\n }\n\n /** Called when the control is added to a map */\n onAdd(map: Map): HTMLDivElement {\n this._map = map;\n return this._interleaved ? this._onAddInterleaved(map) : this._onAddOverlaid(map);\n }\n\n private _onAddOverlaid(map: Map): HTMLDivElement {\n /* global document */\n const container = document.createElement('div');\n Object.assign(container.style, {\n position: 'absolute',\n left: 0,\n top: 0,\n pointerEvents: 'none'\n });\n this._container = container;\n\n this._deck = new Deck({\n ...this._props,\n parent: container,\n viewState: getViewState(map)\n });\n\n map.on('resize', this._updateContainerSize);\n map.on('render', this._updateViewState);\n map.on('mousemove', this._handleMouseEvent);\n map.on('mouseout', this._handleMouseEvent);\n map.on('click', this._handleMouseEvent);\n map.on('dblclick', this._handleMouseEvent);\n\n this._updateContainerSize();\n return container;\n }\n\n private _onAddInterleaved(map: Map): HTMLDivElement {\n this._deck = new Deck({\n ...this._props,\n // @ts-ignore non-public map property\n gl: map.painter.context.gl\n });\n\n map.on('styledata', this._handleStyleChange);\n resolveLayers(map, this._deck, [], this._props.layers);\n\n return document.createElement('div');\n }\n\n /** Called when the control is removed from a map */\n onRemove(): void {\n const map = this._map;\n\n if (map) {\n if (this._interleaved) {\n this._onRemoveInterleaved(map);\n } else {\n this._onRemoveOverlaid(map);\n }\n }\n\n this._deck?.finalize();\n this._deck = undefined;\n this._map = undefined;\n this._container = undefined;\n }\n\n private _onRemoveOverlaid(map: Map): void {\n map.off('resize', this._updateContainerSize);\n map.off('render', this._updateViewState);\n map.off('mousemove', this._handleMouseEvent);\n map.off('mouseout', this._handleMouseEvent);\n map.off('click', this._handleMouseEvent);\n map.off('dblclick', this._handleMouseEvent);\n }\n\n private _onRemoveInterleaved(map: Map): void {\n map.off('styledata', this._handleStyleChange);\n resolveLayers(map, this._deck, this._props.layers, []);\n }\n\n getDefaultPosition() {\n return 'top-left';\n }\n\n /** Forwards the Deck.pickObject method */\n pickObject(params: Parameters<Deck['pickObject']>[0]): ReturnType<Deck['pickObject']> {\n assert(this._deck);\n return this._deck.pickObject(params);\n }\n\n /** Forwards the Deck.pickMultipleObjects method */\n pickMultipleObjects(\n params: Parameters<Deck['pickMultipleObjects']>[0]\n ): ReturnType<Deck['pickMultipleObjects']> {\n assert(this._deck);\n return this._deck.pickMultipleObjects(params);\n }\n\n /** Forwards the Deck.pickObjects method */\n pickObjects(params: Parameters<Deck['pickObjects']>[0]): ReturnType<Deck['pickObjects']> {\n assert(this._deck);\n return this._deck.pickObjects(params);\n }\n\n /** Remove from map and releases all resources */\n finalize() {\n if (this._map) {\n this._map.removeControl(this);\n }\n }\n\n private _handleStyleChange = () => {\n resolveLayers(this._map, this._deck, this._props.layers, this._props.layers);\n };\n\n private _updateContainerSize = () => {\n if (this._map && this._container) {\n const {clientWidth, clientHeight} = this._map.getContainer();\n Object.assign(this._container.style, {\n width: `${clientWidth}px`,\n height: `${clientHeight}px`\n });\n }\n };\n\n private _updateViewState = () => {\n const deck = this._deck;\n if (deck) {\n // @ts-ignore (2345) map is always defined if deck is\n deck.setProps({viewState: getViewState(this._map)});\n // Redraw immediately if view state has changed\n deck.redraw();\n }\n };\n\n private _handleMouseEvent = (event: MapMouseEvent) => {\n const deck = this._deck;\n if (!deck) {\n return;\n }\n\n const mockEvent: {\n type: string;\n offsetCenter: {x: number; y: number};\n srcEvent: MapMouseEvent;\n tapCount?: number;\n } = {\n type: event.type,\n offsetCenter: event.point,\n srcEvent: event\n };\n\n switch (event.type) {\n case 'click':\n mockEvent.tapCount = 1;\n // Hack: because we do not listen to pointer down, perform picking now\n deck._onPointerDown(mockEvent as MjolnirGestureEvent);\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'dblclick':\n mockEvent.type = 'click';\n mockEvent.tapCount = 2;\n deck._onEvent(mockEvent as MjolnirGestureEvent);\n break;\n\n case 'mousemove':\n mockEvent.type = 'pointermove';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n case 'mouseout':\n mockEvent.type = 'pointerleave';\n deck._onPointerMove(mockEvent as MjolnirPointerEvent);\n break;\n\n default:\n return;\n }\n };\n}\n"],"file":"mapbox-overlay.js"}
|