spoko-design-system 0.2.85 → 0.2.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/astro.config.mjs +4 -66
- package/icon.config.ts +225 -0
- package/package.json +7 -3
- package/src/components/Badges.vue +1 -1
- package/src/components/Category/CategoriesCarousel.astro +1 -1
- package/src/components/Category/CategoryDetails.astro +12 -12
- package/src/components/Category/CategoryViewToggler.astro +16 -8
- package/src/components/Header/Header.astro +1 -1
- package/src/components/Modal.astro +1 -1
- package/src/components/Product/ProductDetails.vue +1 -1
- package/src/components/Product/ProductLink.astro +1 -1
- package/src/components/Product/ProductLink.vue +1 -1
- package/src/design.config.ts +76 -58
- package/src/pages/components/card.mdx +6 -6
- package/src/pages/components/icons.astro +126 -38
- package/src/pages/components/input.mdx +4 -4
- package/src/styles/_variables.scss +2 -2
- package/src/styles/content.css +1 -1
- package/src/uno-config/index.ts +59 -0
- package/src/uno-config/theme/breakpoints.ts +10 -0
- package/src/uno-config/theme/colors.ts +67 -0
- package/src/uno-config/theme/dimensions.ts +18 -0
- package/src/uno-config/theme/effects.ts +15 -0
- package/src/uno-config/theme/grid.ts +11 -0
- package/src/uno-config/theme/index.ts +26 -0
- package/src/uno-config/theme/shortcuts/buttons.ts +36 -0
- package/src/uno-config/theme/shortcuts/components.ts +62 -0
- package/src/uno-config/theme/shortcuts/index.ts +15 -0
- package/src/uno-config/theme/shortcuts/layout.ts +55 -0
- package/src/uno-config/theme/typography.ts +30 -0
- package/uno.config.ts +3 -250
package/src/design.config.ts
CHANGED
|
@@ -1,48 +1,68 @@
|
|
|
1
1
|
export const COLORS = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
{ name: "
|
|
5
|
-
{ name: "
|
|
6
|
-
{ name: "400", value: "#9ca3af" },
|
|
7
|
-
{ name: "500", value: "#64748B" },
|
|
8
|
-
{ name: "600", value: "#475569" },
|
|
9
|
-
{ name: "700", value: "#334155" },
|
|
10
|
-
{ name: "800", value: "#1e293b" },
|
|
11
|
-
{ name: "900", value: "#0f172a" },
|
|
2
|
+
// Brand Colors
|
|
3
|
+
brand: [
|
|
4
|
+
{ name: "primary", value: "#0040c5" },
|
|
5
|
+
{ name: "secondary", value: "#00b0f0" }
|
|
12
6
|
],
|
|
7
|
+
|
|
8
|
+
// Primary Blues
|
|
13
9
|
blue: [
|
|
14
|
-
{ name: "
|
|
15
|
-
{ name: "
|
|
16
|
-
{ name: "
|
|
17
|
-
{ name: "
|
|
18
|
-
{ name: "
|
|
19
|
-
{ name: "
|
|
20
|
-
{ name: "
|
|
21
|
-
{ name: "
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{ name: "
|
|
27
|
-
{ name: "
|
|
28
|
-
{ name: "
|
|
29
|
-
{ name: "
|
|
10
|
+
{ name: "ultralight", value: "#dbeafe" },
|
|
11
|
+
{ name: "lightest", value: "#3b82f6" },
|
|
12
|
+
{ name: "light", value: "#0069ff" },
|
|
13
|
+
{ name: "default", value: "#005ad7" },
|
|
14
|
+
{ name: "medium", value: "#02307d" },
|
|
15
|
+
{ name: "darker", value: "#001e50" },
|
|
16
|
+
{ name: "darkest", value: "#000f28" },
|
|
17
|
+
{ name: "wrc", value: "#0000c8" }
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
// Accent Colors
|
|
21
|
+
accent: [
|
|
22
|
+
{ name: "lightest", value: "#00b0f0" },
|
|
23
|
+
{ name: "light", value: "#0099da" },
|
|
24
|
+
{ name: "default", value: "#0087c1" },
|
|
25
|
+
{ name: "dark", value: "#006ea6" },
|
|
26
|
+
{ name: "darker", value: "#00437a" },
|
|
27
|
+
{ name: "deepBlue", value: "#0c1a32" }
|
|
28
|
+
],
|
|
29
|
+
|
|
30
|
+
// Neutral Colors
|
|
31
|
+
neutral: [
|
|
32
|
+
{ name: "lightest", value: "#f3f4f6" },
|
|
33
|
+
{ name: "lighter", value: "#e5e7eb" },
|
|
34
|
+
{ name: "light", value: "#b5bbc5" },
|
|
35
|
+
{ name: "default", value: "#9ca3af" },
|
|
36
|
+
{ name: "dark", value: "#6a767d" },
|
|
37
|
+
{ name: "darker", value: "#4b5563"},
|
|
38
|
+
{ name: "black", value: "#000000" }
|
|
30
39
|
],
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{ name: "
|
|
35
|
-
{ name: "
|
|
40
|
+
|
|
41
|
+
// Slate Colors
|
|
42
|
+
slate: [
|
|
43
|
+
{ name: "light", value: "#64748B" },
|
|
44
|
+
{ name: "default", value: "#475569" },
|
|
45
|
+
{ name: "dark", value: "#334155" },
|
|
46
|
+
{ name: "darker", value: "#1e293b" }, // Previously 'darkest'
|
|
47
|
+
{ name: "darkest", value: "#0f172a" } // New shade added
|
|
36
48
|
],
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
{ name: "
|
|
49
|
+
|
|
50
|
+
// System Colors
|
|
51
|
+
system: [
|
|
52
|
+
{ name: "success", value: "#10B981" },
|
|
53
|
+
{ name: "warning", value: "#FBBF24" },
|
|
54
|
+
{ name: "error", value: "#EF4444" },
|
|
55
|
+
{ name: "info", value: "#3B82F6" }
|
|
41
56
|
],
|
|
57
|
+
|
|
58
|
+
// State Colors
|
|
59
|
+
state: [
|
|
60
|
+
{ name: "overlay", value: "rgb(0 0 0 / 0.06)" },
|
|
61
|
+
{ name: "disabled", value: "rgb(0 0 0 / 0.12)" },
|
|
62
|
+
]
|
|
42
63
|
};
|
|
43
64
|
|
|
44
65
|
export const TYPOGRAPHY = {
|
|
45
|
-
fontFamily: "Inter, system",
|
|
46
66
|
scale: [
|
|
47
67
|
{ name: "h1", size: "22pt", weight: "400" },
|
|
48
68
|
{ name: "h2", size: "17pt", weight: "500" },
|
|
@@ -50,32 +70,30 @@ export const TYPOGRAPHY = {
|
|
|
50
70
|
{ name: "h4", size: "13pt", weight: "500" },
|
|
51
71
|
{ name: "body", size: "13pt", weight: "400" },
|
|
52
72
|
{ name: "button", size: "13pt", weight: "400" },
|
|
53
|
-
{ name: "caption", size: "10pt", weight: "400" }
|
|
54
|
-
]
|
|
73
|
+
{ name: "caption", size: "10pt", weight: "400" }
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const FONTS = {
|
|
78
|
+
types: [
|
|
79
|
+
{ name: "sans", value: "font-textregular" },
|
|
80
|
+
{ name: "text-regular", value: "font-textregular" },
|
|
81
|
+
{ name: "text-bold", value: "font-textbold" },
|
|
82
|
+
{ name: "head-bold", value: "font-headbold" },
|
|
83
|
+
{ name: "head-regular", value: "font-headregular" },
|
|
84
|
+
{ name: "head-light", value: "font-headlight" },
|
|
85
|
+
{ name: "text-light", value: "font-textlight" },
|
|
86
|
+
{ name: "mono", value: "font-novamono" }
|
|
87
|
+
]
|
|
55
88
|
};
|
|
56
89
|
|
|
57
|
-
export const SHADOWS = {
|
|
90
|
+
export const SHADOWS = {
|
|
58
91
|
types: [
|
|
59
92
|
{ name: "xs", value: "0px 2px 4px rgba(0, 0, 0, 0.08)" },
|
|
60
93
|
{ name: "sm", value: "0px 4px 8px rgba(0, 0, 0, 0.125)" },
|
|
61
94
|
{ name: "md", value: "0px 8px 16px rgba(0, 0, 0, 0.125)" },
|
|
62
95
|
{ name: "lg", value: "0px 16px 32px rgba(0, 0, 0, 0.125)" },
|
|
63
|
-
{ name: "xl", value: "0px 32px 64px rgba(0, 0, 0, 0.125)" },
|
|
64
|
-
{ name: "2xl", value: "0px 64px 128px rgba(0, 0, 0, 0.125)" }
|
|
65
|
-
]
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
export const FONTS = {
|
|
70
|
-
types: [
|
|
71
|
-
{ name: "vw_textregular", value: "font-textregular" },
|
|
72
|
-
{ name: "vw_textregular", value: "font-sans" },
|
|
73
|
-
{ name: "vw_textbold", value: "font-textbold" },
|
|
74
|
-
{ name: "vw_headbold", value: "font-headbold" },
|
|
75
|
-
{ name: "vw_headregular", value: "font-headregular" },
|
|
76
|
-
{ name: "vw_headlight", value: "font-headlight" },
|
|
77
|
-
{ name: "vw_textlight", value: "font-textlight" },
|
|
78
|
-
{ name: "Nova Mono", value: "font-novamono" },
|
|
79
|
-
{ name: "Nova Mono", value: "font-mono" }
|
|
80
|
-
],
|
|
81
|
-
};
|
|
96
|
+
{ name: "xl", value: "0px 32px 64px rgba(0, 0, 0, 0.125)" },
|
|
97
|
+
{ name: "2xl", value: "0px 64px 128px rgba(0, 0, 0, 0.125)" }
|
|
98
|
+
]
|
|
99
|
+
};
|
|
@@ -221,7 +221,7 @@ Skewed background with CSS & SVG.
|
|
|
221
221
|
|
|
222
222
|
<div class="columns-3 gap-8">
|
|
223
223
|
|
|
224
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
224
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
225
225
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
226
226
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
227
227
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -232,7 +232,7 @@ Skewed background with CSS & SVG.
|
|
|
232
232
|
</blockquote>
|
|
233
233
|
</div>
|
|
234
234
|
|
|
235
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
235
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
236
236
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
237
237
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
238
238
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -243,7 +243,7 @@ Skewed background with CSS & SVG.
|
|
|
243
243
|
</blockquote>
|
|
244
244
|
</div>
|
|
245
245
|
|
|
246
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
246
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
247
247
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
248
248
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
249
249
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -254,7 +254,7 @@ Skewed background with CSS & SVG.
|
|
|
254
254
|
</blockquote>
|
|
255
255
|
</div>
|
|
256
256
|
|
|
257
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
257
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
258
258
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
259
259
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
260
260
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -265,7 +265,7 @@ Skewed background with CSS & SVG.
|
|
|
265
265
|
</blockquote>
|
|
266
266
|
</div>
|
|
267
267
|
|
|
268
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
268
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
269
269
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
270
270
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
271
271
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -276,7 +276,7 @@ Skewed background with CSS & SVG.
|
|
|
276
276
|
</blockquote>
|
|
277
277
|
</div>
|
|
278
278
|
|
|
279
|
-
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-
|
|
279
|
+
<div class="relative flex flex-col min-w-0 break-words w-full mb-8 shadow-lg rounded-lg bg-blue-medium break-inside-avoid-column duration-300 hover:scale-105 hover:shadow-xl">
|
|
280
280
|
<img alt="..." src="https://picsum.photos/900/600/?random" class="w-full align-middle rounded-t-lg img--16/9" />
|
|
281
281
|
<blockquote class="relative p-8 mb-4 text-white/90">
|
|
282
282
|
<svg preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583 95" class="absolute left-0 w-full block" style="height:95px;top:-94px"><polygon points="-30,95 583,95 583,65" class="text-blue-600 fill-current"></polygon></svg>
|
|
@@ -1,48 +1,136 @@
|
|
|
1
1
|
---
|
|
2
2
|
import MainLayout from "../../layouts/MainLayout.astro";
|
|
3
3
|
import { Icon } from "astro-icon/components";
|
|
4
|
-
|
|
4
|
+
import { iconConfig } from '../../../icon.config';
|
|
5
5
|
|
|
6
6
|
const iconifyUrl = "https://icon-sets.iconify.design/";
|
|
7
|
-
const ICONS =
|
|
8
|
-
mdi: ["facebook", "instagram", "post-it-note-edit-outline", "car-hatchback", "car-door", "car-side", "car-windshield-outline", "car-light-alert", "car-tire-alert", "car-light-dimmed", "car-light-fog", "car-light-high", "car-parking-lights", "car-esp", "car-brake-abs", "car-horn", "engine-outline", "fan", "fan-off", "air-conditioner", "coolant-temperature", "car-brake-alert", "car-traction-control", "card-text-outline", "fuel", "oil", "hazard-lights", "credit-card-outline"],
|
|
9
|
-
el: ["star-empty", "star", "heart-empty", "heart", "map-marker", "fire", "quote-right", "qrcode", "car", "indent-left", "indent-right", "ok"], 'eos-icons': ["three-dots-loading", "bubble-loading", "loading", "installing"],
|
|
10
|
-
fluent: ["share-android-24-regular", "checkmark-24-filled", "tag-24-regular", "tag-multiple-24-regular" ],
|
|
11
|
-
"fluent-emoji": ["cookie", "construction", "warning", "wrench"],
|
|
12
|
-
la: ["arrow-right", "arrow-left", "car", "car-side"],
|
|
13
|
-
octicon: ["chevron-left-24", "x-24", "alert-24", "graph-24", "comment-24", "comment-discussion-24", "clock-24", "star-24", "star-fill-24", "file-media-24", "heart-24", "heart-fill-24", "project-roadmap-24", "location-24", "info-24", "mark-github-16"],
|
|
14
|
-
uil: ["map-marker", "envelope", "phone", "tag-alt"],
|
|
15
|
-
"simple-icons": ["ebay", "allegro", "volkswagen", "audi", "skoda", "seat", "whatsapp", "x", "facebook", "messenger", "instagram", "telegram"],
|
|
16
|
-
"icon-park-outline": ["shopping-bag", "comment", "comments", "tag-one"],
|
|
17
|
-
flowbite: ["arrow-left-outline", "arrow-right-outline", "angle-left-outline", "angle-right-outline", "chevron-left-outline", "chevron-right-outline","map-location-outline", "map-pin-alt-solid", "x-outline", "messages-outline", "arrow-down-to-bracket-outline", "check-outline"]
|
|
7
|
+
const ICONS = iconConfig.include;
|
|
18
8
|
|
|
9
|
+
type IconGroup = {
|
|
10
|
+
name: string;
|
|
11
|
+
icons: string[];
|
|
12
|
+
url: string;
|
|
19
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
|
+
}));
|
|
20
22
|
---
|
|
21
23
|
|
|
22
24
|
<MainLayout>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
</
|
|
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-600 hover:text-blue-800 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-600 hover:text-blue-800 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-600"
|
|
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
|
+
</MainLayout>
|
|
@@ -21,12 +21,12 @@ import MainInput from '../../components/MainInput.vue'
|
|
|
21
21
|
<div class="bg-white grid items-end w-full gap-6 md:grid-cols-3 px-4 py-6">
|
|
22
22
|
<div class="relative">
|
|
23
23
|
<input type="text" id="floating_filled" class="block rounded-t-lg px-2.5 pb-2.5 pt-5 w-full text-sm text-gray-900 bg-gray-50 dark:bg-gray-700 border-0 border-b-2 border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer" placeholder=" " />
|
|
24
|
-
<label for="floating_filled" class="absolute text-sm text-
|
|
24
|
+
<label for="floating_filled" class="absolute text-sm text-slate-medium dark:text-gray-400 duration-300 transform -translate-y-4 scale-75 top-4 z-10 origin-[0] start-2.5 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-4 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto">Floating filled</label>
|
|
25
25
|
</div>
|
|
26
26
|
|
|
27
27
|
<div class="relative z-0">
|
|
28
28
|
<input type="text" id="floating_standard" class="block py-2.5 px-0 w-full text-sm text-gray-900 bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer" placeholder=" " />
|
|
29
|
-
<label for="floating_standard" class="absolute text-sm text-
|
|
29
|
+
<label for="floating_standard" class="absolute text-sm text-slate-medium dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus:start-0 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-6 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto">Floating standard</label>
|
|
30
30
|
</div>
|
|
31
31
|
</div>
|
|
32
32
|
|
|
@@ -36,11 +36,11 @@ import MainInput from '../../components/MainInput.vue'
|
|
|
36
36
|
```js
|
|
37
37
|
<div class="relative">
|
|
38
38
|
<input type="text" id="floating_filled" class="block rounded-t-lg px-2.5 pb-2.5 pt-5 w-full text-sm text-gray-900 bg-gray-50 dark:bg-gray-700 border-0 border-b-2 border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer" placeholder=" " />
|
|
39
|
-
<label for="floating_filled" class="absolute text-sm text-
|
|
39
|
+
<label for="floating_filled" class="absolute text-sm text-slate-medium dark:text-gray-400 duration-300 transform -translate-y-4 scale-75 top-4 z-10 origin-[0] start-2.5 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-4 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto">Floating filled</label>
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
42
|
<div class="relative z-0">
|
|
43
43
|
<input type="text" id="floating_standard" class="block py-2.5 px-0 w-full text-sm text-gray-900 bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-500 focus:outline-none focus:ring-0 focus:border-blue-600 peer" placeholder=" " />
|
|
44
|
-
<label for="floating_standard" class="absolute text-sm text-
|
|
44
|
+
<label for="floating_standard" class="absolute text-sm text-slate-medium dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus:start-0 peer-focus:text-blue-600 peer-focus:dark:text-blue-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-6 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto">Floating standard</label>
|
|
45
45
|
</div>
|
|
46
46
|
```
|
|
@@ -5,7 +5,7 @@ $gray-100: #F3F4F6;
|
|
|
5
5
|
$gray-200: #E5E7EB;
|
|
6
6
|
$gray-300: #B5BBC5;
|
|
7
7
|
$gray-400: #9CA3AF;
|
|
8
|
-
$
|
|
8
|
+
$slate-medium: #64748B!default;
|
|
9
9
|
$gray-600: #6c757d !default;
|
|
10
10
|
$gray-700: #495057 !default;
|
|
11
11
|
$gray-800: #343a40 !default;
|
|
@@ -32,7 +32,7 @@ $grays: map.merge(
|
|
|
32
32
|
"200": $gray-200,
|
|
33
33
|
"300": $gray-300,
|
|
34
34
|
"400": $gray-400,
|
|
35
|
-
"500": $
|
|
35
|
+
"500": $slate-medium,
|
|
36
36
|
"600": $gray-600,
|
|
37
37
|
"700": $gray-700,
|
|
38
38
|
"800": $gray-800,
|
package/src/styles/content.css
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
.component-preview {
|
|
46
|
-
@apply bg-blue-
|
|
46
|
+
@apply bg-blue-medium bg-opacity-5 px-4 py-4 mx-0 flex items-center overflow-x-auto sm:(p-8);
|
|
47
47
|
gap: 1rem;
|
|
48
48
|
border-radius: 0.33rem;
|
|
49
49
|
border: 1px solid theme("colors.slate.200");
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// uno-config/index.ts
|
|
2
|
+
import type { UserConfig, UserShortcuts } from 'unocss'
|
|
3
|
+
import { defineConfig } from 'unocss';
|
|
4
|
+
import {
|
|
5
|
+
transformerDirectives,
|
|
6
|
+
transformerVariantGroup,
|
|
7
|
+
presetAttributify,
|
|
8
|
+
presetIcons,
|
|
9
|
+
presetTypography,
|
|
10
|
+
presetUno,
|
|
11
|
+
presetWebFonts,
|
|
12
|
+
} from 'unocss';
|
|
13
|
+
|
|
14
|
+
import { shortcuts } from './theme/shortcuts';
|
|
15
|
+
import { theme } from './theme';
|
|
16
|
+
|
|
17
|
+
interface CustomConfig extends Partial<UserConfig> {
|
|
18
|
+
shortcuts?: UserShortcuts;
|
|
19
|
+
theme?: Partial<typeof theme>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createSdsConfig(customConfig: CustomConfig = {}) {
|
|
23
|
+
return defineConfig({
|
|
24
|
+
transformers: [
|
|
25
|
+
transformerDirectives(),
|
|
26
|
+
transformerVariantGroup(),
|
|
27
|
+
],
|
|
28
|
+
shortcuts: {
|
|
29
|
+
...shortcuts,
|
|
30
|
+
...(customConfig.shortcuts || {})
|
|
31
|
+
},
|
|
32
|
+
theme: {
|
|
33
|
+
...theme,
|
|
34
|
+
...(customConfig.theme || {})
|
|
35
|
+
},
|
|
36
|
+
presets: [
|
|
37
|
+
presetUno(),
|
|
38
|
+
presetAttributify(),
|
|
39
|
+
presetIcons({
|
|
40
|
+
scale: 1.2,
|
|
41
|
+
warn: true,
|
|
42
|
+
prefix: 'i-',
|
|
43
|
+
extraProperties: {
|
|
44
|
+
'display': 'inline-block',
|
|
45
|
+
'vertical-align': 'middle',
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
presetTypography(),
|
|
49
|
+
presetWebFonts({
|
|
50
|
+
provider: 'none',
|
|
51
|
+
fonts: theme.fontFamily
|
|
52
|
+
})
|
|
53
|
+
],
|
|
54
|
+
...customConfig
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export * from './theme';
|
|
59
|
+
export * from './theme/shortcuts';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// theme/colors.ts
|
|
2
|
+
export const colors = {
|
|
3
|
+
// Brand colors - core identity colors
|
|
4
|
+
brand: {
|
|
5
|
+
primary: '#0040c5', // Main brand color
|
|
6
|
+
secondary: '#00b0f0', // Supporting brand color
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
// Primary blues - main blue palette
|
|
10
|
+
blue: {
|
|
11
|
+
ultralight: '#dbeafe',
|
|
12
|
+
lightest: '#3b82f6', // Lightest shade
|
|
13
|
+
light: '#0069ff',
|
|
14
|
+
default: '#005ad7', // Default/base blue
|
|
15
|
+
medium: '#02307d',
|
|
16
|
+
darker: '#001e50',
|
|
17
|
+
darkest: '#000f28', // Darkest shade
|
|
18
|
+
wrc: '#0000c8', // Special WRC color
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// Secondary colors - accent palette
|
|
22
|
+
accent: {
|
|
23
|
+
lightest: '#00b0f0',
|
|
24
|
+
light: '#0099da',
|
|
25
|
+
default: '#0087c1', // Default accent
|
|
26
|
+
dark: '#006ea6',
|
|
27
|
+
darker: '#00437a',
|
|
28
|
+
deepBlue: '#0c1a32',
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
// Neutral colors - grayscale
|
|
32
|
+
neutral: {
|
|
33
|
+
lightest: '#f3f4f6', // Lightest gray
|
|
34
|
+
lighter: '#e5e7eb',
|
|
35
|
+
light: '#b5bbc5',
|
|
36
|
+
default: '#9ca3af', // Base gray
|
|
37
|
+
dark: '#6a767d',
|
|
38
|
+
darker: '#4b5563',
|
|
39
|
+
black: '#000000', // Pure black
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Slate colors - gray-blue palette
|
|
43
|
+
slate: {
|
|
44
|
+
light: '#64748B',
|
|
45
|
+
default: '#475569',
|
|
46
|
+
dark: '#334155',
|
|
47
|
+
darkest: '#1e293b',
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
// System colors - functional colors
|
|
51
|
+
system: {
|
|
52
|
+
success: '#10B981', // Green - success state
|
|
53
|
+
warning: '#FBBF24', // Yellow - warning state
|
|
54
|
+
error: '#EF4444', // Red - error state
|
|
55
|
+
info: '#3B82F6', // Blue - information state
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
// States - interaction states
|
|
59
|
+
state: {
|
|
60
|
+
overlay: 'rgb(0 0 0 / 0.06)', // Overlay & Hover state
|
|
61
|
+
disabled: 'rgb(0 0 0 / 0.12)', // Disabled state
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// Export types for TypeScript
|
|
66
|
+
export type Colors = typeof colors;
|
|
67
|
+
export type ColorShade = keyof typeof colors;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// theme/dimensions.ts
|
|
2
|
+
export const dimensions = {
|
|
3
|
+
height: {
|
|
4
|
+
'tile': '104px',
|
|
5
|
+
'tile-mobile': '78px',
|
|
6
|
+
'sidebar': 'calc(100vh - 5.125rem)',
|
|
7
|
+
'full-mobile': 'calc(var(--vh, 1vh) * 100)',
|
|
8
|
+
'icon': '46px',
|
|
9
|
+
},
|
|
10
|
+
maxHeight: {
|
|
11
|
+
'icon': '46px',
|
|
12
|
+
'sidebar': 'calc(100vh - 5.125rem)',
|
|
13
|
+
},
|
|
14
|
+
minHeight: {
|
|
15
|
+
'tile': '104px',
|
|
16
|
+
'tile-mobile': '78px',
|
|
17
|
+
}
|
|
18
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// theme/grid.ts
|
|
2
|
+
export const gridTemplates = {
|
|
3
|
+
columns: {
|
|
4
|
+
16: 'repeat(16, minmax(0, 1fr))',
|
|
5
|
+
product: '15rem 20rem minmax(15rem, 1fr)',
|
|
6
|
+
productGrid: '15rem minmax(20rem, 1fr)',
|
|
7
|
+
productGalleryDesktop: 'calc(100% - 14% - 0.9375rem) 14%',
|
|
8
|
+
replacement: '6.25rem 12rem auto',
|
|
9
|
+
'details-desktop': '12.5rem calc(100% - 12.5rem - 1rem)'
|
|
10
|
+
}
|
|
11
|
+
};
|