spoko-design-system 0.0.9 → 0.1.0

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 (33) hide show
  1. package/package.json +1 -1
  2. package/src/components/Badges.vue +2 -5
  3. package/src/components/Breadcrumbs.vue +2 -2
  4. package/src/components/Button.vue +1 -5
  5. package/src/components/ButtonCopy.vue +8 -8
  6. package/src/components/Card.astro +22 -20
  7. package/src/components/Copyright.astro +9 -9
  8. package/src/components/FuckRussia.vue +22 -7
  9. package/src/components/Header/Header.astro +1 -2
  10. package/src/components/Headline.vue +1 -6
  11. package/src/components/Image.astro +19 -17
  12. package/src/components/Jumbatron.vue +1 -1
  13. package/src/components/LeftSidebar.astro +38 -30
  14. package/src/components/MainColors.vue +8 -14
  15. package/src/components/MainInput.vue +9 -12
  16. package/src/components/MainTable.vue +0 -2
  17. package/src/components/Modal.astro +13 -13
  18. package/src/components/PageContent.astro +3 -11
  19. package/src/components/PostHeader.astro +1 -2
  20. package/src/components/PrCode.vue +2 -1
  21. package/src/components/ProductCarousel.astro +5 -15
  22. package/src/components/ProductNumber.astro +1 -2
  23. package/src/components/SlimBanner.vue +26 -15
  24. package/src/components/TableOfContents.astro +12 -9
  25. package/src/components/Translations.vue +4 -8
  26. package/src/components/flags/FlagPL.vue +2 -1
  27. package/src/layouts/Layout.astro +48 -33
  28. package/src/layouts/MainLayout.astro +69 -53
  29. package/src/pages/components/slimbanner.mdx +7 -7
  30. package/src/pages/core/introduction.mdx +1 -0
  31. package/src/components/Header/AstroLogo.astro +0 -7
  32. package/src/components/RightSidebar.astro +0 -12
  33. package/src/components/newFile.tsx +0 -42
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "0.0.9",
3
+ "version": "0.1.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "astro dev",
@@ -15,10 +15,7 @@ const props = defineProps({
15
15
 
16
16
  <template>
17
17
  <div v-if="(props.badges && props.badges.length > 0)" class="absolute z-2">
18
- <Badge
19
- v-for="(badge, index) in props.badges" :key="index"
20
- :badge="badge"
21
- :class="(badge.toLocaleLowerCase().includes('gti') ? 'bg-red-600' : badge.toLocaleLowerCase().includes('motorsport') ? 'bg-blue-600' : 'bg-black')"
22
- />
18
+ <Badge v-for="(badge, index) in props.badges" :key="index" :badge="badge"
19
+ :class="(badge.toLocaleLowerCase().includes('gti') ? 'bg-red-600' : badge.toLocaleLowerCase().includes('motorsport') ? 'bg-blue-600' : 'bg-black')" />
23
20
  </div>
24
21
  </template>
@@ -30,7 +30,6 @@ const props = defineProps({
30
30
  required: false,
31
31
  default: null
32
32
  }
33
-
34
33
  })
35
34
 
36
35
  const isLast = (index: Number) => {
@@ -105,4 +104,5 @@ const isLast = (index: Number) => {
105
104
  color: inherit;
106
105
  }
107
106
  }
108
- }</style>
107
+ }
108
+ </style>
@@ -18,7 +18,6 @@ const props = defineProps<{
18
18
  }>();
19
19
 
20
20
  const tag = props.href && props.href.length ? 'a' : 'button'
