From fcc20d1f42445e689a1ae31e487708af87996499 Mon Sep 17 00:00:00 2001
From: ALAMI Adnane <Adnane.Alami@bordeaux-inp.fr>
Date: Wed, 23 Apr 2025 11:07:32 +0200
Subject: [PATCH] fix: (forgot to say that the layout in enhanced in last
 commit) + fix du prettier

---
 .../src/components/HeaderComponent.vue        |  12 +-
 .../src/components/canvas/CanvasItem.vue      | 188 +++++++++---------
 .../src/components/canvas/HeaderCanvas.vue    |  14 +-
 .../src/components/canvas/LeanCanvas.vue      |  14 +-
 .../MyINPulse-front/src/views/CanvasView.vue  |  10 +-
 5 files changed, 122 insertions(+), 116 deletions(-)

diff --git a/front/MyINPulse-front/src/components/HeaderComponent.vue b/front/MyINPulse-front/src/components/HeaderComponent.vue
index 53da9d9..d26e6ca 100644
--- a/front/MyINPulse-front/src/components/HeaderComponent.vue
+++ b/front/MyINPulse-front/src/components/HeaderComponent.vue
@@ -1,11 +1,15 @@
 <template>
     <header>
         <a
-          href="https://www.bordeaux-inp.fr/fr/lincubateur-bordeaux-inpulse"
-          target="_blank"
-          rel="noopener"
+            href="https://www.bordeaux-inp.fr/fr/lincubateur-bordeaux-inpulse"
+            target="_blank"
+            rel="noopener"
         >
-          <img src="./icons/logo inpulse.png" alt="INPulse Logo" class="logo" />
+            <img
+                src="./icons/logo inpulse.png"
+                alt="INPulse Logo"
+                class="logo"
+            />
         </a>
     </header>
 </template>
diff --git a/front/MyINPulse-front/src/components/canvas/CanvasItem.vue b/front/MyINPulse-front/src/components/canvas/CanvasItem.vue
index e4cdc22..9ee1554 100755
--- a/front/MyINPulse-front/src/components/canvas/CanvasItem.vue
+++ b/front/MyINPulse-front/src/components/canvas/CanvasItem.vue
@@ -5,68 +5,82 @@
         <div class="tooltip-explain">{{ description }}</div>
 
         <template v-if="expanded">
-              <div class="explain">
+            <div class="explain">
                 <p>
                     {{ description }}
                 </p>
-              </div>
+            </div>
         </template>
 
         <div class="description-wrapper custom-flow">
             <div
                 v-for="(desc, index) in currentDescriptions"
                 :key="index"
-                :class="['section-bloc', index % 2 === 0 ? 'from-left' : 'from-right']"
+                :class="[
+                    'section-bloc',
+                    index % 2 === 0 ? 'from-left' : 'from-right',
+                ]"
                 class="section-bloc"
             >
-              <!-- ADMIN -------------------------------------------------------------------------------------------->
+                <!-- ADMIN -------------------------------------------------------------------------------------------->
 
-              <template v-if="IS_ADMIN">
-                  <div class="description">
-                      <p class="m-0">{{ desc }}</p>
-                  </div>
-              </template>
-
-              <!-- ENTREP ------------------------------------------------------------------------------------------->
-
-              <template v-if="!IS_ADMIN">
-                  <!-- Mode affichage -->
-                  <template v-if="!isEditing[index]">
-                      <div class="description">
-                          <p class="m-0">{{ desc }}</p>
-                      </div>
-                      <div class="button-container">
-                          <button
-                              v-if="expanded"
-                              class="edit-button"
-                              @click.stop="startEditing(index)"
-                          >
-                              Éditer
-                          </button>
-                      </div>
-                  </template>
-
-                  <!-- Mode édition -->
-                  <template v-else>
-                    <div class="edit-row">
-                        <textarea
-                            v-model="editedDescriptions[index]"
-                            class="edit-input"
-                        ></textarea>
-                        <div class="button-container">
-                            <button class="save-button" @click.stop="saveEdit(index)">Enregistrer</button>
-                            <button class="cancel-button" @click.stop="cancelEdit(index)">Annuler</button>
-                        </div>
+                <template v-if="IS_ADMIN">
+                    <div class="description">
+                        <p class="m-0">{{ desc }}</p>
                     </div>
