From cc1a5c0fc851e134d5887b4867380280161db527 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 21 May 2026 09:34:42 +0200 Subject: [PATCH 1/4] docs: design de la refonte du playground (#MUI-34) --- .../2026-05-21-refonte-playground-design.md | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/superpowers/specs/2026-05-21-refonte-playground-design.md diff --git a/docs/superpowers/specs/2026-05-21-refonte-playground-design.md b/docs/superpowers/specs/2026-05-21-refonte-playground-design.md new file mode 100644 index 0000000..de866ca --- /dev/null +++ b/docs/superpowers/specs/2026-05-21-refonte-playground-design.md @@ -0,0 +1,124 @@ +# Refonte du système de playground + +Date : 2026-05-21 +Branche : `feature/MUI-34-revoir-le-systeme-de-playground` + +## Contexte + +Le playground actuel (`.playground/`) est une **fausse SPA** : une unique page +`index.vue` contient une sidebar codée à la main et charge dynamiquement les +pages de démo via `import.meta.glob` + ``. Il n'y a ni vrai +routage, ni layout, et la sidebar ne réutilise pas le composant `MalioSidebar` +de la bibliothèque. + +Les pages de démo existent déjà dans `.playground/pages/composant//.vue` +mais ne sont pas exploitées comme de vraies routes. + +## Objectif + +Refondre le playground autour du **vrai routage fichier de Nuxt** et d'un +**layout par défaut** qui embarque le composant `MalioSidebar` de production +(dogfooding du composant). + +## Décisions validées + +| Sujet | Décision | +|-------|----------| +| Navigation | Vrai routage Nuxt + layout dédié | +| Construction de la sidebar | Liste manuelle centralisée | +| Habillage du layout | Sidebar + contenu seul (épuré, chaque page gère son titre) | +| Page d'accueil | Page de bienvenue simple | +| Surbrillance lien actif | Hors périmètre (MalioSidebar inchangé) | + +## Architecture + +### 1. Config de navigation centralisée + +Nouveau fichier `.playground/playground.nav.ts` exportant un tableau +`SidebarSection[]` (type exporté par `MalioSidebar`). Les sections sont +définies manuellement ; chaque item est un `{ label, to }` pointant vers la +route de démo. + +```ts +import type { SidebarSection } from '../app/components/malio/sidebar/Sidebar.vue' + +export const navSections: SidebarSection[] = [ + { + label: 'BOUTONS', + icon: 'mdi:gesture-tap-button', + items: [ + { label: 'Button', to: '/composant/button/button' }, + { label: 'Button Icon', to: '/composant/button/buttonIcon' }, + ], + }, + // … autres sections (Champs, Sélections, Navigation, Données, Divers) +] +``` + +Les routes correspondent exactement aux fichiers existants dans +`.playground/pages/composant/`. Liste à couvrir : + +- **button/** : `button`, `buttonIcon` +- **checkbox/** : `checkbox` +- **radio/** : `radioButton` +- **input/** : `inputText`, `inputNumber`, `inputAmount`, `inputEmail`, + `inputPassword`, `inputPhone`, `inputTextArea`, `inputAutocomplete`, + `inputUpload`, `inputRichText` +- **select/** : `select`, `selectCheckbox` +- **time/** : `time` +- **tab/** : `tabList` +- **sidebar/** : `sidebar` +- **drawer/** : `drawer` +- **datatable/** : `datatable` +- **site/** : `siteSelector` +- **form/** : `client` + +Le regroupement en sections et les libellés affichés sont au choix du +développeur (manuel). Les routes, elles, sont imposées par les fichiers. + +### 2. Layout par défaut + +Nouveau fichier `.playground/layouts/default.vue` : + +- Conteneur `flex` pleine hauteur (`h-screen`). +- `` à gauche. + - Slots `logo` / `logo-collapsed` : logos `LOGO_MALIO.png` / + `LOGO_MALIO_COLLAPSED.png` (servis depuis le `public/` du layer), + enveloppés dans un `` pour revenir à l'accueil. + - Collapse géré en interne par le composant (mode non-contrôlé). +- `
` à droite. + +Le layout `default` s'applique automatiquement à toutes les pages du +playground — aucune page n'a besoin de `definePageMeta({ layout })`. + +### 3. Page d'accueil + +`.playground/pages/index.vue` réécrite en page de bienvenue simple : +titre + invitation à choisir un composant dans la sidebar. Toute la logique +de glob / chargement dynamique / sidebar maison est supprimée. + +### 4. Pages de démo + +**Inchangées.** Elles sont déjà des routes `/composant//` et +hériteront automatiquement du layout `default`. + +### 5. Mise à jour du skill `creating-malio-component` + +Ajouter une étape au skill : lors de la création d'un nouveau composant, +ajouter son entrée dans `.playground/playground.nav.ts` pour qu'il apparaisse +dans la sidebar. + +## Hors périmètre + +- Surbrillance de l'item actif dans `MalioSidebar` (ticket dédié si besoin). +- Toute autre évolution de `MalioSidebar`. +- Refonte du contenu des pages de démo existantes. + +## Critères de réussite + +- `npm run dev` lance le playground avec `MalioSidebar` dans un layout. +- Cliquer sur un item de la sidebar change l'URL et affiche la bonne démo. +- Le logo ramène à l'accueil ; l'accueil affiche le message de bienvenue. +- Plus aucune trace de la sidebar maison ni du chargement dynamique dans + `index.vue`. +- `npm run lint` et `npm run test` passent. -- 2.39.5 From f04c55f2f25a672911c026cbd967ed83d4423aa3 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 21 May 2026 09:39:24 +0200 Subject: [PATCH 2/4] =?UTF-8?q?docs=20:=20plan=20d'impl=C3=A9mentation=20r?= =?UTF-8?q?efonte=20playground=20(#MUI-34)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- .../plans/2026-05-21-refonte-playground.md | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-21-refonte-playground.md diff --git a/docs/superpowers/plans/2026-05-21-refonte-playground.md b/docs/superpowers/plans/2026-05-21-refonte-playground.md new file mode 100644 index 0000000..9ab86f7 --- /dev/null +++ b/docs/superpowers/plans/2026-05-21-refonte-playground.md @@ -0,0 +1,302 @@ +# Refonte du playground — 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 fausse-SPA du playground (sidebar maison + chargement dynamique dans `index.vue`) par du vrai routage Nuxt fichier + un layout par défaut qui embarque le composant `MalioSidebar` de production. + +**Architecture:** Une config de navigation centralisée (`.playground/playground.nav.ts`) alimente un layout par défaut (`.playground/layouts/default.vue`) contenant `` + ``. Les pages de démo existantes sous `.playground/pages/composant/**` deviennent automatiquement des routes et héritent du layout. `index.vue` devient une simple page d'accueil. Le `app/app.vue` du layer (``), hérité via `extends`, applique le layout automatiquement. + +**Tech Stack:** Nuxt 4 (layer + playground via `extends`), Vue 3 ` +``` + +- [ ] **Step 2 : Vérifier le lint du layout** + +Run: `npx eslint .playground/layouts/default.vue` +Expected: aucune erreur bloquante (0 errors). + +--- + +## Task 3 : Réécrire `index.vue` en page d'accueil + +**Files:** +- Modify (réécriture complète): `.playground/pages/index.vue` + +- [ ] **Step 1 : Remplacer tout le contenu de `index.vue`** + +Remplacer **l'intégralité** du fichier `.playground/pages/index.vue` (supprime la sidebar maison + le chargement dynamique par glob) par : + +```vue + +``` + +*(Page sans ` diff --git a/.playground/pages/index.vue b/.playground/pages/index.vue index 32a6e33..4e215cf 100644 --- a/.playground/pages/index.vue +++ b/.playground/pages/index.vue @@ -1,189 +1,10 @@ - - diff --git a/.playground/playground.nav.ts b/.playground/playground.nav.ts new file mode 100644 index 0000000..8790d20 --- /dev/null +++ b/.playground/playground.nav.ts @@ -0,0 +1,63 @@ +import type {SidebarSection} from '../app/components/malio/sidebar/Sidebar.vue' + +export const navSections: SidebarSection[] = [ + { + label: 'BOUTONS', + icon: 'mdi:gesture-tap-button', + items: [ + {label: 'Button', to: '/composant/button/button'}, + {label: 'Button Icon', to: '/composant/button/buttonIcon'}, + ], + }, + { + label: 'CHAMPS', + icon: 'mdi:form-textbox', + items: [ + {label: 'Texte', to: '/composant/input/inputText'}, + {label: 'Nombre', to: '/composant/input/inputNumber'}, + {label: 'Montant', to: '/composant/input/inputAmount'}, + {label: 'Email', to: '/composant/input/inputEmail'}, + {label: 'Mot de passe', to: '/composant/input/inputPassword'}, + {label: 'Téléphone', to: '/composant/input/inputPhone'}, + {label: 'Zone de texte', to: '/composant/input/inputTextArea'}, + {label: 'Saisie assistée', to: '/composant/input/inputAutocomplete'}, + {label: 'Upload', to: '/composant/input/inputUpload'}, + {label: 'Éditeur riche', to: '/composant/input/inputRichText'}, + ], + }, + { + label: 'SÉLECTIONS', + icon: 'mdi:form-dropdown', + items: [ + {label: 'Select', to: '/composant/select/select'}, + {label: 'Select Checkbox', to: '/composant/select/selectCheckbox'}, + {label: 'Checkbox', to: '/composant/checkbox/checkbox'}, + {label: 'Radio', to: '/composant/radio/radioButton'}, + ], + }, + { + label: 'NAVIGATION', + icon: 'mdi:navigation-variant', + items: [ + {label: 'Sidebar', to: '/composant/sidebar/sidebar'}, + {label: 'Drawer', to: '/composant/drawer/drawer'}, + {label: 'Onglets', to: '/composant/tab/tabList'}, + ], + }, + { + label: 'DONNÉES', + icon: 'mdi:table', + items: [ + {label: 'DataTable', to: '/composant/datatable/datatable'}, + ], + }, + { + label: 'DIVERS', + icon: 'mdi:dots-horizontal', + items: [ + {label: 'Heure', to: '/composant/time/time'}, + {label: 'Sélecteur de site', to: '/composant/site/siteSelector'}, + {label: 'Formulaire client', to: '/composant/form/client'}, + ], + }, +] -- 2.39.5 From e801f666cf7b65888814fe1651a77976f9926681 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 21 May 2026 10:25:32 +0200 Subject: [PATCH 4/4] =?UTF-8?q?feat=20:=20modification=20compl=C3=A8te=20d?= =?UTF-8?q?u=20playground?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a07c7e0..d006f62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Liste des évolutions de la librairie Malio layer UI * [#MUI-30] Création d'un composant email * [#MUI-31] Création d'un composant téléphone * [#MUI-32] Création d'un composant saisie assistée (autocomplete) +* [#MUI-34] Revoir le système de playground ### Changed -- 2.39.5