spoko-design-system 0.2.83 → 0.2.84

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 (156) 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 +113 -113
  11. package/astro-i18next.config.mjs +17 -17
  12. package/astro-i18next.config.ts +10 -10
  13. package/astro.config.mjs +147 -147
  14. package/dev-dist/sw.js +91 -91
  15. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  16. package/index.ts +62 -65
  17. package/package.json +2 -1
  18. package/public/fonts/lg.svg +53 -53
  19. package/public/fonts/vwhead-bold-demo.html +549 -549
  20. package/public/fonts/vwhead-regular-demo.html +549 -549
  21. package/public/fonts/vwtext-bold-demo.html +549 -549
  22. package/public/fonts/vwtext-regular-demo.html +549 -549
  23. package/public/github.svg +3 -3
  24. package/public/grid_dot.svg +4 -4
  25. package/public/linkedin.svg +44 -44
  26. package/public/locales/en/translation.json +8 -8
  27. package/public/locales/pl/translation.json +8 -8
  28. package/public/make-scrollable-code-focusable.js +3 -3
  29. package/public/pagefind.yml +3 -3
  30. package/public/polo.blue.svg +29 -29
  31. package/public/spoko.space.svg +71 -71
  32. package/public/twitter.svg +46 -46
  33. package/renovate.json +6 -6
  34. package/sandbox.config.json +11 -11
  35. package/src/MyComponent.astro +8 -8
  36. package/src/components/Badge.vue +19 -19
  37. package/src/components/Badges.vue +21 -21
  38. package/src/components/Breadcrumbs.vue +107 -107
  39. package/src/components/Button.vue +63 -63
  40. package/src/components/ButtonCopy.vue +36 -36
  41. package/src/components/Card.astro +27 -27
  42. package/src/components/Carousel.astro +26 -26
  43. package/src/components/Category/CategoriesCarousel.astro +101 -101
  44. package/src/components/Category/CategoryDetails.astro +106 -106
  45. package/src/components/Category/CategoryLink.vue +23 -23
  46. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  47. package/src/components/Category/CategoryTile.astro +49 -49
  48. package/src/components/Category/SubCategoryLink.vue +29 -29
  49. package/src/components/CategoryLink.astro +18 -18
  50. package/src/components/Copyright.astro +12 -12
  51. package/src/components/Date.astro +7 -7
  52. package/src/components/Faq.astro +33 -33
  53. package/src/components/FaqItem.astro +96 -96
  54. package/src/components/FeaturesList.vue +41 -41
  55. package/src/components/FuckRussia.vue +62 -62
  56. package/src/components/HandDrive.astro +29 -29
  57. package/src/components/Header/Header.astro +210 -210
  58. package/src/components/Header/SkipToContent.astro +1 -1
  59. package/src/components/Headline.vue +48 -48
  60. package/src/components/Image.astro +30 -30
  61. package/src/components/Jumbatron.vue +40 -40
  62. package/src/components/LeftSidebar.astro +53 -53
  63. package/src/components/MainColors.vue +23 -23
  64. package/src/components/MainInput.vue +15 -15
  65. package/src/components/Modal.astro +27 -27
  66. package/src/components/PageContent.astro +5 -5
  67. package/src/components/PartNumber.vue +27 -27
  68. package/src/components/PostHeader.astro +103 -103
  69. package/src/components/PrCode.vue +141 -141
  70. package/src/components/Product/ProductButton.vue +18 -18
  71. package/src/components/Product/ProductCarousel.astro +35 -35
  72. package/src/components/Product/ProductCodes.vue +174 -174
  73. package/src/components/Product/ProductEngineType.vue +42 -42
  74. package/src/components/Product/ProductImage.astro +40 -40
  75. package/src/components/Product/ProductLink.astro +101 -101
  76. package/src/components/Product/ProductLink.vue +59 -59
  77. package/src/components/Product/ProductLinkInfo.astro +37 -37
  78. package/src/components/Product/ProductNumber.astro +61 -61
  79. package/src/components/ProductCarousel.astro +38 -38
  80. package/src/components/ProductCodes.vue +39 -39
  81. package/src/components/ProductDetailName.vue +52 -52
  82. package/src/components/ProductDetailsList.vue +65 -65
  83. package/src/components/ProductTile.astro +48 -48
  84. package/src/components/Quote.vue +23 -23
  85. package/src/components/ReloadPrompt.astro +50 -50
  86. package/src/components/SlimBanner.vue +72 -72
  87. package/src/components/Table.vue +32 -32
  88. package/src/components/TableOfContents.astro +15 -15
  89. package/src/components/Translations.vue +23 -23
  90. package/src/components/flags/FlagPL.vue +3 -3
  91. package/src/components/flags/FlagUA.vue +2 -2
  92. package/src/components/layout/Container.astro +7 -7
  93. package/src/components/layout/Header.astro +80 -80
  94. package/src/config.ts +56 -56
  95. package/src/design.config.ts +81 -81
  96. package/src/env.d.ts +7 -2
  97. package/src/layouts/Layout.astro +60 -60
  98. package/src/layouts/MainLayout.astro +81 -81
  99. package/src/layouts/partials/FooterCommon.astro +4 -4
  100. package/src/layouts/partials/HeadCommon.astro +44 -44
  101. package/src/layouts/partials/HeadSEO.astro +41 -41
  102. package/src/pages/components/badges.mdx +57 -57
  103. package/src/pages/components/breadcrumbs.mdx +139 -139
  104. package/src/pages/components/buttons.mdx +253 -253
  105. package/src/pages/components/card.mdx +294 -294
  106. package/src/pages/components/carousel.mdx +62 -62
  107. package/src/pages/components/copyright.mdx +42 -42
  108. package/src/pages/components/details-list.mdx +115 -115
  109. package/src/pages/components/features-list.mdx +37 -37
  110. package/src/pages/components/flags.mdx +49 -49
  111. package/src/pages/components/fuck-russia.mdx +39 -39
  112. package/src/pages/components/hand-drive.mdx +38 -38
  113. package/src/pages/components/headline.mdx +152 -152
  114. package/src/pages/components/icons.astro +48 -48
  115. package/src/pages/components/image.mdx +513 -513
  116. package/src/pages/components/input.mdx +45 -45
  117. package/src/pages/components/jumbatron.mdx +95 -95
  118. package/src/pages/components/modal.mdx +64 -64
  119. package/src/pages/components/post-header.mdx +60 -60
  120. package/src/pages/components/pr-code.mdx +65 -65
  121. package/src/pages/components/product-number.mdx +58 -58
  122. package/src/pages/components/product-tile.mdx +51 -51
  123. package/src/pages/components/quote.mdx +33 -33
  124. package/src/pages/components/slimbanner.mdx +35 -35
  125. package/src/pages/components/table.mdx +108 -108
  126. package/src/pages/core/colors.mdx +10 -10
  127. package/src/pages/core/grid.mdx +89 -89
  128. package/src/pages/core/introduction.mdx +77 -77
  129. package/src/pages/core/shadows.astro +20 -20
  130. package/src/pages/core/typography.astro +47 -47
  131. package/src/pages/index.astro +126 -126
  132. package/src/pages/patterns/introduction.mdx +60 -60
  133. package/src/pwa.ts +12 -12
  134. package/src/styles/_variables.scss +70 -70
  135. package/src/styles/base/base.css +184 -184
  136. package/src/styles/base/grid.css +92 -92
  137. package/src/styles/base/typography.css +70 -70
  138. package/src/styles/content.css +73 -73
  139. package/src/styles/main.css +7 -7
  140. package/src/types/Product.ts +31 -31
  141. package/src/types/astro.d.ts +3 -3
  142. package/src/utils/product/getPriceFormatted.ts +15 -15
  143. package/src/utils/product/getProductChecklist.ts +17 -17
  144. package/src/utils/product/useFormatProductNumber.ts +41 -41
  145. package/src/utils/seo/getShorterDescription.ts +14 -14
  146. package/src/utils/text/formatDate.ts +5 -5
  147. package/src/utils/text/formatLocaleNumber.ts +6 -6
  148. package/src/utils/text/formatPad.ts +12 -12
  149. package/src/utils/text/getNumberFormatted.ts +33 -33
  150. package/src/utils/text/getTranslatedLink.ts +5 -5
  151. package/src/utils/text.ts +19 -28
  152. package/tailwind.config.cjs +8 -8
  153. package/tsconfig.json +28 -28
  154. package/uno.config.ts +250 -250
  155. package/src/components/Category/CategoriesSidebar.astro +0 -187
  156. package/src/components/Category/CategorySection.astro +0 -70
