spoko-design-system 0.7.5 → 0.7.6

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 (169) hide show
  1. package/.astro/settings.json +4 -4
  2. package/.github/dependabot.yml +11 -11
  3. package/.github/todo.yml +3 -3
  4. package/.github/workflows/deploy.yml +39 -39
  5. package/.stackblitzrc +5 -5
  6. package/.vscode/extensions.json +5 -5
  7. package/.vscode/launch.json +11 -11
  8. package/.vscode/settings.json +5 -5
  9. package/LICENSE +21 -21
  10. package/README.md +114 -114
  11. package/astro-i18next.config.mjs +17 -17
  12. package/astro-i18next.config.ts +10 -10
  13. package/astro.config.mjs +86 -86
  14. package/dev-dist/sw.js +91 -91
  15. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  16. package/icon.config.ts +309 -309
  17. package/index.ts +66 -66
  18. package/package.json +1 -1
  19. package/public/fonts/lg.svg +53 -53
  20. package/public/fonts/vwhead-bold-demo.html +549 -549
  21. package/public/fonts/vwhead-regular-demo.html +549 -549
  22. package/public/fonts/vwtext-bold-demo.html +549 -549
  23. package/public/fonts/vwtext-regular-demo.html +549 -549
  24. package/public/github.svg +3 -3
  25. package/public/grid_dot.svg +4 -4
  26. package/public/linkedin.svg +44 -44
  27. package/public/locales/en/translation.json +8 -8
  28. package/public/locales/pl/translation.json +8 -8
  29. package/public/make-scrollable-code-focusable.js +3 -3
  30. package/public/pagefind.yml +3 -3
  31. package/public/polo.blue.svg +29 -29
  32. package/public/spoko.space.svg +71 -71
  33. package/public/twitter.svg +46 -46
  34. package/renovate.json +6 -6
  35. package/sandbox.config.json +11 -11
  36. package/src/MyComponent.astro +8 -8
  37. package/src/components/Badge.vue +19 -19
  38. package/src/components/Badges.vue +21 -21
  39. package/src/components/Breadcrumbs.vue +107 -107
  40. package/src/components/Button.vue +101 -101
  41. package/src/components/ButtonCopy.astro +183 -183
  42. package/src/components/ButtonCopy.vue +36 -36
  43. package/src/components/Card.astro +27 -27
  44. package/src/components/Carousel.astro +26 -26
  45. package/src/components/Category/CategoriesCarousel.astro +101 -101
  46. package/src/components/Category/CategoryDetails.astro +169 -169
  47. package/src/components/Category/CategoryLink.vue +28 -28
  48. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  49. package/src/components/Category/CategoryTile.astro +37 -37
  50. package/src/components/Category/CategoryViewToggler.astro +89 -89
  51. package/src/components/Category/SubCategoryLink.vue +19 -19
  52. package/src/components/Copyright.astro +12 -12
  53. package/src/components/Date.astro +7 -7
  54. package/src/components/Faq.astro +33 -33
  55. package/src/components/FaqItem.astro +80 -80
  56. package/src/components/FeaturesList.vue +41 -41
  57. package/src/components/FuckRussia.vue +62 -62
  58. package/src/components/HandDrive.astro +29 -29
  59. package/src/components/Header/Header.astro +210 -210
  60. package/src/components/Header/SkipToContent.astro +1 -1
  61. package/src/components/Headline.vue +48 -48
  62. package/src/components/Image.astro +30 -30
  63. package/src/components/LeftSidebar.astro +53 -53
  64. package/src/components/MainColors.vue +22 -22
  65. package/src/components/MainInput.vue +15 -15
  66. package/src/components/Modal.astro +27 -27
  67. package/src/components/PageContent.astro +5 -5
  68. package/src/components/PartNumber.vue +27 -27
  69. package/src/components/Post/PostCategories.astro +41 -41
  70. package/src/components/Post/PostCategories.vue +39 -39
  71. package/src/components/PostHeader.astro +103 -103
  72. package/src/components/PrCode.vue +141 -141
  73. package/src/components/Product/ProductButton.vue +18 -18
  74. package/src/components/Product/ProductCarousel.astro +35 -35
  75. package/src/components/Product/ProductCodes.vue +174 -174
  76. package/src/components/Product/ProductEngineType.vue +42 -42
  77. package/src/components/Product/ProductImage.astro +40 -40
  78. package/src/components/Product/ProductLink.astro +101 -101
  79. package/src/components/Product/ProductLink.vue +59 -59
  80. package/src/components/Product/ProductLinkInfo.astro +37 -37
  81. package/src/components/Product/ProductNumber.astro +60 -60
  82. package/src/components/ProductCarousel.astro +38 -38
  83. package/src/components/ProductCodes.vue +39 -39
  84. package/src/components/ProductDetailName.vue +52 -52
  85. package/src/components/ProductDetailsList.vue +157 -157
  86. package/src/components/ProductTile.astro +48 -48
  87. package/src/components/Quote.vue +23 -23
  88. package/src/components/ReloadPrompt.astro +50 -50
  89. package/src/components/SlimBanner.vue +72 -72
  90. package/src/components/Table.vue +32 -32
  91. package/src/components/TableOfContents.astro +15 -15
  92. package/src/components/Translations.vue +23 -23
  93. package/src/components/flags/FlagPL.vue +3 -3
  94. package/src/components/flags/FlagUA.vue +2 -2
  95. package/src/components/layout/Container.astro +7 -7
  96. package/src/components/layout/Header.astro +80 -80
  97. package/src/config.ts +56 -56
  98. package/src/design.config.ts +98 -98
  99. package/src/env.d.ts +6 -6
  100. package/src/layouts/Layout.astro +61 -61
  101. package/src/layouts/MainLayout.astro +81 -81
  102. package/src/layouts/partials/FooterCommon.astro +4 -4
  103. package/src/layouts/partials/HeadCommon.astro +44 -44
  104. package/src/layouts/partials/HeadSEO.astro +41 -41
  105. package/src/pages/components/badges.mdx +57 -57
  106. package/src/pages/components/breadcrumbs.mdx +139 -139
  107. package/src/pages/components/buttons.mdx +360 -360
  108. package/src/pages/components/card.mdx +294 -294
  109. package/src/pages/components/carousel.mdx +62 -62
  110. package/src/pages/components/copyright.mdx +42 -42
  111. package/src/pages/components/details-list.mdx +115 -115
  112. package/src/pages/components/features-list.mdx +37 -37
  113. package/src/pages/components/flags.mdx +49 -49
  114. package/src/pages/components/fuck-russia.mdx +39 -39
  115. package/src/pages/components/hand-drive.mdx +38 -38
  116. package/src/pages/components/headline.mdx +152 -152
  117. package/src/pages/components/icons.astro +135 -135
  118. package/src/pages/components/image.mdx +513 -513
  119. package/src/pages/components/input.mdx +367 -367
  120. package/src/pages/components/jumbotron.mdx +359 -359
  121. package/src/pages/components/modal.mdx +64 -64
  122. package/src/pages/components/post-header.mdx +64 -64
  123. package/src/pages/components/pr-code.mdx +65 -65
  124. package/src/pages/components/product-number.mdx +58 -58
  125. package/src/pages/components/product-tile.mdx +51 -51
  126. package/src/pages/components/quote.mdx +33 -33
  127. package/src/pages/components/slimbanner.mdx +35 -35
  128. package/src/pages/components/table.mdx +108 -108
  129. package/src/pages/core/colors.mdx +10 -10
  130. package/src/pages/core/grid.mdx +89 -89
  131. package/src/pages/core/introduction.mdx +77 -77
  132. package/src/pages/core/shadows.astro +20 -20
  133. package/src/pages/core/typography.astro +49 -49
  134. package/src/pages/index.astro +133 -133
  135. package/src/pages/patterns/introduction.mdx +60 -60
  136. package/src/pwa.ts +12 -12
  137. package/src/styles/_variables.scss +70 -70
  138. package/src/styles/base/base.css +184 -184
  139. package/src/styles/base/grid.css +92 -92
  140. package/src/styles/base/typography.css +70 -70
  141. package/src/styles/content.css +73 -73
  142. package/src/styles/main.css +7 -7
  143. package/src/types/Product.ts +31 -31
  144. package/src/types/astro.d.ts +3 -3
  145. package/src/utils/product/getPriceFormatted.ts +15 -15
  146. package/src/utils/product/getProductChecklist.ts +17 -17
  147. package/src/utils/product/useFormatProductNumber.ts +41 -41
  148. package/src/utils/seo/getShorterDescription.ts +14 -14
  149. package/src/utils/text/formatDate.ts +5 -5
  150. package/src/utils/text/formatLocaleNumber.ts +6 -6
  151. package/src/utils/text/formatPad.ts +12 -12
  152. package/src/utils/text/getNumberFormatted.ts +33 -33
  153. package/src/utils/text/getTranslatedLink.ts +5 -5
  154. package/src/utils/text.ts +19 -19
  155. package/tailwind.config.cjs +8 -8
  156. package/tsconfig.json +28 -28
  157. package/uno-config/index.ts +232 -232
  158. package/uno-config/theme/breakpoints.ts +9 -9
  159. package/uno-config/theme/colors.ts +64 -64
  160. package/uno-config/theme/dimensions.ts +17 -17
  161. package/uno-config/theme/effects.ts +14 -14
  162. package/uno-config/theme/grid.ts +10 -10
  163. package/uno-config/theme/index.ts +28 -28
  164. package/uno-config/theme/shortcuts/buttons.ts +53 -53
  165. package/uno-config/theme/shortcuts/components.ts +92 -92
  166. package/uno-config/theme/shortcuts/index.ts +20 -20
  167. package/uno-config/theme/shortcuts/layout.ts +64 -64
  168. package/uno-config/theme/typography.ts +29 -29
  169. package/uno.config.ts +2 -2
