Skip to content

Commit eadb5a4

Browse files
committed
Update to deck.gl v9
This is a minimal change, a future change with better support for the next MapboxOverlay will be coming.
1 parent 0485a6a commit eadb5a4

File tree

7 files changed

+200
-264
lines changed

7 files changed

+200
-264
lines changed

.changeset/chilly-days-enjoy.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-maplibre': major
3+
---
4+
5+
Update to deck.gl v9

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,17 @@
8282
"pmtiles": "^3.0.3"
8383
},
8484
"peerDependencies": {
85-
"@deck.gl/core": "^8.8.0",
86-
"@deck.gl/layers": "^8.8.0",
87-
"@deck.gl/mapbox": "^8.8.0",
85+
"@deck.gl/core": "^9",
86+
"@deck.gl/layers": "^9",
87+
"@deck.gl/mapbox": "^9",
8888
"svelte": "^5.0.0"
8989
},
9090
"devDependencies": {
9191
"@changesets/changelog-github": "^0.5.0",
9292
"@changesets/cli": "^2.27.9",
93-
"@deck.gl/core": "~8.8.0",
94-
"@deck.gl/layers": "~8.8.0",
95-
"@deck.gl/mapbox": "~8.8.0",
93+
"@deck.gl/core": "~9.0.35",
94+
"@deck.gl/layers": "~9.0.35",
95+
"@deck.gl/mapbox": "~9.0.35",
9696
"@mapbox/mapbox-gl-draw": "^1.4.3",
9797
"@playwright/test": "^1.48.2",
9898
"@skeletonlabs/skeleton": "^2.10.3",

pnpm-lock.yaml

Lines changed: 166 additions & 232 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/DeckGlLayer.svelte

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
mapContext,
88
setPopupTarget,
99
updatedDeckGlContext,
10-
updatedLayerContext,
1110
type DeckGlMouseEvent,
1211
} from './context.svelte.js';
12+
import type { PickingInfo } from '@deck.gl/core';
1313
1414
interface Props {
1515
id?: any;
16+
interleaved?: boolean;
1617
minzoom?: number | undefined;
1718
maxzoom?: number | undefined;
1819
visible?: boolean;
@@ -23,24 +24,27 @@
2324
/** The deck.gl layer class to create */
2425
type: any;
2526
data: DATA[];
27+
beforeId?: string;
2628
children?: Snippet;
2729
28-
onclick?: (e: DeckGlMouseEvent<DATA>) => void;
29-
onmousemove?: (e: DeckGlMouseEvent<DATA>) => void;
30-
onmouseleave?: (e: DeckGlMouseEvent<DATA>) => void;
30+
onclick?: (e: PickingInfo<DATA>) => void;
31+
onmousemove?: (e: PickingInfo<DATA>) => void;
32+
onmouseleave?: (e: PickingInfo<DATA>) => void;
3133
3234
[key: string]: any;
3335
}
3436
3537
let {
3638
id = getId('deckgl-layer'),
39+
interleaved = false,
3740
minzoom = undefined,
3841
maxzoom = undefined,
3942
visible = true,
4043
interactive = true,
4144
hovered = $bindable(),
4245
type,
4346
data,
47+
beforeId = undefined,
4448
children,
4549
4650
onclick = undefined,
@@ -53,10 +57,8 @@
5357
const context = mapContext();
5458
const { map, minzoom: minZoomContext, maxzoom: maxZoomContext } = context;
5559
56-
// @ts-expect-error No types
5760
let deckgl: typeof import('@deck.gl/mapbox') | undefined = $state();
5861
onMount(async () => {
59-
// @ts-expect-error No types
6062
deckgl = await import('@deck.gl/mapbox');
6163
});
6264
@@ -70,7 +72,7 @@
7072
zoom = map.getZoom();
7173
}
7274
73-
function handleClick(e: DeckGlMouseEvent<DATA>) {
75+
function handleClick(e: PickingInfo<DATA>) {
7476
if (!interactive) {
7577
return;
7678
}
@@ -83,7 +85,7 @@
8385
};
8486
}
8587
86-
function handleHover(e: DeckGlMouseEvent<DATA>) {
88+
function handleHover(e: PickingInfo<DATA>) {
8789
if (!interactive) {
8890
return;
8991
}
@@ -99,8 +101,7 @@
99101
};
100102
}
101103
102-
// @ts-expect-error No types
103-
let layer: typeof import('@deck.gl/mapbox').MapboxLayer | undefined = $state();
104+
let layer: import('@deck.gl/mapbox').MapboxOverlay | undefined = $state();
104105
105106
onDestroy(() => {
106107
if (map.loaded() && layer) {
@@ -117,6 +118,7 @@
117118
let visibility = $derived(visible && zoom >= actualMinZoom && zoom <= actualMaxZoom);
118119
let options = $derived({
119120
...rest,
121+
beforeId,
120122
visible: visibility,
121123
data,
122124
pickable: interactive,
@@ -129,16 +131,19 @@
129131
map.on('zoomend', handleZoom);
130132
handleZoom();
131133
132-
layer = new deckgl.MapboxLayer({
134+
layer = new deckgl.MapboxOverlay({
133135
id,
134-
type,
135-
...options,
136+
interleaved,
137+
layers: [new type(options)],
136138
});
137-
map.addLayer(layer);
139+
// @ts-expect-error Mapbox/Maplibre types don't quite match
140+
map.addControl(layer);
138141
}
139142
});
140143
$effect(() => {
141-
layer?.setProps(options);
144+
layer?.setProps({
145+
layers: [new type(options)],
146+
});
142147
});
143148
</script>
144149

src/lib/Popup.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
193193
function handleLayerEvent(e: MapLayerMouseEvent | LayerEvent) {
194194
if ('layerType' in e && e.layerType === 'deckgl') {
195-
lngLat = e.coordinate;
195+
lngLat = e.coordinate as [number, number];
196196
features = e.object ? [e.object as DATA] : undefined;
197197
} else {
198198
lngLat = e.lngLat;

src/lib/context.svelte.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Map as MapLibre, MapMouseEvent, Marker } from 'maplibre-gl';
22
import { getContext, setContext } from 'svelte';
33
import { SvelteSet } from 'svelte/reactivity';
44
import type { ClusterOptions, MarkerClickInfo } from './types';
5+
import type { PickingInfo } from '@deck.gl/core';
56

67
// Choose current time instead of 0 to avoid possible reuse during HMR.
78
export let nextId = Date.now();
@@ -136,17 +137,9 @@ export function setLayerEvent(value: Box<LayerEvent | undefined>) {
136137

137138
export type MarkerMouseEvent = MarkerClickInfo & { layerType: 'marker'; type: string };
138139

139-
export interface DeckGlMouseEvent<DATA = unknown> {
140+
export interface DeckGlMouseEvent<DATA = unknown> extends PickingInfo<DATA> {
140141
layerType: 'deckgl';
141142
type: 'click' | 'mouseenter' | 'mouseleave' | 'mousemove';
142-
coordinate: [number, number];
143-
object?: DATA;
144-
index: number;
145-
picked: boolean;
146-
color: Uint8Array | null;
147-
pixel: [number, number];
148-
x: number;
149-
y: number;
150143
}
151144

152145
export type LayerEvent = DeckGlMouseEvent<unknown> | MarkerMouseEvent;

src/routes/examples/deckgl-arcs/+page.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// Importing from `@deck.gl/layers` so that we can do a direct import
66
// that works even in SSR, as opposed to importing from `deck.gl` which does not.
77
// Note that this stopped working in deck.gl 8.9.
8-
// @ts-expect-error no types
98
import { ArcLayer } from '@deck.gl/layers';
109
// imports end
1110
import CodeSample from '$site/CodeSample.svelte';

0 commit comments

Comments
 (0)