-                  </template>
-              </template>
-          </div>
-          <!---------------------------------------------------------------------------------------------------->
-          <template v-if="expanded">
-              <div class="canvas-exit-hint">
-                Cliquez n'importe où pour quitter le canvas (terminez d'abord vos modifications)
-              </div>
-          </template>
+                </template>
+
+                <!-- ENTREP ------------------------------------------------------------------------------------------->
+
+                <template v-if="!IS_ADMIN">
+                    <!-- Mode affichage -->
+                    <template v-if="!isEditing[index]">
+                        <div class="description">
+                            <p class="m-0">{{ desc }}</p>
+                        </div>
+                        <div class="button-container">
+                            <button
+                                v-if="expanded"
+                                class="edit-button"
+                                @click.stop="startEditing(index)"
+                            >
+                                Éditer
+                            </button>
+                        </div>
+                    </template>
+
+                    <!-- Mode édition -->
+                    <template v-else>
+                        <div class="edit-row">
+                            <textarea
+                                v-model="editedDescriptions[index]"
+                                class="edit-input"
+                            ></textarea>
+                            <div class="button-container">
+                                <button
+                                    class="save-button"
+                                    @click.stop="saveEdit(index)"
+                                >
+                                    Enregistrer
+                                </button>
+                                <button
+                                    class="cancel-button"
+                                    @click.stop="cancelEdit(index)"
+                                >
+                                    Annuler
+                                </button>
+                            </div>
+                        </div>
+                    </template>
+                </template>
+            </div>
+            <!---------------------------------------------------------------------------------------------------->
+            <template v-if="expanded">
+                <div class="canvas-exit-hint">
+                    Cliquez n'importe où pour quitter le canvas (terminez
+                    d'abord vos modifications)
+                </div>
+            </template>
         </div>
     </div>
 </template>
@@ -175,17 +189,17 @@ const mockFetch = async (projectId: number, title: number, date: string) => {
             "Les clients ont du mal à trouver des produits écoresponsables abordables.",
             "Le processus d'achat en ligne est trop complexe.",
             "Manque de transparence sur l’origine des produits.",
-            "Peu d’alternatives locales et durables sur le marché."
+            "Peu d’alternatives locales et durables sur le marché.",
         ],
         2: [
             "Jeunes urbains engagés dans la cause écologique.",
             "Familles à revenu moyen voulant consommer responsable.",
-            "Entreprises soucieuses de leur empreinte carbone."
+            "Entreprises soucieuses de leur empreinte carbone.",
         ],
         3: [
             "Une plateforme centralisée avec des produits écologiques certifiés.",
             "Un service client humain et réactif.",
-            "Livraison éco-responsable avec suivi."
+            "Livraison éco-responsable avec suivi.",
         ],
         4: [
             "Application intuitive avec suggestions personnalisées.",
@@ -198,22 +212,22 @@ const mockFetch = async (projectId: number, title: number, date: string) => {
         6: [
             "Canaux digitaux : réseaux sociaux, SEO.",
             "Partenariats avec influenceurs écoresponsables.",
-            "Boutique physique en pop-up stores."
+            "Boutique physique en pop-up stores.",
         ],
         7: [
             "Taux de rétention client mensuel.",
-            "Taux de satisfaction utilisateur (NPS)."
+            "Taux de satisfaction utilisateur (NPS).",
         ],
         8: [
             "Coût du développement logiciel initial.",
             "Campagnes publicitaires et communication.",
-            "Frais logistiques (emballages, transport)."
+            "Frais logistiques (emballages, transport).",
         ],
         9: [
             "Ventes directes sur la plateforme.",
             "Abonnement mensuel premium pour livraison gratuite.",
-            "Revenus via partenariats de marque."
-        ]
+            "Revenus via partenariats de marque.",
+        ],
     };
 
     // On extrait les descriptions pour la section demandée
@@ -227,8 +241,6 @@ const mockFetch = async (projectId: number, title: number, date: string) => {
     });
 };
 