@@ -1,39 +1,39 @@
1
- <script lang="ts" setup>
2
- import type { PropType } from 'vue'
3
- import PrCode from './PrCode.vue';
4
-
5
- const props = defineProps({
6
- prcodes: {
7
- type: Object as PropType<string[] | null>,
8
- default: null,
9
- required: true,
10
- },
11
- isPdp: {
12
- type: Boolean,
13
- default: false,
14
- required: false,
15
- },
16
- })
17
-
18
- const codes = props.prcodes || []
19
- const decodedCodes = codes ? codes.sort() : []
20
-
21
- const settings = {
22
- prcodes: decodedCodes,
23
- }
24
- </script>
25
-
26
- <template>
27
-
28
- <span
29
- v-for="(prcode, index) in settings.prcodes"
30
- :key="index"
31
- class="not-last:mr-1"
32
- >
33
- <PrCode :prcode="prcode" v-if="!String(prcode).includes('+')" />
34
- <span v-else >
35
- <PrCode v-for="(splittedCode, index2) in String(prcode).split('+')" :key="index2" :prcode="splittedCode" />
36
- </span>
37
- </span>
38
- </template>
39
-
1
+ <script lang="ts" setup>
2
+ import type { PropType } from 'vue'
3
+ import PrCode from './PrCode.vue';
4
+
5
+ const props = defineProps({
6
+ prcodes: {
7
+ type: Object as PropType<string[] | null>,
8
+ default: null,
9
+ required: true,
10
+ },
11
+ isPdp: {
12
+ type: Boolean,
13
+ default: false,
14
+ required: false,
15
+ },
16
+ })
17
+
18
+ const codes = props.prcodes || []
19
+ const decodedCodes = codes ? codes.sort() : []
20
+
21
+ const settings = {
22
+ prcodes: decodedCodes,
23
+ }
24
+ </script>
25
+
26
+ <template>
27
+
28
+ <span
29
+ v-for="(prcode, index) in settings.prcodes"
30
+ :key="index"
31
+ class="not-last:mr-1"
32
+ >
33
+ <PrCode :prcode="prcode" v-if="!String(prcode).includes('+')" />
34
+ <span v-else >
35
+ <PrCode v-for="(splittedCode, index2) in String(prcode).split('+')" :key="index2" :prcode="splittedCode" />
36
+ </span>
37
+ </span>
38
+ </template>
39
+
@@ -1,53 +1,53 @@
1
- <script lang="ts" setup>
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType< 'th'| 'td' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'div',
8
- required: true,
9
- },
10
- text: {
11
- type: String,
12
- default: '',
13
- required: true,
14
- },
15
- styles: {
16
- type: String,
17
- default: '',
18
- required: false,
19
- }
20
- })
21
- </script>
22
-
23
- <template>
24
- <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
25
- <span :class="styles && styles.length ? styles : 'mt-auto'">
26
- <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
27
- </span>
28
- </component>
29
- </template>
30
-
31
-
32
- <style>
33
- .detail-name {
34
- @apply overflow-hidden relative;
35
-
36
- span {
37
- @apply block bg-white relative z-10 pr-1.5 w-full;
38
-
39
- &:before {
40
- /* // order: 2; */
41
- @apply text-gray-300 absolute select-none border-b border-gray-200 w-full -z-1 absolute content-empty left-0;
42
- height: 1em;
43
- white-space: nowrap;
44
- font-weight: 100;
45
- bottom: 2px;
46
- flex: 1;
47
- }
48
- }
49
-
50
-
51
- }
52
-
1
+ <script lang="ts" setup>
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType< 'th'| 'td' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'div',
8
+ required: true,
9
+ },
10
+ text: {
11
+ type: String,
12
+ default: '',
13
+ required: true,
14
+ },
15
+ styles: {
16
+ type: String,
17
+ default: '',
18
+ required: false,
19
+ }
20
+ })
21
+ </script>
22
+
23
+ <template>
24
+ <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
25
+ <span :class="styles && styles.length ? styles : 'mt-auto'">
26
+ <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
27
+ </span>
28
+ </component>
29
+ </template>
30
+
31
+
32
+ <style>
33
+ .detail-name {
34
+ @apply overflow-hidden relative;
35
+
36
+ span {
37
+ @apply block bg-white relative z-10 pr-1.5 w-full;
38
+
39
+ &:before {
40
+ /* // order: 2; */
41
+ @apply text-gray-300 absolute select-none border-b border-gray-200 w-full -z-1 absolute content-empty left-0;
42
+ height: 1em;
43
+ white-space: nowrap;
44
+ font-weight: 100;
45
+ bottom: 2px;
46
+ flex: 1;
47
+ }
48
+ }
49
+
50
+
51
+ }
52
+
53
53
  </style>
