spoko-design-system 0.5.5 → 0.5.7

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 (171) hide show
  1. package/.astro/data-store.json +1 -1
  2. package/.astro/settings.json +4 -4
  3. package/.github/dependabot.yml +11 -11
  4. package/.github/todo.yml +3 -3
  5. package/.github/workflows/deploy.yml +39 -39
  6. package/.stackblitzrc +5 -5
  7. package/.vscode/extensions.json +5 -5
  8. package/.vscode/launch.json +11 -11
  9. package/.vscode/settings.json +5 -5
  10. package/LICENSE +21 -21
  11. package/README.md +114 -114
  12. package/astro-i18next.config.mjs +17 -17
  13. package/astro-i18next.config.ts +10 -10
  14. package/astro.config.mjs +86 -86
  15. package/dev-dist/sw.js +91 -91
  16. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  17. package/icon.config.ts +278 -278
  18. package/index.ts +65 -65
  19. package/package.json +2 -2
  20. package/public/fonts/lg.svg +53 -53
  21. package/public/fonts/vwhead-bold-demo.html +549 -549
  22. package/public/fonts/vwhead-regular-demo.html +549 -549
  23. package/public/fonts/vwtext-bold-demo.html +549 -549
  24. package/public/fonts/vwtext-regular-demo.html +549 -549
  25. package/public/github.svg +3 -3
  26. package/public/grid_dot.svg +4 -4
  27. package/public/linkedin.svg +44 -44
  28. package/public/locales/en/translation.json +8 -8
  29. package/public/locales/pl/translation.json +8 -8
  30. package/public/make-scrollable-code-focusable.js +3 -3
  31. package/public/pagefind.yml +3 -3
  32. package/public/polo.blue.svg +29 -29
  33. package/public/spoko.space.svg +71 -71
  34. package/public/twitter.svg +46 -46
  35. package/renovate.json +6 -6
  36. package/sandbox.config.json +11 -11
  37. package/src/MyComponent.astro +8 -8
  38. package/src/components/Badge.vue +19 -19
  39. package/src/components/Badges.vue +21 -21
  40. package/src/components/Breadcrumbs.vue +107 -107
  41. package/src/components/Button.vue +101 -101
  42. package/src/components/ButtonCopy.astro +183 -183
  43. package/src/components/ButtonCopy.vue +36 -36
  44. package/src/components/Card.astro +27 -27
  45. package/src/components/Carousel.astro +26 -26
  46. package/src/components/Category/CategoriesCarousel.astro +101 -101
  47. package/src/components/Category/CategoryDetails.astro +169 -169
  48. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  49. package/src/components/Category/CategoryTile.astro +38 -38
  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/Input.astro +38 -13
  64. package/src/components/Jumbotron/variants/Hero.astro +0 -1
  65. package/src/components/LeftSidebar.astro +53 -53
  66. package/src/components/MainColors.vue +22 -22
  67. package/src/components/MainInput.vue +15 -15
  68. package/src/components/Modal.astro +27 -27
  69. package/src/components/PageContent.astro +5 -5
  70. package/src/components/PartNumber.vue +27 -27
  71. package/src/components/Post/PostCategories.astro +37 -37
  72. package/src/components/Post/PostCategories.vue +38 -38
  73. package/src/components/PostHeader.astro +103 -103
  74. package/src/components/PrCode.vue +141 -141
  75. package/src/components/Product/ProductButton.vue +18 -18
  76. package/src/components/Product/ProductCarousel.astro +35 -35
  77. package/src/components/Product/ProductCodes.vue +174 -174
  78. package/src/components/Product/ProductEngineType.vue +42 -42
  79. package/src/components/Product/ProductImage.astro +40 -40
  80. package/src/components/Product/ProductLink.astro +101 -101
  81. package/src/components/Product/ProductLink.vue +59 -59
  82. package/src/components/Product/ProductLinkInfo.astro +37 -37
  83. package/src/components/Product/ProductNumber.astro +60 -60
  84. package/src/components/ProductCarousel.astro +38 -38
  85. package/src/components/ProductCodes.vue +39 -39
  86. package/src/components/ProductDetailName.vue +52 -52
  87. package/src/components/ProductDetailsList.vue +65 -65
  88. package/src/components/ProductTile.astro +48 -48
  89. package/src/components/Quote.vue +23 -23
  90. package/src/components/ReloadPrompt.astro +50 -50
  91. package/src/components/SlimBanner.vue +72 -72
  92. package/src/components/Table.vue +32 -32
  93. package/src/components/TableOfContents.astro +15 -15
  94. package/src/components/Translations.vue +23 -23
  95. package/src/components/flags/FlagPL.vue +3 -3
  96. package/src/components/flags/FlagUA.vue +2 -2
  97. package/src/components/layout/Container.astro +7 -7
  98. package/src/components/layout/Header.astro +80 -80
  99. package/src/config.ts +56 -56
  100. package/src/design.config.ts +98 -98
  101. package/src/env.d.ts +6 -6
  102. package/src/layouts/Layout.astro +61 -61
  103. package/src/layouts/MainLayout.astro +81 -81
  104. package/src/layouts/partials/FooterCommon.astro +4 -4
  105. package/src/layouts/partials/HeadCommon.astro +44 -44
  106. package/src/layouts/partials/HeadSEO.astro +41 -41
  107. package/src/pages/components/badges.mdx +57 -57
  108. package/src/pages/components/breadcrumbs.mdx +139 -139
  109. package/src/pages/components/buttons.mdx +360 -360
  110. package/src/pages/components/card.mdx +294 -294
  111. package/src/pages/components/carousel.mdx +62 -62
  112. package/src/pages/components/copyright.mdx +42 -42
  113. package/src/pages/components/details-list.mdx +115 -115
  114. package/src/pages/components/features-list.mdx +37 -37
  115. package/src/pages/components/flags.mdx +49 -49
  116. package/src/pages/components/fuck-russia.mdx +39 -39
  117. package/src/pages/components/hand-drive.mdx +38 -38
  118. package/src/pages/components/headline.mdx +152 -152
  119. package/src/pages/components/icons.astro +135 -135
  120. package/src/pages/components/image.mdx +513 -513
  121. package/src/pages/components/input.mdx +84 -47
  122. package/src/pages/components/jumbotron.mdx +359 -359
  123. package/src/pages/components/modal.mdx +64 -64
  124. package/src/pages/components/post-header.mdx +60 -60
  125. package/src/pages/components/pr-code.mdx +65 -65
  126. package/src/pages/components/product-number.mdx +58 -58
  127. package/src/pages/components/product-tile.mdx +51 -51
  128. package/src/pages/components/quote.mdx +33 -33
  129. package/src/pages/components/slimbanner.mdx +35 -35
  130. package/src/pages/components/table.mdx +108 -108
  131. package/src/pages/core/colors.mdx +10 -10
  132. package/src/pages/core/grid.mdx +89 -89
  133. package/src/pages/core/introduction.mdx +77 -77
  134. package/src/pages/core/shadows.astro +20 -20
  135. package/src/pages/core/typography.astro +49 -49
  136. package/src/pages/index.astro +130 -130
  137. package/src/pages/patterns/introduction.mdx +60 -60
  138. package/src/pwa.ts +12 -12
  139. package/src/styles/_variables.scss +70 -70
  140. package/src/styles/base/base.css +184 -184
  141. package/src/styles/base/grid.css +92 -92
  142. package/src/styles/base/typography.css +70 -70
  143. package/src/styles/content.css +73 -73
  144. package/src/styles/main.css +7 -7
  145. package/src/types/Product.ts +31 -31
  146. package/src/types/astro.d.ts +3 -3
  147. package/src/utils/product/getPriceFormatted.ts +15 -15
  148. package/src/utils/product/getProductChecklist.ts +17 -17
  149. package/src/utils/product/useFormatProductNumber.ts +41 -41
  150. package/src/utils/seo/getShorterDescription.ts +14 -14
  151. package/src/utils/text/formatDate.ts +5 -5
  152. package/src/utils/text/formatLocaleNumber.ts +6 -6
  153. package/src/utils/text/formatPad.ts +12 -12
  154. package/src/utils/text/getNumberFormatted.ts +33 -33
  155. package/src/utils/text/getTranslatedLink.ts +5 -5
  156. package/src/utils/text.ts +19 -19
  157. package/tailwind.config.cjs +8 -8
  158. package/tsconfig.json +28 -28
  159. package/uno-config/index.ts +61 -61
  160. package/uno-config/theme/breakpoints.ts +9 -9
  161. package/uno-config/theme/colors.ts +64 -64
  162. package/uno-config/theme/dimensions.ts +17 -17
  163. package/uno-config/theme/effects.ts +14 -14
  164. package/uno-config/theme/grid.ts +10 -10
  165. package/uno-config/theme/index.ts +28 -28
  166. package/uno-config/theme/shortcuts/buttons.ts +53 -53
  167. package/uno-config/theme/shortcuts/components.ts +92 -92
  168. package/uno-config/theme/shortcuts/index.ts +18 -18
  169. package/uno-config/theme/shortcuts/layout.ts +64 -64
  170. package/uno-config/theme/typography.ts +29 -29
  171. package/uno.config.ts +2 -2
