Piped/src/components/ModalComponent.vue

59 lines
1.3 KiB
Vue
Raw Normal View History

2022-08-28 17:40:35 +00:00
<template>
<div class="modal">
2022-09-08 20:47:06 +00:00
<div @click="handleClick">
2022-08-28 17:40:35 +00:00
<div class="modal-container">
2024-03-06 19:45:31 +00:00
<button @click="$emit('close')"><i class="i-fa6-solid:xmark" /></button>
2022-08-28 17:40:35 +00:00
<slot></slot>
</div>
</div>
</div>
</template>
<script>
export default {
2023-07-27 11:46:05 +00:00
emits: ["close"],
2022-08-28 17:40:35 +00:00
mounted() {
window.addEventListener("keydown", this.handleKeyDown);
},
unmounted() {
window.removeEventListener("keydown", this.handleKeyDown);
},
methods: {
handleKeyDown(event) {
if (event.code === "Escape") {
this.$emit("close");
} else return;
event.preventDefault();
},
2022-09-08 20:47:06 +00:00
handleClick(event) {
if (event.target !== event.currentTarget) return;
this.$emit("close");
},
2022-08-28 17:40:35 +00:00
},
};
</script>
<style scoped>
.modal {
@apply fixed z-50 top-0 left-0 w-full h-full bg-gray bg-opacity-80 transition-opacity table;
}
.dark .modal {
@apply bg-dark-900 bg-opacity-80;
2022-08-28 17:40:35 +00:00
}
.modal > div {
@apply table-cell align-middle;
}
.modal-container {
@apply w-min m-auto bg-white p-5 rounded-xl min-w-[20vw] relative;
}
.dark .modal-container {
@apply bg-dark-700;
2022-09-08 20:56:24 +00:00
}
.modal-container > button {
@apply absolute right-2.5 top-1;
2022-08-28 17:40:35 +00:00
}
</style>