Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
2983d48
Scaffold components
awesomephant May 12, 2025
3325de4
Merge branch 'main' into feat-47
awesomephant May 12, 2025
f1af013
Fix windows build
awesomephant May 12, 2025
5cce92e
Block out documentation, add MapStyle
awesomephant May 12, 2025
440ca27
Block out ScaleControl
awesomephant May 13, 2025
0abd34c
Don't panic if mapContext is undefined
awesomephant May 13, 2025
17e4124
Add NavigationControl
awesomephant May 13, 2025
34eb432
Allo .ts imports
awesomephant May 13, 2025
0db5b1d
Don't render map components in stories for now
awesomephant May 13, 2025
22ed538
Add AttributionControl
awesomephant May 13, 2025
3fb2037
Fix typo
awesomephant May 13, 2025
29b5002
Add GeocoderControl
awesomephant May 14, 2025
f06c332
Simplify types
awesomephant May 14, 2025
693ead1
Add LinkToLocationControl
awesomephant May 14, 2025
2ab4d02
Remove unused import
awesomephant May 14, 2025
33c01ec
Fix casing
awesomephant May 14, 2025
a3493ff
Tweak import
awesomephant May 14, 2025
1585f93
Drop broken import
awesomephant May 14, 2025
50149d1
Fix directory casing
awesomephant May 14, 2025
9899eaf
Start on VectorLayer, VectorSource
awesomephant May 15, 2025
d607810
Block out vector tile rendering
awesomephant May 16, 2025
e8e4823
Iterate MapLayer
awesomephant May 16, 2025
719b291
Start MapStyle
awesomephant May 16, 2025
2f42c77
Block out Tooltip
awesomephant May 18, 2025
f8bf90e
Tweak formatting
awesomephant May 18, 2025
085a4ed
Tweak formatting
awesomephant May 18, 2025
4d26019
Iterate attribution control typography
awesomephant May 19, 2025
2ca40bc
Add geocoder story
awesomephant May 19, 2025
1b62039
Tweak wording
awesomephant May 19, 2025
49a5ce0
Never toggle attribution
awesomephant May 19, 2025
22c6bcf
Split map style into semantic components
awesomephant May 19, 2025
a7d6049
improve directory structure
awesomephant May 19, 2025
38d5131
Consolidate common properties
awesomephant May 19, 2025
76e64c9
Fix type issues
awesomephant May 19, 2025
f35a7df
Fix import
awesomephant May 19, 2025
0367444
Consolidate common props
awesomephant May 19, 2025
45a5e26
Iterate navigation control
awesomephant May 19, 2025
7cc759e
Improve primary tunnel
awesomephant May 19, 2025
bda7648
Iterate landuse
awesomephant May 19, 2025
5e2e4cb
Consolidate town label layers
awesomephant May 19, 2025
f86a34b
Improve naming, improve docs
awesomephant May 19, 2025
dfc0fdf
Add msw plugin
awesomephant May 20, 2025
fba2002
Fix formatting
awesomephant May 20, 2025
2cf80a4
Roll back msw plugin
awesomephant May 20, 2025
2038d1e
Demo using alternate map style
awesomephant May 20, 2025
07574e0
Extract SWRDataLight style from Map, ship lighter fallback instead
awesomephant May 20, 2025
ef53862
Fix formatting
awesomephant May 20, 2025
55f3d7d
Rename Basic stories to Default
awesomephant May 20, 2025
75e4ae7
Add exports
awesomephant May 20, 2025
b687ad1
Map: Add allowZoom prop
awesomephant May 20, 2025
0d10021
Fix import
awesomephant May 20, 2025
c424c7d
Iterate docs
awesomephant May 20, 2025
f7e40c2
Iterate docs
awesomephant May 20, 2025
062c7e9
LinkToLocationControl: Add urlParameter prop
awesomephant May 20, 2025
cebd782
Iterate docs
awesomephant May 20, 2025
fb64535
Replace LinkToLocationControl with better WithLinkLocation
awesomephant May 20, 2025
0fdceca
Fix documentation
awesomephant May 20, 2025
19bb53f
Iterate docs
awesomephant May 21, 2025
38b91d2
Tweak colours
awesomephant May 21, 2025
627954d
Rename SWRDataLight to SWRDataLabLight
awesomephant May 21, 2025
642f60d
Add custom control demo
awesomephant May 21, 2025
8c58ece
Iterate docs
awesomephant May 21, 2025
3447156
Tweak label typography
awesomephant May 21, 2025
bee5d42
Map: Add projection prop
awesomephant May 21, 2025
c603c19
Fix docs link
awesomephant May 21, 2025
fc40ac3
Clean up Tooltip stories
awesomephant May 21, 2025
83fa28b
Iterate Tooltip stories
awesomephant May 21, 2025
11d3c65
Improve primary-road-link transition
awesomephant May 21, 2025
c75eb9b
Iterate GeoCoderControl
awesomephant May 21, 2025
a95d94c
GeoCoderControl: Add placeholder prop
awesomephant May 21, 2025
845df55
Tweak docs
awesomephant May 21, 2025
e4df50d
Reduce logging
awesomephant May 21, 2025
073d43c
Add missing exports
awesomephant May 21, 2025
ee995c3
Tweak docs formatting
awesomephant May 22, 2025
c22665c
Add usage example
awesomephant May 22, 2025
d63c11f
Fix syntax
awesomephant May 22, 2025
73f139d
Improve secondary roads
awesomephant May 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,12 @@
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
"overrides": [
{
"files": "*.svelte",
"options": {
"parser": "svelte"
}
}
]
}
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ There are three parts to this repository:

## Notes

- Steps 2 - 5 in the proposed workflow above should (?) be automated
- The **[pjax hydration bug](https://github.com/SWRdata/pjax-sveltekit/issues/3)** is solved in `mock-sveltekit` using a [server hook](https://github.com/SWRdata/components/blob/main/mock-sveltekit/src/hooks.server.js), as [suggested here](https://github.com/sveltejs/kit/issues/10411).
- **Style encapsulation** between our news apps and the SWR.de website is implemented using SvelteKit's [Custom Elements API](https://svelte.dev/docs/custom-elements-api) following the pattern [developed here](https://github.com/SWRdata/pjax-sveltekit/issues/1). This doesn't support [declarative shadow DOM](https://web.dev/articles/declarative-shadow-dom), which means our apps will in effect be client-side rendered, but this...
- is an acceptable tradeoff
- may [change in Svelte 5](https://github.com/sveltejs/svelte/pull/10721)
- Steps 2 - 5 in the proposed workflow above should (?) be automated
- The **[pjax hydration bug](https://github.com/SWRdata/pjax-sveltekit/issues/3)** is solved in `mock-sveltekit` using a [server hook](https://github.com/SWRdata/components/blob/main/mock-sveltekit/src/hooks.server.js), as [suggested here](https://github.com/sveltejs/kit/issues/10411).
- **Style encapsulation** between our news apps and the SWR.de website is implemented using SvelteKit's [Custom Elements API](https://svelte.dev/docs/custom-elements-api) following the pattern [developed here](https://github.com/SWRdata/pjax-sveltekit/issues/1). This doesn't support [declarative shadow DOM](https://web.dev/articles/declarative-shadow-dom), which means our apps will in effect be client-side rendered, but this...
- is an acceptable tradeoff
- may [change in Svelte 5](https://github.com/sveltejs/svelte/pull/10721)

## NPM Release Workflow

Expand All @@ -40,15 +40,15 @@ Merges into the main branch are protected and require a pull request review.

[Semantic Release](https://github.com/semantic-release/) automatically:

- analyzes commits and bumps the version (major, minor, or patch).
- publishes the package to the [NPM registry](https://www.npmjs.com/package/@swr-data-lab/components).
- pushes the release to GitHub with a tag reflecting the NPM package version.
- analyzes commits and bumps the version (major, minor, or patch).
- publishes the package to the [NPM registry](https://www.npmjs.com/package/@swr-data-lab/components).
- pushes the release to GitHub with a tag reflecting the NPM package version.

Only merges following [conventional commits](https://www.conventionalcommits.org/) will trigger a new release. Summary:

- PATCH version bump: Commit message "fix: ..."
- MINOR version bump: Commit message "feat: ..."
- MAJOR version bump: Commit message "<type>!: ..." or include "BREAKING CHANGE: ..." in the footer
- PATCH version bump: Commit message "fix: ..."
- MINOR version bump: Commit message "feat: ..."
- MAJOR version bump: Commit message "<type>!: ..." or include "BREAKING CHANGE: ..." in the footer

For further questions, refer to the [Semantic Release Docs (FAQ)](https://semantic-release.gitbook.io/semantic-release/support/faq).

Expand Down
9 changes: 9 additions & 0 deletions components/.storybook/blocks/Mermaid.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import React from 'react';
import { Mermaid as MdxMermaid } from 'mdx-mermaid/Mermaid';

export default function Mermaid({ chart }) {
if (!chart) {
return null;
}
return React.createElement(MdxMermaid, { chart });
}
40 changes: 23 additions & 17 deletions components/.storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,33 @@ import { dirname, join } from 'path';
import type { StorybookConfig } from '@storybook/sveltekit';

function getAbsolutePath(value: string): any {
return dirname(require.resolve(join(value, 'package.json')));
if (process.platform.includes('win')) {
return value;
} else {
return dirname(require.resolve(join(value, 'package.json')));
}
}

const config: StorybookConfig = {
stories: [
'../src/**/*.stories.@(js|ts|svelte)',
'../src/**/*.mdx'
],
stories: ['../src/**/*.stories.@(js|ts|svelte)', '../src/**/*.mdx'],
addons: [
{
name: getAbsolutePath('@storybook/addon-svelte-csf'),
options: {
legacyTemplate: true
}
},
getAbsolutePath('@storybook/addon-links'),
getAbsolutePath('@chromatic-com/storybook'),
getAbsolutePath('@storybook/addon-vitest'),
getAbsolutePath('@storybook/addon-docs')
],
framework: {
name: getAbsolutePath('@storybook/sveltekit'),
options: {}
},

addons: [{
name: getAbsolutePath("@storybook/addon-svelte-csf"),
options: {
legacyTemplate: true
}
}, getAbsolutePath('@storybook/addon-links'), getAbsolutePath('@chromatic-com/storybook'), getAbsolutePath('@storybook/addon-vitest'), getAbsolutePath("@storybook/addon-docs")],
framework: {
name: getAbsolutePath("@storybook/sveltekit"),
options: {}
},

docs: {}
docs: {}
};

export default config;
55 changes: 42 additions & 13 deletions components/.storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,47 @@
import type { Preview } from "@storybook/sveltekit";
import type { Preview } from '@storybook/sveltekit';

const preview: Preview = {
parameters: {
options: {
storySort: { order: ['About', 'Design Tokens', "Typography", ["Headline", "Copy", "Caption"], "Display", "Chart", ["ChartHeader"], "Form", "Deprecated"] },
},
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
tags: ["autodocs"],
parameters: {
options: {
storySort: {
order: [
'About',
'Design Tokens',
'Typography',
['Headline', 'Copy', 'Caption'],
'Display',
'Chart',
['ChartHeader'],
'Maplibre',
[
'Map',
'MapStyle',
'Source',
'Layer',
'Control',
[
'ScaleControl',
'GeoCoderControl',
'AttributionControl',
'NavigationControl',
'MapControl'
],
'Style',
'Tooltip'
],
'Form',
'Deprecated'
]
}
},
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i
}
}
},
tags: ['autodocs']
};

export default preview;
140 changes: 72 additions & 68 deletions components/package.json
Original file line number Diff line number Diff line change
@@ -1,70 +1,74 @@
{
"name": "@swr-data-lab/components",
"description": "SWR Data Lab component library",
"author": "SWR Data Lab",
"publishConfig": {
"access": "restricted"
},
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"storybook": "storybook dev -p 6006",
"start": "storybook dev -p 6006",
"build-storybook": "storybook build --disable-telemetry",
"test-storybook": "vitest run --project=storybook",
"test-storybook:ci": "concurrently -k -s first -n \"Storybook,Test\" -c \"magenta,blue\" \"npm run build-storybook --quiet && npx http-server storybook-static --port 6006 --silent\" \"wait-on tcp:6006 && npm run test-storybook\"",
"semantic-release": "semantic-release"
},
"dependencies": {
"svelte-select": "^5.8.3"
},
"devDependencies": {
"@chromatic-com/storybook": "^4.0.0-next.6",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@semantic-release/npm": "^12.0.1",
"@storybook/addon-docs": "^9.0.0-beta.11",
"@storybook/addon-links": "^9.0.0-beta.11",
"@storybook/addon-svelte-csf": "^5.0.0-next.30",
"@storybook/addon-vitest": "^9.0.0-beta.11",
"@storybook/sveltekit": "^9.0.0-beta.11",
"@storybook/test-runner": "^0.23.0-next.1",
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@vitest/browser": "^3.1.1",
"@vitest/coverage-v8": "^3.1.1",
"concurrently": "^9.0.1",
"http-server": "^14.1.1",
"playwright": "^1.51.1",
"sass-embedded": "^1.78.0",
"semantic-release": "^24.1.2",
"storybook": "^9.0.0-beta.11",
"svelte": "^5.23.0",
"svelte-check": "^4.0.0",
"typescript": "^5.0.0",
"vite": "^6.0.0",
"vitest": "^3.1.1",
"wait-on": "^8.0.1"
},
"type": "module",
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm"
]
},
"exports": {
".": {
"svelte": "./src/index.js"
}
},
"version": "1.0.6",
"overrides": {
"storybook": "$storybook"
}
"name": "@swr-data-lab/components",
"description": "SWR Data Lab component library",
"author": "SWR Data Lab",
"publishConfig": {
"access": "restricted"
},
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"storybook": "storybook dev -p 6006",
"start": "storybook dev -p 6006",
"build-storybook": "storybook build --disable-telemetry",
"test-storybook": "vitest run --project=storybook",
"test-storybook:ci": "concurrently -k -s first -n \"Storybook,Test\" -c \"magenta,blue\" \"npm run build-storybook --quiet && npx http-server storybook-static --port 6006 --silent\" \"wait-on tcp:6006 && npm run test-storybook\"",
"semantic-release": "semantic-release"
},
"dependencies": {
"@maplibre/maplibre-gl-geocoder": "^1.8.0",
"@versatiles/style": "^5.6.0",
"maplibre-gl": "^5.5.0",
"svelte-select": "^5.8.3"
},
"devDependencies": {
"@chromatic-com/storybook": "^4.0.0-next.6",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@semantic-release/npm": "^12.0.1",
"@storybook/addon-docs": "^9.0.0-beta.11",
"@storybook/addon-links": "^9.0.0-beta.11",
"@storybook/addon-svelte-csf": "^5.0.0-next.30",
"@storybook/addon-vitest": "^9.0.0-beta.11",
"@storybook/sveltekit": "^9.0.0-beta.11",
"@storybook/test-runner": "^0.23.0-next.1",
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@vitest/browser": "^3.1.1",
"@vitest/coverage-v8": "^3.1.1",
"concurrently": "^9.0.1",
"http-server": "^14.1.1",
"mdx-mermaid": "^2.0.3",
"playwright": "^1.51.1",
"sass-embedded": "^1.78.0",
"semantic-release": "^24.1.2",
"storybook": "^9.0.0-beta.11",
"svelte": "^5.23.0",
"svelte-check": "^4.0.0",
"typescript": "^5.0.0",
"vite": "^6.0.0",
"vitest": "^3.1.1",
"wait-on": "^8.0.1"
},
"type": "module",
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm"
]
},
"exports": {
".": {
"svelte": "./src/index.js"
}
},
"version": "1.0.6",
"overrides": {
"storybook": "$storybook"
}
}
27 changes: 15 additions & 12 deletions components/src/DesignTokens/Tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ interface ColourMap {
[index: string]: ColourPalette | ColourList;
}
interface ColourPalette {
[index: string]: string
[index: string]: string;
}
interface ColourList {
[index: number]: string
[index: number]: string;
}

const shades: ColourMap = {
Expand Down Expand Up @@ -142,9 +142,13 @@ const shades: ColourMap = {
dark5: '#1D0B40'
},
gray: {
light5: 'hsl(225, 2%, 95%)',
light3: 'hsl(225, 2%, 77%)',
base: 'hsl(227, 2%, 50%)',
dark3: 'hsl(236, 2%, 34%)'
dark2: 'hsl(236, 2%, 38%)',
dark3: 'hsl(236, 2%, 32%)',
dark4: 'hsl(236, 2%, 22%)',
dark5: 'hsl(236, 2%, 5%)'
}
};

Expand All @@ -164,18 +168,17 @@ const scales: ColourMap = {
forest_plum: [...Object.values(shades.forest).reverse(), ...Object.values(shades.plum)]
};


const typography = {
wide: {
sizes: {
"fs-small-3": "0.75rem",
"fs-small-2": "0.875rem",
"fs-small-1": "1rem",
"fs-base": "1.25rem",
"fs-large-1": "1.5rem",
"fs-large-2": "2rem",
"fs-large-3": "2.5rem",
"fs-large-4": "3.5rem"
'fs-small-3': '0.75rem',
'fs-small-2': '0.875rem',
'fs-small-1': '1rem',
'fs-base': '1.25rem',
'fs-large-1': '1.5rem',
'fs-large-2': '2rem',
'fs-large-3': '2.5rem',
'fs-large-4': '3.5rem'
}
}
};
Expand Down
6 changes: 3 additions & 3 deletions components/src/Select/Select.stories.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -136,17 +136,17 @@
expect(canvas.getByTestId('custom-item-title').innerText).toEqual('Journalismus');
expect(canvas.getByTestId('custom-item-addon').innerText).toContain('Redakteur/in');
await userEvent.type(select, '{enter}');
expect(selectedItem.details.title).toEqual('Journalismus');
expect(selectedItem?.details.title).toEqual('Journalismus');
});

await step('Entering an item\'s "title" selects that item', async () => {
await userEvent.type(select, 'Tierpflege{enter}');
expect(selectedItem.details.title).toEqual('Tierpflege');
expect(selectedItem?.details.title).toEqual('Tierpflege');
});

await step('Entering an item\'s "addon" selects that item', async () => {
await userEvent.type(select, 'Zirkuskünstler{enter}');
expect(selectedItem.details.title).toEqual('Schauspiel und Tanz');
expect(selectedItem?.details.title).toEqual('Schauspiel und Tanz');
});
}}
>
Expand Down
Loading