spoko-design-system 0.2.80 → 0.2.81

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 (155) hide show
  1. package/.github/dependabot.yml +11 -11
  2. package/.github/todo.yml +3 -3
  3. package/.github/workflows/deploy.yml +39 -39
  4. package/.stackblitzrc +5 -5
  5. package/.vscode/extensions.json +5 -5
  6. package/.vscode/launch.json +11 -11
  7. package/.vscode/settings.json +5 -5
  8. package/LICENSE +21 -21
  9. package/README.md +113 -113
  10. package/astro-i18next.config.mjs +17 -17
  11. package/astro-i18next.config.ts +10 -10
  12. package/astro.config.mjs +147 -147
  13. package/dev-dist/sw.js +91 -91
  14. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  15. package/index.ts +65 -65
  16. package/package.json +3 -3
  17. package/public/fonts/lg.svg +53 -53
  18. package/public/fonts/vwhead-bold-demo.html +549 -549
  19. package/public/fonts/vwhead-regular-demo.html +549 -549
  20. package/public/fonts/vwtext-bold-demo.html +549 -549
  21. package/public/fonts/vwtext-regular-demo.html +549 -549
  22. package/public/github.svg +3 -3
  23. package/public/grid_dot.svg +4 -4
  24. package/public/linkedin.svg +44 -44
  25. package/public/locales/en/translation.json +8 -8
  26. package/public/locales/pl/translation.json +8 -8
  27. package/public/make-scrollable-code-focusable.js +3 -3
  28. package/public/pagefind.yml +3 -3
  29. package/public/polo.blue.svg +29 -29
  30. package/public/spoko.space.svg +71 -71
  31. package/public/twitter.svg +46 -46
  32. package/renovate.json +6 -6
  33. package/sandbox.config.json +11 -11
  34. package/src/MyComponent.astro +8 -8
  35. package/src/components/Badge.vue +19 -19
  36. package/src/components/Badges.vue +21 -21
  37. package/src/components/Breadcrumbs.vue +107 -107
  38. package/src/components/Button.vue +55 -55
  39. package/src/components/ButtonCopy.vue +36 -36
  40. package/src/components/Card.astro +27 -27
  41. package/src/components/Carousel.astro +26 -26
  42. package/src/components/Category/CategoriesCarousel.astro +101 -101
  43. package/src/components/Category/CategoriesSidebar.astro +186 -186
  44. package/src/components/Category/CategoryDetails.astro +82 -82
  45. package/src/components/Category/CategoryLink.vue +23 -23
  46. package/src/components/Category/CategorySection.astro +69 -69
  47. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  48. package/src/components/Category/CategoryTile.astro +49 -49
  49. package/src/components/Category/SubCategoryLink.vue +29 -29
  50. package/src/components/CategoryLink.astro +18 -18
  51. package/src/components/Copyright.astro +12 -12
  52. package/src/components/Date.astro +7 -7
  53. package/src/components/Faq.astro +33 -33
  54. package/src/components/FaqItem.astro +96 -96
  55. package/src/components/FeaturesList.vue +41 -41
  56. package/src/components/FuckRussia.vue +62 -62
  57. package/src/components/HandDrive.astro +29 -29
  58. package/src/components/Header/Header.astro +210 -210
  59. package/src/components/Header/SkipToContent.astro +1 -1
  60. package/src/components/Headline.vue +48 -48
  61. package/src/components/Image.astro +30 -30
  62. package/src/components/Jumbatron.vue +40 -40
  63. package/src/components/LeftSidebar.astro +53 -53
  64. package/src/components/MainColors.vue +23 -23
  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/PostHeader.astro +103 -103
  70. package/src/components/PrCode.vue +141 -141
  71. package/src/components/Product/ProductButton.vue +18 -18
  72. package/src/components/Product/ProductCarousel.astro +35 -35
  73. package/src/components/Product/ProductCodes.vue +174 -174
  74. package/src/components/Product/ProductEngineType.vue +42 -42
  75. package/src/components/Product/ProductImage.astro +40 -40
  76. package/src/components/Product/ProductLink.astro +101 -101
  77. package/src/components/Product/ProductLink.vue +59 -59
  78. package/src/components/Product/ProductLinkInfo.astro +37 -37
  79. package/src/components/Product/ProductNumber.astro +61 -61
  80. package/src/components/ProductCarousel.astro +38 -38
  81. package/src/components/ProductCodes.vue +39 -39
  82. package/src/components/ProductDetailName.vue +52 -52
  83. package/src/components/ProductDetailsList.vue +65 -65
  84. package/src/components/ProductTile.astro +48 -48
  85. package/src/components/Quote.vue +23 -23
  86. package/src/components/ReloadPrompt.astro +50 -50
  87. package/src/components/SlimBanner.vue +72 -72
  88. package/src/components/Table.vue +32 -32
  89. package/src/components/TableOfContents.astro +15 -15
  90. package/src/components/Translations.vue +23 -23
  91. package/src/components/flags/FlagPL.vue +3 -3
  92. package/src/components/flags/FlagUA.vue +2 -2
  93. package/src/components/layout/Container.astro +7 -7
  94. package/src/components/layout/Header.astro +80 -80
  95. package/src/config.ts +56 -56
  96. package/src/design.config.ts +81 -81
  97. package/src/env.d.ts +1 -1
  98. package/src/layouts/Layout.astro +60 -60
  99. package/src/layouts/MainLayout.astro +81 -81
  100. package/src/layouts/partials/FooterCommon.astro +4 -4
  101. package/src/layouts/partials/HeadCommon.astro +44 -44
  102. package/src/layouts/partials/HeadSEO.astro +41 -41
  103. package/src/pages/components/badges.mdx +57 -57
  104. package/src/pages/components/breadcrumbs.mdx +139 -139
  105. package/src/pages/components/buttons.mdx +236 -236
  106. package/src/pages/components/card.mdx +294 -294
  107. package/src/pages/components/carousel.mdx +62 -62
  108. package/src/pages/components/copyright.mdx +42 -42
  109. package/src/pages/components/details-list.mdx +115 -115
  110. package/src/pages/components/features-list.mdx +37 -37
  111. package/src/pages/components/flags.mdx +49 -49
  112. package/src/pages/components/fuck-russia.mdx +39 -39
  113. package/src/pages/components/hand-drive.mdx +38 -38
  114. package/src/pages/components/headline.mdx +152 -152
  115. package/src/pages/components/icons.astro +48 -48
  116. package/src/pages/components/image.mdx +513 -513
  117. package/src/pages/components/input.mdx +45 -45
  118. package/src/pages/components/jumbatron.mdx +95 -95
  119. package/src/pages/components/modal.mdx +64 -64
  120. package/src/pages/components/post-header.mdx +60 -60
  121. package/src/pages/components/pr-code.mdx +65 -65
  122. package/src/pages/components/product-number.mdx +58 -58
  123. package/src/pages/components/product-tile.mdx +51 -51
  124. package/src/pages/components/quote.mdx +33 -33
  125. package/src/pages/components/slimbanner.mdx +35 -35
  126. package/src/pages/components/table.mdx +108 -108
  127. package/src/pages/core/colors.mdx +10 -10
  128. package/src/pages/core/grid.mdx +89 -89
  129. package/src/pages/core/introduction.mdx +77 -77
  130. package/src/pages/core/shadows.astro +20 -20
  131. package/src/pages/core/typography.astro +47 -47
  132. package/src/pages/index.astro +126 -126
  133. package/src/pages/patterns/introduction.mdx +60 -60
  134. package/src/pwa.ts +12 -12
  135. package/src/styles/_variables.scss +70 -70
  136. package/src/styles/base/base.css +184 -184
  137. package/src/styles/base/grid.css +92 -92
  138. package/src/styles/base/typography.css +70 -70
  139. package/src/styles/content.css +73 -73
  140. package/src/styles/main.css +7 -7
  141. package/src/types/Product.ts +31 -31
  142. package/src/types/astro.d.ts +3 -3
  143. package/src/utils/product/getPriceFormatted.ts +15 -15
  144. package/src/utils/product/getProductChecklist.ts +17 -17
  145. package/src/utils/product/useFormatProductNumber.ts +41 -41
  146. package/src/utils/seo/getShorterDescription.ts +14 -14
  147. package/src/utils/text/formatDate.ts +5 -5
  148. package/src/utils/text/formatLocaleNumber.ts +6 -6
  149. package/src/utils/text/formatPad.ts +12 -12
  150. package/src/utils/text/getNumberFormatted.ts +33 -33
  151. package/src/utils/text/getTranslatedLink.ts +5 -5
  152. package/src/utils/text.ts +28 -28
  153. package/tailwind.config.cjs +8 -8
  154. package/tsconfig.json +28 -28
  155. package/uno.config.ts +256 -256
