spoko-design-system 1.20.0 → 1.21.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 (92) hide show
  1. package/.claude/settings.json +48 -48
  2. package/.github/dependabot.yml +11 -11
  3. package/.github/todo.yml +3 -3
  4. package/.github/workflows/claude.yml +37 -37
  5. package/.github/workflows/code-quality.yml +72 -72
  6. package/.github/workflows/deploy.yml +43 -43
  7. package/.husky/README.md +41 -41
  8. package/.husky/commit-msg +1 -1
  9. package/.husky/pre-commit +40 -40
  10. package/.prettierignore +14 -14
  11. package/.prettierrc +30 -30
  12. package/.stackblitzrc +5 -5
  13. package/.vscode/extensions.json +4 -4
  14. package/.vscode/launch.json +11 -11
  15. package/.vscode/settings.json +21 -21
  16. package/CHANGELOG.md +470 -462
  17. package/CLAUDE.md +268 -268
  18. package/LICENSE +21 -21
  19. package/README.md +303 -303
  20. package/TOOLTIPS.md +236 -236
  21. package/astro.config.mjs +84 -84
  22. package/commitlint.config.js +3 -3
  23. package/dev-dist/sw.js +91 -91
  24. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  25. package/eslint.config.js +70 -70
  26. package/icon.config.ts +348 -348
  27. package/index.ts +78 -78
  28. package/package.json +160 -160
  29. package/public/arrow-bottom.svg +7 -7
  30. package/public/fonts/lg.svg +53 -53
  31. package/public/fonts/vwhead-bold-demo.html +549 -549
  32. package/public/fonts/vwhead-regular-demo.html +549 -549
  33. package/public/fonts/vwtext-bold-demo.html +549 -549
  34. package/public/fonts/vwtext-regular-demo.html +549 -549
  35. package/public/github.svg +3 -3
  36. package/public/grid_dot.svg +4 -4
  37. package/public/linkedin.svg +44 -44
  38. package/public/make-scrollable-code-focusable.js +3 -3
  39. package/public/pagefind.yml +3 -3
  40. package/public/polo.blue.svg +29 -29
  41. package/public/spoko.space.svg +71 -71
  42. package/public/twitter.svg +46 -46
  43. package/renovate.json +6 -6
  44. package/sandbox.config.json +11 -11
  45. package/sonar-project.properties +26 -26
  46. package/src/components/Category/CategoriesCarousel.astro +3 -7
  47. package/src/pages/components/badges.mdx +57 -57
  48. package/src/pages/components/breadcrumbs.mdx +139 -139
  49. package/src/pages/components/buttons.mdx +359 -359
  50. package/src/pages/components/card.mdx +294 -294
  51. package/src/pages/components/carousel.mdx +62 -62
  52. package/src/pages/components/copyright.mdx +42 -42
  53. package/src/pages/components/details-list.mdx +207 -207
  54. package/src/pages/components/features-list.mdx +37 -37
  55. package/src/pages/components/flags.mdx +49 -49
  56. package/src/pages/components/fuck-russia.mdx +39 -39
  57. package/src/pages/components/hand-drive.mdx +78 -78
  58. package/src/pages/components/headline.mdx +337 -337
  59. package/src/pages/components/image.mdx +513 -513
  60. package/src/pages/components/input.mdx +367 -367
  61. package/src/pages/components/jumbotron.mdx +530 -530
  62. package/src/pages/components/modal.mdx +212 -212
  63. package/src/pages/components/post-header.mdx +64 -64
  64. package/src/pages/components/pr-code.mdx +213 -213
  65. package/src/pages/components/product-engine.mdx +418 -418
  66. package/src/pages/components/product-number.mdx +58 -58
  67. package/src/pages/components/product-tile.mdx +51 -51
  68. package/src/pages/components/quote.mdx +33 -33
  69. package/src/pages/components/slimbanner.mdx +260 -260
  70. package/src/pages/components/table.mdx +108 -108
  71. package/src/pages/core/colors.mdx +21 -21
  72. package/src/pages/core/grid.mdx +193 -193
  73. package/src/pages/core/introduction.mdx +77 -77
  74. package/src/pages/core/tooltips.mdx +491 -491
  75. package/src/pages/patterns/introduction.mdx +60 -60
  76. package/src/styles/_variables.scss +70 -70
  77. package/tailwind.config.cjs +8 -8
  78. package/tsconfig.json +28 -28
  79. package/uno-config/index.ts +269 -269
  80. package/uno-config/theme/breakpoints.ts +9 -9
  81. package/uno-config/theme/colors.ts +65 -65
  82. package/uno-config/theme/dimensions.ts +17 -17
  83. package/uno-config/theme/effects.ts +14 -14
  84. package/uno-config/theme/grid.ts +10 -10
  85. package/uno-config/theme/index.ts +26 -26
  86. package/uno-config/theme/shortcuts/buttons.ts +53 -53
  87. package/uno-config/theme/shortcuts/components.ts +124 -124
  88. package/uno-config/theme/shortcuts/index.ts +20 -20
  89. package/uno-config/theme/shortcuts/jumbotron.ts +71 -71
  90. package/uno-config/theme/shortcuts/layout.ts +75 -75
  91. package/uno-config/theme/typography.ts +29 -29
  92. 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