@swr-data-lab/components 1.13.0 → 1.13.2
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/Autocomplete/Autocomplete.svelte +237 -0
- package/dist/Autocomplete/Autocomplete.svelte.d.ts +34 -0
- package/dist/Autocomplete/index.d.ts +2 -0
- package/dist/Button/Button.svelte +38 -0
- package/dist/Button/Button.svelte.d.ts +10 -0
- package/dist/Button/index.d.ts +2 -0
- package/dist/Caption/Caption.svelte +21 -0
- package/dist/Caption/Caption.svelte.d.ts +8 -0
- package/dist/Caption/index.js +2 -0
- package/dist/Card/Card.svelte +25 -0
- package/dist/Card/Card.svelte.d.ts +7 -0
- package/dist/Card/index.d.ts +2 -0
- package/dist/ChartFooter/ChartFooter.svelte +38 -0
- package/dist/ChartFooter/ChartFooter.svelte.d.ts +8 -0
- package/dist/ChartFooter/index.d.ts +2 -0
- package/{src → dist}/ChartHeader/ChartHeader.svelte +4 -12
- package/dist/ChartHeader/ChartHeader.svelte.d.ts +9 -0
- package/dist/ChartHeader/index.d.ts +2 -0
- package/{src → dist}/ChartList/ChartList.svelte +2 -16
- package/dist/ChartList/ChartList.svelte.d.ts +14 -0
- package/dist/ChartList/index.js +2 -0
- package/dist/Copy/Copy.svelte +21 -0
- package/dist/Copy/Copy.svelte.d.ts +8 -0
- package/dist/Copy/index.js +2 -0
- package/dist/DesignTokens/DesignTokens.svelte +58 -0
- package/dist/DesignTokens/DesignTokens.svelte.d.ts +7 -0
- package/dist/DesignTokens/Tokens.d.ts +26 -0
- package/dist/DesignTokens/Tokens.js +171 -0
- package/dist/DesignTokens/index.d.ts +8 -0
- package/{src → dist}/FormLabel/FormLabel.svelte +2 -9
- package/dist/FormLabel/FormLabel.svelte.d.ts +9 -0
- package/dist/FormLabel/index.js +2 -0
- package/{src → dist}/Headline/Headline.svelte +2 -7
- package/dist/Headline/Headline.svelte.d.ts +7 -0
- package/dist/Headline/index.js +2 -0
- package/dist/HighlightCard/HighlightCard.svelte +54 -0
- package/dist/HighlightCard/HighlightCard.svelte.d.ts +9 -0
- package/dist/HighlightCard/index.d.ts +2 -0
- package/dist/Input/Input.svelte +32 -0
- package/dist/Input/Input.svelte.d.ts +23 -0
- package/dist/Input/index.d.ts +2 -0
- package/dist/Logotype/Logotype.svelte.d.ts +26 -0
- package/dist/Middot/Middot.svelte.d.ts +26 -0
- package/dist/Middot/index.d.ts +2 -0
- package/dist/Note/Note.svelte +28 -0
- package/dist/Note/Note.svelte.d.ts +7 -0
- package/dist/Note/index.js +2 -0
- package/dist/Select/Select.svelte +39 -0
- package/dist/Select/Select.svelte.d.ts +4 -0
- package/{src/Select/Select.types.ts → dist/Select/Select.types.d.ts} +1 -2
- package/dist/Select/Select.types.js +1 -0
- package/dist/Select/index.d.ts +2 -0
- package/dist/Switcher/Switcher.svelte +111 -0
- package/dist/Switcher/Switcher.svelte.d.ts +21 -0
- package/dist/Switcher/index.d.ts +2 -0
- package/dist/assets/close-circle.svg.svelte.d.ts +26 -0
- package/dist/assets/grow.svg.svelte.d.ts +26 -0
- package/dist/assets/hand-pointer.svg.svelte.d.ts +26 -0
- package/dist/assets/shrink.svg.svelte.d.ts +26 -0
- package/dist/assets/tap.svg.svelte.d.ts +26 -0
- package/dist/assets/times-circle-solid.svg.svelte.d.ts +26 -0
- package/dist/index.d.ts +29 -0
- package/dist/maplibre/AttributionControl/AttributionControl.svelte +15 -0
- package/dist/maplibre/AttributionControl/AttributionControl.svelte.d.ts +8 -0
- package/dist/maplibre/AttributionControl/index.d.ts +2 -0
- package/dist/maplibre/GeocoderControl/GeocoderAPIs.d.ts +6 -0
- package/dist/maplibre/GeocoderControl/GeocoderAPIs.js +40 -0
- package/dist/maplibre/GeocoderControl/GeocoderControl.svelte +25 -0
- package/dist/maplibre/GeocoderControl/GeocoderControl.svelte.d.ts +27 -0
- package/dist/maplibre/GeocoderControl/index.d.ts +2 -0
- package/dist/maplibre/Map/FallbackStyle.d.ts +3 -0
- package/dist/maplibre/Map/FallbackStyle.js +15 -0
- package/dist/maplibre/Map/Map.svelte +91 -0
- package/dist/maplibre/Map/Map.svelte.d.ts +23 -0
- package/dist/maplibre/Map/index.d.ts +2 -0
- package/dist/maplibre/MapControl/MapControl.svelte +29 -0
- package/dist/maplibre/MapControl/MapControl.svelte.d.ts +11 -0
- package/dist/maplibre/MapControl/index.d.ts +2 -0
- package/dist/maplibre/MapStyle/SWRDataLabLight.d.ts +3 -0
- package/dist/maplibre/MapStyle/SWRDataLabLight.js +60 -0
- package/dist/maplibre/MapStyle/components/Admin.d.ts +1 -0
- package/dist/maplibre/MapStyle/components/Admin.js +170 -0
- package/dist/maplibre/MapStyle/components/Buildings.d.ts +1 -0
- package/dist/maplibre/MapStyle/components/Buildings.js +21 -0
- package/dist/maplibre/MapStyle/components/Landuse.d.ts +1 -0
- package/dist/maplibre/MapStyle/components/Landuse.js +497 -0
- package/dist/maplibre/MapStyle/components/Natural.d.ts +1 -0
- package/dist/maplibre/MapStyle/components/Natural.js +1 -0
- package/dist/maplibre/MapStyle/components/PlaceLabels.d.ts +4 -0
- package/dist/maplibre/MapStyle/components/PlaceLabels.js +194 -0
- package/dist/maplibre/MapStyle/components/Roads.d.ts +8 -0
- package/dist/maplibre/MapStyle/components/Roads.js +2327 -0
- package/dist/maplibre/MapStyle/components/Transit.d.ts +7 -0
- package/dist/maplibre/MapStyle/components/Transit.js +499 -0
- package/dist/maplibre/MapStyle/components/Walking.d.ts +1 -0
- package/dist/maplibre/MapStyle/components/Walking.js +1530 -0
- package/dist/maplibre/MapStyle/index.d.ts +2 -0
- package/dist/maplibre/MapStyle/tokens.d.ts +20 -0
- package/dist/maplibre/MapStyle/tokens.js +20 -0
- package/dist/maplibre/NavigationControl/NavigationControl.svelte +9 -0
- package/dist/maplibre/NavigationControl/NavigationControl.svelte.d.ts +12 -0
- package/dist/maplibre/NavigationControl/index.d.ts +2 -0
- package/dist/maplibre/ScaleControl/ScaleControl.svelte +9 -0
- package/dist/maplibre/ScaleControl/ScaleControl.svelte.d.ts +9 -0
- package/dist/maplibre/ScaleControl/index.d.ts +2 -0
- package/dist/maplibre/Source/MapSource.svelte +43 -0
- package/dist/maplibre/Source/MapSource.svelte.d.ts +13 -0
- package/dist/maplibre/Source/index.d.ts +2 -0
- package/dist/maplibre/Source/source.d.ts +28 -0
- package/dist/maplibre/Source/source.js +76 -0
- package/dist/maplibre/Tooltip/Tooltip.svelte +46 -0
- package/dist/maplibre/Tooltip/Tooltip.svelte.d.ts +25 -0
- package/dist/maplibre/Tooltip/index.d.ts +2 -0
- package/dist/maplibre/VectorLayer/VectorLayer.svelte +73 -0
- package/dist/maplibre/VectorLayer/VectorLayer.svelte.d.ts +21 -0
- package/dist/maplibre/VectorLayer/index.d.ts +2 -0
- package/dist/maplibre/VectorTileSource/VectorTileSource.svelte +13 -0
- package/dist/maplibre/VectorTileSource/VectorTileSource.svelte.d.ts +11 -0
- package/dist/maplibre/VectorTileSource/index.d.ts +2 -0
- package/dist/maplibre/WithLinkLocation/WithLinkLocation.svelte +44 -0
- package/dist/maplibre/WithLinkLocation/WithLinkLocation.svelte.d.ts +19 -0
- package/dist/maplibre/WithLinkLocation/index.d.ts +2 -0
- package/dist/maplibre/context.svelte.d.ts +33 -0
- package/dist/maplibre/context.svelte.js +73 -0
- package/{src/maplibre/types.ts → dist/maplibre/types.d.ts} +3 -5
- package/dist/maplibre/types.js +1 -0
- package/dist/maplibre/utils.d.ts +4 -0
- package/dist/maplibre/utils.js +34 -0
- package/dist/utils/formatDate.d.ts +5 -0
- package/dist/utils/formatNumber.d.ts +18 -0
- package/dist/utils/getColorsBetween.d.ts +9 -0
- package/dist/utils/getComparisonDiffs.d.ts +6 -0
- package/dist/utils/getEmbedContext.d.ts +7 -0
- package/dist/utils/getEmbedContext.js +27 -0
- package/dist/utils/getLaenderFromTopo.d.ts +10 -0
- package/dist/utils/getLaenderNicenameFromAgs.d.ts +7 -0
- package/dist/utils/isSvelteComponent.d.ts +7 -0
- package/dist/utils/prepareSophoraModel.d.ts +2 -0
- package/dist/utils/scrollIntoViewWithOffset.d.ts +7 -0
- package/dist/utils/slugify.d.ts +1 -0
- package/dist/utils/slugify.js +11 -0
- package/dist/utils/topoToGeo.d.ts +7 -0
- package/package.json +28 -7
- package/.storybook/blocks/Mermaid.jsx +0 -9
- package/.storybook/main.ts +0 -34
- package/.storybook/preview-head.html +0 -13
- package/.storybook/preview.ts +0 -47
- package/.storybook/vitest.setup.ts +0 -9
- package/src/Autocomplete/Autocomplete.stories.svelte +0 -61
- package/src/Autocomplete/Autocomplete.svelte +0 -237
- package/src/Button/Button.stories.svelte +0 -21
- package/src/Button/Button.svelte +0 -52
- package/src/Caption/Caption.stories.svelte +0 -24
- package/src/Caption/Caption.svelte +0 -29
- package/src/Card/Card.stories.svelte +0 -19
- package/src/Card/Card.svelte +0 -34
- package/src/ChartFooter/ChartFooter.stories.svelte +0 -32
- package/src/ChartFooter/ChartFooter.svelte +0 -46
- package/src/ChartHeader/ChartHeader.stories.svelte +0 -31
- package/src/ChartList/ChartList.stories.svelte +0 -48
- package/src/Copy/Copy.stories.svelte +0 -32
- package/src/Copy/Copy.svelte +0 -29
- package/src/DesignTokens/DesignTokens.svelte +0 -71
- package/src/DesignTokens/Tokens.ts +0 -186
- package/src/FormLabel/FormLabel.stories.svelte +0 -52
- package/src/Headline/Headline.stories.svelte +0 -17
- package/src/HighlightCard/HighlightCard.stories.svelte +0 -57
- package/src/HighlightCard/HighlightCard.svelte +0 -65
- package/src/Input/Input.svelte +0 -21
- package/src/Logotype/Logotype.stories.svelte +0 -16
- package/src/Middot/Middot.stories.svelte +0 -16
- package/src/Note/Note.stories.svelte +0 -23
- package/src/Note/Note.svelte +0 -38
- package/src/Select/Select.stories.svelte +0 -205
- package/src/Select/Select.svelte +0 -76
- package/src/Select/SelectStoriesTemplate.svelte +0 -31
- package/src/Switcher/Switcher.stories.svelte +0 -44
- package/src/Switcher/Switcher.svelte +0 -130
- package/src/maplibre/AttributionControl/AttributionControl.stories.svelte +0 -29
- package/src/maplibre/AttributionControl/AttributionControl.svelte +0 -45
- package/src/maplibre/GeocoderControl/GeocoderAPIs.ts +0 -49
- package/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +0 -78
- package/src/maplibre/GeocoderControl/GeocoderControl.svelte +0 -211
- package/src/maplibre/Map/FallbackStyle.ts +0 -18
- package/src/maplibre/Map/Map.stories.svelte +0 -118
- package/src/maplibre/Map/Map.svelte +0 -287
- package/src/maplibre/MapControl/MapControl.stories.svelte +0 -56
- package/src/maplibre/MapControl/MapControl.svelte +0 -41
- package/src/maplibre/MapStyle/SWRDataLabLight.stories.svelte +0 -41
- package/src/maplibre/MapStyle/SWRDataLabLight.ts +0 -72
- package/src/maplibre/MapStyle/components/Admin.ts +0 -173
- package/src/maplibre/MapStyle/components/Buildings.ts +0 -23
- package/src/maplibre/MapStyle/components/Landuse.ts +0 -499
- package/src/maplibre/MapStyle/components/Natural.ts +0 -1
- package/src/maplibre/MapStyle/components/PlaceLabels.ts +0 -199
- package/src/maplibre/MapStyle/components/Roads.ts +0 -2345
- package/src/maplibre/MapStyle/components/Transit.ts +0 -507
- package/src/maplibre/MapStyle/components/Walking.ts +0 -1538
- package/src/maplibre/MapStyle/tokens.ts +0 -21
- package/src/maplibre/NavigationControl/NavigationControl.stories.svelte +0 -39
- package/src/maplibre/NavigationControl/NavigationControl.svelte +0 -36
- package/src/maplibre/ScaleControl/ScaleControl.stories.svelte +0 -71
- package/src/maplibre/ScaleControl/ScaleControl.svelte +0 -25
- package/src/maplibre/Source/MapSource.stories.svelte +0 -9
- package/src/maplibre/Source/MapSource.svelte +0 -61
- package/src/maplibre/Source/source.ts +0 -89
- package/src/maplibre/Tooltip/Tooltip.stories.svelte +0 -192
- package/src/maplibre/Tooltip/Tooltip.svelte +0 -183
- package/src/maplibre/VectorLayer/VectorLayer.stories.svelte +0 -65
- package/src/maplibre/VectorLayer/VectorLayer.svelte +0 -146
- package/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte +0 -46
- package/src/maplibre/VectorTileSource/VectorTileSource.svelte +0 -24
- package/src/maplibre/WithLinkLocation/WithLinkLocation.stories.svelte +0 -29
- package/src/maplibre/WithLinkLocation/WithLinkLocation.svelte +0 -83
- package/src/maplibre/context.svelte.ts +0 -89
- package/src/maplibre/utils.ts +0 -52
- package/src/utils/getEmbedContext.js +0 -28
- package/src/utils/slugify.ts +0 -12
- package/static/favicon.png +0 -0
- package/svelte.config.js +0 -18
- package/tsconfig.json +0 -19
- package/vite.config.ts +0 -6
- package/vitest.workspace.ts +0 -32
- /package/{src → dist}/Autocomplete/index.js +0 -0
- /package/{src → dist}/Button/index.js +0 -0
- /package/{src/Caption/index.ts → dist/Caption/index.d.ts} +0 -0
- /package/{src → dist}/Card/index.js +0 -0
- /package/{src → dist}/ChartFooter/ChartFooter.mdx +0 -0
- /package/{src → dist}/ChartFooter/index.js +0 -0
- /package/{src → dist}/ChartHeader/ChartHeader.mdx +0 -0
- /package/{src → dist}/ChartHeader/index.js +0 -0
- /package/{src → dist}/ChartList/ChartList.mdx +0 -0
- /package/{src/ChartList/index.ts → dist/ChartList/index.d.ts} +0 -0
- /package/{src/Copy/index.ts → dist/Copy/index.d.ts} +0 -0
- /package/{src → dist}/DesignTokens/DesignTokens.mdx +0 -0
- /package/{src → dist}/DesignTokens/index.js +0 -0
- /package/{src → dist}/FormLabel/FormLabel.mdx +0 -0
- /package/{src/FormLabel/index.ts → dist/FormLabel/index.d.ts} +0 -0
- /package/{src/Headline/index.ts → dist/Headline/index.d.ts} +0 -0
- /package/{src → dist}/HighlightCard/index.js +0 -0
- /package/{src → dist}/Input/index.js +0 -0
- /package/{src → dist}/Intro.mdx +0 -0
- /package/{src → dist}/Logotype/Logotype.svelte +0 -0
- /package/{src → dist}/Middot/Middot.svelte +0 -0
- /package/{src → dist}/Middot/index.js +0 -0
- /package/{src/Note/index.ts → dist/Note/index.d.ts} +0 -0
- /package/{src → dist}/Select/Select.mdx +0 -0
- /package/{src → dist}/Select/index.js +0 -0
- /package/{src → dist}/Select/mock_data/jobs.json +0 -0
- /package/{src → dist}/Switcher/Switcher.mdx +0 -0
- /package/{src → dist}/Switcher/index.js +0 -0
- /package/{src → dist}/app.d.ts +0 -0
- /package/{src → dist}/app.html +0 -0
- /package/{src → dist}/assets/close-circle.svg.svelte +0 -0
- /package/{src → dist}/assets/grow.svg.svelte +0 -0
- /package/{src → dist}/assets/hand-pointer.svg.svelte +0 -0
- /package/{src → dist}/assets/shrink.svg.svelte +0 -0
- /package/{src → dist}/assets/tap.svg.svelte +0 -0
- /package/{src → dist}/assets/times-circle-solid.svg.svelte +0 -0
- /package/{src → dist}/index.js +0 -0
- /package/{src → dist}/maplibre/AttributionControl/index.js +0 -0
- /package/{src → dist}/maplibre/GeocoderControl/index.js +0 -0
- /package/{src → dist}/maplibre/Map/index.js +0 -0
- /package/{src → dist}/maplibre/MapControl/MapControl.mdx +0 -0
- /package/{src → dist}/maplibre/MapControl/index.js +0 -0
- /package/{src → dist}/maplibre/MapStyle/SWRDataLabLight.mdx +0 -0
- /package/{src → dist}/maplibre/MapStyle/index.js +0 -0
- /package/{src → dist}/maplibre/Maplibre.mdx +0 -0
- /package/{src → dist}/maplibre/NavigationControl/index.js +0 -0
- /package/{src → dist}/maplibre/ScaleControl/index.js +0 -0
- /package/{src → dist}/maplibre/Source/index.js +0 -0
- /package/{src → dist}/maplibre/Tooltip/index.js +0 -0
- /package/{src → dist}/maplibre/VectorLayer/index.js +0 -0
- /package/{src → dist}/maplibre/VectorTileSource/VectorTileSource.mdx +0 -0
- /package/{src → dist}/maplibre/VectorTileSource/index.js +0 -0
- /package/{src → dist}/maplibre/WithLinkLocation/WithLinkLocation.mdx +0 -0
- /package/{src → dist}/maplibre/WithLinkLocation/index.js +0 -0
- /package/{src → dist}/styles/base.scss +0 -0
- /package/{src → dist}/utils/formatDate.js +0 -0
- /package/{src → dist}/utils/formatNumber.js +0 -0
- /package/{src → dist}/utils/getColorsBetween.js +0 -0
- /package/{src → dist}/utils/getComparisonDiffs.js +0 -0
- /package/{src → dist}/utils/getLaenderFromTopo.js +0 -0
- /package/{src → dist}/utils/getLaenderNicenameFromAgs.js +0 -0
- /package/{src → dist}/utils/isSvelteComponent.js +0 -0
- /package/{src → dist}/utils/prepareSophoraModel.js +0 -0
- /package/{src → dist}/utils/scrollIntoViewWithOffset.js +0 -0
- /package/{src → dist}/utils/topoToGeo.js +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const tokens: {
|
|
2
|
+
sans_regular: string[];
|
|
3
|
+
sans_medium: string[];
|
|
4
|
+
sans_bold: string[];
|
|
5
|
+
background: string;
|
|
6
|
+
water: string;
|
|
7
|
+
water_light: string;
|
|
8
|
+
marsh: string;
|
|
9
|
+
grass: string;
|
|
10
|
+
grass_dark: string;
|
|
11
|
+
street_primary: string;
|
|
12
|
+
street_primary_outline: string;
|
|
13
|
+
street_secondary: string;
|
|
14
|
+
street_secondary_outline: string;
|
|
15
|
+
street_tertiary: string;
|
|
16
|
+
street_tertiary_outline: string;
|
|
17
|
+
label_primary: string;
|
|
18
|
+
label_secondary: string;
|
|
19
|
+
};
|
|
20
|
+
export default tokens;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const tokens = {
|
|
2
|
+
sans_regular: ['SWR Sans Regular'],
|
|
3
|
+
sans_medium: ['SWR Sans Medium'],
|
|
4
|
+
sans_bold: ['SWR Sans Bold'],
|
|
5
|
+
background: 'hsl(0, 0%, 100%)',
|
|
6
|
+
water: 'hsl(210, 41%, 87%)',
|
|
7
|
+
water_light: 'hsl(210, 41%, 90%)',
|
|
8
|
+
marsh: 'hsl(200, 14%, 97%)',
|
|
9
|
+
grass: 'hsl(149, 37%, 97%)',
|
|
10
|
+
grass_dark: 'hsl(149, 37%, 93%)',
|
|
11
|
+
street_primary: 'hsl(0, 0%, 95%)',
|
|
12
|
+
street_primary_outline: 'hsla(0, 0%, 0%, 20%)',
|
|
13
|
+
street_secondary: 'hsl(0, 0%, 95%)',
|
|
14
|
+
street_secondary_outline: 'hsl(0, 0%, 50%)',
|
|
15
|
+
street_tertiary: 'hsl(0, 0%, 95%)',
|
|
16
|
+
street_tertiary_outline: 'hsl(0, 0%, 50%)',
|
|
17
|
+
label_primary: 'rgb(10, 10, 11)',
|
|
18
|
+
label_secondary: 'hsl(240, 2%, 20%)'
|
|
19
|
+
};
|
|
20
|
+
export default tokens;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script lang="ts">import maplibre, {} from 'maplibre-gl';
|
|
2
|
+
import MapControl from '../MapControl/MapControl.svelte';
|
|
3
|
+
const { showCompass = false, visualizePitch = false, position = 'bottom-left' } = $props();
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<MapControl control={new maplibre.NavigationControl({ showCompass, visualizePitch })} {position} />
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
</style>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ControlPosition } from 'maplibre-gl';
|
|
2
|
+
interface NavigationControlProps {
|
|
3
|
+
showCompass?: boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Show 3d tilt in the compass control. Requires `showCompass` to be `true`
|
|
6
|
+
*/
|
|
7
|
+
visualizePitch?: boolean;
|
|
8
|
+
position?: ControlPosition;
|
|
9
|
+
}
|
|
10
|
+
declare const NavigationControl: import("svelte").Component<NavigationControlProps, {}, "">;
|
|
11
|
+
type NavigationControl = ReturnType<typeof NavigationControl>;
|
|
12
|
+
export default NavigationControl;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script lang="ts">import maplibre, {} from 'maplibre-gl';
|
|
2
|
+
import MapControl from '../MapControl/MapControl.svelte';
|
|
3
|
+
let { maxWidth = 100, unit = 'metric', position = 'bottom-left' } = $props();
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<MapControl control={new maplibre.ScaleControl({ maxWidth, unit })} {position} />
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
</style>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ControlPosition, type Unit } from 'maplibre-gl';
|
|
2
|
+
interface ScaleControlProps {
|
|
3
|
+
maxWidth?: number | undefined;
|
|
4
|
+
position?: ControlPosition;
|
|
5
|
+
unit?: Unit;
|
|
6
|
+
}
|
|
7
|
+
declare const ScaleControl: import("svelte").Component<ScaleControlProps, {}, "">;
|
|
8
|
+
type ScaleControl = ReturnType<typeof ScaleControl>;
|
|
9
|
+
export default ScaleControl;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">import { onDestroy } from 'svelte';
|
|
2
|
+
import {} from 'maplibre-gl';
|
|
3
|
+
import { getMapContext, createSourceContext } from '../context.svelte.js';
|
|
4
|
+
let { id, sourceSpec, source = $bindable(), children } = $props();
|
|
5
|
+
let firstRun = true;
|
|
6
|
+
// Get map context
|
|
7
|
+
const { map, styleLoaded } = $derived(getMapContext());
|
|
8
|
+
// Create source context
|
|
9
|
+
const sourceContext = createSourceContext();
|
|
10
|
+
// 1. Add the source to the map using the spec, then get the
|
|
11
|
+
// actual source object back from the map instance
|
|
12
|
+
$effect(() => {
|
|
13
|
+
if (map && styleLoaded) {
|
|
14
|
+
// See: https://svelte.dev/docs/svelte/$state#$state.snapshot
|
|
15
|
+
map.addSource(id, $state.snapshot(sourceSpec));
|
|
16
|
+
source = map.getSource(id);
|
|
17
|
+
firstRun = true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
// 2. Do extra stuff with the source object
|
|
21
|
+
$effect(() => {
|
|
22
|
+
if (source) {
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
$effect(() => {
|
|
26
|
+
source;
|
|
27
|
+
firstRun = false;
|
|
28
|
+
});
|
|
29
|
+
onDestroy(() => {
|
|
30
|
+
if (map && styleLoaded) {
|
|
31
|
+
const layers = map?.getStyle().layers;
|
|
32
|
+
layers
|
|
33
|
+
.filter((l) => l.type !== 'background' && l.source == id)
|
|
34
|
+
.forEach((l) => {
|
|
35
|
+
map?.removeLayer(l.id);
|
|
36
|
+
});
|
|
37
|
+
map.removeSource(id);
|
|
38
|
+
source = undefined;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
{@render children?.()}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type Map, type SourceSpecification } from 'maplibre-gl';
|
|
3
|
+
type Source = maplibregl.VectorTileSource;
|
|
4
|
+
interface MapSourceProps {
|
|
5
|
+
id: string;
|
|
6
|
+
sourceSpec: SourceSpecification;
|
|
7
|
+
source?: Source;
|
|
8
|
+
onLoad?: (map: Map, url?: string, data?: string) => undefined;
|
|
9
|
+
children?: Snippet;
|
|
10
|
+
}
|
|
11
|
+
declare const MapSource: import("svelte").Component<MapSourceProps, {}, "source">;
|
|
12
|
+
type MapSource = ReturnType<typeof MapSource>;
|
|
13
|
+
export default MapSource;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Map, SourceSpecification } from 'maplibre-gl';
|
|
2
|
+
/**
|
|
3
|
+
* Add a source to the map.
|
|
4
|
+
*
|
|
5
|
+
* @param map - The map instance
|
|
6
|
+
* @param sourceId - The ID of the source to add
|
|
7
|
+
* @param source - The source specification object
|
|
8
|
+
* @param okToAdd - Callback to check if the source should still be added
|
|
9
|
+
* @param cb - Callback when the source has been added
|
|
10
|
+
*
|
|
11
|
+
* This properly handles the case where an old source with the same ID is still being removed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addSource(map: Map, sourceId: string, source: SourceSpecification, okToAdd: (sourceId: string) => boolean, cb: () => void): void;
|
|
14
|
+
/**
|
|
15
|
+
* A helper function that removes a source from the map after all of the layers inside it have
|
|
16
|
+
* had a chance to remove themselves.
|
|
17
|
+
*
|
|
18
|
+
* @param {Readable<Map|undefined>} mapStore - The store containing the Map instance
|
|
19
|
+
* @param {string} sourceId - The ID of the source to remove
|
|
20
|
+
* @param {unknown} sourceObj - The source object that was originally added
|
|
21
|
+
*
|
|
22
|
+
* Waits one tick to ensure layers have a chance to be removed, then checks if the
|
|
23
|
+
* source with the given ID is still the same object as was originally added.
|
|
24
|
+
*
|
|
25
|
+
* If so, it removes the source from the map. This avoids removing a source that was
|
|
26
|
+
* already replaced by another source reusing the same ID.
|
|
27
|
+
*/
|
|
28
|
+
export declare function removeSource(map: Map, sourceId: string, sourceObj: unknown): void;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { tick } from 'svelte';
|
|
2
|
+
/**
|
|
3
|
+
* Add a source to the map.
|
|
4
|
+
*
|
|
5
|
+
* @param map - The map instance
|
|
6
|
+
* @param sourceId - The ID of the source to add
|
|
7
|
+
* @param source - The source specification object
|
|
8
|
+
* @param okToAdd - Callback to check if the source should still be added
|
|
9
|
+
* @param cb - Callback when the source has been added
|
|
10
|
+
*
|
|
11
|
+
* This properly handles the case where an old source with the same ID is still being removed.
|
|
12
|
+
*/
|
|
13
|
+
export function addSource(map, sourceId, source, okToAdd, cb) {
|
|
14
|
+
// If there was an old source with the same ID, then remove it. This can happen when removing a source and adding a new source in quick succession.
|
|
15
|
+
let removed = false;
|
|
16
|
+
if (map.getSource(sourceId)) {
|
|
17
|
+
removed = true;
|
|
18
|
+
map.removeSource(sourceId);
|
|
19
|
+
}
|
|
20
|
+
const doAddSource = () => {
|
|
21
|
+
if (!okToAdd(sourceId)) {
|
|
22
|
+
// in case the component was destroyed or the id changed while waiting to call this
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
map.addSource(sourceId, source);
|
|
26
|
+
cb();
|
|
27
|
+
};
|
|
28
|
+
if (removed) {
|
|
29
|
+
// Source removal happens quickly but asynchronously, and we have no way to really interlock on when it happens, so just loop until it does.
|
|
30
|
+
const waitForRemoval = () => {
|
|
31
|
+
if (!sourceId) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (map.getSource(sourceId)) {
|
|
35
|
+
// The source hasn't been removed yet, so keep waiting.
|
|
36
|
+
setTimeout(waitForRemoval, 1);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
doAddSource();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
waitForRemoval();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// If we don't have an existing source to remove (i.e. the normal case) then
|
|
46
|
+
// just add the source right away.
|
|
47
|
+
doAddSource();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A helper function that removes a source from the map after all of the layers inside it have
|
|
52
|
+
* had a chance to remove themselves.
|
|
53
|
+
*
|
|
54
|
+
* @param {Readable<Map|undefined>} mapStore - The store containing the Map instance
|
|
55
|
+
* @param {string} sourceId - The ID of the source to remove
|
|
56
|
+
* @param {unknown} sourceObj - The source object that was originally added
|
|
57
|
+
*
|
|
58
|
+
* Waits one tick to ensure layers have a chance to be removed, then checks if the
|
|
59
|
+
* source with the given ID is still the same object as was originally added.
|
|
60
|
+
*
|
|
61
|
+
* If so, it removes the source from the map. This avoids removing a source that was
|
|
62
|
+
* already replaced by another source reusing the same ID.
|
|
63
|
+
*/
|
|
64
|
+
export function removeSource(map, sourceId, sourceObj) {
|
|
65
|
+
tick().then(() => {
|
|
66
|
+
// Wait a tick so that the layers inside this source can all be removed.
|
|
67
|
+
// But make sure that the source wasn't already replaced with another source with the same ID.
|
|
68
|
+
if (!map.loaded()) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let remainingSource = map.getSource(sourceId);
|
|
72
|
+
if (remainingSource === sourceObj) {
|
|
73
|
+
map.removeSource(sourceId);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script lang="ts">import { onDestroy } from 'svelte';
|
|
2
|
+
import maplibre, {} from 'maplibre-gl';
|
|
3
|
+
import { getMapContext } from '../context.svelte.js';
|
|
4
|
+
import { resetPopupEventListener } from '../utils';
|
|
5
|
+
let { position, children, offset = 20, maxWidth = 360, showCloseButton = false, closeOnClick = true, mouseEvents = false, onClose, onOpen } = $props();
|
|
6
|
+
const { map } = $derived(getMapContext());
|
|
7
|
+
let tooltip = new maplibre.Popup({
|
|
8
|
+
closeButton: showCloseButton,
|
|
9
|
+
closeOnClick: closeOnClick,
|
|
10
|
+
maxWidth: `${maxWidth}px`,
|
|
11
|
+
offset: offset
|
|
12
|
+
});
|
|
13
|
+
let el = $state();
|
|
14
|
+
$effect(() => {
|
|
15
|
+
if (position && el && map) {
|
|
16
|
+
tooltip.setLngLat(position).setDOMContent(el).addTo(map);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
tooltip.remove();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
// Bind events
|
|
23
|
+
$effect(() => resetPopupEventListener(tooltip, 'open', onOpen));
|
|
24
|
+
$effect(() => resetPopupEventListener(tooltip, 'close', onClose));
|
|
25
|
+
onDestroy(() => tooltip.remove());
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<div bind:this={el} class="container" class:mouseEvents>
|
|
29
|
+
{@render children?.()}
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<style>
|
|
33
|
+
.container {
|
|
34
|
+
background: white;
|
|
35
|
+
padding: 0.75em;
|
|
36
|
+
border-radius: 2px;
|
|
37
|
+
border: 1px solid rgba(0, 0, 0, 0.75);
|
|
38
|
+
border-radius: var(--br-small);
|
|
39
|
+
filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.1));
|
|
40
|
+
pointer-events: none;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.mouseEvents {
|
|
44
|
+
pointer-events: all;
|
|
45
|
+
}
|
|
46
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type Listener, type LngLatLike } from 'maplibre-gl';
|
|
3
|
+
interface TooltipProps {
|
|
4
|
+
position: LngLatLike | undefined;
|
|
5
|
+
children?: Snippet;
|
|
6
|
+
maxWidth?: number;
|
|
7
|
+
showCloseButton?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Close the tooltip if the user clicks anywhere on the map
|
|
10
|
+
*/
|
|
11
|
+
closeOnClick?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* y axis offset (px)
|
|
14
|
+
*/
|
|
15
|
+
offset?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Toggle mouse events on the tooltip element. Should be false if the tooltip appears on hover to avoid flickering.
|
|
18
|
+
*/
|
|
19
|
+
mouseEvents?: boolean;
|
|
20
|
+
onClose?: Listener | undefined;
|
|
21
|
+
onOpen?: Listener | undefined;
|
|
22
|
+
}
|
|
23
|
+
declare const Tooltip: import("svelte").Component<TooltipProps, {}, "">;
|
|
24
|
+
type Tooltip = ReturnType<typeof Tooltip>;
|
|
25
|
+
export default Tooltip;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<script lang="ts">import { getMapContext } from '../context.svelte.js';
|
|
2
|
+
import { onDestroy } from 'svelte';
|
|
3
|
+
import { resetLayerEventListener } from '../utils.js';
|
|
4
|
+
const { id, sourceId, sourceLayer, visible = true, placeBelow = 'label-place-capital', type, paint, layout, hovered = $bindable(), selected = $bindable(), minZoom = 0, maxZoom = 24, onclick, onmousemove, onmouseleave } = $props();
|
|
5
|
+
const { map, styleLoaded } = $derived(getMapContext());
|
|
6
|
+
let beforeId = $state();
|
|
7
|
+
let prevSelected = $state();
|
|
8
|
+
let prevHovered = $state();
|
|
9
|
+
const layerSpec = {
|
|
10
|
+
id,
|
|
11
|
+
type,
|
|
12
|
+
source: sourceId,
|
|
13
|
+
'source-layer': sourceLayer,
|
|
14
|
+
layout: $state.snapshot(layout) ?? {},
|
|
15
|
+
paint: $state.snapshot(paint) ?? {},
|
|
16
|
+
minzoom: minZoom,
|
|
17
|
+
maxzoom: maxZoom
|
|
18
|
+
};
|
|
19
|
+
$effect(() => {
|
|
20
|
+
if (map && styleLoaded) {
|
|
21
|
+
const style = map.getStyle();
|
|
22
|
+
beforeId = style.layers.find((l) => {
|
|
23
|
+
return l.id === placeBelow;
|
|
24
|
+
})?.id;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
$effect(() => {
|
|
28
|
+
if (map && styleLoaded && beforeId) {
|
|
29
|
+
map.addLayer(layerSpec, beforeId);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
$effect(() => resetLayerEventListener(map, 'click', id, onclick));
|
|
33
|
+
$effect(() => resetLayerEventListener(map, 'mousemove', id, onmousemove));
|
|
34
|
+
$effect(() => resetLayerEventListener(map, 'mouseleave', id, onmouseleave));
|
|
35
|
+
// Set hovered feature state
|
|
36
|
+
$effect(() => {
|
|
37
|
+
if (styleLoaded) {
|
|
38
|
+
if (hovered) {
|
|
39
|
+
if (prevHovered) {
|
|
40
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: prevHovered }, { hovered: false });
|
|
41
|
+
}
|
|
42
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: hovered.id }, { hovered: true });
|
|
43
|
+
prevHovered = hovered.id;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
if (prevHovered) {
|
|
47
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: prevHovered }, { hovered: false });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// Set selected feature state
|
|
53
|
+
$effect(() => {
|
|
54
|
+
if (styleLoaded) {
|
|
55
|
+
if (selected) {
|
|
56
|
+
if (prevSelected) {
|
|
57
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: prevSelected }, { selected: false });
|
|
58
|
+
}
|
|
59
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: selected.id }, { selected: true });
|
|
60
|
+
prevSelected = selected.id;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
if (prevSelected) {
|
|
64
|
+
map?.setFeatureState({ source: sourceId, sourceLayer: sourceLayer, id: prevSelected }, { selected: false });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
onDestroy(() => {
|
|
70
|
+
if (map && map.getLayer(id))
|
|
71
|
+
map.removeLayer(id);
|
|
72
|
+
});
|
|
73
|
+
</script>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CircleLayoutProps, CirclePaintProps, FillLayoutProps, FillPaintProps, LineLayoutProps, SymbolPaintProps, SymbolLayoutProps, LinePaintProps, MapGeoJSONFeature, MapLayerMouseEvent } from 'maplibre-gl';
|
|
2
|
+
interface VectorLayerProps {
|
|
3
|
+
id: string;
|
|
4
|
+
sourceId: string;
|
|
5
|
+
sourceLayer: string;
|
|
6
|
+
type: 'line' | 'fill' | 'circle' | 'symbol';
|
|
7
|
+
placeBelow: string;
|
|
8
|
+
visible?: boolean;
|
|
9
|
+
minZoom?: number;
|
|
10
|
+
maxZoom?: number;
|
|
11
|
+
paint?: LinePaintProps | FillPaintProps | CirclePaintProps | SymbolPaintProps;
|
|
12
|
+
layout?: LineLayoutProps | FillLayoutProps | CircleLayoutProps | SymbolLayoutProps;
|
|
13
|
+
hovered?: MapGeoJSONFeature | undefined;
|
|
14
|
+
selected?: MapGeoJSONFeature | undefined;
|
|
15
|
+
onclick: (e: MapLayerMouseEvent) => any;
|
|
16
|
+
onmousemove: (e: MapLayerMouseEvent) => any;
|
|
17
|
+
onmouseleave: (e: MapLayerMouseEvent) => any;
|
|
18
|
+
}
|
|
19
|
+
declare const VectorLayer: import("svelte").Component<VectorLayerProps, {}, "hovered" | "selected">;
|
|
20
|
+
type VectorLayer = ReturnType<typeof VectorLayer>;
|
|
21
|
+
export default VectorLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">import {} from 'svelte';
|
|
2
|
+
import {} from 'maplibre-gl';
|
|
3
|
+
import MapSource from '../Source/MapSource.svelte';
|
|
4
|
+
const { minZoom = 0, maxZoom = 24, id, url } = $props();
|
|
5
|
+
const sourceSpec = {
|
|
6
|
+
type: 'vector',
|
|
7
|
+
tiles: [url],
|
|
8
|
+
maxzoom: maxZoom,
|
|
9
|
+
minzoom: minZoom
|
|
10
|
+
};
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<MapSource {id} {sourceSpec} />
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
interface VectorTileSourceProps {
|
|
3
|
+
id: string;
|
|
4
|
+
url: string;
|
|
5
|
+
minZoom?: number;
|
|
6
|
+
maxZoom?: number;
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
}
|
|
9
|
+
declare const VectorTileSource: import("svelte").Component<VectorTileSourceProps, {}, "">;
|
|
10
|
+
type VectorTileSource = ReturnType<typeof VectorTileSource>;
|
|
11
|
+
export default VectorTileSource;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">import { onMount, setContext } from 'svelte';
|
|
2
|
+
import { MaptilerGeocoderAPI } from '../GeocoderControl/GeocoderAPIs';
|
|
3
|
+
import {} from '../types';
|
|
4
|
+
const { key, service = 'maptiler', countries = 'de', languages = 'de', urlParameter = 'location', children } = $props();
|
|
5
|
+
const countriesArr = Array.isArray(countries) ? countries : [countries];
|
|
6
|
+
const languagesArr = Array.isArray(languages) ? languages : [languages];
|
|
7
|
+
let geocoder;
|
|
8
|
+
if (service === 'maptiler') {
|
|
9
|
+
geocoder = new MaptilerGeocoderAPI(key);
|
|
10
|
+
}
|
|
11
|
+
let location = $state();
|
|
12
|
+
function bboxToArea(bbox) {
|
|
13
|
+
return (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]);
|
|
14
|
+
}
|
|
15
|
+
onMount(async () => {
|
|
16
|
+
const params = new URLSearchParams(window.location.search);
|
|
17
|
+
if (params.has(urlParameter)) {
|
|
18
|
+
const config = {
|
|
19
|
+
countries: countriesArr.join(','),
|
|
20
|
+
language: languagesArr.join(','),
|
|
21
|
+
query: params.get(urlParameter)?.toString(),
|
|
22
|
+
limit: 1
|
|
23
|
+
};
|
|
24
|
+
const res = await geocoder.forwardGeocode(config);
|
|
25
|
+
if (res.features[0].bbox && res.features[0].geometry.type === 'Point') {
|
|
26
|
+
location = {
|
|
27
|
+
lat: res.features[0].geometry.coordinates[1],
|
|
28
|
+
lng: res.features[0].geometry.coordinates[0],
|
|
29
|
+
zoom: 11 - bboxToArea(res.features[0].bbox) * 5.5
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
location = false;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
$effect.pre(() => {
|
|
38
|
+
setContext('initialLocation', location);
|
|
39
|
+
});
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
{#if location !== undefined}
|
|
43
|
+
{@render children?.()}
|
|
44
|
+
{/if}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type GeocodingCountry, type GeocodingLanguage, type GeocodingService } from '../types';
|
|
3
|
+
interface WithLinkLocationProps {
|
|
4
|
+
service?: GeocodingService;
|
|
5
|
+
/**
|
|
6
|
+
* API key for selected geocoding `service`
|
|
7
|
+
*/
|
|
8
|
+
key: string;
|
|
9
|
+
/**
|
|
10
|
+
* Limit search to one or more countries
|
|
11
|
+
*/
|
|
12
|
+
countries?: GeocodingLanguage | GeocodingCountry[];
|
|
13
|
+
languages?: GeocodingLanguage | GeocodingLanguage[];
|
|
14
|
+
urlParameter?: string;
|
|
15
|
+
children: Snippet;
|
|
16
|
+
}
|
|
17
|
+
declare const WithLinkLocation: import("svelte").Component<WithLinkLocationProps, {}, "">;
|
|
18
|
+
type WithLinkLocation = ReturnType<typeof WithLinkLocation>;
|
|
19
|
+
export default WithLinkLocation;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Map as MapLibre, Marker, LayerSpecification } from 'maplibre-gl';
|
|
2
|
+
export declare class Box<T> {
|
|
3
|
+
value: T;
|
|
4
|
+
constructor(initialValue: T);
|
|
5
|
+
}
|
|
6
|
+
export declare class MapContext {
|
|
7
|
+
_map: MapLibre | null;
|
|
8
|
+
minzoom: number;
|
|
9
|
+
maxzoom: number;
|
|
10
|
+
styleLoaded: boolean;
|
|
11
|
+
private _listener?;
|
|
12
|
+
get map(): maplibregl.Map | null;
|
|
13
|
+
set map(value: maplibregl.Map | null);
|
|
14
|
+
private _onstyledata;
|
|
15
|
+
}
|
|
16
|
+
export declare class SourceContext {
|
|
17
|
+
_source: unknown;
|
|
18
|
+
loaded: boolean;
|
|
19
|
+
minzoom: number;
|
|
20
|
+
maxzoom: number;
|
|
21
|
+
get source(): unknown;
|
|
22
|
+
}
|
|
23
|
+
export declare class LayerContext {
|
|
24
|
+
layer: LayerSpecification;
|
|
25
|
+
}
|
|
26
|
+
export declare function setPopupTarget(value: Box<Marker | string | undefined>): void;
|
|
27
|
+
export declare function getPopupTarget(): Box<Marker | string> | undefined;
|
|
28
|
+
export declare function createMapContext(): MapContext;
|
|
29
|
+
export declare function getMapContext(): MapContext;
|
|
30
|
+
export declare function createSourceContext(): SourceContext;
|
|
31
|
+
export declare function getSourceContext(): SourceContext;
|
|
32
|
+
export declare function getLayerContext(): LayerContext;
|
|
33
|
+
export declare function setLayerContext(value: string): void;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const MAP_CONTEXT_KEY = Symbol.for('map-context');
|
|
3
|
+
const SOURCE_CONTEXT_KEY = Symbol.for('source-context');
|
|
4
|
+
const LAYER_CONTEXT_KEY = Symbol.for('layer-context');
|
|
5
|
+
const POPUP_TARGET_KEY = Symbol.for('popup-target');
|
|
6
|
+
export class Box {
|
|
7
|
+
value = $state();
|
|
8
|
+
constructor(initialValue) {
|
|
9
|
+
this.value = initialValue;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class MapContext {
|
|
13
|
+
_map = $state(null);
|
|
14
|
+
minzoom = $state(0);
|
|
15
|
+
maxzoom = $state(24);
|
|
16
|
+
styleLoaded = $state(false);
|
|
17
|
+
_listener = undefined;
|
|
18
|
+
get map() {
|
|
19
|
+
return this._map;
|
|
20
|
+
}
|
|
21
|
+
set map(value) {
|
|
22
|
+
// Unbind any old event listeners
|
|
23
|
+
if (this._listener) {
|
|
24
|
+
this._map?.off('styledata', this._listener);
|
|
25
|
+
this._listener = undefined;
|
|
26
|
+
}
|
|
27
|
+
// Set new map instance and bind new event listeners
|
|
28
|
+
this._map = value;
|
|
29
|
+
if (this._map) {
|
|
30
|
+
this._listener = this._onstyledata.bind(this);
|
|
31
|
+
this._map.on('styledata', this._listener);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
_onstyledata(e) {
|
|
35
|
+
this.styleLoaded = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class SourceContext {
|
|
39
|
+
_source = $state();
|
|
40
|
+
loaded = $state(false);
|
|
41
|
+
minzoom = $state(0);
|
|
42
|
+
maxzoom = $state(24);
|
|
43
|
+
get source() {
|
|
44
|
+
return this._source;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class LayerContext {
|
|
48
|
+
layer = $state();
|
|
49
|
+
}
|
|
50
|
+
export function setPopupTarget(value) {
|
|
51
|
+
setContext(POPUP_TARGET_KEY, value);
|
|
52
|
+
}
|
|
53
|
+
export function getPopupTarget() {
|
|
54
|
+
return getContext(POPUP_TARGET_KEY);
|
|
55
|
+
}
|
|
56
|
+
export function createMapContext() {
|
|
57
|
+
return setContext(MAP_CONTEXT_KEY, new MapContext());
|
|
58
|
+
}
|
|
59
|
+
export function getMapContext() {
|
|
60
|
+
return getContext(MAP_CONTEXT_KEY);
|
|
61
|
+
}
|
|
62
|
+
export function createSourceContext() {
|
|
63
|
+
return setContext(SOURCE_CONTEXT_KEY, new SourceContext());
|
|
64
|
+
}
|
|
65
|
+
export function getSourceContext() {
|
|
66
|
+
return getContext(SOURCE_CONTEXT_KEY);
|
|
67
|
+
}
|
|
68
|
+
export function getLayerContext() {
|
|
69
|
+
return getContext(LAYER_CONTEXT_KEY);
|
|
70
|
+
}
|
|
71
|
+
export function setLayerContext(value) {
|
|
72
|
+
setContext(LAYER_CONTEXT_KEY, value);
|
|
73
|
+
}
|