@synergy-design-system/mcp 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1 +1,22 @@
1
+ # [@synergy-design-system/mcp-v1.2.0](https://github.com/synergy-design-system/synergy-design-system/compare/mcp/1.1.0...mcp/1.2.0) (2025-08-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * ✨ export new sick2025 themes ([#985](https://github.com/synergy-design-system/synergy-design-system/issues/985)) ([148730d](https://github.com/synergy-design-system/synergy-design-system/commit/148730d68037ea74dc241ca6627aa6a32af876ab))
7
+
1
8
  # Changelog
9
+
10
+ # [@synergy-design-system/mcp-v1.1.0](https://github.com/synergy-design-system/synergy-design-system/compare/mcp/1.0.0...mcp/1.1.0) (2025-08-08)
11
+
12
+
13
+ ### Features
14
+
15
+ * ✨ syn-icon: Provide a function to switch the icon set to brand2025 ([#974](https://github.com/synergy-design-system/synergy-design-system/issues/974)) ([1482e34](https://github.com/synergy-design-system/synergy-design-system/commit/1482e34f21ce80b9ad6f25e760f87de13d5f70db))
16
+
17
+ # @synergy-design-system/mcp-v1.0.0 (2025-08-07)
18
+
19
+
20
+ ### Features
21
+
22
+ * ✨ MCP: Initial release ([#931](https://github.com/synergy-design-system/synergy-design-system/pull/931)) ([5f511ca](https://github.com/synergy-design-system/synergy-design-system/commit/5f511ca4305981f90e589a5f634e58d0e4e834ee))
@@ -22,6 +22,11 @@ const staticFilesToCopy = [
22
22
  getAbsolutePath('../../../../packages/components/BREAKING_CHANGES.md'),
23
23
  componentMigrationPath,
24
24
  ],
25
+ // Copy the v3 migration guide
26
+ [
27
+ getAbsolutePath('../../../../packages/docs/src/static/migration-synergy-v3.md'),
28
+ componentMigrationPath,
29
+ ],
25
30
  ];
26
31
  /**
27
32
  * Sets up all data from the components and framework packages and adds them to the static metadata.
@@ -3,7 +3,7 @@ import { z } from 'zod';
3
3
  import * as availableIconsets from '@synergy-design-system/assets';
4
4
  import { getAssetsMetaData, getStructuredMetaData, } from '../utilities/index.js';
5
5
  const iconsetListAliases = {
6
- brand2018Icons: [
6
+ sick2018Icons: [
7
7
  'current',
8
8
  'default',
9
9
  'legacy',
@@ -12,7 +12,7 @@ const iconsetListAliases = {
12
12
  'brand2018',
13
13
  'sick2018',
14
14
  ],
15
- brand2025Icons: [
15
+ sick2025Icons: [
16
16
  'synergy2025',
17
17
  'new',
18
18
  'next',
@@ -21,6 +21,7 @@ const iconsetListAliases = {
21
21
  'v3',
22
22
  ],
23
23
  };
24
+ const DEFAULT_LIMIT = 5;
24
25
  /**
25
26
  * Simple tool to list all available assets in the Synergy Design System.
26
27
  * This tool fetches the asset data from the Synergy package and formats it for display.
@@ -34,7 +35,7 @@ export const assetInfoTool = (server) => {
34
35
  filter: z
35
36
  .string()
36
37
  .optional()
37
- .describe('A filter to apply to the icon names. If provided, only icons matching this filter will be returned.'),
38
+ .describe('A filter to apply to the icon names. If provided, only icons matching this filter will be returned. Supports multiple filters separated by "|" (e.g., "home|search|menu" to find icons containing any of these terms).'),
38
39
  iconset: z
39
40
  .enum([
40
41
  'current', // Special key, maps to 2018 currently, should map to 2025 in the next major version
@@ -56,9 +57,9 @@ export const assetInfoTool = (server) => {
56
57
  .describe('The name of the icon set to retrieve icons from.'),
57
58
  limit: z
58
59
  .number()
59
- .default(5)
60
+ .default(DEFAULT_LIMIT)
60
61
  .optional()
61
- .describe('The maximum number of icons to return. Defaults to 5.'),
62
+ .describe(`The maximum number of icons to return. Defaults to ${DEFAULT_LIMIT}. When using multiple filters (pipe-separated), this limit applies per filter term.`),
62
63
  },
63
64
  title: 'Available Icons',
64
65
  }, async ({ filter, iconset, limit, }) => {
@@ -66,18 +67,44 @@ export const assetInfoTool = (server) => {
66
67
  const setToUse = iconset
67
68
  ? Object
68
69
  .entries(iconsetListAliases)
69
- .find(([, aliases]) => aliases.includes(iconset))?.[0] || 'brand2018Icons'
70
- : 'brand2018Icons';
70
+ .find(([, aliases]) => aliases.includes(iconset))?.[0] || 'sick2018Icons'
71
+ : 'sick2018Icons';
71
72
  const foundIconSet = typeof availableIconsets[setToUse] !== undefined
72
73
  ? availableIconsets[setToUse]
73
- : availableIconsets.brand2018Icons;
74
+ : availableIconsets.sick2018Icons;
74
75
  // Filter the icons if a filter is provided
75
- const availableIcons = Object
76
- .keys(foundIconSet)
77
- .filter(iconName => iconName.toLowerCase().includes(filter?.toLowerCase() || ''));
78
- // Limit the number of icons returned
79
- const limitedIcons = (limit ?? 5) > 0
80
- ? availableIcons.slice(0, limit ?? 5)
76
+ // Support pipe-separated filters (e.g., "icon1|icon2|icon3") for multiple icon matching
77
+ let availableIcons;
78
+ if (!filter) {
79
+ availableIcons = Object.keys(foundIconSet);
80
+ }
81
+ else {
82
+ const lowerFilter = filter.toLowerCase();
83
+ // Check if filter contains pipe separator for multiple filters
84
+ if (lowerFilter.includes('|')) {
85
+ const filterTerms = lowerFilter.split('|').map(term => term.trim());
86
+ const iconsPerTerm = [];
87
+ // For each filter term, find matching icons and apply limit per term
88
+ filterTerms.forEach(term => {
89
+ const matchingIcons = Object
90
+ .keys(foundIconSet)
91
+ .filter(iconName => iconName.toLowerCase().includes(term))
92
+ .slice(0, limit ?? DEFAULT_LIMIT); // Apply limit per filter term
93
+ iconsPerTerm.push(...matchingIcons);
94
+ });
95
+ // Remove duplicates while preserving order
96
+ availableIcons = [...new Set(iconsPerTerm)];
97
+ }
98
+ else {
99
+ // Original single filter behavior
100
+ availableIcons = Object
101
+ .keys(foundIconSet)
102
+ .filter(iconName => iconName.toLowerCase().includes(lowerFilter));
103
+ }
104
+ }
105
+ // For single filters or no filter, apply the limit normally
106
+ const limitedIcons = (!filter || !filter.includes('|')) && (limit ?? DEFAULT_LIMIT) > 0
107
+ ? availableIcons.slice(0, limit ?? DEFAULT_LIMIT)
81
108
  : availableIcons;
82
109
  const icons = limitedIcons.map(icon => `- ${icon}`).join('\n');
83
110
  const content = [
@@ -85,12 +112,17 @@ export const assetInfoTool = (server) => {
85
112
  text: `Available icons in iconset "${setToUse}":`,
86
113
  type: 'text',
87
114
  },
115
+ {
116
+ text: `Showing ${limitedIcons.length} of ${availableIcons.length} icons`,
117
+ type: 'text',
118
+ },
88
119
  {
89
120
  text: icons,
90
121
  type: 'text',
91
122
  },
92
123
  ];
93
124
  const aiRules = await getStructuredMetaData('../../metadata/static/assets');
125
+ const assetData = await getAssetsMetaData((fileName) => !fileName.toLowerCase().startsWith('changelog'));
94
126
  return {
95
127
  content: [
96
128
  {
@@ -98,7 +130,7 @@ export const assetInfoTool = (server) => {
98
130
  type: 'text',
99
131
  },
100
132
  {
101
- text: JSON.stringify(await getAssetsMetaData(), null, 2),
133
+ text: JSON.stringify(assetData, null, 2),
102
134
  type: 'text',
103
135
  },
104
136
  ...content,
@@ -23,12 +23,12 @@ export const assetListTool = (server) => {
23
23
  },
24
24
  {
25
25
  description: 'The original set of icons from the Synergy Design System. Use this for projects using Synergy Major Version 2.0.',
26
- iconset: 'brand2018Icons',
26
+ iconset: 'sick2018Icons',
27
27
  title: 'Synergy 2018 Icons',
28
28
  },
29
29
  {
30
30
  description: 'New icon set for the brand 2025 refresh. Use this for projects using Synergy Major Version 3.0.',
31
- iconset: 'brand2025Icons',
31
+ iconset: 'sick2025Icons',
32
32
  title: 'Synergy 2025 Icons',
33
33
  },
34
34
  ], null, 2),
@@ -1 +1,2 @@
1
- export declare const getAssetsMetaData: () => Promise<(import("./metadata.js").MetadataFile | null)[]>;
1
+ import { type Filter } from './metadata.js';
2
+ export declare const getAssetsMetaData: (filter?: Filter) => Promise<(import("./metadata.js").MetadataFile | null)[]>;
@@ -1,3 +1,3 @@
1
1
  import { assetsPath, } from './config.js';
2
2
  import { getStructuredMetaData, } from './metadata.js';
3
- export const getAssetsMetaData = async () => getStructuredMetaData(assetsPath);
3
+ export const getAssetsMetaData = async (filter) => getStructuredMetaData(assetsPath, filter);
@@ -1 +1 @@
1
- 48e9a3c531b7ab3b5986ea7e542258f4
1
+ 0eb8e8ab1e1e86521a59e32b35d7e39e
@@ -1,3 +1,10 @@
1
+ # [@synergy-design-system/assets-v1.18.0](https://github.com/synergy-design-system/synergy-design-system/compare/assets/1.17.0...assets/1.18.0) (2025-08-08)
2
+
3
+
4
+ ### Features
5
+
6
+ * ✨ syn-icon: Provide a function to switch the icon set to brand2025 ([#974](https://github.com/synergy-design-system/synergy-design-system/issues/974)) ([1482e34](https://github.com/synergy-design-system/synergy-design-system/commit/1482e34f21ce80b9ad6f25e760f87de13d5f70db))
7
+
1
8
  # [@synergy-design-system/assets-v1.17.0](https://github.com/synergy-design-system/synergy-design-system/compare/assets/1.16.1...assets/1.17.0) (2025-07-14)
2
9
 
3
10
 
@@ -40,9 +40,10 @@ This package is taking care about getting assets (like logos, system icons and d
40
40
  The folder structure of the assets corresponds to the structure of the Figma page.
41
41
 
42
42
  - **src/component-thumbnails** contains thumbnails from figma components used in Storybook
43
- - **src/icons:** contains the standard icons based on [Material Icons](https://fonts.google.com/icons)
43
+ - **src/icons:** contains the standard icons based on [Material Icons](https://fonts.google.com/icons) for SICK 2018 brand revision. Use those icons when using Synergy V2
44
44
  - **src/logos:** contains the variants of the SICK brand logo
45
- - **src/system-icons:** contains a small subset of icons, that are internally used by the Synergy components
45
+ - **src/system-icons:** contains a small subset of icons, that are internally used by the Synergy components. Default for Synergy V2.
46
+ - **src/system-icons-sick2025:** contains a small subset of icons, that are internally used by the Synergy components. Used from Synergy V3 onward.
46
47
 
47
48
  > **Note:** All assets from figma, which should not appear in this package (e.g. documentation), will start with an underscore (e.g. \_my-doc-for-an-asset). This assets are getting filtered and ignored by this package.
48
49
 
@@ -43,6 +43,15 @@ export default css`
43
43
  top: -2px;
44
44
  }
45
45
 
46
+ /**
47
+ * #920: The new icons are instances in figma.
48
+ * The width of the system icon is 12px x 12px, so there is no inner padding.
49
+ * To accommodate for this, we need to set the width and height of the icon to 50% to get the same result as before.
50
+ */
51
+ .radio__checked-icon {
52
+ scale: 0.5;
53
+ }
54
+
46
55
  /* /Fix#456 */
47
56
 
48
57
  /* Size modifiers */
@@ -0,0 +1,144 @@
1
+ # Migration to Synergy 3.0
2
+
3
+ This document outlines the changes and migration steps required to upgrade from Synergy 2.x to the new Synergy 3.0.
4
+
5
+ > Please note that this migration is still in progress, and some features may not be fully implemented yet. We recommend reviewing the [GitHub repository](https://github.com/orgs/synergy-design-system/projects/2/views/37) for the latest updates.
6
+
7
+ ## Roadmap
8
+
9
+ We are currently working on the migration to Synergy 3.0, which includes significant updates to the brand appearance, fonts and icon library.
10
+ This migration will ensure that your application remains up-to-date with the latest design standards and functionality improvements.
11
+
12
+ It is currently not advised to use the new version in production, as we are still finalizing the migration process.
13
+ However, you can start preparing your codebase for the upcoming changes.
14
+
15
+ A roadmap and current status of the migration can be found in our [GitHub repository](https://github.com/orgs/synergy-design-system/projects/2/views/37).
16
+
17
+ ## Breaking Changes
18
+
19
+ ### Icons
20
+
21
+ #### System Icon Library
22
+
23
+ Some Synergy components depend on a set of icons that must always be available. To make sure those components display correctly, even if the `@synergy-design-system/assets` package is not installed or configured properly, these icons are baked into Synergies core directly.
24
+
25
+ Components that use those icons include:
26
+
27
+ - `<syn-header>`: Uses the SICK logo if not told otherwise
28
+ - `<syn-select>`: Shows a caret sign to indicate the possibility to open the select box.
29
+ - `<syn-alert>`: Shows an "x" icon to be able to close the alert dialog.
30
+
31
+ As Synergy transitions to the new SICK brand, the icon library has been updated to include a new iconset.
32
+ For backwards compatibility, Synergy will ship two system icon libraries during the 2.0 support cycle.
33
+ For applications that plan to continue using Synergy 2.0, there **are no changes needed** to the icon library.
34
+ For applications that want to use the new icon library, we have added a new utility function `setSystemIconLibrary`.
35
+ After calling this function, the system icon library will be set to the new iconset.
36
+
37
+ > Make sure to call this function before rendering any components that use the system icon library!
38
+
39
+ ```javascript
40
+ import { setSystemIconLibrary } from "@synergy-design-system/icons";
41
+ setSystemIconLibrary("sick2025");
42
+ ```
43
+
44
+ #### New SICK 2025 icons
45
+
46
+ The new SICK 2025 theme comes with an updated icon library that includes both outline and filled versions of icons. These icons are available in the `@synergy-design-system/assets` package and can be used with the `<syn-icon>` or `<syn-icon-button>` component.
47
+
48
+ The new icon library provides two main styles:
49
+
50
+ - **Outline icons**: These are the standard outlined icons, which are the default
51
+ - **Filled icons**: These are filled versions of the same icons. The icons have the same name as the outline icons but with a suffix of `_fill`
52
+
53
+ To use the new SICK 2025 icons in your application, you have several options:
54
+
55
+ The outline and fill version can be used simultaneously.
56
+
57
+ ```html
58
+ <!-- Outline version -->
59
+ <syn-icon name="home"></syn-icon>
60
+
61
+ <!-- Filled version -->
62
+ <syn-icon name="home_fill"></syn-icon>
63
+ ```
64
+
65
+ ```javascript
66
+ // Example vite config
67
+ import { defineConfig } from "vite";
68
+ import { viteStaticCopy } from "vite-plugin-static-copy";
69
+
70
+ export default defineConfig({
71
+ plugins: [
72
+ viteStaticCopy({
73
+ targets: [
74
+ {
75
+ src: "node_modules/@synergy-design-system/assets/src/sick2025/outline/*",
76
+ dest: "./assets/icons/",
77
+ },
78
+ {
79
+ src: "node_modules/@synergy-design-system/assets/src/sick2025/fill/*",
80
+ dest: "./assets/icons/",
81
+ },
82
+ ],
83
+ }),
84
+ ],
85
+ });
86
+ ```
87
+
88
+ ### Tokens
89
+
90
+ Synergy 3.0 introduces new CSS theme files that implement the updated SICK brand appearance:
91
+
92
+ - **`sick2025_light.css`**: The new light theme featuring the SICK 2025 brand identity
93
+ - **`sick2025_dark.css`**: The new dark theme featuring the SICK 2025 brand identity
94
+
95
+ These new themes include significant visual changes compared to the existing themes e.g. changed colors and new color palettes, components with roundings, new font etc.
96
+
97
+ We added new css class selectors, so it is easy to switch between different themes.
98
+
99
+ - SICK 2018 light theme: `.syn-sick2018-light`
100
+ - SICK 2018 dark theme: `.syn-sick2018-dark`
101
+ - SICK 2025 light theme: `.syn-sick2025-light`
102
+ - SICK 2025 dark theme: `.syn-sick2025-dark`
103
+
104
+ To use the new themes in your application:
105
+
106
+ 1. **Replace theme imports** in your HTML or CSS:
107
+
108
+ ```javascript
109
+ // New Synergy 3.0 themes
110
+ import "@synergy-design-system/tokens/themes/sick2025_light.css";
111
+ import "@synergy-design-system/tokens/themes/sick2025_dark.css";
112
+ ```
113
+
114
+ 2. **Update theme switching logic** if you support runtime theme changes:
115
+
116
+ ```javascript
117
+ // Rename the class names for theme switching
118
+ const switchTheme = () => {
119
+ const { body } = document;
120
+ const currentTheme = body.classList.contains("syn-sick2025-dark")
121
+ ? "dark"
122
+ : "light";
123
+
124
+ if (currentTheme === "light") {
125
+ // Light theme
126
+ body.classList.remove("syn-sick2025-light");
127
+ body.classList.add("syn-sick2025-dark");
128
+ } else {
129
+ // Dark theme
130
+ body.classList.remove("syn-sick2025-dark");
131
+ body.classList.add("syn-sick2025-light");
132
+ }
133
+ };
134
+ ```
135
+
136
+ ## Migration Steps
137
+
138
+ These steps are only needed when switching to the new Synergy 3.0 layout.
139
+
140
+ 1. Always make sure to use the latest versions of the Synergy packages. You can check for updates using your package manager.
141
+ 2. Call `setSystemIconLibrary` with `sick2025` to enable the new system icons.
142
+ 3. Adjust your bundler to copy the new icons to your build output. This is necessary to ensure that the new icons are available in your application.
143
+ 4. **Update CSS theme imports** to use the new `sick2025_light.css` and `sick2025_dark.css` files instead of the legacy theme files.
144
+ 5. **Update theme class names** in your JavaScript theme switching logic to use `syn-sick2025-light` and `syn-sick2025-dark`.
@@ -1,3 +1,10 @@
1
+ # [@synergy-design-system/components-v2.40.0](https://github.com/synergy-design-system/synergy-design-system/compare/components/2.39.2...components/2.40.0) (2025-08-08)
2
+
3
+
4
+ ### Features
5
+
6
+ * ✨ syn-icon: Provide a function to switch the icon set to brand2025 ([#974](https://github.com/synergy-design-system/synergy-design-system/issues/974)) ([1482e34](https://github.com/synergy-design-system/synergy-design-system/commit/1482e34f21ce80b9ad6f25e760f87de13d5f70db))
7
+
1
8
  # [@synergy-design-system/components-v2.39.2](https://github.com/synergy-design-system/synergy-design-system/compare/components/2.39.1...components/2.39.2) (2025-08-05)
2
9
 
3
10
 
@@ -1,3 +1,10 @@
1
+ # [@synergy-design-system/tokens-v2.23.0](https://github.com/synergy-design-system/synergy-design-system/compare/tokens/2.22.0...tokens/2.23.0) (2025-08-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * ✨ export new sick2025 themes ([#985](https://github.com/synergy-design-system/synergy-design-system/issues/985)) ([148730d](https://github.com/synergy-design-system/synergy-design-system/commit/148730d68037ea74dc241ca6627aa6a32af876ab))
7
+
1
8
  # [@synergy-design-system/tokens-v2.22.0](https://github.com/synergy-design-system/synergy-design-system/compare/tokens/2.21.0...tokens/2.22.0) (2025-08-07)
2
9
 
3
10
 
@@ -23,8 +23,8 @@ As projects may use various forms of applying styles, we provide different ways
23
23
 
24
24
  ### Using CSS themes
25
25
 
26
- Provides the css variables that are used in synergy components as css variables and is **required** if you are using `@synergy-design-system/components` or a derived package like `@synergy-design-system/react`.
27
- The tokens package ships with two themes: 🌞 light and 🌛 dark.
26
+ Provides the css variables that are used in synergy components as css variables and is **required** if you are using `@synergy-design-system/components` or one of the framework packages like `@synergy-design-system/react`.
27
+ The tokens package ships two **themes** (sick2018 and sick2025), with each providing two **modes**: 🌞 light and 🌛 dark.
28
28
 
29
29
  > The css styles are used as a single source of truth, also when working with the provided JavaScript or SASS exports!
30
30
  > Always make sure to load one of the css themes!
@@ -34,9 +34,11 @@ The tokens package ships with two themes: 🌞 light and 🌛 dark.
34
34
  <head>
35
35
  <!-- Example 1: Referencing directly in a HTML document -->
36
36
  <!-- Make sure to add the stylesheet before using any components -->
37
+ <!-- Note that "light.css" will point to the default theme of the tokens package. See table below for defaults -->
37
38
  <link rel="stylesheet" href="/node_modules/@synergy-design-system/tokens/dist/themes/light.css" />
38
39
 
39
40
  <!-- Alternative: Use the dark theme -->
41
+ <!-- Note that "dark.css" will point to the default theme of the tokens package. See table below for defaults -->
40
42
  <link rel="stylesheet" href="/node_modules/@synergy-design-system/tokens/dist/themes/dark.css" />
41
43
  </head>
42
44
  <body>
@@ -51,10 +53,12 @@ The tokens package ships with two themes: 🌞 light and 🌛 dark.
51
53
 
52
54
  You are also able to switch themes during the runtime. For the time being, we do not ship a utility function for this, as it is easy to implement. Each theme applies the variables via a `:root` selector, as well as a `className` that may be added to the `document.body`.
53
55
 
54
- | Theme | Stylesheet to use | Body className |
55
- | :---- | :------------------------ | :---------------- |
56
- | light | `tokens/themes/light.css` | `syn-theme-light` |
57
- | dark | `tokens/themes/dark.css` | `syn-theme-dark` |
56
+ | Theme | Mode | Stylesheet to use | Corresponding classNames | Default for Version |
57
+ | :------- | :---- | :--------------------------------- | :-------------------------------------- | :-----------------: |
58
+ | sick2018 | light | `tokens/themes/sick2018_light.css` | `syn-theme-light`, `syn-sick2018-light` | `2.0.0` |
59
+ | sick2018 | dark | `tokens/themes/sick2018_dark.css` | `syn-theme-dark`, `syn-sick2018-dark` | |
60
+ | sick2025 | light | `tokens/themes/sick2025_light.css` | `syn-sick2025-light` | `3.0.0` |
61
+ | sick2025 | dark | `tokens/themes/sick2025_dark.css` | `syn-sick2025-dark` | |
58
62
 
59
63
  To switch the theme, proceed in the following way:
60
64
 
@@ -103,7 +107,12 @@ To switch the theme, proceed in the following way:
103
107
  // Use this way when you already use a build system like webpack or vite
104
108
  // to make it part of your bundle.
105
109
  // Note this import should happen BEFORE you render any components!
110
+
111
+ // Light theme
106
112
  import "@synergy-design-system/tokens/themes/light.css";
113
+
114
+ // Dark theme
115
+ import "@synergy-design-system/tokens/themes/dark.css";
107
116
  ```
108
117
 
109
118
  ---
@@ -200,13 +209,13 @@ Figma
200
209
 
201
210
  Figma REST API
202
211
 
203
- Raw JSON Files (src/figma-variables/)
212
+ Raw JSON Files (src/figma-variables/variableTokens.json + styleTokens.json)
204
213
 
205
214
  Transform Scripts (scripts/figma/)
206
215
 
207
- Style Dictionary compliant JSON Files (src/figma-variables/output)
216
+ Style Dictionary compliant JSON Files (src/figma-variables/output/)
208
217
 
209
- Style Dictionary Processing
218
+ Style Dictionary Processing (scripts/build.js)
210
219
 
211
220
  Build Output (dist/)
212
221
  ```
@@ -233,8 +242,17 @@ pnpm fetch:figma
233
242
  # Only fetch variables and transform into Style Dictionary format
234
243
  pnpm fetch:variables
235
244
 
236
- # Only fetch styles
245
+ # Only fetch styles and transform into Style Dictionary format
237
246
  pnpm fetch:styles
247
+
248
+ # Transform already fetched variables into Style Dictionary format
249
+ pnpm build:variables
250
+
251
+ # Transform already fetched styles into Style Dictionary format
252
+ pnpm build:styles
253
+
254
+ # Process transformed tokens with Style Dictionary (build final output)
255
+ pnpm build
238
256
  ```
239
257
 
240
258
  #### Figma variables
@@ -244,6 +262,8 @@ Currently supported modes are:
244
262
 
245
263
  - **sick2018-light**
246
264
  - **sick2018-dark**
265
+ - **sick2025-light**
266
+ - **sick2025-dark**
247
267
 
248
268
  For each mode a json file is created, with the corresponding tokens and values.
249
269
 
@@ -254,7 +274,7 @@ For the styles a separate `styles.json` is created.
254
274
  #### Output
255
275
 
256
276
  Outputs of the tokens are created using [Style Dictionary](https://amzn.github.io/style-dictionary/).
257
- You can trigger a build using `pnpm build` in the `tokens` package root. This will create the css themes (located in `dist/themes/light.css` and `dist/themes/dark.css`), as well as the JavaScript exports (located at `dist/js/index.js`) and scss variables (`dist/scss/_tokens.scss`).
277
+ You can trigger a build using `pnpm build` in the `tokens` package root. This will create the css themes (located in `dist/themes/` with files like `light.css`, `dark.css`, `sick2018_light.css`, `sick2018_dark.css`, `sick2025_light.css`, and `sick2025_dark.css`), as well as the JavaScript exports (located at `dist/js/index.js`) and scss variables (`dist/scss/_tokens.scss`).
258
278
 
259
279
  ---
260
280
 
@@ -262,17 +282,20 @@ You can trigger a build using `pnpm build` in the `tokens` package root. This wi
262
282
 
263
283
  #### `/src/figma-variables/`
264
284
 
265
- - **`tokens.json`**: Raw data of Figma Variables and Collections, directly fetched from the Figma API
285
+ - **`variableTokens.json`**: Raw data of Figma Variables and Collections, directly fetched from the Figma API
286
+ - **`styleTokens.json`**: Raw data of Figma Styles, directly fetched from the Figma API
266
287
  - **`output/`**: Transformed token files in Style Dictionary-compatible formats
267
- - `sick2018-light.json`: Light Theme Tokens
268
- - `sick2018-dark.json`: Dark Theme Tokens
269
- - `styles.json`: Figma Styles (Typography, Shadows, etc.)
288
+ - `sick2018-light.json`: Light Theme Tokens for SICK 2018
289
+ - `sick2018-dark.json`: Dark Theme Tokens for SICK 2018
290
+ - `sick2025-light.json`: Light Theme Tokens for SICK 2025
291
+ - `sick2025-dark.json`: Dark Theme Tokens for SICK 2025
270
292
 
271
293
  #### `/scripts/figma/`
272
294
 
273
295
  - **`fetch-variables.js`**: Downloads Figma Variables via the REST API
274
- - **`transform-tokens.js`**: Transforms Figma Variables into Style Dictionary format
275
296
  - **`style-dict-outputter.js`**: Custom outputter for Figma Styles export
297
+ - **`transform-tokens.js`**: Transforms Figma Variables into Style Dictionary format
298
+ - **`transform-styles.js`**: Transforms Figma Styles into Style Dictionary format
276
299
  - **`helpers.js`**: Utility functions
277
300
 
278
301
  #### `/scripts/add-missing-tokens.js`
@@ -314,7 +337,7 @@ The workflow is manually triggered using `workflow_dispatch` with configurable i
314
337
 
315
338
  1. **Repository Setup**: Checks out the repository with full history
316
339
  2. **Environment Setup**: Installs pnpm, Node.js 22, and project dependencies
317
- 3. **Token Synchronization**: Runs `pnpm -C ./packages/tokens fetch:figma` to fetch and transform Figma data
340
+ 3. **Token Synchronization**: Runs `pnpm -C ./packages/tokens fetch:figma && pnpm -C ./packages/tokens build:figma` to fetch and transform Figma data
318
341
  4. **Quality Assurance**: Builds and tests the updated tokens to ensure integrity
319
342
  5. **Pull Request Creation**: Creates a new branch and pull request with the changes
320
343
 
@@ -4,7 +4,7 @@
4
4
  * Do not edit directly, this file was auto-generated.
5
5
  */
6
6
 
7
- :root, .syn-theme-dark {
7
+ :root, .syn-sick2018-dark, .syn-theme-dark {
8
8
  color-scheme: dark;
9
9
 
10
10
  --syn-border-radius-circle: 9999px;
@@ -242,10 +242,10 @@
242
242
  --syn-shadow-medium: 0px 1px 2px 0px rgba(49, 55, 58, 0.08), 0px 1px 4px 0px rgba(49, 55, 58, 0.08), 0px 2px 8px 0px rgba(49, 55, 58, 0.08);
243
243
  --syn-shadow-large: 0px 0px 3px 0px rgba(49, 55, 58, 0.12), 0px 2px 6px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.16);
244
244
  --syn-shadow-x-large: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 8px 24px 0px rgba(49, 55, 58, 0.12), 0px 16px 48px 0px rgba(49, 55, 58, 0.16);
245
- --syn-shadow-overflow-down: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.12), 0px 4px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Down */
246
- --syn-shadow-overflow-up: 0px -1px 4px 0px rgba(49, 55, 58, 0.12), 0px -3px 8px 0px rgba(49, 55, 58, 0.12), 0px -4px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Up */
247
- --syn-shadow-overflow-left: -1px 0px 4px 0px rgba(49, 55, 58, 0.12), -3px 0px 8px 0px rgba(49, 55, 58, 0.12), -4px 0px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Left */
248
- --syn-shadow-overflow-right: 1px 0px 4px 0px rgba(49, 55, 58, 0.12), 3px 0px 8px 0px rgba(49, 55, 58, 0.12), 4px 0px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Right */
245
+ --syn-shadow-overflow-down: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.12), 0px 4px 12px 0px rgba(49, 55, 58, 0.16);
246
+ --syn-shadow-overflow-up: 0px -1px 4px 0px rgba(49, 55, 58, 0.12), 0px -3px 8px 0px rgba(49, 55, 58, 0.12), 0px -4px 12px 0px rgba(49, 55, 58, 0.16);
247
+ --syn-shadow-overflow-left: -1px 0px 4px 0px rgba(49, 55, 58, 0.12), -3px 0px 8px 0px rgba(49, 55, 58, 0.12), -4px 0px 12px 0px rgba(49, 55, 58, 0.16);
248
+ --syn-shadow-overflow-right: 1px 0px 4px 0px rgba(49, 55, 58, 0.12), 3px 0px 8px 0px rgba(49, 55, 58, 0.12), 4px 0px 12px 0px rgba(49, 55, 58, 0.16);
249
249
  --syn-shadow-x-small: 0px 1px 2px 0px rgba(49, 55, 58, 0.04), 0px 1px 4px 0px rgba(49, 55, 58, 0.04), 0px 2px 8px 0px rgba(49, 55, 58, 0.04);
250
250
  --syn-shadow-small: 0px 1px 2px 0px rgba(49, 55, 58, 0.06), 0px 1px 4px 0px rgba(49, 55, 58, 0.06), 0px 2px 8px 0px rgba(49, 55, 58, 0.06);
251
251
  --syn-body-x-small-regular: 400 12px/1.4 'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
@@ -4,7 +4,7 @@
4
4
  * Do not edit directly, this file was auto-generated.
5
5
  */
6
6
 
7
- :root, .syn-theme-light {
7
+ :root, .syn-sick2018-light, .syn-theme-light {
8
8
  color-scheme: light;
9
9
 
10
10
  --syn-border-radius-circle: 9999px;
@@ -242,10 +242,10 @@
242
242
  --syn-shadow-medium: 0px 1px 2px 0px rgba(49, 55, 58, 0.08), 0px 1px 4px 0px rgba(49, 55, 58, 0.08), 0px 2px 8px 0px rgba(49, 55, 58, 0.08);
243
243
  --syn-shadow-large: 0px 0px 3px 0px rgba(49, 55, 58, 0.12), 0px 2px 6px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.16);
244
244
  --syn-shadow-x-large: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 8px 24px 0px rgba(49, 55, 58, 0.12), 0px 16px 48px 0px rgba(49, 55, 58, 0.16);
245
- --syn-shadow-overflow-down: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.12), 0px 4px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Down */
246
- --syn-shadow-overflow-up: 0px -1px 4px 0px rgba(49, 55, 58, 0.12), 0px -3px 8px 0px rgba(49, 55, 58, 0.12), 0px -4px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Up */
247
- --syn-shadow-overflow-left: -1px 0px 4px 0px rgba(49, 55, 58, 0.12), -3px 0px 8px 0px rgba(49, 55, 58, 0.12), -4px 0px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Left */
248
- --syn-shadow-overflow-right: 1px 0px 4px 0px rgba(49, 55, 58, 0.12), 3px 0px 8px 0px rgba(49, 55, 58, 0.12), 4px 0px 12px 0px rgba(49, 55, 58, 0.16); /** Overflow Right */
245
+ --syn-shadow-overflow-down: 0px 1px 4px 0px rgba(49, 55, 58, 0.12), 0px 3px 8px 0px rgba(49, 55, 58, 0.12), 0px 4px 12px 0px rgba(49, 55, 58, 0.16);
246
+ --syn-shadow-overflow-up: 0px -1px 4px 0px rgba(49, 55, 58, 0.12), 0px -3px 8px 0px rgba(49, 55, 58, 0.12), 0px -4px 12px 0px rgba(49, 55, 58, 0.16);
247
+ --syn-shadow-overflow-left: -1px 0px 4px 0px rgba(49, 55, 58, 0.12), -3px 0px 8px 0px rgba(49, 55, 58, 0.12), -4px 0px 12px 0px rgba(49, 55, 58, 0.16);
248
+ --syn-shadow-overflow-right: 1px 0px 4px 0px rgba(49, 55, 58, 0.12), 3px 0px 8px 0px rgba(49, 55, 58, 0.12), 4px 0px 12px 0px rgba(49, 55, 58, 0.16);
249
249
  --syn-shadow-x-small: 0px 1px 2px 0px rgba(49, 55, 58, 0.04), 0px 1px 4px 0px rgba(49, 55, 58, 0.04), 0px 2px 8px 0px rgba(49, 55, 58, 0.04);
250
250
  --syn-shadow-small: 0px 1px 2px 0px rgba(49, 55, 58, 0.06), 0px 1px 4px 0px rgba(49, 55, 58, 0.06), 0px 2px 8px 0px rgba(49, 55, 58, 0.06);
251
251
  --syn-body-x-small-regular: 400 12px/1.4 'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';