| 
									
										
										
										
											2021-05-22 21:04:19 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2021-05-24 10:12:46 -08:00
										 |  |  |   <v-img | 
					
						
							|  |  |  |     v-if="!fallBackImage" | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |     :height="height" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     cover | 
					
						
							| 
									
										
										
										
											2024-08-23 20:26:12 +02:00
										 |  |  |     min-height="125" | 
					
						
							|  |  |  |     max-height="fill-height" | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  |     :src="getImage(recipeId)" | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |     @click="$emit('click')" | 
					
						
							| 
									
										
										
										
											2021-05-24 10:12:46 -08:00
										 |  |  |     @load="fallBackImage = false" | 
					
						
							|  |  |  |     @error="fallBackImage = true" | 
					
						
							|  |  |  |   > | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     <slot /> | 
					
						
							| 
									
										
										
										
											2021-05-24 10:12:46 -08:00
										 |  |  |   </v-img> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   <div | 
					
						
							|  |  |  |     v-else | 
					
						
							|  |  |  |     class="icon-slot" | 
					
						
							|  |  |  |     @click="$emit('click')" | 
					
						
							|  |  |  |   > | 
					
						
							|  |  |  |     <v-icon | 
					
						
							|  |  |  |       color="primary" | 
					
						
							|  |  |  |       class="icon-position" | 
					
						
							|  |  |  |       :size="iconSize" | 
					
						
							|  |  |  |     > | 
					
						
							| 
									
										
										
										
											2021-05-24 10:12:46 -08:00
										 |  |  |       {{ $globals.icons.primary }} | 
					
						
							|  |  |  |     </v-icon> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     <slot /> | 
					
						
							| 
									
										
										
										
											2021-05-22 21:04:19 -08:00
										 |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | <script setup lang="ts"> | 
					
						
							|  |  |  | import { useStaticRoutes } from "~/composables/api"; | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | interface Props { | 
					
						
							|  |  |  |   tiny?: boolean | null; | 
					
						
							|  |  |  |   small?: boolean | null; | 
					
						
							|  |  |  |   large?: boolean | null; | 
					
						
							|  |  |  |   iconSize?: number | string; | 
					
						
							|  |  |  |   slug?: string | null; | 
					
						
							|  |  |  |   recipeId: string; | 
					
						
							|  |  |  |   imageVersion?: string | null; | 
					
						
							|  |  |  |   height?: number | string; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | const props = withDefaults(defineProps<Props>(), { | 
					
						
							|  |  |  |   tiny: null, | 
					
						
							|  |  |  |   small: null, | 
					
						
							|  |  |  |   large: null, | 
					
						
							|  |  |  |   iconSize: 100, | 
					
						
							|  |  |  |   slug: null, | 
					
						
							|  |  |  |   imageVersion: null, | 
					
						
							|  |  |  |   height: "100%", | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-08-09 16:19:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | defineEmits<{ | 
					
						
							|  |  |  |   click: []; | 
					
						
							|  |  |  | }>(); | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | const { recipeImage, recipeSmallImage, recipeTinyImage } = useStaticRoutes(); | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | const fallBackImage = ref(false); | 
					
						
							|  |  |  | const imageSize = computed(() => { | 
					
						
							|  |  |  |   if (props.tiny) return "tiny"; | 
					
						
							|  |  |  |   if (props.small) return "small"; | 
					
						
							|  |  |  |   if (props.large) return "large"; | 
					
						
							|  |  |  |   return "large"; | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | watch( | 
					
						
							|  |  |  |   () => props.recipeId, | 
					
						
							|  |  |  |   () => { | 
					
						
							|  |  |  |     fallBackImage.value = false; | 
					
						
							| 
									
										
										
										
											2021-05-22 21:04:19 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2025-07-30 20:37:02 +02:00
										 |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getImage(recipeId: string) { | 
					
						
							|  |  |  |   switch (imageSize.value) { | 
					
						
							|  |  |  |     case "tiny": | 
					
						
							|  |  |  |       return recipeTinyImage(recipeId, props.imageVersion); | 
					
						
							|  |  |  |     case "small": | 
					
						
							|  |  |  |       return recipeSmallImage(recipeId, props.imageVersion); | 
					
						
							|  |  |  |     case "large": | 
					
						
							|  |  |  |       return recipeImage(recipeId, props.imageVersion); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-05-22 21:04:19 -08:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style scoped> | 
					
						
							|  |  |  | .icon-slot { | 
					
						
							|  |  |  |   position: relative; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .icon-slot > div { | 
					
						
							| 
									
										
										
										
											2021-07-09 14:33:23 -08:00
										 |  |  |   top: 0; | 
					
						
							| 
									
										
										
										
											2021-05-22 21:04:19 -08:00
										 |  |  |   position: absolute; | 
					
						
							|  |  |  |   z-index: 1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .icon-position { | 
					
						
							|  |  |  |   opacity: 0.8; | 
					
						
							|  |  |  |   display: flex !important; | 
					
						
							|  |  |  |   position: relative; | 
					
						
							|  |  |  |   margin-left: auto !important; | 
					
						
							|  |  |  |   margin-right: auto !important; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | </style> |