@swr-data-lab/components 2.14.0 → 2.15.1

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 (40) hide show
  1. package/dist/DesignTokens/DesignTokens.svelte +2 -0
  2. package/dist/DesignTokens/Tokens.js +5 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/maplibre/AttributionControl/AttributionControl.svelte +1 -0
  6. package/dist/maplibre/GeocoderControl/GeocoderControl.svelte +20 -13
  7. package/dist/maplibre/Map/Map.svelte +19 -11
  8. package/dist/maplibre/MapStyle/SWRDataLabDark.d.ts +9 -0
  9. package/dist/maplibre/MapStyle/SWRDataLabDark.js +118 -0
  10. package/dist/maplibre/MapStyle/SWRDataLabLight.js +39 -7
  11. package/dist/maplibre/MapStyle/components/Admin.d.ts +1 -1
  12. package/dist/maplibre/MapStyle/components/Admin.js +6 -12
  13. package/dist/maplibre/MapStyle/components/Buildings.d.ts +1 -1
  14. package/dist/maplibre/MapStyle/components/Buildings.js +12 -13
  15. package/dist/maplibre/MapStyle/components/Landuse.d.ts +1 -1
  16. package/dist/maplibre/MapStyle/components/Landuse.js +5 -20
  17. package/dist/maplibre/MapStyle/components/PlaceLabels.d.ts +1 -1
  18. package/dist/maplibre/MapStyle/components/PlaceLabels.js +2 -3
  19. package/dist/maplibre/MapStyle/components/Roads.d.ts +1 -1
  20. package/dist/maplibre/MapStyle/components/Roads.js +173 -202
  21. package/dist/maplibre/MapStyle/components/Transit.d.ts +1 -1
  22. package/dist/maplibre/MapStyle/components/Transit.js +43 -44
  23. package/dist/maplibre/MapStyle/components/Walking.d.ts +1 -1
  24. package/dist/maplibre/MapStyle/components/Walking.js +61 -209
  25. package/dist/maplibre/MapStyle/icons/pin-14-dark.svg +10 -0
  26. package/dist/maplibre/MapStyle/index.d.ts +2 -1
  27. package/dist/maplibre/MapStyle/index.js +2 -1
  28. package/dist/maplibre/MapStyle/sprite/sprite.json +1 -1
  29. package/dist/maplibre/MapStyle/sprite/sprite.png +0 -0
  30. package/dist/maplibre/MapStyle/sprite/sprite@2x.json +1 -1
  31. package/dist/maplibre/MapStyle/sprite/sprite@2x.png +0 -0
  32. package/dist/maplibre/MapStyle/storyLocations.d.ts +47 -0
  33. package/dist/maplibre/MapStyle/storyLocations.js +21 -0
  34. package/dist/maplibre/NavigationControl/NavigationControl.svelte +12 -3
  35. package/dist/maplibre/ScaleControl/ScaleControl.svelte +1 -0
  36. package/dist/maplibre/Tooltip/Tooltip.svelte +3 -2
  37. package/package.json +1 -1
  38. package/dist/maplibre/Map/test.css +0 -687
  39. package/dist/maplibre/MapStyle/tokens.d.ts +0 -23
  40. package/dist/maplibre/MapStyle/tokens.js +0 -23
@@ -42,11 +42,13 @@ const rules = [
42
42
  --color-logoFill: var(--logoFill-light);
43
43
  --color-pageFill: var(--pageFill-light);
44
44
  --color-surfaceFill: var(--surfaceFill-light);
45
+ --color-surfaceBorder: var(--surfaceBorder-light);
45
46
  }
