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.
- package/.github/dependabot.yml +11 -11
- package/.github/todo.yml +3 -3
- package/.github/workflows/deploy.yml +39 -39
- package/.stackblitzrc +5 -5
- package/.vscode/extensions.json +5 -5
- package/.vscode/launch.json +11 -11
- package/.vscode/settings.json +5 -5
- package/LICENSE +21 -21
- package/README.md +113 -113
- package/astro-i18next.config.mjs +17 -17
- package/astro-i18next.config.ts +10 -10
- package/astro.config.mjs +147 -147
- package/dev-dist/sw.js +91 -91
- package/dev-dist/workbox-c676b6d3.js +3391 -3391
- package/index.ts +65 -65
- package/package.json +3 -3
- package/public/fonts/lg.svg +53 -53
- package/public/fonts/vwhead-bold-demo.html +549 -549
- package/public/fonts/vwhead-regular-demo.html +549 -549
- package/public/fonts/vwtext-bold-demo.html +549 -549
- package/public/fonts/vwtext-regular-demo.html +549 -549
- package/public/github.svg +3 -3
- package/public/grid_dot.svg +4 -4
- package/public/linkedin.svg +44 -44
- package/public/locales/en/translation.json +8 -8
- package/public/locales/pl/translation.json +8 -8
- package/public/make-scrollable-code-focusable.js +3 -3
- package/public/pagefind.yml +3 -3
- package/public/polo.blue.svg +29 -29
- package/public/spoko.space.svg +71 -71
- package/public/twitter.svg +46 -46
- package/renovate.json +6 -6
- package/sandbox.config.json +11 -11
- package/src/MyComponent.astro +8 -8
- package/src/components/Badge.vue +19 -19
- package/src/components/Badges.vue +21 -21
- package/src/components/Breadcrumbs.vue +107 -107
- package/src/components/Button.vue +55 -55
- package/src/components/ButtonCopy.vue +36 -36
- package/src/components/Card.astro +27 -27
- package/src/components/Carousel.astro +26 -26
- package/src/components/Category/CategoriesCarousel.astro +101 -101
- package/src/components/Category/CategoriesSidebar.astro +186 -186
- package/src/components/Category/CategoryDetails.astro +82 -82
- package/src/components/Category/CategoryLink.vue +23 -23
- package/src/components/Category/CategorySection.astro +69 -69
- package/src/components/Category/CategorySidebarToggler.vue +9 -9
- package/src/components/Category/CategoryTile.astro +49 -49
- package/src/components/Category/SubCategoryLink.vue +29 -29
- package/src/components/CategoryLink.astro +18 -18
- package/src/components/Copyright.astro +12 -12
- package/src/components/Date.astro +7 -7
- package/src/components/Faq.astro +33 -33
- package/src/components/FaqItem.astro +96 -96
- package/src/components/FeaturesList.vue +41 -41
- package/src/components/FuckRussia.vue +62 -62
- package/src/components/HandDrive.astro +29 -29
- package/src/components/Header/Header.astro +210 -210
- package/src/components/Header/SkipToContent.astro +1 -1
- package/src/components/Headline.vue +48 -48
- package/src/components/Image.astro +30 -30
- package/src/components/Jumbatron.vue +40 -40
- package/src/components/LeftSidebar.astro +53 -53
- package/src/components/MainColors.vue +23 -23
- package/src/components/MainInput.vue +15 -15
- package/src/components/Modal.astro +27 -27
- package/src/components/PageContent.astro +5 -5
- package/src/components/PartNumber.vue +27 -27
- package/src/components/PostHeader.astro +103 -103
- package/src/components/PrCode.vue +141 -141
- package/src/components/Product/ProductButton.vue +18 -18
- package/src/components/Product/ProductCarousel.astro +35 -35
- package/src/components/Product/ProductCodes.vue +174 -174
- package/src/components/Product/ProductEngineType.vue +42 -42
- package/src/components/Product/ProductImage.astro +40 -40
- package/src/components/Product/ProductLink.astro +101 -101
- package/src/components/Product/ProductLink.vue +59 -59
- package/src/components/Product/ProductLinkInfo.astro +37 -37
- package/src/components/Product/ProductNumber.astro +61 -61
- package/src/components/ProductCarousel.astro +38 -38
- package/src/components/ProductCodes.vue +39 -39
- package/src/components/ProductDetailName.vue +52 -52
- package/src/components/ProductDetailsList.vue +65 -65
- package/src/components/ProductTile.astro +48 -48
- package/src/components/Quote.vue +23 -23
- package/src/components/ReloadPrompt.astro +50 -50
- package/src/components/SlimBanner.vue +72 -72
- package/src/components/Table.vue +32 -32
- package/src/components/TableOfContents.astro +15 -15
- package/src/components/Translations.vue +23 -23
- package/src/components/flags/FlagPL.vue +3 -3
- package/src/components/flags/FlagUA.vue +2 -2
- package/src/components/layout/Container.astro +7 -7
- package/src/components/layout/Header.astro +80 -80
- package/src/config.ts +56 -56
- package/src/design.config.ts +81 -81
- package/src/env.d.ts +1 -1
- package/src/layouts/Layout.astro +60 -60
- package/src/layouts/MainLayout.astro +81 -81
- package/src/layouts/partials/FooterCommon.astro +4 -4
- package/src/layouts/partials/HeadCommon.astro +44 -44
- package/src/layouts/partials/HeadSEO.astro +41 -41
- package/src/pages/components/badges.mdx +57 -57
- package/src/pages/components/breadcrumbs.mdx +139 -139
- package/src/pages/components/buttons.mdx +236 -236
- package/src/pages/components/card.mdx +294 -294
- package/src/pages/components/carousel.mdx +62 -62
- package/src/pages/components/copyright.mdx +42 -42
- package/src/pages/components/details-list.mdx +115 -115
- package/src/pages/components/features-list.mdx +37 -37
- package/src/pages/components/flags.mdx +49 -49
- package/src/pages/components/fuck-russia.mdx +39 -39
- package/src/pages/components/hand-drive.mdx +38 -38
- package/src/pages/components/headline.mdx +152 -152
- package/src/pages/components/icons.astro +48 -48
- package/src/pages/components/image.mdx +513 -513
- package/src/pages/components/input.mdx +45 -45
- package/src/pages/components/jumbatron.mdx +95 -95
- package/src/pages/components/modal.mdx +64 -64
- package/src/pages/components/post-header.mdx +60 -60
- package/src/pages/components/pr-code.mdx +65 -65
- package/src/pages/components/product-number.mdx +58 -58
- package/src/pages/components/product-tile.mdx +51 -51
- package/src/pages/components/quote.mdx +33 -33
- package/src/pages/components/slimbanner.mdx +35 -35
- package/src/pages/components/table.mdx +108 -108
- package/src/pages/core/colors.mdx +10 -10
- package/src/pages/core/grid.mdx +89 -89
- package/src/pages/core/introduction.mdx +77 -77
- package/src/pages/core/shadows.astro +20 -20
- package/src/pages/core/typography.astro +47 -47
- package/src/pages/index.astro +126 -126
- package/src/pages/patterns/introduction.mdx +60 -60
- package/src/pwa.ts +12 -12
- package/src/styles/_variables.scss +70 -70
- package/src/styles/base/base.css +184 -184
- package/src/styles/base/grid.css +92 -92
- package/src/styles/base/typography.css +70 -70
- package/src/styles/content.css +73 -73
- package/src/styles/main.css +7 -7
- package/src/types/Product.ts +31 -31
- package/src/types/astro.d.ts +3 -3
- package/src/utils/product/getPriceFormatted.ts +15 -15
- package/src/utils/product/getProductChecklist.ts +17 -17
- package/src/utils/product/useFormatProductNumber.ts +41 -41
- package/src/utils/seo/getShorterDescription.ts +14 -14
- package/src/utils/text/formatDate.ts +5 -5
- package/src/utils/text/formatLocaleNumber.ts +6 -6
- package/src/utils/text/formatPad.ts +12 -12
- package/src/utils/text/getNumberFormatted.ts +33 -33
- package/src/utils/text/getTranslatedLink.ts +5 -5
- package/src/utils/text.ts +28 -28
- package/tailwind.config.cjs +8 -8
- package/tsconfig.json +28 -28
- package/uno.config.ts +256 -256
|
@@ -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,187 +1,187 @@
|
|
|
1
|
-
---
|
|
2
|
-
// import { Category } from 'types/index';
|
|
3
|
-
import CategoryLink from "@components/Category/CategoryLink.vue"
|
|
4
|
-
import SubCategoryLink from "@components/Category/SubCategoryLink.vue"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// import { useTranslation } from "i18next-vue";
|
|
8
|
-
// const { i18next, t } = useTranslation();
|
|
9
|
-
|
|
10
|
-
import i18next, { t } from 'i18next';
|
|
11
|
-
import { Icon } from 'astro-icon/components';
|
|
12
|
-
import { isSidebarOpen } from '../../stores/info.js';
|
|
13
|
-
import { useStore } from '@nanostores/vue';
|
|
14
|
-
import { getCategoryList } from "@utils/category/getCategoryList"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
import { createSubCatLink, createSubSubCatLink} from "@utils/db"
|
|
18
|
-
// import type { SubCategory } from 'types/index'
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// read the store value with the `useStore` hook
|
|
22
|
-
const $isSidebarOpen = useStore(isSidebarOpen);
|
|
23
|
-
const { catParameters, activeSubCategorySlug, activeSubSubCategorySlug, locale } = Astro.props;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const isActiveSubCategory = (subCategorySlug: string) => {
|
|
28
|
-
getCategoryList(i18next.language) // hack to create translations
|
|
29
|
-
return categories.activeSubCategory !== null && categories.activeSubCategory === subCategorySlug
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// const hideSidebar = () => {
|
|
33
|
-
// sidebar.setMode(false)
|
|
34
|
-
// }
|
|
35
|
-
|
|
36
|
-
// const isActiveSubCategory = null
|
|
37
|
-
|
|
38
|
-
// const sidebar = reactive({
|
|
39
|
-
// isShow: true
|
|
40
|
-
// })
|
|
41
|
-
|
|
42
|
-
const categories = {
|
|
43
|
-
activeCategory: catParameters.category,
|
|
44
|
-
activeSubCategory: activeSubCategorySlug ? activeSubCategorySlug : catParameters.category.children ? catParameters.category.children[0] : null,
|
|
45
|
-
activeSubSubCategory: null
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const info = {
|
|
49
|
-
isMobile: false,
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const isShowCatMobileMenu = false
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
<div data-pagefind-ignore id="sidebar" transition:name="sidebar" transition:animate="fade"
|
|
57
|
-
|
|
58
|
-
class="
|
|
59
|
-
sidebar mb-4 fixed top-0 ease delay-100 flex-col ml-0 overflow-hidden z-40 sm:z-0 md:(relative transition-all w-1/4 max-w-64 min-w-56 overflow-visible)" >
|
|
60
|
-
<!-- :class="showSidebar ? 'w-screen h-full-mobile md:h-auto' : 'h-0 w-0 fixed md:(h-auto -ml-64 static)'" -->
|
|
61
|
-
{ categories.activeSubCategory !== null && categories.activeCategory && categories.activeCategory.children && (
|
|
62
|
-
<div
|
|
63
|
-
class="subcat-menu bg-white sm:border box-border sm:border-gray-200 dark:sm:border-gray-500 sm:border-l-0 md:sticky md:top-14 bg-white dark:bg-blue-901 z-10 sm:mb-2 h-full md:h-auto pb-3 h-sidebar max-h-sidebar sm:h-auto sm:max-h-auto"
|
|
64
|
-
>
|
|
65
|
-
<div class={`subcategories flex-col pb-3 ${categories.activeSubSubCategory !== null ? 'additional-subcategories' : ''}`} >
|
|
66
|
-
<div class="sidebar-title">
|
|
67
|
-
<span>{ t('heading.subcategories') }</span>
|
|
68
|
-
<br>
|
|
69
|
-
</div>
|
|
70
|
-
<ul>
|
|
71
|
-
{
|
|
72
|
-
categories.activeCategory.children.map((subcategory) => (
|
|
73
|
-
<li class="border-b-1 border-gray-100 sm:border-none">
|
|
74
|
-
<CategoryLink
|
|
75
|
-
active={isActiveSubCategory(subcategory.slug)}
|
|
76
|
-
text={t(`cat.${categories.activeCategory.slug}.${subcategory.slug}.name`)}
|
|
77
|
-
href={createSubCatLink(locale, catParameters.category.slug, subcategory.slug)}
|
|
78
|
-
/>
|
|
79
|
-
{
|
|
80
|
-
isActiveSubCategory(subcategory.slug) && (
|
|
81
|
-
<div>
|
|
82
|
-
{ catParameters.category && catParameters.subcategory && catParameters.subcategory && catParameters.subcategory && catParameters.subcategory.children && (
|
|
83
|
-
<ul
|
|
84
|
-
class="subcategories sm:pb-2"
|
|
85
|
-
>
|
|
86
|
-
{
|
|
87
|
-
catParameters.subcategory.children.map((subsubcategory) => (
|
|
88
|
-
<li
|
|
89
|
-
class="border-t-1 border-gray-100 sm:border-none"
|
|
90
|
-
>
|
|
91
|
-
<SubCategoryLink
|
|
92
|
-
active={catParameters.subcategory && activeSubSubCategorySlug === subsubcategory.slug}
|
|
93
|
-
text={subsubcategory.name || `missing subsubcat name ${subsubcategory.slug}`}
|
|
94
|
-
href={createSubSubCatLink(locale, catParameters.category.slug, subcategory.slug, subsubcategory.slug)}
|
|
95
|
-
/>
|
|
96
|
-
</li>
|
|
97
|
-
))
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
</ul>
|
|
101
|
-
)
|
|
102
|
-
}
|
|
103
|
-
</div>
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
</li>
|
|
107
|
-
))
|
|
108
|
-
}
|
|
109
|
-
</ul>
|
|
110
|
-
</div>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
<button
|
|
114
|
-
class="absolute top-2.5 left-2 text-3xl w-9 h-9 hidden md:hidden"
|
|
115
|
-
onclick="toggleCatMenu()"
|
|
116
|
-
aria-label="Menu"
|
|
117
|
-
>
|
|
118
|
-
<Icon name="octicon:chevron-left-24" class="" />
|
|
119
|
-
</button>
|
|
120
|
-
<button
|
|
121
|
-
class="absolute top-2.5 right-2 text-3xl w-9 h-9 md:hidden"
|
|
122
|
-
onclick="hideSidebar()"
|
|
123
|
-
aria-label="X"
|
|
124
|
-
>
|
|
125
|
-
<Icon name="octicon:x-24" class="" />
|
|
126
|
-
</button>
|
|
127
|
-
|
|
128
|
-
</div>
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
<div id="ga-sidebar"></div>
|
|
136
|
-
</div>
|
|
137
|
-
|
|
138
|
-
<style scoped>
|
|
139
|
-
|
|
140
|
-
.sidebar {
|
|
141
|
-
|
|
142
|
-
@media (max-width: 768px) {
|
|
143
|
-
&.show {
|
|
144
|
-
@apply w-screen h-full-mobile md:h-auto;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
&:not(.show){
|
|
148
|
-
@apply h-0 w-0 fixed md:(h-auto -ml-64 static);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
&.collapsed {
|
|
153
|
-
@apply md:max-w-0 md:min-w-0;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
.subcategories {
|
|
159
|
-
|
|
160
|
-
.active {
|
|
161
|
-
// @apply bg-blue-700 text-white;
|
|
162
|
-
@apply bg-gray-200 sm:bg-white dark:(bg-blue-901 text-white) text-blue-600 font-600;
|
|
163
|
-
|
|
164
|
-
a {
|
|
165
|
-
color: inherit;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.s-active {
|
|
170
|
-
@apply bg-gray-100 sm:bg-white dark:(bg-blue-901 text-white) text-blue-600 border-gray-400;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
.form-check-input {
|
|
175
|
-
@apply appearance-none h-4 w-4 border border-gray-300 bg-white checked:bg-lightBlue-500 checked:border-lightBlue-500 focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.form-check-input:checked[type=checkbox] {
|
|
179
|
-
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
|
|
180
|
-
}
|
|
181
|
-
</style>
|
|
182
|
-
<script is:inline>
|
|
183
|
-
function hideSidebar() {
|
|
184
|
-
document.getElementById('sidebar').classList.remove("show");
|
|
185
|
-
document.body.classList.remove('overflow-hidden')
|
|
186
|
-
}
|
|
1
|
+
---
|
|
2
|
+
// import { Category } from 'types/index';
|
|
3
|
+
import CategoryLink from "@components/Category/CategoryLink.vue"
|
|
4
|
+
import SubCategoryLink from "@components/Category/SubCategoryLink.vue"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// import { useTranslation } from "i18next-vue";
|
|
8
|
+
// const { i18next, t } = useTranslation();
|
|
9
|
+
|
|
10
|
+
import i18next, { t } from 'i18next';
|
|
11
|
+
import { Icon } from 'astro-icon/components';
|
|
12
|
+
import { isSidebarOpen } from '../../stores/info.js';
|
|
13
|
+
import { useStore } from '@nanostores/vue';
|
|
14
|
+
import { getCategoryList } from "@utils/category/getCategoryList"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
import { createSubCatLink, createSubSubCatLink} from "@utils/db"
|
|
18
|
+
// import type { SubCategory } from 'types/index'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
// read the store value with the `useStore` hook
|
|
22
|
+
const $isSidebarOpen = useStore(isSidebarOpen);
|
|
23
|
+
const { catParameters, activeSubCategorySlug, activeSubSubCategorySlug, locale } = Astro.props;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const isActiveSubCategory = (subCategorySlug: string) => {
|
|
28
|
+
getCategoryList(i18next.language) // hack to create translations
|
|
29
|
+
return categories.activeSubCategory !== null && categories.activeSubCategory === subCategorySlug
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// const hideSidebar = () => {
|
|
33
|
+
// sidebar.setMode(false)
|
|
34
|
+
// }
|
|
35
|
+
|
|
36
|
+
// const isActiveSubCategory = null
|
|
37
|
+
|
|
38
|
+
// const sidebar = reactive({
|
|
39
|
+
// isShow: true
|
|
40
|
+
// })
|
|
41
|
+
|
|
42
|
+
const categories = {
|
|
43
|
+
activeCategory: catParameters.category,
|
|
44
|
+
activeSubCategory: activeSubCategorySlug ? activeSubCategorySlug : catParameters.category.children ? catParameters.category.children[0] : null,
|
|
45
|
+
activeSubSubCategory: null
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const info = {
|
|
49
|
+
isMobile: false,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const isShowCatMobileMenu = false
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
<div data-pagefind-ignore id="sidebar" transition:name="sidebar" transition:animate="fade"
|
|
57
|
+
|
|
58
|
+
class="
|
|
59
|
+
sidebar mb-4 fixed top-0 ease delay-100 flex-col ml-0 overflow-hidden z-40 sm:z-0 md:(relative transition-all w-1/4 max-w-64 min-w-56 overflow-visible)" >
|
|
60
|
+
<!-- :class="showSidebar ? 'w-screen h-full-mobile md:h-auto' : 'h-0 w-0 fixed md:(h-auto -ml-64 static)'" -->
|
|
61
|
+
{ categories.activeSubCategory !== null && categories.activeCategory && categories.activeCategory.children && (
|
|
62
|
+
<div
|
|
63
|
+
class="subcat-menu bg-white sm:border box-border sm:border-gray-200 dark:sm:border-gray-500 sm:border-l-0 md:sticky md:top-14 bg-white dark:bg-blue-901 z-10 sm:mb-2 h-full md:h-auto pb-3 h-sidebar max-h-sidebar sm:h-auto sm:max-h-auto"
|
|
64
|
+
>
|
|
65
|
+
<div class={`subcategories flex-col pb-3 ${categories.activeSubSubCategory !== null ? 'additional-subcategories' : ''}`} >
|
|
66
|
+
<div class="sidebar-title">
|
|
67
|
+
<span>{ t('heading.subcategories') }</span>
|
|
68
|
+
<br>
|
|
69
|
+
</div>
|
|
70
|
+
<ul>
|
|
71
|
+
{
|
|
72
|
+
categories.activeCategory.children.map((subcategory) => (
|
|
73
|
+
<li class="border-b-1 border-gray-100 sm:border-none">
|
|
74
|
+
<CategoryLink
|
|
75
|
+
active={isActiveSubCategory(subcategory.slug)}
|
|
76
|
+
text={t(`cat.${categories.activeCategory.slug}.${subcategory.slug}.name`)}
|
|
77
|
+
href={createSubCatLink(locale, catParameters.category.slug, subcategory.slug)}
|
|
78
|
+
/>
|
|
79
|
+
{
|
|
80
|
+
isActiveSubCategory(subcategory.slug) && (
|
|
81
|
+
<div>
|
|
82
|
+
{ catParameters.category && catParameters.subcategory && catParameters.subcategory && catParameters.subcategory && catParameters.subcategory.children && (
|
|
83
|
+
<ul
|
|
84
|
+
class="subcategories sm:pb-2"
|
|
85
|
+
>
|
|
86
|
+
{
|
|
87
|
+
catParameters.subcategory.children.map((subsubcategory) => (
|
|
88
|
+
<li
|
|
89
|
+
class="border-t-1 border-gray-100 sm:border-none"
|
|
90
|
+
>
|
|
91
|
+
<SubCategoryLink
|
|
92
|
+
active={catParameters.subcategory && activeSubSubCategorySlug === subsubcategory.slug}
|
|
93
|
+
text={subsubcategory.name || `missing subsubcat name ${subsubcategory.slug}`}
|
|
94
|
+
href={createSubSubCatLink(locale, catParameters.category.slug, subcategory.slug, subsubcategory.slug)}
|
|
95
|
+
/>
|
|
96
|
+
</li>
|
|
97
|
+
))
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
</ul>
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
</div>
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
</li>
|
|
107
|
+
))
|
|
108
|
+
}
|
|
109
|
+
</ul>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
<button
|
|
114
|
+
class="absolute top-2.5 left-2 text-3xl w-9 h-9 hidden md:hidden"
|
|
115
|
+
onclick="toggleCatMenu()"
|
|
116
|
+
aria-label="Menu"
|
|
117
|
+
>
|
|
118
|
+
<Icon name="octicon:chevron-left-24" class="" />
|
|
119
|
+
</button>
|
|
120
|
+
<button
|
|
121
|
+
class="absolute top-2.5 right-2 text-3xl w-9 h-9 md:hidden"
|
|
122
|
+
onclick="hideSidebar()"
|
|
123
|
+
aria-label="X"
|
|
124
|
+
>
|
|
125
|
+
<Icon name="octicon:x-24" class="" />
|
|
126
|
+
</button>
|
|
127
|
+
|
|
128
|
+
</div>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
<div id="ga-sidebar"></div>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<style scoped>
|
|
139
|
+
|
|
140
|
+
.sidebar {
|
|
141
|
+
|
|
142
|
+
@media (max-width: 768px) {
|
|
143
|
+
&.show {
|
|
144
|
+
@apply w-screen h-full-mobile md:h-auto;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
&:not(.show){
|
|
148
|
+
@apply h-0 w-0 fixed md:(h-auto -ml-64 static);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&.collapsed {
|
|
153
|
+
@apply md:max-w-0 md:min-w-0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.subcategories {
|
|
159
|
+
|
|
160
|
+
.active {
|
|
161
|
+
// @apply bg-blue-700 text-white;
|
|
162
|
+
@apply bg-gray-200 sm:bg-white dark:(bg-blue-901 text-white) text-blue-600 font-600;
|
|
163
|
+
|
|
164
|
+
a {
|
|
165
|
+
color: inherit;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.s-active {
|
|
170
|
+
@apply bg-gray-100 sm:bg-white dark:(bg-blue-901 text-white) text-blue-600 border-gray-400;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.form-check-input {
|
|
175
|
+
@apply appearance-none h-4 w-4 border border-gray-300 bg-white checked:bg-lightBlue-500 checked:border-lightBlue-500 focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.form-check-input:checked[type=checkbox] {
|
|
179
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
|
|
180
|
+
}
|
|
181
|
+
</style>
|
|
182
|
+
<script is:inline>
|
|
183
|
+
function hideSidebar() {
|
|
184
|
+
document.getElementById('sidebar').classList.remove("show");
|
|
185
|
+
document.body.classList.remove('overflow-hidden')
|
|
186
|
+
}
|
|
187
187
|
</script>
|