feat: sidebar user menu Notion-style + settings page + tag colors + preview images/PDF
- Sidebar header: user menu dropdown (Settings, Switch workspace, Log out) avec avatar + nom + email, chevron animé, fond opaque #1E1E1E - Nouvelle page /settings avec gestion globale des tags: créer tag avec couleur, changer couleur, supprimer, liste avec compteurs - API tag management: POST/PUT/DELETE /api/settings/tags, GET /api/settings/tags/all - Preview panel: affichage images (img tag), PDF (lien viewer), détection format - workspace-chevron CSS: rotation 180° quand menu ouvert
This commit is contained in:
+19
-8
@@ -61,7 +61,7 @@
|
||||
x-data x-init="$nextTick(() => { if(typeof initTreeSortable==='function') initTreeSortable(); })">
|
||||
<!-- Workspace header + mobile back -->
|
||||
<div style="display:flex;align-items:center;gap:4px;">
|
||||
<button class="sidebar-back-btn" @click="mobileSidebarOpen = false; sidebarCollapsed = true;" title="Fermer le menu">
|
||||
<button class="sidebar-back-btn" @click="mobileSidebarOpen = false; sidebarCollapsed = true;" x-show="mobileSidebarOpen" title="Fermer le menu">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
|
||||
</button>
|
||||
<div class="sidebar-workspace" @click="toggleWorkspaceMenu" style="flex:1;">
|
||||
@@ -69,7 +69,22 @@
|
||||
<div class="workspace-avatar">{{ workspaceInitial }}</div>
|
||||
<span class="workspace-name">{{ workspaceName }}</span>
|
||||
</div>
|
||||
<span class="workspace-chevron">▾</span>
|
||||
<span class="workspace-chevron" :class="{ open: workspaceMenuOpen }">▾</span>
|
||||
</div>
|
||||
<!-- User menu dropdown -->
|
||||
<div class="user-menu-dropdown" x-show="workspaceMenuOpen" @click.outside="workspaceMenuOpen=false" x-transition>
|
||||
<div class="um-user-info">
|
||||
<div class="um-avatar">{{ workspaceInitial }}</div>
|
||||
<div>
|
||||
<div class="um-name">{{ user.full_name or user.login }}</div>
|
||||
<div class="um-plan">{{ user.email or '' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="um-sep"></div>
|
||||
<a href="/settings" class="um-item" @click="workspaceMenuOpen=false">⚙️ Settings</a>
|
||||
<a href="/workspaces" class="um-item" @click="workspaceMenuOpen=false">🔄 Switch workspace</a>
|
||||
<div class="um-sep"></div>
|
||||
<a href="/auth/logout" class="um-item um-danger" @click="workspaceMenuOpen=false">🚪 Log out</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -599,13 +614,9 @@
|
||||
try { localStorage.setItem('fd_sections', JSON.stringify(this.sectionsOpen)); }
|
||||
catch(e) {}
|
||||
},
|
||||
workspaceMenuOpen: false,
|
||||
toggleWorkspaceMenu() {
|
||||
if (window.innerWidth <= 768) {
|
||||
this.mobileSidebarOpen = !this.mobileSidebarOpen;
|
||||
this.sidebarCollapsed = !this.mobileSidebarOpen;
|
||||
} else {
|
||||
this.sidebarCollapsed = !this.sidebarCollapsed;
|
||||
}
|
||||
this.workspaceMenuOpen = !this.workspaceMenuOpen;
|
||||
},
|
||||
navigateTo(url) {
|
||||
this.mobileSidebarOpen = false;
|
||||
|
||||
Reference in New Issue
Block a user