spoko-design-system 0.2.49 → 0.2.51

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 (154) hide show
  1. package/.github/dependabot.yml +11 -11
  2. package/.github/todo.yml +3 -3
  3. package/.github/workflows/deploy.yml +39 -39
  4. package/.stackblitzrc +5 -5
  5. package/.vscode/extensions.json +5 -5
  6. package/.vscode/launch.json +11 -11
  7. package/.vscode/settings.json +5 -5
  8. package/LICENSE +21 -21
  9. package/README.md +113 -113
  10. package/astro-i18next.config.mjs +17 -17
  11. package/astro-i18next.config.ts +10 -10
  12. package/astro.config.mjs +147 -147
  13. package/dev-dist/sw.js +91 -91
  14. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  15. package/index.ts +64 -61
  16. package/package.json +109 -109
  17. package/public/fonts/lg.svg +53 -53
  18. package/public/fonts/vwhead-bold-demo.html +549 -549
  19. package/public/fonts/vwhead-regular-demo.html +549 -549
  20. package/public/fonts/vwtext-bold-demo.html +549 -549
  21. package/public/fonts/vwtext-regular-demo.html +549 -549
  22. package/public/github.svg +3 -3
  23. package/public/grid_dot.svg +4 -4
  24. package/public/linkedin.svg +44 -44
  25. package/public/locales/en/translation.json +8 -8
  26. package/public/locales/pl/translation.json +8 -8
  27. package/public/make-scrollable-code-focusable.js +3 -3
  28. package/public/pagefind.yml +3 -3
  29. package/public/polo.blue.svg +29 -29
  30. package/public/spoko.space.svg +71 -71
  31. package/public/twitter.svg +46 -46
  32. package/renovate.json +6 -6
  33. package/sandbox.config.json +11 -11
  34. package/src/MyComponent.astro +8 -8
  35. package/src/components/Badge.vue +19 -19
  36. package/src/components/Badges.vue +21 -21
  37. package/src/components/Breadcrumbs.vue +107 -107
  38. package/src/components/Button.vue +55 -55
  39. package/src/components/ButtonCopy.vue +36 -47
  40. package/src/components/Card.astro +27 -27
  41. package/src/components/Carousel.astro +26 -26
  42. package/src/components/Category/CategoriesCarousel.astro +101 -101
  43. package/src/components/Category/CategoriesSidebar.astro +186 -186
  44. package/src/components/Category/CategoryDetails.astro +82 -82
  45. package/src/components/Category/CategoryLink.vue +23 -23
  46. package/src/components/Category/CategorySection.astro +69 -69
  47. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  48. package/src/components/Category/CategoryTile.astro +42 -42
  49. package/src/components/Category/SubCategoryLink.vue +29 -29
  50. package/src/components/CategoryLink.astro +18 -18
  51. package/src/components/Copyright.astro +12 -12
  52. package/src/components/Date.astro +7 -7
  53. package/src/components/Faq.astro +33 -33
  54. package/src/components/FaqItem.astro +96 -96
  55. package/src/components/FeaturesList.vue +41 -41
  56. package/src/components/FuckRussia.vue +62 -62
  57. package/src/components/HandDrive.astro +29 -29
  58. package/src/components/Header/Header.astro +210 -210
  59. package/src/components/Header/SkipToContent.astro +1 -1
  60. package/src/components/Headline.vue +48 -48
  61. package/src/components/Image.astro +30 -30
  62. package/src/components/Jumbatron.vue +40 -40
  63. package/src/components/LeftSidebar.astro +53 -53
  64. package/src/components/MainColors.vue +23 -23
  65. package/src/components/MainInput.vue +15 -15
  66. package/src/components/Modal.astro +27 -27
  67. package/src/components/PageContent.astro +5 -5
  68. package/src/components/PartNumber.vue +27 -27
  69. package/src/components/PostHeader.astro +103 -103
  70. package/src/components/PrCode.vue +141 -141
  71. package/src/components/Product/ProductButton.vue +18 -18
  72. package/src/components/Product/ProductCodes.vue +174 -174
  73. package/src/components/Product/ProductEngineType.vue +42 -42
  74. package/src/components/Product/ProductImage.astro +41 -41
  75. package/src/components/Product/ProductLinkInfo.astro +37 -37
  76. package/src/components/Product/ProductNumber.astro +61 -105
  77. package/src/components/ProductCarousel.astro +38 -38
  78. package/src/components/ProductCodes.vue +39 -39
  79. package/src/components/ProductDetailName.vue +52 -52
  80. package/src/components/ProductDetailsList.vue +65 -65
  81. package/src/components/ProductTile.astro +48 -48
  82. package/src/components/Quote.vue +23 -23
  83. package/src/components/ReloadPrompt.astro +50 -50
  84. package/src/components/SlimBanner.vue +72 -72
  85. package/src/components/Table.vue +32 -32
  86. package/src/components/TableOfContents.astro +15 -15
  87. package/src/components/Translations.vue +23 -23
  88. package/src/components/flags/FlagPL.vue +3 -3
  89. package/src/components/flags/FlagUA.vue +2 -2
  90. package/src/components/layout/Container.astro +7 -7
  91. package/src/components/layout/Header.astro +80 -80
  92. package/src/config.ts +56 -56
  93. package/src/design.config.ts +81 -81
  94. package/src/env.d.ts +1 -1
  95. package/src/layouts/Layout.astro +60 -60
  96. package/src/layouts/MainLayout.astro +81 -81
  97. package/src/layouts/partials/FooterCommon.astro +4 -4
  98. package/src/layouts/partials/HeadCommon.astro +44 -44
  99. package/src/layouts/partials/HeadSEO.astro +41 -41
  100. package/src/pages/components/badges.mdx +57 -57
  101. package/src/pages/components/breadcrumbs.mdx +139 -139
  102. package/src/pages/components/buttons.mdx +236 -236
  103. package/src/pages/components/card.mdx +294 -294
  104. package/src/pages/components/carousel.mdx +62 -62
  105. package/src/pages/components/copyright.mdx +42 -42
  106. package/src/pages/components/details-list.mdx +115 -115
  107. package/src/pages/components/features-list.mdx +37 -37
  108. package/src/pages/components/flags.mdx +49 -49
  109. package/src/pages/components/fuck-russia.mdx +39 -39
  110. package/src/pages/components/hand-drive.mdx +38 -38
  111. package/src/pages/components/headline.mdx +152 -152
  112. package/src/pages/components/icons.astro +48 -48
  113. package/src/pages/components/image.mdx +513 -513
  114. package/src/pages/components/input.mdx +45 -45
  115. package/src/pages/components/jumbatron.mdx +95 -95
  116. package/src/pages/components/modal.mdx +64 -64
  117. package/src/pages/components/post-header.mdx +60 -60
  118. package/src/pages/components/pr-code.mdx +65 -65
  119. package/src/pages/components/product-number.mdx +59 -66
  120. package/src/pages/components/product-tile.mdx +51 -51
  121. package/src/pages/components/quote.mdx +33 -33
  122. package/src/pages/components/slimbanner.mdx +35 -35
  123. package/src/pages/components/table.mdx +108 -108
  124. package/src/pages/core/colors.mdx +10 -10
  125. package/src/pages/core/grid.mdx +89 -89
  126. package/src/pages/core/introduction.mdx +77 -77
  127. package/src/pages/core/shadows.astro +20 -20
  128. package/src/pages/core/typography.astro +47 -47
  129. package/src/pages/index.astro +126 -126
  130. package/src/pages/patterns/introduction.mdx +60 -60
  131. package/src/pwa.ts +12 -12
  132. package/src/styles/_variables.scss +70 -70
  133. package/src/styles/base/base.css +184 -184
  134. package/src/styles/base/grid.css +92 -92
  135. package/src/styles/base/typography.css +70 -70
  136. package/src/styles/content.css +73 -73
  137. package/src/styles/main.css +7 -7
  138. package/src/types/Product.ts +31 -31
  139. package/src/types/astro.d.ts +3 -3
  140. package/src/utils/product/getPriceFormatted.ts +15 -15
  141. package/src/utils/product/getProductChecklist.ts +17 -17
  142. package/src/utils/product/useFormatProductNumber.ts +42 -0
  143. package/src/utils/seo/getShorterDescription.ts +14 -14
  144. package/src/utils/text/formatDate.ts +5 -5
  145. package/src/utils/text/formatLocaleNumber.ts +6 -6
  146. package/src/utils/text/formatPad.ts +12 -12
  147. package/src/utils/text/getNumberFormatted.ts +33 -33
  148. package/src/utils/text/getTranslatedLink.ts +7 -7
  149. package/src/utils/text.ts +28 -43
  150. package/tailwind.config.cjs +8 -8
  151. package/tsconfig.json +28 -28
  152. package/uno.config.ts +256 -256
  153. package/src/components/ProductNumber copy.astro +0 -116
  154. package/src/components/ProductNumber.astro +0 -105
