spoko-design-system 0.9.5 → 1.0.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 (179) hide show
  1. package/.astro/content.d.ts +1 -1
  2. package/.astro/settings.json +4 -4
  3. package/.astro/types.d.ts +2 -1
  4. package/.github/dependabot.yml +11 -11
  5. package/.github/todo.yml +3 -3
  6. package/.github/workflows/deploy.yml +39 -39
  7. package/.github/workflows/release.yml +64 -0
  8. package/.releaserc.json +93 -0
  9. package/.stackblitzrc +5 -5
  10. package/.vscode/extensions.json +5 -5
  11. package/.vscode/launch.json +11 -11
  12. package/.vscode/settings.json +5 -5
  13. package/CHANGELOG.md +12 -0
  14. package/CONTRIBUTING.md +183 -0
  15. package/LICENSE +21 -21
  16. package/README.md +116 -116
  17. package/astro-i18next.config.mjs +17 -17
  18. package/astro-i18next.config.ts +10 -10
  19. package/astro.config.mjs +86 -86
  20. package/dev-dist/sw.js +91 -91
  21. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  22. package/icon.config.ts +310 -310
  23. package/index.ts +70 -70
  24. package/package.json +22 -12
  25. package/public/arrow-bottom.svg +7 -7
  26. package/public/fonts/lg.svg +53 -53
  27. package/public/fonts/vwhead-bold-demo.html +549 -549
  28. package/public/fonts/vwhead-regular-demo.html +549 -549
  29. package/public/fonts/vwtext-bold-demo.html +549 -549
  30. package/public/fonts/vwtext-regular-demo.html +549 -549
  31. package/public/github.svg +3 -3
  32. package/public/grid_dot.svg +4 -4
  33. package/public/linkedin.svg +44 -44
  34. package/public/locales/en/translation.json +12 -12
  35. package/public/locales/pl/translation.json +12 -12
  36. package/public/make-scrollable-code-focusable.js +3 -3
  37. package/public/pagefind.yml +3 -3
  38. package/public/polo.blue.svg +29 -29
  39. package/public/spoko.space.svg +71 -71
  40. package/public/twitter.svg +46 -46
  41. package/renovate.json +6 -6
  42. package/sandbox.config.json +11 -11
  43. package/src/MyComponent.astro +8 -8
  44. package/src/components/Badge.vue +19 -19
  45. package/src/components/Badges.vue +21 -21
  46. package/src/components/Breadcrumbs.vue +94 -94
  47. package/src/components/Button.vue +101 -101
  48. package/src/components/ButtonCopy.astro +183 -183
  49. package/src/components/ButtonCopy.vue +36 -36
  50. package/src/components/Card.astro +27 -27
  51. package/src/components/Carousel.astro +26 -26
  52. package/src/components/Category/CategoriesCarousel.astro +101 -101
  53. package/src/components/Category/CategoryDetails.astro +169 -169
  54. package/src/components/Category/CategoryLink.vue +28 -28
  55. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  56. package/src/components/Category/CategoryTile.astro +37 -37
  57. package/src/components/Category/CategoryViewToggler.astro +89 -89
  58. package/src/components/Category/SubCategoryLink.vue +19 -19
  59. package/src/components/Copyright.astro +12 -12
  60. package/src/components/Date.astro +7 -7
  61. package/src/components/Faq.astro +33 -33
  62. package/src/components/FaqItem.astro +80 -80
  63. package/src/components/FeaturesList.vue +37 -37
  64. package/src/components/FuckRussia.vue +62 -62
  65. package/src/components/HandDrive.astro +55 -29
  66. package/src/components/Header/Header.astro +210 -210
  67. package/src/components/Header/SkipToContent.astro +1 -1
  68. package/src/components/Headline.vue +87 -87
  69. package/src/components/Image.astro +30 -30
  70. package/src/components/LeftSidebar.astro +53 -53
  71. package/src/components/MainColors.vue +22 -22
  72. package/src/components/MainInput.vue +15 -15
  73. package/src/components/Modal.astro +27 -27
  74. package/src/components/PageContent.astro +5 -5
  75. package/src/components/PartNumber.vue +27 -27
  76. package/src/components/Post/PostCategories.astro +41 -41
  77. package/src/components/Post/PostCategories.vue +30 -30
  78. package/src/components/PostHeader.astro +103 -103
  79. package/src/components/PrCode.vue +141 -141
  80. package/src/components/Product/ProductButton.vue +18 -18
  81. package/src/components/Product/ProductCarousel.astro +35 -35
  82. package/src/components/Product/ProductColors.vue +1 -1
  83. package/src/components/Product/ProductEngineType.vue +42 -42
  84. package/src/components/Product/ProductImage.astro +40 -40
  85. package/src/components/Product/ProductLink.astro +101 -101
  86. package/src/components/Product/ProductLink.vue +59 -59
  87. package/src/components/Product/ProductLinkInfo.astro +37 -37
  88. package/src/components/Product/ProductModels.vue +4 -2
  89. package/src/components/Product/ProductNumber.astro +60 -60
  90. package/src/components/Product/ProductPositions.vue +1 -1
  91. package/src/components/ProductCarousel.astro +38 -38
  92. package/src/components/ProductCodes.vue +39 -39
  93. package/src/components/ProductDetailName.vue +52 -52
  94. package/src/components/ProductDetailsList.vue +216 -216
  95. package/src/components/ProductTile.astro +48 -48
  96. package/src/components/Quote.vue +23 -23
  97. package/src/components/ReloadPrompt.astro +50 -50
  98. package/src/components/SlimBanner.vue +72 -72
  99. package/src/components/Table.vue +32 -32
  100. package/src/components/TableOfContents.astro +15 -15
  101. package/src/components/Translations.vue +23 -23
  102. package/src/components/flags/FlagPL.vue +3 -3
  103. package/src/components/flags/FlagUA.vue +2 -2
  104. package/src/components/{Layout → layout}/CallToAction.astro +52 -52
  105. package/src/components/{Layout → layout}/Container.astro +7 -7
  106. package/src/components/{Layout → layout}/Header.astro +80 -80
  107. package/src/config.ts +56 -56
  108. package/src/design.config.ts +98 -98
  109. package/src/env.d.ts +6 -6
  110. package/src/layouts/Layout.astro +61 -61
  111. package/src/layouts/MainLayout.astro +81 -81
  112. package/src/layouts/partials/FooterCommon.astro +4 -4
  113. package/src/layouts/partials/HeadCommon.astro +44 -44
  114. package/src/layouts/partials/HeadSEO.astro +41 -41
  115. package/src/pages/components/badges.mdx +57 -57
  116. package/src/pages/components/breadcrumbs.mdx +139 -139
  117. package/src/pages/components/buttons.mdx +360 -360
  118. package/src/pages/components/card.mdx +294 -294
  119. package/src/pages/components/carousel.mdx +62 -62
  120. package/src/pages/components/copyright.mdx +42 -42
  121. package/src/pages/components/details-list.mdx +115 -115
  122. package/src/pages/components/features-list.mdx +37 -37
  123. package/src/pages/components/flags.mdx +49 -49
  124. package/src/pages/components/fuck-russia.mdx +39 -39
  125. package/src/pages/components/hand-drive.mdx +105 -38
  126. package/src/pages/components/headline.mdx +137 -137
  127. package/src/pages/components/icons.astro +135 -135
  128. package/src/pages/components/image.mdx +513 -513
  129. package/src/pages/components/input.mdx +367 -367
  130. package/src/pages/components/jumbotron.mdx +359 -359
  131. package/src/pages/components/modal.mdx +64 -64
  132. package/src/pages/components/post-header.mdx +64 -64
  133. package/src/pages/components/pr-code.mdx +65 -65
  134. package/src/pages/components/product-number.mdx +58 -58
  135. package/src/pages/components/product-tile.mdx +51 -51
  136. package/src/pages/components/quote.mdx +33 -33
  137. package/src/pages/components/slimbanner.mdx +35 -35
  138. package/src/pages/components/table.mdx +108 -108
  139. package/src/pages/core/colors.mdx +10 -10
  140. package/src/pages/core/grid.mdx +89 -89
  141. package/src/pages/core/introduction.mdx +77 -77
  142. package/src/pages/core/shadows.astro +20 -20
  143. package/src/pages/core/typography.astro +49 -49
  144. package/src/pages/index.astro +133 -133
  145. package/src/pages/patterns/introduction.mdx +60 -60
  146. package/src/pwa.ts +12 -12
  147. package/src/styles/_variables.scss +70 -70
  148. package/src/styles/base/base.css +184 -184
  149. package/src/styles/base/grid.css +92 -92
  150. package/src/styles/base/typography.css +70 -70
  151. package/src/styles/content.css +73 -73
  152. package/src/styles/main.css +7 -7
  153. package/src/types/Product.ts +31 -31
  154. package/src/types/astro.d.ts +3 -3
  155. package/src/utils/product/getPriceFormatted.ts +15 -15
  156. package/src/utils/product/getProductChecklist.ts +17 -17
  157. package/src/utils/product/useFormatProductNumber.ts +41 -41
  158. package/src/utils/seo/getShorterDescription.ts +14 -14
  159. package/src/utils/text/formatDate.ts +5 -5
  160. package/src/utils/text/formatLocaleNumber.ts +6 -6
  161. package/src/utils/text/formatPad.ts +12 -12
  162. package/src/utils/text/getNumberFormatted.ts +33 -33
  163. package/src/utils/text/getTranslatedLink.ts +5 -5
  164. package/src/utils/text.ts +19 -19
  165. package/tailwind.config.cjs +8 -8
  166. package/tsconfig.json +28 -28
  167. package/uno-config/index.ts +268 -268
  168. package/uno-config/theme/breakpoints.ts +9 -9
  169. package/uno-config/theme/colors.ts +64 -64
  170. package/uno-config/theme/dimensions.ts +17 -17
  171. package/uno-config/theme/effects.ts +14 -14
  172. package/uno-config/theme/grid.ts +10 -10
  173. package/uno-config/theme/index.ts +28 -28
  174. package/uno-config/theme/shortcuts/buttons.ts +53 -53
  175. package/uno-config/theme/shortcuts/components.ts +123 -123
  176. package/uno-config/theme/shortcuts/index.ts +20 -20
  177. package/uno-config/theme/shortcuts/layout.ts +74 -74
  178. package/uno-config/theme/typography.ts +29 -29
  179. package/uno.config.ts +2 -2
