spoko-design-system 0.2.41 → 0.2.43

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 (158) hide show
  1. package/.env.example +2 -0
  2. package/.github/dependabot.yml +11 -11
  3. package/.github/todo.yml +3 -3
  4. package/.github/workflows/deploy.yml +39 -39
  5. package/.stackblitzrc +5 -5
  6. package/.vscode/extensions.json +5 -5
  7. package/.vscode/launch.json +11 -11
  8. package/.vscode/settings.json +5 -5
  9. package/LICENSE +21 -21
  10. package/README.md +113 -113
  11. package/astro-i18next.config.mjs +17 -17
  12. package/astro-i18next.config.ts +10 -10
  13. package/astro.config.mjs +147 -147
  14. package/dev-dist/sw.js +91 -91
  15. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  16. package/index.ts +51 -58
  17. package/package.json +3 -2
  18. package/public/fonts/lg.svg +53 -53
  19. package/public/fonts/vwhead-bold-demo.html +549 -549
  20. package/public/fonts/vwhead-regular-demo.html +549 -549
  21. package/public/fonts/vwtext-bold-demo.html +549 -549
  22. package/public/fonts/vwtext-regular-demo.html +549 -549
  23. package/public/github.svg +3 -3
  24. package/public/grid_dot.svg +4 -4
  25. package/public/linkedin.svg +44 -44
  26. package/public/locales/en/translation.json +8 -8
  27. package/public/locales/pl/translation.json +8 -8
  28. package/public/make-scrollable-code-focusable.js +3 -3
  29. package/public/pagefind.yml +3 -3
  30. package/public/polo.blue.svg +29 -29
  31. package/public/spoko.space.svg +71 -71
  32. package/public/twitter.svg +46 -46
  33. package/renovate.json +6 -6
  34. package/sandbox.config.json +11 -11
  35. package/src/MyComponent.astro +8 -8
  36. package/src/components/Badge.vue +19 -19
  37. package/src/components/Badges.vue +21 -21
  38. package/src/components/Breadcrumbs.vue +110 -110
  39. package/src/components/Button.vue +55 -55
  40. package/src/components/ButtonCopy.vue +47 -47
  41. package/src/components/Card.astro +27 -27
  42. package/src/components/Carousel.astro +26 -26
  43. package/src/components/Category/CategoriesCarousel.astro +101 -101
  44. package/src/components/Category/CategoriesSidebar.astro +186 -186
  45. package/src/components/Category/CategoryDetails.astro +82 -82
  46. package/src/components/Category/CategoryLink.vue +23 -23
  47. package/src/components/Category/CategorySection.astro +69 -69
  48. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  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 +80 -80
  57. package/src/components/HandDrive.astro +29 -29
  58. package/src/components/Header/Header.astro +214 -214
  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 +156 -156
  71. package/src/components/Product/ProductButton.vue +18 -18
  72. package/src/components/Product/ProductCodes.vue +167 -167
  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 +104 -104
  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/ProductNumber copy.astro +116 -116
  82. package/src/components/ProductNumber.astro +104 -104
  83. package/src/components/ProductTile.astro +48 -48
  84. package/src/components/Quote.vue +23 -23
  85. package/src/components/ReloadPrompt.astro +50 -50
  86. package/src/components/SlimBanner.vue +72 -72
  87. package/src/components/Table.vue +32 -32
  88. package/src/components/TableOfContents.astro +15 -15
  89. package/src/components/Translations.vue +23 -23
  90. package/src/components/flags/FlagPL.vue +3 -3
  91. package/src/components/flags/FlagUA.vue +2 -2
  92. package/src/components/layout/Container.astro +7 -7
  93. package/src/components/layout/Header.astro +80 -80
  94. package/src/config.ts +56 -56
  95. package/src/design.config.ts +81 -81
  96. package/src/env.d.ts +1 -1
  97. package/src/layouts/Layout.astro +60 -60
  98. package/src/layouts/MainLayout.astro +81 -81
  99. package/src/layouts/partials/FooterCommon.astro +4 -4
  100. package/src/layouts/partials/HeadCommon.astro +44 -44
  101. package/src/layouts/partials/HeadSEO.astro +41 -41
  102. package/src/pages/components/badges.mdx +57 -57
  103. package/src/pages/components/breadcrumbs.mdx +139 -139
  104. package/src/pages/components/buttons.mdx +236 -236
  105. package/src/pages/components/card.mdx +294 -294
  106. package/src/pages/components/carousel.mdx +62 -62
  107. package/src/pages/components/copyright.mdx +42 -42
  108. package/src/pages/components/details-list.mdx +115 -115
  109. package/src/pages/components/features-list.mdx +37 -37
  110. package/src/pages/components/flags.mdx +49 -49
  111. package/src/pages/components/fuck-russia.mdx +39 -39
  112. package/src/pages/components/hand-drive.mdx +38 -38
  113. package/src/pages/components/headline.mdx +152 -152
  114. package/src/pages/components/icons.astro +48 -48
  115. package/src/pages/components/image.mdx +513 -513
  116. package/src/pages/components/input.mdx +45 -45
  117. package/src/pages/components/jumbatron.mdx +95 -95
  118. package/src/pages/components/modal.mdx +64 -64
  119. package/src/pages/components/post-header.mdx +60 -60
  120. package/src/pages/components/pr-code.mdx +65 -65
  121. package/src/pages/components/product-number.mdx +66 -66
  122. package/src/pages/components/product-tile.mdx +51 -51
  123. package/src/pages/components/quote.mdx +33 -33
  124. package/src/pages/components/slimbanner.mdx +35 -35
  125. package/src/pages/components/table.mdx +108 -108
  126. package/src/pages/core/colors.mdx +10 -10
  127. package/src/pages/core/grid.mdx +89 -89
  128. package/src/pages/core/introduction.mdx +77 -77
  129. package/src/pages/core/shadows.astro +20 -20
  130. package/src/pages/core/typography.astro +47 -47
  131. package/src/pages/index.astro +126 -126
  132. package/src/pages/patterns/introduction.mdx +60 -60
  133. package/src/pwa.ts +12 -12
  134. package/src/styles/_variables.scss +70 -70
  135. package/src/styles/base/base.css +184 -184
  136. package/src/styles/base/grid.css +92 -92
  137. package/src/styles/base/typography.css +70 -70
  138. package/src/styles/content.css +73 -73
  139. package/src/styles/main.css +7 -7
  140. package/src/types/Product.ts +31 -31
  141. package/src/types/astro.d.ts +4 -5
  142. package/src/types/index.ts +237 -0
  143. package/src/utils/api/getCategories.ts +3 -0
  144. package/src/utils/category/getMainCategoryList.ts +31 -0
  145. package/src/utils/category/getSortedCategories.ts +11 -0
  146. package/src/utils/getData.ts +52 -0
  147. package/src/utils/product/getPriceFormatted.ts +16 -14
  148. package/src/utils/product/getProductChecklist.ts +17 -15
  149. package/src/utils/seo/getShorterDescription.ts +14 -12
  150. package/src/utils/text/formatDate.ts +5 -5
  151. package/src/utils/text/formatLocaleNumber.ts +6 -6
  152. package/src/utils/text/formatPad.ts +12 -11
  153. package/src/utils/text/getNumberFormatted.ts +33 -32
  154. package/src/utils/text/getTranslatedLink.ts +7 -5
  155. package/src/utils/text.ts +42 -42
  156. package/tailwind.config.cjs +8 -8
  157. package/tsconfig.json +28 -11
  158. package/uno.config.ts +256 -256