@@ -1,65 +1,65 @@
1
- <script setup lang="ts">
2
- import { PropType } from "vue";
3
- import ProductDetailName from "./ProductDetailName.vue";
4
-
5
- interface TableItem {
6
- id: string,
7
- name: string
8
- value: unknown
9
- }
10
-
11
- const props = defineProps({
12
- items: {type: Array as PropType<TableItem[]>, default: () => []},
13
- caption: { type: String, default: null }
14
- })
15
-
16
- </script>
17
-
18
- <template>
19
- <table class="details table-auto text-left bg-white">
20
- <caption v-if="!!$slots.caption || caption">
21
- <slot name="caption">{{ caption }}</slot>
22
- </caption>
23
- <colgroup>
24
- <col>
25
- <col>
26
- </colgroup>
27
- <tbody>
28
- <tr v-for="row, index in props.items" :key="index">
29
- <ProductDetailName as="th" :text="row.name" />
30
- <slot :name="row.id">
31
- <td>{{ row.value }}</td>
32
- </slot>
33
- </tr>
34
- </tbody>
35
- </table>
36
- </template>
37
-
38
- <style scoped>
39
- .details {
40
- @apply border-none shadow-none w-full md:w-auto
41
- box-shadow: none;
42
-
43
- col {
44
- @apply w-1/2 md:w-auto;
45
-
46
- }
47
-
48
- tr {
49
- @apply border-none;
50
- }
51
-
52
- tr,
53
- th {
54
- @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
55
- }
56
-
57
- th {
58
- @apply px-0;
59
- }
60
-
61
- td {
62
- @apply relative;
63
- }
64
- }
65
- </style>
1
+ <script setup lang="ts">
2
+ import { PropType } from "vue";
3
+ import ProductDetailName from "./ProductDetailName.vue";
4
+
5
+ interface TableItem {
6
+ id: string,
7
+ name: string
8
+ value: unknown
9
+ }
10
+
11
+ const props = defineProps({
12
+ items: {type: Array as PropType<TableItem[]>, default: () => []},
13
+ caption: { type: String, default: null }
14
+ })
15
+
16
+ </script>
17
+
18
+ <template>
19
+ <table class="details table-auto text-left bg-white">
20
+ <caption v-if="!!$slots.caption || caption">
21
+ <slot name="caption">{{ caption }}</slot>
22
+ </caption>
23
+ <colgroup>
24
+ <col>
25
+ <col>
26
+ </colgroup>
27
+ <tbody>
28
+ <tr v-for="row, index in props.items" :key="index">
29
+ <ProductDetailName as="th" :text="row.name" />
30
+ <slot :name="row.id">
31
+ <td>{{ row.value }}</td>
32
+ </slot>
33
+ </tr>
34
+ </tbody>
35
+ </table>
36
+ </template>
37
+
38
+ <style scoped>
39
+ .details {
40
+ @apply border-none shadow-none w-full md:w-auto
41
+ box-shadow: none;
42
+
43
+ col {
44
+ @apply w-1/2 md:w-auto;
45
+
46
+ }
47
+
48
+ tr {
49
+ @apply border-none;
50
+ }
51
+
52
+ tr,
53
+ th {
54
+ @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
55
+ }
56
+
57
+ th {
58
+ @apply px-0;
59
+ }
60
+
61
+ td {
62
+ @apply relative;
63
+ }
64
+ }
65
+ </style>
@@ -1,48 +1,48 @@
1
- ---
2
- const { productObject, locale, index } = Astro.props;
3
- import Image from "./Image.astro"
4
- import ProductNumber from "./Product/ProductNumber.astro"
5
-
6
- ---
7
-
8
- { productObject &&
9
- (
10
-
11
- <!-- product image -->
12
- <div class="img--4/3 img--small">
13
- { productObject.photo !== null ?
14
- <Image
15
- imageObject={
16
- {
17
- src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
- alt: 'Image Alt',
19
- height: '180',
20
- width: '240',
21
- class: 'img--overlay object-cover'
22
- }
23
- }
24
- />
25
- :
26
- <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
- }
28
- </div>
29
-
30
- <!-- product deails -->
31
- <div class="sm:pl-4 flex flex-col" >
32
- <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)"
33
- href={productObject.url} itemprop="url"
34
- title={productObject.number}
35
- >
36
- { productObject.name }
37
- </a>
38
-
39
- <ProductNumber productNumber={productObject.number} copyDisabled={false} />
40
-
41
- { index !== null &&
42
- ( <meta itemprop="position" content={String(index)} />
43
- <meta itemprop="name" content={productObject.name} /> )
44
- }
45
- </div>
46
-
47
- )}
48
-
1
+ ---
2
+ const { productObject, locale, index } = Astro.props;
3
+ import Image from "./Image.astro"
4
+ import ProductNumber from "./Product/ProductNumber.astro"
5
+ import { t } from "i18next";
6
+ ---
7
+
8
+ { productObject &&
9
+ (
10
+
11
+ <!-- product image -->
12
+ <div class="img--4/3 img--small">
13
+ { productObject.photo !== null ?
14
+ <Image
15
+ imageObject={
16
+ {
17
+ src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
+ alt: 'Image Alt',
19
+ height: '180',
20
+ width: '240',
21
+ class: 'img--overlay object-cover'
22
+ }
23
+ }
24
+ />
25
+ :
26
+ <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
+ }
28
+ </div>
29
+
30
+ <!-- product deails -->
31
+ <div class="sm:pl-4 flex flex-col" >
32
+ <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)"
33
+ href={productObject.url} itemprop="url"
34
+ title={productObject.number}
35
+ >
36
+ { productObject.name }
37
+ </a>
38
+
39
+ <ProductNumber productNumber={productObject.number} copyDisabled={false} buttonTexts={{ copy: t('copy'), copied: t('copied') }} />
40
+
41
+ { index !== null &&
42
+ ( <meta itemprop="position" content={String(index)} />
43
+ <meta itemprop="name" content={productObject.name} /> )
44
+ }
45
+ </div>
46
+
47
+ )}
48
+
@@ -1,23 +1,23 @@
1
- <script setup lang="ts">
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'div',
8
- required: false,
9
- },
10
- text: {
11
- type: String,
12
- default: '',
13
- required: false,
14
- }
15
- })
16
- </script>
17
-
18
- <template>
19
- <component :is="props.as"
20
- class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
- <slot>{{ props.text }}</slot>
22
- </component>
23
- </template>
1
+ <script setup lang="ts">
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'div',
8
+ required: false,
9
+ },
10
+ text: {
11
+ type: String,
12
+ default: '',
13
+ required: false,
14
+ }
15
+ })
16
+ </script>
17
+
18
+ <template>
19
+ <component :is="props.as"
20
+ class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
+ <slot>{{ props.text }}</slot>
22
+ </component>
23
+ </template>
@@ -1,51 +1,51 @@
1
- <script src="./../pwa.ts"></script>
2
- <div
3
- id="pwa-toast"
4
- role="alert"
5
- aria-labelledby="toast-message"
6
- >
7
- <div class="message">
8
- <span id="toast-message"></span>
9
- </div>
10
- <button id="pwa-refresh">
11
- Reload
12
- </button>
13
- <button id="pwa-close">
14
- Close
15
- </button>
16
- </div>
17
-
18
- <style>
19
- #pwa-toast {
20
- visibility: hidden;
21
- position: fixed;
22
- right: 0;
23
- bottom: 0;
24
- margin: 16px;
25
- padding: 12px;
26
- border: 1px solid #8885;
27
- border-radius: 4px;
28
- z-index: 1;
29
- text-align: left;
30
- box-shadow: 3px 4px 5px 0 #8885;
31
- }
32
- #pwa-toast .message {
33
- margin-bottom: 8px;
34
- }
35
- #pwa-toast button {
36
- border: 1px solid #8885;
37
- outline: none;
38
- margin-right: 5px;
39
- border-radius: 2px;
40
- padding: 3px 10px;
41
- }
42
- #pwa-toast.show {
43
- visibility: visible;
44
- }
45
- button#pwa-refresh {
46
- display: none;
47
- }
48
- #pwa-toast.show.refresh button#pwa-refresh {
49
- display: inline-block;
50
- }
1
+ <script src="./../pwa.ts"></script>
2
+ <div
3
+ id="pwa-toast"
4
+ role="alert"
5
+ aria-labelledby="toast-message"
6
+ >
7
+ <div class="message">
8
+ <span id="toast-message"></span>
9
+ </div>
10
+ <button id="pwa-refresh">
11
+ Reload
12
+ </button>
13
+ <button id="pwa-close">
14
+ Close
15
+ </button>
16
+ </div>
17
+
18
+ <style>
19
+ #pwa-toast {
20
+ visibility: hidden;
21
+ position: fixed;
22
+ right: 0;
23
+ bottom: 0;
24
+ margin: 16px;
25
+ padding: 12px;
26
+ border: 1px solid #8885;
27
+ border-radius: 4px;
28
+ z-index: 1;
29
+ text-align: left;
30
+ box-shadow: 3px 4px 5px 0 #8885;
31
+ }
32
+ #pwa-toast .message {
33
+ margin-bottom: 8px;
34
+ }
35
+ #pwa-toast button {
36
+ border: 1px solid #8885;
37
+ outline: none;
38
+ margin-right: 5px;
39
+ border-radius: 2px;
40
+ padding: 3px 10px;
41
+ }
42
+ #pwa-toast.show {
43
+ visibility: visible;
44
+ }
45
+ button#pwa-refresh {
46
+ display: none;
47
+ }
48
+ #pwa-toast.show.refresh button#pwa-refresh {
49
+ display: inline-block;
50
+ }
51
51
  </style>
