From c766e766245a571c3a34acb068390b3aa7610791 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 25 Jun 2026 15:30:23 +0000 Subject: [PATCH] =?UTF-8?q?feat(sidebar)=20:=20migration=20vers=20MalioSid?= =?UTF-8?q?ebar=20=E2=80=94=203=20groupes,=20footer=20timer+version,=20log?= =?UTF-8?q?o=20(LST-71)=20(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 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 ``. 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: https://gitea.malio.fr/MALIO-DEV/Lesstime/pulls/26 Co-authored-by: tristan Co-committed-by: tristan --- config/sidebar.php | 11 +- .../2026-06-25-malio-sidebar-migration.md | 484 ++++++++++++++++++ ...26-06-25-malio-sidebar-migration-design.md | 200 ++++++++ frontend/app/layouts/default.vue | 264 +++++----- frontend/components/ui/AppTopNav.vue | 4 +- frontend/components/ui/SidebarLink.vue | 52 -- frontend/i18n/locales/fr.json | 18 +- frontend/public/LOGO_CARRE.png | Bin 36583 -> 0 bytes frontend/public/LOGO_MALIO.png | Bin 0 -> 5824 bytes frontend/public/LOGO_MALIO_COLLAPSED.png | Bin 0 -> 2237 bytes frontend/shared/stores/ui.ts | 11 +- 11 files changed, 834 insertions(+), 210 deletions(-) create mode 100644 docs/superpowers/plans/2026-06-25-malio-sidebar-migration.md create mode 100644 docs/superpowers/specs/2026-06-25-malio-sidebar-migration-design.md delete mode 100644 frontend/components/ui/SidebarLink.vue delete mode 100644 frontend/public/LOGO_CARRE.png create mode 100644 frontend/public/LOGO_MALIO.png create mode 100644 frontend/public/LOGO_MALIO_COLLAPSED.png diff --git a/config/sidebar.php b/config/sidebar.php index b4761d4..75e1312 100644 --- a/config/sidebar.php +++ b/config/sidebar.php @@ -26,7 +26,14 @@ return [ ['label' => 'sidebar.general.myTasks', 'to' => '/my-tasks', 'icon' => 'mdi:clipboard-check-outline', 'module' => 'project-management', 'permission' => 'project-management.tasks.view'], ['label' => 'sidebar.general.projects', 'to' => '/projects', 'icon' => 'mdi:folder-outline', 'module' => 'project-management', 'permission' => 'project-management.projects.view'], ['label' => 'sidebar.general.timeTracking', 'to' => '/time-tracking', 'icon' => 'mdi:calendar-edit-outline', 'module' => 'time-tracking', 'permission' => 'time-tracking.entries.view'], - // Gating module uniquement (cf. en-tête) : rendu visuel + badge gérés côté layout. + ], + ], + [ + 'label' => 'sidebar.tools.section', + 'icon' => 'mdi:tools', + 'items' => [ + // Gating module uniquement : rendu visuel + badge non-lus gérés côté layout + // (filtré de translatedSections puis ré-injecté avec suffixe (N)). ['label' => 'sidebar.general.mail', 'to' => '/mail', 'icon' => 'mdi:email-outline', 'module' => 'mail'], ], ], @@ -37,8 +44,8 @@ return [ 'items' => [ ['label' => 'sidebar.admin.teamAbsences', 'to' => '/team-absences', 'icon' => 'mdi:calendar-account-outline', 'module' => 'absence'], ['label' => 'sidebar.admin.directory', 'to' => '/directory', 'icon' => 'mdi:card-account-details-outline', 'module' => 'directory'], - ['label' => 'sidebar.admin.administration', 'to' => '/admin', 'icon' => 'mdi:cog-outline', 'permission' => 'core.users.view'], ['label' => 'sidebar.admin.reporting', 'to' => '/reporting', 'icon' => 'mdi:chart-line', 'module' => 'reporting', 'permission' => 'reporting.view'], + ['label' => 'sidebar.admin.administration', 'to' => '/admin', 'icon' => 'mdi:cog-outline', 'permission' => 'core.users.view'], ], ], ]; diff --git a/docs/superpowers/plans/2026-06-25-malio-sidebar-migration.md b/docs/superpowers/plans/2026-06-25-malio-sidebar-migration.md new file mode 100644 index 0000000..fcb0ada --- /dev/null +++ b/docs/superpowers/plans/2026-06-25-malio-sidebar-migration.md @@ -0,0 +1,484 @@ +# Migration sidebar vers MalioSidebar — Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Remplacer la sidebar maison de Lesstime par le composant `MalioSidebar` de `@malio/layer-ui`, en 3 groupes (Général / Outils / Administration), avec timer + version dans le footer et le logo Malio de Starseed. + +**Architecture:** Modèle backend-driven conservé — `config/sidebar.php` filtré par `SidebarProvider` (permissions/rôles/modules côté serveur), exposé via `/api/sidebar`, consommé par `useSidebar()`. Le layout `default.vue` mappe ces sections vers le format `MalioSidebar` et fusionne les items contextuels rendus côté client (Kanban/Groupes/Archives, Documents, Mail+badge, Mes absences). + +**Tech Stack:** Nuxt 4 (SPA), Vue 3 ` - - diff --git a/frontend/components/ui/AppTopNav.vue b/frontend/components/ui/AppTopNav.vue index b8fdef2..05b77fd 100644 --- a/frontend/components/ui/AppTopNav.vue +++ b/frontend/components/ui/AppTopNav.vue @@ -3,11 +3,11 @@