@@ -1,31 +1,31 @@
1
- <script setup lang="ts">
2
- interface Category {
3
- id: number;
4
- name: string;
5
- slug: string;
6
- description: string;
7
- link: string;
8
- }
9
-
10
- interface Props {
11
- category: Category;
12
- active?: boolean;
13
- }
14
-
15
- const props = withDefaults(defineProps<Props>(), {
16
- active: false
17
- });
18
- </script>
19
-
20
- <template>
21
- <a
22
- :href="props.category.link"
23
- class="category-link-base"
24
- :class="{ 'category-link-active': props.active }"
25
- :title="props.category.description || props.category.name"
26
- >
27
- {{ props.category.name }}
28
- </a>
29
- </template>
30
-
1
+ <script setup lang="ts">
2
+ interface Category {
3
+ id: number;
4
+ name: string;
5
+ slug: string;
6
+ description: string;
7
+ link: string;
8
+ }
9
+
10
+ interface Props {
11
+ category: Category;
12
+ active?: boolean;
13
+ }
14
+
15
+ const props = withDefaults(defineProps<Props>(), {
16
+ active: false
17
+ });
18
+ </script>
19
+
20
+ <template>
21
+ <a
22
+ :href="props.category.link"
23
+ class="category-link-base"
24
+ :class="{ 'category-link-active': props.active }"
25
+ :title="props.category.description || props.category.name"
26
+ >
27
+ {{ props.category.name }}
28
+ </a>
29
+ </template>
30
+
31
31
  <!-- No <style> section - all styles are now UnoCSS shortcuts -->
