spoko-design-system 0.9.3 → 0.9.4
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/.astro/settings.json +4 -4
- package/.astro/types.d.ts +1 -1
- package/.claude/settings.local.json +2 -1
- 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 +116 -116
- package/astro-i18next.config.mjs +17 -17
- package/astro-i18next.config.ts +10 -10
- package/astro.config.mjs +86 -86
- package/dev-dist/sw.js +91 -91
- package/dev-dist/workbox-c676b6d3.js +3391 -3391
- package/icon.config.ts +310 -310
- package/index.ts +70 -70
- package/package.json +124 -124
- package/public/arrow-bottom.svg +7 -7
- 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 +12 -12
- package/public/locales/pl/translation.json +12 -12
- 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 +94 -94
- package/src/components/Button.vue +101 -101
- package/src/components/ButtonCopy.astro +183 -183
- 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/CategoryDetails.astro +169 -169
- package/src/components/Category/CategoryLink.vue +28 -28
- package/src/components/Category/CategorySidebarToggler.vue +9 -9
- package/src/components/Category/CategoryTile.astro +37 -37
- package/src/components/Category/CategoryViewToggler.astro +89 -89
- package/src/components/Category/SubCategoryLink.vue +19 -19
- 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 +80 -80
- package/src/components/FeaturesList.vue +37 -37
- 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 +87 -87
- package/src/components/Image.astro +30 -30
- package/src/components/{layout → Layout}/CallToAction.astro +52 -52
- package/src/components/{layout → Layout}/Container.astro +7 -7
- package/src/components/{layout → Layout}/Header.astro +80 -80
- package/src/components/LeftSidebar.astro +53 -53
- package/src/components/MainColors.vue +22 -22
- 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/Post/PostCategories.astro +41 -41
- package/src/components/Post/PostCategories.vue +30 -30
- 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/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 +60 -60
- 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 +216 -216
- 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/config.ts +56 -56
- package/src/design.config.ts +98 -98
- package/src/env.d.ts +6 -6
- package/src/layouts/Layout.astro +61 -61
- 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 +360 -360
- 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 +137 -137
- package/src/pages/components/icons.astro +135 -135
- package/src/pages/components/image.mdx +513 -513
- package/src/pages/components/input.mdx +367 -367
- package/src/pages/components/jumbotron.mdx +359 -359
- package/src/pages/components/modal.mdx +64 -64
- package/src/pages/components/post-header.mdx +64 -64
- 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 +49 -49
- package/src/pages/index.astro +133 -133
- 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 +19 -19
- package/tailwind.config.cjs +8 -8
- package/tsconfig.json +28 -28
- package/uno-config/index.ts +268 -268
- package/uno-config/theme/breakpoints.ts +9 -9
- package/uno-config/theme/colors.ts +64 -64
- package/uno-config/theme/dimensions.ts +17 -17
- package/uno-config/theme/effects.ts +14 -14
- package/uno-config/theme/grid.ts +10 -10
- package/uno-config/theme/index.ts +28 -28
- package/uno-config/theme/shortcuts/buttons.ts +53 -53
- package/uno-config/theme/shortcuts/components.ts +123 -123
- package/uno-config/theme/shortcuts/index.ts +20 -20
- package/uno-config/theme/shortcuts/layout.ts +74 -74
- package/uno-config/theme/typography.ts +29 -29
- package/uno.config.ts +2 -2
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { colors } from "./../../uno-config/theme/colors";
|
|
3
|
-
|
|
4
|
-
// Get color categories
|
|
5
|
-
const colorCategories = Object.entries(colors);
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<template>
|
|
9
|
-
<div class="flex flex-col space-y-12">
|
|
10
|
-
<div v-for="[category, shades] in colorCategories" :key="category">
|
|
11
|
-
<h3 class="capitalize">{{ category }}</h3>
|
|
12
|
-
<div class="grid grid-cols-3 md:grid-cols-9">
|
|
13
|
-
<div v-for="(value, name) in shades" :key="name" class="mb-6">
|
|
14
|
-
<div class="h-12 transition-all" :style="`background: ${value}`"></div>
|
|
15
|
-
<div class="text-sm flex flex-col text-center font-mono text-slate-500">
|
|
16
|
-
<span>{{ name }}</span>
|
|
17
|
-
<span class="uppercase text-xs">{{ value }}</span>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { colors } from "./../../uno-config/theme/colors";
|
|
3
|
+
|
|
4
|
+
// Get color categories
|
|
5
|
+
const colorCategories = Object.entries(colors);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<div class="flex flex-col space-y-12">
|
|
10
|
+
<div v-for="[category, shades] in colorCategories" :key="category">
|
|
11
|
+
<h3 class="capitalize">{{ category }}</h3>
|
|
12
|
+
<div class="grid grid-cols-3 md:grid-cols-9">
|
|
13
|
+
<div v-for="(value, name) in shades" :key="name" class="mb-6">
|
|
14
|
+
<div class="h-12 transition-all" :style="`background: ${value}`"></div>
|
|
15
|
+
<div class="text-sm flex flex-col text-center font-mono text-slate-500">
|
|
16
|
+
<span>{{ name }}</span>
|
|
17
|
+
<span class="uppercase text-xs">{{ value }}</span>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
23
|
</template>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const props = defineProps<{
|
|
3
|
-
label: string;
|
|
4
|
-
}>();
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<template>
|
|
8
|
-
<label class="group text-left w-full max-w-xs flex flex-col">
|
|
9
|
-
<span class="group-hover:text-blue-medium ml-2 text-slate-600 text-sm group-focus-within:text-blue-medium">{{ label
|
|
10
|
-
}}</span>
|
|
11
|
-
<input
|
|
12
|
-
class="group-hover:border-blue-lightest border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-medium"
|
|
13
|
-
type="text" />
|
|
14
|
-
</label>
|
|
15
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const props = defineProps<{
|
|
3
|
+
label: string;
|
|
4
|
+
}>();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<label class="group text-left w-full max-w-xs flex flex-col">
|
|
9
|
+
<span class="group-hover:text-blue-medium ml-2 text-slate-600 text-sm group-focus-within:text-blue-medium">{{ label
|
|
10
|
+
}}</span>
|
|
11
|
+
<input
|
|
12
|
+
class="group-hover:border-blue-lightest border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-medium"
|
|
13
|
+
type="text" />
|
|
14
|
+
</label>
|
|
15
|
+
</template>
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
---
|
|
2
|
-
const { id, open } = Astro.props;
|
|
3
|
-
import Button from "../components/Button.vue";
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<style >
|
|
7
|
-
dialog {
|
|
8
|
-
@apply fixed top-0 left-0 right-0 bottom-0;
|
|
9
|
-
|
|
10
|
-
&::backdrop {
|
|
11
|
-
@apply bg-slate-medium/50 fixed;
|
|
12
|
-
top: 0px;
|
|
13
|
-
right: 0px;
|
|
14
|
-
bottom: 0px;
|
|
15
|
-
left: 0px;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
</style>
|
|
19
|
-
|
|
20
|
-
<Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
|
|
21
|
-
|
|
22
|
-
<dialog id={id} class="p-6">
|
|
23
|
-
<slot name="main" />
|
|
24
|
-
<form method="dialog">
|
|
25
|
-
<slot name="close" />
|
|
26
|
-
</form>
|
|
27
|
-
</dialog>
|
|
1
|
+
---
|
|
2
|
+
const { id, open } = Astro.props;
|
|
3
|
+
import Button from "../components/Button.vue";
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<style >
|
|
7
|
+
dialog {
|
|
8
|
+
@apply fixed top-0 left-0 right-0 bottom-0;
|
|
9
|
+
|
|
10
|
+
&::backdrop {
|
|
11
|
+
@apply bg-slate-medium/50 fixed;
|
|
12
|
+
top: 0px;
|
|
13
|
+
right: 0px;
|
|
14
|
+
bottom: 0px;
|
|
15
|
+
left: 0px;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
</style>
|
|
19
|
+
|
|
20
|
+
<Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
|
|
21
|
+
|
|
22
|
+
<dialog id={id} class="p-6">
|
|
23
|
+
<slot name="main" />
|
|
24
|
+
<form method="dialog">
|
|
25
|
+
<slot name="close" />
|
|
26
|
+
</form>
|
|
27
|
+
</dialog>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<article id="article" class="content">
|
|
2
|
-
<section class="main-section">
|
|
3
|
-
<slot />
|
|
4
|
-
</section>
|
|
5
|
-
</article>
|
|
1
|
+
<article id="article" class="content">
|
|
2
|
+
<section class="main-section">
|
|
3
|
+
<slot />
|
|
4
|
+
</section>
|
|
5
|
+
</article>
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { PropType } from 'vue';
|
|
3
|
-
|
|
4
|
-
const props = defineProps({
|
|
5
|
-
as: {
|
|
6
|
-
type: String as PropType<'div' | 'td' | 'span' | 'h1' | 'h2' | 'h3'>,
|
|
7
|
-
default: 'div',
|
|
8
|
-
required: true,
|
|
9
|
-
},
|
|
10
|
-
number: {
|
|
11
|
-
type: String,
|
|
12
|
-
default: '',
|
|
13
|
-
required: true,
|
|
14
|
-
},
|
|
15
|
-
class: {
|
|
16
|
-
type: String,
|
|
17
|
-
default: '',
|
|
18
|
-
required: false,
|
|
19
|
-
},
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<template>
|
|
25
|
-
<component :is="props.as" :class="props.class">
|
|
26
|
-
{{ props.number }}
|
|
27
|
-
</component>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { PropType } from 'vue';
|
|
3
|
+
|
|
4
|
+
const props = defineProps({
|
|
5
|
+
as: {
|
|
6
|
+
type: String as PropType<'div' | 'td' | 'span' | 'h1' | 'h2' | 'h3'>,
|
|
7
|
+
default: 'div',
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
number: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: '',
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
class: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: '',
|
|
18
|
+
required: false,
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<component :is="props.as" :class="props.class">
|
|
26
|
+
{{ props.number }}
|
|
27
|
+
</component>
|
|
28
28
|
</template>
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
---
|
|
2
|
-
interface Category {
|
|
3
|
-
id: number;
|
|
4
|
-
name: string;
|
|
5
|
-
slug: string;
|
|
6
|
-
description: string;
|
|
7
|
-
count: number;
|
|
8
|
-
parent: number;
|
|
9
|
-
link: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface Props {
|
|
13
|
-
categories: Category[];
|
|
14
|
-
lang?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const { categories, lang = 'en' } = Astro.props;
|
|
18
|
-
|
|
19
|
-
// Determine the category label based on language
|
|
20
|
-
const categoryLabel = lang === 'pl' ? 'Kategoria' : 'Category';
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
<div class="text-brand-secondary uppercase text-base z-3 relative w-full">
|
|
24
|
-
{
|
|
25
|
-
categories && categories.length > 0
|
|
26
|
-
? categories.map((category, index) => (
|
|
27
|
-
<>
|
|
28
|
-
{index > 0 && (
|
|
29
|
-
<span class="w-px h-2.5 bg-gray-300 mx-2.5 inline-block relative" />
|
|
30
|
-
)}
|
|
31
|
-
<a
|
|
32
|
-
class="term-link text-sm sm:text-base hover:text-light-blue-400"
|
|
33
|
-
data-pagefind-filter={`${categoryLabel}:${category.name}`}
|
|
34
|
-
href={category.link}
|
|
35
|
-
>
|
|
36
|
-
{category.name}
|
|
37
|
-
</a>
|
|
38
|
-
</>
|
|
39
|
-
))
|
|
40
|
-
: null
|
|
41
|
-
}
|
|
1
|
+
---
|
|
2
|
+
interface Category {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
description: string;
|
|
7
|
+
count: number;
|
|
8
|
+
parent: number;
|
|
9
|
+
link: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
categories: Category[];
|
|
14
|
+
lang?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const { categories, lang = 'en' } = Astro.props;
|
|
18
|
+
|
|
19
|
+
// Determine the category label based on language
|
|
20
|
+
const categoryLabel = lang === 'pl' ? 'Kategoria' : 'Category';
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<div class="text-brand-secondary uppercase text-base z-3 relative w-full">
|
|
24
|
+
{
|
|
25
|
+
categories && categories.length > 0
|
|
26
|
+
? categories.map((category, index) => (
|
|
27
|
+
<>
|
|
28
|
+
{index > 0 && (
|
|
29
|
+
<span class="w-px h-2.5 bg-gray-300 mx-2.5 inline-block relative" />
|
|
30
|
+
)}
|
|
31
|
+
<a
|
|
32
|
+
class="term-link text-sm sm:text-base hover:text-light-blue-400"
|
|
33
|
+
data-pagefind-filter={`${categoryLabel}:${category.name}`}
|
|
34
|
+
href={category.link}
|
|
35
|
+
>
|
|
36
|
+
{category.name}
|
|
37
|
+
</a>
|
|
38
|
+
</>
|
|
39
|
+
))
|
|
40
|
+
: null
|
|
41
|
+
}
|
|
42
42
|
</div>
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
interface Category {
|
|
3
|
-
id: number;
|
|
4
|
-
name: string;
|
|
5
|
-
slug: string;
|
|
6
|
-
description: string;
|
|
7
|
-
link: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
interface Props {
|
|
11
|
-
category: Category;
|
|
12
|
-
active?: boolean;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
16
|
-
active: false
|
|
17
|
-
});
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<template>
|
|
21
|
-
<a
|
|
22
|
-
:href="props.category.link"
|
|
23
|
-
class="category-link-base"
|
|
24
|
-
:class="{ 'category-link-active': props.active }"
|
|
25
|
-
:title="props.category.description || props.category.name"
|
|
26
|
-
>
|
|
27
|
-
{{ props.category.name }}
|
|
28
|
-
</a>
|
|
29
|
-
</template>
|
|
30
|
-
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Category {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
description: string;
|
|
7
|
+
link: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
category: Category;
|
|
12
|
+
active?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
16
|
+
active: false
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<template>
|
|
21
|
+
<a
|
|
22
|
+
:href="props.category.link"
|
|
23
|
+
class="category-link-base"
|
|
24
|
+
:class="{ 'category-link-active': props.active }"
|
|
25
|
+
:title="props.category.description || props.category.name"
|
|
26
|
+
>
|
|
27
|
+
{{ props.category.name }}
|
|
28
|
+
</a>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
31
|
<!-- No <style> section - all styles are now UnoCSS shortcuts -->
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
---
|
|
2
|
-
interface Props {
|
|
3
|
-
title: string;
|
|
4
|
-
image: string;
|
|
5
|
-
date?: string | null;
|
|
6
|
-
lang: string;
|
|
7
|
-
|
|
8
|
-
author: {
|
|
9
|
-
firstName: string;
|
|
10
|
-
name: string;
|
|
11
|
-
} | null;
|
|
12
|
-
|
|
13
|
-
categories: {
|
|
14
|
-
name: string;
|
|
15
|
-
uri: string;
|
|
16
|
-
}[];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const { image, title, categories, date, author, lang } = Astro.props;
|
|
20
|
-
import PostCategories from "./Post/PostCategories.astro";
|
|
21
|
-
import Date from "./Date.astro";
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
<header
|
|
25
|
-
class="post-header pt-11 w-full justify-center text-white z-2 bg-blue-darkest"
|
|
26
|
-
>
|
|
27
|
-
<div class="heading flex flex-wrap">
|
|
28
|
-
<div
|
|
29
|
-
class="w-full sm:max-w-[640px] md:max-w-3xl lg:max-w-5xl xl:max-w-7xl 2xl:max-w-[1536px] px-4 py-5 flex flex-col flex-wrap"
|
|
30
|
-
>
|
|
31
|
-
<h1
|
|
32
|
-
class="font-textbold text-2xl mb-1 sm:text-3xl md:(text-4xl mb-3) xl:text-6xl mt-1 order-2 line-clamp-3 pb-1"
|
|
33
|
-
>
|
|
34
|
-
{title}
|
|
35
|
-
</h1>
|
|
36
|
-
<PostCategories categories={categories} lang={lang} />
|
|
37
|
-
<div class="order-3 flex items-center text-gray-1 00">
|
|
38
|
-
{
|
|
39
|
-
author && (
|
|
40
|
-
<span class="text-sm" title={author.firstName} data-pagefind-ignore>
|
|
41
|
-
{author.name}
|
|
42
|
-
</span>
|
|
43
|
-
)
|
|
44
|
-
}
|
|
45
|
-
{author && date && <span class="mx-1">-</span>}
|
|
46
|
-
{date && <Date date={date} />}
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
<div class="featured-image">
|
|
51
|
-
<img src={image} alt={title} />
|
|
52
|
-
</div>
|
|
53
|
-
</header>
|
|
54
|
-
|
|
55
|
-
<style >
|
|
56
|
-
.post-header {
|
|
57
|
-
@apply flex relative items-center;
|
|
58
|
-
min-height: 19vw;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.heading {
|
|
62
|
-
@apply text-white relative flex items-center justify-center mt-auto w-full pt-11 z-[2];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.featured-image {
|
|
66
|
-
@apply absolute top-0 bottom-0 left-0 right-0 overflow-hidden w-full bg-gray-100 z-1;
|
|
67
|
-
|
|
68
|
-
&:before,
|
|
69
|
-
&:after {
|
|
70
|
-
@apply content-empty top-0 bottom-0 left-0 right-0 absolute;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
&:before {
|
|
74
|
-
z-index: 5;
|
|
75
|
-
background: linear-gradient(
|
|
76
|
-
0deg,
|
|
77
|
-
rgba(0, 0, 0, 0.95),
|
|
78
|
-
transparent 30%,
|
|
79
|
-
transparent 70%,
|
|
80
|
-
rgba(0, 0, 0, 0.95)
|
|
81
|
-
);
|
|
82
|
-
opacity: 0.5;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
&:after {
|
|
86
|
-
background: radial-gradient(circle at 50% 85%, #00437a 0, #001e50 100%);
|
|
87
|
-
opacity: 0.8;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
img {
|
|
91
|
-
@apply w-full h-full object-cover block max-w-full;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
</style>
|
|
95
|
-
|
|
96
|
-
<style is:global>
|
|
97
|
-
.icon {
|
|
98
|
-
@apply text-brand-secondary mr-2;
|
|
99
|
-
width: 1em;
|
|
100
|
-
height: 1em;
|
|
101
|
-
fill: currentcolor;
|
|
102
|
-
}
|
|
103
|
-
</style>
|
|
1
|
+
---
|
|
2
|
+
interface Props {
|
|
3
|
+
title: string;
|
|
4
|
+
image: string;
|
|
5
|
+
date?: string | null;
|
|
6
|
+
lang: string;
|
|
7
|
+
|
|
8
|
+
author: {
|
|
9
|
+
firstName: string;
|
|
10
|
+
name: string;
|
|
11
|
+
} | null;
|
|
12
|
+
|
|
13
|
+
categories: {
|
|
14
|
+
name: string;
|
|
15
|
+
uri: string;
|
|
16
|
+
}[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const { image, title, categories, date, author, lang } = Astro.props;
|
|
20
|
+
import PostCategories from "./Post/PostCategories.astro";
|
|
21
|
+
import Date from "./Date.astro";
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<header
|
|
25
|
+
class="post-header pt-11 w-full justify-center text-white z-2 bg-blue-darkest"
|
|
26
|
+
>
|
|
27
|
+
<div class="heading flex flex-wrap">
|
|
28
|
+
<div
|
|
29
|
+
class="w-full sm:max-w-[640px] md:max-w-3xl lg:max-w-5xl xl:max-w-7xl 2xl:max-w-[1536px] px-4 py-5 flex flex-col flex-wrap"
|
|
30
|
+
>
|
|
31
|
+
<h1
|
|
32
|
+
class="font-textbold text-2xl mb-1 sm:text-3xl md:(text-4xl mb-3) xl:text-6xl mt-1 order-2 line-clamp-3 pb-1"
|
|
33
|
+
>
|
|
34
|
+
{title}
|
|
35
|
+
</h1>
|
|
36
|
+
<PostCategories categories={categories} lang={lang} />
|
|
37
|
+
<div class="order-3 flex items-center text-gray-1 00">
|
|
38
|
+
{
|
|
39
|
+
author && (
|
|
40
|
+
<span class="text-sm" title={author.firstName} data-pagefind-ignore>
|
|
41
|
+
{author.name}
|
|
42
|
+
</span>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
{author && date && <span class="mx-1">-</span>}
|
|
46
|
+
{date && <Date date={date} />}
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="featured-image">
|
|
51
|
+
<img src={image} alt={title} />
|
|
52
|
+
</div>
|
|
53
|
+
</header>
|
|
54
|
+
|
|
55
|
+
<style >
|
|
56
|
+
.post-header {
|
|
57
|
+
@apply flex relative items-center;
|
|
58
|
+
min-height: 19vw;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.heading {
|
|
62
|
+
@apply text-white relative flex items-center justify-center mt-auto w-full pt-11 z-[2];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.featured-image {
|
|
66
|
+
@apply absolute top-0 bottom-0 left-0 right-0 overflow-hidden w-full bg-gray-100 z-1;
|
|
67
|
+
|
|
68
|
+
&:before,
|
|
69
|
+
&:after {
|
|
70
|
+
@apply content-empty top-0 bottom-0 left-0 right-0 absolute;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
&:before {
|
|
74
|
+
z-index: 5;
|
|
75
|
+
background: linear-gradient(
|
|
76
|
+
0deg,
|
|
77
|
+
rgba(0, 0, 0, 0.95),
|
|
78
|
+
transparent 30%,
|
|
79
|
+
transparent 70%,
|
|
80
|
+
rgba(0, 0, 0, 0.95)
|
|
81
|
+
);
|
|
82
|
+
opacity: 0.5;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&:after {
|
|
86
|
+
background: radial-gradient(circle at 50% 85%, #00437a 0, #001e50 100%);
|
|
87
|
+
opacity: 0.8;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
img {
|
|
91
|
+
@apply w-full h-full object-cover block max-w-full;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
</style>
|
|
95
|
+
|
|
96
|
+
<style is:global>
|
|
97
|
+
.icon {
|
|
98
|
+
@apply text-brand-secondary mr-2;
|
|
99
|
+
width: 1em;
|
|
100
|
+
height: 1em;
|
|
101
|
+
fill: currentcolor;
|
|
102
|
+
}
|
|
103
|
+
</style>
|