spoko-design-system 1.2.1 → 1.3.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 (34) hide show
  1. package/.github/workflows/claude.yml +37 -0
  2. package/CHANGELOG.md +8 -0
  3. package/package.json +1 -1
  4. package/src/components/Badge.vue +2 -2
  5. package/src/components/Breadcrumbs.vue +8 -21
  6. package/src/components/ButtonCopy.vue +2 -9
  7. package/src/components/Category/CategoryLink.vue +1 -5
  8. package/src/components/Category/CategorySidebarToggler.vue +1 -5
  9. package/src/components/FeaturesList.vue +2 -9
  10. package/src/components/FuckRussia.vue +9 -36
  11. package/src/components/Input.vue +5 -18
  12. package/src/components/MainColors.vue +3 -13
  13. package/src/components/MainInput.vue +3 -2
  14. package/src/components/PartNumber.vue +1 -4
  15. package/src/components/Product/ProductButton.vue +1 -4
  16. package/src/components/Product/ProductDetailName.vue +1 -4
  17. package/src/components/Product/ProductDetails.vue +15 -57
  18. package/src/components/Product/ProductDoc.vue +1 -4
  19. package/src/components/Product/ProductEngineType.vue +1 -4
  20. package/src/components/Product/ProductLink.vue +6 -26
  21. package/src/components/Product/ProductModel.vue +1 -4
  22. package/src/components/Product/ProductModels.vue +2 -10
  23. package/src/components/Product/ProductPositions.vue +1 -5
  24. package/src/components/ProductCodes.vue +2 -9
  25. package/src/components/ProductDetailName.vue +1 -4
  26. package/src/components/ProductDetailsList.vue +11 -42
  27. package/src/components/SlimBanner.vue +7 -9
  28. package/src/components/Table.vue +3 -15
  29. package/src/components/Translations.vue +1 -4
  30. package/src/styles/base/base.css +0 -1
  31. package/src/types/Product.ts +1 -2
  32. package/src/types/catalog.ts +1 -1
  33. package/src/types/category.ts +1 -3
  34. package/src/types/common.ts +0 -1
