2 Commits

Author SHA1 Message Date
Sebastian a3cd1edb0d chore(deps): update dependency vuetify to v4.1.5 2026-07-15 03:02:54 +00:00
Sebastian f7210ff8b0 refactor: add navigaton panel component
Signed-off-by: Sebastian <krupinski01@gmail.com>
2026-07-14 17:19:43 -04:00
3 changed files with 80 additions and 39 deletions
+3 -3
View File
@@ -2418,9 +2418,9 @@
}
},
"node_modules/vuetify": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.1.4.tgz",
"integrity": "sha512-8/H0Yl6h9t07/ExuyZFIRJqAenpKeCiVaRJzbHGfTtuZRZIs5EbtjdFYikPIu6h9thBJAx15PrU4ofa4LvdJag==",
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.1.5.tgz",
"integrity": "sha512-cR3XMzWbVll9wSdarhH7asT27zm23rMNM5dQ9pMGwTPGwEm0km8mY6ERJAGHIa/nMw0pYXWHjf1O9qJ/0PtZCQ==",
"license": "MIT",
"funding": {
"type": "github",
+75
View File
@@ -0,0 +1,75 @@
<script setup lang="ts">
import { computed } from 'vue'
import { storeToRefs } from 'pinia'
import { useDisplay } from 'vuetify'
import { useMailUiStore } from '@/stores/mailUiStore'
import FolderView from '@/components/FolderView.vue'
import type { CollectionObject } from '@MailManager/models/collection'
const display = useDisplay()
const isMobile = computed(() => display.mdAndDown.value)
const mailUiStore = useMailUiStore()
const { sidebarVisible, selectedFolder } = storeToRefs(mailUiStore)
const handleCompose = () => mailUiStore.openComposer()
const handleFolderSelect = (folder: CollectionObject) => mailUiStore.selectFolder(folder)
const handleSettingsOpen = () => mailUiStore.settingsOpen()
</script>
<template>
<v-navigation-drawer
v-model="sidebarVisible"
contained
:permanent="sidebarVisible && !isMobile"
:temporary="isMobile"
width="280"
class="mail-sidebar"
>
<div class="pa-3 pb-0">
<!-- Primary action -->
<v-btn
block
color="primary"
variant="tonal"
prepend-icon="mdi-pencil"
class="justify-start"
@click="handleCompose"
>
Compose
</v-btn>
</div>
<!-- Folders -->
<FolderView
:selected-folder="selectedFolder"
@select="handleFolderSelect"
/>
<!-- Pinned utility footer -->
<template #append>
<v-divider />
<div class="pa-2">
<v-btn
block
variant="text"
size="small"
prepend-icon="mdi-cog"
class="justify-start text-medium-emphasis"
@click="handleSettingsOpen"
>
Settings
</v-btn>
</div>
</template>
</v-navigation-drawer>
</template>
<style scoped>
.mail-sidebar {
border-right: 1px solid rgb(var(--v-border-color));
overflow-y: auto;
}
</style>
+2 -36
View File
@@ -17,7 +17,7 @@ import DeleteFolderDialog from '@/components/DeleteFolderDialog.vue'
import FolderSelectionDialog from '@/components/FolderSelectionDialog.vue'
import RenameFolderDialog from '@/components/RenameFolderDialog.vue'
import SettingsDialog from '@/components/settings/SettingsDialog.vue'
import FolderView from '@/components/FolderView.vue'
import Sidebar from '@/components/Sidebar.vue'
// Vuetify display for responsive behavior
const display = useDisplay()
@@ -44,7 +44,6 @@ const {
} = storeToRefs(mailOperationsStore)
const {
sidebarVisible,
settingsDialogVisible,
selectedFolder,
composerMode,
@@ -111,8 +110,6 @@ const {
const sidebarToggle = () => mailUiStore.sidebarToggle()
const handleSettingsOpen = () => mailUiStore.settingsOpen()
const handleFolderSelect = (folder: CollectionObject) => mailUiStore.selectFolder(folder)
const handleFolderCreateConfirm = async (folderName: string) => {
@@ -294,33 +291,7 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
<!-- Main content area -->
<div class="mail-content">
<!-- Folder tree sidebar -->
<v-navigation-drawer
v-model="sidebarVisible"
contained
:permanent="sidebarVisible && !isMobile"
:temporary="isMobile"
width="280"
class="mail-sidebar"
>
<FolderView
:selected-folder="selectedFolder"
@select="handleFolderSelect"
/>
<template #append>
<div class="pa-2">
<v-btn
block
variant="text"
prepend-icon="mdi-cog"
@click="handleSettingsOpen"
>
Settings
</v-btn>
</div>
</template>
</v-navigation-drawer>
<Sidebar />
<!-- Main area with message list and reader -->
<div class="mail-main">
@@ -490,11 +461,6 @@ const handleMessageSelectionDelete = () => mailUiStore.deleteSelectedMessages()
position: relative;
}
.mail-sidebar {
border-right: 1px solid rgb(var(--v-border-color));
overflow-y: auto;
}
.mail-main {
flex: 1;
min-height: 0;