@@ -1,73 +1,73 @@
1
- <script lang="ts" setup>
2
- import { ref } from 'vue';
3
-
4
- const props = defineProps({
5
- showCloseButton: {
6
- type: Boolean,
7
- default: true,
8
- required: false,
9
- },
10
- })
11
- const isShow = ref(true)
12
- const toggleVisibility = () => {
13
- isShow.value = !isShow.value
14
- }
15
- </script>
16
-
17
- <template>
18
- <div v-if="isShow" data-pagefind-ignore class="slimbanner">
19
- <span
20
- 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%]" />
21
- <span class="leading-none "><span
22
- data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit " />
23
- <a href="https://polo.blue/support-ukraine/" target="_blank" rel="noopener" title="Support Ukraine"
24
- class="underline underline-offset-2 hover:text-blue-wrc">this page</a>.
25
- </span>
26
-
27
- <button class="btn-close text-white" v-if="props.showCloseButton" @click="toggleVisibility()"
28
- aria-label="Toggle">
29
- <span class="close close-dark"></span>
30
- </button>
31
- </div>
32
- <div v-else data-pagefind-ignore
33
- 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 ">
34
- <div class="tracking-widest leading-none">
35
- <span data-text="RUSSIA IS A" /> <span class="underline decoration-red-600 decoration-1 underline-offset-3"
36
- data-text="TERRORIST" /> <span data-text="STATE" />
37
- </div>
38
- <button class="btn-close" v-if="props.showCloseButton" @click="toggleVisibility()"
39
- aria-label="Toggle">
40
- <span class="close close-light"></span>
41
- </button>
42
- </div>
43
- </template>
44
-
45
- <style>
46
- .btn-close {
47
- @apply ml-3 relative w-5 h-5;
48
- }
49
-
50
- .close {
51
- @apply absolute top-0 left-0 opacity-50 transition-opacity duration-200;
52
- }
53
-
54
- .btn-close:hover .close {
55
- @apply opacity-100;
56
- }
57
-
58
- .close:before,
59
- .close:after {
60
- position: absolute;
61
- left: 0.5rem;
62
- content: ' ';
63
- height: 1.25rem;
64
- width: 2px;
65
- }
66
-
67
- .close:before {
68
- transform: rotate(45deg);
69
- }
70
-
71
- .close:after {
72
- transform: rotate(-45deg);
1
+ <script lang="ts" setup>
2
+ import { ref } from 'vue';
3
+
4
+ const props = defineProps({
5
+ showCloseButton: {
6
+ type: Boolean,
7
+ default: true,
8
+ required: false,
9
+ },
10
+ })
11
+ const isShow = ref(true)
12
+ const toggleVisibility = () => {
13
+ isShow.value = !isShow.value
14
+ }
15
+ </script>
16
+
17
+ <template>
18
+ <div v-if="isShow" data-pagefind-ignore class="slimbanner">
19
+ <span
20
+ 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%]" />
21
+ <span class="leading-none "><span
22
+ data-text="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit " />
23
+ <a href="https://polo.blue/support-ukraine/" target="_blank" rel="noopener" title="Support Ukraine"
24
+ class="underline underline-offset-2 hover:text-blue-wrc">this page</a>.
25
+ </span>
26
+
27
+ <button class="btn-close text-white" v-if="props.showCloseButton" @click="toggleVisibility()"
28
+ aria-label="Toggle">
29
+ <span class="close close-dark"></span>
30
+ </button>
31
+ </div>
32
+ <div v-else data-pagefind-ignore
33
+ 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 ">
34
+ <div class="tracking-widest leading-none">
35
+ <span data-text="RUSSIA IS A" /> <span class="underline decoration-red-600 decoration-1 underline-offset-3"
36
+ data-text="TERRORIST" /> <span data-text="STATE" />
37
+ </div>
38
+ <button class="btn-close" v-if="props.showCloseButton" @click="toggleVisibility()"
39
+ aria-label="Toggle">
40
+ <span class="close close-light"></span>
41
+ </button>
42
+ </div>
43
+ </template>
44
+
45
+ <style>
46
+ .btn-close {
47
+ @apply ml-3 relative w-5 h-5;
48
+ }
49
+
50
+ .close {
51
+ @apply absolute top-0 left-0 opacity-50 transition-opacity duration-200;
52
+ }
53
+
54
+ .btn-close:hover .close {
55
+ @apply opacity-100;
56
+ }
57
+
58
+ .close:before,
59
+ .close:after {
60
+ position: absolute;
61
+ left: 0.5rem;
62
+ content: ' ';
63
+ height: 1.25rem;
64
+ width: 2px;
65
+ }
66
+
67
+ .close:before {
68
+ transform: rotate(45deg);
69
+ }
70
+
71
+ .close:after {
72
+ transform: rotate(-45deg);
73
73
  }</style>
