gamebrary/src/components/ModalHeader.vue

66 lines
1.2 KiB
Vue
Raw Normal View History

2020-10-14 00:10:52 +00:00
<template lang="html">
<header :class="{ 'has-action': slots.includes('default') }">
2020-10-14 00:10:52 +00:00
<div>
<slot name="header" v-if="slots.includes('header')" />
2020-11-22 03:31:18 +00:00
<h5 class="mb-0 text-wrap">{{ title }}</h5>
2020-11-07 05:44:34 +00:00
<small class="d-block text-muted">{{ subtitle }}</small>
2020-10-14 00:10:52 +00:00
</div>
<div class="actions" v-if="slots.includes('default')">
2020-10-23 16:20:35 +00:00
<slot />
</div>
2021-01-06 23:43:43 +00:00
<b-button
2021-02-21 18:14:46 +00:00
:variant="darkTheme ? 'dark' : 'light'"
2021-01-06 23:43:43 +00:00
class="align-self-baseline"
@click="$emit('close')"
>
<i class="fas fa-times fa-fw" aria-hidden />
</b-button>
2020-10-14 00:10:52 +00:00
</header>
</template>
<script>
2020-10-14 21:48:27 +00:00
import { mapGetters } from 'vuex';
2020-10-14 00:10:52 +00:00
export default {
props: {
title: String,
subtitle: String,
},
2020-10-14 21:48:27 +00:00
computed: {
2021-02-21 18:14:46 +00:00
...mapGetters(['darkTheme']),
2021-01-06 23:43:43 +00:00
slots() {
return Object.keys(this.$slots);
2021-01-06 23:43:43 +00:00
},
2020-10-14 21:48:27 +00:00
},
2020-10-14 00:10:52 +00:00
};
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
header {
display: grid;
width: 100%;
align-items: center;
2021-01-06 23:43:43 +00:00
grid-template-columns: auto 46px;
grid-gap: .5rem;
&.has-action {
2021-01-20 22:36:55 +00:00
grid-template-columns: 1fr auto 46px;
2021-01-06 23:43:43 +00:00
}
2020-10-14 00:10:52 +00:00
}
h5 {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.actions {
margin-left: auto;
2020-10-31 17:43:55 +00:00
align-self: flex-start;
2020-10-14 00:10:52 +00:00
}
</style>