This repository has been archived on 2021-09-06. You can view files and clone it, but cannot push or open issues or pull requests.
vuejs_course/2021-02-08 1000 prj-cmp-01-.../src/components/UI/BaseDialog.vue

84 lines
1.2 KiB
Vue

<template>
<teleport to="body">
<div @click="$emit('close')"></div>
<dialog open>
<header>
<slot name="header">
<h2>{{ title }}</h2>
</slot>
</header>
<section><slot name="default"></slot></section>
<menu
><slot name="actions">
<base-button @click="$emit('close')">Close</base-button>
</slot></menu
>
</dialog>
</teleport>
</template>
<script>
export default {
props: {
title: {
type: String,
required: false
}
},
emits: ['close']
};
</script>
<style scoped>
div {
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100%;
background-color: rgba(0, 0, 0, 0.75);
z-index: 10;
}
dialog {
position: fixed;
top: 20vh;
left: 10%;
width: 80%;
z-index: 100;
border-radius: 12px;
border: none;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
padding: 0;
margin: 0;
overflow: hidden;
}
header {
background-color: #3a0061;
color: white;
width: 100%;
padding: 1rem;
}
header h2 {
margin: 0;
}
section {
padding: 1rem;
}
menu {
padding: 1rem;
display: flex;
justify-content: flex-end;
margin: 0;
}
@media (min-width: 768px) {
dialog {
left: calc(50% - 20rem);
width: 40rem;
}
}
</style>