46
47
  .container[data-theme=dark] {
47
48
  --color-logoFill: var(--logoFill-dark);
48
49
  --color-pageFill: var(--pageFill-dark);
49
50
  --color-surfaceFill: var(--surfaceFill-dark);
51
+ --color-surfaceBorder: var(--surfaceBorder-dark);
50
52
  --color-textPrimary: var(--textPrimary-dark);
51
53
  --color-textSecondary: var(--textSecondary-dark);
52
54
  --color-textSecondaryHover: var(--textSecondaryHover-dark);
@@ -162,7 +162,11 @@ const semantics = {
162
162
  },
163
163
  surfaceFill: {
164
164
  dark: '#222325',
165
- light: '#f1eeeb'
165
+ light: '#ffffff'
166
+ },
167
+ surfaceBorder: {
168
+ dark: shades.gray.dark1,
169
+ light: shades.gray.base
166
170
  },
167
171
  pageFill: {
168
172
  dark: '#0C0C0C',
package/dist/index.d.ts CHANGED
@@ -11,7 +11,6 @@ export { default as ChartFooter } from "./ChartFooter/ChartFooter.svelte";
11
11
  export { default as Logotype } from "./Logotype/Logotype.svelte";
12
12
  export { default as Middot } from "./Middot/Middot.svelte";
13
13
  export { default as Map } from "./maplibre/Map/Map.svelte";
14
- export { SWRDataLabLight } from "./maplibre/MapStyle";
15
14
  export { default as MapControl } from "./maplibre/MapControl/MapControl.svelte";
16
15
  export { default as AttributionControl } from "./maplibre/AttributionControl/AttributionControl.svelte";
17
16
  export { default as GeocoderControl } from "./maplibre/GeocoderControl/GeocoderControl.svelte";
@@ -29,3 +28,4 @@ export { default as Button } from "./Button/Button.svelte";
29
28
  export { default as Select } from "./Select/Select.svelte";
30
29
  export { default as Autocomplete } from "./Autocomplete/Autocomplete.svelte";
31
30
  export { default as ChartList } from "./ChartList/ChartList.svelte";
31
+ export { SWRDataLabLight, SWRDataLabDark } from "./maplibre/MapStyle";
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ export { default as Middot } from './Middot/Middot.svelte';
20
20
 
21
21
  // Maplibre
22
22
  export { default as Map } from './maplibre/Map/Map.svelte';
23
- export { SWRDataLabLight } from './maplibre/MapStyle';
23
+ export { SWRDataLabLight, SWRDataLabDark } from './maplibre/MapStyle';
24
24
  export { default as MapControl } from './maplibre/MapControl/MapControl.svelte';
25
25
  export { default as AttributionControl } from './maplibre/AttributionControl/AttributionControl.svelte';
26
26
  export { default as GeocoderControl } from './maplibre/GeocoderControl/GeocoderControl.svelte';
@@ -16,6 +16,7 @@ const { position = 'bottom-right', customAttribution } = $props();
16
16
  letter-spacing: 0.005em;
17
17
  word-spacing: 0.005em;
18
18
  font-family: var(--swr-sans);
19
+ color: var(--color-textSecondary);
19
20
  }
20
21
  :global(.maplibregl-ctrl-attrib.maplibregl-compact-show) :global(.maplibregl-ctrl-attrib-inner) {
21
22
  display: block;
@@ -23,19 +23,22 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
23
23
  <MapControl control={geocoder} position="top-left" />
24
24
 
25
25
  <style>:global(.maplibregl-ctrl-geocoder) {
26
- background-color: #fff;
26
+ background-color: var(--color-surfaceFill);
27
27
  position: relative;
28
28
  width: 100%;
29
29
  z-index: 1;
30
30
  font-family: var(--swr-sans);
31
31
  font-size: var(--fs-small-1);
32
32
  border-radius: var(--br-small);
33
- border: 1px solid rgba(0, 0, 0, 0.75);
34
- box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.075);
33
+ border: 1px solid var(--color-surfaceBorder);
34
+ box-shadow: 2px 2px 1px rgba(0, 0, 0, 0.075);
35
+ }
36
+ :global(.maplibregl-ctrl-geocoder) :global(button) {
37
+ cursor: pointer;
35
38
  }
36
39
  :global(.maplibre-gl-geocoder--error) {
37
40
  font-size: var(--fs-small-2);
38
- color: var(--gray-dark-2);
41
+ color: var(--color-textSecondary);
39
42
  padding: 0.4em 0.65em;
40
43
  }
41
44
  :global(.maplibregl-ctrl-geocoder--input) {
@@ -44,10 +47,10 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
44
47
  font-family: inherit;
45
48
  font-size: inherit;
46
49
  background-color: transparent;
47
- color: var(--gray-dark-5);
50
+ color: var(--color-textPrimary);
48
51
  border: 0;
49
- height: 1.85em;
50
- padding: 0 1.85em;
52
+ height: 1.95em;
53
+ padding: 0 1.95em;
51
54
  padding-top: 0.1em;
52
55
  text-overflow: ellipsis;
53
56
  white-space: nowrap;
@@ -55,10 +58,10 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
55
58
  }
56
59
  :global(.maplibregl-ctrl-geocoder--input::placeholder) {
57
60
  opacity: 1;
58
- color: var(--gray-dark-2);
61
+ color: var(--color-textSecondary);
59
62
  }
60
63
  :global(.maplibregl-ctrl-geocoder--input:focus) {
61
- color: var(--gray-dark-5);
64
+ color: var(--color-textPrimary);
62
65
  outline: 0;
63
66
  }
64
67
  :global(.maplibregl-ctrl-geocoder) :global(.maplibregl-ctrl-geocoder--pin-right) > :global(*) {
@@ -71,7 +74,7 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
71
74
  border: 0;
72
75
  }
73
76
  :global(.maplibregl-ctrl-geocoder) :global(.suggestions) {
74
- background: white;
77
+ background: var(--color-surfaceFill);
75
78
  border: 1px solid rgba(0, 0, 0, 0.75);
76
79
  box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
77
80
  border-radius: var(--br-small);
@@ -94,14 +97,14 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
94
97
  padding: 0.5em 0.75em;
95
98
  color: var(--gray-dark-5);
96
99
  padding-bottom: 0.5em;
97
- border-bottom: 1px solid var(--gray-light-3);
100
+ border-bottom: 1px solid var(--color-surfaceBorder);
98
101
  }
99
102
  :global(.maplibregl-ctrl-geocoder) :global(.suggestions) > :global(li:last-child) > :global(a) {
100
103
  border-bottom: 0;
101
104
  }
102
105
  :global(.maplibregl-ctrl-geocoder) :global(.suggestions) > :global(.active) > :global(a),
103
106
  :global(.maplibregl-ctrl-geocoder) :global(.suggestions) > :global(li) > :global(a:hover) {
104
- background: var(--gray-light-5);
107
+ background: var(--color-surfaceHover);
105
108
  text-decoration: none;
106
109
  cursor: pointer;
107
110
  }
@@ -129,12 +132,13 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
129
132
  display: none;
130
133
  }
