spoko-design-system 1.0.0 → 1.1.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.
Files changed (38) hide show
  1. package/.astro/data-store.json +1 -1
  2. package/.astro/settings.json +1 -1
  3. package/.claude/settings.local.json +11 -1
  4. package/.github/workflows/code-quality.yml +51 -0
  5. package/.github/workflows/sonarcloud.yml +51 -0
  6. package/.prettierignore +15 -0
  7. package/.prettierrc +25 -0
  8. package/.vscode/extensions.json +0 -1
  9. package/.vscode/settings.json +0 -4
  10. package/CHANGELOG.md +14 -0
  11. package/README.md +19 -3
  12. package/astro.config.mjs +0 -2
  13. package/eslint.config.js +64 -0
  14. package/icon.config.ts +32 -2
  15. package/package.json +14 -9
  16. package/sonar-project.properties +19 -0
  17. package/src/components/Category/CategoriesCarousel.astro +2 -3
  18. package/src/components/Category/CategoryDetails.astro +4 -5
  19. package/src/components/Faq.astro +1 -2
  20. package/src/components/Header/Header.astro +33 -33
  21. package/src/components/Headline.vue +24 -4
  22. package/src/components/Product/ProductLink.astro +7 -12
  23. package/src/components/ProductTile.astro +1 -2
  24. package/src/layouts/Layout.astro +0 -3
  25. package/src/layouts/MainLayout.astro +0 -3
  26. package/src/pages/components/buttons.mdx +0 -1
  27. package/src/pages/components/hand-drive.mdx +0 -27
  28. package/src/pages/index.astro +170 -39
  29. package/src/utils/category/getMainCategoryList.ts +8 -17
  30. package/src/utils/product/getPriceFormatted.ts +6 -9
  31. package/src/utils/product/getProductChecklist.ts +1 -2
  32. package/src/utils/text/formatLocaleNumber.ts +2 -3
  33. package/uno-config/index.ts +13 -19
  34. package/.astro/icon.d.ts +0 -11909
  35. package/astro-i18next.config.mjs +0 -18
  36. package/astro-i18next.config.ts +0 -11
  37. package/public/locales/en/translation.json +0 -13
  38. package/public/locales/pl/translation.json +0 -13
