@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,21 +0,0 @@
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
-
21
- export default tokens;
@@ -1,39 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import NavigationControl from './NavigationControl.svelte';
4
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
5
- import { SWRDataLabLight } from '../MapStyle';
6
- import Map from '../Map/Map.svelte';
7
-
8
- const { Story } = defineMeta({
9
- title: 'Maplibre/Control/NavigationControl',
10
- component: NavigationControl
11
- });
12
- </script>
13
-
14
- <Story asChild name="Default">
15
- <DesignTokens>
16
- <div class="container">
17
- <Map style={SWRDataLabLight} initialLocation={{ lat: 51, lng: 10, zoom: 20 }}>
18
- <NavigationControl />
19
- </Map>
20
- </div>
21
- </DesignTokens>
22
- </Story>
23
-
24
- <Story asChild name="With compass">
25
- <DesignTokens>
26
- <div class="container">
27
- <Map style={SWRDataLabLight} initialLocation={{ lat: 51, lng: 10, zoom: 20 }}>
28
- <NavigationControl showCompass visualizePitch />
29
- </Map>
30
- </div>
31
- </DesignTokens>
32
- </Story>
33
-
34
- <style>
35
- .container {
36
- width: 500px;
37
- height: 200px;
38
- }
39
- </style>
@@ -1,36 +0,0 @@
1
- <script lang="ts">
2
- import maplibre, { type ControlPosition } from 'maplibre-gl';
3
- import MapControl from '../MapControl/MapControl.svelte';
4
-
5
- interface NavigationControlProps {
6
- showCompass?: boolean;
7
- /**
8
- * Show 3d tilt in the compass control. Requires `showCompass` to be `true`
9
- */
10
- visualizePitch?: boolean;
11
- position?: ControlPosition;
12
- }
13
- const {
14
- showCompass = false,
15
- visualizePitch = false,
16
- position = 'bottom-left'
17
- }: NavigationControlProps = $props();
18
- </script>
19
-
20
- <MapControl control={new maplibre.NavigationControl({ showCompass, visualizePitch })} {position} />
21
-
22
- <style>
23
- :global {
24
- button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon {
25
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E");
26
- }
27
-
28
- button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon {
29
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E");
30
- }
31
-
32
- button.maplibregl-ctrl-compass .maplibregl-ctrl-icon {
33
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E");
34
- }
35
- }
36
- </style>
@@ -1,71 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { within, expect } from 'storybook/test';
4
-
5
- import ScaleControl from './ScaleControl.svelte';
6
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
7
- import Map from '../Map/Map.svelte';
8
- import { SWRDataLabLight } from '../MapStyle';
9
-
10
- const { Story } = defineMeta({
11
- title: 'Maplibre/Control/ScaleControl',
12
- component: ScaleControl
13
- });
14
- </script>
15
-
16
- <Story
17
- asChild
18
- name="Default"
19
- play={async ({ canvasElement, step }) => {
20
- const canvas = within(canvasElement);
21
- const containerEl = canvas.getByTestId('map-container');
22
- await step('Scale control renders', async () => {
23
- const el = containerEl.querySelector('.maplibregl-ctrl-scale');
24
- expect(el).toBeTruthy();
25
- });
26
- await step('Distance is rendered in metric units', async () => {
27
- const el = containerEl.querySelector('.maplibregl-ctrl-scale');
28
- expect(el).toHaveTextContent('100 m');
29
- });
30
- }}
31
- >
32
- <DesignTokens>
33
- <div class="container">
34
- <Map style={SWRDataLabLight} initialLocation={{ lat: 51, lng: 10, zoom: 20 }}>
35
- <ScaleControl />
36
- </Map>
37
- </div>
38
- </DesignTokens>
39
- </Story>
40
-
41
- <Story
42
- asChild
43
- name="Imperial units"
44
- play={async ({ canvasElement, step }) => {
45
- const canvas = within(canvasElement);
46
- const containerEl = canvas.getByTestId('map-container');
47
- await step('Scale control renders', async () => {
48
- const el = containerEl.querySelector('.maplibregl-ctrl-scale');
49
- expect(el).toBeTruthy();
50
- });
51
- await step('Distance is rendered in imperial units', async () => {
52
- const el = containerEl.querySelector('.maplibregl-ctrl-scale');
53
- expect(el).toHaveTextContent('300 ft');
54
- });
55
- }}
56
- >
57
- <DesignTokens>
58
- <div class="container">
59
- <Map style={SWRDataLabLight} initialLocation={{ lat: 51, lng: 10, zoom: 20 }}>
60
- <ScaleControl unit="imperial" />
61
- </Map>
62
- </div>
63
- </DesignTokens>
64
- </Story>
65
-
66
- <style>
67
- .container {
68
- width: 500px;
69
- height: 200px;
70
- }
71
- </style>
@@ -1,25 +0,0 @@
1
- <script lang="ts">
2
- import maplibre, { type ControlPosition, type Unit } from 'maplibre-gl';
3
- import MapControl from '../MapControl/MapControl.svelte';
4
-
5
- interface ScaleControlProps {
6
- maxWidth?: number | undefined;
7
- position?: ControlPosition;
8
- unit?: Unit;
9
- }
10
- let { maxWidth = 100, unit = 'metric', position = 'bottom-left' }: ScaleControlProps = $props();
11
- </script>
12
-
13
- <MapControl control={new maplibre.ScaleControl({ maxWidth, unit })} {position} />
14
-
15
- <style>
16
- :global {
17
- .maplibregl-ctrl-scale {
18
- color: inherit;
19
- border-bottom: 1px solid currentColor;
20
- font-weight: 400;
21
- font-size: var(--fs-small-3);
22
- font-family: var(--swr-text);
23
- }
24
- }
25
- </style>
@@ -1,9 +0,0 @@
1
- <script context="module" lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import MapSource from './MapSource.svelte';
4
-
5
- const { Story } = defineMeta({
6
- title: 'Maplibre/MapSource',
7
- component: MapSource
8
- });
9
- </script>
@@ -1,61 +0,0 @@
1
- <script lang="ts">
2
- import { onDestroy, type Snippet } from 'svelte';
3
- import { type Map, type SourceSpecification } from 'maplibre-gl';
4
- import { getMapContext, createSourceContext } from '../context.svelte.js';
5
-
6
- type Source = maplibregl.VectorTileSource;
7
-
8
- interface MapSourceProps {
9
- id: string;
10
- sourceSpec: SourceSpecification;
11
- source?: Source;
12
- onLoad?: (map: Map, url?: string, data?: string) => undefined;
13
- children?: Snippet;
14
- }
15
-
16
- let { id, sourceSpec, source = $bindable(), children }: MapSourceProps = $props();
17
- let firstRun = true;
18
-
19
- // Get map context
20
- const { map, styleLoaded } = $derived(getMapContext());
21
-
22
- // Create source context
23
- const sourceContext = createSourceContext();
24
-
25
- // 1. Add the source to the map using the spec, then get the
26
- // actual source object back from the map instance
27
- $effect(() => {
28
- if (map && styleLoaded) {
29
- // See: https://svelte.dev/docs/svelte/$state#$state.snapshot
30
- map.addSource(id, $state.snapshot(sourceSpec) as SourceSpecification);
31
- source = map.getSource(id);
32
- firstRun = true;
33
- }
34
- });
35
-
36
- // 2. Do extra stuff with the source object
37
- $effect(() => {
38
- if (source) {
39
- }
40
- });
41
-
42
- $effect(() => {
43
- source;
44
- firstRun = false;
45
- });
46
-
47
- onDestroy(() => {
48
- if (map && styleLoaded) {
49
- const layers = map?.getStyle().layers;
50
- layers
51
- .filter((l) => l.type !== 'background' && l.source == id)
52
- .forEach((l) => {
53
- map?.removeLayer(l.id);
54
- });
55
- map.removeSource(id);
56
- source = undefined;
57
- }
58
- });
59
- </script>
60
-
61
- {@render children?.()}
@@ -1,89 +0,0 @@
1
- import type { Map, SourceSpecification } from 'maplibre-gl';
2
- import { tick } from 'svelte';
3
-
4
- /**
5
- * Add a source to the map.
6
- *
7
- * @param map - The map instance
8
- * @param sourceId - The ID of the source to add
9
- * @param source - The source specification object
10
- * @param okToAdd - Callback to check if the source should still be added
11
- * @param cb - Callback when the source has been added
12
- *
13
- * This properly handles the case where an old source with the same ID is still being removed.
14
- */
15
- export function addSource(
16
- map: Map,
17
- sourceId: string,
18
- source: SourceSpecification,
19
- okToAdd: (sourceId: string) => boolean,
20
- cb: () => void
21
- ) {
22
- // 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.
23
- let removed = false;
24
- if (map.getSource(sourceId)) {
25
- removed = true;
26
- map.removeSource(sourceId);
27
- }
28
-
29
- const doAddSource = () => {
30
- if (!okToAdd(sourceId)) {
31
- // in case the component was destroyed or the id changed while waiting to call this
32
- return;
33
- }
34
-
35
- map.addSource(sourceId, source);
36
- cb();
37
- };
38
-
39
- if (removed) {
40
- // Source removal happens quickly but asynchronously, and we have no way to really interlock on when it happens, so just loop until it does.
41
- const waitForRemoval = () => {
42
- if (!sourceId) {
43
- return;
44
- }
45
-
46
- if (map.getSource(sourceId)) {
47
- // The source hasn't been removed yet, so keep waiting.
48
- setTimeout(waitForRemoval, 1);
49
- } else {
50
- doAddSource();
51
- }
52
- };
53
-
54
- waitForRemoval();
55
- } else {
56
- // If we don't have an existing source to remove (i.e. the normal case) then
57
- // just add the source right away.
58
- doAddSource();
59
- }
60
- }
61
-
62
- /**
63
- * A helper function that removes a source from the map after all of the layers inside it have
64
- * had a chance to remove themselves.
65
- *
66
- * @param {Readable<Map|undefined>} mapStore - The store containing the Map instance
67
- * @param {string} sourceId - The ID of the source to remove
68
- * @param {unknown} sourceObj - The source object that was originally added
69
- *
70
- * Waits one tick to ensure layers have a chance to be removed, then checks if the
71
- * source with the given ID is still the same object as was originally added.
72
- *
73
- * If so, it removes the source from the map. This avoids removing a source that was
74
- * already replaced by another source reusing the same ID.
75
- */
76
- export function removeSource(map: Map, sourceId: string, sourceObj: unknown) {
77
- tick().then(() => {
78
- // Wait a tick so that the layers inside this source can all be removed.
79
- // But make sure that the source wasn't already replaced with another source with the same ID.
80
- if (!map.loaded()) {
81
- return;
82
- }
83
-
84
- let remainingSource = map.getSource(sourceId);
85
- if (remainingSource === sourceObj) {
86
- map.removeSource(sourceId);
87
- }
88
- });
89
- }
@@ -1,192 +0,0 @@
1
- <script module lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import type { LngLatLike, MapGeoJSONFeature } from 'maplibre-gl';
4
-
5
- import DesignTokens from '../../DesignTokens/DesignTokens.svelte';
6
- import Map from '../Map/Map.svelte';
7
- import VectorTileSource from '../VectorTileSource/VectorTileSource.svelte';
8
- import VectorLayer from '../VectorLayer/VectorLayer.svelte';
9
- import AttributionControl from '../AttributionControl/AttributionControl.svelte';
10
- import Tooltip from './Tooltip.svelte';
11
- import { SWRDataLabLight } from '../MapStyle';
12
-
13
- const { Story } = defineMeta({
14
- title: 'Maplibre/Extras/Tooltip',
15
- component: Tooltip
16
- });
17
-
18
- let hovered = $state() as MapGeoJSONFeature | undefined;
19
- let hovered2 = $state() as MapGeoJSONFeature | undefined;
20
- let hoverCoords = $state([0, 0]) as LngLatLike;
21
-
22
- let selected = $state() as MapGeoJSONFeature | undefined;
23
- let selectCoords = $state([0, 0]) as LngLatLike;
24
- </script>
25
-
26
- <Story asChild name="Default">
27
- <DesignTokens>
28
- <div class="container">
29
- <Map
30
- style={SWRDataLabLight}
31
- initialLocation={{ lat: 51, lng: 10, zoom: 8 }}
32
- allowZoom={false}
33
- >
34
- <VectorTileSource
35
- id="ev-infra-source"
36
- url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`}
37
- />
38
- <VectorLayer
39
- sourceId="ev-infra-source"
40
- type="fill"
41
- id="coverage-fill"
42
- sourceLayer="coverage"
43
- placeBelow="street-residential"
44
- onmousemove={(e) => {
45
- hovered = e.features?.[0];
46
- hoverCoords = e.lngLat;
47
- }}
48
- onmouseleave={() => (hovered = undefined)}
49
- paint={{
50
- 'fill-color': ['step', ['get', 'coverage_2025'], 'white', 1, '#ffcfcc', 1.3, '#FF4D20']
51
- }}
52
- />
53
- <VectorLayer
54
- {hovered}
55
- sourceId="ev-infra-source"
56
- sourceLayer="coverage"
57
- id="ev-infra-outline"
58
- placeBelow="label-place-city"
59
- type="line"
60
- layout={{
61
- 'line-join': 'round'
62
- }}
63
- paint={{
64
- 'line-width': [
65
- 'case',
66
- ['any', ['boolean', ['feature-state', 'hovered'], false]],
67
- 1.5,
68
- 0.5
69
- ],
70
- 'line-color': [
71
- 'case',
72
- ['any', ['boolean', ['feature-state', 'hovered'], false]],
73
- '#000',
74
- '#555'
75
- ],
76
- 'line-opacity': 1
77
- }}
78
- />
79
-
80
- {#if hovered}
81
- <Tooltip
82
- position={hoverCoords}
83
- mouseEvents={false}
84
- showCloseButton={false}
85
- closeOnClick={false}
86
- >
87
- <pre>{Object.entries(hovered.properties)
88
- .map(([key, val]) => `${key}: ${val}`)
89
- .join('\n')}</pre>
90
- </Tooltip>
91
- {/if}
92
- <AttributionControl position="bottom-left" />
93
- </Map>
94
- </div>
95
- </DesignTokens>
96
- </Story>
97
-
98
- <Story asChild name="Show on Click">
99
- <DesignTokens>
100
- <div class="container">
101
- <Map
102
- style={SWRDataLabLight}
103
- initialLocation={{ lat: 51, lng: 10, zoom: 8 }}
104
- allowZoom={false}
105
- >
106
- <VectorTileSource
107
- id="ev-infra-source"
108
- url={`https://static.datenhub.net/data/p108_e_auto_check/ev_infra_merged.versatiles?tiles/{z}/{x}/{y}`}
109
- />
110
- <VectorLayer
111
- sourceId="ev-infra-source"
112
- type="fill"
113
- id="coverage-fill"
114
- sourceLayer="coverage"
115
- placeBelow="street-residential"
116
- onmousemove={(e) => {
117
- hovered2 = e.features?.[0];
118
- }}
119
- onclick={(e) => {
120
- selected = e.features?.[0];
121
- selectCoords = e.lngLat;
122
- }}
123
- onmouseleave={() => (hovered2 = undefined)}
124
- paint={{
125
- 'fill-color': ['step', ['get', 'coverage_2025'], 'white', 1, '#CCDCFF', 1.3, '#6280E5']
126
- }}
127
- />
128
- <VectorLayer
129
- hovered={hovered2}
130
- {selected}
131
- sourceId="ev-infra-source"
132
- sourceLayer="coverage"
133
- id="ev-infra-outline"
134
- placeBelow="label-place-city"
135
- type="line"
136
- layout={{
137
- 'line-join': 'round'
138
- }}
139
- paint={{
140
- 'line-width': [
141
- 'case',
142
- [
143
- 'any',
144
- ['boolean', ['feature-state', 'hovered'], false],
145
- ['boolean', ['feature-state', 'selected'], false]
146
- ],
147
- 2,
148
- 0.5
149
- ],
150
- 'line-color': [
151
- 'case',
152
- [
153
- 'any',
154
- ['boolean', ['feature-state', 'hovered'], false],
155
- ['boolean', ['feature-state', 'selected'], false]
156
- ],
157
- '#000',
158
- '#555'
159
- ],
160
- 'line-opacity': 1
161
- }}
162
- />
163
- {#if selected}
164
- <Tooltip
165
- position={selectCoords}
166
- mouseEvents={true}
167
- showCloseButton={true}
168
- onClose={() => {
169
- selected = undefined;
170
- }}
171
- >
172
- <pre class="padRight">{Object.entries(selected.properties)
173
- .map(([key, val]) => `${key}: ${val}`)
174
- .join('\n')}</pre>
175
- </Tooltip>
176
- {/if}
177
- <AttributionControl position="bottom-left" />
178
- </Map>
179
- </div>
180
- </DesignTokens>
181
- </Story>
182
-
183
- <style>
184
- .container {
185
- width: 100%;
186
- height: 600px;
187
- }
188
-
189
- .padRight {
190
- padding-right: 2.5em;
191
- }
192
- </style>