| 
									
										
										
										
											2022-10-21 20:01:08 -08:00
										 |  |  | <template> | 
					
						
							|  |  |  |   <div ref="el" :class="isOverDropZone ? 'over' : ''"> | 
					
						
							|  |  |  |     <div v-if="isOverDropZone" class="overlay"></div> | 
					
						
							|  |  |  |     <div v-if="isOverDropZone" class="absolute text-container"> | 
					
						
							| 
									
										
										
										
											2023-10-26 15:26:14 +02:00
										 |  |  |       <p class="text-center drop-text"> {{ $t("recipe.drop-image") }} </p> | 
					
						
							| 
									
										
										
										
											2022-10-21 20:01:08 -08:00
										 |  |  |     </div> | 
					
						
							|  |  |  |     <slot></slot> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script lang="ts"> | 
					
						
							|  |  |  | import { defineComponent, ref } from "@nuxtjs/composition-api"; | 
					
						
							|  |  |  | import { useDropZone } from "@vueuse/core"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							|  |  |  |   setup(_, context) { | 
					
						
							|  |  |  |     const el = ref<HTMLDivElement>(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function onDrop(files: File[]) { | 
					
						
							|  |  |  |       context.emit("drop", files); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // @ts-ignore - This should work?
 | 
					
						
							|  |  |  |     const { isOverDropZone } = useDropZone(el, onDrop); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { el, isOverDropZone }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style lang="css"> | 
					
						
							|  |  |  | .over { | 
					
						
							|  |  |  |   background-color: #f0f0f0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .overlay { | 
					
						
							|  |  |  |   position: absolute; | 
					
						
							|  |  |  |   filter: blur(2px); | 
					
						
							|  |  |  |   top: 0; | 
					
						
							|  |  |  |   left: 0; | 
					
						
							|  |  |  |   right: 0; | 
					
						
							|  |  |  |   bottom: 0; | 
					
						
							|  |  |  |   background-color: rgba(0, 0, 0, 0.309); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .text-container { | 
					
						
							|  |  |  |   z-index: 10; | 
					
						
							|  |  |  |   position: absolute; | 
					
						
							|  |  |  |   top: 0; | 
					
						
							|  |  |  |   left: 0; | 
					
						
							|  |  |  |   right: 0; | 
					
						
							|  |  |  |   bottom: 0; | 
					
						
							|  |  |  |   display: flex; | 
					
						
							|  |  |  |   justify-content: center; | 
					
						
							|  |  |  |   align-items: center; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .drop-text { | 
					
						
							|  |  |  |   color: white; | 
					
						
							|  |  |  |   font-size: 1.5rem; | 
					
						
							|  |  |  |   font-weight: bold; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | </style> |