Initial commit

This commit is contained in:
2025-08-04 16:33:07 +03:30
commit f798e8e35c
9595 changed files with 1208683 additions and 0 deletions

View File

@@ -0,0 +1,246 @@
<script setup>
const emit = defineEmits(['close'])
const content = ref('')
const to = ref('')
const subject = ref('')
const message = ref('')
const cc = ref('')
const bcc = ref('')
const isEmailCc = ref(false)
const isEmailBcc = ref(false)
const resetValues = () => {
to.value = subject.value = message.value = ''
}
</script>
<template>
<VCard
class="email-compose-dialog"
elevation="10"
max-width="30vw"
>
<VCardItem class="py-3 px-6">
<div class="d-flex align-center">
<h5 class="text-h5">
Compose Mail
</h5>
<VSpacer />
<div class="d-flex align-center gap-x-2">
<IconBtn
size="small"
icon="tabler-minus"
@click="$emit('close')"
/>
<IconBtn
size="small"
icon="tabler-x"
@click="$emit('close'); resetValues(); isEmailCc = false; isEmailBcc = false;"
/>
</div>
</div>
</VCardItem>
<div class="px-1 pe-6 py-1">
<VTextField
v-model="to"
density="compact"
>
<template #prepend-inner>
<div class="text-base font-weight-medium text-disabled">
To:
</div>
</template>
<template #append>
<span class="cursor-pointer">
<span @click="isEmailCc = !isEmailCc">Cc</span>
<span> | </span>
<span @click="isEmailBcc = !isEmailBcc">Bcc</span>
</span>
</template>
</VTextField>
</div>
<VExpandTransition>
<div v-if="isEmailCc">
<VDivider />
<div class="px-1 pe-6 py-1">
<VTextField
v-model="cc"
density="compact"
>
<template #prepend-inner>
<div class="text-disabled font-weight-medium">
Cc:
</div>
</template>
</VTextField>
</div>
</div>
</VExpandTransition>
<VExpandTransition>
<div v-if="isEmailBcc">
<VDivider />
<div class="px-1 pe-6 py-1">
<VTextField
v-model="bcc"
density="compact"
>
<template #prepend-inner>
<div class="text-disabled font-weight-medium">
Bcc:
</div>
</template>
</VTextField>
</div>
</div>
</VExpandTransition>
<VDivider />
<div class="px-1 pe-6 py-1">
<VTextField
v-model="subject"
density="compact"
>
<template #prepend-inner>
<div class="text-base font-weight-medium text-disabled">
Subject:
</div>
</template>
</VTextField>
</div>
<VDivider />
<!-- 👉 Tiptap Editor -->
<TiptapEditor
v-model="content"
placeholder="Message"
/>
<div class="d-flex align-center px-6 py-4">
<VBtn
color="primary"
class="me-4"
append-icon="tabler-send"
:disabled="to === '' ? true : false"
@click="$emit('close'); content = ''; resetValues(); isEmailCc = false; isEmailBcc = false;"
>
send
</VBtn>
<IconBtn size="small">
<VIcon icon="tabler-paperclip" />
</IconBtn>
<VSpacer />
<IconBtn
size="small"
class="me-2"
>
<VIcon icon="tabler-dots-vertical" />
</IconBtn>
<IconBtn
size="small"
@click="$emit('close'); resetValues(); content = ''; isEmailCc = false; isEmailBcc = false;"
>
<VIcon icon="tabler-trash" />
</IconBtn>
</div>
</VCard>
</template>
<style lang="scss">
@use "@core-scss/base/mixins";
.v-card.email-compose-dialog {
z-index: 910 !important;
@include mixins.elevation(18);
.v-field--prepended {
padding-inline-start: 20px;
}
.v-field__prepend-inner {
align-items: center;
padding: 0;
}
.v-field__prepend-inner {
align-items: center;
padding: 0;
}
.v-card-item {
background-color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity));
}
.v-textarea .v-field {
--v-field-padding-start: 20px;
}
.v-field__outline {
display: none;
}
.v-input {
.v-field__prepend-inner {
display: flex;
align-items: center;
padding-block-start: 0;
}
}
.app-text-field {
.v-field__input {
padding-block-start: 6px;
}
.v-field--focused {
box-shadow: none !important;
}
}
}
.email-compose-dialog {
.ProseMirror {
p {
margin-block-end: 0;
}
padding: 1.5rem;
block-size: 100px;
overflow-y: auto;
padding-block: 0.5rem;
&:focus-visible {
outline: none;
}
p.is-editor-empty:first-child::before {
block-size: 0;
color: #adb5bd;
content: attr(data-placeholder);
float: inline-start;
pointer-events: none;
}
ul,
ol {
padding-inline: 1.125rem;
}
&-focused {
outline: none;
}
}
}
</style>