@@ -1,82 +1,82 @@
1
- ---
2
- import CategorySidebarToggler from './CategorySidebarToggler.vue';
3
- import { Icon } from 'astro-icon/components';
4
- const { category, subcategory, subtitle, subsubtitle, titleSmall, locale } = Astro.props;
5
- import { t } from "i18next";
6
-
7
- // Compute base URL for localization
8
- const baseURL = locale === 'en' ? '' : `/${locale}`;
9
- ---
10
-
11
- <div ref="el"
12
- class="flex flex-nowrap pr-3 sm:pb-3 sm:pt-4 md:pl-4 relative z-10-off bg-gray-100 md:bg-white"
13
- transition:name="category-details"
14
- transition:animate="fade"
15
- >
16
- <CategorySidebarToggler onclick="toggleSidebar()">
17
- <Icon name="ant-design:menu-fold-outlined" class="toggler-btn hidden md:block" />
18
- <Icon name="ant-design:menu-unfold-outlined" class="toggler-btn hidden" />
19
- <Icon name="ant-design:menu-outlined" class="toggler-btn md:hidden" />
20
- </CategorySidebarToggler>
21
-
22
- <div class="overflow-x-auto overflow-y-hidden flex max-w-full items-center">
23
- {subtitle ? (
24
- <>
25
- <a class="text-lg font-vw-headregular whitespace-nowrap block" href={`${baseURL}/${category.slug}/`}>
26
- {category.name}
27
- {titleSmall && <small>{titleSmall}</small>}
28
- </a>
29
- <span class="text-gray-200 text-lg inline-block px-1 font-headlight">/</span>
30
- {!subsubtitle ? (
31
- <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
32
- {subtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
33
- </h1>
34
- ) : (
35
- <>
36
- <div class="text-lg py-2.5 sm:py-0 whitespace-nowrap ">
37
- <a href={`${baseURL}/${category.slug}/${subcategory.slug}/`}>
38
- {subtitle}
39
- </a>
40
- </div>
41
- <span class="text-gray-200 text-lg inline-block px-1 font-headlight">/</span>
42
- <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
43
- {subsubtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
44
- </h1>
45
- </>
46
- )}
47
- </>
48
- ) : (
49
- <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap">
50
- {category.name}
51
- {titleSmall && <small>{titleSmall}</small>}
52
- <span class="sr-only"> {t('catalog.extra-short')}</span>
53
- </h1>
54
- )}
55
- </div>
56
- </div>
57
-
58
- <script is:inline>
59
- function toggleSidebar() {
60
- function handleToggle(x) {
61
- const sidebar = document.getElementById('sidebar');
62
- if (x.matches) { // Mobile view
63
- document.body.classList.toggle('overflow-hidden');
64
- sidebar.classList.toggle('show');
65
- } else {
66
- document.body.classList.remove('overflow-hidden');
67
- sidebar.classList.toggle('collapsed');
68
- }
69
- }
70
-
71
- var x = window.matchMedia("(max-width: 768px)");
72
- handleToggle(x); // Call listener at runtime
73
- x.addListener(handleToggle); // Attach listener for state changes
74
- }
75
- </script>
76
-
77
- <style>
78
- .category-toggler {
79
- right: -1px;
80
- bottom: -1px;
81
- }
82
- </style>
1
+ ---
2
+ import CategorySidebarToggler from './CategorySidebarToggler.vue';
3
+ import { Icon } from 'astro-icon/components';
4
+ const { category, subcategory, subtitle, subsubtitle, titleSmall, locale } = Astro.props;
5
+ import { t } from "i18next";
6
+
7
+ // Compute base URL for localization
8
+ const baseURL = locale === 'en' ? '' : `/${locale}`;
9
+ ---
10
+
11
+ <div ref="el"
12
+ class="flex flex-nowrap pr-3 sm:pb-3 sm:pt-4 md:pl-4 relative z-10-off bg-gray-100 md:bg-white"
13
+ transition:name="category-details"
14
+ transition:animate="fade"
15
+ >
16
+ <CategorySidebarToggler onclick="toggleSidebar()">
17
+ <Icon name="ant-design:menu-fold-outlined" class="toggler-btn hidden md:block" />
18
+ <Icon name="ant-design:menu-unfold-outlined" class="toggler-btn hidden" />
19
+ <Icon name="ant-design:menu-outlined" class="toggler-btn md:hidden" />
20
+ </CategorySidebarToggler>
21
+
22
+ <div class="overflow-x-auto overflow-y-hidden flex max-w-full items-center">
23
+ {subtitle ? (
24
+ <>
25
+ <a class="text-lg font-vw-headregular whitespace-nowrap block" href={`${baseURL}/${category.slug}/`}>
26
+ {category.name}
27
+ {titleSmall && <small>{titleSmall}</small>}
28
+ </a>
29
+ <span class="text-gray-200 text-lg inline-block px-1 font-headlight">/</span>
30
+ {!subsubtitle ? (
31
+ <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
32
+ {subtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
33
+ </h1>
34
+ ) : (
35
+ <>
36
+ <div class="text-lg py-2.5 sm:py-0 whitespace-nowrap ">
37
+ <a href={`${baseURL}/${category.slug}/${subcategory.slug}/`}>
38
+ {subtitle}
39
+ </a>
40
+ </div>
41
+ <span class="text-gray-200 text-lg inline-block px-1 font-headlight">/</span>
42
+ <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap underline underline-offset-6 decoration-blue-300 decoration-0.5">
43
+ {subsubtitle} <span class="sr-only"> {t('catalog.extra-short')}</span>
44
+ </h1>
45
+ </>
46
+ )}
47
+ </>
48
+ ) : (
49
+ <h1 class="text-lg py-2.5 sm:py-0 whitespace-nowrap">
50
+ {category.name}
51
+ {titleSmall && <small>{titleSmall}</small>}
52
+ <span class="sr-only"> {t('catalog.extra-short')}</span>
53
+ </h1>
54
+ )}
55
+ </div>
56
+ </div>
57
+
58
+ <script is:inline>
59
+ function toggleSidebar() {
60
+ function handleToggle(x) {
61
+ const sidebar = document.getElementById('sidebar');
62
+ if (x.matches) { // Mobile view
63
+ document.body.classList.toggle('overflow-hidden');
64
+ sidebar.classList.toggle('show');
65
+ } else {
66
+ document.body.classList.remove('overflow-hidden');
67
+ sidebar.classList.toggle('collapsed');
68
+ }
69
+ }
70
+
71
+ var x = window.matchMedia("(max-width: 768px)");
72
+ handleToggle(x); // Call listener at runtime
73
+ x.addListener(handleToggle); // Attach listener for state changes
74
+ }
75
+ </script>
76
+
77
+ <style>
78
+ .category-toggler {
79
+ right: -1px;
80
+ bottom: -1px;
81
+ }
82
+ </style>
@@ -1,23 +1,23 @@
1
- <script setup lang="ts">
2
- const props = defineProps({
3
- text: {
4
- type: String,
5
- default: null,
6
- required: true,
7
- },
8
- active: {
9
- type: Boolean,
10
- default: false,
11
- required: true,
12
- },
13
- })
14
- </script>
15
-
16
- <template>
17
- <a
18
- class="category-link"
19
- :class="!props.active ? '' : 'active'"
20
- >
21
- {{ props.text }}
22
- </a>
23
- </template>
1
+ <script setup lang="ts">
2
+ const props = defineProps({
3
+ text: {
4
+ type: String,
5
+ default: null,
6
+ required: true,
7
+ },
8
+ active: {
9
+ type: Boolean,
10
+ default: false,
11
+ required: true,
12
+ },
13
+ })
14
+ </script>
15
+
16
+ <template>
17
+ <a
18
+ class="category-link"
19
+ :class="!props.active ? '' : 'active'"
20
+ >
21
+ {{ props.text }}
22
+ </a>
23
+ </template>
@@ -1,70 +1,70 @@
1
- ---
2
- const { category, subcategory, subsubcategory, locale} = Astro.props;
3
- import { t } from "i18next";
4
-
5
- import ProductLink from "@components/Product/ProductLink.astro";
6
- import { Icon } from 'astro-icon/components';
7
-
8
- import { createSubCatLink, createSubSubCatLink } from "@utils/db";
9
- import { getCategoryProducts } from "@utils/category/getCategoryProducts"
10
-
11
- const category2search = subsubcategory ? subsubcategory : (subcategory ? subcategory : category)
12
- const mainItemsCount = category2search.children ? 4 : 8
13
- const products = await getCategoryProducts(category2search.id, mainItemsCount);
14
-
15
- const getArray = async () => {
16
- const arr: { name: string; id: number }[] = [];
17
-
18
- if (category2search.children) {
19
- for (const childCat of category2search.children) {
20
- const output = await getCategoryProducts(childCat.id, 3);
21
- arr.push(output);
22
- }
23
- } else {
24
- null
25
- }
26
- return arr.flat(1)
27
- }
28
-
29
- const childrenProducts = await getArray()
30
-
31
- const categoryLink = subsubcategory ? createSubSubCatLink(locale, category.slug, subcategory.slug, subsubcategory.slug) : createSubCatLink(locale, category.slug, subcategory.slug);
32
- ---
33
- <div class="category-section">
34
- <div class="px-4 md:px-1.5 py-3 text-xl flex">
35
- <a href={categoryLink} class="hover:underline">
36
- <h2>{category2search.name}</h2>
37
- </a>
38
- </div>
39
- <swiper-container slides-per-view="auto" space-between="0" class="flex w-full max-w-full"
40
- itemscope itemtype="https://schema.org/ItemList"
41
- >
42
- {childrenProducts && childrenProducts.length > 0 && (
43
- childrenProducts.map((product, index) => <swiper-slide class="category-tile product-link"><ProductLink class="w-full" productId={product.id} locale={locale} index={index+1} /></swiper-slide>)
44
- )}
45
- {products && products.length > 0 && (
46
- products.map((product, index) =>
47
- <swiper-slide class="category-tile product-link"><ProductLink class="w-full h-full" productId={product.id} locale={locale} index={index+1}/></swiper-slide>)
48
- )}
49
- <swiper-slide class="category-tile product-link pr-4 pb-4 sm:pb-1">
50
- <a
51
- href={categoryLink}
52
- title={category2search.name}
53
- class="uppercase flex items-center bg-white w-full sm:w-auto sm:h-full mt-0 p-8 aspect-ratio-[4/3] sm:aspect-auto mb-auto sm:mb-0 sm:text-sm">
54
- {t("more")}
55
- <Icon name="la:arrow-right" class="h-4 ml-2 text-blue-500" />
56
- </a>
57
- </swiper-slide>
58
- </swiper-container>
59
- </div>
60
-
61
- <style >
62
- .category-section {
63
- content-visibility: auto;
64
-
65
- &:hover {
66
- content-visibility: visible;
67
- }
68
- }
69
-
1
+ ---
2
+ const { category, subcategory, subsubcategory, locale} = Astro.props;
3
+ import { t } from "i18next";
4
+
5
+ import ProductLink from "@components/Product/ProductLink.astro";
6
+ import { Icon } from 'astro-icon/components';
7
+
8
+ import { createSubCatLink, createSubSubCatLink } from "@utils/db";
9
+ import { getCategoryProducts } from "@utils/category/getCategoryProducts"
10
+
11
+ const category2search = subsubcategory ? subsubcategory : (subcategory ? subcategory : category)
12
+ const mainItemsCount = category2search.children ? 4 : 8
13
+ const products = await getCategoryProducts(category2search.id, mainItemsCount);
14
+
15
+ const getArray = async () => {
16
+ const arr: { name: string; id: number }[] = [];
17
+
18
+ if (category2search.children) {
19
+ for (const childCat of category2search.children) {
20
+ const output = await getCategoryProducts(childCat.id, 3);
21
+ arr.push(output);
22
+ }
23
+ } else {
24
+ null
25
+ }
26
+ return arr.flat(1)
27
+ }
28
+
29
+ const childrenProducts = await getArray()
30
+
31
+ const categoryLink = subsubcategory ? createSubSubCatLink(locale, category.slug, subcategory.slug, subsubcategory.slug) : createSubCatLink(locale, category.slug, subcategory.slug);
32
+ ---
33
+ <div class="category-section">
34
+ <div class="px-4 md:px-1.5 py-3 text-xl flex">
35
+ <a href={categoryLink} class="hover:underline">
36
+ <h2>{category2search.name}</h2>
37
+ </a>
38
+ </div>
39
+ <swiper-container slides-per-view="auto" space-between="0" class="flex w-full max-w-full"
40
+ itemscope itemtype="https://schema.org/ItemList"
41
+ >
42
+ {childrenProducts && childrenProducts.length > 0 && (
43
+ childrenProducts.map((product, index) => <swiper-slide class="category-tile product-link"><ProductLink class="w-full" productId={product.id} locale={locale} index={index+1} /></swiper-slide>)
44
+ )}
45
+ {products && products.length > 0 && (
46
+ products.map((product, index) =>
47
+ <swiper-slide class="category-tile product-link"><ProductLink class="w-full h-full" productId={product.id} locale={locale} index={index+1}/></swiper-slide>)
48
+ )}
49
+ <swiper-slide class="category-tile product-link pr-4 pb-4 sm:pb-1">
50
+ <a
51
+ href={categoryLink}
52
+ title={category2search.name}
53
+ class="uppercase flex items-center bg-white w-full sm:w-auto sm:h-full mt-0 p-8 aspect-ratio-[4/3] sm:aspect-auto mb-auto sm:mb-0 sm:text-sm">
54
+ {t("more")}
55
+ <Icon name="la:arrow-right" class="h-4 ml-2 text-blue-500" />
56
+ </a>
57
+ </swiper-slide>
58
+ </swiper-container>
59
+ </div>
60
+
61
+ <style >
62
+ .category-section {
63
+ content-visibility: auto;
64
+
65
+ &:hover {
66
+ content-visibility: visible;
67
+ }
68
+ }
69
+
70
70
  </style>
@@ -1,10 +1,10 @@
1
-
2
- <template>
3
- <button
4
- class="category-toggler"
5
- type="button"
6
- aria-label="toggle menu"
7
- >
8
- <slot />
9
- </button>
1
+
2
+ <template>
3
+ <button
4
+ class="category-toggler"
5
+ type="button"
6
+ aria-label="toggle menu"
7
+ >
8
+ <slot />
9
+ </button>
10
10
  </template>
@@ -1,49 +1,49 @@
1
- ---
2
-
3
- import { Image } from "astro:assets";
4
- import { getTranslatedLink } from "../../utils/text/getTranslatedLink"
5
-
6
- interface CategoryObject {
7
- photo: string;
8
- desc: string;
9
- alt: string;
10
- name: string;
11
- slug: string;
12
- height?: number;
13
- width?: number;
14
- class?: string;
15
- }
16
-
17
-
18
-
19
- let inputProps = {};
20
- const { CategoryObject, locale='en' } = Astro.props as { CategoryObject: CategoryObject, locale: string };
21
- CategoryObject.height = CategoryObject.height ?? 70;
22
- CategoryObject.width = CategoryObject.width ?? 70;
23
-
24
- const mainCategoryLink = getTranslatedLink(`/${CategoryObject.slug}/`, locale);
25
-
26
- ---
27
-
28
- <a
29
- href={mainCategoryLink}
30
- class="carousel-item"
31
- data-astro-prefetch
32
- {...inputProps}
33
- >
34
- <Image
35
- src={`${CategoryObject.photo}`}
36
- alt={CategoryObject.alt}
37
- height={CategoryObject.height}
38
- width={CategoryObject.height}
39
- format="avif"
40
- loading="eager"
41
- onerror="this.style.display='none';"
42
- class="cats-img"
43
- />
44
- <div class="swiper-lazy-preloader"></div>
45
-
46
- <div class="cat-name" itemprop="name">
47
- {CategoryObject.name}
48
- </div>
49
- </a>
1
+ ---
2
+
3
+ import { Image } from "astro:assets";
4
+ import { getTranslatedLink } from "../../utils/text/getTranslatedLink"
5
+
6
+ interface CategoryObject {
7
+ photo: string;
8
+ desc: string;
9
+ alt: string;
10
+ name: string;
11
+ slug: string;
12
+ height?: number;
13
+ width?: number;
14
+ class?: string;
15
+ }
16
+
17
+
18
+
19
+ let inputProps = {};
20
+ const { CategoryObject, locale='en' } = Astro.props as { CategoryObject: CategoryObject, locale: string };
21
+ CategoryObject.height = CategoryObject.height ?? 70;
22
+ CategoryObject.width = CategoryObject.width ?? 70;
23
+
24
+ const mainCategoryLink = getTranslatedLink(`/${CategoryObject.slug}/`, locale);
25
+
26
+ ---
27
+
28
+ <a
29
+ href={mainCategoryLink}
30
+ class="carousel-item"
31
+ data-astro-prefetch
32
+ {...inputProps}
33
+ >
34
+ <Image
35
+ src={`${CategoryObject.photo}`}
36
+ alt={CategoryObject.alt}
37
+ height={CategoryObject.height}
38
+ width={CategoryObject.height}
39
+ format="avif"
40
+ loading="eager"
41
+ onerror="this.style.display='none';"
42
+ class="cats-img"
43
+ />
44
+ <div class="swiper-lazy-preloader"></div>
45
+
46
+ <div class="cat-name" itemprop="name">
47
+ {CategoryObject.name}
48
+ </div>
49
+ </a>
@@ -1,29 +1,29 @@
1
- <script setup lang="ts">
2
- const props = defineProps({
3
- text: {
4
- type: String,
5
- default: null,
6
- required: true,
7
- },
8
- active: {
9
- type: Boolean,
10
- default: false,
11
- required: true,
12
- },
13
- })
14
- </script>
15
-
16
- <template>
17
- <a
18
- v-if="!props.active"
19
- class="w-full block text-base hover:(bg-gray-50 sm:bg-inherit) font-medium text-gray-300 pr-2 py-2 text-left pl-6 sm:(pr-3 text-sm w-auto) md:(py-0.5 pr-4)"
20
- >
21
- {{ props.text }}
22
- </a>
23
- <div
24
- v-else
25
- class="w-full text-base hover:(bg-gray-50 sm:bg-inherit) font-medium pr-2 py-2 pl-6 sm:(w-auto pr-3 text-sm) md:(py-0.5 pr-4) s-active"
26
- >
27
- {{ props.text }}
28
- </div>
29
- </template>
1
+ <script setup lang="ts">
2
+ const props = defineProps({
3
+ text: {
4
+ type: String,
5
+ default: null,
6
+ required: true,
7
+ },
8
+ active: {
9
+ type: Boolean,
10
+ default: false,
11
+ required: true,
12
+ },
13
+ })
14
+ </script>
15
+
16
+ <template>
17
+ <a
18
+ v-if="!props.active"
19
+ class="w-full block text-base hover:(bg-gray-50 sm:bg-inherit) font-medium text-gray-300 pr-2 py-2 text-left pl-6 sm:(pr-3 text-sm w-auto) md:(py-0.5 pr-4)"
20
+ >
21
+ {{ props.text }}
22
+ </a>
23
+ <div
24
+ v-else
25
+ class="w-full text-base hover:(bg-gray-50 sm:bg-inherit) font-medium pr-2 py-2 pl-6 sm:(w-auto pr-3 text-sm) md:(py-0.5 pr-4) s-active"
26
+ >
27
+ {{ props.text }}
28
+ </div>
29
+ </template>
@@ -1,18 +1,18 @@
1
- ---
2
- const { categories } = Astro.props;
3
- ---
4
-
5
- <div class="text-light-blue-400 uppercase text-base z-3 relative w-full">
6
- {
7
- categories
8
- ? categories.map((category) => (
9
- <a
10
- class="term-link text-sm sm:text-base not-first:(before:content-empty) before:(w-px h-2.5 bg-gray-300 mx-2.5 inline-block relative)"
11
- href={category.uri}
12
- >
13
- {category.name}
14
- </a>
15
- ))
16
- : null
17
- }
18
- </div>
1
+ ---
2
+ const { categories } = Astro.props;
3
+ ---
4
+
5
+ <div class="text-light-blue-400 uppercase text-base z-3 relative w-full">
6
+ {
7
+ categories
8
+ ? categories.map((category) => (
9
+ <a
10
+ class="term-link text-sm sm:text-base not-first:(before:content-empty) before:(w-px h-2.5 bg-gray-300 mx-2.5 inline-block relative)"
11
+ href={category.uri}
12
+ >
13
+ {category.name}
14
+ </a>
15
+ ))
16
+ : null
17
+ }
18
+ </div>
@@ -1,12 +1,12 @@
1
- ---
2
- const { class: className } = Astro.props;
3
- ---
4
-
5
- <div
6
- class="bg-vw h-11 flex items-center font-headlight justify-between px-4"
7
- class:list={[className]}
8
- >
9
- <slot name="left-item" />
10
- <slot name="middle-item" />
11
- <slot name="right-item" />
12
- </div>
1
+ ---
2
+ const { class: className } = Astro.props;
3
+ ---
4
+
5
+ <div
6
+ class="bg-vw h-11 flex items-center font-headlight justify-between px-4"
7
+ class:list={[className]}
8
+ >
9
+ <slot name="left-item" />
10
+ <slot name="middle-item" />
11
+ <slot name="right-item" />
12
+ </div>
@@ -1,7 +1,7 @@
1
- ---
2
- const { date } = Astro.props;
3
- ---
4
-
5
- <time class="text-sm flex items-center mr-2" datetime={date}>
6
- {new Date(date).toLocaleDateString()}
7
- </time>
1
+ ---
2
+ const { date } = Astro.props;
3
+ ---
4
+
5
+ <time class="text-sm flex items-center mr-2" datetime={date}>
6
+ {new Date(date).toLocaleDateString()}
7
+ </time>