spoko-design-system 1.1.17 → 1.2.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 (59) hide show
  1. package/.github/workflows/code-quality.yml +9 -18
  2. package/.github/workflows/deploy.yml +4 -5
  3. package/.github/workflows/release.yml +7 -19
  4. package/.github/workflows/sonarcloud.yml +7 -19
  5. package/.vscode/settings.json +20 -0
  6. package/CHANGELOG.md +31 -0
  7. package/icon.config.ts +3 -1
  8. package/package.json +16 -16
  9. package/sonar-project.properties +4 -1
  10. package/src/components/Badge.vue +4 -1
  11. package/src/components/Badges.vue +40 -10
  12. package/src/components/Breadcrumbs.vue +41 -12
  13. package/src/components/ButtonCopy.vue +10 -4
  14. package/src/components/Category/CategoryLink.vue +5 -1
  15. package/src/components/Category/CategorySidebarToggler.vue +5 -1
  16. package/src/components/FeaturesList.vue +11 -4
  17. package/src/components/FuckRussia.vue +36 -9
  18. package/src/components/Input.vue +18 -5
  19. package/src/components/MainColors.vue +13 -3
  20. package/src/components/MainInput.vue +2 -3
  21. package/src/components/PartNumber.vue +4 -1
  22. package/src/components/Product/ProductButton.vue +4 -1
  23. package/src/components/Product/ProductDetailName.vue +4 -1
  24. package/src/components/Product/ProductDetails.vue +57 -15
  25. package/src/components/Product/ProductDoc.vue +4 -1
  26. package/src/components/Product/ProductEngineType.vue +4 -1
  27. package/src/components/Product/ProductLink.vue +27 -8
  28. package/src/components/Product/ProductLinkInfo.astro +1 -1
  29. package/src/components/Product/ProductModel.vue +4 -1
  30. package/src/components/Product/ProductModels.vue +10 -2
  31. package/src/components/Product/ProductPositions.vue +5 -1
  32. package/src/components/ProductCodes.vue +9 -2
  33. package/src/components/ProductDetailName.vue +4 -1
  34. package/src/components/ProductDetailsList.vue +46 -15
  35. package/src/components/SlimBanner.vue +9 -7
  36. package/src/components/Table.vue +16 -4
  37. package/src/components/Translations.vue +4 -1
  38. package/src/pages/index.astro +12 -12
  39. package/src/styles/base/base.css +7 -8
  40. package/src/styles/base/typography.css +2 -2
  41. package/src/styles/main.css +0 -1
  42. package/src/types/Product.ts +77 -22
  43. package/src/types/catalog.ts +33 -0
  44. package/src/types/category.ts +54 -0
  45. package/src/types/common.ts +38 -0
  46. package/src/types/index.ts +5 -232
  47. package/src/utils/api/getCategories.ts +0 -4
  48. package/src/utils/product/getProductChecklist.ts +1 -1
  49. package/src/utils/seo/getShorterDescription.ts +1 -1
  50. package/uno-config/theme/index.ts +7 -9
  51. package/uno-config/theme/shortcuts/buttons.ts +1 -1
  52. package/.astro/content-assets.mjs +0 -1
  53. package/.astro/content-modules.mjs +0 -1
  54. package/.astro/content.d.ts +0 -210
  55. package/.astro/data-store.json +0 -1
  56. package/.astro/settings.json +0 -5
  57. package/.astro/types.d.ts +0 -2
  58. package/.claude/settings.local.json +0 -25
  59. /package/{src/components/Jumbotron/styles.css → .nojekyll} +0 -0
@@ -13,30 +13,18 @@ jobs:
13
13
 
14
14
  steps:
15
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'
16
+ uses: actions/checkout@v5
22
17
 
23
18
  - name: Setup pnpm
24
19
  uses: pnpm/action-setup@v4
25
20
  with:
26
- version: '10.16.1'
21
+ version: 10.17.1
27
22
 
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
23
+ - name: Setup Node.js
24
+ uses: actions/setup-node@v5
35
25
  with:
