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