evcc-io/assets/js/components/LabelAndValue.vue
2022-07-12 22:06:02 +02:00

55 lines
1.1 KiB
Vue

<template>
<div class="root">
<div class="mb-2 label" :class="labelClass">{{ label }}</div>
<slot>
<h3 class="value m-0 d-block d-sm-flex align-items-baseline" :class="valueClass">
<AnimatedNumber v-if="valueFmt" :to="value" :format="valueFmt" />
<span v-else>{{ value }}</span>
<div v-if="extraValue" class="extraValue ms-0 ms-sm-1 text-nowrap">
{{ extraValue }}
</div>
</h3>
</slot>
</div>
</template>
<script>
import AnimatedNumber from "./AnimatedNumber.vue";
export default {
name: "LabelAndValue",
components: { AnimatedNumber },
props: {
label: String,
value: [Number, String],
valueFmt: Function,
extraValue: String,
align: { type: String, default: "center" },
},
computed: {
labelClass() {
return `text-${this.align}`;
},
valueClass() {
return `justify-content-${this.align}`;
},
},
};
</script>
<style scoped>
.root {
margin-bottom: 1rem;
}
.label {
text-transform: uppercase;
color: var(--evcc-gray);
font-size: 14px;
}
.value {
font-size: 18px;
}
.extraValue {
color: var(--evcc-gray);
font-size: 14px;
}
</style>