21
-
22
21
  const classes = {
23
22
  "btn-primary": props.primary,
24
23
  "btn-primary-outline": props.primaryOutline,
@@ -33,13 +32,10 @@ const classes = {
33
32
  "btn-normal": !props.small && !props.medium,
34
33
  "rounded-full": props.rounded
35
34
  };
36
-
37
-
38
35
  </script>
39
36
 
40
-
41
37
  <template>
42
- <component :is="tag" :class="classes" :href="props.href" :title="props.title ? props.title : null">
38
+ <component :is="tag" :class="classes" :href="props.href" :title="props.title ? props.title : null">
43
39
  <slot></slot>
44
40
  </component>
45
41
  </template>
@@ -29,9 +29,9 @@ const { copy, copied, isSupported } = useClipboard({ source });
29
29
  </script>
30
30
 
31
31
  <template>
32
- <button v-if="isSupported" :aria-label="String(texts.copy)"
33
- class="btn-copy has-tooltip" @click="copy()">
34
- <span :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`" :data-text="!copied ? texts.copy : texts.copied" />
32
+ <button v-if="isSupported" :aria-label="String(texts.copy)" class="btn-copy has-tooltip" @click="copy()">
33
+ <span :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
34
+ :data-text="!copied ? texts.copy : texts.copied" />
35
35
  <Icon icon="ph-copy-simple-light" class="leading-none w-full h-full" />
36
36
  </button>
37
37
  </template>
@@ -39,9 +39,9 @@ const { copy, copied, isSupported } = useClipboard({ source });
39
39
  <style>
40
40
  .tooltip {
41
41
  @apply invisible absolute;
42
- }
43
-
44
- .has-tooltip:hover .tooltip {
45
- @apply visible z-50;
46
- }
42
+ }
43
+
44
+ .has-tooltip:hover .tooltip {
45
+ @apply visible z-50;
46
+ }
47
47
  </style>
@@ -1,25 +1,27 @@
1
1
  ---
2
2
  const { class: className, imgSrc, imgAlt, href } = Astro.props;
3
3
 
4
- import Image from '../components/Image.astro'
4
+ import Image from "../components/Image.astro";
5
5
  ---
6
6
 
7
- <div class="bg-white border border-gray-200 rounded-lg shadow dark:bg-gray-800 dark:border-gray-700 overflow-hidden">
8
- <a href={href} class="aspect-ratio-video block relative">
9
- { imgSrc && (
10
- <Image
11
- imageObject={
12
- {
13
- src: imgSrc,
14
- alt: imgAlt,
15
- height: '405',
16
- width: '720',
17
- }
18
- }
19
- />
20
- )}
21
- </a>
22
- <div class="p-5">
23
- <slot />
24
- </div>
25
- </div>
7
+ <div
8
+ class="bg-white border border-gray-200 rounded-lg shadow dark:bg-gray-800 dark:border-gray-700 overflow-hidden"
9
+ >
10
+ <a href={href} class="aspect-ratio-video block relative">
11
+ {
12
+ imgSrc && (
13
+ <Image
14
+ imageObject={{
15
+ src: imgSrc,
16
+ alt: imgAlt,
17
+ height: "405",
18
+ width: "720",
19
+ }}
20
+ />
21
+ )
22
+ }
23
+ </a>
24
+ <div class="p-5">
25
+ <slot />
26
+ </div>
27
+ </div>
@@ -1,12 +1,12 @@
1
1
  ---
2
- const { class: className } = Astro.props
2
+ const { class: className } = Astro.props;
3
3
  ---
4
4
 
5
- <div class="bg-vw h-11 flex items-center font-headlight justify-between px-4" class:list={[className]}>
6
- <slot name="left-item"/>
7
- <slot name="middle-item"/>
8
- <slot name="right-item"/>
9
- </div>
10
-
11
-
12
-
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>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <style lang="scss">
23
23
  .bg-ukraine {
24
- background: linear-gradient(180deg, #0066cc 56%, rgba(255,204,0,1) 44%);
24
+ background: linear-gradient(180deg, #0066cc 56%, rgba(255, 204, 0, 1) 44%);
25
25
  }
26
26
 
27
27
  .animate-bull {
@@ -49,17 +49,32 @@
49
49
  }
50
50
 
51
51
  @keyframes AnimateBull1 {
52
- 0% {transform: translate(14px,0px);}
53
- 100% {transform: translate(86px,0px);}
52
+ 0% {
53
+ transform: translate(14px, 0px);
54
+ }
55
+
56
+ 100% {
57
+ transform: translate(86px, 0px);
58
+ }
54
59
  }
55
60
 
56
61
  @keyframes AnimateBull2 {
57
- 0% {transform: translate(38px,0px);}
58
- 100% {transform: translate(80px,0px);}
62
+ 0% {
63
+ transform: translate(38px, 0px);
64
+ }
65
+
66
+ 100% {
67
+ transform: translate(80px, 0px);
68
+ }
59
69
  }
60
70
 
61
71
  @keyframes AnimateBull3 {
62
- 0% {transform: translate(62px,0px);}
63
- 100% {transform: translate(88px,0px);}
72
+ 0% {
73
+ transform: translate(62px, 0px);
74
+ }
75
+
76
+ 100% {
77
+ transform: translate(88px, 0px);
78
+ }
64
79
  }
65
80
  </style>
@@ -64,9 +64,8 @@ import Search from "astro-pagefind/components/Search";
64
64
  @apply h-10 border-0 border-gray-800 rounded-3xl hidden md:block;
65
65
  }
66
66
  .pagefind-ui {
67
-
68
67
  @apply font-textlight text-base;
69
-
68
+
70
69
  &__search-input {
71
70
  height: 40px !important;
72
71
  border: 0;
@@ -1,7 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import type { PropType } from 'vue'
3
3
 
4
-
5
4
  const props = defineProps({
6
5
  as: {
7
6
  type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
@@ -19,20 +18,16 @@ const props = defineProps({
19
18
  default: false
20
19
  }
21
20
  })
22
-
23
21
  </script>
24
22
 
25
23
  <template>
26
24
  <component :is="props.as" class="mb-2.5 flex sm:block md:flex items-center leading-none"
27
25
  :class="`headline ${props.textSize ? `text-${props.textSize}` : 'text-xl'} ${props.underline ? 'headline--underline' : ''}`">
28
- <!-- default -->
29
26
  <slot />
30
-
31
27
  </component>
32
28
  </template>
33
29
 
34
30
  <style lang="scss">
35
-
36
31
  .headline--underline {
37
32
  @apply relative pb-4;
38
33
 
@@ -57,4 +52,4 @@ const props = defineProps({
57
52
  background-color: #64748b
58
53
  }
59
54
  }
60
- </style>
55
+ </style>
@@ -1,28 +1,30 @@
1
1
  ---
2
- import { Image } from 'astro:assets'
2
+ import { Image } from "astro:assets";
3
3
 
4
4
  const { imageObject } = Astro.props;
5
5
  let inputProps = {};
6
6
 
7
7
  if (imageObject.index && imageObject.index === 1) {
8
- inputProps['data-pagefind-meta'] = 'image[src], image_alt[alt]';
9
- inputProps['loading'] = 'eager'
8
+ inputProps["data-pagefind-meta"] = "image[src], image_alt[alt]";
9
+ inputProps["loading"] = "eager";
10
10
  }
11
11
 
12
12
  if (imageObject.srcset && imageObject.srcset.length) {
13
- inputProps['widths'] = imageObject.srcset
13
+ inputProps["widths"] = imageObject.srcset;
14
14
  }
15
-
16
15
  ---
17
- <Image
18
- src={imageObject.src}
19
- alt={imageObject.alt}
20
- height={imageObject.height}
21
- width={imageObject.width}
22
- itemprop="image"
23
- format="avif"
24
- data-pagefind-index-attrs="alt"
25
- onerror="this.style.display='none';"
26
- class={`h-full w-full select-none pointer-none ${imageObject.class || 'object-cover'}`}
27
- { ...inputProps}
28
- />
16
+
17
+ <Image
18
+ src={imageObject.src}
19
+ alt={imageObject.alt}
20
+ height={imageObject.height}
21
+ width={imageObject.width}
22
+ itemprop="image"
23
+ format="avif"
24
+ data-pagefind-index-attrs="alt"
25
+ onerror="this.style.display='none';"
26
+ class={`h-full w-full select-none pointer-none ${
27
+ imageObject.class || "object-cover"
28
+ }`}
29
+ {...inputProps}
30
+ />
@@ -19,7 +19,7 @@ const props = defineProps({
19
19
  <div class="max-w-7xl mx-auto my-auto">
20
20
  <div class="py-8 lg:w-full"
21
21
  :class="props.small ? 'sm:py-12 md:py-14 lg:py-16 xl:py-20' : 'sm:py-16 md:py-20 lg:py-28 xl:py-32'">
22
- <header class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"> <!-- sm:pt-12 md:pt-16 lg:pt-20 xl:pt-28 -->
22
+ <header class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
23
23
  <div class="text-center">
24
24
  <h1 class="text-3xl tracking-tight sm:(text-4xl pt-0) md:text-5xl lg:text-6xl font-headlight text-white">
25
25
  <slot name="intro" />
@@ -1,45 +1,53 @@
1
1
  ---
2
- import { SIDEBAR } from '../config';
3
- import { Astronav, MenuItems} from "astro-navbar";
2
+ import { SIDEBAR } from "../config";
3
+ import { Astronav, MenuItems } from "astro-navbar";
4
4
  const { currentPage } = Astro.props;
5
5
  const currentPageMatch = currentPage.slice(1);
6
6
 
7
7
  const isCurrentPage = (item) => {
8
- if (item.link) {
9
- return item.link.includes(currentPageMatch);
10
- }
11
- return false;
8
+ if (item.link) {
9
+ return item.link.includes(currentPageMatch);
10
+ }
11
+ return false;
12
12
  };
13
13
 
14
14
  const getLinkClasses = (link) => {
15
- const baseClasses = "block py-1.5 px-6 my-1 transition-colors border-l hover:border-slate-400 text-slate-500 hover:text-slate-900"
15
+ const baseClasses =
16
+ "block py-1.5 px-6 my-1 transition-colors border-l hover:border-slate-400 text-slate-500 hover:text-slate-900";
16
17
 
17
- if (isCurrentPage(link)) {
18
- return baseClasses + " border-slate-500 text-slate-900";
19
- } else {
20
- return baseClasses;
21
- }
22
- }
18
+ if (isCurrentPage(link)) {
19
+ return baseClasses + " border-slate-500 text-slate-900";
20
+ } else {
21
+ return baseClasses;
22
+ }
23
+ };
23
24
  ---
25
+
24
26
  <Astronav>
25
- <MenuItems class="hidden z-20 bg-blue-gray-100 w-64 h-full overflow-y-auto px-4 border-r pb-3 absolute lg:(relative bg-blue-500 bg-opacity-5 flex)">
26
- <ul class="mt-0 mb-auto">
27
- {SIDEBAR.map(item => (item.header ?
28
- <h2 class="mt-4 font-semibold text-slate-700">{item.text}</h2> :
29
- <li class={getLinkClasses(item)}>
30
- <a href={item.link}>{item.text}</a>
31
- </li>
32
- ))}
33
- </ul>
34
- </MenuItems>
27
+ <MenuItems
28
+ class="hidden z-20 bg-blue-gray-100 w-64 h-full overflow-y-auto px-4 border-r pb-3 absolute lg:(relative bg-blue-500 bg-opacity-5 flex)"
29
+ >
30
+ <ul class="mt-0 mb-auto">
31
+ {
32
+ SIDEBAR.map((item) =>
33
+ item.header ? (
34
+ <h2 class="mt-4 font-semibold text-slate-700">{item.text}</h2>
35
+ ) : (
36
+ <li class={getLinkClasses(item)}>
37
+ <a href={item.link}>{item.text}</a>
38
+ </li>
39
+ ),
40
+ )
41
+ }
42
+ </ul>
43
+ </MenuItems>
35
44
  </Astronav>
36
45
 
37
46
  <script is:inline>
38
- window.addEventListener('DOMContentLoaded', (event) => {
39
- var target = document.querySelector('[aria-current="page"]');
40
- if (target && target.offsetTop > window.innerHeight - 100) {
41
- document.querySelector('.nav-groups').scrollTop = target.offsetTop;
42
- }
43
- });
47
+ window.addEventListener("DOMContentLoaded", (event) => {
48
+ var target = document.querySelector('[aria-current="page"]');
49
+ if (target && target.offsetTop > window.innerHeight - 100) {
50
+ document.querySelector(".nav-groups").scrollTop = target.offsetTop;
51
+ }
52
+ });
44
53
  </script>
45
-
@@ -1,16 +1,17 @@
1
+ <script setup lang="ts">
2
+ import { COLORS } from "../design.config";
3
+
4
+ const colorNames = Object.keys(COLORS);
5
+ </script>
6
+
1
7
  <template>
2
8
  <div class="flex flex-col space-y-12">
3
9
  <div v-for="name in colorNames" :key="name">
4
10
  <h3 class="capitalize">{{ name }}</h3>
5
11
  <div class="grid grid-cols-3 md:grid-cols-9">
6
12
  <div v-for="color in COLORS[name]" :key="color" class="mb-6">
7
- <div
8
- class="h-12 transition-all"
9
- :style="`background: ${color.value}`"
10
- ></div>
11
- <div
12
- class="text-sm flex flex-col text-center font-mono text-slate-500"
13
- >
13
+ <div class="h-12 transition-all" :style="`background: ${color.value}`"></div>
14
+ <div class="text-sm flex flex-col text-center font-mono text-slate-500">
14
15
  <span>{{ color.name }}</span>
15
16
  <span class="uppercase text-xs">{{ color.value }}</span>
16
17
  </div>
@@ -20,10 +21,3 @@
20
21
  </div>
21
22
  </template>
22
23
 
23
- <script setup lang="ts">
24
- import { COLORS } from "../design.config";
25
-
26
- const colorNames = Object.keys(COLORS);
27
- </script>
28
-
29
- <style scoped></style>
@@ -1,18 +1,15 @@
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ label: string;
4
+ }>();
5
+ </script>
6
+
1
7
  <template>
2
8
  <label class="group text-left w-full max-w-xs flex flex-col">
3
- <span
4
- class="group-hover:text-blue-600 ml-2 text-slate-600 text-sm group-focus-within:text-blue-600"
5
- >{{ label }}</span
6
- >
9
+ <span class="group-hover:text-blue-600 ml-2 text-slate-600 text-sm group-focus-within:text-blue-600">{{ label
10
+ }}</span>
7
11
  <input
8
12
  class="group-hover:border-blue-500 border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-600"
9
- type="text"
10
- />
13
+ type="text" />
11
14
  </label>
12
15
  </template>
13
-
14
- <script setup lang="ts">
15
- const props = defineProps<{
16
- label: string;
17
- }>();
18
- </script>
@@ -11,8 +11,6 @@ const capitalizeFirstLetter = (text: String) => {
11
11
 
12
12
  </script>
13
13
 
14
-
15
-
16
14
  <template>
17
15
  <table class="table-auto text-left border bg-white shadow-md">
18
16
  <thead class="bg-gray-500 text-white">
@@ -1,20 +1,20 @@
1
1
  ---
2
- const {id, open} = Astro.props;
3
- import Button from '../components/Button.vue'
2
+ const { id, open } = Astro.props;
3
+ import Button from "../components/Button.vue";
4
4
  ---
5
- <style lang="scss">
6
- dialog {
7
- @apply fixed top-0 left-0 right-0 bottom-0;
8
5
 
9
- &::backdrop {
10
- @apply bg-gray-500/50 fixed;
11
- top: 0px;
12
- right: 0px;
13
- bottom: 0px;
14
- left: 0px;
6
+ <style lang="scss">
7
+ dialog {
8
+ @apply fixed top-0 left-0 right-0 bottom-0;
15
9
 
10
+ &::backdrop {
11
+ @apply bg-gray-500/50 fixed;
12
+ top: 0px;
13
+ right: 0px;
14
+ bottom: 0px;
15
+ left: 0px;
16
+ }
16
17
  }
17
- }
18
18
  </style>
19
19
 
20
20
  <Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
@@ -24,4 +24,4 @@ dialog {
24
24
  <form method="dialog">
25
25
  <slot name="close" />
26
26
  </form>
27
- </dialog>
27
+ </dialog>
@@ -1,13 +1,5 @@
1
- ---
2
- const { content, githubEditUrl } = Astro.props;
3
- const title = content.title;
4
- ---
5
-
6
1
  <article id="article" class="content">
7
- <section class="main-section">
8
- <nav class="block sm:hidden">
9
- </nav>
10
- <slot />
11
- </section>
2
+ <section class="main-section">
3
+ <slot />
4
+ </section>
12
5
  </article>
13
-
@@ -16,8 +16,7 @@ interface Props {
16
16
  }[];
17
17
  }
18
18
 
19
- const { image, title, categories, date, author } =
20
- Astro.props;
19
+ const { image, title, categories, date, author } = Astro.props;
21
20
  import CategoryLink from "./CategoryLink.astro";
22
21
  import Date from "./Date.astro";
23
22
  ---
@@ -20,7 +20,8 @@ const props = defineProps({
20
20
  </script>
21
21
 
22
22
  <template>
23
- <span data-pagefind-filter="PR-Code" class="btn-prcode " :class="`btn-prcode--${props.prcode} ${props.isPdp ? ' btn-prcode--pdp' : ''}`">
23
+ <span data-pagefind-filter="PR-Code" class="btn-prcode "
24
+ :class="`btn-prcode--${props.prcode} ${props.isPdp ? ' btn-prcode--pdp' : ''}`">
24
25
  {{ props.prcode }}
25
26
  </span>
26
27
  </template>
@@ -19,29 +19,19 @@ export const productObject = {
19
19
  slides-per-view="auto"
20
20
  space-between="0"
21
21
  >
22
- <swiper-slide
23
- class="carousel-product-tile"
24
- >
22
+ <swiper-slide class="carousel-product-tile">
25
23
  <ProductTile productObject={productObject} />
26
24
  </swiper-slide>
27
- <swiper-slide
28
- class="carousel-product-tile"
29
- >
25
+ <swiper-slide class="carousel-product-tile">
30
26
  <ProductTile productObject={productObject} />
31
27
  </swiper-slide>
32
- <swiper-slide
33
- class="carousel-product-tile"
34
- >
28
+ <swiper-slide class="carousel-product-tile">
35
29
  <ProductTile productObject={productObject} />
36
30
  </swiper-slide>
37
- <swiper-slide
38
- class="carousel-product-tile"
39
- >
31
+ <swiper-slide class="carousel-product-tile">
40
32
  <ProductTile productObject={productObject} />
41
33
  </swiper-slide>
42
- <swiper-slide
43
- class="carousel-product-tile"
44
- >
34
+ <swiper-slide class="carousel-product-tile">
45
35
  <ProductTile productObject={productObject} />
46
36
  </swiper-slide>
47
37
  </swiper-container>
@@ -86,7 +86,7 @@ const niceName = (string: string, separator = "\u00A0") => {
86
86
  </div>
87
87
  )}
88
88
 
89
- { copyDisabled && (
89
+ {copyDisabled && (
90
90
  <ButtonCopy
91
91
  productNumber={String(productNumber)}
92
92
  texts={butonTexts}
@@ -94,7 +94,6 @@ const niceName = (string: string, separator = "\u00A0") => {
94
94
  client:only
95
95
  />
96
96
  )}
97
-
98
97
  </div>
99
98
 
100
99
  <div
@@ -15,34 +15,45 @@ const toggleVisibility = () => {
15
15
  </script>
16
16
 
17
17
  <template>
18
- <div v-if="isShow" data-pagefind-ignore class="slimbanner bg-lightBlue-500 drop-shadow-md z-2 px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white relative print-hidden">
19
- <span class="inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#0057b7_50%,50%,#ffd700_100%]" />
20
- <span class="leading-none "><span data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit " />
21
- <a href="https://polo.blue/support-ukraine/" target="_blank" rel="noopener" class="underline underline-offset-2 hover:text-blue-wrc">this page</a>.
18
+ <div v-if="isShow" data-pagefind-ignore
19
+ class="slimbanner bg-lightBlue-500 drop-shadow-md z-2 px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white relative print-hidden">
20
+ <span
21
+ class="inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#0057b7_50%,50%,#ffd700_100%]" />
22
+ <span class="leading-none "><span
23
+ data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit " />
24
+ <a href="https://polo.blue/support-ukraine/" target="_blank" rel="noopener"
25
+ class="underline underline-offset-2 hover:text-blue-wrc">this page</a>.
22
26
  </span>
23
27
 
24
- <button class="ml-3 text-white relative w-5 h-5" v-if="props.showCloseButton" @click="toggleVisibility()" aria-label="Toggle">
25
- <span class="close"></span>
28
+ <button class="ml-3 text-white relative w-5 h-5" v-if="props.showCloseButton" @click="toggleVisibility()"
29
+ aria-label="Toggle">
30
+ <span class="close"></span>
26
31
  </button>
27
32
  </div>
28
- <div v-else data-pagefind-ignore class="px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white relative bg-black drop-shadow-md z-2 ">
33
+ <div v-else data-pagefind-ignore
34
+ class="px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white relative bg-black drop-shadow-md z-2 ">
29
35
  <div class="tracking-widest leading-none">
30
- <span data-text="RUSSIA IS A" /> <span class="underline decoration-red-600 decoration-1 underline-offset-3" data-text="TERRORIST"/> <span data-text="STATE" />
36
+ <span data-text="RUSSIA IS A" /> <span class="underline decoration-red-600 decoration-1 underline-offset-3"
37
+ data-text="TERRORIST" /> <span data-text="STATE" />
31
38
  </div>
32
- <button class="ml-3 text-red-600 relative w-5 h-5" v-if="props.showCloseButton" @click="toggleVisibility()" aria-label="Toggle">
33
- <span class="close"></span>
39
+ <button class="ml-3 text-red-600 relative w-5 h-5" v-if="props.showCloseButton" @click="toggleVisibility()"
40
+ aria-label="Toggle">
41
+ <span class="close"></span>
34
42
  </button>
35
43
  </div>
36
44
  </template>
37
45
 
38
46
  <style lang="scss">
39
47
  .close {
40
- @apply absolute top-0 left-0 opacity-50 ;
48
+ @apply absolute top-0 left-0 opacity-50;
41
49
  }
50
+
42
51
  .close:hover {
43
52
  @apply opacity-100;
44
53
  }
45
- .close:before, .close:after {
54
+
55
+ .close:before,
56
+ .close:after {
46
57
  position: absolute;
47
58
  left: 0.5rem;
48
59
  content: ' ';
@@ -50,11 +61,11 @@ const toggleVisibility = () => {
50
61
  width: 2px;
51
62
  background-color: #fff;
52
63
  }
64
+
53
65
  .close:before {
54
66
  transform: rotate(45deg);
55
67
  }
68
+
56
69
  .close:after {
57
70
  transform: rotate(-45deg);
58
- }
59
-
60
- </style>
71
+ }</style>
@@ -1,12 +1,15 @@
1
1
  ---
2
- const { headers } = Astro.props;
2
+ const { headers } = Astro.props;
3
3
  ---
4
+
4
5
  <ul class="flex flex-col gap-4 mt-24">
5
- { headers.map(({ slug, text }) => {
6
- return (
7
- <li class="text-slate-400 hover:text-slate-800 hover:text-slate-900">
8
- #<a href={`#${slug}`}>{text}</a>
9
- </li>
10
- )
11
- }) }
12
- </ul>
6
+ {
7
+ headers.map(({ slug, text }) => {
8
+ return (
9
+ <li class="text-slate-400 hover:text-slate-800 hover:text-slate-900">
10
+ #<a href={`#${slug}`}>{text}</a>
11
+ </li>
12
+ );
13
+ })
14
+ }
15
+ </ul>
@@ -13,14 +13,10 @@ const props = defineProps({
13
13
  </script>
14
14
 
15
15
  <template>
16
- <div
17
- data-pagefind-ignore
18
- v-if="props.translations !== null && props.translations.uri">
19
- <a aria-label="Change language"
20
- type="button"
21
- :href="translations.uri"
22
- :title="translations.name ? translations.name : translations.title"
23
- :class="[lang === 'en' ? 'i-circle-flags:en' : '', lang === 'pl' ? 'i-circle-flags:pl' : '', 'w-5 hover:rotate--3']" />
16
+ <div data-pagefind-ignore v-if="props.translations !== null && props.translations.uri">
17
+ <a aria-label="Change language" type="button" :href="translations.uri"
18
+ :title="translations.name ? translations.name : translations.title"
19
+ :class="[lang === 'en' ? 'i-circle-flags:en' : '', lang === 'pl' ? 'i-circle-flags:pl' : '', 'w-5 hover:rotate--3']" />
24
20
  </div>
25
21
  </template>
26
22
 
@@ -1,3 +1,4 @@
1
1
  <template>
2
- <span class="drop-shadow inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#fff_50%,50%,#d4213d_100%]" />
2
+ <span
3
+ class="drop-shadow inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#fff_50%,50%,#d4213d_100%]" />
3
4
  </template>
@@ -1,43 +1,58 @@
1
1
  ---
2
- import HeadCommon from '../components/HeadCommon.astro';
3
- import HeadSEO from '../components/HeadSEO.astro';
4
- import * as CONFIG from '../config';
2
+ import HeadCommon from "../components/HeadCommon.astro";
3
+ import HeadSEO from "../components/HeadSEO.astro";
4
+ import * as CONFIG from "../config";
5
5
  import { t, changeLanguage } from "i18next";
6
- import '../styles/main.scss';
7
- import Copyright from '../components/Copyright.astro'
6
+ import "../styles/main.scss";
7
+ import Copyright from "../components/Copyright.astro";
8
8
  const locale = "en";
9
9
  changeLanguage(locale);
10
10
  const { content = {} } = Astro.props;
11
11
  const canonicalURL = new URL(Astro.url.pathname, Astro.site).toString();
12
12
  ---
13
13
 
14
- <html dir={content.dir ?? 'ltr'} lang={content.lang ?? 'en-us'} class="initial">
15
- <head>
16
- <HeadCommon />
17
- <HeadSEO {content} canonicalURL={canonicalURL} />
18
- <title>{content.title ? `${content.title} 🚀 ${CONFIG.SITE.title}` : CONFIG.SITE.title}</title>
19
- </head>
14
+ <html dir={content.dir ?? "ltr"} lang={content.lang ?? "en-us"} class="initial">
15
+ <head>
16
+ <HeadCommon />
17
+ <HeadSEO {content} canonicalURL={canonicalURL} />
18
+ <title>
19
+ {
20
+ content.title
21
+ ? `${content.title} 🚀 ${CONFIG.SITE.title}`
22
+ : CONFIG.SITE.title
23
+ }
24
+ </title>
25
+ </head>
20
26
 
21
- <body class="bg-blue-50">
22
-
23
-
24
- <div class=" bg-white z-10 mb-11 relative">
25
- <slot />
26
- </div>
27
- <footer>
28
- <Copyright class="fixed bottom-0 z-0 w-full">
29
- <a slot="middle-item" href={`https://spoko.space`} target="_blank" rel="follow noopener" class="flex my-auto items-center mx-auto" title={`Proudly made in Poland by ${import.meta.env.COPYRIGHT_DOMAIN}`}>
30
- <div class="text-xxs md:text-xs mr-1 mt-0.5 whitespace-nowrap">createdy by</div>
31
- <img
32
- class="h-4 md:h-5 w-min"
33
- src="spoko.space.svg"
34
- alt="Modern Websites"
35
- width="126"
36
- height="23"
37
- loading="lazy"
38
- >
39
- </a>
40
- </Copyright>
41
- </footer>
42
- </body>
27
+ <body class="bg-blue-50">
28
+ <div class="bg-white z-10 mb-11 relative">
29
+ <slot />
30
+ </div>
31
+ <footer>
32
+ <Copyright class="fixed bottom-0 z-0 w-full">
33
+ <a
34
+ slot="middle-item"
35
+ href={`https://spoko.space`}
36
+ target="_blank"
37
+ rel="follow noopener"
38
+ class="flex my-auto items-center mx-auto"
39
+ title={`Proudly made in Poland by ${
40
+ import.meta.env.COPYRIGHT_DOMAIN
41
+ }`}
42
+ >
43
+ <div class="text-xxs md:text-xs mr-1 mt-0.5 whitespace-nowrap">
44
+ createdy by
45
+ </div>
46
+ <img
47
+ class="h-4 md:h-5 w-min"
48
+ src="spoko.space.svg"
49
+ alt="Modern Websites"
50
+ width="126"
51
+ height="23"
52
+ loading="lazy"
53
+ />
54
+ </a>
55
+ </Copyright>
56
+ </footer>
57
+ </body>
43
58
  </html>
@@ -1,67 +1,83 @@
1
1
  ---
2
- import { ViewTransitions } from 'astro:transitions';
3
- import HeadCommon from '../components/HeadCommon.astro';
4
- import HeadSEO from '../components/HeadSEO.astro';
5
- import Header from '../components/Header/Header.astro';
6
- import PageContent from '../components/PageContent.astro';
7
- import LeftSidebar from '../components/LeftSidebar.astro';
8
- import * as CONFIG from '../config';
2
+ import { ViewTransitions } from "astro:transitions";
3
+ import HeadCommon from "../components/HeadCommon.astro";
4
+ import HeadSEO from "../components/HeadSEO.astro";
5
+ import Header from "../components/Header/Header.astro";
6
+ import PageContent from "../components/PageContent.astro";
7
+ import LeftSidebar from "../components/LeftSidebar.astro";
8
+ import * as CONFIG from "../config";
9
9
  import { t, changeLanguage } from "i18next";
10
- import '../styles/main.scss';
11
- import Copyright from '../components/Copyright.astro'
10
+ import "../styles/main.scss";
11
+ import Copyright from "../components/Copyright.astro";
12
12
  const locale = "en";
13
13
  changeLanguage(locale);
14
14
  const { content = {} } = Astro.props;
15
15
  const currentPage = Astro.url.pathname;
16
16
  const canonicalURL = new URL(Astro.url.pathname, Astro.site).toString();
17
17
  ---
18
+
18
19
  <script>
19
- // Swiper Element
20
- import { register } from "swiper/element/bundle";
21
- document.addEventListener("astro:page-load", () => {
22
- register();
23
- });
20
+ // Swiper Element
21
+ import { register } from "swiper/element/bundle";
22
+ document.addEventListener("astro:page-load", () => {
23
+ register();
24
+ });
24
25
  </script>
25
26
 
26
- <html dir={content.dir ?? 'ltr'} lang={content.lang ?? 'en-us'} class="initial">
27
- <head>
28
- <HeadCommon />
29
- <HeadSEO {content} canonicalURL={canonicalURL} />
30
- <title>{content.title ? `${content.title} 🚀 ${CONFIG.SITE.title}` : CONFIG.SITE.title}</title>
31
- <ViewTransitions />
32
- </head>
27
+ <html dir={content.dir ?? "ltr"} lang={content.lang ?? "en-us"} class="initial">
28
+ <head>
29
+ <HeadCommon />
30
+ <HeadSEO {content} canonicalURL={canonicalURL} />
31
+ <title>
32
+ {
33
+ content.title
34
+ ? `${content.title} 🚀 ${CONFIG.SITE.title}`
35
+ : CONFIG.SITE.title
36
+ }
37
+ </title>
38
+ <ViewTransitions />
39
+ </head>
33
40
 
34
- <body class="bg-blue-50">
35
- <div class="sticky top-0 z-20 w-full bg-white/70">
36
- <Header currentPage={currentPage} />
37
- </div>
41
+ <body class="bg-blue-50">
42
+ <div class="sticky top-0 z-20 w-full bg-white/70">
43
+ <Header currentPage={currentPage} />
44
+ </div>
38
45
 
39
- <div class="flex bg-white z-10 mb-11 relative">
40
- <div class="sticky top-0 flex lg:(h-screen w-64) z-50 ">
41
- <div class="mr-auto" transition:name="sidebar">
42
- <LeftSidebar currentPage={currentPage} />
43
- </div>
44
- </div>
45
- <main class="pb-4 px-4 sm:px-8 col-auto sm:(pb-32) overflow-auto w-full">
46
- <PageContent content={content} transition:name="content">
47
- <slot />
48
- </PageContent>
49
- </main>
50
- </div>
51
- <footer>
52
- <Copyright class="fixed bottom-0 z-0 w-full">
53
- <a slot="middle-item" href="https://spoko.space" target="_blank" rel="follow noopener" class="flex my-auto items-center mx-auto" title={`Proudly made in Poland by spoko.space`}>
54
- <div class="text-xxs md:text-xs mr-1 mt-0.5 whitespace-nowrap">createdy by</div>
55
- <img
56
- class="h-4 md:h-5 w-min"
57
- src="/spoko.space.svg"
58
- alt="Modern Websites"
59
- width="126"
60
- height="23"
61
- loading="lazy"
62
- >
63
- </a>
64
- </Copyright>
65
- </footer>
66
- </body>
46
+ <div class="flex bg-white z-10 mb-11 relative">
47
+ <div class="sticky top-0 flex lg:(h-screen w-64) z-50">
48
+ <div class="mr-auto" transition:name="sidebar">
49
+ <LeftSidebar currentPage={currentPage} />
50
+ </div>
51
+ </div>
52
+ <main class="pb-4 px-4 sm:px-8 col-auto sm:(pb-32) overflow-auto w-full">
53
+ <PageContent content={content} transition:name="content">
54
+ <slot />
55
+ </PageContent>
56
+ </main>
57
+ </div>
58
+ <footer>
59
+ <Copyright class="fixed bottom-0 z-0 w-full">
60
+ <a
61
+ slot="middle-item"
62
+ href="https://spoko.space"
63
+ target="_blank"
64
+ rel="follow noopener"
65
+ class="flex my-auto items-center mx-auto"
66
+ title={`Proudly made in Poland by spoko.space`}
67
+ >
68
+ <div class="text-xxs md:text-xs mr-1 mt-0.5 whitespace-nowrap">
69
+ createdy by
70
+ </div>
71
+ <img
72
+ class="h-4 md:h-5 w-min"
73
+ src="/spoko.space.svg"
74
+ alt="Modern Websites"
75
+ width="126"
76
+ height="23"
77
+ loading="lazy"
78
+ />
79
+ </a>
80
+ </Copyright>
81
+ </footer>
82
+ </body>
67
83
  </html>
@@ -9,13 +9,13 @@ import SlimBanner from '../../components/SlimBanner.vue'
9
9
  SlimBanner - solidarity with Ukraine.
10
10
 
11
11
  <div class="component-preview">
12
- <SlimBanner
13
- class="w-full"
14
- client:load
15
- showCloseButton
16
- transition:name="slim-banner"
17
- transition:persist
18
- />
12
+ <SlimBanner
13
+ class="w-full"
14
+ client:load
15
+ showCloseButton
16
+ transition:name="slim-banner"
17
+ transition:persist
18
+ />
19
19
  </div>
20
20
 
21
21
  ```js
@@ -20,6 +20,7 @@ The project is still in the development phase, use at your own risk ;-)
20
20
  Although it's not required, you can create folders for new sections.
21
21
 
22
22
  To show the section on the left side navigation, add it to the navigation config file at `src/config.ts`.
23
+ #
23
24
 
24
25
  Example:
25
26
 
@@ -1,7 +0,0 @@
1
- ---
2
- import { Icon } from "astro-icon/components";
3
-
4
- const { size } = Astro.props;
5
- ---
6
-
7
- <Icon name="noto-v1:letter-s" />
@@ -1,12 +0,0 @@
1
- ---
2
- import TableOfContents from './TableOfContents.astro';
3
- const { content } = Astro.props;
4
- const headers = content.astro?.headers || [];
5
- ---
6
-
7
- <nav aria-labelledby="grid-right">
8
- <div class="px-8">
9
- <TableOfContents headers={headers} />
10
- <pre>{JSON.stringify(content)}</pre>
11
- </div>
12
- </nav>
@@ -1,42 +0,0 @@
1
- import Image from "./Image.astro";
2
- import ProductNumber from "./ProductNumber.astro";
3
-
4
- <Fragment>
5
- {productObject &&
6
- (
7
-
8
- <Fragment><div class="flex flex-wrap sm:flex-nowrap content-between w-64 min-w-64 md:(w-96 min-w-96) ml-1 lg:ml-1.5 relative bg-white mb-4 underline-on-hover">
9
- {/** product image */}
10
- <div class="img--4/3 img--small">
11
- {productObject.photo !== null ?
12
- <Fragment><Image imageObject={{
13
- src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
14
- alt: 'Image Alt',
15
- height: '180',
16
- width: '240',
17
- class: 'img--overlay object-cover'
18
- }} /></Fragment>
19
- :
20
- <Fragment><img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} /></Fragment>}
21
- </div>
22
-
23
- {/** product deails */}
24
- <div class="sm:pl-4 flex flex-col">
25
- <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)" href={productObject.url} itemprop="url" title={productObject.number}>
26
- {productObject.name}
27
- </a>
28
-
29
- <ProductNumber productNumber={productObject.number} copyDisabled={true} />
30
-
31
- {index !== null &&
32
- (<Fragment><meta itemprop="position" content={String(index)} /></Fragment>
33
- ,
34
- <Fragment><meta itemprop="name" content={productObject.name} /></Fragment>)}
35
- </div>
36
-
37
- </div></Fragment>
38
-
39
- )}
40
-
41
-
42
- </Fragment>;