add changes
This commit is contained in:
68
components/Ml/Modal/MlModal.vue
Normal file
68
components/Ml/Modal/MlModal.vue
Normal file
@ -0,0 +1,68 @@
|
||||
<template>
|
||||
<transition name="fade">
|
||||
<div
|
||||
v-if="modelValue"
|
||||
v-block-scroll="modelValue"
|
||||
class="top-0 left-0 z-[100] fixed flex justify-center items-center bg-gray-900 opacity-80 w-screen h-screen"
|
||||
@click.self="emitClose"
|
||||
>
|
||||
<div class="bg-gray-100 dark:bg-gray-700 border rounded w-1/2">
|
||||
<div class="flex justify-between p-2 border-b">
|
||||
<h2 class="pr-4 font-bold">Header title</h2>
|
||||
<button class="border" @click="emitClose">
|
||||
<XMarkIcon class="size-6"></XMarkIcon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="p-4">
|
||||
<slot>
|
||||
<RocketLaunchIcon class="float-left mr-4 text-green-600 size-20"></RocketLaunchIcon>
|
||||
<p>content</p>
|
||||
</slot>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RocketLaunchIcon, XMarkIcon } from '@heroicons/vue/24/solid';
|
||||
import type { ModalProps } from './types';
|
||||
const props = withDefaults(defineProps<ModalProps>(), {});
|
||||
|
||||
onMounted(() => {
|
||||
document.addEventListener('keydown', closeModalKeyBoardEvent);
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
document.removeEventListener('keydown', closeModalKeyBoardEvent);
|
||||
});
|
||||
|
||||
function closeModalKeyBoardEvent(event: KeyboardEvent) {
|
||||
if (event.key === 'Escape') {
|
||||
emitClose();
|
||||
}
|
||||
}
|
||||
|
||||
const emit = defineEmits<{
|
||||
(name: 'update:modelValue', info: boolean): void;
|
||||
}>();
|
||||
|
||||
function emitClose() {
|
||||
emit('update:modelValue', false);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.fade-enter-active {
|
||||
transition: all 0.2s ease-out;
|
||||
}
|
||||
|
||||
.fade-leave-active {
|
||||
transition: all 0.4s ease-in;
|
||||
}
|
||||
|
||||
.fade-enter-from,
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
3
components/Ml/Modal/types.ts
Normal file
3
components/Ml/Modal/types.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export type ModalProps = {
|
||||
modelValue?: boolean;
|
||||
};
|
Reference in New Issue
Block a user