@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.
Files changed (288) hide show
  1. package/dist/Autocomplete/Autocomplete.svelte +237 -0
  2. package/dist/Autocomplete/Autocomplete.svelte.d.ts +34 -0
  3. package/dist/Autocomplete/index.d.ts +2 -0
  4. package/dist/Button/Button.svelte +38 -0
  5. package/dist/Button/Button.svelte.d.ts +10 -0
  6. package/dist/Button/index.d.ts +2 -0
  7. package/dist/Caption/Caption.svelte +21 -0
  8. package/dist/Caption/Caption.svelte.d.ts +8 -0
  9. package/dist/Caption/index.js +2 -0
  10. package/dist/Card/Card.svelte +25 -0
  11. package/dist/Card/Card.svelte.d.ts +7 -0
  12. package/dist/Card/index.d.ts +2 -0
  13. package/dist/ChartFooter/ChartFooter.svelte +38 -0
  14. package/dist/ChartFooter/ChartFooter.svelte.d.ts +8 -0
  15. package/dist/ChartFooter/index.d.ts +2 -0
  16. package/{src → dist}/ChartHeader/ChartHeader.svelte +4 -12
  17. package/dist/ChartHeader/ChartHeader.svelte.d.ts +9 -0
  18. package/dist/ChartHeader/index.d.ts +2 -0
  19. package/{src → dist}/ChartList/ChartList.svelte +2 -16
  20. package/dist/ChartList/ChartList.svelte.d.ts +14 -0
  21. package/dist/ChartList/index.js +2 -0
  22. package/dist/Copy/Copy.svelte +21 -0
  23. package/dist/Copy/Copy.svelte.d.ts +8 -0
  24. package/dist/Copy/index.js +2 -0
  25. package/dist/DesignTokens/DesignTokens.svelte +58 -0
  26. package/dist/DesignTokens/DesignTokens.svelte.d.ts +7 -0
  27. package/dist/DesignTokens/Tokens.d.ts +26 -0
  28. package/dist/DesignTokens/Tokens.js +171 -0
  29. package/dist/DesignTokens/index.d.ts +8 -0
  30. package/{src → dist}/FormLabel/FormLabel.svelte +2 -9
  31. package/dist/FormLabel/FormLabel.svelte.d.ts +9 -0
  32. package/dist/FormLabel/index.js +2 -0
  33. package/{src → dist}/Headline/Headline.svelte +2 -7
  34. package/dist/Headline/Headline.svelte.d.ts +7 -0
  35. package/dist/Headline/index.js +2 -0
  36. package/dist/HighlightCard/HighlightCard.svelte +54 -0
  37. package/dist/HighlightCard/HighlightCard.svelte.d.ts +9 -0
  38. package/dist/HighlightCard/index.d.ts +2 -0
  39. package/dist/Input/Input.svelte +32 -0
  40. package/dist/Input/Input.svelte.d.ts +23 -0
  41. package/dist/Input/index.d.ts +2 -0
  42. package/dist/Logotype/Logotype.svelte.d.ts +26 -0
  43. package/dist/Middot/Middot.svelte.d.ts +26 -0
  44. package/dist/Middot/index.d.ts +2 -0
  45. package/dist/Note/Note.svelte +28 -0
  46. package/dist/Note/Note.svelte.d.ts +7 -0
  47. package/dist/Note/index.js +2 -0
  48. package/dist/Select/Select.svelte +39 -0
  49. package/dist/Select/Select.svelte.d.ts +4 -0
  50. package/{src/Select/Select.types.ts → dist/Select/Select.types.d.ts} +1 -2
  51. package/dist/Select/Select.types.js +1 -0
  52. package/dist/Select/index.d.ts +2 -0
  53. package/dist/Switcher/Switcher.svelte +111 -0
  54. package/dist/Switcher/Switcher.svelte.d.ts +21 -0
  55. package/dist/Switcher/index.d.ts +2 -0
  56. package/dist/assets/close-circle.svg.svelte.d.ts +26 -0
  57. package/dist/assets/grow.svg.svelte.d.ts +26 -0
  58. package/dist/assets/hand-pointer.svg.svelte.d.ts +26 -0
  59. package/dist/assets/shrink.svg.svelte.d.ts +26 -0
  60. package/dist/assets/tap.svg.svelte.d.ts +26 -0
  61. package/dist/assets/times-circle-solid.svg.svelte.d.ts +26 -0
  62. package/dist/index.d.ts +29 -0
  63. package/dist/maplibre/AttributionControl/AttributionControl.svelte +15 -0
  64. package/dist/maplibre/AttributionControl/AttributionControl.svelte.d.ts +8 -0
  65. package/dist/maplibre/AttributionControl/index.d.ts +2 -0
  66. package/dist/maplibre/GeocoderControl/GeocoderAPIs.d.ts +6 -0
  67. package/dist/maplibre/GeocoderControl/GeocoderAPIs.js +40 -0
  68. package/dist/maplibre/GeocoderControl/GeocoderControl.svelte +25 -0
  69. package/dist/maplibre/GeocoderControl/GeocoderControl.svelte.d.ts +27 -0
  70. package/dist/maplibre/GeocoderControl/index.d.ts +2 -0
  71. package/dist/maplibre/Map/FallbackStyle.d.ts +3 -0
  72. package/dist/maplibre/Map/FallbackStyle.js +15 -0
  73. package/dist/maplibre/Map/Map.svelte +91 -0
  74. package/dist/maplibre/Map/Map.svelte.d.ts +23 -0
  75. package/dist/maplibre/Map/index.d.ts +2 -0
  76. package/dist/maplibre/MapControl/MapControl.svelte +29 -0
  77. package/dist/maplibre/MapControl/MapControl.svelte.d.ts +11 -0
  78. package/dist/maplibre/MapControl/index.d.ts +2 -0
  79. package/dist/maplibre/MapStyle/SWRDataLabLight.d.ts +3 -0
  80. package/dist/maplibre/MapStyle/SWRDataLabLight.js +60 -0
  81. package/dist/maplibre/MapStyle/components/Admin.d.ts +1 -0
  82. package/dist/maplibre/MapStyle/components/Admin.js +170 -0
  83. package/dist/maplibre/MapStyle/components/Buildings.d.ts +1 -0
  84. package/dist/maplibre/MapStyle/components/Buildings.js +21 -0
  85. package/dist/maplibre/MapStyle/components/Landuse.d.ts +1 -0
  86. package/dist/maplibre/MapStyle/components/Landuse.js +497 -0
  87. package/dist/maplibre/MapStyle/components/Natural.d.ts +1 -0
  88. package/dist/maplibre/MapStyle/components/Natural.js +1 -0
  89. package/dist/maplibre/MapStyle/components/PlaceLabels.d.ts +4 -0
  90. package/dist/maplibre/MapStyle/components/PlaceLabels.js +194 -0
  91. package/dist/maplibre/MapStyle/components/Roads.d.ts +8 -0
  92. package/dist/maplibre/MapStyle/components/Roads.js +2327 -0
  93. package/dist/maplibre/MapStyle/components/Transit.d.ts +7 -0
  94. package/dist/maplibre/MapStyle/components/Transit.js +499 -0
  95. package/dist/maplibre/MapStyle/components/Walking.d.ts +1 -0
  96. package/dist/maplibre/MapStyle/components/Walking.js +1530 -0
  97. package/dist/maplibre/MapStyle/index.d.ts +2 -0
  98. package/dist/maplibre/MapStyle/tokens.d.ts +20 -0
  99. package/dist/maplibre/MapStyle/tokens.js +20 -0
  100. package/dist/maplibre/NavigationControl/NavigationControl.svelte +9 -0
  101. package/dist/maplibre/NavigationControl/NavigationControl.svelte.d.ts +12 -0
  102. package/dist/maplibre/NavigationControl/index.d.ts +2 -0
  103. package/dist/maplibre/ScaleControl/ScaleControl.svelte +9 -0
  104. package/dist/maplibre/ScaleControl/ScaleControl.svelte.d.ts +9 -0
  105. package/dist/maplibre/ScaleControl/index.d.ts +2 -0
  106. package/dist/maplibre/Source/MapSource.svelte +43 -0
  107. package/dist/maplibre/Source/MapSource.svelte.d.ts +13 -0
  108. package/dist/maplibre/Source/index.d.ts +2 -0
  109. package/dist/maplibre/Source/source.d.ts +28 -0
  110. package/dist/maplibre/Source/source.js +76 -0
  111. package/dist/maplibre/Tooltip/Tooltip.svelte +46 -0
  112. package/dist/maplibre/Tooltip/Tooltip.svelte.d.ts +25 -0
  113. package/dist/maplibre/Tooltip/index.d.ts +2 -0
  114. package/dist/maplibre/VectorLayer/VectorLayer.svelte +73 -0
  115. package/dist/maplibre/VectorLayer/VectorLayer.svelte.d.ts +21 -0
  116. package/dist/maplibre/VectorLayer/index.d.ts +2 -0
  117. package/dist/maplibre/VectorTileSource/VectorTileSource.svelte +13 -0
  118. package/dist/maplibre/VectorTileSource/VectorTileSource.svelte.d.ts +11 -0
  119. package/dist/maplibre/VectorTileSource/index.d.ts +2 -0
  120. package/dist/maplibre/WithLinkLocation/WithLinkLocation.svelte +44 -0
  121. package/dist/maplibre/WithLinkLocation/WithLinkLocation.svelte.d.ts +19 -0
  122. package/dist/maplibre/WithLinkLocation/index.d.ts +2 -0
  123. package/dist/maplibre/context.svelte.d.ts +33 -0
  124. package/dist/maplibre/context.svelte.js +73 -0
  125. package/{src/maplibre/types.ts → dist/maplibre/types.d.ts} +3 -5
  126. package/dist/maplibre/types.js +1 -0
  127. package/dist/maplibre/utils.d.ts +4 -0
  128. package/dist/maplibre/utils.js +34 -0
  129. package/dist/utils/formatDate.d.ts +5 -0
  130. package/dist/utils/formatNumber.d.ts +18 -0
  131. package/dist/utils/getColorsBetween.d.ts +9 -0
  132. package/dist/utils/getComparisonDiffs.d.ts +6 -0
  133. package/dist/utils/getEmbedContext.d.ts +7 -0
  134. package/dist/utils/getEmbedContext.js +27 -0
  135. package/dist/utils/getLaenderFromTopo.d.ts +10 -0
  136. package/dist/utils/getLaenderNicenameFromAgs.d.ts +7 -0
  137. package/dist/utils/isSvelteComponent.d.ts +7 -0
  138. package/dist/utils/prepareSophoraModel.d.ts +2 -0
  139. package/dist/utils/scrollIntoViewWithOffset.d.ts +7 -0
  140. package/dist/utils/slugify.d.ts +1 -0
  141. package/dist/utils/slugify.js +11 -0
  142. package/dist/utils/topoToGeo.d.ts +7 -0
  143. package/package.json +28 -7
  144. package/.storybook/blocks/Mermaid.jsx +0 -9
  145. package/.storybook/main.ts +0 -34
  146. package/.storybook/preview-head.html +0 -13
  147. package/.storybook/preview.ts +0 -47
  148. package/.storybook/vitest.setup.ts +0 -9
  149. package/src/Autocomplete/Autocomplete.stories.svelte +0 -61
  150. package/src/Autocomplete/Autocomplete.svelte +0 -237
  151. package/src/Button/Button.stories.svelte +0 -21
  152. package/src/Button/Button.svelte +0 -52
  153. package/src/Caption/Caption.stories.svelte +0 -24
  154. package/src/Caption/Caption.svelte +0 -29
  155. package/src/Card/Card.stories.svelte +0 -19
  156. package/src/Card/Card.svelte +0 -34
  157. package/src/ChartFooter/ChartFooter.stories.svelte +0 -32
  158. package/src/ChartFooter/ChartFooter.svelte +0 -46
  159. package/src/ChartHeader/ChartHeader.stories.svelte +0 -31
  160. package/src/ChartList/ChartList.stories.svelte +0 -48
  161. package/src/Copy/Copy.stories.svelte +0 -32
  162. package/src/Copy/Copy.svelte +0 -29
  163. package/src/DesignTokens/DesignTokens.svelte +0 -71
  164. package/src/DesignTokens/Tokens.ts +0 -186
  165. package/src/FormLabel/FormLabel.stories.svelte +0 -52
  166. package/src/Headline/Headline.stories.svelte +0 -17
  167. package/src/HighlightCard/HighlightCard.stories.svelte +0 -57
  168. package/src/HighlightCard/HighlightCard.svelte +0 -65
  169. package/src/Input/Input.svelte +0 -21
  170. package/src/Logotype/Logotype.stories.svelte +0 -16
  171. package/src/Middot/Middot.stories.svelte +0 -16
  172. package/src/Note/Note.stories.svelte +0 -23
  173. package/src/Note/Note.svelte +0 -38
  174. package/src/Select/Select.stories.svelte +0 -205
  175. package/src/Select/Select.svelte +0 -76
  176. package/src/Select/SelectStoriesTemplate.svelte +0 -31
  177. package/src/Switcher/Switcher.stories.svelte +0 -44
  178. package/src/Switcher/Switcher.svelte +0 -130
  179. package/src/maplibre/AttributionControl/AttributionControl.stories.svelte +0 -29
  180. package/src/maplibre/AttributionControl/AttributionControl.svelte +0 -45
  181. package/src/maplibre/GeocoderControl/GeocoderAPIs.ts +0 -49
  182. package/src/maplibre/GeocoderControl/GeocoderControl.stories.svelte +0 -78
  183. package/src/maplibre/GeocoderControl/GeocoderControl.svelte +0 -211
  184. package/src/maplibre/Map/FallbackStyle.ts +0 -18
  185. package/src/maplibre/Map/Map.stories.svelte +0 -118
  186. package/src/maplibre/Map/Map.svelte +0 -287
  187. package/src/maplibre/MapControl/MapControl.stories.svelte +0 -56
  188. package/src/maplibre/MapControl/MapControl.svelte +0 -41
  189. package/src/maplibre/MapStyle/SWRDataLabLight.stories.svelte +0 -41
  190. package/src/maplibre/MapStyle/SWRDataLabLight.ts +0 -72
  191. package/src/maplibre/MapStyle/components/Admin.ts +0 -173
  192. package/src/maplibre/MapStyle/components/Buildings.ts +0 -23
  193. package/src/maplibre/MapStyle/components/Landuse.ts +0 -499
  194. package/src/maplibre/MapStyle/components/Natural.ts +0 -1
  195. package/src/maplibre/MapStyle/components/PlaceLabels.ts +0 -199
  196. package/src/maplibre/MapStyle/components/Roads.ts +0 -2345
  197. package/src/maplibre/MapStyle/components/Transit.ts +0 -507
  198. package/src/maplibre/MapStyle/components/Walking.ts +0 -1538
  199. package/src/maplibre/MapStyle/tokens.ts +0 -21
  200. package/src/maplibre/NavigationControl/NavigationControl.stories.svelte +0 -39
  201. package/src/maplibre/NavigationControl/NavigationControl.svelte +0 -36
  202. package/src/maplibre/ScaleControl/ScaleControl.stories.svelte +0 -71
  203. package/src/maplibre/ScaleControl/ScaleControl.svelte +0 -25
  204. package/src/maplibre/Source/MapSource.stories.svelte +0 -9
  205. package/src/maplibre/Source/MapSource.svelte +0 -61
  206. package/src/maplibre/Source/source.ts +0 -89
  207. package/src/maplibre/Tooltip/Tooltip.stories.svelte +0 -192
  208. package/src/maplibre/Tooltip/Tooltip.svelte +0 -183
  209. package/src/maplibre/VectorLayer/VectorLayer.stories.svelte +0 -65
  210. package/src/maplibre/VectorLayer/VectorLayer.svelte +0 -146
  211. package/src/maplibre/VectorTileSource/VectorTileSource.stories.svelte +0 -46
  212. package/src/maplibre/VectorTileSource/VectorTileSource.svelte +0 -24
  213. package/src/maplibre/WithLinkLocation/WithLinkLocation.stories.svelte +0 -29
  214. package/src/maplibre/WithLinkLocation/WithLinkLocation.svelte +0 -83
  215. package/src/maplibre/context.svelte.ts +0 -89
  216. package/src/maplibre/utils.ts +0 -52
  217. package/src/utils/getEmbedContext.js +0 -28
  218. package/src/utils/slugify.ts +0 -12
  219. package/static/favicon.png +0 -0
  220. package/svelte.config.js +0 -18
  221. package/tsconfig.json +0 -19
  222. package/vite.config.ts +0 -6
  223. package/vitest.workspace.ts +0 -32
  224. /package/{src → dist}/Autocomplete/index.js +0 -0
  225. /package/{src → dist}/Button/index.js +0 -0
  226. /package/{src/Caption/index.ts → dist/Caption/index.d.ts} +0 -0
  227. /package/{src → dist}/Card/index.js +0 -0
  228. /package/{src → dist}/ChartFooter/ChartFooter.mdx +0 -0
  229. /package/{src → dist}/ChartFooter/index.js +0 -0
  230. /package/{src → dist}/ChartHeader/ChartHeader.mdx +0 -0
  231. /package/{src → dist}/ChartHeader/index.js +0 -0
  232. /package/{src → dist}/ChartList/ChartList.mdx +0 -0
  233. /package/{src/ChartList/index.ts → dist/ChartList/index.d.ts} +0 -0
  234. /package/{src/Copy/index.ts → dist/Copy/index.d.ts} +0 -0
  235. /package/{src → dist}/DesignTokens/DesignTokens.mdx +0 -0
  236. /package/{src → dist}/DesignTokens/index.js +0 -0
  237. /package/{src → dist}/FormLabel/FormLabel.mdx +0 -0
  238. /package/{src/FormLabel/index.ts → dist/FormLabel/index.d.ts} +0 -0
  239. /package/{src/Headline/index.ts → dist/Headline/index.d.ts} +0 -0
  240. /package/{src → dist}/HighlightCard/index.js +0 -0
  241. /package/{src → dist}/Input/index.js +0 -0
  242. /package/{src → dist}/Intro.mdx +0 -0
  243. /package/{src → dist}/Logotype/Logotype.svelte +0 -0
  244. /package/{src → dist}/Middot/Middot.svelte +0 -0
  245. /package/{src → dist}/Middot/index.js +0 -0
  246. /package/{src/Note/index.ts → dist/Note/index.d.ts} +0 -0
  247. /package/{src → dist}/Select/Select.mdx +0 -0
  248. /package/{src → dist}/Select/index.js +0 -0
  249. /package/{src → dist}/Select/mock_data/jobs.json +0 -0
  250. /package/{src → dist}/Switcher/Switcher.mdx +0 -0
  251. /package/{src → dist}/Switcher/index.js +0 -0
  252. /package/{src → dist}/app.d.ts +0 -0
  253. /package/{src → dist}/app.html +0 -0
  254. /package/{src → dist}/assets/close-circle.svg.svelte +0 -0
  255. /package/{src → dist}/assets/grow.svg.svelte +0 -0
  256. /package/{src → dist}/assets/hand-pointer.svg.svelte +0 -0
  257. /package/{src → dist}/assets/shrink.svg.svelte +0 -0
  258. /package/{src → dist}/assets/tap.svg.svelte +0 -0
  259. /package/{src → dist}/assets/times-circle-solid.svg.svelte +0 -0
  260. /package/{src → dist}/index.js +0 -0
  261. /package/{src → dist}/maplibre/AttributionControl/index.js +0 -0
  262. /package/{src → dist}/maplibre/GeocoderControl/index.js +0 -0
  263. /package/{src → dist}/maplibre/Map/index.js +0 -0
  264. /package/{src → dist}/maplibre/MapControl/MapControl.mdx +0 -0
  265. /package/{src → dist}/maplibre/MapControl/index.js +0 -0
  266. /package/{src → dist}/maplibre/MapStyle/SWRDataLabLight.mdx +0 -0
  267. /package/{src → dist}/maplibre/MapStyle/index.js +0 -0
  268. /package/{src → dist}/maplibre/Maplibre.mdx +0 -0
  269. /package/{src → dist}/maplibre/NavigationControl/index.js +0 -0
  270. /package/{src → dist}/maplibre/ScaleControl/index.js +0 -0
  271. /package/{src → dist}/maplibre/Source/index.js +0 -0
  272. /package/{src → dist}/maplibre/Tooltip/index.js +0 -0
  273. /package/{src → dist}/maplibre/VectorLayer/index.js +0 -0
  274. /package/{src → dist}/maplibre/VectorTileSource/VectorTileSource.mdx +0 -0
  275. /package/{src → dist}/maplibre/VectorTileSource/index.js +0 -0
  276. /package/{src → dist}/maplibre/WithLinkLocation/WithLinkLocation.mdx +0 -0
  277. /package/{src → dist}/maplibre/WithLinkLocation/index.js +0 -0
  278. /package/{src → dist}/styles/base.scss +0 -0
  279. /package/{src → dist}/utils/formatDate.js +0 -0
  280. /package/{src → dist}/utils/formatNumber.js +0 -0
  281. /package/{src → dist}/utils/getColorsBetween.js +0 -0
  282. /package/{src → dist}/utils/getComparisonDiffs.js +0 -0
  283. /package/{src → dist}/utils/getLaenderFromTopo.js +0 -0
  284. /package/{src → dist}/utils/getLaenderNicenameFromAgs.js +0 -0
  285. /package/{src → dist}/utils/isSvelteComponent.js +0 -0
  286. /package/{src → dist}/utils/prepareSophoraModel.js +0 -0
  287. /package/{src → dist}/utils/scrollIntoViewWithOffset.js +0 -0
  288. /package/{src → dist}/utils/topoToGeo.js +0 -0
