habits.andr33v.ru/app/components/ConfirmDialog.vue

95 lines
1.7 KiB
Vue

<template>
<div v-if="show" class="modal-overlay" @click.self="$emit('cancel')">
<div class="modal-content">
<h4>{{ title }}</h4>
<p>{{ message }}</p>
<div class="modal-actions">
<button @click="$emit('cancel')" class="btn-cancel">{{ cancelText }}</button>
<button @click="$emit('confirm')" class="btn-confirm">{{ confirmText }}</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
defineProps({
show: {
type: Boolean,
required: true,
},
title: {
type: String,
default: 'Подтверждение',
},
message: {
type: String,
required: true,
},
confirmText: {
type: String,
default: 'Да',
},
cancelText: {
type: String,
default: 'Отмена',
},
});
defineEmits(['confirm', 'cancel']);
</script>
<style scoped>
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.modal-content {
background: white;
padding: 25px;
border-radius: 8px;
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
max-width: 400px;
width: 90%;
text-align: center;
}
.modal-content h4 {
margin-top: 0;
font-size: 1.2em;
}
.modal-actions {
margin-top: 20px;
display: flex;
justify-content: center;
gap: 15px;
}
.modal-actions button {
padding: 10px 20px;
border-radius: 5px;
border: none;
font-size: 1em;
cursor: pointer;
}
.btn-confirm {
background-color: #bf616a; /* Nord Red for destructive actions */
color: white;
}
.btn-cancel {
background-color: #e5e9f0; /* Nord light gray */
color: #4c566a;
}
</style>