main
vue 95 lines 1.92 KB
Raw
1 <template>
2 <div class="kv-card" :class="[`kv-color-${color}`, `kv-size-${size}`]">
3 <div v-if="$slots.key" class="key">
4 <slot name="key"></slot>
5 </div>
6 <div v-if="$slots.value" class="value" :class="valueClass">
7 <slot name="value"></slot>
8 </div>
9 </div>
10 </template>
11
12 <script setup lang="ts">
13 const { color, size, valueClass } = defineProps<{
14 color?: "danger" | "warning" | "success" | "primary"
15 size?: "lg"
16 valueClass?: string
17 }>()
18 </script>
19
20 <style lang="scss" scoped>
21 .kv-card {
22 border: 1px solid var(--border-color);
23 background-color: var(--bg-secondary-color);
24 border-radius: var(--border-radius);
25 overflow: hidden;
26 display: flex;
27 flex-direction: column;
28
29 .key {
30 border-bottom: 1px solid var(--border-color);
31 padding: 8px 12px;
32 font-size: 12px;
33 }
34 .value {
35 font-size: 14px;
36 padding: 8px 12px;
37 background-color: var(--bg-default-color);
38 font-family: var(--font-family-mono);
39 height: 100%;
40 flex-grow: 1;
41 word-break: break-word;
42 }
43
44 &.kv-size- {
45 &lg {
46 .key {
47 padding: 10px 12px;
48 font-size: 14px;
49 }
50 .value {
51 font-size: 16px;
52 padding: 12px 12px;
53 }
54 }
55 }
56
57 &.kv-color- {
58 &danger {
59 border-color: rgba(var(--error-color-rgb) / 0.3);
60 background-color: rgba(var(--error-color-rgb) / 0.2);
61
62 .key {
63 border-color: rgba(var(--error-color-rgb) / 0.3);
64 }
65 }
66
67 &warning {
68 border-color: rgba(var(--warning-color-rgb) / 0.3);
69 background-color: rgba(var(--warning-color-rgb) / 0.2);
70
71 .key {
72 border-color: rgba(var(--warning-color-rgb) / 0.3);
73 }
74 }
75
76 &success {
77 border-color: rgba(var(--success-color-rgb) / 0.3);
78 background-color: rgba(var(--success-color-rgb) / 0.2);
79
80 .key {
81 border-color: rgba(var(--success-color-rgb) / 0.3);
82 }
83 }
84
85 &primary {
86 border-color: rgba(var(--primary-color-rgb) / 0.3);
87 background-color: rgba(var(--primary-color-rgb) / 0.2);
88
89 .key {
90 border-color: rgba(var(--primary-color-rgb) / 0.3);
91 }
92 }
93 }
94 }
95 </style>