@@ -1,183 +0,0 @@
1
- <script lang="ts">
2
- import { onDestroy, type Snippet } from 'svelte';
3
- import maplibre, { type Listener, type LngLatLike } from 'maplibre-gl';
4
- import { getMapContext } from '../context.svelte.js';
5
- import { resetPopupEventListener } from '../utils';
6
-
7
- interface TooltipProps {
8
- position: LngLatLike | undefined;
9
- children?: Snippet;
10
- maxWidth?: number;
11
- showCloseButton?: boolean;
12
- /**
13
- * Close the tooltip if the user clicks anywhere on the map
14
- */
15
- closeOnClick?: boolean;
16
- /**
17
- * y axis offset (px)
18
- */
19
- offset?: number;
20
- /**
21
- * Toggle mouse events on the tooltip element. Should be false if the tooltip appears on hover to avoid flickering.
22
- */
23
- mouseEvents?: boolean;
24
- onClose?: Listener | undefined;
25
- onOpen?: Listener | undefined;
26
- }
27
-
28
- let {
29
- position,
30
- children,
31
- offset = 20,
32
- maxWidth = 360,
33
- showCloseButton = false,
34
- closeOnClick = true,
35
- mouseEvents = false,
36
- onClose,
37
- onOpen
38
- }: TooltipProps = $props();
39
-
40
- const { map } = $derived(getMapContext());
41
-
42
- let tooltip = new maplibre.Popup({
43
- closeButton: showCloseButton,
44
- closeOnClick: closeOnClick,
45
- maxWidth: `${maxWidth}px`,
46
- offset: offset
47
- });
48
-
49
- let el: Node | undefined = $state();
50
-
51
- $effect(() => {
52
- if (position && el && map) {
53
- tooltip.setLngLat(position).setDOMContent(el).addTo(map);
54
- } else {
55
- tooltip.remove();
56
- }
57
- });
58
-
59
- // Bind events
60
- $effect(() => resetPopupEventListener(tooltip, 'open', onOpen));
61
- $effect(() => resetPopupEventListener(tooltip, 'close', onClose));
62
-
63
- onDestroy(() => tooltip.remove());
64
- </script>
65
-
66
- <div bind:this={el} class="container" class:mouseEvents>
67
- {@render children?.()}
68
- </div>
69
-
70
- <style>
71
- .container {
72
- background: white;
73
- padding: 0.75em;
74
- border-radius: 2px;
75
- border: 1px solid rgba(0, 0, 0, 0.75);
76
- border-radius: var(--br-small);
77
- filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.1));
78
- pointer-events: none;
79
- }
80
-
81
- .mouseEvents {
82
- pointer-events: all;
83
- }
84
-
85
- :global {
86
- .maplibregl-popup {
87
- top: 0;
88
- left: 0;
89
- display: flex;
90
- position: absolute;
91
- will-change: transform;
92
- }
93
- .maplibregl-popup-anchor-top,
94
- .maplibregl-popup-anchor-top-left,
95
- .maplibregl-popup-anchor-top-right {
96
- flex-direction: column;
97
- }
98
- .maplibregl-popup-anchor-bottom,
99
- .maplibregl-popup-anchor-bottom-left,
100
- .maplibregl-popup-anchor-bottom-right {
101
- flex-direction: column-reverse;
102
- }
103
-
104
- .maplibregl-popup-anchor-left {
105
- flex-direction: row;
106
- }
107
-
108
- .maplibregl-popup-anchor-right {
109
- flex-direction: row-reverse;
110
- }
111
-
112
- .maplibregl-popup-anchor-bottom .maplibregl-popup-tip {
113
- transform: translateY(50%) rotate(45deg);
114
- align-self: center;
115
- }
116
-
117
- .maplibregl-popup-anchor-top .maplibregl-popup-tip {
118
- transform: translateY(-50%) rotate(-135deg);
119
- align-self: center;
120
- }
121
-
122
- .maplibregl-popup-anchor-left .maplibregl-popup-tip {
123
- transform: translateX(-50%) rotate(135deg);
124
- align-self: center;
125
- }
126
-
127
- .maplibregl-popup-anchor-top-left .maplibregl-popup-tip {
128
- transform: translateY(1em) translateX(-50%) rotate(135deg);
129
- }
130
-
131
- .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip {
132
- transform: translateY(-1em) translateX(-50%) rotate(135deg);
133
- }
134
-
135
- .maplibregl-popup-anchor-right .maplibregl-popup-tip {
136
- transform: translateX(50%) rotate(-45deg);
137
- align-self: center;
138
- }
139
-
140
- .maplibregl-popup-anchor-top-right .maplibregl-popup-tip {
141
- transform: translateX(-1em) translateY(-50%) rotate(-135deg);
142
- align-self: flex-end;
143
- }
144
-
145
- .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip {
146
- transform: translateX(-1em) translateY(50%) rotate(45deg);
147
- align-self: flex-end;
148
- }
149
-
150
- .maplibregl-popup-close-button {
151
- position: absolute;
152
- top: 0.5em;
153
- right: 0.5em;
154
- cursor: pointer;
155
- border-radius: 2px;
156
- display: flex;
157
- justify-content: center;
158
- align-items: center;
159
- padding-bottom: 0.15em;
160
- font-size: 1.25rem;
161
- width: 1.1em;
162
- height: 1.1em;
163
- z-index: 100;
164
- background: white;
165
- border: 1px solid var(--gray-dark-5);
166
- }
167
-
168
- .maplibregl-popup-close-button:hover,
169
- .maplibregl-popup-close-button:focus {
170
- background: var(--gray-light-5);
171
- }
172
-
173
- .maplibregl-popup-tip {
174
- width: 0.65rem;
175
- height: 0.65rem;
176
- background: white;
177
- position: absolute;
178
- border-right: 1px solid rgba(0, 0, 0, 0.75);
179
- border-bottom: 1px solid rgba(0, 0, 0, 0.75);
180
- z-index: 10;
181
- }
182
- }
183
- </style>
@@ -1,65 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import Map from '../Map/Map.svelte';
4
- import VectorLayer from './VectorLayer.svelte';
5
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
6
- import AttributionControl from '../AttributionControl/AttributionControl.svelte';
7
- import VectorTileSource from '../VectorTileSource/VectorTileSource.svelte';
8
-
9
- import { SWRDataLabLight } from '../MapStyle';
10
-
11
- const { Story } = defineMeta({
12
- title: 'Maplibre/Layer/VectorLayer',
13
- component: VectorLayer
14
- });
15
- </script>
16
-
17
- <Story asChild name="Default">
18
- <DesignTokens>
19
- <div class="container">
20
- <Map showDebug={true} style={SWRDataLabLight}>
21
- <VectorTileSource
22
- id="ev-infra-source"
23
- url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`}
24
- />
25
- <VectorLayer
26
- sourceId="ev-infra-source"
27
- type="fill"
28
- id="coverage-fill"
29
- sourceLayer="coverage"
30
- placeBelow="street-residential"
31
- paint={{
32
- 'fill-color': [
33
- 'step',
34
- ['get', 'coverage_2025'],
35
- 'white',
36
- 1,
37
- 'lightgray',
38
- 1.3,
39
- 'lightgreen'
40
- ]
41
- }}
42
- />
43
- <VectorLayer
44
- sourceId="ev-infra-source"
45
- sourceLayer="coverage"
46
- id="ev-infra-outline"
47
- type="line"
48
- paint={{
49
- 'line-width': 0.5,
50
- 'line-color': 'purple',
51
- 'line-opacity': 1
52
- }}
53
- />
54
- <AttributionControl />
55
- </Map>
56
- </div>
57
- </DesignTokens>
58
- </Story>
59
-
60
- <style>
61
- .container {
62
- width: 100%;
63
- height: 600px;
64
- }
65
- </style>
@@ -1,146 +0,0 @@
1
- <script lang="ts">
2
- import type {
3
- AddLayerObject,
4
- FillLayoutProps,
5
- FillPaintProps,
6
- LineLayoutProps,
7
- CircleLayoutProps,
8
- CirclePaintProps,
9
- SymbolPaintProps,
10
- SymbolLayoutProps,
11
- LinePaintProps,
12
- MapGeoJSONFeature,
13
- MapLayerMouseEvent
14
- } from 'maplibre-gl';
15
-
16
- import { getMapContext } from '../context.svelte.js';
17
- import { onDestroy } from 'svelte';
18
- import { resetLayerEventListener } from '../utils.js';
19
-
20
- interface VectorLayerProps {
21
- id: string;
22
- sourceId: string;
23
- sourceLayer: string;
24
- type: 'line' | 'fill' | 'circle' | 'symbol';
25
- placeBelow: string;
26
- visible?: boolean;
27
- minZoom?: number;
28
- maxZoom?: number;
29
- paint?: LinePaintProps | FillPaintProps | CirclePaintProps | SymbolPaintProps;
30
- layout?: LineLayoutProps | FillLayoutProps | CircleLayoutProps | SymbolLayoutProps;
31
- hovered?: MapGeoJSONFeature | undefined;
32
- selected?: MapGeoJSONFeature | undefined;
33
-
34
- onclick: (e: MapLayerMouseEvent) => any;
35
- onmousemove: (e: MapLayerMouseEvent) => any;
36
- onmouseleave: (e: MapLayerMouseEvent) => any;
37
- }
38
- const {
39
- id,
40
- sourceId,
41
- sourceLayer,
42
- visible = true,
43
- placeBelow = 'label-place-capital',
44
- type,
45
- paint,
46
- layout,
47
- hovered = $bindable(),
48
- selected = $bindable(),
49
- minZoom = 0,
50
- maxZoom = 24,
51
- onclick,
52
- onmousemove,
53
- onmouseleave
54
- }: VectorLayerProps = $props();
55
-
56
- const { map, styleLoaded } = $derived(getMapContext());
57
- let beforeId: string | undefined = $state();
58
- let prevSelected: string | number | undefined = $state();
59
- let prevHovered: string | number | undefined = $state();
60
-
61
- const layerSpec = {
62
- id,
63
- type,
64
- source: sourceId,
65
- 'source-layer': sourceLayer,
66
- layout: $state.snapshot(layout) ?? {},
67
- paint: $state.snapshot(paint) ?? {},
68
- minzoom: minZoom,
69
- maxzoom: maxZoom
70
- } as AddLayerObject;
71
-
72
- $effect(() => {
73
- if (map && styleLoaded) {
74
- const style = map.getStyle();
75
- beforeId = style.layers.find((l) => {
76
- return l.id === placeBelow;
77
- })?.id;
78
- }
79
- });
80
-
81
- $effect(() => {
82
- if (map && styleLoaded && beforeId) {
83
- map.addLayer(layerSpec, beforeId);
84
- }
85
- });
86
-
87
- $effect(() => resetLayerEventListener(map, 'click', id, onclick));
88
- $effect(() => resetLayerEventListener(map, 'mousemove', id, onmousemove));
89
- $effect(() => resetLayerEventListener(map, 'mouseleave', id, onmouseleave));
90
-
91
- // Set hovered feature state
92
- $effect(() => {
93
- if (styleLoaded) {
94
- if (hovered) {
95
- if (prevHovered) {
96
- map?.setFeatureState(
97
- { source: sourceId, sourceLayer: sourceLayer, id: prevHovered },
98
- { hovered: false }
99
- );
100
- }
101
- map?.setFeatureState(
102
- { source: sourceId, sourceLayer: sourceLayer, id: hovered.id },
103
- { hovered: true }
104
- );
105
- prevHovered = hovered.id;
106
- } else {
107
- if (prevHovered) {
108
- map?.setFeatureState(
109
- { source: sourceId, sourceLayer: sourceLayer, id: prevHovered },
110
- { hovered: false }
111
- );
112
- }
113
- }
114
- }
115
- });
116
-
117
- // Set selected feature state
118
- $effect(() => {
119
- if (styleLoaded) {
120
- if (selected) {
121
- if (prevSelected) {
122
- map?.setFeatureState(
123
- { source: sourceId, sourceLayer: sourceLayer, id: prevSelected },
124
- { selected: false }
125
- );
126
- }
127
- map?.setFeatureState(
128
- { source: sourceId, sourceLayer: sourceLayer, id: selected.id },
129
- { selected: true }
130
- );
131
- prevSelected = selected.id;
132
- } else {
133
- if (prevSelected) {
134
- map?.setFeatureState(
135
- { source: sourceId, sourceLayer: sourceLayer, id: prevSelected },
136
- { selected: false }
137
- );
138
- }
139
- }
140
- }
141
- });
142
-
143
- onDestroy(() => {
144
- if (map && map.getLayer(id)) map.removeLayer(id);
145
- });
146
- </script>
@@ -1,46 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
4
- import VectorTileSource from './VectorTileSource.svelte';
5
- import VectorLayer from '../VectorLayer/VectorLayer.svelte';
6
- import Map from '../Map/Map.svelte';
7
- import { SWRDataLabLight } from '../MapStyle/';
8
- import AttributionControl from '../AttributionControl';
9
-
10
- const { Story } = defineMeta({
11
- title: 'Maplibre/Source/VectorTileSource',
12
- component: VectorTileSource
13
- });
14
- </script>
15
-
16
- <Story asChild name="Default">
17
- <DesignTokens>
18
- <div class="container">
19
- <Map showDebug={true} style={SWRDataLabLight}>
20
- <VectorTileSource
21
- id="ev-infra-source"
22
- url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`}
23
- />
24
- <VectorLayer
25
- sourceId="ev-infra-source"
26
- sourceLayer="coverage"
27
- id="ev-infra-outline"
28
- type="line"
29
- paint={{
30
- 'line-width': 0.5,
31
- 'line-color': 'purple',
32
- 'line-opacity': 1
33
- }}
34
- />
35
- <AttributionControl />
36
- </Map>
37
- </div>
38
- </DesignTokens>
39
- </Story>
40
-
41
- <style>
42
- .container {
43
- width: 100%;
44
- height: 600px;
45
- }
46
- </style>
@@ -1,24 +0,0 @@
1
- <script lang="ts">
2
- import { type Snippet } from 'svelte';
3
- import { type SourceSpecification } from 'maplibre-gl';
4
- import MapSource from '../Source/MapSource.svelte';
5
-
6
- interface VectorTileSourceProps {
7
- id: string;
8
- url: string;
9
- minZoom?: number;
10
- maxZoom?: number;
11
- children?: Snippet;
12
- }
13
-
14
- const { minZoom = 0, maxZoom = 24, id, url }: VectorTileSourceProps = $props();
15
-
16
- const sourceSpec: SourceSpecification = {
17
- type: 'vector',
18
- tiles: [url],
19
- maxzoom: maxZoom,
20
- minzoom: minZoom
21
- };
22
- </script>
23
-
24
- <MapSource {id} {sourceSpec} />
@@ -1,29 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import WithLinkLocation from './WithLinkLocation.svelte';
4
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
5
- import Map from '../Map/Map.svelte';
6
- import { SWRDataLabLight } from '../MapStyle';
7
-
8
- const { Story } = defineMeta({
9
- title: 'Maplibre/Extras/WithLinkLocation',
10
- component: WithLinkLocation
11
- });
12
- </script>
13
-
14
- <Story asChild name="Default">
15
- <DesignTokens>
16
- <div class="container">
17
- <WithLinkLocation countries="de" languages="de" service="maptiler" key="V32kPHZjMa0Mkn6YvSzA">
18
- <Map style={SWRDataLabLight} initialLocation={{ lat: 51, lng: 10, zoom: 20 }}></Map>
19
- </WithLinkLocation>
20
- </div>
21
- </DesignTokens>
22
- </Story>
23
-
24
- <style>
25
- .container {
26
- width: 500px;
27
- height: 300px;
28
- }
29
- </style>
@@ -1,83 +0,0 @@
1
- <script lang="ts">
2
- import { onMount, setContext, type Snippet } from 'svelte';
3
- import { MaptilerGeocoderAPI } from '../GeocoderControl/GeocoderAPIs';
4
- import {
5
- type GeocodingCountry,
6
- type GeocodingLanguage,
7
- type GeocodingService,
8
- type Location
9
- } from '../types';
10
-
11
- import type {
12
- MaplibreGeocoderApi,
13
- MaplibreGeocoderApiConfig
14
- } from '@maplibre/maplibre-gl-geocoder';
15
-
16
- interface WithLinkLocationProps {
17
- service?: GeocodingService;
18
- /**
19
- * API key for selected geocoding `service`
20
- */
21
- key: string;
22
- /**
23
- * Limit search to one or more countries
24
- */
25
- countries?: GeocodingLanguage | GeocodingCountry[];
26
- languages?: GeocodingLanguage | GeocodingLanguage[];
27
- urlParameter?: string;
28
- children: Snippet;
29
- }
30
-
31
- const {
32
- key,
33
- service = 'maptiler',
34
- countries = 'de',
35
- languages = 'de',
36
- urlParameter = 'location',
37
- children
38
- }: WithLinkLocationProps = $props();
39
-
40
- const countriesArr = Array.isArray(countries) ? countries : [countries];
41
- const languagesArr = Array.isArray(languages) ? languages : [languages];
42
-
43
- let geocoder: MaplibreGeocoderApi;
44
- if (service === 'maptiler') {
45
- geocoder = new MaptilerGeocoderAPI(key);
46
- }
47
-
48
- let location: Location | boolean | undefined = $state();
49
-
50
- function bboxToArea(bbox: [number, number, number, number]) {
51
- return (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]);
52
- }
53
-
54
- onMount(async () => {
55
- const params = new URLSearchParams(window.location.search);
56
- if (params.has(urlParameter)) {
57
- const config: MaplibreGeocoderApiConfig = {
58
- countries: countriesArr.join(','),
59
- language: languagesArr.join(','),
60
- query: params.get(urlParameter)?.toString(),
61
- limit: 1
62
- };
63
- const res = await geocoder.forwardGeocode(config);
64
- if (res.features[0].bbox && res.features[0].geometry.type === 'Point') {
65
- location = {
66
- lat: res.features[0].geometry.coordinates[1],
67
- lng: res.features[0].geometry.coordinates[0],
68
- zoom: 11 - bboxToArea(res.features[0].bbox) * 5.5
69
- };
70
- }
71
- } else {
72
- location = false;
73
- }
74
- });
75
-
76
- $effect.pre(() => {
77
- setContext('initialLocation', location);
78
- });
79
- </script>
80
-
81
- {#if location !== undefined}
82
- {@render children?.()}
83
- {/if}
@@ -1,89 +0,0 @@
1
- import type { Map as MapLibre, Marker, LayerSpecification } from 'maplibre-gl';
2
- import { getContext, setContext } from 'svelte';
3
-
4
- const MAP_CONTEXT_KEY = Symbol.for('map-context');
5
- const SOURCE_CONTEXT_KEY = Symbol.for('source-context');
6
- const LAYER_CONTEXT_KEY = Symbol.for('layer-context');
7
- const POPUP_TARGET_KEY = Symbol.for('popup-target');
8
-
9
- export class Box<T> {
10
- value = $state() as T;
11
-
12
- constructor(initialValue: T) {
13
- this.value = initialValue;
14
- }
15
- }
16
-
17
- export class MapContext {
18
- _map = $state(null) as MapLibre | null;
19
- minzoom = $state(0);
20
- maxzoom = $state(24);
21
- styleLoaded = $state(false);
22
- private _listener?: maplibregl.Listener = undefined;
23
-
24
- get map() {
25
- return this._map;
26
- }
27
-
28
- set map(value: maplibregl.Map | null) {
29
- // Unbind any old event listeners
30
- if (this._listener) {
31
- this._map?.off('styledata', this._listener);
32
- this._listener = undefined;
33
- }
34
- // Set new map instance and bind new event listeners
35
- this._map = value;
36
- if (this._map) {
37
- this._listener = this._onstyledata.bind(this);
38
- this._map.on('styledata', this._listener);
39
- }
40
- }
41
-
42
- private _onstyledata(e: maplibregl.MapStyleDataEvent) {
43
- this.styleLoaded = true;
44
- }
45
- }
46
-
47
- export class SourceContext {
48
- _source = $state();
49
- loaded = $state(false);
50
- minzoom = $state(0);
51
- maxzoom = $state(24);
52
-
53
- get source() {
54
- return this._source;
55
- }
56
- }
57
- export class LayerContext {
58
- layer = $state() as LayerSpecification;
59
- }
60
-
61
- export function setPopupTarget(value: Box<Marker | string | undefined>) {
62
- setContext(POPUP_TARGET_KEY, value);
63
- }
64
-
65
- export function getPopupTarget(): Box<Marker | string> | undefined {
66
- return getContext(POPUP_TARGET_KEY);
67
- }
68
-
69
- export function createMapContext(): MapContext {
70
- return setContext(MAP_CONTEXT_KEY, new MapContext());
71
- }
72
- export function getMapContext(): MapContext {
73
- return getContext(MAP_CONTEXT_KEY);
74
- }
75
-
76
- export function createSourceContext(): SourceContext {
77
- return setContext(SOURCE_CONTEXT_KEY, new SourceContext());
78
- }
79
- export function getSourceContext(): SourceContext {
80
- return getContext(SOURCE_CONTEXT_KEY);
81
- }
82
-
83
- export function getLayerContext(): LayerContext {
84
- return getContext(LAYER_CONTEXT_KEY);
85
- }
86
-
87
- export function setLayerContext(value: string) {
88
- setContext(LAYER_CONTEXT_KEY, value);
89
- }