2023-03-19 20:06:45 +01:00
|
|
|
<script lang="ts">
|
|
|
|
import { onDestroy, onMount } from 'svelte';
|
|
|
|
import { TileLayer, type TileLayerOptions } from 'leaflet';
|
|
|
|
import { getMapContext } from './map.svelte';
|
|
|
|
|
|
|
|
export let urlTemplate: string;
|
|
|
|
export let options: TileLayerOptions | undefined = undefined;
|
2023-05-06 03:33:30 +02:00
|
|
|
export let allowDarkMode = false;
|
|
|
|
|
2023-03-19 20:06:45 +01:00
|
|
|
let tileLayer: TileLayer;
|
|
|
|
|
|
|
|
const map = getMapContext();
|
|
|
|
|
|
|
|
onMount(() => {
|
2023-05-06 03:33:30 +02:00
|
|
|
tileLayer = new TileLayer(urlTemplate, {
|
|
|
|
className: allowDarkMode ? 'leaflet-layer-dynamic' : 'leaflet-layer',
|
|
|
|
...options
|
|
|
|
}).addTo(map);
|
2023-03-19 20:06:45 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
onDestroy(() => {
|
|
|
|
if (tileLayer) tileLayer.remove();
|
|
|
|
});
|
|
|
|
</script>
|
2023-05-06 03:33:30 +02:00
|
|
|
|
|
|
|
<style>
|
|
|
|
:global(.leaflet-layer-dynamic) {
|
|
|
|
filter: brightness(100%) contrast(100%) saturate(80%);
|
|
|
|
}
|
|
|
|
|
|
|
|
:global(.dark .leaflet-layer-dynamic) {
|
|
|
|
filter: invert(100%) brightness(130%) saturate(0%);
|
|
|
|
}
|
|
|
|
</style>
|