c766e76624
Auto Tag Develop / tag (push) Successful in 8s
## Objectif Remplacer la sidebar maison par le composant `MalioSidebar` de `@malio/layer-ui` (alignement avec Starseed). ## Changements - **Backend** : `config/sidebar.php` re-catégorisé en **3 groupes** (Général / Outils / Administration). Tous les gates permission/rôle/module **préservés côté serveur** (rien déplacé côté client). - **Frontend** : `app/layouts/default.vue` migré vers `<MalioSidebar>`. Un computed `mergedSections` mappe les sections backend et y fusionne les items contextuels (Kanban/Groupes/Archives sous « Projets », Mes absences, Messagerie avec compteur `(N)`, Documents). - **Footer** : timer (`SidebarTimer`) + version de l'app (masquée en mode replié). - **Logo** : logos Malio repris de Starseed (`LOGO_MALIO.png` / `LOGO_MALIO_COLLAPSED.png`). - **Mobile** : `MalioSidebar` étant toujours visible (pas de tiroir off-canvas), le hamburger pilote désormais le repli ; suppression du code de tiroir mobile mort (`sidebarOpen`/`openMobileSidebar`/`closeMobileSidebar`). - **Nettoyage** : suppression de `SidebarLink.vue` et `LOGO_CARRE.png` (obsolètes). `malio.png` conservé (utilisé par la page login). - **i18n** : nouvelles clés `sidebar.tools.section`, `sidebar.general.myAbsences`, `sidebar.project.kanban|groups|archives` ; `sidebar.general.section` → « Général ». ## Compromis (limites du composant, lib non modifiée) - Pas d'icône par item (uniquement icône de section) — design malioUI, comme Starseed. - Badge mail → suffixe `(N)` dans le libellé. ## Vérifications - Build Nuxt OK (`✨ Build complete!`, exit 0). - Revue par task + revue finale whole-branch : aucun Critical/Important. - Sécurité : filtrage des permissions inchangé (côté serveur). Specs/plan : `docs/superpowers/specs/2026-06-25-malio-sidebar-migration-design.md`, `docs/superpowers/plans/2026-06-25-malio-sidebar-migration.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: #26 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
export const useUiStore = defineStore('ui', () => {
|
|
const sidebarCollapsed = ref(false)
|
|
const darkMode = ref(false)
|
|
|
|
if (import.meta.client) {
|
|
const saved = localStorage.getItem('ui-sidebar-collapsed')
|
|
if (saved !== null) {
|
|
sidebarCollapsed.value = saved === 'true'
|
|
}
|
|
|
|
const savedDark = localStorage.getItem('ui-dark-mode')
|
|
if (savedDark !== null) {
|
|
darkMode.value = savedDark === 'true'
|
|
}
|
|
applyDarkClass(darkMode.value)
|
|
}
|
|
|
|
watch(sidebarCollapsed, (val) => {
|
|
if (import.meta.client) {
|
|
localStorage.setItem('ui-sidebar-collapsed', String(val))
|
|
}
|
|
})
|
|
|
|
watch(darkMode, (val) => {
|
|
if (import.meta.client) {
|
|
localStorage.setItem('ui-dark-mode', String(val))
|
|
applyDarkClass(val)
|
|
}
|
|
})
|
|
|
|
function applyDarkClass(dark: boolean) {
|
|
if (dark) {
|
|
document.documentElement.classList.add('dark')
|
|
} else {
|
|
document.documentElement.classList.remove('dark')
|
|
}
|
|
}
|
|
|
|
function toggleDarkMode() {
|
|
darkMode.value = !darkMode.value
|
|
}
|
|
|
|
function toggleSidebar() {
|
|
sidebarCollapsed.value = !sidebarCollapsed.value
|
|
}
|
|
|
|
return { sidebarCollapsed, darkMode, toggleSidebar, toggleDarkMode }
|
|
})
|