@@ -1,32 +1,32 @@
1
- <script setup lang="ts">
2
- const props = defineProps<{
3
- data: string;
4
- }>();
5
-
6
- const theads = Object.keys(Object.values(props.data)[0])
7
-
8
- const capitalizeFirstLetter = (text: String) => {
9
- return text[0].toUpperCase() + text.slice(1)
10
- }
11
-
12
- </script>
13
-
14
- <template>
15
- <table class="table-auto text-left border bg-white shadow-md">
16
- <thead class="bg-gray-500 text-white">
17
- <tr class="border">
18
- <th class="px-4 py-2 font-semibold" v-for="thead, index in theads" :key="index">
19
- {{ capitalizeFirstLetter(thead) }}
20
- </th>
21
- </tr>
22
- </thead>
23
- <tbody>
24
- <tr class="border" v-for="row in props.data" :key="row">
25
- <td class="px-4 py-2" v-for="key in Object.keys(row)" :key="key">
26
- {{ row[key] }}
27
- </td>
28
- </tr>
29
- </tbody>
30
- </table>
31
- </template>
32
-
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ data: string;
4
+ }>();
5
+
6
+ const theads = Object.keys(Object.values(props.data)[0])
7
+
8
+ const capitalizeFirstLetter = (text: String) => {
9
+ return text[0].toUpperCase() + text.slice(1)
10
+ }
11
+
12
+ </script>
13
+
14
+ <template>
15
+ <table class="table-auto text-left border bg-white shadow-md">
16
+ <thead class="bg-gray-500 text-white">
17
+ <tr class="border">
18
+ <th class="px-4 py-2 font-semibold" v-for="thead, index in theads" :key="index">
19
+ {{ capitalizeFirstLetter(thead) }}
20
+ </th>
21
+ </tr>
22
+ </thead>
23
+ <tbody>
24
+ <tr class="border" v-for="row in props.data" :key="row">
25
+ <td class="px-4 py-2" v-for="key in Object.keys(row)" :key="key">
26
+ {{ row[key] }}
27
+ </td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ </template>
32
+
@@ -1,15 +1,15 @@
1
- ---
2
- const { headers } = Astro.props;
3
- ---
4
-
5
- <ul class="flex flex-col gap-4 mt-24">
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>
1
+ ---
2
+ const { headers } = Astro.props;
3
+ ---
4
+
5
+ <ul class="flex flex-col gap-4 mt-24">
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>
@@ -1,23 +1,23 @@
1
-
2
- <script setup lang="ts">
3
- import { PropType } from 'vue';
4
-
5
- const props = defineProps({
6
- lang: {
7
- type: String
8
- },
9
- translations: {
10
- type: Object as PropType<{ uri: string | null, title: string | null, name: string | null } | null>
11
- }
12
- });
13
- </script>
14
-
15
- <template>
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']" />
20
- </div>
21
- </template>
22
-
23
-
1
+
2
+ <script setup lang="ts">
3
+ import { PropType } from 'vue';
4
+
5
+ const props = defineProps({
6
+ lang: {
7
+ type: String
8
+ },
9
+ translations: {
10
+ type: Object as PropType<{ uri: string | null, title: string | null, name: string | null } | null>
11
+ }
12
+ });
13
+ </script>
14
+
15
+ <template>
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']" />
20
+ </div>
21
+ </template>
22
+
23
+