spoko-design-system 1.2.2 → 1.3.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.
@@ -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.1](https://github.com/polo-blue/sds/compare/v1.3.0...v1.3.1) (2025-10-05)
2
+
3
+ ## [1.3.0](https://github.com/polo-blue/sds/compare/v1.2.2...v1.3.0) (2025-10-05)
4
+
5
+ ### Features
6
+
7
+ * add Claude Code GitHub Action workflow ([eba488f](https://github.com/polo-blue/sds/commit/eba488fe781ebb3e7676dc7e6dfd30cf3130798a))
8
+
1
9
  ## [1.2.2](https://github.com/polo-blue/sds/compare/v1.2.1...v1.2.2) (2025-10-05)
2
10
 
3
11
  ## [1.2.1](https://github.com/polo-blue/sds/compare/v1.2.0...v1.2.1) (2025-10-05)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.2.2",
3
+ "version": "1.3.1",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -2,19 +2,22 @@
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
  });
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>
@@ -47,7 +47,10 @@ const getBadgeColor = (badge: string | BadgeObject): string => {
47
47
  </script>
48
48
 
49
49
  <template>
50
- <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
+ >
51
54
  <Badge
52
55
  v-for="(badge, index) in props.badges"
53
56
  :key="index"
@@ -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>
@@ -27,11 +27,18 @@ const { copy, copied } = useClipboard({ source, legacy: true });
27
27
  </script>
28
28
 
29
29
  <template>
30
- <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
+ >
31
35
  <span
32
36
  :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
33
37
  :data-text="!copied ? texts.copy : texts.copied"
34
38
  />
35
- <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
+ />
36
43
  </button>
37
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>
@@ -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, index) in props.items" :key="index" 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>
@@ -125,18 +125,31 @@ 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 :for="id" :class="labelClass" style="transform-origin: top left">
130
+ <label
131
+ :for="id"
132
+ :class="labelClass"
133
+ style="transform-origin: top left"
134
+ >
131
135
  {{ label }}
132
- <span v-if="required" class="text-red-500 ml-1">*</span>
136
+ <span
137
+ v-if="required"
138
+ class="text-red-500 ml-1"
139
+ >*</span>
133
140
  </label>
134
141
 
135
- <div v-if="error && typeof error === 'string'" class="input-error-message">
142
+ <div
143
+ v-if="error && typeof error === 'string'"
144
+ class="input-error-message"
145
+ >
136
146
  {{ error }}
137
147
  </div>
138
148
 
139
- <div v-if="success && typeof success === 'string'" class="input-success-message">
149
+ <div
150
+ v-if="success && typeof success === 'string'"
151
+ class="input-success-message"
152
+ >
140
153
  {{ success }}
141
154
  </div>
142
155
  </div>
@@ -7,13 +7,23 @@ const colorCategories = Object.entries(colors);
7
7
 
8
8
  <template>
9
9
  <div class="flex flex-col space-y-12">
10
- <div v-for="[category, shades] in colorCategories" :key="category">
10
+ <div
11
+ v-for="[category, shades] in colorCategories"
12
+ :key="category"
13
+ >
11
14
  <h3 class="capitalize">
12
15
  {{ category }}
13
16
  </h3>
14
17
  <div class="grid grid-cols-3 md:grid-cols-9">
15
- <div v-for="(value, name) in shades" :key="name" class="mb-6">
16
- <div class="h-12 transition-all" :style="`background: ${value}`" />
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
+ />
17
27
  <div class="text-sm flex flex-col text-center font-mono text-slate-500">
18
28
  <span>{{ name }}</span>
19
29
  <span class="uppercase text-xs">{{ value }}</span>
@@ -8,11 +8,10 @@ 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
12
- >
11
+ >{{ props.label }}</span>
13
12
  <input
14
13
  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"
15
14
  type="text"
16
- />
15
+ >
17
16
  </label>
18
17
  </template>
@@ -21,7 +21,10 @@ const props = defineProps({
21
21
  </script>
22
22
 
23
23
  <template>
24
- <component :is="props.as" :class="props.class">
24
+ <component
25
+ :is="props.as"
26
+ :class="props.class"
27
+ >
25
28
  {{ props.number }}
26
29
  </component>
27
30
  </template>
@@ -9,7 +9,10 @@ const props = defineProps({
9
9
  </script>
10
10
 
11
11
  <template>
12
- <button class="product-button" :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''">
12
+ <button
13
+ class="product-button"
14
+ :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''"
15
+ >
13
16
  <slot />
14
17
  </button>
15
18
  </template>
@@ -15,7 +15,10 @@ const props = defineProps({
15
15
 
16
16
  <template>
17
17
  <div class="font-bold detail-name w-full sm:w-50 flex">
18
- <span class="colon-after" :class="styles && styles.length ? styles : 'mt-auto'">
18
+ <span
19
+ class="colon-after"
20
+ :class="styles && styles.length ? styles : 'mt-auto'"
21
+ >
19
22
  {{ props.text }}
20
23
  </span>
21
24
  </div>
@@ -30,18 +30,28 @@ const props = defineProps({
30
30
 
31
31
  <template>
32
32
  <div v-if="details && details.length">
33
- <template v-for="(detail, index) in details" :key="index">
33
+ <template
34
+ v-for="(detail, index) in details"
35
+ :key="index"
36
+ >
34
37
  <!-- PDP PAGE - PRODUCT ROW -->
35
38
  <!-- <pre>{{ JSON.stringify(details) }}</pre> -->
36
39
  <li
37
40
  v-if="props.small"
38
41
  class="text-xs md:text-sm text-slate-darkest dark:text-neutral-light leading-tight font-textlight md:font-textregular"
39
42
  >
40
- <span v-if="detail.id" class="inline-block mr-1 items--0">
43
+ <span
44
+ v-if="detail.id"
45
+ class="inline-block mr-1 items--0"
46
+ >
41
47
  {{ getTranslation(`detail.${detail.id}`) }}:
42
48
  </span>
43
49
 
44
- <span v-if="detail.translated" :class="detail.id ? 'font-semibold' : ''" class="items--1">
50
+ <span
51
+ v-if="detail.translated"
52
+ :class="detail.id ? 'font-semibold' : ''"
53
+ class="items--1"
54
+ >
45
55
  {{ detail.value }}
46
56
  </span>
47
57
 
@@ -49,16 +59,26 @@ const props = defineProps({
49
59
  v-else-if="detail.value !== undefined && detail.id === 'color' && detail.isArrayValue"
50
60
  class="items--2 inline-block"
51
61
  >
52
- <span v-for="(color, indexColor) in detail.value" :key="indexColor" class="comma">
62
+ <span
63
+ v-for="(color, indexColor) in detail.value"
64
+ :key="indexColor"
65
+ class="comma"
66
+ >
53
67
  {{ color['name'] }}
54
68
  </span>
55
69
  </div>
56
70
 
57
- <span v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue" class="items--3">
71
+ <span
72
+ v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue"
73
+ class="items--3"
74
+ >
58
75
  {{ locale === 'en' ? String(detail.value).replace(/,/g, '.') : String(detail.value) }}
59
76
  </span>
60
77
 
61
- <span v-else-if="detail.id && detail.id === 'paint-marks'" class="items items--4">
78
+ <span
79
+ v-else-if="detail.id && detail.id === 'paint-marks'"
80
+ class="items items--4"
81
+ >
62
82
  {{ detail.value }}
63
83
  <!-- <span v-for="(mark, index2) in JSON.parse(String(detail.value))" :key="index2" class="item">
64
84
  {{ mark[0] }} x <span>{{ getTranslation(`color.${mark[1]}`) }}</span>
@@ -71,8 +91,14 @@ const props = defineProps({
71
91
  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"
72
92
  >
73
93
  <!-- PRODUCT CARD -->
74
- <ProductDetailName v-if="detail.id" :text="getTranslation(`detail.${detail.id}`)" />
75
- <div v-if="detail.value" class="leading-4 flex items-end">
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
+ >
76
102
  <span
77
103
  v-if="detail.translated && !detail.isArrayValue"
78
104
  :class="detail.id === 'light-function' ? 'whitespace-pre-line' : ''"
@@ -80,25 +106,34 @@ const props = defineProps({
80
106
  {{ getTranslation(`detail.value.${detail.value}`) }}
81
107
  </span>
82
108
 
83
- <span v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue" class="">
109
+ <span
110
+ v-else-if="detail.id !== 'paint-marks' && !detail.isArrayValue"
111
+ class=""
112
+ >
84
113
  {{ detail.value }}
85
114
  </span>
86
115
 
87
116
  <span
88
117
  v-else-if="
89
118
  detail.value !== undefined &&
90
- detail.id === 'for-exterior-colour' &&
91
- detail.isArrayValue
119
+ detail.id === 'for-exterior-colour' &&
120
+ detail.isArrayValue
92
121
  "
93
122
  class=""
94
123
  >
95
- <div v-for="(color, indexColor) in JSON.parse(String(detail.value))" :key="indexColor">
124
+ <div
125
+ v-for="(color, indexColor) in JSON.parse(String(detail.value))"
126
+ :key="indexColor"
127
+ >
96
128
  <span class="font-mono">{{ color }}</span> -
97
129
  {{ getTranslation(`colorCodes.${color}`) }}
98
130
  </div>
99
131
  </span>
100
132
 
101
- <span v-else-if="detail.id && detail.id === 'paint-marks'" class="items">
133
+ <span
134
+ v-else-if="detail.id && detail.id === 'paint-marks'"
135
+ class="items"
136
+ >
102
137
  <span
103
138
  v-for="(mark, markIndex) in JSON.parse(String(detail.value))"
104
139
  :key="markIndex"
@@ -107,8 +142,15 @@ const props = defineProps({
107
142
  {{ mark[0] }} x <span>{{ getTranslation(`color.${mark[1]}`) }}</span>
108
143
  </span>
109
144
  </span>
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">
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
+ >
112
154
  · {{ d }}
113
155
  </li>
114
156
  </ul>
@@ -20,7 +20,10 @@ 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 i-system-uicons-document-justified class="text-blue-lightest dark:text-accent-light" />
23
+ <div
24
+ i-system-uicons-document-justified
25
+ class="text-blue-lightest dark:text-accent-light"
26
+ />
24
27
  <span>{{ props.file.name }}</span>
25
28
  </a>
26
29
  </li>
@@ -15,7 +15,10 @@ const props = withDefaults(
15
15
  </script>
16
16
 
17
17
  <template>
18
- <ul v-if="props.engines.length" class="engine-types">
18
+ <ul
19
+ v-if="props.engines.length"
20
+ class="engine-types"
21
+ >
19
22
  <li
20
23
  v-for="(engine, index) in props.engines"
21
24
  :key="engine.id"
@@ -1,16 +1,27 @@
1
1
  <template>
2
- <div class="product-link" itemscope itemtype="https://schema.org/Product">
2
+ <div
3
+ class="product-link"
4
+ itemscope
5
+ itemtype="https://schema.org/Product"
6
+ >
3
7
  <div
4
8
  :class="[bigTile ? 'product-link--big-tile' : 'product-thumb--plp product-thumb--carousel']"
5
9
  >
6
10
  <!-- Slot na ProductImage z Astro -->
7
11
  <slot name="image">
8
- <img src="/1x1.png" class="bg-neutral-lightest/70" :alt="productName" />
12
+ <img
13
+ src="/1x1.png"
14
+ class="bg-neutral-lightest/70"
15
+ :alt="productName"
16
+ >
9
17
  </slot>
10
18
  </div>
11
19
 
12
20
  <div :class="[bigTile ? '' : 'sm:pl-4']">
13
- <p v-if="price" class="block mb-2 font-600 font-headbold text-5">
21
+ <p
22
+ v-if="price"
23
+ class="block mb-2 font-600 font-headbold text-5"
24
+ >
14
25
  {{ price }}
15
26
  </p>
16
27
 
@@ -22,11 +33,20 @@
22
33
  v-html="nameFormatted"
23
34
  />
24
35
 
25
- <ProductNumber :product-number="productNumber" :copy-disabled="true" />
36
+ <ProductNumber
37
+ :product-number="productNumber"
38
+ :copy-disabled="true"
39
+ />
26
40
 
27
41
  <template v-if="index !== null">
28
- <meta itemprop="position" :content="index.toString()" />
29
- <meta itemprop="name" :content="nameFormatted" />
42
+ <meta
43
+ itemprop="position"
44
+ :content="index.toString()"
45
+ >
46
+ <meta
47
+ itemprop="name"
48
+ :content="nameFormatted"
49
+ >
30
50
  </template>
31
51
  </div>
32
52
  </div>
@@ -10,7 +10,10 @@ const props = defineProps({
10
10
  });
11
11
  </script>
12
12
  <template>
13
- <strong class="product-model" :data-pagefind-filter="`model:${props.carModel.name}`">{{
13
+ <strong
14
+ class="product-model"
15
+ :data-pagefind-filter="`model:${props.carModel.name}`"
16
+ >{{
14
17
  props.carModel.name
15
18
  }}</strong>
16
19
  </template>
@@ -11,8 +11,16 @@ const props = defineProps({
11
11
  </script>
12
12
 
13
13
  <template>
14
- <div inline-flex flex-wrap max-w-max>
15
- <span v-for="(modelId, index) in props.modelIds" :key="index" class="product-model block">
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
+ >
16
24
  <ProductModel :id="modelId" />
17
25
  </span>
18
26
  </div>
@@ -16,7 +16,11 @@ const props = defineProps({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <span v-for="position in props.positions" :key="position.sort" class="product-position">
19
+ <span
20
+ v-for="position in props.positions"
21
+ :key="position.sort"
22
+ class="product-position"
23
+ >
20
24
  {{ position.name }}
21
25
  </span>
22
26
  </template>
@@ -24,8 +24,15 @@ const settings = {
24
24
  </script>
25
25
 
26
26
  <template>
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" />
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
+ />
29
36
  <span v-else>
30
37
  <PrCode
31
38
  v-for="(splittedCode, index2) in String(prcode).split('+')"
@@ -23,7 +23,10 @@ const props = defineProps({
23
23
  </script>
24
24
 
25
25
  <template>
26
- <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
26
+ <component
27
+ :is="props.as"
28
+ class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64"
29
+ >
27
30
  <span :class="styles && styles.length ? styles : 'mt-auto'">
28
31
  <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
29
32
  </span>
@@ -144,14 +144,25 @@ 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 v-for="(row, index) in groupedItems" :key="index" class="details-table-row">
152
- <ProductDetailName as="th" :text="getHeaderText(row)" class="details-table-header" />
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
+ />
153
161
 
154
- <td v-if="'links' in row" class="details-table-cell">
162
+ <td
163
+ v-if="'links' in row"
164
+ class="details-table-cell"
165
+ >
155
166
  <ul class="list-none p-0 m-0">
156
167
  <li
157
168
  v-for="(link, linkIndex) in row.links"
@@ -164,14 +175,22 @@ const groupedItems = computed(() => {
164
175
  'leading-none inline-block mr-2 w-4 min-w-4 h-4 text-gray-400',
165
176
  ]"
166
177
  />
167
- <a :href="link.value" target="_blank" rel="noopener noreferrer" class="link-primary">
178
+ <a
179
+ :href="link.value"
180
+ target="_blank"
181
+ rel="noopener noreferrer"
182
+ class="link-primary"
183
+ >
168
184
  {{ link.name }}
169
185
  </a>
170
186
  </li>
171
187
  </ul>
172
188
  </td>
173
189
 
174
- <td v-else-if="'id' in row && isColorArray(row)" class="details-table-cell">
190
+ <td
191
+ v-else-if="'id' in row && isColorArray(row)"
192
+ class="details-table-cell"
193
+ >
175
194
  <ul class="list-none p-0 m-0">
176
195
  <li
177
196
  v-for="(colorItem, colorIndex) in row.value as ColorCode[]"
@@ -189,11 +208,17 @@ const groupedItems = computed(() => {
189
208
  </ul>
190
209
  </td>
191
210
 
192
- <td v-else-if="'id' in row && isPaintMarks(row)" class="details-table-cell">
211
+ <td
212
+ v-else-if="'id' in row && isPaintMarks(row)"
213
+ class="details-table-cell"
214
+ >
193
215
  <span class="text-gray-700 dark:text-gray-300">{{ row.value }}</span>
194
216
  </td>
195
217
 
196
- <td v-else-if="'id' in row && isForExteriorColour(row)" class="details-table-cell">
218
+ <td
219
+ v-else-if="'id' in row && isForExteriorColour(row)"
220
+ class="details-table-cell"
221
+ >
197
222
  <ul class="list-none p-0 m-0">
198
223
  <li
199
224
  v-for="(colorEntry, colourIndex) in row.value as ColorCode[]"
@@ -211,7 +236,10 @@ const groupedItems = computed(() => {
211
236
  </ul>
212
237
  </td>
213
238
 
214
- <td v-else-if="'id' in row && isGenericArray(row)" class="details-table-cell">
239
+ <td
240
+ v-else-if="'id' in row && isGenericArray(row)"
241
+ class="details-table-cell"
242
+ >
215
243
  <ul class="list-none p-0 m-0">
216
244
  <li
217
245
  v-for="(item, itemIndex) in row.value as string[]"
@@ -230,7 +258,10 @@ const groupedItems = computed(() => {
230
258
  v-html="row.value"
231
259
  />
232
260
 
233
- <slot v-else-if="'id' in row" :name="row.id">
261
+ <slot
262
+ v-else-if="'id' in row"
263
+ :name="row.id"
264
+ >
234
265
  <td class="details-table-cell">
235
266
  {{ row.value }}
236
267
  </td>
@@ -15,22 +15,24 @@ const toggleVisibility = () => {
15
15
  </script>
16
16
 
17
17
  <template>
18
- <div v-if="isShow" data-pagefind-ignore class="slimbanner">
18
+ <div
19
+ v-if="isShow"
20
+ data-pagefind-ignore
21
+ class="slimbanner"
22
+ >
19
23
  <span
20
24
  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%]"
21
25
  />
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
- />
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
+ />
26
29
  <a
27
30
  href="https://polo.blue/support-ukraine/"
28
31
  target="_blank"
29
32
  rel="noopener"
30
33
  title="Support Ukraine"
31
34
  class="underline underline-offset-2 hover:text-blue-wrc"
32
- >this page</a
33
- >.
35
+ >this page</a>.
34
36
  </span>
35
37
 
36
38
  <button
@@ -14,14 +14,26 @@ 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 v-for="(thead, index) in theads" :key="index" class="px-4 py-2 font-semibold">
17
+ <th
18
+ v-for="(thead, index) in theads"
19
+ :key="index"
20
+ class="px-4 py-2 font-semibold"
21
+ >
18
22
  {{ capitalizeFirstLetter(thead) }}
19
23
  </th>
20
24
  </tr>
21
25
  </thead>
22
26
  <tbody>
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">
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
+ >
25
37
  {{ row[key] }}
26
38
  </td>
27
39
  </tr>
@@ -18,7 +18,10 @@ const props = defineProps({
18
18
  </script>
19
19
 
20
20
  <template>
21
- <div v-if="props.translations !== null && props.translations.uri" data-pagefind-ignore>
21
+ <div
22
+ v-if="props.translations !== null && props.translations.uri"
23
+ data-pagefind-ignore
24
+ >
22
25
  <a
23
26
  aria-label="Change language"
24
27
  type="button"