|
1 | 1 | <script setup lang="ts"> |
2 | 2 | interface Props { |
3 | 3 | variant: 'warning' | 'error' |
4 | | - icon?: string |
5 | 4 | title?: string |
6 | 5 | } |
7 | 6 |
|
8 | 7 | defineProps<Props>() |
9 | 8 |
|
10 | | -const variantClasses: Record<Props['variant'], string> = { |
| 9 | +const wrapperClasses: Record<Props['variant'], string> = { |
11 | 10 | warning: 'border-amber-400/20 bg-amber-500/8', |
12 | 11 | error: 'border-red-400/20 bg-red-500/8', |
13 | 12 | } |
14 | 13 |
|
15 | | -const iconClasses: Record<Props['variant'], string> = { |
16 | | - warning: 'text-amber-400/80', |
17 | | - error: 'text-red-400/80', |
| 14 | +const titleClasses: Record<Props['variant'], string> = { |
| 15 | + warning: 'text-amber-800 dark:text-amber-300', |
| 16 | + error: 'text-red-800 dark:text-red-300', |
| 17 | +} |
| 18 | +
|
| 19 | +const bodyClasses: Record<Props['variant'], string> = { |
| 20 | + warning: 'text-amber-700 dark:text-amber-400', |
| 21 | + error: 'text-red-700 dark:text-red-400', |
18 | 22 | } |
19 | 23 | </script> |
20 | 24 |
|
21 | 25 | <template> |
22 | | - <div role="alert" class="border rounded-md px-3 py-2.5" :class="variantClasses[variant]"> |
23 | | - <p v-if="icon || title" class="flex items-center gap-1.5 text-sm font-medium text-fg mb-1"> |
24 | | - <span |
25 | | - v-if="icon" |
26 | | - :class="[`i-lucide:${icon}`, 'w-3.5 h-3.5 shrink-0', iconClasses[variant]]" |
27 | | - aria-hidden="true" |
28 | | - /> |
29 | | - {{ title }} |
30 | | - </p> |
31 | | - <div class="text-sm text-fg-muted"> |
| 26 | + <div role="alert" class="border rounded-md px-3 py-2.5" :class="wrapperClasses[variant]"> |
| 27 | + <p v-if="title" class="font-semibold mb-1" :class="titleClasses[variant]">{{ title }}</p> |
| 28 | + <div class="text-xs" :class="bodyClasses[variant]"> |
32 | 29 | <slot /> |
33 | 30 | </div> |
34 | 31 | </div> |
|
0 commit comments