spoko-design-system 1.1.13 → 1.1.15

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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.1.15](https://github.com/polo-blue/sds/compare/v1.1.14...v1.1.15) (2025-09-23)
2
+
3
+ ### Bug Fixes
4
+
5
+ * resolve majority of ESLint warnings ([54c4b7f](https://github.com/polo-blue/sds/commit/54c4b7f611301523ef61359cd62e818026033549))
6
+
7
+ ## [1.1.14](https://github.com/polo-blue/sds/compare/v1.1.13...v1.1.14) (2025-09-23)
8
+
9
+ ### Bug Fixes
10
+
11
+ * use props.label in MainInput.vue template to resolve unused props error ([abd1e7b](https://github.com/polo-blue/sds/commit/abd1e7b724873b005d0cf5274af4aa189653c94a))
12
+
1
13
  ## [1.1.13](https://github.com/polo-blue/sds/compare/v1.1.12...v1.1.13) (2025-09-23)
2
14
 
3
15
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -14,7 +14,10 @@ const props = defineProps({
14
14
  </script>
15
15
 
16
16
  <template>
17
- <div class="badge" :class="props.class">
17
+ <div
18
+ class="badge"
19
+ :class="props.class"
20
+ >
18
21
  {{ props.badge }}
19
22
  </div>
20
23
  </template>
@@ -14,7 +14,10 @@ const props = defineProps({
14
14
  </script>
15
15
 
16
16
  <template>
17
- <div v-if="props.badges && props.badges.length > 0" class="absolute z-2">
17
+ <div
18
+ v-if="props.badges && props.badges.length > 0"
19
+ class="absolute z-2"
20
+ >
18
21
  <Badge
19
22
  v-for="(badge, index) in props.badges"
20
23
  :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,16 +60,21 @@ 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"
57
70
  :title="props.textBack"
58
71
  itemprop="item"
59
72
  i-carbon-home
73
+ />
74
+ <meta
75
+ itemprop="position"
76
+ content="1"
60
77
  >
61
- </a>
62
- <meta itemprop="position" content="1" />
63
78
  </li>
64
79
  <li
65
80
  v-for="(crumb, index) in breadcrumbs"
@@ -69,7 +84,10 @@ const isLast = (index: number) => {
69
84
  itemscope
70
85
  itemtype="https://schema.org/ListItem"
71
86
  >
72
- <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>
73
91
 
74
92
  <a
75
93
  v-if="!isLast(index)"
@@ -78,7 +96,10 @@ const isLast = (index: number) => {
78
96
  itemprop="item"
79
97
  :title="`Polo 6R ${crumb.name}`"
80
98
  >
81
- <strong class="font-normal" itemprop="name">{{ crumb.name }}</strong>
99
+ <strong
100
+ class="font-normal"
101
+ itemprop="name"
102
+ >{{ crumb.name }}</strong>
82
103
  </a>
83
104
  <a
84
105
  v-else
@@ -87,15 +108,22 @@ const isLast = (index: number) => {
87
108
  :title="`Polo 6R ${crumb.name} ${productNumber}`"
88
109
  itemprop="item"
89
110
  >
90
- <span class="font-normal" itemprop="name">
91
- <span v-html="crumb.name"></span>
92
- <b v-if="productNumber" class="hidden sm:inline font-normal ml-1"
93
- >&nbsp;{{ productNumber }}</b
94
- >
111
+ <span
112
+ class="font-normal"
113
+ itemprop="name"
114
+ >
115
+ <span v-html="crumb.name" />
116
+ <b
117
+ v-if="productNumber"
118
+ class="hidden sm:inline font-normal ml-1"
119
+ >&nbsp;{{ productNumber }}</b>
95
120
  </span>
96
121
  </a>
97
122
 
98
- <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
+ >
99
127
  </li>
100
128
  </ul>
101
129
  </nav>
@@ -66,7 +66,7 @@ const attrs = useAttrs();
66
66
  :href="props.href"
67
67
  :title="props.title ? props.title : null"
68
68
  >
69
- <slot></slot>
69
+ <slot />
70
70
  </component>
71
71
  </template>
72
72
 
@@ -28,11 +28,18 @@ const { copy, copied } = useClipboard({ source, legacy: true });
28
28
  </script>
29
29
 
30
30
  <template>
31
- <button :aria-label="texts.copy" class="btn-copy has-tooltip" @click="copy()">
31
+ <button
32
+ :aria-label="texts.copy"
33
+ class="btn-copy has-tooltip"
34
+ @click="copy()"
35
+ >
32
36
  <span
33
37
  :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
34
38
  :data-text="!copied ? texts.copy : texts.copied"
35
39
  />
36
- <span i-ph-copy-simple-light class="leading-none w-full h-full" />
40
+ <span
41
+ i-ph-copy-simple-light
42
+ class="leading-none w-full h-full"
43
+ />
37
44
  </button>
38
45
  </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 class="features-list-caption" v-if="props.caption">
19
+ <h2
20
+ v-if="props.caption"
21
+ class="features-list-caption"
22
+ >
20
23
  {{ props.caption }}
21
24
  </h2>
22
25
  <ul class="features-list-ul">
23
- <li v-for="item in props.items" class="features-list-item" :key="item">
26
+ <li
27
+ v-for="item in props.items"
28
+ :key="item"
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>
@@ -106,37 +106,50 @@ const handleBlur = (event: globalThis.FocusEvent) => emit('blur', event);
106
106
  :class="inputClass + ' peer'"
107
107
  :placeholder="placeholder"
108
108
  :value="modelValue"
109
+ v-bind="attrs"
109
110
  @input="handleInput"
110
111
  @focus="handleFocus"
111
112
  @blur="handleBlur"
112
- v-bind="attrs"
113
- ></textarea>
113
+ />
114
114
 
115
115
  <input
116
116
  v-else
117
- :type="type"
118
117
  :id="id"
118
+ :type="type"
119
119
  :name="name || id"
120
120
  :required="required"
121
121
  :class="inputClass + ' peer'"
122
122
  :placeholder="placeholder"
123
123
  :value="modelValue"
124
+ v-bind="attrs"
124
125
  @input="handleInput"
125
126
  @focus="handleFocus"
126
127
  @blur="handleBlur"
127
- v-bind="attrs"
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,11 +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">
11
- <h3 class="capitalize">{{ category }}</h3>
10
+ <div
11
+ v-for="[category, shades] in colorCategories"
12
+ :key="category"
13
+ >
14
+ <h3 class="capitalize">
15
+ {{ category }}
16
+ </h3>
12
17
  <div class="grid grid-cols-3 md:grid-cols-9">
13
- <div v-for="(value, name) in shades" :key="name" class="mb-6">
14
- <div class="h-12 transition-all" :style="`background: ${value}`"></div>
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
27
  <div class="text-sm flex flex-col text-center font-mono text-slate-500">
16
28
  <span>{{ name }}</span>
17
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
- >{{ 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 class="comma" v-for="(color, indexColor) in detail.value" :key="indexColor">
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,35 +106,51 @@ 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
- v-for="(mark, index) in JSON.parse(String(detail.value))"
104
- :key="index"
138
+ v-for="(mark, markIndex) in JSON.parse(String(detail.value))"
139
+ :key="markIndex"
105
140
  class="item"
106
141
  >
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 :productNumber="productNumber" :copyDisabled="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>
@@ -47,6 +67,7 @@ interface Props {
47
67
  }
48
68
 
49
69
  const props = withDefaults(defineProps<Props>(), {
70
+ price: undefined,
50
71
  bigTile: false,
51
72
  index: null,
52
73
  });
@@ -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 :prcode="prcode" v-if="!String(prcode).includes('+')" />
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>
@@ -139,17 +139,30 @@ const groupedItems = computed(() => {
139
139
  <template>
140
140
  <table class="details-table">
141
141
  <caption v-if="!!$slots.caption || caption">
142
- <slot name="caption">{{ caption }}</slot>
142
+ <slot name="caption">
143
+ {{ caption }}
144
+ </slot>
143
145
  </caption>
144
146
  <colgroup>
145
- <col class="details-table-col" />
146
- <col class="details-table-col" />
147
+ <col class="details-table-col">
148
+ <col class="details-table-col">
147
149
  </colgroup>
148
150
  <tbody>
149
- <tr v-for="(row, index) in groupedItems" :key="index" class="details-table-row">
150
- <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
+ />
151
161
 
152
- <td v-if="'links' in row" class="details-table-cell">
162
+ <td
163
+ v-if="'links' in row"
164
+ class="details-table-cell"
165
+ >
153
166
  <ul class="list-none p-0 m-0">
154
167
  <li
155
168
  v-for="(link, linkIndex) in row.links"
@@ -162,14 +175,22 @@ const groupedItems = computed(() => {
162
175
  'leading-none inline-block mr-2 w-4 min-w-4 h-4 text-gray-400',
163
176
  ]"
164
177
  />
165
- <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
+ >
166
184
  {{ link.name }}
167
185
  </a>
168
186
  </li>
169
187
  </ul>
170
188
  </td>
171
189
 
172
- <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
+ >
173
194
  <ul class="list-none p-0 m-0">
174
195
  <li
175
196
  v-for="(colorItem, colorIndex) in row.value as ColorCode[]"
@@ -187,11 +208,17 @@ const groupedItems = computed(() => {
187
208
  </ul>
188
209
  </td>
189
210
 
190
- <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
+ >
191
215
  <span class="text-gray-700 dark:text-gray-300">{{ row.value }}</span>
192
216
  </td>
193
217
 
194
- <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
+ >
195
222
  <ul class="list-none p-0 m-0">
196
223
  <li
197
224
  v-for="(colorEntry, colourIndex) in row.value as ColorCode[]"
@@ -209,7 +236,10 @@ const groupedItems = computed(() => {
209
236
  </ul>
210
237
  </td>
211
238
 
212
- <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
+ >
213
243
  <ul class="list-none p-0 m-0">
214
244
  <li
215
245
  v-for="(item, itemIndex) in row.value as string[]"
@@ -226,10 +256,15 @@ const groupedItems = computed(() => {
226
256
  v-else-if="'id' in row && isHtmlValue(row.value)"
227
257
  class="details-table-cell"
228
258
  v-html="row.value"
229
- ></td>
259
+ />
230
260
 
231
- <slot v-else-if="'id' in row" :name="row.id">
232
- <td class="details-table-cell">{{ row.value }}</td>
261
+ <slot
262
+ v-else-if="'id' in row"
263
+ :name="row.id"
264
+ >
265
+ <td class="details-table-cell">
266
+ {{ row.value }}
267
+ </td>
233
268
  </slot>
234
269
  </tr>
235
270
  </tbody>
@@ -15,31 +15,33 @@ 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
37
- class="btn-close text-white"
38
39
  v-if="props.showCloseButton"
39
- @click="toggleVisibility()"
40
+ class="btn-close text-white"
40
41
  aria-label="Toggle"
42
+ @click="toggleVisibility()"
41
43
  >
42
- <span class="close close-dark"></span>
44
+ <span class="close close-dark" />
43
45
  </button>
44
46
  </div>
45
47
  <div
@@ -56,12 +58,12 @@ const toggleVisibility = () => {
56
58
  <span data-text="STATE" />
57
59
  </div>
58
60
  <button
59
- class="btn-close"
60
61
  v-if="props.showCloseButton"
61
- @click="toggleVisibility()"
62
+ class="btn-close"
62
63
  aria-label="Toggle"
64
+ @click="toggleVisibility()"
63
65
  >
64
- <span class="close close-light"></span>
66
+ <span class="close close-light" />
65
67
  </button>
66
68
  </div>
67
69
  </template>
@@ -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 class="px-4 py-2 font-semibold" v-for="(thead, index) in theads" :key="index">
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 class="border" v-for="row in props.data" :key="row">
24
- <td class="px-4 py-2" v-for="key in Object.keys(row)" :key="key">
27
+ <tr
28
+ v-for="row in props.data"
29
+ :key="row"
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>
@@ -4,6 +4,7 @@ import { PropType } from 'vue';
4
4
  const props = defineProps({
5
5
  lang: {
6
6
  type: String,
7
+ default: 'en',
7
8
  },
8
9
  translations: {
9
10
  type: Object as PropType<{
@@ -11,12 +12,16 @@ const props = defineProps({
11
12
  title: string | null;
12
13
  name: string | null;
13
14
  } | null>,
15
+ default: null,
14
16
  },
15
17
  });
16
18
  </script>
17
19
 
18
20
  <template>
19
- <div data-pagefind-ignore v-if="props.translations !== null && props.translations.uri">
21
+ <div
22
+ v-if="props.translations !== null && props.translations.uri"
23
+ data-pagefind-ignore
24
+ >
20
25
  <a
21
26
  aria-label="Change language"
22
27
  type="button"
package/src/pwa.ts CHANGED
@@ -3,11 +3,11 @@ import { registerSW } from 'virtual:pwa-register';
3
3
  registerSW({
4
4
  immediate: true,
5
5
  onRegisteredSW(swScriptUrl) {
6
- // eslint-disable-next-line no-undef
6
+
7
7
  console.log('SW registered: ', swScriptUrl);
8
8
  },
9
9
  onOfflineReady() {
10
- // eslint-disable-next-line no-undef
10
+
11
11
  console.log('PWA application ready to work offline');
12
12
  },
13
13
  });