@@ -1,158 +1,158 @@
1
- <script setup lang="ts">
2
- import { PropType, computed } from "vue";
3
- import ProductDetailName from "./ProductDetailName.vue";
4
-
5
- interface TableItem {
6
- id: string;
7
- name: string;
8
- value: unknown;
9
- translated?: boolean;
10
- icon?: boolean;
11
- }
12
-
13
- interface GroupedLink {
14
- id: string;
15
- links: {
16
- name: string;
17
- value: string;
18
- }[];
19
- }
20
-
21
- const props = defineProps({
22
- items: { type: Array as PropType<TableItem[]>, default: () => [] },
23
- caption: { type: String, default: null }
24
- });
25
-
26
- // Function for checking whether a value is a link
27
- const isLink = (id: string) => {
28
- return ['blog', 'youtube', 'vimeo'].includes(id);
29
- };
30
-
31
- // Function for specifying header text
32
- const getHeaderText = (row: TableItem | GroupedLink) => {
33
- // For the blog, we use id instead of name
34
- if (row.id === 'blog') {
35
- return row.id.charAt(0).toUpperCase() + row.id.slice(1); // "Blog" z dużej litery
36
- }
37
-
38
- // For other types, we use name (if it is GroupedLink, there is no name)
39
- return 'name' in row ? row.name : row.id.charAt(0).toUpperCase() + row.id.slice(1);
40
- };
41
-
42
- // Function to determine the icon class for a link type
43
- const getLinkIconClass = (linkId: string) => {
44
- switch (linkId) {
45
- case 'blog':
46
- return 'i-lucide-book-text';
47
- case 'youtube':
48
- return 'i-simple-icons-youtube';
49
- case 'vimeo':
50
- return 'i-simple-icons-vimeo';
51
- default:
52
- return 'i-lucide-link';
53
- }
54
- };
55
-
56
- // Grouping of elements by id
57
- const groupedItems = computed(() => {
58
- const result: (TableItem | GroupedLink)[] = [];
59
- const linkGroups = new Map<string, GroupedLink>();
60
-
61
- // We process all elements
62
- props.items.forEach(item => {
63
- // If it's a link (blog, youtube, vimeo)
64
- if (isLink(item.id)) {
65
- // Add a link to the relevant group
66
- if (!linkGroups.has(item.id)) {
67
- linkGroups.set(item.id, {
68
- id: item.id,
69
- links: []
70
- });
71
- }
72
-
73
- // Dodajemy link do odpowiedniej grupy
74
- linkGroups.get(item.id)?.links.push({
75
- name: item.name,
76
- value: item.value as string
77
- });
78
- } else {
79
- // If it is not a link, we add it normally to the results
80
- result.push(item);
81
- }
82
- });
83
-
84
- // Add all link groups at the end
85
- linkGroups.forEach(group => {
86
- result.push(group);
87
- });
88
-
89
- return result;
90
- });
91
- </script>
92
-
93
- <template>
94
- <table class="details table-auto text-left bg-white">
95
- <caption v-if="!!$slots.caption || caption">
96
- <slot name="caption">{{ caption }}</slot>
97
- </caption>
98
- <colgroup>
99
- <col>
100
- <col>
101
- </colgroup>
102
- <tbody>
103
- <tr v-for="row, index in groupedItems" :key="index">
104
- <!-- We use the getHeaderText function to specify the header text -->
105
- <ProductDetailName as="th" :text="getHeaderText(row)" />
106
-
107
- <!-- Handling link groups -->
108
- <td v-if="'links' in row" class="link-cell">
109
- <ul class="list-none p-0 m-0">
110
- <li v-for="(link, linkIndex) in row.links" :key="linkIndex" class="mb-2 last:mb-0 flex items-center">
111
- <span :class="[getLinkIconClass(row.id), 'leading-none inline-block mr-2 w-4 h-4 text-gray-400']" />
112
- <a :href="link.value" target="_blank" rel="noopener noreferrer" class="link-primary">
113
- {{ link.name }}
114
- </a>
115
- </li>
116
- </ul>
117
- </td>
118
-
119
- <!-- Support for standard types -->
120
- <slot v-else-if="'id' in row" :name="row.id">
121
- <td>{{ row.value }}</td>
122
- </slot>
123
- </tr>
124
- </tbody>
125
- </table>
126
- </template>
127
-
128
- <style scoped>
129
- .details {
130
- @apply border-none shadow-none w-full md:w-auto;
131
- box-shadow: none;
132
-
133
- col {
134
- @apply w-1/2 md:w-auto;
135
- }
136
-
137
- tr {
138
- @apply border-none;
139
- }
140
-
141
- tr,
142
- th {
143
- @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
144
- }
145
-
146
- th {
147
- @apply px-0;
148
- }
149
-
150
- td {
151
- @apply relative;
152
- }
153
- }
154
-
155
- .link-primary {
156
- @apply text-blue-600 hover:text-blue-800 hover:underline;
157
- }
1
+ <script setup lang="ts">
2
+ import { PropType, computed } from "vue";
3
+ import ProductDetailName from "./ProductDetailName.vue";
4
+
5
+ interface TableItem {
6
+ id: string;
7
+ name: string;
8
+ value: unknown;
9
+ translated?: boolean;
10
+ icon?: boolean;
11
+ }
12
+
13
+ interface GroupedLink {
14
+ id: string;
15
+ links: {
16
+ name: string;
17
+ value: string;
18
+ }[];
19
+ }
20
+
21
+ const props = defineProps({
22
+ items: { type: Array as PropType<TableItem[]>, default: () => [] },
23
+ caption: { type: String, default: null }
24
+ });
25
+
26
+ // Function for checking whether a value is a link
27
+ const isLink = (id: string) => {
28
+ return ['blog', 'youtube', 'vimeo'].includes(id);
29
+ };
30
+
31
+ // Function for specifying header text
32
+ const getHeaderText = (row: TableItem | GroupedLink) => {
33
+ // For the blog, we use id instead of name
34
+ if (row.id === 'blog') {
35
+ return row.id.charAt(0).toUpperCase() + row.id.slice(1); // "Blog" z dużej litery
36
+ }
37
+
38
+ // For other types, we use name (if it is GroupedLink, there is no name)
39
+ return 'name' in row ? row.name : row.id.charAt(0).toUpperCase() + row.id.slice(1);
40
+ };
41
+
42
+ // Function to determine the icon class for a link type
43
+ const getLinkIconClass = (linkId: string) => {
44
+ switch (linkId) {
45
+ case 'blog':
46
+ return 'i-lucide-book-text';
47
+ case 'youtube':
48
+ return 'i-simple-icons-youtube';
49
+ case 'vimeo':
50
+ return 'i-simple-icons-vimeo';
51
+ default:
52
+ return 'i-lucide-link';
53
+ }
54
+ };
55
+
56
+ // Grouping of elements by id
57
+ const groupedItems = computed(() => {
58
+ const result: (TableItem | GroupedLink)[] = [];
59
+ const linkGroups = new Map<string, GroupedLink>();
60
+
61
+ // We process all elements
62
+ props.items.forEach(item => {
63
+ // If it's a link (blog, youtube, vimeo)
64
+ if (isLink(item.id)) {
65
+ // Add a link to the relevant group
66
+ if (!linkGroups.has(item.id)) {
67
+ linkGroups.set(item.id, {
68
+ id: item.id,
69
+ links: []
70
+ });
71
+ }
72
+
73
+ // Dodajemy link do odpowiedniej grupy
74
+ linkGroups.get(item.id)?.links.push({
75
+ name: item.name,
76
+ value: item.value as string
77
+ });
78
+ } else {
79
+ // If it is not a link, we add it normally to the results
80
+ result.push(item);
81
+ }
82
+ });
83
+
84
+ // Add all link groups at the end
85
+ linkGroups.forEach(group => {
86
+ result.push(group);
87
+ });
88
+
89
+ return result;
90
+ });
91
+ </script>
92
+
93
+ <template>
94
+ <table class="details table-auto text-left bg-white">
95
+ <caption v-if="!!$slots.caption || caption">
96
+ <slot name="caption">{{ caption }}</slot>
97
+ </caption>
98
+ <colgroup>
99
+ <col>
100
+ <col>
101
+ </colgroup>
102
+ <tbody>
103
+ <tr v-for="row, index in groupedItems" :key="index">
104
+ <!-- We use the getHeaderText function to specify the header text -->
105
+ <ProductDetailName as="th" :text="getHeaderText(row)" />
106
+
107
+ <!-- Handling link groups -->
108
+ <td v-if="'links' in row" class="link-cell">
109
+ <ul class="list-none p-0 m-0">
110
+ <li v-for="(link, linkIndex) in row.links" :key="linkIndex" class="mb-2 last:mb-0 flex items-center">
111
+ <span :class="[getLinkIconClass(row.id), 'leading-none inline-block mr-2 w-4 min-w-4 h-4 text-gray-400']" />
112
+ <a :href="link.value" target="_blank" rel="noopener noreferrer" class="link-primary">
113
+ {{ link.name }}
114
+ </a>
115
+ </li>
116
+ </ul>
117
+ </td>
118
+
119
+ <!-- Support for standard types -->
120
+ <slot v-else-if="'id' in row" :name="row.id">
121
+ <td>{{ row.value }}</td>
122
+ </slot>
123
+ </tr>
124
+ </tbody>
125
+ </table>
126
+ </template>
127
+
128
+ <style scoped>
129
+ .details {
130
+ @apply border-none shadow-none w-full md:w-auto;
131
+ box-shadow: none;
132
+
133
+ col {
134
+ @apply w-1/2 md:w-auto;
135
+ }
136
+
137
+ tr {
138
+ @apply border-none;
139
+ }
140
+
141
+ tr,
142
+ th {
143
+ @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
144
+ }
145
+
146
+ th {
147
+ @apply px-0;
148
+ }
149
+
150
+ td {
151
+ @apply relative;
152
+ }
153
+ }
154
+
155
+ .link-primary {
156
+ @apply leading-none text-brand-primary hover:text-accent-light hover:underline;
157
+ }
158
158
  </style>