@@ -1,101 +1,101 @@
1
- ---
2
- const { activeCategorySlug, locale, class: className } = Astro.props;
3
-
4
- import { getTranslatedLink } from "@utils/text/getTranslatedLink"
5
- import { getMainCategoryList } from "@utils/category/getMainCategoryList"
6
- import { Image } from 'astro:assets'
7
-
8
- import i18next, { t } from "i18next";
9
- const categories = await getMainCategoryList()
10
- const imgDomain = 'https://api.polo.blue/img/';
11
-
12
- const activeIndex = activeCategorySlug && categories ? categories.map(a => a.slug).findIndex(e => e === activeCategorySlug) : 0
13
- ---
14
- <!-- <div class={`cat-menu ${className ? className : ''}`}
15
- data-pagefind-ignore
16
- itemscope itemtype="https://schema.org/SiteNavigationElement"
17
- transition:persist={`catcarousel${activeIndex}`}
18
- transition:animate="none"
19
- > -->
20
- <swiper-container
21
- class={`categories-carousel flex pb-1 sm:pb-0 bg-white cat-menu ${className ? className : ''}`}
22
- data-pagefind-ignore
23
- itemscope itemtype="https://schema.org/SiteNavigationElement"
24
- transition:persist={`catcarousel${activeIndex}`}
25
- transition:animate="none"
26
- data-active={activeIndex}
27
- initial-slide={activeIndex}
28
- space-between="0"
29
- slides-per-view="auto"
30
- scrollbar="true"
31
- draggable="true"
32
- keyboard
33
- free-mode
34
- data-off-observer
35
- run-callbacks-on-init="false"
36
- >
37
- {
38
- categories.map((category, index) => (
39
- <swiper-slide itemprop="hasPart" role="presentation"
40
- class={`swiper-slide cats-slide group ${category.slug === activeCategorySlug ? 'active': ''}`}
41
- >
42
- <a href={getTranslatedLink(`/${category.slug}/`)}
43
- class="carousel-item"
44
- >
45
- {
46
- // itemprop="url"
47
- // role="menuitem"
48
- // aria-label={ t(`cat.${category.slug}.name`) }
49
- }
50
-
51
- <Image
52
- src={`${imgDomain}${category.photo}`}
53
- alt={t(`cat.${category.slug}.desc`).split('. ', 1)[0]}
54
- height="70"
55
- width="70"
56
- format="avif"
57
- loading="eager"
58
- onerror="this.style.display='none';"
59
- class="cats-img"
60
- />
61
- <div class="swiper-lazy-preloader"></div>
62
-
63
- <div class="cat-name"
64
- // itemprop="name"
65
- >
66
- { t(`cat.${category.slug}.name`) }
67
- </div>
68
- </a>
69
- </swiper-slide>
70
- ))
71
- }
72
-
73
- </swiper-container>
74
- <!-- </div> -->
75
-
76
- <style >
77
- .active {
78
- @apply bg-blue-700 text-white bg-opacity-100;
79
-
80
- &:not(:hover) .cats-img {
81
- filter: invert(100%);
82
- /* // @apply filter-invert; */
83
- }
84
-
85
- }
86
-
87
- .categories-carousel {
88
- @apply overflow-hidden;
89
-
90
- &.swiper-initialized {
91
- .img-preloader {
92
- display: none;
93
- }
94
- }
95
- }
96
-
97
- .swiper-slide {
98
- @apply transition w-[calc(100%/3.55)] min-w-[calc(100%/3.55)] sm:w-35 sm:min-w-35 3xl:min-w-[calc(100%/12.5-4px)];
99
- }
100
-
101
- </style>
1
+ ---
2
+ const { activeCategorySlug, locale, class: className } = Astro.props;
3
+
4
+ import { getTranslatedLink } from "@utils/text/getTranslatedLink"
5
+ import { getMainCategoryList } from "@utils/category/getMainCategoryList"
6
+ import { Image } from 'astro:assets'
7
+
8
+ import i18next, { t } from "i18next";
9
+ const categories = await getMainCategoryList()
10
+ const imgDomain = 'https://api.polo.blue/img/';
11
+
12
+ const activeIndex = activeCategorySlug && categories ? categories.map(a => a.slug).findIndex(e => e === activeCategorySlug) : 0
13
+ ---
14
+ <!-- <div class={`cat-menu ${className ? className : ''}`}
15
+ data-pagefind-ignore
16
+ itemscope itemtype="https://schema.org/SiteNavigationElement"
17
+ transition:persist={`catcarousel${activeIndex}`}
18
+ transition:animate="none"
19
+ > -->
20
+ <swiper-container
21
+ class={`categories-carousel flex pb-1 sm:pb-0 bg-white cat-menu ${className ? className : ''}`}
22
+ data-pagefind-ignore
23
+ itemscope itemtype="https://schema.org/SiteNavigationElement"
24
+ transition:persist={`catcarousel${activeIndex}`}
25
+ transition:animate="none"
26
+ data-active={activeIndex}
27
+ initial-slide={activeIndex}
28
+ space-between="0"
29
+ slides-per-view="auto"
30
+ scrollbar="true"
31
+ draggable="true"
32
+ keyboard
33
+ free-mode
34
+ data-off-observer
35
+ run-callbacks-on-init="false"
36
+ >
37
+ {
38
+ categories.map((category, index) => (
39
+ <swiper-slide itemprop="hasPart" role="presentation"
40
+ class={`swiper-slide cats-slide group ${category.slug === activeCategorySlug ? 'active': ''}`}
41
+ >
42
+ <a href={getTranslatedLink(`/${category.slug}/`)}
43
+ class="carousel-item"
44
+ >
45
+ {
46
+ // itemprop="url"
47
+ // role="menuitem"
48
+ // aria-label={ t(`cat.${category.slug}.name`) }
49
+ }
50
+
51
+ <Image
52
+ src={`${imgDomain}${category.photo}`}
53
+ alt={t(`cat.${category.slug}.desc`).split('. ', 1)[0]}
54
+ height="70"
55
+ width="70"
56
+ format="avif"
57
+ loading="eager"
58
+ onerror="this.style.display='none';"
59
+ class="cats-img"
60
+ />
61
+ <div class="swiper-lazy-preloader"></div>
62
+
63
+ <div class="cat-name"
64
+ // itemprop="name"
65
+ >
66
+ { t(`cat.${category.slug}.name`) }
67
+ </div>
68
+ </a>
69
+ </swiper-slide>
70
+ ))
71
+ }
72
+
73
+ </swiper-container>
74
+ <!-- </div> -->
75
+
76
+ <style >
77
+ .active {
78
+ @apply bg-blue-700 text-white bg-opacity-100;
79
+
80
+ &:not(:hover) .cats-img {
81
+ filter: invert(100%);
82
+ /* // @apply filter-invert; */
83
+ }
84
+
85
+ }
86
+
87
+ .categories-carousel {
88
+ @apply overflow-hidden;
89
+
90
+ &.swiper-initialized {
91
+ .img-preloader {
92
+ display: none;
93
+ }
94
+ }
95
+ }
96
+
97
+ .swiper-slide {
98
+ @apply transition w-[calc(100%/3.55)] min-w-[calc(100%/3.55)] sm:w-35 sm:min-w-35 3xl:min-w-[calc(100%/12.5-4px)];
99
+ }
100
+
101
+ </style>
@@ -1,106 +1,106 @@
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
- const sidebar = document.getElementById('sidebar');
61
- const isMobile = window.matchMedia("(max-width: 768px)").matches;
62
-
63
- if (sidebar) {
64
- if (isMobile) {
65
- document.body.classList.toggle('overflow-hidden');
66
- sidebar.classList.toggle('show');
67
- localStorage.setItem('sidebarState', sidebar.classList.contains('show') ? 'open' : 'closed');
68
- } else {
69
- document.body.classList.remove('overflow-hidden');
70
- sidebar.classList.toggle('collapsed');
71
- localStorage.setItem('sidebarState', sidebar.classList.contains('collapsed') ? 'closed' : 'open');
72
- }
73
- }
74
- }
75
-
76
- // Read status from localStorage on page load
77
- document.addEventListener('DOMContentLoaded', () => {
78
- const sidebar = document.getElementById('sidebar');
79
- const isMobile = window.matchMedia("(max-width: 768px)").matches;
80
- const savedState = localStorage.getItem('sidebarState');
81
-
82
- if (sidebar) {
83
- if (savedState === 'open') {
84
- if (isMobile) {
85
- sidebar.classList.add('show');
86
- } else {
87
- sidebar.classList.remove('collapsed');
88
- }
89
- } else if (savedState === 'closed') {
90
- if (isMobile) {
91
- sidebar.classList.remove('show');
92
- } else {
93
- sidebar.classList.add('collapsed');
94
- }
95
- }
96
- }
97
- });
98
- </script>
99
-
100
-
101
- <style>
102
- .category-toggler {
103
- right: -1px;
104
- bottom: -1px;
105
- }
106
- </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
+ const sidebar = document.getElementById('sidebar');
61
+ const isMobile = window.matchMedia("(max-width: 768px)").matches;
62
+
63
+ if (sidebar) {
64
+ if (isMobile) {
65
+ document.body.classList.toggle('overflow-hidden');
66
+ sidebar.classList.toggle('show');
67
+ localStorage.setItem('sidebarState', sidebar.classList.contains('show') ? 'open' : 'closed');
68
+ } else {
69
+ document.body.classList.remove('overflow-hidden');
70
+ sidebar.classList.toggle('collapsed');
71
+ localStorage.setItem('sidebarState', sidebar.classList.contains('collapsed') ? 'closed' : 'open');
72
+ }
73
+ }
74
+ }
75
+
76
+ // Read status from localStorage on page load
77
+ document.addEventListener('DOMContentLoaded', () => {
78
+ const sidebar = document.getElementById('sidebar');
79
+ const isMobile = window.matchMedia("(max-width: 768px)").matches;
80
+ const savedState = localStorage.getItem('sidebarState');
81
+
82
+ if (sidebar) {
83
+ if (savedState === 'open') {
84
+ if (isMobile) {
85
+ sidebar.classList.add('show');
86
+ } else {
87
+ sidebar.classList.remove('collapsed');
88
+ }
89
+ } else if (savedState === 'closed') {
90
+ if (isMobile) {
91
+ sidebar.classList.remove('show');
92
+ } else {
93
+ sidebar.classList.add('collapsed');
94
+ }
95
+ }
96
+ }
97
+ });
98
+ </script>
99
+
100
+
101
+ <style>
102
+ .category-toggler {
103
+ right: -1px;
104
+ bottom: -1px;
105
+ }
106
+ </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,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>