diff --git a/src/components/ImageDialog.vue b/src/components/ImageDialog.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2c6541fd3b3728f0156398cfa9da7f3fc8fff386
--- /dev/null
+++ b/src/components/ImageDialog.vue
@@ -0,0 +1,23 @@
+<template>
+  <q-dialog>
+    <div class="column justify-center items-center content-center" >
+      <q-btn icon="close" size="lg" class="absolute q-mt-md bg-secondary" style="top: 0px; z-index: 20000" text-color="primary" unelevated round v-close-popup />
+      <div class="absolute" style="margin: 10%; height: auto">
+        <img class="full-height full-width" style="border-radius: 10px" :src="src" />
+      </div>
+    </div>
+  </q-dialog>
+</template>
+
+<script setup lang="ts">
+defineProps({
+  src: {
+    type: String,
+    required: true
+  }
+})
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/components/ImageView.vue b/src/components/ImageView.vue
index 1335effcb8eae81668c47e71f295644963dca7e1..1f9b88e2356c0cea6d40b791b5ed52329041501a 100644
--- a/src/components/ImageView.vue
+++ b/src/components/ImageView.vue
@@ -19,9 +19,11 @@
     >
       <swiper-slide v-for="{src,nb} in imageProjet" zoom :key="nb">
         <img
+          class="cursor-pointer"
           :src="src"
           loading="lazy"
           style="border-radius: 10px"
+          @click="showImg = true;imgSelected = src"
         />
         <div
           class="swiper-lazy-preloader swiper-lazy-preloader-white"
@@ -29,6 +31,7 @@
       >
     </swiper>
   </div>
+  <image-dialog v-model="showImg" :src="imgSelected" />
 </template>
 
 <script setup lang="ts">
@@ -44,6 +47,10 @@ import 'swiper/css/navigation';
 import TitleComposant from 'components/TitleComposant.vue';
 import type { PropType } from 'vue';
 import images from './images';
+import ImageDialog from 'components/ImageDialog.vue'
+
+const imgSelected = ref('')
+const showImg = ref(false)
 
 const props = defineProps({
   id: {