spoko-design-system 1.20.0 → 1.21.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.
- package/.claude/settings.json +48 -48
- package/.github/dependabot.yml +11 -11
- package/.github/todo.yml +3 -3
- package/.github/workflows/claude.yml +37 -37
- package/.github/workflows/code-quality.yml +72 -72
- package/.github/workflows/deploy.yml +43 -43
- package/.husky/README.md +41 -41
- package/.husky/commit-msg +1 -1
- package/.husky/pre-commit +40 -40
- package/.prettierignore +14 -14
- package/.prettierrc +30 -30
- package/.stackblitzrc +5 -5
- package/.vscode/extensions.json +4 -4
- package/.vscode/launch.json +11 -11
- package/.vscode/settings.json +21 -21
- package/CHANGELOG.md +476 -462
- package/CLAUDE.md +268 -268
- package/LICENSE +21 -21
- package/README.md +303 -303
- package/TOOLTIPS.md +236 -236
- package/astro.config.mjs +84 -84
- package/commitlint.config.js +3 -3
- package/dev-dist/sw.js +91 -91
- package/dev-dist/workbox-c676b6d3.js +3391 -3391
- package/eslint.config.js +70 -70
- package/icon.config.ts +348 -348
- package/index.ts +78 -78
- package/package.json +160 -160
- package/public/arrow-bottom.svg +7 -7
- package/public/fonts/lg.svg +53 -53
- package/public/fonts/vwhead-bold-demo.html +549 -549
- package/public/fonts/vwhead-regular-demo.html +549 -549
- package/public/fonts/vwtext-bold-demo.html +549 -549
- package/public/fonts/vwtext-regular-demo.html +549 -549
- package/public/github.svg +3 -3
- package/public/grid_dot.svg +4 -4
- package/public/linkedin.svg +44 -44
- package/public/make-scrollable-code-focusable.js +3 -3
- package/public/pagefind.yml +3 -3
- package/public/polo.blue.svg +29 -29
- package/public/spoko.space.svg +71 -71
- package/public/twitter.svg +46 -46
- package/renovate.json +6 -6
- package/sandbox.config.json +11 -11
- package/sonar-project.properties +26 -26
- package/src/components/Category/CategoriesCarousel.astro +3 -7
- package/src/pages/components/badges.mdx +57 -57
- package/src/pages/components/breadcrumbs.mdx +139 -139
- package/src/pages/components/buttons.mdx +359 -359
- package/src/pages/components/card.mdx +294 -294
- package/src/pages/components/carousel.mdx +62 -62
- package/src/pages/components/copyright.mdx +42 -42
- package/src/pages/components/details-list.mdx +207 -207
- package/src/pages/components/features-list.mdx +37 -37
- package/src/pages/components/flags.mdx +49 -49
- package/src/pages/components/fuck-russia.mdx +39 -39
- package/src/pages/components/hand-drive.mdx +78 -78
- package/src/pages/components/headline.mdx +337 -337
- package/src/pages/components/image.mdx +513 -513
- package/src/pages/components/input.mdx +367 -367
- package/src/pages/components/jumbotron.mdx +530 -530
- package/src/pages/components/modal.mdx +212 -212
- package/src/pages/components/post-header.mdx +64 -64
- package/src/pages/components/pr-code.mdx +213 -213
- package/src/pages/components/product-engine.mdx +418 -418
- package/src/pages/components/product-number.mdx +58 -58
- package/src/pages/components/product-tile.mdx +51 -51
- package/src/pages/components/quote.mdx +33 -33
- package/src/pages/components/slimbanner.mdx +260 -260
- package/src/pages/components/table.mdx +108 -108
- package/src/pages/core/colors.mdx +21 -21
- package/src/pages/core/grid.mdx +193 -193
- package/src/pages/core/introduction.mdx +77 -77
- package/src/pages/core/tooltips.mdx +491 -491
- package/src/pages/patterns/introduction.mdx +60 -60
- package/src/styles/_variables.scss +70 -70
- package/tailwind.config.cjs +8 -8
- package/tsconfig.json +28 -28
- package/uno-config/index.ts +269 -269
- package/uno-config/theme/breakpoints.ts +9 -9
- package/uno-config/theme/colors.ts +65 -65
- package/uno-config/theme/dimensions.ts +17 -17
- package/uno-config/theme/effects.ts +14 -14
- package/uno-config/theme/grid.ts +10 -10
- package/uno-config/theme/index.ts +26 -26
- package/uno-config/theme/shortcuts/buttons.ts +53 -53
- package/uno-config/theme/shortcuts/components.ts +124 -124
- package/uno-config/theme/shortcuts/index.ts +20 -20
- package/uno-config/theme/shortcuts/jumbotron.ts +71 -71
- package/uno-config/theme/shortcuts/layout.ts +75 -75
- package/uno-config/theme/typography.ts +29 -29
- package/uno.config.ts +2 -2
|
@@ -1,213 +1,213 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "PrCode"
|
|
3
|
-
layout: "../../layouts/MainLayout.astro"
|
|
4
|
-
---
|
|
5
|
-
import PrCode from '../../components/PrCode.vue'
|
|
6
|
-
import ProductCodes from '../../components/ProductCodes.vue'
|
|
7
|
-
|
|
8
|
-
# PR-Code
|
|
9
|
-
|
|
10
|
-
PR Code are Production Codes for all of the installed equipment in the vehicle and is used by manufacturers including VW, Audi, Seat, Skoda, Porsche, Lamborghini etc.
|
|
11
|
-
PR Codes contain 3 characters comprising of letters and numbers.
|
|
12
|
-
|
|
13
|
-
PR codes are located on vehicle´s build sticker that is located on first pages of cars warranty booklet or there should be one in a trunk as well usually under the carpet or in spare tire area.
|
|
14
|
-
|
|
15
|
-
They are important when purchasing spare parts as they provide information about the manufacturer, make, model, year of manufacture, and other vehicle details.
|
|
16
|
-
|
|
17
|
-
## Single PR-Code
|
|
18
|
-
|
|
19
|
-
Display a single PR code with tooltip showing description from API.
|
|
20
|
-
|
|
21
|
-
### import:
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
import PrCode from 'spoko-design-system/src/components/PrCode.vue'
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Basic Usage:
|
|
28
|
-
|
|
29
|
-
<div class="component-preview">
|
|
30
|
-
<div class="bg-white p-6 w-full flex gap-2">
|
|
31
|
-
<PrCode prcode={{ code: "2JP", group: "STF", description: "R-Line bumper", variant_category: "R_LINE" }} />
|
|
32
|
-
<PrCode prcode={{ code: "1ZJ", group: "BAV", description: "Disk brakes in front (Geomet D); 256x22mm (vented)" }} />
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
```vue
|
|
37
|
-
<PrCode :prcode="{
|
|
38
|
-
code: '2JP',
|
|
39
|
-
group: 'STF',
|
|
40
|
-
description: 'R-Line bumper',
|
|
41
|
-
variant_category: 'R_LINE'
|
|
42
|
-
}" />
|
|
43
|
-
|
|
44
|
-
<PrCode :prcode="{
|
|
45
|
-
code: '1ZJ',
|
|
46
|
-
group: 'BAV',
|
|
47
|
-
description: 'Disk brakes in front (Geomet D); 256x22mm (vented)'
|
|
48
|
-
}" />
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Special Edition Variants (Colored):
|
|
52
|
-
|
|
53
|
-
PR codes for special editions are automatically color-coded based on their `variant_category`:
|
|
54
|
-
|
|
55
|
-
<div class="component-preview">
|
|
56
|
-
<div class="bg-white p-6 w-full flex flex-wrap gap-3">
|
|
57
|
-
<div class="flex flex-col gap-1">
|
|
58
|
-
<small class="text-xs text-gray-500">GTI (Red)</small>
|
|
59
|
-
<PrCode prcode={{ code: "2JD", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C GTI)", variant_category: "GTI" }} />
|
|
60
|
-
</div>
|
|
61
|
-
<div class="flex flex-col gap-1">
|
|
62
|
-
<small class="text-xs text-gray-500">WRC (Blue)</small>
|
|
63
|
-
<PrCode prcode={{ code: "E5M", group: "AAU", description: "Polo WRC", variant_category: "WRC" }} />
|
|
64
|
-
</div>
|
|
65
|
-
<div class="flex flex-col gap-1">
|
|
66
|
-
<small class="text-xs text-gray-500">CROSS (Orange)</small>
|
|
67
|
-
<PrCode prcode={{ code: "2JK", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C Cross)", variant_category: "CROSS" }} />
|
|
68
|
-
</div>
|
|
69
|
-
<div class="flex flex-col gap-1">
|
|
70
|
-
<small class="text-xs text-gray-500">BlueGT</small>
|
|
71
|
-
<PrCode prcode={{ code: "2JE", group: "STF", description: "Partially painted bumpers (e.g. Polo 6R/6C BlueGT)", variant_category: "BLUEGT" }} />
|
|
72
|
-
</div>
|
|
73
|
-
<div class="flex flex-col gap-1">
|
|
74
|
-
<small class="text-xs text-gray-500">Bluemotion</small>
|
|
75
|
-
<PrCode prcode={{ code: "2JZ", group: "STF", description: "Standard bumpers (e.g. Polo 6R Bluemotion)", variant_category: "BLUEMOTION" }} />
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
```vue
|
|
81
|
-
<!-- GTI - Red -->
|
|
82
|
-
<PrCode :prcode="{ code: '2JD', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C GTI)', variant_category: 'GTI' }" />
|
|
83
|
-
|
|
84
|
-
<!-- WRC - Blue -->
|
|
85
|
-
<PrCode :prcode="{ code: 'E5M', group: 'AAU', description: 'Polo WRC', variant_category: 'WRC' }" />
|
|
86
|
-
|
|
87
|
-
<!-- CROSS - Orange -->
|
|
88
|
-
<PrCode :prcode="{ code: '2JK', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C Cross)', variant_category: 'CROSS' }" />
|
|
89
|
-
|
|
90
|
-
<!-- BlueGT -->
|
|
91
|
-
<PrCode :prcode="{ code: '2JE', group: 'STF', description: 'Partially painted bumpers (e.g. Polo 6R/6C BlueGT)', variant_category: 'BLUEGT' }" />
|
|
92
|
-
|
|
93
|
-
<!-- Bluemotion -->
|
|
94
|
-
<PrCode :prcode="{ code: '2JZ', group: 'STF', description: 'Standard bumpers (e.g. Polo 6R Bluemotion)', variant_category: 'BLUEMOTION' }" />
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Variant Categories:
|
|
98
|
-
|
|
99
|
-
The following variant categories are supported with automatic color coding:
|
|
100
|
-
|
|
101
|
-
| Category | Color | Description | Example Codes |
|
|
102
|
-
|----------|-------|-------------|---------------|
|
|
103
|
-
| `GTI` | Red | GTI Performance variants | 2JD, 1ZD, 1KV, 0NH, 1ZR |
|
|
104
|
-
| `WRC` | Blue | WRC/R Street variants | E5M, 1KD, 1ZP, 2JQ, TA2 |
|
|
105
|
-
| `CROSS` | Orange | Cross/Offroad variants | 2JK |
|
|
106
|
-
| `BLUEGT` | Accent Dark | BlueGT variants | 2JE |
|
|
107
|
-
| `BLUEMOTION` | Accent Light | Bluemotion eco variants | 2JZ, 7L6 |
|
|
108
|
-
| `R_LINE` | Gray | R-Line styling | 2JP |
|
|
109
|
-
|
|
110
|
-
## PR-Codes List
|
|
111
|
-
|
|
112
|
-
Display multiple PR codes from an array of objects (from API response).
|
|
113
|
-
|
|
114
|
-
### import:
|
|
115
|
-
|
|
116
|
-
```js
|
|
117
|
-
import ProductCodes from 'spoko-design-system/src/components/ProductCodes.vue'
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### Usage:
|
|
121
|
-
|
|
122
|
-
<div class="component-preview">
|
|
123
|
-
<div class="bg-white p-6 w-full">
|
|
124
|
-
<ProductCodes prcodes={[
|
|
125
|
-
{ code: "2JP", group: "STF", description: "R-Line bumper", variant_category: "R_LINE" },
|
|
126
|
-
{ code: "1ZJ", group: "BAV", description: "Disk brakes in front (Geomet D); 256x22mm (vented)" },
|
|
127
|
-
{ code: "2JD", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C GTI)", variant_category: "GTI" },
|
|
128
|
-
]} />
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
|
|
132
|
-
```vue
|
|
133
|
-
<ProductCodes :prcodes="[
|
|
134
|
-
{ code: '2JP', group: 'STF', description: 'R-Line bumper', variant_category: 'R_LINE' },
|
|
135
|
-
{ code: '1ZJ', group: 'BAV', description: 'Disk brakes in front (Geomet D); 256x22mm (vented)' },
|
|
136
|
-
{ code: '2JD', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C GTI)', variant_category: 'GTI' }
|
|
137
|
-
]" />
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### With API Data:
|
|
141
|
-
|
|
142
|
-
When using data from the API, pass the `pr_codes` array directly:
|
|
143
|
-
|
|
144
|
-
```vue
|
|
145
|
-
<ProductCodes
|
|
146
|
-
:prcodes="product.pr_codes"
|
|
147
|
-
:isPdp="true"
|
|
148
|
-
/>
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### API Response Structure:
|
|
152
|
-
|
|
153
|
-
```json
|
|
154
|
-
{
|
|
155
|
-
"pr_codes": [
|
|
156
|
-
{
|
|
157
|
-
"id": 1522,
|
|
158
|
-
"code": "1ZP",
|
|
159
|
-
"group": "BAV",
|
|
160
|
-
"description": "Disk brakes in front (Geomet D); 310x25mm (vented)",
|
|
161
|
-
"variant_category": "WRC"
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
"id": 2145,
|
|
165
|
-
"code": "2JD",
|
|
166
|
-
"group": "STF",
|
|
167
|
-
"description": "Sports bumpers (e.g. Polo 6R/6C GTI)",
|
|
168
|
-
"variant_category": "GTI"
|
|
169
|
-
}
|
|
170
|
-
]
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Props
|
|
175
|
-
|
|
176
|
-
### PrCode Props:
|
|
177
|
-
|
|
178
|
-
| Prop | Type | Required | Default | Description |
|
|
179
|
-
|------|------|----------|---------|-------------|
|
|
180
|
-
| `prcode` | `Object` | Yes | - | PR code object with code, group, description, variant_category |
|
|
181
|
-
| `prcode.code` | `String` | Yes | - | The 3-character PR code |
|
|
182
|
-
| `prcode.group` | `String` | No | - | PR code group (e.g., "BAV", "STF") |
|
|
183
|
-
| `prcode.description` | `String` | No | - | Description shown in tooltip |
|
|
184
|
-
| `prcode.variant_category` | `String` | No | - | Category for semantic coloring (GTI, WRC, etc.) |
|
|
185
|
-
| `isPdp` | `Boolean` | No | `false` | Product detail page styling |
|
|
186
|
-
|
|
187
|
-
### ProductCodes Props:
|
|
188
|
-
|
|
189
|
-
| Prop | Type | Required | Default | Description |
|
|
190
|
-
|------|------|----------|---------|-------------|
|
|
191
|
-
| `prcodes` | `Array<Object>` | Yes | `[]` | Array of PR code objects |
|
|
192
|
-
| `isPdp` | `Boolean` | No | `false` | Product detail page styling |
|
|
193
|
-
|
|
194
|
-
## Features
|
|
195
|
-
|
|
196
|
-
- ✅ **Dynamic Tooltips**: Shows description from API on hover
|
|
197
|
-
- ✅ **Semantic Colors**: Automatic color coding for special editions (GTI, WRC, etc.)
|
|
198
|
-
- ✅ **Dark Mode**: Supports dark mode with appropriate color adjustments
|
|
199
|
-
- ✅ **Accessible**: Uses semantic HTML and proper ARIA attributes
|
|
200
|
-
- ✅ **Search Friendly**: Includes `data-pagefind-filter` for search indexing
|
|
201
|
-
- ✅ **Combination Support**: Handles combined PR codes like "1AT+1ZR"
|
|
202
|
-
- ✅ **Individual Colors**: Each code in a combination gets its own color based on variant category
|
|
203
|
-
- ✅ **Defensive**: Gracefully handles invalid or malformed data
|
|
204
|
-
|
|
205
|
-
## Notes
|
|
206
|
-
|
|
207
|
-
- **Tooltip setup required**: Import `'spoko-design-system/scripts/tooltips'` once in your layout (see [Tooltips documentation](/core/tooltips))
|
|
208
|
-
- Hover over any PR code to see its full description
|
|
209
|
-
- Colors are based on semantic variant categories, not hardcoded per code
|
|
210
|
-
- Combined codes are displayed as `CODE+CODE` with each code colored independently
|
|
211
|
-
- The component uses a static mapping for variant categories to ensure consistent coloring
|
|
212
|
-
- The tooltip design matches the ProductEngine component style
|
|
213
|
-
- All 14,000+ PR codes in the database have English descriptions
|
|
1
|
+
---
|
|
2
|
+
title: "PrCode"
|
|
3
|
+
layout: "../../layouts/MainLayout.astro"
|
|
4
|
+
---
|
|
5
|
+
import PrCode from '../../components/PrCode.vue'
|
|
6
|
+
import ProductCodes from '../../components/ProductCodes.vue'
|
|
7
|
+
|
|
8
|
+
# PR-Code
|
|
9
|
+
|
|
10
|
+
PR Code are Production Codes for all of the installed equipment in the vehicle and is used by manufacturers including VW, Audi, Seat, Skoda, Porsche, Lamborghini etc.
|
|
11
|
+
PR Codes contain 3 characters comprising of letters and numbers.
|
|
12
|
+
|
|
13
|
+
PR codes are located on vehicle´s build sticker that is located on first pages of cars warranty booklet or there should be one in a trunk as well usually under the carpet or in spare tire area.
|
|
14
|
+
|
|
15
|
+
They are important when purchasing spare parts as they provide information about the manufacturer, make, model, year of manufacture, and other vehicle details.
|
|
16
|
+
|
|
17
|
+
## Single PR-Code
|
|
18
|
+
|
|
19
|
+
Display a single PR code with tooltip showing description from API.
|
|
20
|
+
|
|
21
|
+
### import:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import PrCode from 'spoko-design-system/src/components/PrCode.vue'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Basic Usage:
|
|
28
|
+
|
|
29
|
+
<div class="component-preview">
|
|
30
|
+
<div class="bg-white p-6 w-full flex gap-2">
|
|
31
|
+
<PrCode prcode={{ code: "2JP", group: "STF", description: "R-Line bumper", variant_category: "R_LINE" }} />
|
|
32
|
+
<PrCode prcode={{ code: "1ZJ", group: "BAV", description: "Disk brakes in front (Geomet D); 256x22mm (vented)" }} />
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
```vue
|
|
37
|
+
<PrCode :prcode="{
|
|
38
|
+
code: '2JP',
|
|
39
|
+
group: 'STF',
|
|
40
|
+
description: 'R-Line bumper',
|
|
41
|
+
variant_category: 'R_LINE'
|
|
42
|
+
}" />
|
|
43
|
+
|
|
44
|
+
<PrCode :prcode="{
|
|
45
|
+
code: '1ZJ',
|
|
46
|
+
group: 'BAV',
|
|
47
|
+
description: 'Disk brakes in front (Geomet D); 256x22mm (vented)'
|
|
48
|
+
}" />
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Special Edition Variants (Colored):
|
|
52
|
+
|
|
53
|
+
PR codes for special editions are automatically color-coded based on their `variant_category`:
|
|
54
|
+
|
|
55
|
+
<div class="component-preview">
|
|
56
|
+
<div class="bg-white p-6 w-full flex flex-wrap gap-3">
|
|
57
|
+
<div class="flex flex-col gap-1">
|
|
58
|
+
<small class="text-xs text-gray-500">GTI (Red)</small>
|
|
59
|
+
<PrCode prcode={{ code: "2JD", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C GTI)", variant_category: "GTI" }} />
|
|
60
|
+
</div>
|
|
61
|
+
<div class="flex flex-col gap-1">
|
|
62
|
+
<small class="text-xs text-gray-500">WRC (Blue)</small>
|
|
63
|
+
<PrCode prcode={{ code: "E5M", group: "AAU", description: "Polo WRC", variant_category: "WRC" }} />
|
|
64
|
+
</div>
|
|
65
|
+
<div class="flex flex-col gap-1">
|
|
66
|
+
<small class="text-xs text-gray-500">CROSS (Orange)</small>
|
|
67
|
+
<PrCode prcode={{ code: "2JK", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C Cross)", variant_category: "CROSS" }} />
|
|
68
|
+
</div>
|
|
69
|
+
<div class="flex flex-col gap-1">
|
|
70
|
+
<small class="text-xs text-gray-500">BlueGT</small>
|
|
71
|
+
<PrCode prcode={{ code: "2JE", group: "STF", description: "Partially painted bumpers (e.g. Polo 6R/6C BlueGT)", variant_category: "BLUEGT" }} />
|
|
72
|
+
</div>
|
|
73
|
+
<div class="flex flex-col gap-1">
|
|
74
|
+
<small class="text-xs text-gray-500">Bluemotion</small>
|
|
75
|
+
<PrCode prcode={{ code: "2JZ", group: "STF", description: "Standard bumpers (e.g. Polo 6R Bluemotion)", variant_category: "BLUEMOTION" }} />
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
```vue
|
|
81
|
+
<!-- GTI - Red -->
|
|
82
|
+
<PrCode :prcode="{ code: '2JD', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C GTI)', variant_category: 'GTI' }" />
|
|
83
|
+
|
|
84
|
+
<!-- WRC - Blue -->
|
|
85
|
+
<PrCode :prcode="{ code: 'E5M', group: 'AAU', description: 'Polo WRC', variant_category: 'WRC' }" />
|
|
86
|
+
|
|
87
|
+
<!-- CROSS - Orange -->
|
|
88
|
+
<PrCode :prcode="{ code: '2JK', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C Cross)', variant_category: 'CROSS' }" />
|
|
89
|
+
|
|
90
|
+
<!-- BlueGT -->
|
|
91
|
+
<PrCode :prcode="{ code: '2JE', group: 'STF', description: 'Partially painted bumpers (e.g. Polo 6R/6C BlueGT)', variant_category: 'BLUEGT' }" />
|
|
92
|
+
|
|
93
|
+
<!-- Bluemotion -->
|
|
94
|
+
<PrCode :prcode="{ code: '2JZ', group: 'STF', description: 'Standard bumpers (e.g. Polo 6R Bluemotion)', variant_category: 'BLUEMOTION' }" />
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Variant Categories:
|
|
98
|
+
|
|
99
|
+
The following variant categories are supported with automatic color coding:
|
|
100
|
+
|
|
101
|
+
| Category | Color | Description | Example Codes |
|
|
102
|
+
|----------|-------|-------------|---------------|
|
|
103
|
+
| `GTI` | Red | GTI Performance variants | 2JD, 1ZD, 1KV, 0NH, 1ZR |
|
|
104
|
+
| `WRC` | Blue | WRC/R Street variants | E5M, 1KD, 1ZP, 2JQ, TA2 |
|
|
105
|
+
| `CROSS` | Orange | Cross/Offroad variants | 2JK |
|
|
106
|
+
| `BLUEGT` | Accent Dark | BlueGT variants | 2JE |
|
|
107
|
+
| `BLUEMOTION` | Accent Light | Bluemotion eco variants | 2JZ, 7L6 |
|
|
108
|
+
| `R_LINE` | Gray | R-Line styling | 2JP |
|
|
109
|
+
|
|
110
|
+
## PR-Codes List
|
|
111
|
+
|
|
112
|
+
Display multiple PR codes from an array of objects (from API response).
|
|
113
|
+
|
|
114
|
+
### import:
|
|
115
|
+
|
|
116
|
+
```js
|
|
117
|
+
import ProductCodes from 'spoko-design-system/src/components/ProductCodes.vue'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Usage:
|
|
121
|
+
|
|
122
|
+
<div class="component-preview">
|
|
123
|
+
<div class="bg-white p-6 w-full">
|
|
124
|
+
<ProductCodes prcodes={[
|
|
125
|
+
{ code: "2JP", group: "STF", description: "R-Line bumper", variant_category: "R_LINE" },
|
|
126
|
+
{ code: "1ZJ", group: "BAV", description: "Disk brakes in front (Geomet D); 256x22mm (vented)" },
|
|
127
|
+
{ code: "2JD", group: "STF", description: "Sports bumpers (e.g. Polo 6R/6C GTI)", variant_category: "GTI" },
|
|
128
|
+
]} />
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
```vue
|
|
133
|
+
<ProductCodes :prcodes="[
|
|
134
|
+
{ code: '2JP', group: 'STF', description: 'R-Line bumper', variant_category: 'R_LINE' },
|
|
135
|
+
{ code: '1ZJ', group: 'BAV', description: 'Disk brakes in front (Geomet D); 256x22mm (vented)' },
|
|
136
|
+
{ code: '2JD', group: 'STF', description: 'Sports bumpers (e.g. Polo 6R/6C GTI)', variant_category: 'GTI' }
|
|
137
|
+
]" />
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### With API Data:
|
|
141
|
+
|
|
142
|
+
When using data from the API, pass the `pr_codes` array directly:
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<ProductCodes
|
|
146
|
+
:prcodes="product.pr_codes"
|
|
147
|
+
:isPdp="true"
|
|
148
|
+
/>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### API Response Structure:
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"pr_codes": [
|
|
156
|
+
{
|
|
157
|
+
"id": 1522,
|
|
158
|
+
"code": "1ZP",
|
|
159
|
+
"group": "BAV",
|
|
160
|
+
"description": "Disk brakes in front (Geomet D); 310x25mm (vented)",
|
|
161
|
+
"variant_category": "WRC"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": 2145,
|
|
165
|
+
"code": "2JD",
|
|
166
|
+
"group": "STF",
|
|
167
|
+
"description": "Sports bumpers (e.g. Polo 6R/6C GTI)",
|
|
168
|
+
"variant_category": "GTI"
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Props
|
|
175
|
+
|
|
176
|
+
### PrCode Props:
|
|
177
|
+
|
|
178
|
+
| Prop | Type | Required | Default | Description |
|
|
179
|
+
|------|------|----------|---------|-------------|
|
|
180
|
+
| `prcode` | `Object` | Yes | - | PR code object with code, group, description, variant_category |
|
|
181
|
+
| `prcode.code` | `String` | Yes | - | The 3-character PR code |
|
|
182
|
+
| `prcode.group` | `String` | No | - | PR code group (e.g., "BAV", "STF") |
|
|
183
|
+
| `prcode.description` | `String` | No | - | Description shown in tooltip |
|
|
184
|
+
| `prcode.variant_category` | `String` | No | - | Category for semantic coloring (GTI, WRC, etc.) |
|
|
185
|
+
| `isPdp` | `Boolean` | No | `false` | Product detail page styling |
|
|
186
|
+
|
|
187
|
+
### ProductCodes Props:
|
|
188
|
+
|
|
189
|
+
| Prop | Type | Required | Default | Description |
|
|
190
|
+
|------|------|----------|---------|-------------|
|
|
191
|
+
| `prcodes` | `Array<Object>` | Yes | `[]` | Array of PR code objects |
|
|
192
|
+
| `isPdp` | `Boolean` | No | `false` | Product detail page styling |
|
|
193
|
+
|
|
194
|
+
## Features
|
|
195
|
+
|
|
196
|
+
- ✅ **Dynamic Tooltips**: Shows description from API on hover
|
|
197
|
+
- ✅ **Semantic Colors**: Automatic color coding for special editions (GTI, WRC, etc.)
|
|
198
|
+
- ✅ **Dark Mode**: Supports dark mode with appropriate color adjustments
|
|
199
|
+
- ✅ **Accessible**: Uses semantic HTML and proper ARIA attributes
|
|
200
|
+
- ✅ **Search Friendly**: Includes `data-pagefind-filter` for search indexing
|
|
201
|
+
- ✅ **Combination Support**: Handles combined PR codes like "1AT+1ZR"
|
|
202
|
+
- ✅ **Individual Colors**: Each code in a combination gets its own color based on variant category
|
|
203
|
+
- ✅ **Defensive**: Gracefully handles invalid or malformed data
|
|
204
|
+
|
|
205
|
+
## Notes
|
|
206
|
+
|
|
207
|
+
- **Tooltip setup required**: Import `'spoko-design-system/scripts/tooltips'` once in your layout (see [Tooltips documentation](/core/tooltips))
|
|
208
|
+
- Hover over any PR code to see its full description
|
|
209
|
+
- Colors are based on semantic variant categories, not hardcoded per code
|
|
210
|
+
- Combined codes are displayed as `CODE+CODE` with each code colored independently
|
|
211
|
+
- The component uses a static mapping for variant categories to ensure consistent coloring
|
|
212
|
+
- The tooltip design matches the ProductEngine component style
|
|
213
|
+
- All 14,000+ PR codes in the database have English descriptions
|