@@ -1,48 +1,48 @@
1
- ---
2
- const { productObject, locale, index } = Astro.props;
3
- import Image from "./Image.astro"
4
- import ProductNumber from "./Product/ProductNumber.astro"
5
- import { t } from "i18next";
6
- ---
7
-
8
- { productObject &&
9
- (
10
-
11
- <!-- product image -->
12
- <div class="img--4/3 img--small">
13
- { productObject.photo !== null ?
14
- <Image
15
- imageObject={
16
- {
17
- src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
- alt: 'Image Alt',
19
- height: '180',
20
- width: '240',
21
- class: 'img--overlay object-cover'
22
- }
23
- }
24
- />
25
- :
26
- <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
- }
28
- </div>
29
-
30
- <!-- product deails -->
31
- <div class="sm:pl-4 flex flex-col" >
32
- <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)"
33
- href={productObject.url} itemprop="url"
34
- title={productObject.number}
35
- >
36
- { productObject.name }
37
- </a>
38
-
39
- <ProductNumber productNumber={productObject.number} copyDisabled={false} buttonTexts={{ copy: t('copy'), copied: t('copied') }} />
40
-
41
- { index !== null &&
42
- ( <meta itemprop="position" content={String(index)} />
43
- <meta itemprop="name" content={productObject.name} /> )
44
- }
45
- </div>
46
-
47
- )}
48
-
1
+ ---
2
+ const { productObject, locale, index } = Astro.props;
3
+ import Image from "./Image.astro"
4
+ import ProductNumber from "./Product/ProductNumber.astro"
5
+ import { t } from "i18next";
6
+ ---
7
+
8
+ { productObject &&
9
+ (
10
+
11
+ <!-- product image -->
12
+ <div class="img--4/3 img--small">
13
+ { productObject.photo !== null ?
14
+ <Image
15
+ imageObject={
16
+ {
17
+ src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
+ alt: 'Image Alt',
19
+ height: '180',
20
+ width: '240',
21
+ class: 'img--overlay object-cover'
22
+ }
23
+ }
24
+ />
25
+ :
26
+ <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
+ }
28
+ </div>
29
+
30
+ <!-- product deails -->
31
+ <div class="sm:pl-4 flex flex-col" >
32
+ <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)"
33
+ href={productObject.url} itemprop="url"
34
+ title={productObject.number}
35
+ >
36
+ { productObject.name }
37
+ </a>
38
+
39
+ <ProductNumber productNumber={productObject.number} copyDisabled={false} buttonTexts={{ copy: t('copy'), copied: t('copied') }} />
40
+
41
+ { index !== null &&
42
+ ( <meta itemprop="position" content={String(index)} />
43
+ <meta itemprop="name" content={productObject.name} /> )
44
+ }
45
+ </div>
46
+
47
+ )}
48
+
@@ -1,23 +1,23 @@
1
- <script setup lang="ts">
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'div',
8
- required: false,
9
- },
10
- text: {
11
- type: String,
12
- default: '',
13
- required: false,
14
- }
15
- })
16
- </script>
17
-
18
- <template>
19
- <component :is="props.as"
20
- class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
- <slot>{{ props.text }}</slot>
22
- </component>
23
- </template>
1
+ <script setup lang="ts">
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'div',
8
+ required: false,
9
+ },
10
+ text: {
11
+ type: String,
12
+ default: '',
13
+ required: false,
14
+ }
15
+ })
16
+ </script>
17
+
18
+ <template>
19
+ <component :is="props.as"
20
+ class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
+ <slot>{{ props.text }}</slot>
22
+ </component>
23
+ </template>