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.
Files changed (59) hide show
  1. package/.github/workflows/code-quality.yml +10 -6
  2. package/.github/workflows/deploy.yml +4 -5
  3. package/.github/workflows/release.yml +7 -19
  4. package/.github/workflows/sonarcloud.yml +8 -7
  5. package/.vscode/settings.json +20 -0
  6. package/CHANGELOG.md +25 -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,17 +13,18 @@ jobs:
13
13
 
14
14
  steps:
15
15
  - name: Checkout code
16
- uses: actions/checkout@v4
16
+ uses: actions/checkout@v5
17
17
 
18
18
  - name: Setup Node.js
19
- uses: actions/setup-node@v4
19
+ uses: actions/setup-node@v5
20
20
  with:
21
21
  node-version: '22'
22
22
 
23
- - name: Setup pnpm
24
- uses: pnpm/action-setup@v4
25
- with:
26
- version: '10.16.1'
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: [ 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,19 +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
18
  - name: Setup Node.js
19
- uses: actions/setup-node@v4
19
+ uses: actions/setup-node@v5
20
20
  with:
21
21
  node-version: '22'
22
22
 
23
- - name: Setup pnpm
24
- uses: pnpm/action-setup@v4
25
- with:
26
- version: '10.16.1'
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/sonarqube-scan-action@master
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 }}
@@ -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.1.17",
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.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>
@@ -1,20 +1,47 @@
1
1
  <template>
2
- <div class="relative flex" title="FUCK PUTIN! FUCK RUZZIA!">
3
- <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
4
- <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
5
- <div i-mdi:tank class="inline-block bg-ukraine mr-5 mt-0.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 class="inline-block absolute" i-noto-v1:flag-for-flag-russia />
8
- <div i-emojione:fire class="inline-block absolute -mt-1 animate-ping animate-pulseR" />
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 i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
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 i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
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 i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
41
+ <div
42
+ i-mdi:bullet
43
+ class="rotate-90 inline-block bg-yellow"
44
+ />
18
45
  </div>
19
46
  </div>
20
47
  </template>