@@ -1 +1 @@
1
- [["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.13.2","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://sds.spoko.space/\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":1234,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[\"placehold.co\",\"api.polo.blue\",\"polo.blue\",\"media.istockphoto.com\",\"freepik.com\",\"img.freepik.com\",\"polo6r.pl\"],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false},\"legacy\":{\"collections\":false}}"]
1
+ [["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.13.10","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://sds.spoko.space/\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":1234,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[\"placehold.co\",\"api.polo.blue\",\"polo.blue\",\"media.istockphoto.com\",\"freepik.com\",\"img.freepik.com\",\"polo6r.pl\"],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false},\"legacy\":{\"collections\":false}}"]
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "_variables": {
3
- "lastUpdateCheck": 1757938917015
3
+ "lastUpdateCheck": 1758628311891
4
4
  }
5
5
  }
@@ -5,7 +5,17 @@
5
5
  "Bash(npm run dev:*)",
6
6
  "Bash(tasklist)",
7
7
  "Bash(findstr:*)",
8
- "Bash(git add:*)"
8
+ "Bash(git add:*)",
9
+ "Bash(npm install:*)",
10
+ "Bash(pnpm add:*)",
11
+ "Bash(pnpm i:*)",
12
+ "Bash(pnpm install:*)",
13
+ "Bash(pnpm dev:*)",
14
+ "Bash(node:*)",
15
+ "WebFetch(domain:polo.blue)",
16
+ "Bash(git commit:*)",
17
+ "Bash(git push:*)",
18
+ "Bash(pnpm run:*)"
9
19
  ],
10
20
  "deny": [],
11
21
  "ask": []
@@ -0,0 +1,51 @@
1
+ name: Code Quality
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ lint-and-format:
11
+ name: Lint and Format Check
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v4
17
+
18
+ - name: Setup Node.js
19
+ uses: actions/setup-node@v4
20
+ with:
21
+ node-version: '22'
22
+
23
+ - name: Setup pnpm
24
+ uses: pnpm/action-setup@v4
25
+ with:
26
+ version: '10.16.1'
27
+
28
+ - name: Get pnpm store directory
29
+ shell: bash
30
+ run: |
31
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
32
+
33
+ - name: Setup pnpm cache
34
+ uses: actions/cache@v4
35
+ with:
36
+ path: ${{ env.STORE_PATH }}
37
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
38
+ restore-keys: |
39
+ ${{ runner.os }}-pnpm-store-
40
+
41
+ - name: Install dependencies
42
+ run: pnpm install --frozen-lockfile
43
+
44
+ - name: Check Prettier formatting
45
+ run: pnpm exec prettier --check "src/**/*.{js,ts,jsx,tsx,vue,astro,json,css,md}"
46
+
47
+ - name: Run ESLint
48
+ run: pnpm exec eslint "src/**/*.{js,ts,jsx,tsx,vue,astro}"
49
+
50
+ - name: Type check
51
+ run: pnpm exec astro check
@@ -0,0 +1,51 @@
1
+ name: SonarCloud Analysis
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ sonarcloud:
11
+ name: SonarCloud
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ with:
16
+ fetch-depth: 0 # Shallow clones should be disabled for better analysis
17
+
18
+ - name: Setup Node.js
19
+ uses: actions/setup-node@v4
20
+ with:
21
+ node-version: '22'
22
+
23
+ - name: Setup pnpm
24
+ uses: pnpm/action-setup@v4
25
+ with:
26
+ version: '10.16.1'
27
+
28
+ - name: Get pnpm store directory
29
+ shell: bash
30
+ run: |
31
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
32
+
33
+ - name: Setup pnpm cache
34
+ uses: actions/cache@v4
35
+ with:
36
+ path: ${{ env.STORE_PATH }}
37
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
38
+ restore-keys: |
39
+ ${{ runner.os }}-pnpm-store-
40
+
41
+ - name: Install dependencies
42
+ run: pnpm install --frozen-lockfile
43
+
44
+ - name: Build project
45
+ run: pnpm run build
46
+
47
+ - name: SonarCloud Scan
48
+ uses: SonarSource/sonarcloud-github-action@master
49
+ env:
50
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
51
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -0,0 +1,15 @@
1
+ node_modules/
2
+ dist/
3
+ .astro/
4
+ pnpm-lock.yaml
5
+ *.md
6
+ *.svg
7
+ *.png
8
+ *.jpg
9
+ *.jpeg
10
+ *.gif
11
+ *.ico
12
+ *.woff
13
+ *.woff2
14
+ *.ttf
15
+ *.eot
package/.prettierrc ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "semi": true,
3
+ "singleQuote": true,
4
+ "tabWidth": 2,
5
+ "trailingComma": "es5",
6
+ "printWidth": 100,
7
+ "useTabs": false,
8
+ "bracketSpacing": true,
9
+ "arrowParens": "avoid",
10
+ "endOfLine": "lf",
11
+ "overrides": [
12
+ {
13
+ "files": "*.astro",
14
+ "options": {
15
+ "parser": "astro"
16
+ }
17
+ },
18
+ {
19
+ "files": "*.vue",
20
+ "options": {
21
+ "parser": "vue"
22
+ }
23
+ }
24
+ ]
25
+ }
@@ -1,5 +1,4 @@
1
1
  {
2
2
  "recommendations": ["astro-build.astro-vscode"],
3
3
  "unwantedRecommendations": [],
4
- "lokalise.i18n-ally"
5
4
  }
@@ -1,6 +1,2 @@
1
1
  {
2
- "i18n-ally.sourceLanguage": "en",
3
- "i18n-ally.keystyle": "nested",
4
- "i18n-ally.localesPaths": "public/locales",
5
- "i18n-ally.sortKeys": true,
6
2
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.1.0](https://github.com/polo-blue/sds/compare/v1.0.1...v1.1.0) (2025-09-23)
2
+
3
+ ### Features
4
+
5
+ * add SonarCloud and ESLint/Prettier code quality workflows ([349ad03](https://github.com/polo-blue/sds/commit/349ad034e4ca90c73d77927dfe8e6b66bde3fd37))
6
+
7
+ ## [1.0.1](https://github.com/polo-blue/sds/compare/v1.0.0...v1.0.1) (2025-09-23)
8
+
9
+ ### Bug Fixes
10
+
11
+ * improve design system and add icon collections documentation ([007c465](https://github.com/polo-blue/sds/commit/007c46522f48bad8d0a04fbe811066edf6c3c78f))
12
+ * remove invalid vscode-icons to resolve build errors ([ab1fea5](https://github.com/polo-blue/sds/commit/ab1fea51182b35159953ae0005bb8c226fe14e9d))
13
+ * update icons and improve UnoCSS extractor ([aca7861](https://github.com/polo-blue/sds/commit/aca786103a56f5a180a15d6db044068bab596f62))
14
+
1
15
  ## 1.0.0 (2025-09-23)
2
16
 
3
17
  ### Features
package/README.md CHANGED
@@ -39,15 +39,14 @@ Most of the components from this repository can be seen in my projects:
39
39
  - https://polo6r.pl
40
40
 
41
41
 
42
- ### Feateures
42
+ ### Features
43
43
  - ⚡️[Vue 3](https://github.com/vuejs/core), [Vite](https://github.com/vitejs/vite), [pnpm](https://pnpm.io/) - born with fastness
44
44
  - 🎨 [UnoCSS](https://github.com/antfu/unocss) - the instant on-demand atomic CSS engine
45
45
  - 😃 [astro-icon](https://github.com/natemoo-re/astro-icon) - for local icons, sprites and `@iconify-json/*` sets
46
46
  - 🍔 [astro-navbar](https://github.com/surjithctly/astro-navbar) - fully responsive and accessible headless navigation bar
47
- - 🌍 [astro-i18next](https://github.com/yassinedoghri/astro-i18next) - Astro integration of i18next
48
47
  - 🔎 [astro-pagefind](https://github.com/shishkin/astro-pagefind) - Astro integration for Pagefind static site search
49
48
  - 🗒 [astrojs/mdx](https://github.com/withastro/astro/tree/main/packages/integrations/mdx/) - markdown support
50
- - 📦 [astro-compress](https://github.com/astro-community/AstroCompress) - compression utilities to your Astro project
49
+ - 📦 [Playform compression](https://github.com/Playform/compress) - compression utilities to your Astro project
51
50
  - 📲 [PWA](https://github.com/vite-pwa/astro) - Zero-config PWA Integration for Astro
52
51
  - 🏷️ [astro-meta-tags](https://github.com/patrick91/astro-meta-tags) - Meta Tags inside for Astro Dev Toolbar
53
52
  - 🖨 Static-site generation (SSG)
@@ -55,6 +54,23 @@ Most of the components from this repository can be seen in my projects:
55
54
  - 🌠 [View Transitions API](https://docs.astro.build/en/guides/view-transitions/#full-site-view-transitions-spa-mode) - [View Transition API](https://developer.mozilla.org/en-US/docs/Web/API/Document/startViewTransition) - makes it easy to change the DOM in a single step, while creating an animated transition between the two states. It's available in Chrome 111+ ([more details](https://developer.chrome.com/docs/web-platform/view-transitions?hl=en))
56
55
  - ☁️ Deploy on Netlify
57
56
 
57
+ ### Icon Collections
58
+
59
+ The design system includes carefully curated icon collections from Iconify:
60
+
61
+ - 🎨 [Material Design Icons](https://icon-sets.iconify.design/mdi/) - comprehensive icon set for UI elements
62
+ - 🚗 [Ant Design Icons](https://icon-sets.iconify.design/ant-design/) - clean outlined icons
63
+ - 📱 [Bootstrap Icons](https://icon-sets.iconify.design/bi/) - simple and consistent icons
64
+ - 🎯 [Boxicons](https://icon-sets.iconify.design/bx/) - high quality web icons
65
+ - 🌍 [Carbon Icons](https://icon-sets.iconify.design/carbon/) - IBM's design language icons
66
+ - 🎪 [Lucide Icons](https://icon-sets.iconify.design/lucide/) - beautiful & consistent icon toolkit
67
+ - 🎨 [Streamline Freehand Color](https://icon-sets.iconify.design/streamline-freehand-color/) - hand-drawn style colored icons
68
+ - 📟 [VS Code Icons](https://icon-sets.iconify.design/vscode-icons/) - file type and technology icons
69
+ - 🏢 [Simple Icons](https://icon-sets.iconify.design/simple-icons/) - brand icons for popular services
70
+ - ⚡ [Fluent UI Icons](https://icon-sets.iconify.design/fluent/) - Microsoft's design system icons
71
+
72
+ See the complete list and configuration in [`icon.config.ts`](./icon.config.ts).
73
+
58
74
  ### Adding new sections
59
75
 
60
76
  Although it's not required, you can create folders for new sections.
package/astro.config.mjs CHANGED
@@ -3,7 +3,6 @@ import { iconConfig } from './icon.config';
3
3
  import vue from "@astrojs/vue";
4
4
  import mdx from '@astrojs/mdx';
5
5
  import UnoCSS from '@unocss/astro';
6
- import astroI18next from "astro-i18next";
7
6
  import icon from "astro-icon";
8
7
  import sitemap from "@astrojs/sitemap";
9
8
  import pagefind from "astro-pagefind";
@@ -28,7 +27,6 @@ export default defineConfig({
28
27
  // Enable Vue to support Vue3 components
29
28
  vue(),
30
29
  mdx(),
31
- astroI18next(),
32
30
  AstroPWA({
33
31
  mode: 'production',
34
32
  base: '/',
@@ -0,0 +1,64 @@
1
+ import js from '@eslint/js';
2
+ import typescript from '@typescript-eslint/eslint-plugin';
3
+ import typescriptParser from '@typescript-eslint/parser';
4
+ import vue from 'eslint-plugin-vue';
5
+ import astro from 'eslint-plugin-astro';
6
+
7
+ export default [
8
+ js.configs.recommended,
9
+
10
+ // TypeScript files
11
+ {
12
+ files: ['**/*.ts', '**/*.tsx'],
13
+ languageOptions: {
14
+ parser: typescriptParser,
15
+ parserOptions: {
16
+ ecmaVersion: 'latest',
17
+ sourceType: 'module',
18
+ },
19
+ },
20
+ plugins: {
21
+ '@typescript-eslint': typescript,
22
+ },
23
+ rules: {
24
+ ...typescript.configs.recommended.rules,
25
+ '@typescript-eslint/no-unused-vars': 'warn',
26
+ '@typescript-eslint/no-explicit-any': 'warn',
27
+ },
28
+ },
29
+
30
+ // Vue files
31
+ {
32
+ files: ['**/*.vue'],
33
+ languageOptions: {
34
+ parser: vue.parser,
35
+ parserOptions: {
36
+ parser: typescriptParser,
37
+ ecmaVersion: 'latest',
38
+ sourceType: 'module',
39
+ },
40
+ },
41
+ plugins: {
42
+ vue,
43
+ },
44
+ rules: {
45
+ ...vue.configs.recommended.rules,
46
+ 'vue/multi-word-component-names': 'off',
47
+ 'vue/no-unused-vars': 'warn',
48
+ },
49
+ },
50
+
51
+ // Astro files
52
+ ...astro.configs.recommended,
53
+
54
+ // Global ignores
55
+ {
56
+ ignores: [
57
+ 'dist/**',
58
+ 'node_modules/**',
59
+ '.astro/**',
60
+ 'pnpm-lock.yaml',
61
+ '**/*.d.ts',
62
+ ],
63
+ },
64
+ ];
package/icon.config.ts CHANGED
@@ -3,10 +3,13 @@
3
3
  interface IconConfig {
4
4
  include: {
5
5
  [key: string]: string[];
6
- }
6
+ };
7
+ collections?: {
8
+ [key: string]: () => Promise<any>;
9
+ };
7
10
  }
8
11
 
9
- // Lista wszystkich wspieranych kolekcji
12
+ // List of all supported collections
10
13
  export const iconCollections = [
11
14
  'ant-design',
12
15
  'bi',
@@ -32,6 +35,8 @@ export const iconCollections = [
32
35
  'system-uicons',
33
36
  'uil',
34
37
  'lucide',
38
+ 'vscode-icons',
39
+ 'streamline-freehand-color',
35
40
  ] as const;
36
41
 
37
42
  export type IconCollectionName = typeof iconCollections[number];
@@ -230,6 +235,7 @@ export const iconConfig: IconConfig = {
230
235
  ],
231
236
 
232
237
  "simple-icons": [
238
+ "astro",
233
239
  "ebay",
234
240
  "allegro",
235
241
  "volkswagen",
@@ -291,7 +297,31 @@ export const iconConfig: IconConfig = {
291
297
 
292
298
  'system-uicons': [
293
299
  'document-justified'
300
+ ],
301
+
302
+ 'vscode-icons': [
303
+ 'file-type-astro',
304
+ 'file-type-unocss',
305
+ 'file-type-vue',
306
+ 'file-type-typescript',
307
+ 'file-type-node',
308
+ 'file-type-npm'
309
+ ],
310
+
311
+ 'streamline-freehand-color': [
312
+ 'data-transfer-document-module',
313
+ 'design-process-drawing-board',
314
+ 'app-window-source-code',
315
+ 'app-window-layout',
316
+ 'database',
317
+ 'module-building-blocks',
318
+ 'layouts-array-1',
319
+ 'archive-box',
320
+ 'donation-charity-donate-box'
294
321
  ]
322
+ },
323
+ collections: {
324
+ "streamline-freehand-color": () => import("@iconify-json/streamline-freehand-color/icons.json")
295
325
  }
296
326
  };
297
327
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -75,8 +75,12 @@
75
75
  "@iconify-json/octicon": "^1.2.14",
76
76
  "@iconify-json/ph": "^1.2.2",
77
77
  "@iconify-json/simple-icons": "^1.2.52",
78
+ "@iconify-json/streamline": "^1.2.5",
79
+ "@iconify-json/streamline-emojis": "^1.2.4",
80
+ "@iconify-json/streamline-freehand-color": "^1.2.2",
78
81
  "@iconify-json/system-uicons": "^1.2.4",
79
82
  "@iconify-json/uil": "^1.2.3",
83
+ "@iconify-json/vscode-icons": "^1.2.2",
80
84
  "@iconify/json": "^2.2.386",
81
85
  "@iconify/vue": "^5.0.0",
82
86
  "@playform/compress": "^0.2.0",
@@ -90,18 +94,12 @@
90
94
  "@unocss/reset": "66.5.1",
91
95
  "@vite-pwa/astro": "^1.1.0",
92
96
  "@vueuse/core": "^13.9.0",
93
- "astro-i18next": "1.0.0-beta.21",
94
97
  "astro-icon": "^1.1.5",
95
98
  "astro-meta-tags": "^0.4.0",
96
99
  "astro-navbar": "^2.4.0",
97
100
  "astro-pagefind": "^1.8.5",
98
101
  "astro-remote": "^0.3.4",
99
102
  "dotenv": "^17.2.2",
100
- "i18next": "^25.5.2",
101
- "i18next-browser-languagedetector": "^8.2.0",
102
- "i18next-fs-backend": "^2.6.0",
103
- "i18next-http-backend": "^3.0.2",
104
- "i18next-vue": "^5.3.0",
105
103
  "swiper": "^12.0.2",
106
104
  "unocss": "66.5.1",
107
105
  "vue": "^3.5.21"
@@ -111,11 +109,18 @@
111
109
  "@semantic-release/git": "^10.0.1",
112
110
  "@types/gtag.js": "^0.0.20",
113
111
  "@types/node": "^24.5.2",
112
+ "@typescript-eslint/eslint-plugin": "^8.44.1",
113
+ "@typescript-eslint/parser": "^8.44.1",
114
114
  "@unocss/transformer-variant-group": "66.5.1",
115
115
  "@vitejs/plugin-vue": "^6.0.1",
116
116
  "@vue/compiler-sfc": "^3.5.21",
117
+ "@vue/eslint-config-typescript": "^14.6.0",
117
118
  "astro": "^5.13.10",
118
119
  "conventional-changelog-conventionalcommits": "^8.0.0",
120
+ "eslint": "^9.36.0",
121
+ "eslint-plugin-astro": "^1.3.1",
122
+ "eslint-plugin-vue": "^10.5.0",
123
+ "prettier": "^3.6.2",
119
124
  "semantic-release": "^24.2.9",
120
125
  "unocss": "^0.65.0",
121
126
  "vite": "^7.1.7"
@@ -133,7 +138,7 @@
133
138
  ]
134
139
  },
135
140
  "engines": {
136
- "node": ">=18.14.1",
137
- "pnpm": ">=9.15.3"
141
+ "node": ">=22.17.0",
142
+ "pnpm": ">=10.16.1"
138
143
  }
139
144
  }
@@ -0,0 +1,19 @@
1
+ sonar.projectKey=polo-blue_sds
2
+ sonar.organization=polo-blue
3
+
4
+ # This is the name and version displayed in the SonarCloud UI.
5
+ sonar.projectName=Spoko Design System
6
+ sonar.projectVersion=1.0.0
7
+
8
+ # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
9
+ sonar.sources=src,uno-config,icon.config.ts,astro.config.mjs
10
+ sonar.exclusions=**/node_modules/**,**/dist/**,**/*.spec.ts,**/*.test.ts,**/coverage/**,**/.astro/**
11
+
12
+ # Language
13
+ sonar.javascript.lcov.reportPaths=coverage/lcov.info
14
+ sonar.typescript.lcov.reportPaths=coverage/lcov.info
15
+
16
+ # Additional settings
17
+ sonar.sourceEncoding=UTF-8
18
+ sonar.javascript.file.suffixes=.js,.jsx
19
+ sonar.typescript.file.suffixes=.ts,.tsx,.vue,.astro
@@ -5,7 +5,6 @@ import { getTranslatedLink } from "@utils/text/getTranslatedLink"
5
5
  import { getMainCategoryList } from "@utils/category/getMainCategoryList"
6
6
  import { Image } from 'astro:assets'
7
7
 
8
- import i18next, { t } from "i18next";
9
8
  const categories = await getMainCategoryList()
10
9
  const imgDomain = 'https://api.polo.blue/img/';
11
10
 
@@ -50,7 +49,7 @@ const activeIndex = activeCategorySlug && categories ? categories.map(a => a.slu
50
49
 
51
50
  <Image
52
51
  src={`${imgDomain}${category.photo}`}
53
- alt={t(`cat.${category.slug}.desc`).split('. ', 1)[0]}
52
+ alt={category.name}
54
53
  height="70"
55
54
  width="70"
56
55
  format="avif"
@@ -63,7 +62,7 @@ const activeIndex = activeCategorySlug && categories ? categories.map(a => a.slu
63
62
  <div class="cat-name"
64
63
  // itemprop="name"
65
64
  >
66
- { t(`cat.${category.slug}.name`) }
65
+ { category.name }
67
66
  </div>
68
67
  </a>
69
68
  </swiper-slide>
@@ -2,7 +2,6 @@
2
2
  import CategorySidebarToggler from './CategorySidebarToggler.vue';
3
3
  import CategoryViewToggler from './CategoryViewToggler.astro';
4
4
  import { Icon } from 'astro-icon/components';
5
- import { t } from "i18next";
6
5
 
7
6
  const {
8
7
  category,
@@ -15,7 +14,7 @@ const {
15
14
  viewerLabels
16
15
  } = Astro.props;
17
16
 
18
- const baseURL = locale === 'en' ? '' : `/${locale}`;
17
+ const baseURL = '';
19
18
  ---
20
19
 
21
20
  <div
@@ -58,7 +57,7 @@ const baseURL = locale === 'en' ? '' : `/${locale}`;
58
57
  <span class="text-neutral-lighter text-lg inline-block px-1 font-headlight">/</span>
59
58
  {!subsubtitle ? (
60
59
  <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
61
- {subtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
60
+ {subtitle} <span class="sr-only"> catalog</span>
62
61
  </h1>
63
62
  ) : (
64
63
  <>
@@ -69,7 +68,7 @@ const baseURL = locale === 'en' ? '' : `/${locale}`;
69
68
  </div>
70
69
  <span class="text-neutral-lighter text-lg inline-block px-1 font-headlight">/</span>
71
70
  <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
72
- {subsubtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
71
+ {subsubtitle} <span class="sr-only"> catalog</span>
73
72
  </h1>
74
73
  </>
75
74
  )}
@@ -78,7 +77,7 @@ const baseURL = locale === 'en' ? '' : `/${locale}`;
78
77
  <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap">
79
78
  {category.name}
80
79
  {titleSmall && <small>{titleSmall}</small>}
81
- <span class="sr-only"> {t('catalog.extra-short')}</span>
80
+ <span class="sr-only"> catalog</span>
82
81
  </h1>
83
82
  )}
84
83
  </div>
@@ -6,7 +6,6 @@
6
6
 
7
7
  */
8
8
 
9
- import {t } from "i18next"
10
9
  import FaqItem from "../components/FaqItem.astro"
11
10
 
12
11
  interface Props {
@@ -22,7 +21,7 @@ const { questions } = Astro.props
22
21
 
23
22
  <div class="flex flex-col mt-6 mb-4 w-full px-4 md:px-0" itemscope itemtype="https://schema.org/FAQPage" >
24
23
  <div class="mb-6 text-4xl font-headbold sm:text-4xl text-blue-802 faq-heading">
25
- {t('faq.title')}
24
+ Frequently Asked Questions
26
25
  </div>
27
26
  <div class="flex flex-col divide-y dark:divide-gray-700">
28
27
  {