@@ -1,93 +1,93 @@
1
- .content-grid {
2
- --padding-inline: 1rem;
3
- --content-max-width: 900px;
4
- --breakout-max-width: 1200px;
5
-
6
- --breakout-size: calc((var(--breakout-max-width) - var(--content-max-width)) / 2);
7
-
8
- display: grid;
9
- grid-template-columns:
10
- [full-width-start] minmax(var(--padding-inline), 1fr)
11
- [breakout-start] minmax(0, var(--breakout-size))
12
- [content-start] min(
13
- 100% - (var(--padding-inline) * 2),
14
- var(--content-max-width)
15
- )
16
- [content-end]
17
- minmax(0, var(--breakout-size)) [breakout-end]
18
- minmax(var(--padding-inline), 1fr) [full-width-end];
19
-
20
- > :not(.breakout, .full-width),
21
- .full-width> :not(.breakout, .full-width) {
22
- grid-column: content;
23
- }
24
-
25
- >.breakout {
26
- grid-column: breakout;
27
- }
28
-
29
- >.full-width {
30
- grid-column: full-width;
31
-
32
- display: grid;
33
- grid-template-columns: inherit;
34
- }
35
-
36
- }
37
-
38
- img.full-width {
39
- width: 100%;
40
- max-height: 45vh;
41
- object-fit: cover;
42
- }
43
-
44
- *,
45
- *::before,
46
- *::after {
47
- box-sizing: border-box;
48
- }
49
-
50
- .article-title {
51
- @apply font-textbold;
52
- font-size: var(--fs-800);
53
- line-height: 1.05;
54
- text-transform: uppercase;
55
- }
56
-
57
- .section-title {
58
- font-size: var(--fs-800);
59
- line-height: 1.1;
60
- }
61
-
62
- .visually-hidden {
63
- clip: rect(0 0 0 0);
64
- clip-path: inset(50%);
65
- height: 1px;
66
- overflow: hidden;
67
- position: absolute;
68
- white-space: nowrap;
69
- width: 1px;
70
- }
71
-
72
- .call-to-action {
73
- @apply px-8 py-6;
74
- }
75
-
76
- .wrapper {
77
- width: calc(100% - 3rem);
78
- max-width: var(--content-max-width);
79
- margin-inline: auto;
80
- }
81
-
82
- .flow>*+* {
83
- margin-top: var(--flow-spacing, 1em);
84
- }
85
-
86
- .section-padding {
87
- padding-block: 2.5rem;
88
- }
89
-
90
- .even-columns {
91
- display: flex;
92
- gap: 1rem;
1
+ .content-grid {
2
+ --padding-inline: 1rem;
3
+ --content-max-width: 900px;
4
+ --breakout-max-width: 1200px;
5
+
6
+ --breakout-size: calc((var(--breakout-max-width) - var(--content-max-width)) / 2);
7
+
8
+ display: grid;
9
+ grid-template-columns:
10
+ [full-width-start] minmax(var(--padding-inline), 1fr)
11
+ [breakout-start] minmax(0, var(--breakout-size))
12
+ [content-start] min(
13
+ 100% - (var(--padding-inline) * 2),
14
+ var(--content-max-width)
15
+ )
16
+ [content-end]
17
+ minmax(0, var(--breakout-size)) [breakout-end]
18
+ minmax(var(--padding-inline), 1fr) [full-width-end];
19
+
20
+ > :not(.breakout, .full-width),
21
+ .full-width> :not(.breakout, .full-width) {
22
+ grid-column: content;
23
+ }
24
+
25
+ >.breakout {
26
+ grid-column: breakout;
27
+ }
28
+
29
+ >.full-width {
30
+ grid-column: full-width;
31
+
32
+ display: grid;
33
+ grid-template-columns: inherit;
34
+ }
35
+
36
+ }
37
+
38
+ img.full-width {
39
+ width: 100%;
40
+ max-height: 45vh;
41
+ object-fit: cover;
42
+ }
43
+
44
+ *,
45
+ *::before,
46
+ *::after {
47
+ box-sizing: border-box;
48
+ }
49
+
50
+ .article-title {
51
+ @apply font-textbold;
52
+ font-size: var(--fs-800);
53
+ line-height: 1.05;
54
+ text-transform: uppercase;
55
+ }
56
+
57
+ .section-title {
58
+ font-size: var(--fs-800);
59
+ line-height: 1.1;
60
+ }
61
+
62
+ .visually-hidden {
63
+ clip: rect(0 0 0 0);
64
+ clip-path: inset(50%);
65
+ height: 1px;
66
+ overflow: hidden;
67
+ position: absolute;
68
+ white-space: nowrap;
69
+ width: 1px;
70
+ }
71
+
72
+ .call-to-action {
73
+ @apply px-8 py-6;
74
+ }
75
+
76
+ .wrapper {
77
+ width: calc(100% - 3rem);
78
+ max-width: var(--content-max-width);
79
+ margin-inline: auto;
80
+ }
81
+
82
+ .flow>*+* {
83
+ margin-top: var(--flow-spacing, 1em);
84
+ }
85
+
86
+ .section-padding {
87
+ padding-block: 2.5rem;
88
+ }
89
+
90
+ .even-columns {
91
+ display: flex;
92
+ gap: 1rem;
93
93
  }
@@ -1,70 +1,70 @@
1
- @font-face {
2
- font-family: 'vw_textregular';
3
- src: url('/fonts/vwtext-regular-webfont.woff2') format('woff2');
4
- font-weight: normal;
5
- font-style: normal;
6
- font-display: swap;
7
- }
8
-
9
- @font-face {
10
- font-family: 'vw_textbold';
11
- src: url('/fonts/vwtext-bold-webfont.woff2') format('woff2');
12
- font-weight: normal;
13
- font-style: normal;
14
- font-display: fallback;
15
- }
16
-
17
- .font-vw-textbold {
18
- font-family: 'vw_textbold';
19
- font-display: fallback;
20
- }
21
-
22
- @font-face {
23
- font-family: 'vw_headbold';
24
- src: url('/fonts/vwhead-bold-webfont.woff2') format('woff2');
25
- font-weight: normal;
26
- font-style: normal;
27
- font-display: fallback;
28
- }
29
-
30
- .font-vw-headbold {
31
- font-family: 'vw_headbold' !important;
32
- font-display: fallback;
33
- }
34
-
35
- @font-face {
36
- font-family: 'vw_headregular';
37
- src: url('/fonts/vwhead-regular-webfont.woff2') format('woff2');
38
- font-weight: normal;
39
- font-style: normal;
40
- font-display: fallback;
41
- }
42
-
43
- @font-face {
44
- font-family: 'vw_headlight';
45
- src: url('/fonts/vwhead-light-webfont.woff2') format('woff2'),;
46
- font-weight: normal;
47
- font-style: normal;
48
- font-display: swap;
49
- }
50
-
51
- @font-face {
52
- font-family: 'Nova Mono';
53
- src: url('/fonts/nova-mono-v13-latin-regular.woff2') format('woff2');
54
- font-weight: normal;
55
- font-style: normal;
56
- font-display: swap;
57
- }
58
-
59
- @font-face {
60
- font-family: 'vw_textlight';
61
- src: url('/fonts/vwtext-light-webfont.woff2') format('woff2');
62
- font-weight: normal;
63
- font-style: normal;
64
- font-display: swap;
65
- }
66
-
67
- /* for some content which don't need to index in Google */
68
- [data-text]:before {
69
- content: attr(data-text);
70
- }
1
+ @font-face {
2
+ font-family: 'vw_textregular';
3
+ src: url('/fonts/vwtext-regular-webfont.woff2') format('woff2');
4
+ font-weight: normal;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+
9
+ @font-face {
10
+ font-family: 'vw_textbold';
11
+ src: url('/fonts/vwtext-bold-webfont.woff2') format('woff2');
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ font-display: fallback;
15
+ }
16
+
17
+ .font-vw-textbold {
18
+ font-family: 'vw_textbold';
19
+ font-display: fallback;
20
+ }
21
+
22
+ @font-face {
23
+ font-family: 'vw_headbold';
24
+ src: url('/fonts/vwhead-bold-webfont.woff2') format('woff2');
25
+ font-weight: normal;
26
+ font-style: normal;
27
+ font-display: fallback;
28
+ }
29
+
30
+ .font-vw-headbold {
31
+ font-family: 'vw_headbold' !important;
32
+ font-display: fallback;
33
+ }
34
+
35
+ @font-face {
36
+ font-family: 'vw_headregular';
37
+ src: url('/fonts/vwhead-regular-webfont.woff2') format('woff2');
38
+ font-weight: normal;
39
+ font-style: normal;
40
+ font-display: fallback;
41
+ }
42
+
43
+ @font-face {
44
+ font-family: 'vw_headlight';
45
+ src: url('/fonts/vwhead-light-webfont.woff2') format('woff2'),;
46
+ font-weight: normal;
47
+ font-style: normal;
48
+ font-display: swap;
49
+ }
50
+
51
+ @font-face {
52
+ font-family: 'Nova Mono';
53
+ src: url('/fonts/nova-mono-v13-latin-regular.woff2') format('woff2');
54
+ font-weight: normal;
55
+ font-style: normal;
56
+ font-display: swap;
57
+ }
58
+
59
+ @font-face {
60
+ font-family: 'vw_textlight';
61
+ src: url('/fonts/vwtext-light-webfont.woff2') format('woff2');
62
+ font-weight: normal;
63
+ font-style: normal;
64
+ font-display: swap;
65
+ }
66
+
67
+ /* for some content which don't need to index in Google */
68
+ [data-text]:before {
69
+ content: attr(data-text);
70
+ }
@@ -1,73 +1,73 @@
1
- .content {
2
- .main-section {
3
- &>h1,
4
- &>h2,
5
- &>h3,
6
- &>h4,
7
- &>h5,
8
- &>h6 {
9
- margin-top: 1.77rem;
10
- }
11
- &>h1 {
12
- font-size: 22pt;
13
- font-weight: 400;
14
- }
15
- &>h2 {
16
- font-size: 17pt;
17
- font-weight: 500;
18
- }
19
- &>h3 {
20
- font-size: 15pt;
21
- }
22
- &>h4 {
23
- font-size: 13pt;
24
- }
25
-
26
- &>ul {
27
- @apply list-disc pl-5
28
- }
29
- }
30
-
31
- &>h1,
32
- &>h2,
33
- &>h3,
34
- &>h4,
35
- &>h5 {
36
- font-weight: bold;
37
- @apply font-textbold;
38
- }
39
-
40
- code {
41
- font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
42
- Consolas, "Liberation Mono", "Courier New", monospace;
43
- }
44
-
45
- .component-preview {
46
- @apply bg-blue-medium bg-opacity-5 px-4 py-4 mx-0 flex items-center overflow-x-auto sm:(p-8);
47
- gap: 1rem;
48
- border-radius: 0.33rem;
49
- border: 1px solid theme("colors.slate.200");
50
- resize: both;
51
- }
52
-
53
- .astro-code {
54
- @apply mx-0 p-4;
55
- border-radius: 0.44rem;
56
- }
57
- }
58
-
59
- table {
60
- @apply table-auto text-left border bg-white shadow-md;
61
-
62
- tr {
63
- @apply border;
64
- }
65
-
66
- td, th {
67
- @apply px-4 py-2;
68
- }
69
-
70
- thead {
71
- @apply bg-gray-100;
72
- }
73
- }
1
+ .content {
2
+ .main-section {
3
+ &>h1,
4
+ &>h2,
5
+ &>h3,
6
+ &>h4,
7
+ &>h5,
8
+ &>h6 {
9
+ margin-top: 1.77rem;
10
+ }
11
+ &>h1 {
12
+ font-size: 22pt;
13
+ font-weight: 400;
14
+ }
15
+ &>h2 {
16
+ font-size: 17pt;
17
+ font-weight: 500;
18
+ }
19
+ &>h3 {
20
+ font-size: 15pt;
21
+ }
22
+ &>h4 {
23
+ font-size: 13pt;
24
+ }
25
+
26
+ &>ul {
27
+ @apply list-disc pl-5
28
+ }
29
+ }
30
+
31
+ &>h1,
32
+ &>h2,
33
+ &>h3,
34
+ &>h4,
35
+ &>h5 {
36
+ font-weight: bold;
37
+ @apply font-textbold;
38
+ }
39
+
40
+ code {
41
+ font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
42
+ Consolas, "Liberation Mono", "Courier New", monospace;
43
+ }
44
+
45
+ .component-preview {
46
+ @apply bg-blue-medium bg-opacity-5 px-4 py-4 mx-0 flex items-center overflow-x-auto sm:(p-8);
47
+ gap: 1rem;
48
+ border-radius: 0.33rem;
49
+ border: 1px solid theme("colors.slate.200");
50
+ resize: both;
51
+ }
52
+
53
+ .astro-code {
54
+ @apply mx-0 p-4;
55
+ border-radius: 0.44rem;
56
+ }
57
+ }
58
+
59
+ table {
60
+ @apply table-auto text-left border bg-white shadow-md;
61
+
62
+ tr {
63
+ @apply border;
64
+ }
65
+
66
+ td, th {
67
+ @apply px-4 py-2;
68
+ }
69
+
70
+ thead {
71
+ @apply bg-gray-100;
72
+ }
73
+ }
@@ -1,7 +1,7 @@
1
-
2
- /* @import "variables"; */
3
- @import "base/typography";
4
- @import "base/base";
5
- @import "base/grid";
6
-
7
- @import "content.css";
1
+
2
+ /* @import "variables"; */
3
+ @import "base/typography";
4
+ @import "base/base";
5
+ @import "base/grid";
6
+
7
+ @import "content.css";
@@ -1,32 +1,32 @@
1
- export interface ProductImage {
2
- path: string;
3
- }
4
-
5
- export interface BaseProduct {
6
- id: string | number;
7
- number: string;
8
- photo: string | null;
9
- price_pln?: number;
10
- }
11
-
12
- export interface ShopProduct extends BaseProduct {
13
- images: ProductImage[];
14
- slug: string;
15
- name_pl: string;
16
- name_en: string;
17
- }
18
-
19
- export interface CatalogProduct extends BaseProduct {
20
- photo: string | null;
21
- }
22
-
23
- export type Product = ShopProduct | CatalogProduct;
24
-
25
- export interface ProductLinkProps {
26
- productId: string;
27
- bigTile?: boolean;
28
- locale: string;
29
- index?: number | null;
30
- loading?: 'lazy' | 'eager';
31
- isShopProduct?: boolean;
1
+ export interface ProductImage {
2
+ path: string;
3
+ }
4
+
5
+ export interface BaseProduct {
6
+ id: string | number;
7
+ number: string;
8
+ photo: string | null;
9
+ price_pln?: number;
10
+ }
11
+
12
+ export interface ShopProduct extends BaseProduct {
13
+ images: ProductImage[];
14
+ slug: string;
15
+ name_pl: string;
16
+ name_en: string;
17
+ }
18
+
19
+ export interface CatalogProduct extends BaseProduct {
20
+ photo: string | null;
21
+ }
22
+
23
+ export type Product = ShopProduct | CatalogProduct;
24
+
25
+ export interface ProductLinkProps {
26
+ productId: string;
27
+ bigTile?: boolean;
28
+ locale: string;
29
+ index?: number | null;
30
+ loading?: 'lazy' | 'eager';
31
+ isShopProduct?: boolean;
32
32
  }
@@ -1,4 +1,4 @@
1
- declare module '*.astro' {
2
- const component: any;
3
- export default component;
1
+ declare module '*.astro' {
2
+ const component: any;
3
+ export default component;
4
4
  }
@@ -1,16 +1,16 @@
1
- import i18next from "i18next";
2
-
3
- export const getPriceFormatted = (product: any) => {
4
- if (i18next.language === 'en') {
5
- return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(product.price_eur, )
6
- }
7
- if (i18next.language === 'pl') {
8
- return new Intl.NumberFormat('pl-PL', { style: 'currency', currency: 'PLN' }).format(product.price_pln, )
9
- }
10
- else {
11
- return 'no price'
12
- }
13
- }
14
-
15
-
1
+ import i18next from "i18next";
2
+
3
+ export const getPriceFormatted = (product: any) => {
4
+ if (i18next.language === 'en') {
5
+ return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(product.price_eur, )
6
+ }
7
+ if (i18next.language === 'pl') {
8
+ return new Intl.NumberFormat('pl-PL', { style: 'currency', currency: 'PLN' }).format(product.price_pln, )
9
+ }
10
+ else {
11
+ return 'no price'
12
+ }
13
+ }
14
+
15
+
16
16
  export default getPriceFormatted;
@@ -1,17 +1,17 @@
1
- import { t } from "i18next";
2
-
3
- export const getProductCheckList = (productDetails) => {
4
- if (!productDetails || !productDetails.length) {
5
- return null;
6
- }
7
-
8
- const list = productDetails.filter(item => item.icon);
9
-
10
- if (!list.length) {
11
- return null;
12
- }
13
-
14
- return list.map(detail => t(`detail.value.${detail.value}`));
15
- }
16
-
17
- export default getProductCheckList;
1
+ import { t } from "i18next";
2
+
3
+ export const getProductCheckList = (productDetails) => {
4
+ if (!productDetails || !productDetails.length) {
5
+ return null;
6
+ }
7
+
8
+ const list = productDetails.filter(item => item.icon);
9
+
10
+ if (!list.length) {
11
+ return null;
12
+ }
13
+
14
+ return list.map(detail => t(`detail.value.${detail.value}`));
15
+ }
16
+
17
+ export default getProductCheckList;