@@ -1,103 +1,103 @@
1
- ---
2
- interface Props {
3
- title: string;
4
- image: string;
5
- date?: string | null;
6
- lang: string;
7
-
8
- author: {
9
- firstName: string;
10
- name: string;
11
- } | null;
12
-
13
- categories: {
14
- name: string;
15
- uri: string;
16
- }[];
17
- }
18
-
19
- const { image, title, categories, date, author, lang } = Astro.props;
20
- import PostCategories from "./Post/PostCategories.astro";
21
- import Date from "./Date.astro";
22
- ---
23
-
24
- <header
25
- class="post-header pt-11 w-full justify-center text-white z-2 bg-blue-darkest"
26
- >
27
- <div class="heading flex flex-wrap">
28
- <div
29
- class="w-full sm:max-w-[640px] md:max-w-3xl lg:max-w-5xl xl:max-w-7xl 2xl:max-w-[1536px] px-4 py-5 flex flex-col flex-wrap"
30
- >
31
- <h1
32
- class="font-textbold text-2xl mb-1 sm:text-3xl md:(text-4xl mb-3) xl:text-6xl mt-1 order-2 line-clamp-3 pb-1"
33
- >
34
- {title}
35
- </h1>
36
- <PostCategories categories={categories} lang={lang} />
37
- <div class="order-3 flex items-center text-gray-1 00">
38
- {
39
- author && (
40
- <span class="text-sm" title={author.firstName} data-pagefind-ignore>
41
- {author.name}
42
- </span>
43
- )
44
- }
45
- {author && date && <span class="mx-1">-</span>}
46
- {date && <Date date={date} />}
47
- </div>
48
- </div>
49
- </div>
50
- <div class="featured-image">
51
- <img src={image} alt={title} />
52
- </div>
53
- </header>
54
-
55
- <style >
56
- .post-header {
57
- @apply flex relative items-center;
58
- min-height: 19vw;
59
- }
60
-
61
- .heading {
62
- @apply text-white relative flex items-center justify-center mt-auto w-full pt-11 z-[2];
63
- }
64
-
65
- .featured-image {
66
- @apply absolute top-0 bottom-0 left-0 right-0 overflow-hidden w-full bg-gray-100 z-1;
67
-
68
- &:before,
69
- &:after {
70
- @apply content-empty top-0 bottom-0 left-0 right-0 absolute;
71
- }
72
-
73
- &:before {
74
- z-index: 5;
75
- background: linear-gradient(
76
- 0deg,
77
- rgba(0, 0, 0, 0.95),
78
- transparent 30%,
79
- transparent 70%,
80
- rgba(0, 0, 0, 0.95)
81
- );
82
- opacity: 0.5;
83
- }
84
-
85
- &:after {
86
- background: radial-gradient(circle at 50% 85%, #00437a 0, #001e50 100%);
87
- opacity: 0.8;
88
- }
89
-
90
- img {
91
- @apply w-full h-full object-cover block max-w-full;
92
- }
93
- }
94
- </style>
95
-
96
- <style is:global>
97
- .icon {
98
- @apply text-brand-secondary mr-2;
99
- width: 1em;
100
- height: 1em;
101
- fill: currentcolor;
102
- }
103
- </style>
1
+ ---
2
+ interface Props {
3
+ title: string;
4
+ image: string;
5
+ date?: string | null;
6
+ lang: string;
7
+
8
+ author: {
9
+ firstName: string;
10
+ name: string;
11
+ } | null;
12
+
13
+ categories: {
14
+ name: string;
15
+ uri: string;
16
+ }[];
17
+ }
18
+
19
+ const { image, title, categories, date, author, lang } = Astro.props;
20
+ import PostCategories from "./Post/PostCategories.astro";
21
+ import Date from "./Date.astro";
22
+ ---
23
+
24
+ <header
25
+ class="post-header pt-11 w-full justify-center text-white z-2 bg-blue-darkest"
26
+ >
27
+ <div class="heading flex flex-wrap">
28
+ <div
29
+ class="w-full sm:max-w-[640px] md:max-w-3xl lg:max-w-5xl xl:max-w-7xl 2xl:max-w-[1536px] px-4 py-5 flex flex-col flex-wrap"
30
+ >
31
+ <h1
32
+ class="font-textbold text-2xl mb-1 sm:text-3xl md:(text-4xl mb-3) xl:text-6xl mt-1 order-2 line-clamp-3 pb-1"
33
+ >
34
+ {title}
35
+ </h1>
36
+ <PostCategories categories={categories} lang={lang} />
37
+ <div class="order-3 flex items-center text-gray-1 00">
38
+ {
39
+ author && (
40
+ <span class="text-sm" title={author.firstName} data-pagefind-ignore>
41
+ {author.name}
42
+ </span>
43
+ )
44
+ }
45
+ {author && date && <span class="mx-1">-</span>}
46
+ {date && <Date date={date} />}
47
+ </div>
48
+ </div>
49
+ </div>
50
+ <div class="featured-image">
51
+ <img src={image} alt={title} />
52
+ </div>
53
+ </header>
54
+
55
+ <style >
56
+ .post-header {
57
+ @apply flex relative items-center;
58
+ min-height: 19vw;
59
+ }
60
+
61
+ .heading {
62
+ @apply text-white relative flex items-center justify-center mt-auto w-full pt-11 z-[2];
63
+ }
64
+
65
+ .featured-image {
66
+ @apply absolute top-0 bottom-0 left-0 right-0 overflow-hidden w-full bg-gray-100 z-1;
67
+
68
+ &:before,
69
+ &:after {
70
+ @apply content-empty top-0 bottom-0 left-0 right-0 absolute;
71
+ }
72
+
73
+ &:before {
74
+ z-index: 5;
75
+ background: linear-gradient(
76
+ 0deg,
77
+ rgba(0, 0, 0, 0.95),
78
+ transparent 30%,
79
+ transparent 70%,
80
+ rgba(0, 0, 0, 0.95)
81
+ );
82
+ opacity: 0.5;
83
+ }
84
+
85
+ &:after {
86
+ background: radial-gradient(circle at 50% 85%, #00437a 0, #001e50 100%);
87
+ opacity: 0.8;
88
+ }
89
+
90
+ img {
91
+ @apply w-full h-full object-cover block max-w-full;
92
+ }
93
+ }
94
+ </style>
95
+
96
+ <style is:global>
97
+ .icon {
98
+ @apply text-brand-secondary mr-2;
99
+ width: 1em;
100
+ height: 1em;
101
+ fill: currentcolor;
102
+ }
103
+ </style>
@@ -1,142 +1,142 @@
1
- <script lang="ts" setup>
2
- /*
3
- VAG group (VW/Audi/Skoda/Seat/Porsche/Bentley/Lamborghini/Ducati/Cupra/Scania/MAN) manufacturer PR-Code
4
- */
5
-
6
- import type { PropType } from 'vue'
7
-
8
- const props = defineProps({
9
- prcode: {
10
- type: String,
11
- default: null,
12
- required: true,
13
- },
14
- isPdp: {
15
- type: Boolean,
16
- default: false,
17
- required: false,
18
- },
19
- })
20
- </script>
21
-
22
- <template>
23
- <span data-pagefind-filter="PR-Code" class="btn-prcode "
24
- :class="`btn-prcode--${props.prcode} ${props.isPdp ? ' btn-prcode--pdp' : ''}`">
25
- {{ props.prcode }}
26
- </span>
27
- </template>
28
-
29
- <style>
30
- .btn-prcode--pdp {
31
- @apply mb-1;
32
- }
33
-
34
- .btn-prcode::before {
35
- @apply rounded-2 shadow-sm py-0.5 px-2 bg-gray-100 whitespace-nowrap text-xs dark:text-black dark:bg-accent-light text-center z-50;
36
- display: none;
37
- position: absolute;
38
- top: -10px;
39
- transform: translateY(-50%) translateX(-50%);
40
- left: 50%;
41
- }
42
-
43
- .btn-prcode:hover::before {
44
- display: block;
45
- }
46
-
47
- .btn-prcode--2JK {
48
- color: #f3881d;
49
- }
50
-
51
- .btn-prcode--2JK::before {
52
- content: 'CROSS';
53
- }
54
-
55
- .btn-prcode--1LR::before,
56
- .btn-prcode--1ZG::before,
57
- .btn-prcode--1ZJ::before {
58
- content: '⌀ 256 mm';
59
- }
60
-
61
- .btn-prcode--1KD::before,
62
- .btn-prcode--1ZP::before,
63
- .btn-prcode--1ZR::before {
64
- content: '⌀ 310 mm';
65
- }
66
-
67
- .btn-prcode--1ZD::before,
68
- .btn-prcode--1ZC::before,
69
- .btn-prcode--1LN::before {
70
- content: '⌀ 288 mm; LUCAS';
71
- }
72
-
73
- .btn-prcode--2JZ {
74
- @apply text-accent-light;
75
- }
76
-
77
- .btn-prcode--2JZ::before {
78
- content: 'Bluemotion';
79
- }
80
-
81
- .btn-prcode--7L6 {
82
- @apply text-accent-light;
83
- }
84
-
85
- .btn-prcode--7L6::before {
86
- content: 'Bluemotion (CFWA + start-stop)';
87
- }
88
-
89
- .btn-prcode--1KK::before,
90
- .btn-prcode--1KT::before,
91
- .btn-prcode--1KV::before,
92
- .btn-prcode--1LV::before,
93
- .btn-prcode--2EJ::before {
94
- content: '⌀ 230 mm';
95
- }
96
-
97
- .btn-prcode--2JE {
98
- @apply text-accent-dark;
99
- }
100
-
101
- .btn-prcode--2JE::before {
102
- content: 'BlueGT';
103
- }
104
-
105
- .btn-prcode--2JP::before {
106
- content: 'R-Line';
107
- }
108
-
109
- .btn-prcode--E5M,
110
- .btn-prcode--1KD,
111
- .btn-prcode--1ZP,
112
- .btn-prcode--2JQ,
113
- .btn-prcode--TA2 {
114
- color: blue;
115
- }
116
-
117
- .btn-prcode--E5M::before,
118
- .btn-prcode--1KD::before,
119
- .btn-prcode--1ZP::before,
120
- .btn-prcode--2JQ::before,
121
- .btn-prcode--TA2::before {
122
- content: 'R WRC Street';
123
- }
124
-
125
- .btn-prcode--1KV,
126
- .btn-prcode--1ZD,
127
- .btn-prcode--1ZR,
128
- .btn-prcode--0NH,
129
- .btn-prcode--2JD {
130
- color: red;
131
- }
132
-
133
- .btn-prcode--1KV::before,
134
- .btn-prcode--1ZD::before,
135
- .btn-prcode--1ZR::before,
136
- .btn-prcode--0NH::before,
137
- .btn-prcode--2JD::before {
138
- content: 'GTI';
139
- }
140
-
141
-
1
+ <script lang="ts" setup>
2
+ /*
3
+ VAG group (VW/Audi/Skoda/Seat/Porsche/Bentley/Lamborghini/Ducati/Cupra/Scania/MAN) manufacturer PR-Code
4
+ */
5
+
6
+ import type { PropType } from 'vue'
7
+
8
+ const props = defineProps({
9
+ prcode: {
10
+ type: String,
11
+ default: null,
12
+ required: true,
13
+ },
14
+ isPdp: {
15
+ type: Boolean,
16
+ default: false,
17
+ required: false,
18
+ },
19
+ })
20
+ </script>
21
+
22
+ <template>
23
+ <span data-pagefind-filter="PR-Code" class="btn-prcode "
24
+ :class="`btn-prcode--${props.prcode} ${props.isPdp ? ' btn-prcode--pdp' : ''}`">
25
+ {{ props.prcode }}
26
+ </span>
27
+ </template>
28
+
29
+ <style>
30
+ .btn-prcode--pdp {
31
+ @apply mb-1;
32
+ }
33
+
34
+ .btn-prcode::before {
35
+ @apply rounded-2 shadow-sm py-0.5 px-2 bg-gray-100 whitespace-nowrap text-xs dark:text-black dark:bg-accent-light text-center z-50;
36
+ display: none;
37
+ position: absolute;
38
+ top: -10px;
39
+ transform: translateY(-50%) translateX(-50%);
40
+ left: 50%;
41
+ }
42
+
43
+ .btn-prcode:hover::before {
44
+ display: block;
45
+ }
46
+
47
+ .btn-prcode--2JK {
48
+ color: #f3881d;
49
+ }
50
+
51
+ .btn-prcode--2JK::before {
52
+ content: 'CROSS';
53
+ }
54
+
55
+ .btn-prcode--1LR::before,
56
+ .btn-prcode--1ZG::before,
57
+ .btn-prcode--1ZJ::before {
58
+ content: '⌀ 256 mm';
59
+ }
60
+
61
+ .btn-prcode--1KD::before,
62
+ .btn-prcode--1ZP::before,
63
+ .btn-prcode--1ZR::before {
64
+ content: '⌀ 310 mm';
65
+ }
66
+
67
+ .btn-prcode--1ZD::before,
68
+ .btn-prcode--1ZC::before,
69
+ .btn-prcode--1LN::before {
70
+ content: '⌀ 288 mm; LUCAS';
71
+ }
72
+
73
+ .btn-prcode--2JZ {
74
+ @apply text-accent-light;
75
+ }
76
+
77
+ .btn-prcode--2JZ::before {
78
+ content: 'Bluemotion';
79
+ }
80
+
81
+ .btn-prcode--7L6 {
82
+ @apply text-accent-light;
83
+ }
84
+
85
+ .btn-prcode--7L6::before {
86
+ content: 'Bluemotion (CFWA + start-stop)';
87
+ }
88
+
89
+ .btn-prcode--1KK::before,
90
+ .btn-prcode--1KT::before,
91
+ .btn-prcode--1KV::before,
92
+ .btn-prcode--1LV::before,
93
+ .btn-prcode--2EJ::before {
94
+ content: '⌀ 230 mm';
95
+ }
96
+
97
+ .btn-prcode--2JE {
98
+ @apply text-accent-dark;
99
+ }
100
+
101
+ .btn-prcode--2JE::before {
102
+ content: 'BlueGT';
103
+ }
104
+
105
+ .btn-prcode--2JP::before {
106
+ content: 'R-Line';
107
+ }
108
+
109
+ .btn-prcode--E5M,
110
+ .btn-prcode--1KD,
111
+ .btn-prcode--1ZP,
112
+ .btn-prcode--2JQ,
113
+ .btn-prcode--TA2 {
114
+ color: blue;
115
+ }
116
+
117
+ .btn-prcode--E5M::before,
118
+ .btn-prcode--1KD::before,
119
+ .btn-prcode--1ZP::before,
120
+ .btn-prcode--2JQ::before,
121
+ .btn-prcode--TA2::before {
122
+ content: 'R WRC Street';
123
+ }
124
+
125
+ .btn-prcode--1KV,
126
+ .btn-prcode--1ZD,
127
+ .btn-prcode--1ZR,
128
+ .btn-prcode--0NH,
129
+ .btn-prcode--2JD {
130
+ color: red;
131
+ }
132
+
133
+ .btn-prcode--1KV::before,
134
+ .btn-prcode--1ZD::before,
135
+ .btn-prcode--1ZR::before,
136
+ .btn-prcode--0NH::before,
137
+ .btn-prcode--2JD::before {
138
+ content: 'GTI';
139
+ }
140
+
141
+
142
142
  </style>
@@ -1,18 +1,18 @@
1
- <script setup lang="ts">
2
- const props = defineProps({
3
- shadow: {
4
- type: Boolean,
5
- default: false,
6
- required: false,
7
- },
8
- })
9
- </script>
10
-
11
- <template>
12
- <button
13
- class="product-button"
14
- :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''"
15
- >
16
- <slot />
17
- </button>
18
- </template>
1
+ <script setup lang="ts">
2
+ const props = defineProps({
3
+ shadow: {
4
+ type: Boolean,
5
+ default: false,
6
+ required: false,
7
+ },
8
+ })
9
+ </script>
10
+
11
+ <template>
12
+ <button
13
+ class="product-button"
14
+ :class="props.shadow ? 'drop-shadow hover:(drop-shadow-md)' : ''"
15
+ >
16
+ <slot />
17
+ </button>
18
+ </template>
@@ -1,36 +1,36 @@
1
- ---
2
- import ProductLink from "./ProductLink.astro";
3
-
4
- // Get the product directly from the prop on render
5
- const { locale, class: className, products, isShopProduct = false, ...rest } = Astro.props;
6
-
7
- ---
8
-
9
-
10
- {
11
- products && products.length && (
12
- <swiper-container slides-per-view="auto" space-between="0" class="flex"
13
- itemscope itemtype="https://schema.org/ItemList">
14
- {
15
- products.map((product, index) => (
16
- <swiper-slide class="product-carousel"
17
- itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" >
18
- <ProductLink productObject={product} locale={locale} index={index+1} bigTile loading="eager" isShopProduct={isShopProduct} />
19
- <div class="swiper-lazy-preloader"></div>
20
- </swiper-slide>
21
- ))
22
- }
23
- </swiper-container>
24
- )
25
- }
26
-
27
- <style>
28
- .similar-section {
29
- @apply relative z-20;
30
-
31
- &:hover {
32
- content-visibility: visible;
33
- }
34
- }
35
-
1
+ ---
2
+ import ProductLink from "./ProductLink.astro";
3
+
4
+ // Get the product directly from the prop on render
5
+ const { locale, class: className, products, isShopProduct = false, ...rest } = Astro.props;
6
+
7
+ ---
8
+
9
+
10
+ {
11
+ products && products.length && (
12
+ <swiper-container slides-per-view="auto" space-between="0" class="flex"
13
+ itemscope itemtype="https://schema.org/ItemList">
14
+ {
15
+ products.map((product, index) => (
16
+ <swiper-slide class="product-carousel"
17
+ itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" >
18
+ <ProductLink productObject={product} locale={locale} index={index+1} bigTile loading="eager" isShopProduct={isShopProduct} />
19
+ <div class="swiper-lazy-preloader"></div>
20
+ </swiper-slide>
21
+ ))
22
+ }
23
+ </swiper-container>
24
+ )
25
+ }
26
+
27
+ <style>
28
+ .similar-section {
29
+ @apply relative z-20;
30
+
31
+ &:hover {
32
+ content-visibility: visible;
33
+ }
34
+ }
35
+
36
36
  </style>
@@ -3,7 +3,7 @@ import type { PropType } from 'vue'
3
3
 
4
4
  const props = defineProps({
5
5
  colors: {
6
- type: Object as PropType<{id: number, slug: string, name: string}[]>,
6
+ type: Array as PropType<{id: number, slug: string, name: string}[]>,
7
7
  default: null,
8
8
  required: true,
9
9
  },