@@ -1,96 +1,96 @@
1
- ---
2
- import { Markdown } from 'astro-remote';
3
-
4
- /*
5
- Question & Answer based on details & summary HTML tag
6
- https://web.dev/learn/html/details
7
- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary
8
-
9
- */
10
-
11
- interface Props {
12
- data: {
13
- question: string;
14
- answer: string;
15
- };
16
- }
17
-
18
- const { data } = Astro.props;
19
- ---
20
-
21
- { data.answer &&
22
- <details itemscope itemprop="mainEntity" itemtype="https://schema.org/Question" class="[&_summary:after]:open:-rotate-180">
23
- <summary
24
- class="py-2 outline-none cursor-pointer focus:underline text-xl font-500 relative items-center flex justify-between list-none
25
- after:(block duration-200 content-empty bg-contain bg-center bg-no-repeat h-3 w-4 min-w-4 my-auto ml-4 opacity-60 bg-[url(/arrow-bottom.svg)])"
26
- >
27
- <h2 itemprop="name" class=" font-headbold" set:html={data.question} />
28
- </summary>
29
- <div
30
- itemscope
31
- itemprop="acceptedAnswer"
32
- itemtype="https://schema.org/Answer"
33
- >
34
- <div itemprop="text" class="px-0 pb-4">
35
- <Markdown content={data.answer} />
36
- </div>
37
- </div>
38
- </details>
39
-
40
- }
41
-
42
-
43
- <style is:global>
44
-
45
- details {
46
-
47
- &[open] {
48
- h2 {
49
- color: var(--clr-primary-450);
50
- }
51
- }
52
-
53
-
54
- ul {
55
- @apply list-disc pl-5;
56
-
57
- &+p {
58
- @apply mt-2;
59
- }
60
- }
61
-
62
- ol {
63
- @apply list-decimal pl-5;
64
- &+p {
65
- @apply mt-2;
66
- }
67
- }
68
-
69
- h2 {
70
- color: var(--clr-primary-700);
71
- /* font-size: clamp(1.5rem, 1.29rem + 0.59vw, 2rem);
72
- line-height: 120%;
73
- letter-spacing: calc(-0.02em + 0.02rem); */
74
- &:hover {
75
- color: var(--clr-primary-450);
76
- }
77
- }
78
-
79
- h3 {
80
- @apply mt-2;
81
- }
82
-
83
- /* table {
84
- @apply table-auto;
85
- } */
86
-
87
- td, th {
88
- @apply border-b text-left py-2 pr-4;
89
- }
90
-
91
- a {
92
- @apply underline decoration-light-blue-400 underline-offset-2;
93
- }
94
- }
95
-
96
- </style>
1
+ ---
2
+ import { Markdown } from 'astro-remote';
3
+
4
+ /*
5
+ Question & Answer based on details & summary HTML tag
6
+ https://web.dev/learn/html/details
7
+ https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary
8
+
9
+ */
10
+
11
+ interface Props {
12
+ data: {
13
+ question: string;
14
+ answer: string;
15
+ };
16
+ }
17
+
18
+ const { data } = Astro.props;
19
+ ---
20
+
21
+ { data.answer &&
22
+ <details itemscope itemprop="mainEntity" itemtype="https://schema.org/Question" class="[&_summary:after]:open:-rotate-180">
23
+ <summary
24
+ class="py-2 outline-none cursor-pointer focus:underline text-xl font-500 relative items-center flex justify-between list-none
25
+ after:(block duration-200 content-empty bg-contain bg-center bg-no-repeat h-3 w-4 min-w-4 my-auto ml-4 opacity-60 bg-[url(/arrow-bottom.svg)])"
26
+ >
27
+ <h2 itemprop="name" class=" font-headbold" set:html={data.question} />
28
+ </summary>
29
+ <div
30
+ itemscope
31
+ itemprop="acceptedAnswer"
32
+ itemtype="https://schema.org/Answer"
33
+ >
34
+ <div itemprop="text" class="px-0 pb-4">
35
+ <Markdown content={data.answer} />
36
+ </div>
37
+ </div>
38
+ </details>
39
+
40
+ }
41
+
42
+
43
+ <style is:global>
44
+
45
+ details {
46
+
47
+ &[open] {
48
+ h2 {
49
+ color: var(--clr-primary-450);
50
+ }
51
+ }
52
+
53
+
54
+ ul {
55
+ @apply list-disc pl-5;
56
+
57
+ &+p {
58
+ @apply mt-2;
59
+ }
60
+ }
61
+
62
+ ol {
63
+ @apply list-decimal pl-5;
64
+ &+p {
65
+ @apply mt-2;
66
+ }
67
+ }
68
+
69
+ h2 {
70
+ color: var(--clr-primary-700);
71
+ /* font-size: clamp(1.5rem, 1.29rem + 0.59vw, 2rem);
72
+ line-height: 120%;
73
+ letter-spacing: calc(-0.02em + 0.02rem); */
74
+ &:hover {
75
+ color: var(--clr-primary-450);
76
+ }
77
+ }
78
+
79
+ h3 {
80
+ @apply mt-2;
81
+ }
82
+
83
+ /* table {
84
+ @apply table-auto;
85
+ } */
86
+
87
+ td, th {
88
+ @apply border-b text-left py-2 pr-4;
89
+ }
90
+
91
+ a {
92
+ @apply underline decoration-light-blue-400 underline-offset-2;
93
+ }
94
+ }
95
+
96
+ </style>
@@ -1,41 +1,41 @@
1
-
2
- <script lang="ts" setup>
3
- import { PropType } from 'vue';
4
-
5
- const props = defineProps({
6
- items: {
7
- type: Object as PropType<String[] | null>,
8
- default: null,
9
- required: true,
10
- },
11
- caption: {
12
- type: Object as PropType<String | null>,
13
- default: null,
14
- required: false,
15
- }
16
- })
17
- </script>
18
-
19
- <template>
20
- <h2 class="mb-2 colon-after text-xl font-textbold block leading-none" v-if="props.caption">{{ props.caption }}</h2>
21
- <ul class="mb-6">
22
- <li v-for="item in props.items" class="leading-5">
23
- {{ item }}
24
- </li>
25
- </ul>
26
- </template>
27
-
28
-
29
- <style lang="scss" scoped>
30
- ul {
31
- @apply list-square pl-5;
32
-
33
- li {
34
- @apply relative mb-2;
35
-
36
- &::marker {
37
- @apply text-blue-400;
38
- }
39
- }
40
- }
41
- </style>
1
+
2
+ <script lang="ts" setup>
3
+ import { PropType } from 'vue';
4
+
5
+ const props = defineProps({
6
+ items: {
7
+ type: Object as PropType<String[] | null>,
8
+ default: null,
9
+ required: true,
10
+ },
11
+ caption: {
12
+ type: Object as PropType<String | null>,
13
+ default: null,
14
+ required: false,
15
+ }
16
+ })
17
+ </script>
18
+
19
+ <template>
20
+ <h2 class="mb-2 colon-after text-xl font-textbold block leading-none" v-if="props.caption">{{ props.caption }}</h2>
21
+ <ul class="mb-6">
22
+ <li v-for="item in props.items" class="leading-5">
23
+ {{ item }}
24
+ </li>
25
+ </ul>
26
+ </template>
27
+
28
+
29
+ <style lang="scss" scoped>
30
+ ul {
31
+ @apply list-square pl-5;
32
+
33
+ li {
34
+ @apply relative mb-2;
35
+
36
+ &::marker {
37
+ @apply text-blue-400;
38
+ }
39
+ }
40
+ }
41
+ </style>
@@ -1,80 +1,80 @@
1
- <template>
2
- <div class="relative flex" title="FUCK PUTIN! FUCK RUZZIA!">
3
- <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
4
- <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
5
- <div i-mdi:tank class="inline-block bg-ukraine mr-5 mt-0.5" />
6
- <div class="relative">
7
- <div class="inline-block absolute" i-noto-v1:flag-for-flag-russia />
8
- <div i-emojione:fire class="inline-block absolute -mt-1 animate-ping animate-pulseR" />
9
- </div>
10
- <div class="absolute left-0 animate-bull animate-bull--1 -mt-1">
11
- <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
12
- </div>
13
- <div class="absolute left-0 animate-bull animate-bull animate-bull--2 -mt-1">
14
- <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
15
- </div>
16
- <div class="absolute left-0 animate-bull animate-bull--3 -mt-1">
17
- <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
18
- </div>
19
- </div>
20
- </template>
21
-
22
- <style lang="scss">
23
- .bg-ukraine {
24
- background: linear-gradient(180deg, #0066cc 56%, rgba(255, 204, 0, 1) 44%);
25
- }
26
-
27
- .animate-bull {
28
- top: -2px;
29
- // @apply rotate-90;
30
-
31
- animation-iteration-count: infinite;
32
-
33
- &--1 {
34
- animation-duration: 2s;
35
- animation-name: AnimateBull1;
36
- }
37
-
38
- &--2 {
39
- animation-duration: 1.332s;
40
- animation-name: AnimateBull2;
41
- animation-delay: 1s;
42
- }
43
-
44
- &--3 {
45
- animation-duration: 0.666s;
46
- animation-name: AnimateBull3;
47
- animation-delay: 2s;
48
- }
49
- }
50
-
51
- @keyframes AnimateBull1 {
52
- 0% {
53
- transform: translate(14px, 0px);
54
- }
55
-
56
- 100% {
57
- transform: translate(86px, 0px);
58
- }
59
- }
60
-
61
- @keyframes AnimateBull2 {
62
- 0% {
63
- transform: translate(38px, 0px);
64
- }
65
-
66
- 100% {
67
- transform: translate(80px, 0px);
68
- }
69
- }
70
-
71
- @keyframes AnimateBull3 {
72
- 0% {
73
- transform: translate(62px, 0px);
74
- }
75
-
76
- 100% {
77
- transform: translate(88px, 0px);
78
- }
79
- }
80
- </style>
1
+ <template>
2
+ <div class="relative flex" title="FUCK PUTIN! FUCK RUZZIA!">
3
+ <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
4
+ <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
5
+ <div i-mdi:tank class="inline-block bg-ukraine mr-5 mt-0.5" />
6
+ <div class="relative">
7
+ <div class="inline-block absolute" i-noto-v1:flag-for-flag-russia />
8
+ <div i-emojione:fire class="inline-block absolute -mt-1 animate-ping animate-pulseR" />
9
+ </div>
10
+ <div class="absolute left-0 animate-bull animate-bull--1 -mt-1">
11
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
12
+ </div>
13
+ <div class="absolute left-0 animate-bull animate-bull animate-bull--2 -mt-1">
14
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
15
+ </div>
16
+ <div class="absolute left-0 animate-bull animate-bull--3 -mt-1">
17
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow " />
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <style lang="scss">
23
+ .bg-ukraine {
24
+ background: linear-gradient(180deg, #0066cc 56%, rgba(255, 204, 0, 1) 44%);
25
+ }
26
+
27
+ .animate-bull {
28
+ top: -2px;
29
+ // @apply rotate-90;
30
+
31
+ animation-iteration-count: infinite;
32
+
33
+ &--1 {
34
+ animation-duration: 2s;
35
+ animation-name: AnimateBull1;
36
+ }
37
+
38
+ &--2 {
39
+ animation-duration: 1.332s;
40
+ animation-name: AnimateBull2;
41
+ animation-delay: 1s;
42
+ }
43
+
44
+ &--3 {
45
+ animation-duration: 0.666s;
46
+ animation-name: AnimateBull3;
47
+ animation-delay: 2s;
48
+ }
49
+ }
50
+
51
+ @keyframes AnimateBull1 {
52
+ 0% {
53
+ transform: translate(14px, 0px);
54
+ }
55
+
56
+ 100% {
57
+ transform: translate(86px, 0px);
58
+ }
59
+ }
60
+
61
+ @keyframes AnimateBull2 {
62
+ 0% {
63
+ transform: translate(38px, 0px);
64
+ }
65
+
66
+ 100% {
67
+ transform: translate(80px, 0px);
68
+ }
69
+ }
70
+
71
+ @keyframes AnimateBull3 {
72
+ 0% {
73
+ transform: translate(62px, 0px);
74
+ }
75
+
76
+ 100% {
77
+ transform: translate(88px, 0px);
78
+ }
79
+ }
80
+ </style>
@@ -1,30 +1,30 @@
1
- ---
2
-
3
- const { class: className, handDrive, biggerText } = Astro.props;
4
- import { t } from "i18next";
5
- import { Image } from 'astro:assets';
6
- import handDriveImage from "../assets/hand-drive.svg";
7
-
8
- const getHandDriveName = (value: number) => {
9
- if (value === 1)
10
- return 'lhd'
11
-
12
- else
13
- return 'rhd'
14
- }
15
-
16
- const handDriveName = getHandDriveName(handDrive)
17
- ---
18
- <div title={handDriveName.toUpperCase()} class="flex items-center" class:list={className}>
19
- <Image src={handDriveImage} alt="infoObject.product.hand_drive" width={48} height={34} class={handDriveName} />
20
- <div data-pagefind-filter={`${t('part.sw-position')}:${handDriveName.toUpperCase()}`}
21
- class={`sm:ml-2 order-0 ${!biggerText ? 'text-xxs md:text-xs' : 'order-0'}`}
22
- set:html={t(`part.for-${handDriveName}`)}
23
- />
24
- </div>
25
-
26
- <style lang="scss">
27
- .rhd {
28
- transform: scaleX(-1);
29
- }
1
+ ---
2
+
3
+ const { class: className, handDrive, biggerText } = Astro.props;
4
+ import { t } from "i18next";
5
+ import { Image } from 'astro:assets';
6
+ import handDriveImage from "../assets/hand-drive.svg";
7
+
8
+ const getHandDriveName = (value: number) => {
9
+ if (value === 1)
10
+ return 'lhd'
11
+
12
+ else
13
+ return 'rhd'
14
+ }
15
+
16
+ const handDriveName = getHandDriveName(handDrive)
17
+ ---
18
+ <div title={handDriveName.toUpperCase()} class="flex items-center" class:list={className}>
19
+ <Image src={handDriveImage} alt="infoObject.product.hand_drive" width={48} height={34} class={handDriveName} />
20
+ <div data-pagefind-filter={`${t('part.sw-position')}:${handDriveName.toUpperCase()}`}
21
+ class={`sm:ml-2 order-0 ${!biggerText ? 'text-xxs md:text-xs' : 'order-0'}`}
22
+ set:html={t(`part.for-${handDriveName}`)}
23
+ />
24
+ </div>
25
+
26
+ <style lang="scss">
27
+ .rhd {
28
+ transform: scaleX(-1);
29
+ }
30
30
  </style>