spoko-design-system 0.7.9 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/dependabot.yml +11 -11
- package/.github/todo.yml +3 -3
- package/.github/workflows/deploy.yml +39 -39
- package/.stackblitzrc +5 -5
- package/.vscode/extensions.json +5 -5
- package/.vscode/launch.json +11 -11
- package/.vscode/settings.json +5 -5
- package/LICENSE +21 -21
- package/README.md +114 -114
- 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 +309 -309
- package/index.ts +66 -66
- package/package.json +23 -23
- package/public/fonts/lg.svg +53 -53
- package/public/fonts/vwhead-bold-demo.html +549 -549
- package/public/fonts/vwhead-regular-demo.html +549 -549
- package/public/fonts/vwtext-bold-demo.html +549 -549
- package/public/fonts/vwtext-regular-demo.html +549 -549
- package/public/github.svg +3 -3
- package/public/grid_dot.svg +4 -4
- package/public/linkedin.svg +44 -44
- package/public/locales/en/translation.json +8 -8
- package/public/locales/pl/translation.json +8 -8
- package/public/make-scrollable-code-focusable.js +3 -3
- package/public/pagefind.yml +3 -3
- package/public/polo.blue.svg +29 -29
- package/public/spoko.space.svg +71 -71
- package/public/twitter.svg +46 -46
- package/renovate.json +6 -6
- package/sandbox.config.json +11 -11
- package/src/MyComponent.astro +8 -8
- package/src/components/Badge.vue +19 -19
- package/src/components/Badges.vue +21 -21
- package/src/components/Breadcrumbs.vue +91 -91
- 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 +48 -48
- package/src/components/Image.astro +30 -30
- 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 +197 -130
- package/src/components/ProductTile.astro +48 -48
- package/src/components/Quote.vue +23 -23
- package/src/components/ReloadPrompt.astro +50 -50
- package/src/components/SlimBanner.vue +72 -72
- package/src/components/Table.vue +32 -32
- package/src/components/TableOfContents.astro +15 -15
- package/src/components/Translations.vue +23 -23
- package/src/components/flags/FlagPL.vue +3 -3
- package/src/components/flags/FlagUA.vue +2 -2
- package/src/components/layout/Container.astro +7 -7
- package/src/components/layout/Header.astro +80 -80
- package/src/config.ts +56 -56
- package/src/design.config.ts +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 +152 -152
- 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 +259 -259
- 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 +64 -64
- package/uno-config/theme/typography.ts +29 -29
- package/uno.config.ts +2 -2
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
---
|
|
2
|
-
import MainLayout from "../../layouts/MainLayout.astro";
|
|
3
|
-
import { Icon } from "astro-icon/components";
|
|
4
|
-
import { iconConfig } from '../../../icon.config';
|
|
5
|
-
|
|
6
|
-
const iconifyUrl = "https://icon-sets.iconify.design/";
|
|
7
|
-
const ICONS = iconConfig.include;
|
|
8
|
-
|
|
9
|
-
type IconGroup = {
|
|
10
|
-
name: string;
|
|
11
|
-
icons: string[];
|
|
12
|
-
url: string;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const sortedIconCollections = Object.entries(ICONS)
|
|
16
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
17
|
-
.map(([name, icons]) => ({
|
|
18
|
-
name,
|
|
19
|
-
icons,
|
|
20
|
-
url: `${iconifyUrl}${name}/`
|
|
21
|
-
}));
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
<MainLayout>
|
|
25
|
-
<div class="max-w-7xl mx-auto px-4 py-8">
|
|
26
|
-
<h1 class="text-2xl font-bold mb-4">Icons</h1>
|
|
27
|
-
<p class="mb-4">Astro Icon is a straightforward icon system for the Astro framework.</p>
|
|
28
|
-
|
|
29
|
-
<a href="https://www.astroicon.dev/"
|
|
30
|
-
class="text-blue-medium hover:text-accent-darker underline"
|
|
31
|
-
target="_blank"
|
|
32
|
-
rel="noopener noreferrer">
|
|
33
|
-
https://www.astroicon.dev/
|
|
34
|
-
</a>
|
|
35
|
-
|
|
36
|
-
<pre class="mt-6 p-4 rounded bg-slate-800 text-white overflow-x-auto">
|
|
37
|
-
import { Icon } from 'astro-icon/components';
|
|
38
|
-
</pre>
|
|
39
|
-
|
|
40
|
-
<div class="mt-8 space-y-12">
|
|
41
|
-
{sortedIconCollections.map(({ name, icons, url }) => (
|
|
42
|
-
<div>
|
|
43
|
-
<h2 class="text-xl font-semibold mb-4">
|
|
44
|
-
<a href={url}
|
|
45
|
-
class="text-blue-medium hover:text-accent-darker inline-flex items-center gap-2"
|
|
46
|
-
target="_blank"
|
|
47
|
-
rel="noopener noreferrer">
|
|
48
|
-
{name}
|
|
49
|
-
<span class="text-sm text-gray-500">({icons.length} icons)</span>
|
|
50
|
-
</a>
|
|
51
|
-
</h2>
|
|
52
|
-
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
|
|
53
|
-
{icons.map((iconName) => (
|
|
54
|
-
<div class="group relative p-4 border rounded-lg hover:shadow-md transition-shadow cursor-pointer icon-card"
|
|
55
|
-
data-icon-name={`${name}:${iconName}`}>
|
|
56
|
-
<div class="flex flex-col items-center">
|
|
57
|
-
<div class="p-4 bg-gray-50 rounded-lg mb-2 w-full flex justify-center items-center min-h-[64px]">
|
|
58
|
-
<Icon
|
|
59
|
-
name={`${name}:${iconName}`}
|
|
60
|
-
class="text-3xl text-blue-medium"
|
|
61
|
-
/>
|
|
62
|
-
</div>
|
|
63
|
-
<code class="text-sm text-gray-600 text-center break-all">
|
|
64
|
-
{name}:{iconName}
|
|
65
|
-
</code>
|
|
66
|
-
</div>
|
|
67
|
-
<div class="tooltip opacity-0 invisible absolute left-1/2 -translate-x-1/2 -top-10 bg-gray-800 text-white px-3 py-1.5 rounded text-sm whitespace-nowrap transition-all z-10">
|
|
68
|
-
Copied!
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
))}
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
))}
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
<div class="fixed bottom-4 right-4 bg-gray-800 text-white px-4 py-2 rounded-lg opacity-0 invisible transition-all duration-300" id="globalNotification">
|
|
78
|
-
Icon code copied to clipboard!
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
|
|
82
|
-
<script>
|
|
83
|
-
document.addEventListener('astro:page-load', () => {
|
|
84
|
-
const cards = document.querySelectorAll('.icon-card');
|
|
85
|
-
const globalNotification = document.getElementById('globalNotification');
|
|
86
|
-
|
|
87
|
-
cards.forEach(card => {
|
|
88
|
-
card.addEventListener('click', async () => {
|
|
89
|
-
const iconName = card.getAttribute('data-icon-name');
|
|
90
|
-
if (!iconName) return;
|
|
91
|
-
|
|
92
|
-
try {
|
|
93
|
-
await navigator.clipboard.writeText(`<Icon name="${iconName}" />`);
|
|
94
|
-
|
|
95
|
-
// Show tooltip
|
|
96
|
-
const tooltip = card.querySelector('.tooltip');
|
|
97
|
-
if (tooltip) {
|
|
98
|
-
tooltip.classList.remove('opacity-0', 'invisible');
|
|
99
|
-
tooltip.classList.add('opacity-100', 'visible');
|
|
100
|
-
|
|
101
|
-
// Hide tooltip after 2 seconds
|
|
102
|
-
setTimeout(() => {
|
|
103
|
-
tooltip.classList.add('opacity-0', 'invisible');
|
|
104
|
-
tooltip.classList.remove('opacity-100', 'visible');
|
|
105
|
-
}, 2000);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Show global notification
|
|
109
|
-
if (globalNotification) {
|
|
110
|
-
globalNotification.classList.remove('opacity-0', 'invisible');
|
|
111
|
-
globalNotification.classList.add('opacity-100', 'visible');
|
|
112
|
-
|
|
113
|
-
setTimeout(() => {
|
|
114
|
-
globalNotification.classList.add('opacity-0', 'invisible');
|
|
115
|
-
globalNotification.classList.remove('opacity-100', 'visible');
|
|
116
|
-
}, 2000);
|
|
117
|
-
}
|
|
118
|
-
} catch (err) {
|
|
119
|
-
console.error('Failed to copy:', err);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
</script>
|
|
125
|
-
|
|
126
|
-
<style>
|
|
127
|
-
.tooltip {
|
|
128
|
-
transition: all 0.2s ease-in-out;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
#globalNotification {
|
|
132
|
-
transition: all 0.3s ease-in-out;
|
|
133
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
|
|
134
|
-
}
|
|
135
|
-
</style>
|
|
1
|
+
---
|
|
2
|
+
import MainLayout from "../../layouts/MainLayout.astro";
|
|
3
|
+
import { Icon } from "astro-icon/components";
|
|
4
|
+
import { iconConfig } from '../../../icon.config';
|
|
5
|
+
|
|
6
|
+
const iconifyUrl = "https://icon-sets.iconify.design/";
|
|
7
|
+
const ICONS = iconConfig.include;
|
|
8
|
+
|
|
9
|
+
type IconGroup = {
|
|
10
|
+
name: string;
|
|
11
|
+
icons: string[];
|
|
12
|
+
url: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const sortedIconCollections = Object.entries(ICONS)
|
|
16
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
17
|
+
.map(([name, icons]) => ({
|
|
18
|
+
name,
|
|
19
|
+
icons,
|
|
20
|
+
url: `${iconifyUrl}${name}/`
|
|
21
|
+
}));
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<MainLayout>
|
|
25
|
+
<div class="max-w-7xl mx-auto px-4 py-8">
|
|
26
|
+
<h1 class="text-2xl font-bold mb-4">Icons</h1>
|
|
27
|
+
<p class="mb-4">Astro Icon is a straightforward icon system for the Astro framework.</p>
|
|
28
|
+
|
|
29
|
+
<a href="https://www.astroicon.dev/"
|
|
30
|
+
class="text-blue-medium hover:text-accent-darker underline"
|
|
31
|
+
target="_blank"
|
|
32
|
+
rel="noopener noreferrer">
|
|
33
|
+
https://www.astroicon.dev/
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
<pre class="mt-6 p-4 rounded bg-slate-800 text-white overflow-x-auto">
|
|
37
|
+
import { Icon } from 'astro-icon/components';
|
|
38
|
+
</pre>
|
|
39
|
+
|
|
40
|
+
<div class="mt-8 space-y-12">
|
|
41
|
+
{sortedIconCollections.map(({ name, icons, url }) => (
|
|
42
|
+
<div>
|
|
43
|
+
<h2 class="text-xl font-semibold mb-4">
|
|
44
|
+
<a href={url}
|
|
45
|
+
class="text-blue-medium hover:text-accent-darker inline-flex items-center gap-2"
|
|
46
|
+
target="_blank"
|
|
47
|
+
rel="noopener noreferrer">
|
|
48
|
+
{name}
|
|
49
|
+
<span class="text-sm text-gray-500">({icons.length} icons)</span>
|
|
50
|
+
</a>
|
|
51
|
+
</h2>
|
|
52
|
+
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
|
|
53
|
+
{icons.map((iconName) => (
|
|
54
|
+
<div class="group relative p-4 border rounded-lg hover:shadow-md transition-shadow cursor-pointer icon-card"
|
|
55
|
+
data-icon-name={`${name}:${iconName}`}>
|
|
56
|
+
<div class="flex flex-col items-center">
|
|
57
|
+
<div class="p-4 bg-gray-50 rounded-lg mb-2 w-full flex justify-center items-center min-h-[64px]">
|
|
58
|
+
<Icon
|
|
59
|
+
name={`${name}:${iconName}`}
|
|
60
|
+
class="text-3xl text-blue-medium"
|
|
61
|
+
/>
|
|
62
|
+
</div>
|
|
63
|
+
<code class="text-sm text-gray-600 text-center break-all">
|
|
64
|
+
{name}:{iconName}
|
|
65
|
+
</code>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="tooltip opacity-0 invisible absolute left-1/2 -translate-x-1/2 -top-10 bg-gray-800 text-white px-3 py-1.5 rounded text-sm whitespace-nowrap transition-all z-10">
|
|
68
|
+
Copied!
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
))}
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
))}
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="fixed bottom-4 right-4 bg-gray-800 text-white px-4 py-2 rounded-lg opacity-0 invisible transition-all duration-300" id="globalNotification">
|
|
78
|
+
Icon code copied to clipboard!
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<script>
|
|
83
|
+
document.addEventListener('astro:page-load', () => {
|
|
84
|
+
const cards = document.querySelectorAll('.icon-card');
|
|
85
|
+
const globalNotification = document.getElementById('globalNotification');
|
|
86
|
+
|
|
87
|
+
cards.forEach(card => {
|
|
88
|
+
card.addEventListener('click', async () => {
|
|
89
|
+
const iconName = card.getAttribute('data-icon-name');
|
|
90
|
+
if (!iconName) return;
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await navigator.clipboard.writeText(`<Icon name="${iconName}" />`);
|
|
94
|
+
|
|
95
|
+
// Show tooltip
|
|
96
|
+
const tooltip = card.querySelector('.tooltip');
|
|
97
|
+
if (tooltip) {
|
|
98
|
+
tooltip.classList.remove('opacity-0', 'invisible');
|
|
99
|
+
tooltip.classList.add('opacity-100', 'visible');
|
|
100
|
+
|
|
101
|
+
// Hide tooltip after 2 seconds
|
|
102
|
+
setTimeout(() => {
|
|
103
|
+
tooltip.classList.add('opacity-0', 'invisible');
|
|
104
|
+
tooltip.classList.remove('opacity-100', 'visible');
|
|
105
|
+
}, 2000);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Show global notification
|
|
109
|
+
if (globalNotification) {
|
|
110
|
+
globalNotification.classList.remove('opacity-0', 'invisible');
|
|
111
|
+
globalNotification.classList.add('opacity-100', 'visible');
|
|
112
|
+
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
globalNotification.classList.add('opacity-0', 'invisible');
|
|
115
|
+
globalNotification.classList.remove('opacity-100', 'visible');
|
|
116
|
+
}, 2000);
|
|
117
|
+
}
|
|
118
|
+
} catch (err) {
|
|
119
|
+
console.error('Failed to copy:', err);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
</script>
|
|
125
|
+
|
|
126
|
+
<style>
|
|
127
|
+
.tooltip {
|
|
128
|
+
transition: all 0.2s ease-in-out;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#globalNotification {
|
|
132
|
+
transition: all 0.3s ease-in-out;
|
|
133
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
|
|
134
|
+
}
|
|
135
|
+
</style>
|
|
136
136
|
</MainLayout>
|