Skip to content

Commit f0272e2

Browse files
add badge
1 parent fa48f8e commit f0272e2

File tree

3 files changed

+106
-5
lines changed

3 files changed

+106
-5
lines changed

app/components/MainBadge.vue

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<template>
2+
<span :class="[
3+
'inline-flex items-center justify-center rounded-lg',
4+
'px-3 py-1 text-sm font-semibold',
5+
variantClasses[variant],
6+
]" :style="variantStyles[variant]">
7+
{{ label }}
8+
<slot />
9+
</span>
10+
</template>
11+
12+
<script setup lang="ts">
13+
interface Props {
14+
label?: string
15+
variant?: 'info' | 'success' | 'error'
16+
}
17+
18+
const props = withDefaults(defineProps<Props>(), {
19+
label: '',
20+
variant: 'info',
21+
})
22+
23+
const variantClasses = {
24+
info: 'bg-accent-primary text-background-primary',
25+
success: '',
26+
error: '',
27+
}
28+
29+
const variantStyles = {
30+
info: {},
31+
success: { backgroundColor: '#16a34a', color: '#ffffff' }, // green-600
32+
error: { backgroundColor: '#dc2626', color: '#ffffff' }, // red-600
33+
}
34+
</script>

app/pages/design/badges.vue

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<template>
2+
<div class="min-h-screen bg-background-primary">
3+
<div class="container mx-auto px-6 py-16">
4+
<h1 class="text-4xl font-bold mb-8 text-accent-primary">
5+
Сторінка показує всі бейджі які є в дизайн системі сайту
6+
</h1>
7+
8+
<div class="space-y-12">
9+
<div v-for="variant in badgeVariants" :key="variant.name" class="space-y-6">
10+
<h2 class="text-2xl font-semibold text-accent-primary">
11+
{{ variant.label }}
12+
</h2>
13+
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
14+
<div v-for="example in badgeExamples" :key="`${variant.name}-${example.label}`" class="p-6">
15+
<div class="flex flex-col gap-4">
16+
<div class="text-center">
17+
<h3 class="text-lg font-medium mb-2 text-accent-primary">
18+
{{ example.label }}
19+
</h3>
20+
<MainBadge :variant="variant.name" :label="example.text" />
21+
</div>
22+
</div>
23+
</div>
24+
</div>
25+
</div>
26+
</div>
27+
28+
<div class="mt-16 p-8 bg-fill-secondary rounded-xl border border-separator-primary">
29+
<h2 class="text-2xl font-bold mb-6 text-accent-primary">
30+
Badge Examples
31+
</h2>
32+
<div class="flex flex-wrap gap-4 items-center">
33+
<MainBadge variant="info" label="Info Badge" />
34+
<MainBadge variant="success" label="Success Badge" />
35+
<MainBadge variant="error" label="Error Badge" />
36+
<MainBadge variant="info" label="New" />
37+
<MainBadge variant="success" label="Active" />
38+
<MainBadge variant="error" label="Inactive" />
39+
<MainBadge variant="info" label="Pending" />
40+
<MainBadge variant="success" label="Completed" />
41+
<MainBadge variant="error" label="Failed" />
42+
</div>
43+
</div>
44+
</div>
45+
</div>
46+
</template>
47+
48+
<script setup lang="ts">
49+
import { onMounted } from 'vue'
50+
import { trackEvent } from '~~/app/utils/track'
51+
52+
onMounted(() => {
53+
trackEvent('page_view', { page: 'design_sandbox_badges' })
54+
})
55+
56+
const badgeVariants = [
57+
{ name: 'info' as const, label: 'Info' },
58+
{ name: 'success' as const, label: 'Success' },
59+
{ name: 'error' as const, label: 'Error' },
60+
]
61+
62+
const badgeExamples = [
63+
{ label: 'Short Text', text: 'Badge' },
64+
{ label: 'Medium Text', text: 'Status Badge' },
65+
{ label: 'Long Text', text: 'Very Long Badge Text' },
66+
{ label: 'Number', text: '42' },
67+
]
68+
</script>

app/pages/electricity/[slug].vue

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@
1313
<div class="w-full grid gap-4 md:grid-cols-3">
1414
<div class="bg-fill-secondary p-4 rounded-xl border border-separator-primary md:col-span-2">
1515
<div class="flex items-center gap-3 mb-2">
16-
<span :class="[
17-
'inline-flex items-center gap-2 text-sm font-semibold px-3 py-1 rounded-full border',
18-
]">
19-
{{ currentStatus === 'online' ? 'Online' : 'Offline' }}
20-
</span>
16+
<MainBadge
17+
:variant="currentStatus === 'online' ? 'success' : 'error'"
18+
:label="currentStatus === 'online' ? 'світло є' : 'світла немає'"
19+
/>
2120
</div>
2221
<p class="text-sm text-label-secondary">
2322
Last seen: {{ formatDate(data?.current.lastAliveAt) }}

0 commit comments

Comments
 (0)