@@ -0,0 +1,37 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: write
23
+ pull-requests: write
24
+ issues: write
25
+ id-token: write
26
+ actions: read
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 1
32
+
33
+ - name: Run Claude Code
34
+ id: claude
35
+ uses: anthropics/claude-code-action@v1
36
+ with:
37
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.3.0](https://github.com/polo-blue/sds/compare/v1.2.2...v1.3.0) (2025-10-05)
2
+
3
+ ### Features
4
+
5
+ * add Claude Code GitHub Action workflow ([eba488f](https://github.com/polo-blue/sds/commit/eba488fe781ebb3e7676dc7e6dfd30cf3130798a))
6
+
7
+ ## [1.2.2](https://github.com/polo-blue/sds/compare/v1.2.1...v1.2.2) (2025-10-05)
8
+
1
9
  ## [1.2.1](https://github.com/polo-blue/sds/compare/v1.2.0...v1.2.1) (2025-10-05)
2
10
 
3
11
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -2,12 +2,12 @@
2
2
  const props = defineProps({
3
3
  badge: {
4
4
  type: String,
5
- required: true,
5
+ required: false,
6
6
  default: '',
7
7
  },
8
8
  class: {
9
9
  type: String,
10
- required: true,
10
+ required: false,
11
11
  default: 'bg-gray',
12
12
  },
13
13
  });
@@ -74,7 +74,7 @@ const isLast = (index: number) => {
74
74
  <meta
75
75
  itemprop="position"
76
76
  content="1"
77
- >
77
+ />
78
78
  </li>
79
79
  <li
80
80
  v-for="(crumb, index) in breadcrumbs"
@@ -84,10 +84,7 @@ const isLast = (index: number) => {
84
84
  itemscope
85
85
  itemtype="https://schema.org/ListItem"
86
86
  >
87
- <span
88
- v-if="index > 0 || props.showHome"
89
- class="text-gray-400 px-1 py-4.25 sm:py-1"
90
- >/</span>
87
+ <span v-if="index > 0 || props.showHome" class="text-gray-400 px-1 py-4.25 sm:py-1">/</span>
91
88
 
92
89
  <a
93
90
  v-if="!isLast(index)"
@@ -96,10 +93,7 @@ const isLast = (index: number) => {
96
93
  itemprop="item"
97
94
  :title="`Polo 6R ${crumb.name}`"
98
95
  >
99
- <strong
100
- class="font-normal"
101
- itemprop="name"
102
- >{{ crumb.name }}</strong>
96
+ <strong class="font-normal" itemprop="name">{{ crumb.name }}</strong>
103
97
  </a>
104
98
  <a
105
99
  v-else
@@ -108,22 +102,15 @@ const isLast = (index: number) => {
108
102
  :title="`Polo 6R ${crumb.name} ${productNumber}`"
109
103
  itemprop="item"
110
104
  >
111
- <span
112
- class="font-normal"
113
- itemprop="name"
114
- >
105
+ <span class="font-normal" itemprop="name">
115
106
  <span v-html="crumb.name" />
116
- <b
117
- v-if="productNumber"
118
- class="hidden sm:inline font-normal ml-1"
119
- >&nbsp;{{ productNumber }}</b>
107
+ <b v-if="productNumber" class="hidden sm:inline font-normal ml-1"
108
+ >&nbsp;{{ productNumber }}</b
109
+ >
120
110
  </span>
121
111
  </a>
122
112
 
123
- <meta
124
- itemprop="position"
125
- :content="String(props.showHome ? index + 2 : index + 1)"
126
- >
113
+ <meta itemprop="position" :content="String(props.showHome ? index + 2 : index + 1)" />
127
114
  </li>
128
115
  </ul>
129
116
  </nav>
@@ -27,18 +27,11 @@ const { copy, copied } = useClipboard({ source, legacy: true });
27
27
  </script>
28
28
 
29
29
  <template>
30
- <button
31
- :aria-label="texts.copy"
32
- class="btn-copy has-tooltip"
33
- @click="copy()"
34
- >
30
+ <button :aria-label="texts.copy" class="btn-copy has-tooltip" @click="copy()">
35
31
  <span
36
32
  :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
37
33
  :data-text="!copied ? texts.copy : texts.copied"
38
34
  />
39
- <span
40
- i-ph-copy-simple-light
41
- class="leading-none w-full h-full"
42
- />
35
+ <span i-ph-copy-simple-light class="leading-none w-full h-full" />
43
36
  </button>
44
37
  </template>
@@ -1,9 +1,5 @@
1
1
  <template>
2
- <a
3
- :href="href"
4
- class="category-link"
5
- :class="{ active: active }"
6
- >
2
+ <a :href="href" class="category-link" :class="{ active: active }">
7
3
  {{ text }}
8
4
  </a>
9
5
  </template>
@@ -1,9 +1,5 @@
1
1
  <template>
2
- <button
3
- class="category-toggler md:w-8"
4
- type="button"
5
- aria-label="toggle menu"
6
- >
2
+ <button class="category-toggler md:w-8" type="button" aria-label="toggle menu">
7
3
  <slot />
8
4
  </button>
9
5
  </template>
@@ -16,18 +16,11 @@ const props = defineProps({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <h2
20
- v-if="props.caption"
21
- class="features-list-caption"
22
- >
19
+ <h2 v-if="props.caption" class="features-list-caption">
23
20
  {{ props.caption }}
24
21
  </h2>
25
22
  <ul class="features-list-ul">
26
- <li
27
- v-for="(item, index) in props.items"
28
- :key="index"
29
- class="features-list-item"
30
- >
23
+ <li v-for="(item, index) in props.items" :key="index" class="features-list-item">
31
24
  {{ item }}
32
25
  </li>
33
26
  </ul>
@@ -1,47 +1,20 @@
1
1
  <template>
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
- />
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" />
18
6
  <div class="relative">
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
- />
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" />
27
9
  </div>
28
10
  <div class="absolute left-0 animate-bull animate-bull--1 -mt-1">
29
- <div
30
- i-mdi:bullet
31
- class="rotate-90 inline-block bg-yellow"
32
- />
11
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
33
12
  </div>
34
13
  <div class="absolute left-0 animate-bull animate-bull animate-bull--2 -mt-1">
35
- <div
36
- i-mdi:bullet
37
- class="rotate-90 inline-block bg-yellow"
38
- />
14
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
39
15
  </div>
40
16
  <div class="absolute left-0 animate-bull animate-bull--3 -mt-1">
41
- <div
42
- i-mdi:bullet
43
- class="rotate-90 inline-block bg-yellow"
44
- />
17
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
45
18
  </div>
46
19
  </div>
47
20
  </template>
@@ -125,31 +125,18 @@ const handleBlur = (event: globalThis.FocusEvent) => emit('blur', event);
125
125
  @input="handleInput"
126
126
  @focus="handleFocus"
127
127
  @blur="handleBlur"
128
- >
128
+ />
129
129
 
130
- <label
131
- :for="id"
132
- :class="labelClass"
133
- style="transform-origin: top left"
134
- >
130
+ <label :for="id" :class="labelClass" style="transform-origin: top left">
135
131
  {{ label }}
136
- <span
137
- v-if="required"
138
- class="text-red-500 ml-1"
139
- >*</span>
132
+ <span v-if="required" class="text-red-500 ml-1">*</span>
140
133
  </label>
141
134
 
142
- <div
143
- v-if="error && typeof error === 'string'"
144
- class="input-error-message"
145
- >
135
+ <div v-if="error && typeof error === 'string'" class="input-error-message">
146
136
  {{ error }}
147
137
  </div>
148
138
 
149
- <div
150
- v-if="success && typeof success === 'string'"
151
- class="input-success-message"
152
- >
139
+ <div v-if="success && typeof success === 'string'" class="input-success-message">
153
140
  {{ success }}
154
141
  </div>
155
142
  </div>
@@ -7,23 +7,13 @@ const colorCategories = Object.entries(colors);
7
7
 
8
8
  <template>
9
9
  <div class="flex flex-col space-y-12">
10
- <div
11
- v-for="[category, shades] in colorCategories"
12
- :key="category"
13
- >
10
+ <div v-for="[category, shades] in colorCategories" :key="category">
14
11
  <h3 class="capitalize">
15
12
  {{ category }}
16
13
  </h3>
17
14
  <div class="grid grid-cols-3 md:grid-cols-9">
18
- <div
19
- v-for="(value, name) in shades"
20
- :key="name"
21
- class="mb-6"
22
- >
23
- <div
24
- class="h-12 transition-all"
25
- :style="`background: ${value}`"
26
- />
15
+ <div v-for="(value, name) in shades" :key="name" class="mb-6">
16
+ <div class="h-12 transition-all" :style="`background: ${value}`" />
27
17
  <div class="text-sm flex flex-col text-center font-mono text-slate-500">
28
18
  <span>{{ name }}</span>
29
19
  <span class="uppercase text-xs">{{ value }}</span>
@@ -8,10 +8,11 @@ const props = defineProps<{
8
8
  <label class="group text-left w-full max-w-xs flex flex-col">
9
9
  <span
10
10
  class="group-hover:text-blue-medium ml-2 text-slate-600 text-sm group-focus-within:text-blue-medium"
11
- >{{ props.label }}</span>
11
+ >{{ props.label }}</span
12
+ >
12
13
  <input
13
14
  class="group-hover:border-blue-lightest border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-medium"
14
15
  type="text"
15
- >
16
+ />
16
17
  </label>
17
18
  </template>
@@ -21,10 +21,7 @@ const props = defineProps({
21
21
  </script>
22
22
 
23
23
  <template>
24
- <component
25
- :is="props.as"
26
- :class="props.class"
27
- >
24
+ <component :is="props.as" :class="props.class">
28
25
  {{ props.number }}
29
26
  </component>
30
27
  </template>
@@ -9,10 +9,7 @@ const props = defineProps({
9
9
  </script>
10
10
 
11
11
  <template>
12
- <button
13
- class="product-button"
14
- :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''"
15
- >
12
+ <button class="product-button" :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''">
16
13
  <slot />
17
14
  </button>
18
15
  </template>
@@ -15,10 +15,7 @@ const props = defineProps({
15
15
 
16
16
  <template>
17
17
  <div class="font-bold detail-name w-full sm:w-50 flex">
18
- <span
19
- class="colon-after"
20
- :class="styles && styles.length ? styles : 'mt-auto'"
21
- >
18
+ <span class="colon-after" :class="styles && styles.length ? styles : 'mt-auto'">
22
19
  {{ props.text }}
23
20
  </span>
24
21
  </div>
@@ -30,28 +30,18 @@ const props = defineProps({
30
30
 
31
31
  <template>
32
32
  <div v-if="details && details.length">
33
- <template
34
- v-for="(detail, index) in details"
35
- :key="index"
36
- >
33
+ <template v-for="(detail, index) in details" :key="index">
37
34
  <!-- PDP PAGE - PRODUCT ROW -->
38
35
  <!-- <pre>{{ JSON.stringify(details) }}</pre> -->
39
36
  <li
40
37
  v-if="props.small"
41
38
  class="text-xs md:text-sm text-slate-darkest dark:text-neutral-light leading-tight font-textlight md:font-textregular"
42
39
  >
43
- <span
44
- v-if="detail.id"
45
- class="inline-block mr-1 items--0"
46
- >
40
+ <span v-if="detail.id" class="inline-block mr-1 items--0">
47
41
  {{ getTranslation(`detail.${detail.id}`) }}:
48
42
  </span>
49
43
 
50
- <span
51
- v-if="detail.translated"
52
- :class="detail.id ? 'font-semibold' : ''"
53
- class="items--1"
54
- >
44
+ <span v-if="detail.translated" :class="detail.id ? 'font-semibold' : ''" class="items--1">
55
45
  {{ detail.value }}
56
46
  </span>
57
47
 
@@ -59,26 +49,16 @@ const props = defineProps({
59
49
  v-else-if="detail.value !== undefined && detail.id === 'color' && detail.isArrayValue"
60
50
  class="items--2 inline-block"
61
51
  >
62
- <span
63
- v-for="(color, indexColor) in detail.value"
64
- :key="indexColor"
65
- class="comma"
66
- >
52
+ <span v-for="(color, indexColor) in detail.value" :key="indexColor" class="comma">
67
53
  {{ color['name'] }}
68
54
  </span>
69
55
  </div>
70
56
 
71
- <span
72
- v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue"
73
- class="items--3"
74
- >
57
+ <span v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue" class="items--3">
75
58
  {{ locale === 'en' ? String(detail.value).replace(/,/g, '.') : String(detail.value) }}
76
59
  </span>
77
60
 
78
- <span
79
- v-else-if="detail.id && detail.id === 'paint-marks'"
80
- class="items items--4"
81
- >
61
+ <span v-else-if="detail.id && detail.id === 'paint-marks'" class="items items--4">
82
62
  {{ detail.value }}
83
63
  <!-- <span v-for="(mark, index2) in JSON.parse(String(detail.value))" :key="index2" class="item">
84
64
  {{ mark[0] }} x <span>{{ getTranslation(`color.${mark[1]}`) }}</span>
@@ -91,14 +71,8 @@ const props = defineProps({
91
71
  class="text-sm mt-1 md:mt-4 mb-4 grid grid-cols-2 sm:(grid-cols-details-desktop grid-flow-col auto-cols-max) gap-4"
92
72
  >
93
73
  <!-- PRODUCT CARD -->
94
- <ProductDetailName
95
- v-if="detail.id"
96
- :text="getTranslation(`detail.${detail.id}`)"
97
- />
98
- <div
99
- v-if="detail.value"
100
- class="leading-4 flex items-end"
101
- >
74
+ <ProductDetailName v-if="detail.id" :text="getTranslation(`detail.${detail.id}`)" />
75
+ <div v-if="detail.value" class="leading-4 flex items-end">
102
76
  <span
103
77
  v-if="detail.translated && !detail.isArrayValue"
104
78
  :class="detail.id === 'light-function' ? 'whitespace-pre-line' : ''"
@@ -106,34 +80,25 @@ const props = defineProps({
106
80
  {{ getTranslation(`detail.value.${detail.value}`) }}
107
81
  </span>
108
82
 
109
- <span
110
- v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue"
111
- class=""
112
- >
83
+ <span v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue" class="">
113
84
  {{ detail.value }}
114
85
  </span>
115
86
 
116
87
  <span
117
88
  v-else-if="
118
89
  detail.value !== undefined &&
119
- detail.id === 'for-exterior-colour' &&
120
- detail.isArrayValue
90
+ detail.id === 'for-exterior-colour' &&
91
+ detail.isArrayValue
121
92
  "
122
93
  class=""
123
94
  >
124
- <div
125
- v-for="(color, indexColor) in JSON.parse(String(detail.value))"
126
- :key="indexColor"
127
- >
95
+ <div v-for="(color, indexColor) in JSON.parse(String(detail.value))" :key="indexColor">
128
96
  <span class="font-mono">{{ color }}</span> -
129
97
  {{ getTranslation(`colorCodes.${color}`) }}
130
98
  </div>
131
99
  </span>
132
100
 
133
- <span
134
- v-else-if="detail.id && detail.id === 'paint-marks'"
135
- class="items"
136
- >
101
+ <span v-else-if="detail.id && detail.id === 'paint-marks'" class="items">
137
102
  <span
138
103
  v-for="(mark, markIndex) in JSON.parse(String(detail.value))"
139
104
  :key="markIndex"
@@ -142,15 +107,8 @@ const props = defineProps({
142
107
  {{ mark[0] }} x <span>{{ getTranslation(`color.${mark[1]}`) }}</span>
143
108
  </span>
144
109
  </span>
145
- <ul
146
- v-else-if="detail.id && detail.isArrayValue"
147
- class="items"
148
- >
149
- <li
150
- v-for="(d, index3) in JSON.parse(String(detail.value))"
151
- :key="index3"
152
- class="item"
153
- >
110
+ <ul v-else-if="detail.id && detail.isArrayValue" class="items">
111
+ <li v-for="(d, index3) in JSON.parse(String(detail.value))" :key="index3" class="item">
154
112
  · {{ d }}
155
113
  </li>
156
114
  </ul>
@@ -20,10 +20,7 @@ const props = defineProps({
20
20
  :title="props.file.path"
21
21
  class="flex items-center hover:underline underline-offset-2 hover:underline-1"
22
22
  >
23
- <div
24
- i-system-uicons-document-justified
25
- class="text-blue-lightest dark:text-accent-light"
26
- />
23
+ <div i-system-uicons-document-justified class="text-blue-lightest dark:text-accent-light" />
27
24
  <span>{{ props.file.name }}</span>
28
25
  </a>
29
26
  </li>
@@ -15,10 +15,7 @@ const props = withDefaults(
15
15
  </script>
16
16
 
17
17
  <template>
18
- <ul
19
- v-if="props.engines.length"
20
- class="engine-types"
21
- >
18
+ <ul v-if="props.engines.length" class="engine-types">
22
19
  <li
23
20
  v-for="(engine, index) in props.engines"
24
21
  :key="engine.id"
@@ -1,27 +1,16 @@
1
1
  <template>
2
- <div
3
- class="product-link"
4
- itemscope
5
- itemtype="https://schema.org/Product"
6
- >
2
+ <div class="product-link" itemscope itemtype="https://schema.org/Product">
7
3
  <div
8
4
  :class="[bigTile ? 'product-link--big-tile' : 'product-thumb--plp product-thumb--carousel']"
9
5
  >
10
6
  <!-- Slot na ProductImage z Astro -->
11
7
  <slot name="image">
12
- <img
13
- src="/1x1.png"
14
- class="bg-neutral-lightest/70"
15
- :alt="productName"
16
- >
8
+ <img src="/1x1.png" class="bg-neutral-lightest/70" :alt="productName" />
17
9
  </slot>
18
10
  </div>
19
11
 
20
12
  <div :class="[bigTile ? '' : 'sm:pl-4']">
21
- <p
22
- v-if="price"
23
- class="block mb-2 font-600 font-headbold text-5"
24
- >
13
+ <p v-if="price" class="block mb-2 font-600 font-headbold text-5">
25
14
  {{ price }}
26
15
  </p>
27
16
 
@@ -33,20 +22,11 @@
33
22
  v-html="nameFormatted"
34
23
  />
35
24
 
36
- <ProductNumber
37
- :product-number="productNumber"
38
- :copy-disabled="true"
39
- />
25
+ <ProductNumber :product-number="productNumber" :copy-disabled="true" />
40
26
 
41
27
  <template v-if="index !== null">
42
- <meta
43
- itemprop="position"
44
- :content="index.toString()"
45
- >
46
- <meta
47
- itemprop="name"
48
- :content="nameFormatted"
49
- >
28
+ <meta itemprop="position" :content="index.toString()" />
29
+ <meta itemprop="name" :content="nameFormatted" />
50
30
  </template>
51
31
  </div>
52
32
  </div>
@@ -10,10 +10,7 @@ const props = defineProps({
10
10
  });
11
11
  </script>
12
12
  <template>
13
- <strong
14
- class="product-model"
15
- :data-pagefind-filter="`model:${props.carModel.name}`"
16
- >{{
13
+ <strong class="product-model" :data-pagefind-filter="`model:${props.carModel.name}`">{{
17
14
  props.carModel.name
18
15
  }}</strong>
19
16
  </template>
@@ -11,16 +11,8 @@ const props = defineProps({
11
11
  </script>
12
12
 
13
13
  <template>
14
- <div
15
- inline-flex
16
- flex-wrap
17
- max-w-max
18
- >
19
- <span
20
- v-for="(modelId, index) in props.modelIds"
21
- :key="index"
22
- class="product-model block"
23
- >
14
+ <div inline-flex flex-wrap max-w-max>
15
+ <span v-for="(modelId, index) in props.modelIds" :key="index" class="product-model block">
24
16
  <ProductModel :id="modelId" />
25
17
  </span>
26
18
  </div>
@@ -16,11 +16,7 @@ const props = defineProps({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <span
20
- v-for="position in props.positions"
21
- :key="position.sort"
22
- class="product-position"
23
- >
19
+ <span v-for="position in props.positions" :key="position.sort" class="product-position">
24
20
  {{ position.name }}
25
21
  </span>
26
22
  </template>
@@ -24,15 +24,8 @@ const settings = {
24
24
  </script>
25
25
 
26
26
  <template>
27
- <span
28
- v-for="(prcode, index) in settings.prcodes"
29
- :key="index"
30
- class="not-last:mr-1"
31
- >
32
- <PrCode
33
- v-if="!String(prcode).includes('+')"
34
- :prcode="prcode"
35
- />
27
+ <span v-for="(prcode, index) in settings.prcodes" :key="index" class="not-last:mr-1">
28
+ <PrCode v-if="!String(prcode).includes('+')" :prcode="prcode" />
36
29
  <span v-else>
37
30
  <PrCode
38
31
  v-for="(splittedCode, index2) in String(prcode).split('+')"
@@ -23,10 +23,7 @@ const props = defineProps({
23
23
  </script>
24
24
 
25
25
  <template>
26
- <component
27
- :is="props.as"
28
- class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64"
29
- >
26
+ <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
30
27
  <span :class="styles && styles.length ? styles : 'mt-auto'">
31
28
  <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
32
29
  </span>
@@ -144,25 +144,14 @@ const groupedItems = computed(() => {
144
144
  </slot>
145
145
  </caption>
146
146
  <colgroup>
147
- <col class="details-table-col">
148
- <col class="details-table-col">
147
+ <col class="details-table-col" />
148
+ <col class="details-table-col" />
149
149
  </colgroup>
150
150
  <tbody>
151
- <tr
152
- v-for="(row, index) in groupedItems"
153
- :key="index"
154
- class="details-table-row"
155
- >
156
- <ProductDetailName
157
- as="th"
158
- :text="getHeaderText(row)"
159
- class="details-table-header"
160
- />
151
+ <tr v-for="(row, index) in groupedItems" :key="index" class="details-table-row">
152
+ <ProductDetailName as="th" :text="getHeaderText(row)" class="details-table-header" />
161
153
 
162
- <td
163
- v-if="'links' in row"
164
- class="details-table-cell"
165
- >
154
+ <td v-if="'links' in row" class="details-table-cell">
166
155
  <ul class="list-none p-0 m-0">
167
156
  <li
168
157
  v-for="(link, linkIndex) in row.links"
@@ -175,22 +164,14 @@ const groupedItems = computed(() => {
175
164
  'leading-none inline-block mr-2 w-4 min-w-4 h-4 text-gray-400',
176
165
  ]"
177
166
  />
178
- <a
179
- :href="link.value"
180
- target="_blank"
181
- rel="noopener noreferrer"
182
- class="link-primary"
183
- >
167
+ <a :href="link.value" target="_blank" rel="noopener noreferrer" class="link-primary">
184
168
  {{ link.name }}
185
169
  </a>
186
170
  </li>
187
171
  </ul>
188
172
  </td>
189
173
 
190
- <td
191
- v-else-if="'id' in row && isColorArray(row)"
192
- class="details-table-cell"
193
- >
174
+ <td v-else-if="'id' in row && isColorArray(row)" class="details-table-cell">
194
175
  <ul class="list-none p-0 m-0">
195
176
  <li
196
177
  v-for="(colorItem, colorIndex) in row.value as ColorCode[]"
@@ -208,17 +189,11 @@ const groupedItems = computed(() => {
208
189
  </ul>
209
190
  </td>
210
191
 
211
- <td
212
- v-else-if="'id' in row && isPaintMarks(row)"
213
- class="details-table-cell"
214
- >
192
+ <td v-else-if="'id' in row && isPaintMarks(row)" class="details-table-cell">
215
193
  <span class="text-gray-700 dark:text-gray-300">{{ row.value }}</span>
216
194
  </td>
217
195
 
218
- <td
219
- v-else-if="'id' in row && isForExteriorColour(row)"
220
- class="details-table-cell"
221
- >
196
+ <td v-else-if="'id' in row && isForExteriorColour(row)" class="details-table-cell">
222
197
  <ul class="list-none p-0 m-0">
223
198
  <li
224
199
  v-for="(colorEntry, colourIndex) in row.value as ColorCode[]"
@@ -236,10 +211,7 @@ const groupedItems = computed(() => {
236
211
  </ul>
237
212
  </td>
238
213
 
239
- <td
240
- v-else-if="'id' in row && isGenericArray(row)"
241
- class="details-table-cell"
242
- >
214
+ <td v-else-if="'id' in row && isGenericArray(row)" class="details-table-cell">
243
215
  <ul class="list-none p-0 m-0">
244
216
  <li
245
217
  v-for="(item, itemIndex) in row.value as string[]"
@@ -258,10 +230,7 @@ const groupedItems = computed(() => {
258
230
  v-html="row.value"
259
231
  />
260
232
 
261
- <slot
262
- v-else-if="'id' in row"
263
- :name="row.id"
264
- >
233
+ <slot v-else-if="'id' in row" :name="row.id">
265
234
  <td class="details-table-cell">
266
235
  {{ row.value }}
267
236
  </td>
@@ -15,24 +15,22 @@ const toggleVisibility = () => {
15
15
  </script>
16
16
 
17
17
  <template>
18
- <div
19
- v-if="isShow"
20
- data-pagefind-ignore
21
- class="slimbanner"
22
- >
18
+ <div v-if="isShow" data-pagefind-ignore class="slimbanner">
23
19
  <span
24
20
  class="inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#0057b7_50%,50%,#ffd700_100%]"
25
21
  />
26
- <span class="leading-none"><span
27
- data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit "
28
- />
22
+ <span class="leading-none"
23
+ ><span
24
+ data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit "
25
+ />
29
26
  <a
30
27
  href="https://polo.blue/support-ukraine/"
31
28
  target="_blank"
32
29
  rel="noopener"
33
30
  title="Support Ukraine"
34
31
  class="underline underline-offset-2 hover:text-blue-wrc"
35
- >this page</a>.
32
+ >this page</a
33
+ >.
36
34
  </span>
37
35
 
38
36
  <button
@@ -14,26 +14,14 @@ const capitalizeFirstLetter = (text: string) => {
14
14
  <table class="table-auto text-left border bg-white shadow-md">
15
15
  <thead class="bg-gray-500 text-white">
16
16
  <tr class="border">
17
- <th
18
- v-for="(thead, index) in theads"
19
- :key="index"
20
- class="px-4 py-2 font-semibold"
21
- >
17
+ <th v-for="(thead, index) in theads" :key="index" class="px-4 py-2 font-semibold">
22
18
  {{ capitalizeFirstLetter(thead) }}
23
19
  </th>
24
20
  </tr>
25
21
  </thead>
26
22
  <tbody>
27
- <tr
28
- v-for="(row, index) in props.data"
29
- :key="index"
30
- class="border"
31
- >
32
- <td
33
- v-for="key in Object.keys(row)"
34
- :key="key"
35
- class="px-4 py-2"
36
- >
23
+ <tr v-for="(row, index) in props.data" :key="index" class="border">
24
+ <td v-for="key in Object.keys(row)" :key="key" class="px-4 py-2">
37
25
  {{ row[key] }}
38
26
  </td>
39
27
  </tr>
@@ -18,10 +18,7 @@ const props = defineProps({
18
18
  </script>
19
19
 
20
20
  <template>
21
- <div
22
- v-if="props.translations !== null && props.translations.uri"
23
- data-pagefind-ignore
24
- >
21
+ <div v-if="props.translations !== null && props.translations.uri" data-pagefind-ignore>
25
22
  <a
26
23
  aria-label="Change language"
27
24
  type="button"
@@ -110,7 +110,6 @@ html {
110
110
  scroll-behavior: smooth;
111
111
  }
112
112
 
113
-
114
113
  .swiper-horizontal {
115
114
  & > .swiper-scrollbar {
116
115
  height: 1px;
@@ -77,11 +77,10 @@ export interface Product {
77
77
  updated_at: string;
78
78
  }
79
79
 
80
-
81
80
  export interface ProductImage {
82
81
  title: string;
83
82
  alt: string;
84
83
  link: string;
85
84
  style?: string;
86
85
  __typename: string;
87
- }
86
+ }
@@ -30,4 +30,4 @@ export interface ProductLinkProps {
30
30
  index?: number | null;
31
31
  loading?: 'lazy' | 'eager';
32
32
  isShopProduct?: boolean;
33
- }
33
+ }
@@ -3,7 +3,6 @@ export interface Breadcrumb {
3
3
  path: string;
4
4
  }
5
5
 
6
-
7
6
  export interface SubCategory {
8
7
  id: number;
9
8
  name: string;
@@ -47,8 +46,7 @@ export interface CatObject {
47
46
  seoTitle?: string;
48
47
  }
49
48
 
50
-
51
49
  export interface Link {
52
50
  path: string;
53
51
  name: string;
54
- }
52
+ }
@@ -35,4 +35,3 @@ export interface Position {
35
35
  sort: number;
36
36
  name: string;
37
37
  }
38
-