36
- path: ${{ env.STORE_PATH }}
37
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
38
- restore-keys: |
39
- ${{ runner.os }}-pnpm-store-
26
+ node-version: '22'
27
+ cache: 'pnpm'
40
28
 
41
29
  - name: Install dependencies
42
30
  run: pnpm install --frozen-lockfile
@@ -44,5 +32,8 @@ jobs:
44
32
  - name: Check Prettier formatting
45
33
  run: pnpm run format:check
46
34
 
35
+ - name: Run ESLint
36
+ run: pnpm run lint
37
+
47
38
  - name: Type check
48
39
  run: pnpm run check
@@ -4,7 +4,7 @@ on:
4
4
  # Trigger the workflow every time you push to the `main` branch
5
5
  # Using a different branch name? Replace `main` with your branch’s name
6
6
  push:
7
- branches: [ ma ]
7
+ branches: [ main ]
8
8
  # Allows you to run this workflow manually from the Actions tab on GitHub.
9
9
  workflow_dispatch:
10
10
 
@@ -19,14 +19,13 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  steps:
21
21
  - name: Checkout your repository using git
22
- uses: actions/checkout@v4
22
+ uses: actions/checkout@v5
23
23
  - name: Install, build, and upload your site
24
- uses: withastro/action@v3
24
+ uses: withastro/action@v4
25
25
  with:
26
- pnpm@latest
26
+ package-manager: pnpm@10.17.1
27
27
  # path: . # The root location of your Astro project inside the repository. (optional)
28
28
  # node-version: 18 # The specific version of Node that should be used to build your site. Defaults to 18. (optional)
29
- # package-manager: pnpm@latest # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional)
30
29
 
31
30
  deploy:
32
31
  needs: build
@@ -21,34 +21,22 @@ jobs:
21
21
 
22
22
  steps:
23
23
  - name: Checkout
24
- uses: actions/checkout@v4
24
+ uses: actions/checkout@v5
25
25
  with:
26
26
  fetch-depth: 0
27
27
  token: ${{ secrets.GITHUB_TOKEN }}
28
28
 
29
- - name: Setup Node.js
30
- uses: actions/setup-node@v4
31
- with:
32
- node-version: 20
33
- registry-url: 'https://registry.npmjs.org'
34
-
35
29
  - name: Setup pnpm
36
30
  uses: pnpm/action-setup@v4
37
31
  with:
38
- version: 10.16.1
32
+ version: 10.17.1
39
33
 
40
- - name: Get pnpm store directory
41
- shell: bash
42
- run: |
43
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
44
-
45
- - name: Setup pnpm cache
46
- uses: actions/cache@v4
34
+ - name: Setup Node.js
35
+ uses: actions/setup-node@v5
47
36
  with:
48
- path: ${{ env.STORE_PATH }}
49
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
50
- restore-keys: |
51
- ${{ runner.os }}-pnpm-store-
37
+ node-version: 22
38
+ registry-url: 'https://registry.npmjs.org'
39
+ cache: 'pnpm'
52
40
 
53
41
  - name: Install dependencies
54
42
  run: pnpm install --frozen-lockfile
@@ -11,32 +11,20 @@ jobs:
11
11
  name: SonarCloud
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v5
15
15
  with:
16
16
  fetch-depth: 0 # Shallow clones should be disabled for better analysis
17
17
 
18
- - name: Setup Node.js
19
- uses: actions/setup-node@v4
20
- with:
21
- node-version: '22'
22
-
23
18
  - name: Setup pnpm
24
19
  uses: pnpm/action-setup@v4
25
20
  with:
26
- version: '10.16.1'
21
+ version: 10.17.1
27
22
 
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
23
+ - name: Setup Node.js
24
+ uses: actions/setup-node@v5
35
25
  with:
36
- path: ${{ env.STORE_PATH }}
37
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
38
- restore-keys: |
39
- ${{ runner.os }}-pnpm-store-
26
+ node-version: '22'
27
+ cache: 'pnpm'
40
28
 
41
29
  - name: Install dependencies
42
30
  run: pnpm install --frozen-lockfile
@@ -45,7 +33,7 @@ jobs:
45
33
  run: pnpm run build
46
34
 