131
134
  :global(.maplibregl-ctrl-geocoder--result-title) {
135
+ color: var(--color-textPrimary);
132
136
  font-weight: 600;
133
137
  letter-spacing: 0;
134
138
  }
135
139
  :global(.maplibregl-ctrl-geocoder--result-address) {
136
140
  font-size: var(--fs-small-2);
137
- color: var(--gray-dark-2);
141
+ color: var(--color-textSecondary);
138
142
  line-height: 1.3;
139
143
  }
140
144
  :global(.maplibregl-ctrl-geocoder--icon) {
@@ -144,6 +148,9 @@ const geocoder = new MaplibreGeocoder(geocoderAPI, {
144
148
  transform: translateY(-50%);
145
149
  height: 1em;
146
150
  }
151
+ :global(.maplibregl-ctrl-geocoder--icon) :global(path) {
152
+ fill: var(--color-textPrimary);
153
+ }
147
154
  :global(.maplibregl-ctrl-geocoder--icon-close) {
148
155
  right: 0;
149
156
  }
@@ -82,7 +82,7 @@ $effect(() => {
82
82
  mapContext.map?.scrollZoom.enable();
83
83
  }
84
84
  });
85
- const debugValues = $derived(Object.entries({ ...center, zoom, pitch, allowZoom, allowRotation }));
85
+ const debugValues = $derived(Object.entries({ zoom, pitch, allowZoom, allowRotation }));
86
86
  const handleDebugValueClick = (e) => {
87
87
  if (e.target) {
88
88
  const t = e.target;
@@ -106,10 +106,12 @@ const handleDebugCopyLocationClick = (e) => {
106
106
  {/if}
107
107
  {#if showDebug}
108
108
  <ul class="debug">
109
+ <li>
110
+ [{center?.lat.toFixed(2)}, {center?.lng.toFixed(2)}]
111
+ </li>
109
112
  {#each debugValues as [key, value]}
110
113
  <li>
111
- {key}:
112
- <button onclick={handleDebugValueClick}
114
+ {key}=<button onclick={handleDebugValueClick}
113
115
  >{value?.toLocaleString('en', { maximumSignificantDigits: 6 })}</button
114
116
  >
115
117
  </li>
@@ -128,11 +130,14 @@ const handleDebugCopyLocationClick = (e) => {
128
130
  position: absolute;
129
131
  top: 0;
130
132
  right: 0;
131
- background: rgba(0, 0, 0, 0.9);
133
+ background: rgba(0, 0, 0, 0.75);
132
134
  color: white;
133
135
  z-index: 1000;
134
136
  padding: 2px;
137
+ font-size: 10px;
135
138
  font-family: monospace;
139
+ display: flex;
140
+ gap: 1em;
136
141
  }
137
142
  .debug li {
138
143
  list-style: none;
@@ -142,7 +147,9 @@ const handleDebugCopyLocationClick = (e) => {
142
147
  background: transparent;
143
148
  font-family: inherit;
144
149
  color: inherit;
150
+ font-size: inherit;
145
151
  border: 0;
152
+ text-transform: uppercase;
146
153
  cursor: pointer;
147
154
  }
148
155
  .debug button:hover, .debug button:focus-visible {
@@ -216,14 +223,15 @@ const handleDebugCopyLocationClick = (e) => {
216
223
  transform: translate(0);
217
224
  }
218
225
  :global(.maplibregl-ctrl-group) {
219
- background: white;
220
- border: 1px solid rgba(0, 0, 0, 0.75);
226
+ background: var(--color-surfaceFill);
227
+ border: 1px solid var(--color-surfaceBorder);
221
228
  box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.075);
222
229
  border-radius: var(--br-small);
223
230
  overflow: hidden;
224
231
  }
225
232
  :global(.maplibregl-ctrl-group) :global(button) {
226
233
  background-color: transparent;
234
+ color: var(--color-textPrimary);
227
235
  border: 0;
228
236
  box-sizing: border-box;
229
237
  cursor: pointer;
@@ -234,7 +242,7 @@ const handleDebugCopyLocationClick = (e) => {
234
242
  width: 29px;
235
243
  }
236
244
  :global(.maplibregl-ctrl-group) :global(button) + :global(button) {
237
- border-top: 1px solid rgba(0, 0, 0, 0.35);
245
+ border-top: 1px solid var(--color-surfaceBorder);
238
246
  }
239
247
  :global(.maplibregl-ctrl) :global(button) :global(.maplibregl-ctrl-icon) {
240
248
  background-position: 50%;
@@ -250,7 +258,7 @@ const handleDebugCopyLocationClick = (e) => {
250
258
  opacity: 0.5;
251
259
  }
252
260
  :global(.maplibregl-ctrl) :global(button:not(:disabled):hover) {
253
- background-color: var(--gray-light-5);
261
+ background-color: var(--color-surfaceHover);
254
262
  }
255
263
  :global(.maplibregl-ctrl-group) :global(button:focus:focus-visible) {
256
264
  box-shadow: 0 0 2px 2px #0096ff;
@@ -259,10 +267,10 @@ const handleDebugCopyLocationClick = (e) => {
259
267
  box-shadow: none;
260
268
  }
261
269
  :global(.maplibregl-ctrl-group) :global(button:focus:first-child) {
262
- border-radius: 4px 4px 0 0;
270
+ border-radius: 2px 2px 0 0;
263
271
  }
264
272
  :global(.maplibregl-ctrl-group) :global(button:focus:last-child) {
265
- border-radius: 0 0 4px 4px;
273
+ border-radius: 0 0 2px 2px;
266
274
  }
267
275
  :global(.maplibregl-ctrl-group) :global(button:focus:only-child) {
268
276
  border-radius: inherit;
@@ -274,7 +282,7 @@ const handleDebugCopyLocationClick = (e) => {
274
282
  will-change: transform;
275
283
  }
276
284
  :global(.maplibregl-marker) :global(path) {
277
- fill: var(--violet-dark-5);
285
+ fill: var(--color-textPrimary);
278
286
  }
279
287
  :global(.maplibregl-cooperative-gesture-screen) {
280
288
  align-items: center;
@@ -0,0 +1,9 @@
1
+ import type { StyleSpecification } from 'maplibre-gl';
2
+ interface StyleOptions {
3
+ enableBuildingExtrusions?: boolean;
4
+ }
5
+ interface styleFunction {
6
+ (options?: StyleOptions): StyleSpecification;
7
+ }
8
+ declare const style: styleFunction;
9
+ export default style;
@@ -0,0 +1,118 @@
1
+ import makeAdmin from './components/Admin';
2
+ import makeBuildings from './components/Buildings';
3
+ import makeLanduse from './components/Landuse';
4
+ import makeTransit from './components/Transit';
5
+ import makePlaceLabels from './components/PlaceLabels';
6
+ import makeWalking from './components/Walking';
7
+ import makeRoads from './components/Roads';
8
+ const tokens = {
9
+ sans_regular: ['SWR Sans Regular'],
10
+ sans_medium: ['SWR Sans Medium'],
11
+ sans_bold: ['SWR Sans Bold'],
12
+ background: {
13
+ stops: [
14
+ [8, 'hsl(210, 9%, 13%)'],
15
+ [10, '#1e1f22']
16
+ ]
17
+ },
18
+ water: 'hsl(210, 12%, 8%)',
19
+ water_light: 'hsl(210, 12%, 8%)',
20
+ water_ocean: 'hsl(210, 12%, 8%)',
21
+ marsh: 'hsl(180, 3%, 35%)',
22
+ grass: 'hsl(170, 20%, 14%)',
23
+ grass_dark: 'hsl(170, 16%, 12%)',
24
+ street_primary: 'hsl(220, 3%, 20%)',
25
+ street_primary_case: 'hsl(0, 11%, 7%)',
26
+ street_secondary: 'hsl(0, 0%, 22%)',
27
+ street_secondary_case: 'hsl(0, 0%, 0%)',
28
+ street_tertiary: 'hsl(0, 0%, 20%)',
29
+ street_tertiary_case: 'hsl(0, 0%, 14%)',
30
+ label_primary: 'hsl(240, 5%, 82%)',
31
+ label_secondary: 'hsl(0, 2%, 72%)',
32
+ label_tertiary: 'hsl(0, 1%, 55%)',
33
+ boundary_country: '#6e6f71',
34
+ boundary_country_case: '#181818',
35
+ boundary_state: 'hsl(218, 4%, 37%)',
36
+ rail: 'hsl(0, 0%, 33%)',
37
+ sand: 'hsl(0, 0%, 16%)',
38
+ building: '#232325'
39
+ };
40
+ const { landuse } = makeLanduse(tokens);
41
+ const { placeLabels, boundaryLabels } = makePlaceLabels(tokens);
42
+ const { admin } = makeAdmin(tokens);
43
+ const { airports, transitBridges, transitSurface, transitTunnels } = makeTransit(tokens);
44
+ const { walkingLabels, walkingTunnels, walkingSurface, walkingBridges } = makeWalking(tokens);
45
+ const { roadLabels, roadBridges, roadSurface, roadTunnels } = makeRoads(tokens);
46
+ const { buildingFootprints, buildingExtrusions, structureExtrusions } = makeBuildings(tokens);
47
+ const style = (opts) => {
48
+ const options = {
49
+ enableBuildingExtrusions: false,
50
+ ...opts
51
+ };
52
+ return {
53
+ version: 8,
54
+ name: 'swr-datalab-dark',
55
+ metadata: { license: 'https://creativecommons.org/publicdomain/zero/1.0/' },
56
+ glyphs: 'https://static.datenhub.net/maps/fonts/{fontstack}/{range}.pbf',
57
+ sprite: 'https://static.datenhub.net/maps/styles/swr-datalab-light/sprite/sprite',
58
+ sources: {
59
+ 'versatiles-osm': {
60
+ attribution: '<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
61
+ tiles: ['https://tiles.versatiles.org/tiles/osm/{z}/{x}/{y}'],
62
+ bounds: [-180, -85.0511287798066, 180, 85.0511287798066],
63
+ type: 'vector',
64
+ scheme: 'xyz',
65
+ minzoom: 0,
66
+ maxzoom: 14
67
+ },
68
+ ...(options.enableBuildingExtrusions && {
69
+ 'basemap-de': {
70
+ attribution: 'GeoBasis-DE',
71
+ type: 'vector',
72
+ bounds: [5.8, 47.2, 15.1, 55.1],
73
+ maxzoom: 15,
74
+ minzoom: 0,
75
+ scheme: 'xyz',
76
+ tiles: [
77
+ 'https://sgx.geodatenzentrum.de/gdz_basemapde_vektor/tiles/v2/bm_web_de_3857/{z}/{x}/{y}.pbf'
78
+ ]
79
+ }
80
+ })
81
+ },
82
+ sky: {
83
+ 'atmosphere-blend': ['interpolate', ['linear'], ['zoom'], 0, 0.1, 5, 0.1, 7, 0]
84
+ },
85
+ light: { anchor: 'viewport', color: 'white', intensity: 0.5 },
86
+ layers: [
87
+ // 1. Landuse
88
+ ...landuse,
89
+ ...airports,
90
+ // 2. Building footprints + Structures (ie. bridges)
91
+ ...(!options.enableBuildingExtrusions ? [buildingFootprints] : []),
92
+ ...(options.enableBuildingExtrusions ? [structureExtrusions] : []),
93
+ // 3. Tunnels
94
+ ...walkingTunnels,
95
+ ...roadTunnels,
96
+ ...transitTunnels,
97
+ // 4. Surface ways
98
+ ...walkingSurface,
99
+ ...roadSurface,
100
+ ...transitSurface,
101
+ // 5. Bridges ways
102
+ ...walkingBridges,
103
+ ...roadBridges,
104
+ ...transitBridges,
105
+ // 6. Admin boundaries
106
+ ...admin,
107
+ // 7. Labels
108
+ ...walkingLabels,
109
+ ...roadLabels,
110
+ // 8. Building extrusions
111
+ ...(options.enableBuildingExtrusions ? [buildingExtrusions] : []),
112
+ // 8. Point labels
113
+ ...placeLabels,
114
+ ...boundaryLabels
115
+ ]
116
+ };
117
+ };
118
+ export default style;
@@ -5,13 +5,45 @@ import makeTransit from './components/Transit';
5
5
  import makePlaceLabels from './components/PlaceLabels';
6
6
  import makeWalking from './components/Walking';
7
7
  import makeRoads from './components/Roads';
8
- const { buildingFootprints, buildingExtrusions, structureExtrusions } = makeBuildings();
9
- const { landuse } = makeLanduse();
10
- const { placeLabels, boundaryLabels } = makePlaceLabels();
11
- const { admin } = makeAdmin();
12
- const { airports, transitBridges, transitSurface, transitTunnels } = makeTransit();
13
- const { walkingLabels, walkingTunnels, walkingSurface, walkingBridges } = makeWalking();
14
- const { roadLabels, roadBridges, roadSurface, roadTunnels } = makeRoads();
8
+ const tokens = {
9
+ sans_regular: ['SWR Sans Regular'],
10
+ sans_medium: ['SWR Sans Medium'],
11
+ sans_bold: ['SWR Sans Bold'],
12
+ background: {
13
+ stops: [
14
+ [8, 'hsl(24, 29%, 98.5%)'],
15
+ [10, 'white']
16
+ ]
17
+ },
18
+ water: 'hsl(210, 71%, 83%)',
19
+ water_light: 'hsl(210, 41%, 90%)',
20
+ water_ocean: 'hsl(209, 57%, 84%)',
21
+ marsh: 'hsl(200, 14%, 97%)',
22
+ grass: 'hsl(133, 36%, 95%)',
23
+ grass_dark: 'hsl(127, 49%, 93%)',
24
+ street_primary: 'hsl(0, 4%, 95%)',
25
+ street_primary_case: 'hsl(240, 1%, 84%)',
26
+ street_secondary: 'hsl(0, 0%, 95%)',
27
+ street_secondary_case: 'hsl(0, 0%, 75%)',
28
+ street_tertiary: 'hsl(0, 0%, 95%)',
29
+ street_tertiary_case: 'hsl(0, 0%, 70%)',
30
+ label_primary: 'hsl(240, 10%, 2%)',
31
+ label_secondary: 'hsl(0, 0%, 18%)',
32
+ label_tertiary: 'hsl(60, 1%, 50%)',
33
+ building: '#f3f2f1',
34
+ rail: '#d3d3d3',
35
+ sand: 'hsl(60,0%,95%)',
36
+ boundary_country: '#8b8a89',
37
+ boundary_state: 'hsl(37, 10%, 75%)',
38
+ boundary_country_case: 'white'
39
+ };
40
+ const { landuse } = makeLanduse(tokens);
41
+ const { placeLabels, boundaryLabels } = makePlaceLabels(tokens);
42
+ const { admin } = makeAdmin(tokens);
43
+ const { airports, transitBridges, transitSurface, transitTunnels } = makeTransit(tokens);
44
+ const { walkingLabels, walkingTunnels, walkingSurface, walkingBridges } = makeWalking(tokens);
45
+ const { roadLabels, roadBridges, roadSurface, roadTunnels } = makeRoads(tokens);
46
+ const { buildingFootprints, buildingExtrusions, structureExtrusions } = makeBuildings(tokens);
15
47
  const style = (opts) => {
16
48
  const options = {
17
49
  enableBuildingExtrusions: false,
@@ -1 +1 @@
1
- export default function makeAdmin(): any;
1
+ export default function makeAdmin(tokens: any): any;
@@ -1,6 +1,5 @@
1
- import tokens from '../tokens';
2
1
  import {} from '../../types';
3
- export default function makeAdmin() {
2
+ export default function makeAdmin(tokens) {
4
3
  const admin = [
5
4
  {
6
5
  id: 'boundary-country:case',
@@ -12,7 +11,7 @@ export default function makeAdmin() {
12
11
  ['!=', 'coastline', true]
13
12
  ],
14
13
  paint: {
15
- 'line-color': '#ffffff',
14
+ 'line-color': tokens.boundary_country_case,
16
15
  'line-blur': 1,
17
16
  'line-width': {
18
17
  stops: [
@@ -55,7 +54,7 @@ export default function makeAdmin() {
55
54
  ['!=', 'coastline', true]
56
55
  ],
57
56
  paint: {
58
- 'line-color': 'white',
57
+ 'line-color': tokens.boundary_country_case,
59
58
  'line-blur': 1,
60
59
  'line-width': {
61
60
  stops: [
@@ -77,12 +76,7 @@ export default function makeAdmin() {
77
76
  ['!=', 'coastline', true]
78
77
  ],
79
78
  paint: {
80
- 'line-color': {
81
- stops: [
82
- [7, '#a5a5a5'],
83
- [10, '#3f3b39']
84
- ]
85
- },
79
+ 'line-color': tokens.boundary_country,
86
80
  'line-width': {
87
81
  stops: [
88
82
  [2, 0],
@@ -110,7 +104,7 @@ export default function makeAdmin() {
110
104
  [10, 4]
111
105
  ]
112
106
  },
113
- 'line-color': 'hsl(246,0%,77%)',
107
+ 'line-color': tokens.boundary_country,
114
108
  'line-dasharray': [2, 1]
115
109
  }
116
110
  },
@@ -124,7 +118,7 @@ export default function makeAdmin() {
124
118
  ['!=', 'coastline', true]
125
119
  ],
126
120
  paint: {
127
- 'line-color': 'hsl(37, 10%, 75%)',
121
+ 'line-color': tokens.boundary_state,
128
122
  'line-width': {
129
123
  stops: [
130
124
  [7, 1],
@@ -1 +1 @@
1
- export default function makeBuildings(): any;
1
+ export default function makeBuildings(tokens: any): any;
@@ -1,17 +1,16 @@
1
1
  import {} from '../../types';
2
- import tokens from '../tokens';
3
- const extrusionLayer = {
4
- source: 'basemap-de',
5
- type: 'fill-extrusion',
6
- minzoom: 14,
7
- maxzoom: 20,
8
- paint: {
9
- 'fill-extrusion-color': tokens.building,
10
- 'fill-extrusion-opacity': ['interpolate', ['linear'], ['zoom'], 14.5, 0, 15, 1],
11
- 'fill-extrusion-height': ['interpolate', ['linear'], ['zoom'], 14.5, 0, 15, ['get', 'hoehe']]
12
- }
13
- };
14
- export default function makeBuildings() {
2
+ export default function makeBuildings(tokens) {
3
+ const extrusionLayer = {
4
+ source: 'basemap-de',
5
+ type: 'fill-extrusion',
6
+ minzoom: 14,
7
+ maxzoom: 20,
8
+ paint: {
9
+ 'fill-extrusion-color': tokens.building,
10
+ 'fill-extrusion-opacity': ['interpolate', ['linear'], ['zoom'], 14.5, 0, 15, 1],
11
+ 'fill-extrusion-height': ['interpolate', ['linear'], ['zoom'], 14.5, 0, 15, ['get', 'hoehe']]
12
+ }
13
+ };
15
14
  const buildingFootprints = {
16
15
  id: 'building-footprints',
17
16
  type: 'fill',
@@ -1 +1 @@
1
- export default function makeLanduse(): any;
1
+ export default function makeLanduse(tokens: any): any;
@@ -1,17 +1,11 @@
1
- import tokens from '../tokens';
2
1
  import {} from '../../types';
3
- export default function makeLanduse() {
2
+ export default function makeLanduse(tokens) {
4
3
  const landuse = [
5
4
  {
6
5
  id: 'background',
7
6
  type: 'background',
8
7
  paint: {
9
- 'background-color': {
10
- stops: [
11
- [8, tokens.background],
12
- [10, 'white']
13
- ]
14
- }
8
+ 'background-color': tokens.background
15
9
  }
16
10
  },
17
11
  {
@@ -22,15 +16,6 @@ export default function makeLanduse() {
22
16
  'fill-color': tokens.water_ocean
23
17
  }
24
18
  },
25
- {
26
- id: 'land-glacier',
27
- type: 'fill',
28
- 'source-layer': 'water_polygons',
29
- filter: ['all', ['==', 'kind', 'glacier']],
30
- paint: {
31
- 'fill-color': 'hsl(0,0%,100%)'
32
- }
33
- },
34
19
  {
35
20
  id: 'land-agriculture',
36
21
  type: 'fill',
@@ -66,7 +51,7 @@ export default function makeLanduse() {
66
51
  'source-layer': 'land',
67
52
  filter: ['all', ['in', 'kind', 'landfill']],
68
53
  paint: {
69
- 'fill-color': 'hsl(50,0%,95%)',
54
+ 'fill-color': tokens.sand,
70
55
  'fill-opacity': {
71
56
  stops: [
72
57
  [10, 0],
@@ -163,9 +148,9 @@ export default function makeLanduse() {
163
148
  id: 'land-sand',
164
149
  type: 'fill',
165
150
  'source-layer': 'land',
166
- filter: ['all', ['in', 'kind', 'beach', 'sand']],
151
+ filter: ['all', ['in', 'kind', 'beach', 'sand', 'scree']],
167
152
  paint: {
168
- 'fill-color': 'hsl(60,0%,95%)'
153
+ 'fill-color': tokens.sand
169
154
  }
170
155
  },
171
156
  {
@@ -1,5 +1,5 @@
1
1
  import type { SymbolLayerSpecification } from 'maplibre-gl';
2
- export default function makePlaceLabels(): {
2
+ export default function makePlaceLabels(tokens: any): {
3
3
  placeLabels: SymbolLayerSpecification[];
4
4
  boundaryLabels: SymbolLayerSpecification[];
5
5
  };
@@ -1,4 +1,3 @@
1
- import tokens from '../tokens';
2
1
  // Hand-authored list of place labes we want to show at low zoom levels
3
2
  // Ideally majorCities would include Frankfurt and Leipzig, but they're not
4
3
  // state capitals so they're not available in the versatiles data until z6
@@ -7,7 +6,7 @@ const majorCities = ['Berlin', 'Stuttgart', 'München', 'Frankfurt', 'Hamburg',
7
6
  // though that's limited by the fact that versatiles hard-codes population
8
7
  // values for "city" and anything below.
9
8
  // See: https://github.com/versatiles-org/shortbread-tilemaker/blob/69e5d4c586a1d2726b746a24829bfb05d4dbeb91/process.lua#L198-L242
10
- export default function makePlaceLabels() {
9
+ export default function makePlaceLabels(tokens) {
11
10
  const placeLabels = [
12
11
  {
13
12
  id: 'label-place-quarter',
@@ -186,7 +185,7 @@ export default function makePlaceLabels() {
186
185
  },
187
186
  paint: {
188
187
  'text-color': tokens.label_tertiary,
189
- 'text-halo-color': 'white',
188
+ 'text-halo-color': tokens.background,
190
189
  'text-halo-width': 2,
191
190
  'text-halo-blur': 0.5
192
191
  }
@@ -1,6 +1,6 @@
1
1
  import { type Layer } from '../../types';
2
2
  import type { SymbolLayerSpecification } from 'maplibre-gl';
3
- export default function makeRoads(): {
3
+ export default function makeRoads(tokens: any): {
4
4
  roadLabels: SymbolLayerSpecification[];
5
5
  roadBridges: Layer[];
6
6
  roadSurface: Layer[];