map.svelte (1130B)
1 <script lang="ts"> 2 import { CFG_MAP } from "$lib/utils/map"; 3 import { type IClOpt, fmt_cl, theme_mode } from "@radroots/apps-lib"; 4 import type { Snippet } from "svelte"; 5 import { MapLibre } from "svelte-maplibre"; 6 7 let { 8 basis = undefined, 9 map = $bindable(undefined), 10 children, 11 }: { 12 basis?: IClOpt & { 13 interactive?: boolean; 14 zoom_click_off?: boolean; 15 }; 16 map?: maplibregl.Map; 17 interactive?: boolean; 18 children: Snippet; 19 } = $props(); 20 21 const interactive = $derived( 22 typeof basis?.interactive === `boolean` ? basis?.interactive : true, 23 ); 24 25 const double_click_zoom = $derived( 26 typeof basis?.zoom_click_off === `boolean` 27 ? basis?.zoom_click_off 28 : true, 29 ); 30 </script> 31 32 <MapLibre 33 bind:map 34 class="{fmt_cl(basis?.classes)} relative h-full w-full" 35 zoom={10} 36 style={CFG_MAP.styles.base[$theme_mode ?? "light"]} 37 attributionControl={false} 38 interactive={!!interactive} 39 zoomOnDoubleClick={double_click_zoom} 40 > 41 {@render children()} 42 </MapLibre>