-
-
 // Utilisation du mock dans handleClick pour tester sans serveur
 const handleClick = async () => {
     if (!expanded.value) {
@@ -309,20 +321,6 @@ const cancelEdit = (index: number) => {
     editedDescriptions.value[index] = currentDescriptions.value[index];
     isEditing.value[index] = false;
 };
-
-const randomStyle = () => {
-    const offsetX = Math.floor(Math.random() * 20) - 10; // entre -10 et +10px
-    const offsetY = Math.floor(Math.random() * 20) - 10;
-    return {
-        transform: `translate(${offsetX}px, ${offsetY}px)`,
-        transition: 'transform 0.3s ease',
-    };
-};
-
-const styleClasses = ['float-up', 'float-left', 'float-right', 'wiggle', 'tilt'];
-const getRandomClass = () => {
-    return styleClasses[Math.floor(Math.random() * styleClasses.length)];
-};
 </script>
 
 <style scoped>
@@ -424,7 +422,6 @@ const getRandomClass = () => {
     overflow: hidden;
 }
 
-
 .button-container {
     display: block;
     margin-top: 20px;
@@ -445,14 +442,13 @@ const getRandomClass = () => {
     cursor: default;
 
     max-width: 100%;
-    width: fit-content;     
+    width: fit-content;
     overflow-wrap: break-word;
     box-sizing: border-box;
 
     min-width: 120px;
 }
 
-
 .editing-section-bloc {
     width: 100%;
     justify-content: center;
@@ -546,7 +542,6 @@ const getRandomClass = () => {
     box-sizing: border-box;
 }
 
-
 .custom-flow {
     display: flex;
     flex-wrap: wrap;
@@ -560,20 +555,29 @@ const getRandomClass = () => {
     overflow-x: hidden;
 }
 
-
 .container {
-  display: grid;
-  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
-  grid-auto-rows: min-content;
-  grid-auto-flow: dense;
-  gap: 1rem;
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+    grid-auto-rows: min-content;
+    grid-auto-flow: dense;
+    gap: 1rem;
 }
 
-.float-up { transform: translateY(-10px); }
-.float-left { transform: translateX(-10px); }
-.float-right { transform: translateX(10px); }
-.wiggle { transform: rotate(1deg); }
-.tilt { transform: rotate(-1deg); }
+.float-up {
+    transform: translateY(-10px);
+}
+.float-left {
+    transform: translateX(-10px);
+}
+.float-right {
+    transform: translateX(10px);
+}
+.wiggle {
+    transform: rotate(1deg);
+}
+.tilt {
+    transform: rotate(-1deg);
+}
 
 .from-left {
     align-self: flex-start;
@@ -595,10 +599,10 @@ const getRandomClass = () => {
 
 .explain {
     font-size: 16px;
-    color: #444; /* gris doux pour le texte */
-    background-color: #f9f9f9; /* fond léger pour contraster */
+    color: #444;
+    background-color: #f9f9f9;
     padding: 7px;
-    border-left: 4px solid #0d6efd; /* petite bande à gauche type "info" */
+    border-left: 4px solid #0d6efd;
     border-right: 4px solid #0d6efd;
     border-radius: 6px;
     margin-bottom: 20px;
@@ -606,6 +610,4 @@ const getRandomClass = () => {
     line-height: 1.6;
     font-family: "Segoe UI", sans-serif;
 }
-
-
 </style>
diff --git a/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue b/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue
index afb0659..b8966e4 100644
--- a/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue
+++ b/front/MyINPulse-front/src/components/canvas/HeaderCanvas.vue
@@ -1,15 +1,17 @@
 <template>
     <header class="header">
         <a
-          href="https://www.bordeaux-inp.fr/fr/lincubateur-bordeaux-inpulse"
-          target="_blank"
-          rel="noopener"
+            href="https://www.bordeaux-inp.fr/fr/lincubateur-bordeaux-inpulse"
+            target="_blank"
+            rel="noopener"
         >
-          <img src="../icons/logo inpulse.png" alt="INPulse Logo" class="logo" />
+            <img
+                src="../icons/logo inpulse.png"
+                alt="INPulse Logo"
+                class="logo"
+            />
         </a>
 
-
-
         <div class="header-actions">
             <div ref="dropdownRef" class="dropdown-wrapper">
                 <button class="contact-button" @click.stop="toggleDropdown">
diff --git a/front/MyINPulse-front/src/components/canvas/LeanCanvas.vue b/front/MyINPulse-front/src/components/canvas/LeanCanvas.vue
index f7b6c5a..1c84fd7 100644
--- a/front/MyINPulse-front/src/components/canvas/LeanCanvas.vue
+++ b/front/MyINPulse-front/src/components/canvas/LeanCanvas.vue
@@ -117,19 +117,18 @@ onMounted(() => {
     gap: 12px;
     padding: 30px;
     position: relative;
-    height: auto;             /* autorise la hauteur à s'ajuster selon le contenu */
-    max-height: none;         /* enlève la limite de hauteur */
+    height: auto; /* autorise la hauteur à s'ajuster selon le contenu */
+    max-height: none; /* enlève la limite de hauteur */
     box-sizing: border-box;
-    overflow: visible;        /* autorise le débordement visible */
+    overflow: visible; /* autorise le débordement visible */
 }
 
 @media (max-width: 768px) {
-  .canvas {
-    grid-template-columns: repeat(1, 1fr);
-  }
+    .canvas {
+        grid-template-columns: repeat(1, 1fr);
+    }
 }
 
-
 .Probleme {
     grid-column: 1 / 3;
     grid-row: 1 / 5;
@@ -200,5 +199,4 @@ onMounted(() => {
 .Revenus {
     background-color: #c8e6c9;
 }
-
 </style>
diff --git a/front/MyINPulse-front/src/views/CanvasView.vue b/front/MyINPulse-front/src/views/CanvasView.vue
index d240adb..0fead7a 100644
--- a/front/MyINPulse-front/src/views/CanvasView.vue
+++ b/front/MyINPulse-front/src/views/CanvasView.vue
@@ -1,5 +1,4 @@
 <template>
-    
     <div>
         <header>
             <HeaderCanvas :project-id="1" />
@@ -25,7 +24,8 @@
                 <a href="tel:{{ admin.phoneNumber }}">{{
                     admin.phoneNumber
                 }}</a>
-            </p>    <div class="main"></div>
+            </p>
+            <div class="main"></div>
         </div>
     </div>
 </template>
@@ -139,11 +139,11 @@ onMounted(() => {
 }
 
 .canvas-help-text {
-  margin-top: 20px;   
-  margin-bottom: -10px;
+    margin-top: 20px;
+    margin-bottom: -10px;
 }
 
 div:last-child {
-  margin-bottom: 60px;
+    margin-bottom: 60px;
 }
 </style>