spoko-design-system 1.1.17 → 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/.github/workflows/code-quality.yml +10 -6
- package/.github/workflows/deploy.yml +4 -5
- package/.github/workflows/release.yml +7 -19
- package/.github/workflows/sonarcloud.yml +8 -7
- package/.vscode/settings.json +20 -0
- package/CHANGELOG.md +25 -0
- package/icon.config.ts +3 -1
- package/package.json +16 -16
- package/sonar-project.properties +4 -1
- package/src/components/Badge.vue +4 -1
- package/src/components/Badges.vue +40 -10
- package/src/components/Breadcrumbs.vue +41 -12
- package/src/components/ButtonCopy.vue +10 -4
- package/src/components/Category/CategoryLink.vue +5 -1
- package/src/components/Category/CategorySidebarToggler.vue +5 -1
- package/src/components/FeaturesList.vue +11 -4
- package/src/components/FuckRussia.vue +36 -9
- package/src/components/Input.vue +18 -5
- package/src/components/MainColors.vue +13 -3
- package/src/components/MainInput.vue +2 -3
- package/src/components/PartNumber.vue +4 -1
- package/src/components/Product/ProductButton.vue +4 -1
- package/src/components/Product/ProductDetailName.vue +4 -1
- package/src/components/Product/ProductDetails.vue +57 -15
- package/src/components/Product/ProductDoc.vue +4 -1
- package/src/components/Product/ProductEngineType.vue +4 -1
- package/src/components/Product/ProductLink.vue +27 -8
- package/src/components/Product/ProductLinkInfo.astro +1 -1
- package/src/components/Product/ProductModel.vue +4 -1
- package/src/components/Product/ProductModels.vue +10 -2
- package/src/components/Product/ProductPositions.vue +5 -1
- package/src/components/ProductCodes.vue +9 -2
- package/src/components/ProductDetailName.vue +4 -1
- package/src/components/ProductDetailsList.vue +46 -15
- package/src/components/SlimBanner.vue +9 -7
- package/src/components/Table.vue +16 -4
- package/src/components/Translations.vue +4 -1
- package/src/pages/index.astro +12 -12
- package/src/styles/base/base.css +7 -8
- package/src/styles/base/typography.css +2 -2
- package/src/styles/main.css +0 -1
- package/src/types/Product.ts +77 -22
- package/src/types/catalog.ts +33 -0
- package/src/types/category.ts +54 -0
- package/src/types/common.ts +38 -0
- package/src/types/index.ts +5 -232
- package/src/utils/api/getCategories.ts +0 -4
- package/src/utils/product/getProductChecklist.ts +1 -1
- package/src/utils/seo/getShorterDescription.ts +1 -1
- package/uno-config/theme/index.ts +7 -9
- package/uno-config/theme/shortcuts/buttons.ts +1 -1
- package/.astro/content-assets.mjs +0 -1
- package/.astro/content-modules.mjs +0 -1
- package/.astro/content.d.ts +0 -210
- package/.astro/data-store.json +0 -1
- package/.astro/settings.json +0 -5
- package/.astro/types.d.ts +0 -2
- package/.claude/settings.local.json +0 -25
- /package/{src/components/Jumbotron/styles.css → .nojekyll} +0 -0
|
@@ -13,17 +13,18 @@ jobs:
|
|
|
13
13
|
|
|
14
14
|
steps:
|
|
15
15
|
- name: Checkout code
|
|
16
|
-
uses: actions/checkout@
|
|
16
|
+
uses: actions/checkout@v5
|
|
17
17
|
|
|
18
18
|
- name: Setup Node.js
|
|
19
|
-
uses: actions/setup-node@
|
|
19
|
+
uses: actions/setup-node@v5
|
|
20
20
|
with:
|
|
21
21
|
node-version: '22'
|
|
22
22
|
|
|
23
|
-
- name:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
- name: Install pnpm
|
|
24
|
+
run: npm install -g pnpm@10.17.1
|
|
25
|
+
|
|
26
|
+
- name: Verify pnpm
|
|
27
|
+
run: pnpm --version
|
|
27
28
|
|
|
28
29
|
- name: Get pnpm store directory
|
|
29
30
|
shell: bash
|
|
@@ -44,5 +45,8 @@ jobs:
|
|
|
44
45
|
- name: Check Prettier formatting
|
|
45
46
|
run: pnpm run format:check
|
|
46
47
|
|
|
48
|
+
- name: Run ESLint
|
|
49
|
+
run: pnpm run lint
|
|
50
|
+
|
|
47
51
|
- name: Type check
|
|
48
52
|
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: [
|
|
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@
|
|
22
|
+
uses: actions/checkout@v5
|
|
23
23
|
- name: Install, build, and upload your site
|
|
24
|
-
uses: withastro/action@
|
|
24
|
+
uses: withastro/action@v4
|
|
25
25
|
with:
|
|
26
|
-
|
|
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@
|
|
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.
|
|
32
|
+
version: 10.17.1
|
|
39
33
|
|
|
40
|
-
- name:
|
|
41
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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,19 +11,20 @@ jobs:
|
|
|
11
11
|
name: SonarCloud
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
14
|
+
- uses: actions/checkout@v5
|
|
15
15
|
with:
|
|
16
16
|
fetch-depth: 0 # Shallow clones should be disabled for better analysis
|
|
17
17
|
|
|
18
18
|
- name: Setup Node.js
|
|
19
|
-
uses: actions/setup-node@
|
|
19
|
+
uses: actions/setup-node@v5
|
|
20
20
|
with:
|
|
21
21
|
node-version: '22'
|
|
22
22
|
|
|
23
|
-
- name:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
- name: Install pnpm
|
|
24
|
+
run: npm install -g pnpm@10.17.1
|
|
25
|
+
|
|
26
|
+
- name: Verify pnpm
|
|
27
|
+
run: pnpm --version
|
|
27
28
|
|
|
28
29
|
- name: Get pnpm store directory
|
|
29
30
|
shell: bash
|
|
@@ -45,7 +46,7 @@ jobs:
|
|
|
45
46
|
run: pnpm run build
|
|
46
47
|
|
|
47
48
|
- name: SonarCloud Scan
|
|
48
|
-
uses: SonarSource/
|
|
49
|
+
uses: SonarSource/sonarcloud-github-action@master
|
|
49
50
|
env:
|
|
50
51
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
|
|
51
52
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
package/.vscode/settings.json
CHANGED
|
@@ -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,28 @@
|
|
|
1
|
+
## [1.2.0](https://github.com/polo-blue/sds/compare/v1.1.17...v1.2.0) (2025-10-05)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* update icons and improve homepage layout ([d67ebc7](https://github.com/polo-blue/sds/commit/d67ebc7a0d9ab7f715f98893c9c13f3780e3e05b))
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* apply enhanced pnpm setup to release workflow ([f633630](https://github.com/polo-blue/sds/commit/f633630a504c9babfb26db455d49d806ec0ff208))
|
|
10
|
+
* correct GitHub Actions deploy workflow YAML syntax ([4cd8e12](https://github.com/polo-blue/sds/commit/4cd8e1281a16899ca758f93c8492cce632a29110))
|
|
11
|
+
* disable Jekyll processing for Astro GitHub Pages ([474f08b](https://github.com/polo-blue/sds/commit/474f08b25c0f3364136a54331ff830814fa2a4de))
|
|
12
|
+
* enhance pnpm setup with fallback installation ([6266f19](https://github.com/polo-blue/sds/commit/6266f1966fdd96946012355230dcd37b5889833f))
|
|
13
|
+
* improve pnpm PATH handling in release workflow ([e3c15de](https://github.com/polo-blue/sds/commit/e3c15de7df68df4fd22aa522f7247c1b8f3babaa))
|
|
14
|
+
* improve Vue components formatting and fix key issues ([b971bf2](https://github.com/polo-blue/sds/commit/b971bf2541fcf572a733618ebedfe423d7d02009))
|
|
15
|
+
* refine gitignore to preserve team VS Code settings ([6c98b10](https://github.com/polo-blue/sds/commit/6c98b10f031c2d11ea312bbacb5337a8cb61a61e))
|
|
16
|
+
* resolve pnpm executable error in code-quality workflow ([5a43ab8](https://github.com/polo-blue/sds/commit/5a43ab818412f058ee6fcd5fbc589109fae85301))
|
|
17
|
+
* resolve pnpm issues in deploy and release workflows ([464e29e](https://github.com/polo-blue/sds/commit/464e29ed728109450b70d987aac1e33d7cb4bb5b))
|
|
18
|
+
* resolve SonarCloud pnpm executable error ([8569495](https://github.com/polo-blue/sds/commit/85694952b80e51a480f3b76f91c9301460613bae))
|
|
19
|
+
* revert to enhanced pnpm setup in release workflow ([61d398e](https://github.com/polo-blue/sds/commit/61d398ea1736aee3bf5d734bb2a0119ae8a65ab9))
|
|
20
|
+
* simplify pnpm installation across all workflows ([863c77c](https://github.com/polo-blue/sds/commit/863c77ccc22cb6924385bb22a5de7576bd400dee))
|
|
21
|
+
* support badge objects from API ([d1fffc4](https://github.com/polo-blue/sds/commit/d1fffc4a04fce373ca4518dd22ebd22a11de4e4a))
|
|
22
|
+
* use corepack for pnpm setup in release workflow ([e08a090](https://github.com/polo-blue/sds/commit/e08a090de316ce5040c43b0f328db9a08922fd63))
|
|
23
|
+
* use direct pnpm installation in release workflow ([2e47c51](https://github.com/polo-blue/sds/commit/2e47c51e0f0b9356d92b9bca81aba4c7ad11cd7b))
|
|
24
|
+
* use pnpm/action-setup for proper pnpm installation in release workflow ([3b24b69](https://github.com/polo-blue/sds/commit/3b24b69db681ac2380e93a71f2d7bdcc0d939e2a))
|
|
25
|
+
|
|
1
26
|
## [1.1.17](https://github.com/polo-blue/sds/compare/v1.1.16...v1.1.17) (2025-09-23)
|
|
2
27
|
|
|
3
28
|
## [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.
|
|
3
|
+
"version": "1.2.0",
|
|
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.
|
|
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.
|
|
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.
|
|
89
|
-
"@iconify/json": "^2.2.
|
|
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.
|
|
94
|
-
"@unocss/preset-attributify": "66.5.
|
|
95
|
-
"@unocss/preset-typography": "66.5.
|
|
96
|
-
"@unocss/preset-uno": "66.5.
|
|
97
|
-
"@unocss/preset-web-fonts": "66.5.
|
|
98
|
-
"@unocss/preset-wind": "66.5.
|
|
99
|
-
"@unocss/reset": "66.5.
|
|
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.
|
|
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.
|
|
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": "^
|
|
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.
|
|
134
|
+
"packageManager": "pnpm@10.17.1",
|
|
135
135
|
"pnpm": {
|
|
136
136
|
"default": "9.15.3",
|
|
137
137
|
"overrides": {
|
package/sonar-project.properties
CHANGED
|
@@ -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
|
package/src/components/Badge.vue
CHANGED
|
@@ -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
|
|
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
|
|
43
|
-
|
|
44
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
111
|
+
<span
|
|
112
|
+
class="font-normal"
|
|
113
|
+
itemprop="name"
|
|
114
|
+
>
|
|
90
115
|
<span v-html="crumb.name" />
|
|
91
|
-
<b
|
|
92
|
-
|
|
93
|
-
|
|
116
|
+
<b
|
|
117
|
+
v-if="productNumber"
|
|
118
|
+
class="hidden sm:inline font-normal ml-1"
|
|
119
|
+
> {{ productNumber }}</b>
|
|
94
120
|
</span>
|
|
95
121
|
</a>
|
|
96
122
|
|
|
97
|
-
<meta
|
|
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:
|
|
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
|
|
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
|
|
39
|
+
<span
|
|
40
|
+
i-ph-copy-simple-light
|
|
41
|
+
class="leading-none w-full h-full"
|
|
42
|
+
/>
|
|
37
43
|
</button>
|
|
38
44
|
</template>
|
|
@@ -3,12 +3,12 @@ import { PropType } from 'vue';
|
|
|
3
3
|
|
|
4
4
|
const props = defineProps({
|
|
5
5
|
items: {
|
|
6
|
-
type: Object as PropType<
|
|
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<
|
|
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
|
|
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
|
|
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>
|
|
@@ -1,20 +1,47 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
<div
|
|
3
|
+
class="relative flex"
|
|
4
|
+
title="FUCK PUTIN! FUCK RUZZIA!"
|
|
5
|
+
>
|
|
6
|
+
<div
|
|
7
|
+
i-mdi:tank
|
|
8
|
+
class="inline-block bg-ukraine mr-1 mt-0.5"
|
|
9
|
+
/>
|
|
10
|
+
<div
|
|
11
|
+
i-mdi:tank
|
|
12
|
+
class="inline-block bg-ukraine mr-1 mt-0.5"
|
|
13
|
+
/>
|
|
14
|
+
<div
|
|
15
|
+
i-mdi:tank
|
|
16
|
+
class="inline-block bg-ukraine mr-5 mt-0.5"
|
|
17
|
+
/>
|
|
6
18
|
<div class="relative">
|
|
7
|
-
<div
|
|
8
|
-
|
|
19
|
+
<div
|
|
20
|
+
class="inline-block absolute"
|
|
21
|
+
i-noto-v1:flag-for-flag-russia
|
|
22
|
+
/>
|
|
23
|
+
<div
|
|
24
|
+
i-emojione:fire
|
|
25
|
+
class="inline-block absolute -mt-1 animate-ping animate-pulseR"
|
|
26
|
+
/>
|
|
9
27
|
</div>
|
|
10
28
|
<div class="absolute left-0 animate-bull animate-bull--1 -mt-1">
|
|
11
|
-
<div
|
|
29
|
+
<div
|
|
30
|
+
i-mdi:bullet
|
|
31
|
+
class="rotate-90 inline-block bg-yellow"
|
|
32
|
+
/>
|
|
12
33
|
</div>
|
|
13
34
|
<div class="absolute left-0 animate-bull animate-bull animate-bull--2 -mt-1">
|
|
14
|
-
<div
|
|
35
|
+
<div
|
|
36
|
+
i-mdi:bullet
|
|
37
|
+
class="rotate-90 inline-block bg-yellow"
|
|
38
|
+
/>
|
|
15
39
|
</div>
|
|
16
40
|
<div class="absolute left-0 animate-bull animate-bull--3 -mt-1">
|
|
17
|
-
<div
|
|
41
|
+
<div
|
|
42
|
+
i-mdi:bullet
|
|
43
|
+
class="rotate-90 inline-block bg-yellow"
|
|
44
|
+
/>
|
|
18
45
|
</div>
|
|
19
46
|
</div>
|
|
20
47
|
</template>
|