spoko-design-system 1.24.0 → 1.24.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.24.2](https://github.com/polo-blue/sds/compare/v1.24.1...v1.24.2) (2026-01-13)
2
+
3
+ ### Bug Fixes
4
+
5
+ * improve TypeScript types for Breadcrumbs and Jumbotron ([d671a1a](https://github.com/polo-blue/sds/commit/d671a1ab1851f7e0eb138863a7a9dd05be9bea8e))
6
+
7
+ ## [1.24.1](https://github.com/polo-blue/sds/compare/v1.24.0...v1.24.1) (2025-12-22)
8
+
9
+ ### Bug Fixes
10
+
11
+ * **uno-config:** add circle-flags to safelist and Vue :class extractor ([672086a](https://github.com/polo-blue/sds/commit/672086a55b021eaa1ef30807068f7e1f645d39f2))
12
+
1
13
  ## [1.24.0](https://github.com/polo-blue/sds/compare/v1.23.2...v1.24.0) (2025-12-16)
2
14
 
3
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.24.0",
3
+ "version": "1.24.2",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "main": "./index.ts",
@@ -54,18 +54,18 @@
54
54
  "spoko design system"
55
55
  ],
56
56
  "dependencies": {
57
- "@algolia/client-search": "^5.46.0",
57
+ "@algolia/client-search": "^5.46.2",
58
58
  "@astrojs/mdx": "^4.3.13",
59
59
  "@astrojs/node": "^9.5.1",
60
- "@astrojs/sitemap": "^3.6.0",
60
+ "@astrojs/sitemap": "^3.6.1",
61
61
  "@astrojs/ts-plugin": "^1.10.6",
62
- "@astrojs/vue": "^5.1.3",
63
- "@docsearch/css": "^4.3.2",
62
+ "@astrojs/vue": "^5.1.4",
63
+ "@docsearch/css": "^4.4.0",
64
64
  "@floating-ui/vue": "^1.1.9",
65
65
  "@iconify-json/ant-design": "^1.2.5",
66
66
  "@iconify-json/bi": "^1.2.7",
67
67
  "@iconify-json/bx": "^1.2.2",
68
- "@iconify-json/carbon": "^1.2.15",
68
+ "@iconify-json/carbon": "^1.2.16",
69
69
  "@iconify-json/circle-flags": "^1.2.10",
70
70
  "@iconify-json/ei": "^1.2.2",
71
71
  "@iconify-json/el": "^1.2.2",
@@ -77,30 +77,30 @@
77
77
  "@iconify-json/ic": "^1.2.4",
78
78
  "@iconify-json/icon-park-outline": "^1.2.4",
79
79
  "@iconify-json/la": "^1.2.1",
80
- "@iconify-json/lucide": "^1.2.81",
81
- "@iconify-json/material-symbols-light": "^1.2.50",
80
+ "@iconify-json/lucide": "^1.2.84",
81
+ "@iconify-json/material-symbols-light": "^1.2.51",
82
82
  "@iconify-json/mdi": "^1.2.3",
83
83
  "@iconify-json/noto-v1": "^1.2.5",
84
84
  "@iconify-json/octicon": "^1.2.19",
85
85
  "@iconify-json/ph": "^1.2.2",
86
- "@iconify-json/simple-icons": "^1.2.63",
86
+ "@iconify-json/simple-icons": "^1.2.66",
87
87
  "@iconify-json/streamline": "^1.2.5",
88
88
  "@iconify-json/streamline-emojis": "^1.2.4",
89
89
  "@iconify-json/streamline-freehand-color": "^1.2.2",
90
90
  "@iconify-json/system-uicons": "^1.2.4",
91
91
  "@iconify-json/uil": "^1.2.3",
92
- "@iconify-json/vscode-icons": "^1.2.37",
93
- "@iconify/json": "^2.2.418",
92
+ "@iconify-json/vscode-icons": "^1.2.38",
93
+ "@iconify/json": "^2.2.427",
94
94
  "@iconify/vue": "^5.0.0",
95
- "@playform/compress": "^0.2.0",
95
+ "@playform/compress": "^0.2.1",
96
96
  "@playform/inline": "^0.1.2",
97
- "@unocss/astro": "66.5.10",
98
- "@unocss/preset-attributify": "66.5.10",
99
- "@unocss/preset-typography": "66.5.10",
100
- "@unocss/preset-uno": "66.5.10",
101
- "@unocss/preset-web-fonts": "66.5.10",
102
- "@unocss/preset-wind": "66.5.10",
103
- "@unocss/reset": "66.5.10",
97
+ "@unocss/astro": "66.5.12",
98
+ "@unocss/preset-attributify": "66.5.12",
99
+ "@unocss/preset-typography": "66.5.12",
100
+ "@unocss/preset-uno": "66.5.12",
101
+ "@unocss/preset-web-fonts": "66.5.12",
102
+ "@unocss/preset-wind": "66.5.12",
103
+ "@unocss/reset": "66.5.12",
104
104
  "@vite-pwa/astro": "^1.2.0",
105
105
  "@vueuse/core": "^14.1.0",
106
106
  "astro-icon": "^1.1.5",
@@ -111,34 +111,35 @@
111
111
  "dotenv": "^17.2.3",
112
112
  "swiper": "^12.0.3",
113
113
  "tippy.js": "^6.3.7",
114
- "unocss": "66.5.10",
114
+ "unocss": "66.5.12",
115
115
  "vite-plugin-pwa": "^1.2.0",
116
- "vue": "^3.5.25"
116
+ "vue": "^3.5.26"
117
117
  },
118
118
  "devDependencies": {
119
- "@commitlint/cli": "^20.2.0",
120
- "@commitlint/config-conventional": "^20.2.0",
119
+ "@commitlint/cli": "^20.3.1",
120
+ "@commitlint/config-conventional": "^20.3.1",
121
121
  "@semantic-release/changelog": "^6.0.3",
122
122
  "@semantic-release/git": "^10.0.1",
123
123
  "@types/gtag.js": "^0.0.20",
124
- "@types/node": "^25.0.2",
125
- "@typescript-eslint/eslint-plugin": "^8.49.0",
126
- "@typescript-eslint/parser": "^8.49.0",
127
- "@unocss/transformer-variant-group": "66.5.10",
124
+ "@types/node": "^25.0.7",
125
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
126
+ "@typescript-eslint/parser": "^8.53.0",
127
+ "@unocss/transformer-variant-group": "66.5.12",
128
128
  "@vitejs/plugin-vue": "^6.0.3",
129
- "@vue/compiler-sfc": "^3.5.25",
129
+ "@vue/compiler-sfc": "^3.5.26",
130
130
  "@vue/eslint-config-typescript": "^14.6.0",
131
- "astro": "^5.16.5",
131
+ "astro": "^5.16.9",
132
132
  "conventional-changelog-conventionalcommits": "^9.1.0",
133
133
  "eslint": "^9.39.2",
134
134
  "eslint-plugin-astro": "^1.5.0",
135
135
  "eslint-plugin-vue": "^10.6.2",
136
136
  "husky": "^9.1.7",
137
+ "jscpd": "^4.0.7",
137
138
  "prettier": "^3.7.4",
138
139
  "prettier-plugin-astro": "^0.14.1",
139
140
  "semantic-release": "^25.0.2",
140
141
  "unocss": "^0.65.0",
141
- "vite": "^7.3.0"
142
+ "vite": "^7.3.1"
142
143
  },
143
144
  "packageManager": "pnpm@10.17.1",
144
145
  "pnpm": {
@@ -1,40 +1,27 @@
1
1
  <script setup lang="ts">
2
+ import { computed } from 'vue';
3
+
2
4
  export interface Breadcrumb {
3
5
  name: string;
4
6
  path: string;
5
7
  }
6
8
 
7
- import type { PropType } from 'vue';
8
- import { computed } from 'vue';
9
+ interface Props {
10
+ showBack?: boolean;
11
+ textBack?: string;
12
+ showHome?: boolean;
13
+ breadcrumbs: Breadcrumb[];
14
+ productNumber?: string;
15
+ withMicrodata?: boolean;
16
+ class?: string;
17
+ }
9
18
 
10
- const props = defineProps({
11
- showBack: {
12
- type: Boolean,
13
- required: false,
14
- },
15
- textBack: {
16
- type: String,
17
- required: false,
18
- default: 'Back',
19
- },
20
- showHome: {
21
- type: Boolean,
22
- required: false,
23
- },
24
- breadcrumbs: {
25
- type: Array as PropType<Breadcrumb[]>,
26
- required: true,
27
- },
28
- productNumber: {
29
- type: String,
30
- required: false,
31
- default: null,
32
- },
33
- withMicrodata: {
34
- type: Boolean,
35
- required: false,
36
- default: true,
37
- },
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ showBack: false,
21
+ textBack: 'Back',
22
+ showHome: false,
23
+ productNumber: undefined,
24
+ withMicrodata: true,
38
25
  });
39
26
 
40
27
  const isLast = (index: number) => {
@@ -14,8 +14,13 @@ export interface Props {
14
14
  variant?: 'default' | 'hero' | 'post' | 'post-split';
15
15
  title?: string;
16
16
  image?: string;
17
+ imageWidth?: number;
18
+ imageHeight?: number;
19
+ imageClass?: string;
17
20
  backgroundClass?: string;
18
21
  slim?: boolean;
22
+ lang?: string;
23
+ class?: string;
19
24
 
20
25
  // Default & Hero variant props
21
26
  description?: string;
@@ -27,5 +32,7 @@ export interface Props {
27
32
  categories?: Category[];
28
33
 
29
34
  // Post Split variant props
35
+ fullWidth?: boolean;
36
+ align?: 'left' | 'center' | 'right';
30
37
  split?: 'equal' | 'wide';
31
38
  }
@@ -162,8 +162,15 @@ export function createSdsConfig(customConfig: CustomConfig = {}) {
162
162
  'i-simple-icons-youtube',
163
163
  'i-simple-icons-vimeo',
164
164
 
165
+ // Language flags for Translations component (dynamic Vue classes)
166
+ 'i-circle-flags:en',
167
+ 'i-circle-flags:pl',
168
+
165
169
  // All peer selectors from the list (needed for floating labels)
166
170
  ...peerSelectorClasses,
171
+
172
+ // Custom safelist from consumer config
173
+ ...(customConfig.safelist || []),
167
174
  ],
168
175
  // Optimized extractors for static Astro builds
169
176
  extractors: [
@@ -197,6 +204,31 @@ export function createSdsConfig(customConfig: CustomConfig = {}) {
197
204
  }
198
205
  }
199
206
 
207
+ // For .vue files, extract from :class bindings (dynamic classes)
208
+ if (id && id.endsWith('.vue')) {
209
+ // Match :class="[...]" or :class="{...}" or :class="'...'"
210
+ const vueClassRegex = /:class=["'`]([^"'`]+)["'`]/g;
211
+ while ((match = vueClassRegex.exec(code)) !== null) {
212
+ // Extract class names from ternary expressions and string literals
213
+ const classContent = match[1];
214
+ // Match quoted strings inside the expression (e.g., 'i-circle-flags:en')
215
+ const quotedStrings = classContent.match(/['"]([^'"]+)['"]/g);
216
+ if (quotedStrings) {
217
+ quotedStrings.forEach(quoted => {
218
+ const cls = quoted.replace(/['"]/g, '').trim();
219
+ if (cls && !cls.includes('?') && !cls.includes(':') || cls.startsWith('i-')) {
220
+ // Split by spaces in case multiple classes
221
+ cls.split(/\s+/).forEach(c => {
222
+ if (c && c.length > 1) {
223
+ result.add(c);
224
+ }
225
+ });
226
+ }
227
+ });
228
+ }
229
+ }
230
+ }
231
+
200
232
  return result;
201
233
  },
202
234
  },