@deck.gl/mapbox 9.1.0-beta.1 → 9.1.0-beta.3

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.
@@ -3,9 +3,15 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {Deck, assert} from '@deck.gl/core';
6
- import {getViewState, getDeckInstance, removeDeckInstance, getInterleavedProps} from './deck-utils';
7
-
8
- import type {Map, IControl, MapMouseEvent} from 'mapbox-gl';
6
+ import {
7
+ getViewState,
8
+ getDefaultView,
9
+ getDeckInstance,
10
+ removeDeckInstance,
11
+ getDefaultParameters
12
+ } from './deck-utils';
13
+
14
+ import type {Map, IControl, MapMouseEvent, ControlPosition} from './types';
9
15
  import type {MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';
10
16
  import type {DeckProps} from '@deck.gl/core';
11
17
  import {log} from '@deck.gl/core';
@@ -26,7 +32,6 @@ export type MapboxOverlayProps = Omit<
26
32
  > & {
27
33
  interleaved?: boolean;
28
34
  };
29
- type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
30
35
 
31
36
  /**
32
37
  * Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface
@@ -34,7 +39,7 @@ type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
34
39
  */
35
40
  export default class MapboxOverlay implements IControl {
36
41
  private _props: MapboxOverlayProps;
37
- private _deck?: Deck;
42
+ private _deck?: Deck<any>;
38
43
  private _map?: Map;
39
44
  private _container?: HTMLDivElement;
40
45
  private _interleaved: boolean;
@@ -54,8 +59,14 @@ export default class MapboxOverlay implements IControl {
54
59
 
55
60
  Object.assign(this._props, props);
56
61
 
57
- if (this._deck) {
58
- this._deck.setProps(this._interleaved ? getInterleavedProps(this._props) : this._props);
62
+ if (this._deck && this._map) {
63
+ this._deck.setProps({
64
+ ...this._props,
65
+ parameters: {
66
+ ...getDefaultParameters(this._map, this._interleaved),
67
+ ...this._props.parameters
68
+ }
69
+ });
59
70
  }
60
71
  }
61
72
 
@@ -77,9 +88,11 @@ export default class MapboxOverlay implements IControl {
77
88
  });
78
89
  this._container = container;
79
90
 
80
- this._deck = new Deck({
91
+ this._deck = new Deck<any>({
81
92
  ...this._props,
82
93
  parent: container,
94
+ parameters: {...getDefaultParameters(map, false), ...this._props.parameters},
95
+ views: this._props.views || getDefaultView(map),
83
96
  viewState: getViewState(map)
84
97
  });
85
98
 
@@ -213,9 +226,12 @@ export default class MapboxOverlay implements IControl {
213
226
 
214
227
  private _updateViewState = () => {
215
228
  const deck = this._deck;
216
- if (deck) {
217
- // @ts-ignore (2345) map is always defined if deck is
218
- deck.setProps({viewState: getViewState(this._map)});
229
+ const map = this._map;
230
+ if (deck && map) {
231
+ deck.setProps({
232
+ views: this._props.views || getDefaultView(map),
233
+ viewState: getViewState(map)
234
+ });
219
235
  // Redraw immediately if view state has changed
220
236
  if (deck.isInitialized) {
221
237
  deck.redraw();
@@ -256,7 +272,7 @@ export default class MapboxOverlay implements IControl {
256
272
 
257
273
  switch (mockEvent.type) {
258
274
  case 'mousedown':
259
- deck._onPointerDown(mockEvent as MjolnirPointerEvent);
275
+ deck._onPointerDown(mockEvent as unknown as MjolnirPointerEvent);
260
276
  this._lastMouseDownPoint = {
261
277
  ...event.point,
262
278
  clientX: event.originalEvent.clientX,
@@ -266,38 +282,38 @@ export default class MapboxOverlay implements IControl {
266
282
 
267
283
  case 'dragstart':
268
284
  mockEvent.type = 'panstart';
269
- deck._onEvent(mockEvent as MjolnirGestureEvent);
285
+ deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);
270
286
  break;
271
287
 
272
288
  case 'drag':
273
289
  mockEvent.type = 'panmove';
274
- deck._onEvent(mockEvent as MjolnirGestureEvent);
290
+ deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);
275
291
  break;
276
292
 
277
293
  case 'dragend':
278
294
  mockEvent.type = 'panend';
279
- deck._onEvent(mockEvent as MjolnirGestureEvent);
295
+ deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);
280
296
  break;
281
297
 
282
298
  case 'click':
283
299
  mockEvent.tapCount = 1;
284
- deck._onEvent(mockEvent as MjolnirGestureEvent);
300
+ deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);
285
301
  break;
286
302
 
287
303
  case 'dblclick':
288
304
  mockEvent.type = 'click';
289
305
  mockEvent.tapCount = 2;
290
- deck._onEvent(mockEvent as MjolnirGestureEvent);
306
+ deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);
291
307
  break;
292
308
 
293
309
  case 'mousemove':
294
310
  mockEvent.type = 'pointermove';
295
- deck._onPointerMove(mockEvent as MjolnirPointerEvent);
311
+ deck._onPointerMove(mockEvent as unknown as MjolnirPointerEvent);
296
312
  break;
297
313
 
298
314
  case 'mouseout':
299
315
  mockEvent.type = 'pointerleave';
300
- deck._onPointerMove(mockEvent as MjolnirPointerEvent);
316
+ deck._onPointerMove(mockEvent as unknown as MjolnirPointerEvent);
301
317
  break;
302
318
 
303
319
  default:
@@ -6,7 +6,7 @@ import {_flatten as flatten} from '@deck.gl/core';
6
6
  import MapboxLayer from './mapbox-layer';
7
7
 
8
8
  import type {Deck, LayersList, Layer} from '@deck.gl/core';
9
- import type {Map} from 'mapbox-gl';
9
+ import type {Map} from './types';
10
10
 
11
11
  const UNDEFINED_BEFORE_ID = '__UNDEFINED__';
12
12
 
package/src/types.ts ADDED
@@ -0,0 +1,125 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ // Types that offer basic interface compatible with mapbox-gl and maplibre-gl
6
+
7
+ type Listener = (event?: any) => any;
8
+
9
+ export interface Evented {
10
+ on(type: string, listener: Listener);
11
+
12
+ off(type: string, listener?: Listener);
13
+
14
+ once(type: string, listener: Listener);
15
+ }
16
+
17
+ export type Point = {
18
+ x: number;
19
+ y: number;
20
+ };
21
+
22
+ export type LngLat = {
23
+ lng: number;
24
+ lat: number;
25
+ };
26
+
27
+ export type PaddingOptions = {
28
+ top: number;
29
+ bottom: number;
30
+ left: number;
31
+ right: number;
32
+ };
33
+
34
+ export type FreeCameraOptions = {
35
+ position?: {
36
+ x: number;
37
+ y: number;
38
+ z: number;
39
+ };
40
+ };
41
+
42
+ export interface IControl {
43
+ onAdd(map: Map): HTMLElement;
44
+
45
+ onRemove(map: Map): void;
46
+
47
+ getDefaultPosition?: (() => string) | undefined;
48
+ }
49
+
50
+ export type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
51
+
52
+ export interface CustomLayerInterface {
53
+ id: string;
54
+ type: 'custom';
55
+ renderingMode?: '2d' | '3d';
56
+
57
+ onRemove?(map: Map, gl: WebGLRenderingContext): void;
58
+ onAdd?(map: Map, gl: WebGLRenderingContext): void;
59
+
60
+ prerender?(gl: WebGLRenderingContext, matrix: number[]): void;
61
+ render(gl: WebGLRenderingContext, matrix: number[]): void;
62
+ }
63
+
64
+ export type MapMouseEvent = {
65
+ type: string;
66
+ target: Map;
67
+ originalEvent: MouseEvent;
68
+ point: Point;
69
+ lngLat: LngLat;
70
+ };
71
+
72
+ /**
73
+ * A minimal type that represents Mapbox.Map or Maplibre.Map
74
+ * Only losely typed for compatibility
75
+ */
76
+ export interface Map extends Evented {
77
+ addControl(control: IControl, position?: ControlPosition);
78
+
79
+ removeControl(control: IControl);
80
+
81
+ hasControl(control: IControl): boolean;
82
+
83
+ resize(): this;
84
+
85
+ isStyleLoaded(): boolean | void;
86
+
87
+ addSource(id: string, source: any);
88
+
89
+ removeSource(id: string): this;
90
+
91
+ getSource(id: string): any;
92
+
93
+ addLayer(layer: any, before?: string);
94
+
95
+ moveLayer(id: string, beforeId?: string);
96
+
97
+ removeLayer(id: string);
98
+
99
+ getLayer(id: string): any;
100
+
101
+ getContainer(): HTMLElement;
102
+
103
+ getCanvas(): HTMLCanvasElement;
104
+
105
+ getCenter(): LngLat;
106
+ getZoom(): number;
107
+ getBearing(): number;
108
+ getPitch(): number;
109
+ getPadding(): PaddingOptions;
110
+ getRenderWorldCopies(): boolean;
111
+
112
+ // mapbox v2+, maplibre v3+
113
+ getTerrain?(): any;
114
+ // mapbox v2+, maplibre v5+
115
+ getProjection?(): any;
116
+ // mapbox v2+
117
+ getFreeCameraOptions?(): FreeCameraOptions;
118
+
119
+ // This is not a public property
120
+ transform?: any;
121
+
122
+ remove(): void;
123
+
124
+ triggerRepaint(): void;
125
+ }