47
35
  - name: SonarCloud Scan
48
- uses: SonarSource/sonarqube-scan-action@master
36
+ uses: SonarSource/sonarcloud-github-action@master
49
37
  env:
50
38
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
51
39
  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -1,2 +1,22 @@
1
1
  {
2
+ "editor.formatOnSave": true,
3
+ "editor.codeActionsOnSave": {
4
+ "source.fixAll.eslint": "explicit"
5
+ },
6
+ "[vue]": {
7
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
8
+ },
9
+ "[typescript]": {
10
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
11
+ },
12
+ "[javascript]": {
13
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
14
+ },
15
+ "eslint.validate": [
16
+ "javascript",
17
+ "javascriptreact",
18
+ "typescript",
19
+ "typescriptreact",
20
+ "vue"
21
+ ]
2
22
  }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,34 @@
1
+ ## [1.2.1](https://github.com/polo-blue/sds/compare/v1.2.0...v1.2.1) (2025-10-05)
2
+
3
+ ### Bug Fixes
4
+
5
+ * use pnpm/action-setup in all workflows for proper pnpm installation ([e4d8686](https://github.com/polo-blue/sds/commit/e4d868688214097350ac0a0bc9524660f8892013))
6
+
7
+ ## [1.2.0](https://github.com/polo-blue/sds/compare/v1.1.17...v1.2.0) (2025-10-05)
8
+
9
+ ### Features
10
+
11
+ * update icons and improve homepage layout ([d67ebc7](https://github.com/polo-blue/sds/commit/d67ebc7a0d9ab7f715f98893c9c13f3780e3e05b))
12
+
13
+ ### Bug Fixes
14
+
15
+ * apply enhanced pnpm setup to release workflow ([f633630](https://github.com/polo-blue/sds/commit/f633630a504c9babfb26db455d49d806ec0ff208))
16
+ * correct GitHub Actions deploy workflow YAML syntax ([4cd8e12](https://github.com/polo-blue/sds/commit/4cd8e1281a16899ca758f93c8492cce632a29110))
17
+ * disable Jekyll processing for Astro GitHub Pages ([474f08b](https://github.com/polo-blue/sds/commit/474f08b25c0f3364136a54331ff830814fa2a4de))
18
+ * enhance pnpm setup with fallback installation ([6266f19](https://github.com/polo-blue/sds/commit/6266f1966fdd96946012355230dcd37b5889833f))
19
+ * improve pnpm PATH handling in release workflow ([e3c15de](https://github.com/polo-blue/sds/commit/e3c15de7df68df4fd22aa522f7247c1b8f3babaa))
20
+ * improve Vue components formatting and fix key issues ([b971bf2](https://github.com/polo-blue/sds/commit/b971bf2541fcf572a733618ebedfe423d7d02009))
21
+ * refine gitignore to preserve team VS Code settings ([6c98b10](https://github.com/polo-blue/sds/commit/6c98b10f031c2d11ea312bbacb5337a8cb61a61e))
22
+ * resolve pnpm executable error in code-quality workflow ([5a43ab8](https://github.com/polo-blue/sds/commit/5a43ab818412f058ee6fcd5fbc589109fae85301))
23
+ * resolve pnpm issues in deploy and release workflows ([464e29e](https://github.com/polo-blue/sds/commit/464e29ed728109450b70d987aac1e33d7cb4bb5b))
24
+ * resolve SonarCloud pnpm executable error ([8569495](https://github.com/polo-blue/sds/commit/85694952b80e51a480f3b76f91c9301460613bae))
25
+ * revert to enhanced pnpm setup in release workflow ([61d398e](https://github.com/polo-blue/sds/commit/61d398ea1736aee3bf5d734bb2a0119ae8a65ab9))
26
+ * simplify pnpm installation across all workflows ([863c77c](https://github.com/polo-blue/sds/commit/863c77ccc22cb6924385bb22a5de7576bd400dee))
27
+ * support badge objects from API ([d1fffc4](https://github.com/polo-blue/sds/commit/d1fffc4a04fce373ca4518dd22ebd22a11de4e4a))
28
+ * use corepack for pnpm setup in release workflow ([e08a090](https://github.com/polo-blue/sds/commit/e08a090de316ce5040c43b0f328db9a08922fd63))
29
+ * use direct pnpm installation in release workflow ([2e47c51](https://github.com/polo-blue/sds/commit/2e47c51e0f0b9356d92b9bca81aba4c7ad11cd7b))
30
+ * use pnpm/action-setup for proper pnpm installation in release workflow ([3b24b69](https://github.com/polo-blue/sds/commit/3b24b69db681ac2380e93a71f2d7bdcc0d939e2a))
31
+
1
32
  ## [1.1.17](https://github.com/polo-blue/sds/compare/v1.1.16...v1.1.17) (2025-09-23)
2
33
 
3
34
  ## [1.1.16](https://github.com/polo-blue/sds/compare/v1.1.15...v1.1.16) (2025-09-23)
package/icon.config.ts CHANGED
@@ -301,6 +301,7 @@ export const iconConfig: IconConfig = {
301
301
 
302
302
  'vscode-icons': [
303
303
  'file-type-astro',
304
+ 'file-type-light-astro',
304
305
  'file-type-unocss',
305
306
  'file-type-vue',
306
307
  'file-type-typescript',
@@ -317,7 +318,8 @@ export const iconConfig: IconConfig = {
317
318
  'module-building-blocks',
318
319
  'layouts-array-1',
319
320
  'archive-box',
320
- 'donation-charity-donate-box'
321
+ 'donation-charity-donate-box',
322
+ 'coding-files-network-folder'
321
323
  ]
322
324
  },
323
325
  collections: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.1.17",
3
+ "version": "1.2.1",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -74,29 +74,29 @@
74
74
  "@iconify-json/icon-park-outline": "^1.2.4",
75
75
  "@iconify-json/la": "^1.2.1",
76
76
  "@iconify-json/lucide": "^1.2.68",
77
- "@iconify-json/material-symbols-light": "^1.2.37",
77
+ "@iconify-json/material-symbols-light": "^1.2.38",
78
78
  "@iconify-json/mdi": "^1.2.3",
79
79
  "@iconify-json/noto-v1": "^1.2.5",
80
80
  "@iconify-json/octicon": "^1.2.14",
81
81
  "@iconify-json/ph": "^1.2.2",
82
- "@iconify-json/simple-icons": "^1.2.52",
82
+ "@iconify-json/simple-icons": "^1.2.53",
83
83
  "@iconify-json/streamline": "^1.2.5",
84
84
  "@iconify-json/streamline-emojis": "^1.2.4",
85
85
  "@iconify-json/streamline-freehand-color": "^1.2.2",
86
86
  "@iconify-json/system-uicons": "^1.2.4",
87
87
  "@iconify-json/uil": "^1.2.3",
88
- "@iconify-json/vscode-icons": "^1.2.2",
89
- "@iconify/json": "^2.2.386",
88
+ "@iconify-json/vscode-icons": "^1.2.30",
89
+ "@iconify/json": "^2.2.387",
90
90
  "@iconify/vue": "^5.0.0",
91
91
  "@playform/compress": "^0.2.0",
92
92
  "@playform/inline": "^0.1.2",
93
- "@unocss/astro": "66.5.1",
94
- "@unocss/preset-attributify": "66.5.1",
95
- "@unocss/preset-typography": "66.5.1",
96
- "@unocss/preset-uno": "66.5.1",
97
- "@unocss/preset-web-fonts": "66.5.1",
98
- "@unocss/preset-wind": "66.5.1",
99
- "@unocss/reset": "66.5.1",
93
+ "@unocss/astro": "66.5.2",
94
+ "@unocss/preset-attributify": "66.5.2",
95
+ "@unocss/preset-typography": "66.5.2",
96
+ "@unocss/preset-uno": "66.5.2",
97
+ "@unocss/preset-web-fonts": "66.5.2",
98
+ "@unocss/preset-wind": "66.5.2",
99
+ "@unocss/reset": "66.5.2",
100
100
  "@vite-pwa/astro": "^1.1.0",
101
101
  "@vueuse/core": "^13.9.0",
102
102
  "astro-icon": "^1.1.5",
@@ -106,7 +106,7 @@
106
106
  "astro-remote": "^0.3.4",
107
107
  "dotenv": "^17.2.2",
108
108
  "swiper": "^12.0.2",
109
- "unocss": "66.5.1",
109
+ "unocss": "66.5.2",
110
110
  "vue": "^3.5.21"
111
111
  },
112
112
  "devDependencies": {
@@ -116,12 +116,12 @@
116
116
  "@types/node": "^24.5.2",
117
117
  "@typescript-eslint/eslint-plugin": "^8.44.1",
118
118
  "@typescript-eslint/parser": "^8.44.1",
119
- "@unocss/transformer-variant-group": "66.5.1",
119
+ "@unocss/transformer-variant-group": "66.5.2",
120
120
  "@vitejs/plugin-vue": "^6.0.1",
121
121
  "@vue/compiler-sfc": "^3.5.21",
122
122
  "@vue/eslint-config-typescript": "^14.6.0",
123
123
  "astro": "^5.13.10",
124
- "conventional-changelog-conventionalcommits": "^8.0.0",
124
+ "conventional-changelog-conventionalcommits": "^9.1.0",
125
125
  "eslint": "^9.36.0",
126
126
  "eslint-plugin-astro": "^1.3.1",
127
127
  "eslint-plugin-vue": "^10.5.0",
@@ -131,7 +131,7 @@
131
131
  "unocss": "^0.65.0",
132
132
  "vite": "^7.1.7"
133
133
  },
134
- "packageManager": "pnpm@10.16.1",
134
+ "packageManager": "pnpm@10.17.1",
135
135
  "pnpm": {
136
136
  "default": "9.15.3",
137
137
  "overrides": {
@@ -16,4 +16,7 @@ sonar.typescript.lcov.reportPaths=coverage/lcov.info
16
16
  # Additional settings
17
17
  sonar.sourceEncoding=UTF-8
18
18
  sonar.javascript.file.suffixes=.js,.jsx
19
- sonar.typescript.file.suffixes=.ts,.tsx,.vue,.astro
19
+ sonar.typescript.file.suffixes=.ts,.tsx,.vue,.astro
20
+
21
+ # CSS rule exclusions
22
+ sonar.css.S4667.disabled=true
@@ -14,7 +14,10 @@ const props = defineProps({
14
14
  </script>
15
15
 
16
16
  <template>
17
- <div class="badge" :class="props.class">
17
+ <div
18
+ class="badge"
19
+ :class="props.class"
20
+ >
18
21
  {{ props.badge }}
19
22
  </div>
20
23
  </template>
@@ -2,30 +2,60 @@
2
2
  import type { PropType } from 'vue';
3
3
  import Badge from './Badge.vue';
4
4
 
5
+ interface BadgeObject {
6
+ slug: string;
7
+ label: string;
8
+ type?: string;
9
+ color?: string;
10
+ priority?: number;
11
+ }
12
+
5
13
  const props = defineProps({
6
14
  badges: {
7
- type: Array as PropType<string[]>,
15
+ type: Array as PropType<(string | BadgeObject)[]>,
8
16
  required: false,
9
17
  default() {
10
18
  return [];
11
19
  },
12
20
  },
13
21
  });
22
+
23
+ // Helper function to get badge text (support both string and object format)
24
+ const getBadgeText = (badge: string | BadgeObject): string => {
25
+ if (typeof badge === 'string') {
26
+ return badge;
27
+ }
28
+ return badge.label || badge.slug || '';
29
+ };
30
+
31
+ // Helper function to get badge color from API or fallback to legacy logic
32
+ const getBadgeColor = (badge: string | BadgeObject): string => {
33
+ // If badge is an object with color property, use it
34
+ if (typeof badge === 'object' && badge.color) {
35
+ return badge.color;
36
+ }
37
+
38
+ // Otherwise, use legacy logic based on text
39
+ const text = getBadgeText(badge).toLowerCase();
40
+ if (text.includes('gti')) {
41
+ return 'bg-red-600';
42
+ } else if (text.includes('motorsport') || text.includes('wrc')) {
43
+ return 'bg-blue-wrc';
44
+ }
45
+ return 'bg-black';
46
+ };
14
47
  </script>
15
48
 
16
49
  <template>
17
- <div v-if="props.badges && props.badges.length > 0" class="absolute z-2">
50
+ <div
51
+ v-if="props.badges && props.badges.length > 0"
52
+ class="absolute z-2"
53
+ >
18
54
  <Badge
19
55
  v-for="(badge, index) in props.badges"
20
56
  :key="index"
21
- :badge="badge"
22
- :class="
23
- badge.toLocaleLowerCase().includes('gti')
24
- ? 'bg-red-600'
25
- : badge.toLocaleLowerCase().includes('motorsport')
26
- ? 'bg-blue-wrc'
27
- : 'bg-black'
28
- "
57
+ :badge="getBadgeText(badge)"
58
+ :class="getBadgeColor(badge)"
29
59
  />
30
60
  </div>
31
61
  </template>
@@ -39,9 +39,19 @@ const isLast = (index: number) => {
39
39
  <template>
40
40
  <nav>
41
41
  <ul class="breadcrumbs-base">
42
- <li v-if="props.showBack" class="breadcrumb-item">
43
- <button class="breadcrumb-back-btn" :title="props.textBack" onclick="history.back()">
44
- <span class="block px-3" i-bx-bx-arrow-back />
42
+ <li
43
+ v-if="props.showBack"
44
+ class="breadcrumb-item"
45
+ >
46
+ <button
47
+ class="breadcrumb-back-btn"
48
+ :title="props.textBack"
49
+ onclick="history.back()"
50
+ >
51
+ <span
52
+ class="block px-3"
53
+ i-bx-bx-arrow-back
54
+ />
45
55
  </button>
46
56
  </li>
47
57
  </ul>
@@ -50,7 +60,10 @@ const isLast = (index: number) => {
50
60
  itemscope
51
61
  itemtype="https://schema.org/BreadcrumbList"
52
62
  >
53
- <li v-if="props.showHome" class="breadcrumb-item">
63
+ <li
64
+ v-if="props.showHome"
65
+ class="breadcrumb-item"
66
+ >
54
67
  <a
55
68
  href="/"
56
69
  class="breadcrumb-link flex items-center px-3 sm:px-0 py-4.25 sm:py-1 hover:text-brand-secondary whitespace-nowrap translate-y-0 text-sm my-auto"
@@ -58,7 +71,10 @@ const isLast = (index: number) => {
58
71
  itemprop="item"
59
72
  i-carbon-home
60
73
  />
61
- <meta itemprop="position" content="1" />
74
+ <meta
75
+ itemprop="position"
76
+ content="1"
77
+ >
62
78
  </li>
63
79
  <li
64
80
  v-for="(crumb, index) in breadcrumbs"
@@ -68,7 +84,10 @@ const isLast = (index: number) => {
68
84
  itemscope
69
85
  itemtype="https://schema.org/ListItem"
70
86
  >
71
- <span v-if="index > 0 || props.showHome" class="text-gray-400 px-1 py-4.25 sm:py-1">/</span>
87
+ <span
88
+ v-if="index > 0 || props.showHome"
89
+ class="text-gray-400 px-1 py-4.25 sm:py-1"
90
+ >/</span>
72
91
 
73
92
  <a
74
93
  v-if="!isLast(index)"
@@ -77,7 +96,10 @@ const isLast = (index: number) => {
77
96
  itemprop="item"
78
97
  :title="`Polo 6R ${crumb.name}`"
79
98
  >
80
- <strong class="font-normal" itemprop="name">{{ crumb.name }}</strong>
99
+ <strong
100
+ class="font-normal"
101
+ itemprop="name"
102
+ >{{ crumb.name }}</strong>
81
103
  </a>
82
104
  <a
83
105
  v-else
@@ -86,15 +108,22 @@ const isLast = (index: number) => {
86
108
  :title="`Polo 6R ${crumb.name} ${productNumber}`"
87
109
  itemprop="item"
88
110
  >
89
- <span class="font-normal" itemprop="name">
111
+ <span
112
+ class="font-normal"
113
+ itemprop="name"
114
+ >
90
115
  <span v-html="crumb.name" />
91
- <b v-if="productNumber" class="hidden sm:inline font-normal ml-1"
92
- >&nbsp;{{ productNumber }}</b
93
- >
116
+ <b
117
+ v-if="productNumber"
118
+ class="hidden sm:inline font-normal ml-1"
119
+ >&nbsp;{{ productNumber }}</b>
94
120
  </span>
95
121
  </a>
96
122
 
97
- <meta itemprop="position" :content="String(props.showHome ? index + 2 : index + 1)" />
123
+ <meta
124
+ itemprop="position"
125
+ :content="String(props.showHome ? index + 2 : index + 1)"
126
+ >
98
127
  </li>
99
128
  </ul>
100
129
  </nav>
@@ -1,7 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import { useClipboard } from '@vueuse/core';
3
3
  import type { PropType } from 'vue';
4
- // import { Icon } from "@iconify/vue";
5
4
 
6
5
  const props = defineProps({
7
6
  productNumber: {
@@ -15,7 +14,7 @@ const props = defineProps({
15
14
  default: '',
16
15
  },
17
16
  texts: {
18
- type: Object as PropType<{ copy: String; copied: String }>,
17
+ type: Object as PropType<{ copy: string; copied: string }>,
19
18
  required: true,
20
19
  default: () => ({
21
20
  copy: 'copy',
@@ -28,11 +27,18 @@ const { copy, copied } = useClipboard({ source, legacy: true });
28
27
  </script>
29
28
 
30
29
  <template>
31
- <button :aria-label="texts.copy" class="btn-copy has-tooltip" @click="copy()">
30
+ <button
31
+ :aria-label="texts.copy"
32
+ class="btn-copy has-tooltip"
33
+ @click="copy()"
34
+ >
32
35
  <span
33
36
  :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
34
37
  :data-text="!copied ? texts.copy : texts.copied"
35
38
  />
36
- <span i-ph-copy-simple-light class="leading-none w-full h-full" />
39
+ <span
40
+ i-ph-copy-simple-light
41
+ class="leading-none w-full h-full"
42
+ />
37
43
  </button>
38
44
  </template>
@@ -1,5 +1,9 @@
1
1
  <template>
2
- <a :href="href" class="category-link" :class="{ active: active }">
2
+ <a
3
+ :href="href"
4
+ class="category-link"
5
+ :class="{ active: active }"
6
+ >
3
7
  {{ text }}
4
8
  </a>
5
9
  </template>
@@ -1,5 +1,9 @@
1
1
  <template>
2
- <button class="category-toggler md:w-8" type="button" aria-label="toggle menu">
2
+ <button
3
+ class="category-toggler md:w-8"
4
+ type="button"
5
+ aria-label="toggle menu"
6
+ >
3
7
  <slot />
4
8
  </button>
5
9
  </template>
@@ -3,12 +3,12 @@ import { PropType } from 'vue';
3
3
 
4
4
  const props = defineProps({
5
5
  items: {
6
- type: Object as PropType<String[] | null>,
6
+ type: Object as PropType<string[] | null>,
7
7
  default: null,
8
8
  required: true,
9
9
  },
10
10
  caption: {
11
- type: String as PropType<String | null>,
11
+ type: String as PropType<string | null>,
12
12
  default: null,
13
13
  required: false,
14
14
  },
@@ -16,11 +16,18 @@ const props = defineProps({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <h2 v-if="props.caption" class="features-list-caption">
19
+ <h2
20
+ v-if="props.caption"
21
+ class="features-list-caption"
22
+ >
20
23
  {{ props.caption }}
21
24
  </h2>
22
25
  <ul class="features-list-ul">
23
- <li v-for="item in props.items" :key="item" class="features-list-item">
26
+ <li
27
+ v-for="(item, index) in props.items"
28
+ :key="index"
29
+ class="features-list-item"
30
+ >
24
31
  {{ item }}
25
32
  </li>
26
33
  </ul>