| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2025-06-28 15:59:58 +02:00
										 |  |  |   <div class="text-subtitle-1 dense-markdown ingredient-item"> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     <SafeMarkdown | 
					
						
							|  |  |  |       v-if="parsedIng.quantity" | 
					
						
							|  |  |  |       class="d-inline" | 
					
						
							|  |  |  |       :source="parsedIng.quantity" | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |     <template v-if="parsedIng.unit"> | 
					
						
							|  |  |  |       {{ parsedIng.unit }} | 
					
						
							|  |  |  |     </template> | 
					
						
							|  |  |  |     <SafeMarkdown | 
					
						
							|  |  |  |       v-if="parsedIng.note && !parsedIng.name" | 
					
						
							|  |  |  |       class="text-bold d-inline" | 
					
						
							|  |  |  |       :source="parsedIng.note" | 
					
						
							|  |  |  |     /> | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |     <template v-else> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       <SafeMarkdown | 
					
						
							|  |  |  |         v-if="parsedIng.name" | 
					
						
							|  |  |  |         class="text-bold d-inline" | 
					
						
							|  |  |  |         :source="parsedIng.name" | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |       <SafeMarkdown | 
					
						
							|  |  |  |         v-if="parsedIng.note" | 
					
						
							|  |  |  |         class="note" | 
					
						
							|  |  |  |         :source="parsedIng.note" | 
					
						
							|  |  |  |       /> | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |     </template> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import type { RecipeIngredient } from "~/lib/api/types/household"; | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  | import { useParsedIngredientText } from "~/composables/recipes"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | export default defineNuxtComponent({ | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |   props: { | 
					
						
							|  |  |  |     ingredient: { | 
					
						
							|  |  |  |       type: Object as () => RecipeIngredient, | 
					
						
							|  |  |  |       required: true, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     disableAmount: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: false, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     scale: { | 
					
						
							|  |  |  |       type: Number, | 
					
						
							|  |  |  |       default: 1, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   setup(props) { | 
					
						
							| 
									
										
										
										
											2023-08-25 11:32:06 -05:00
										 |  |  |     const parsedIng = computed(() => { | 
					
						
							|  |  |  |       return useParsedIngredientText(props.ingredient, props.disableAmount, props.scale); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2023-08-25 11:32:06 -05:00
										 |  |  |       parsedIng, | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | </script> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-25 18:32:26 +02:00
										 |  |  | <style lang="scss"> | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  | .ingredient-item { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   display: flex; | 
					
						
							|  |  |  |   flex-wrap: wrap; | 
					
						
							|  |  |  |   align-items: center; | 
					
						
							|  |  |  |   gap: 0.25em; | 
					
						
							|  |  |  |   word-break: break-word; | 
					
						
							|  |  |  |   min-width: 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |   .d-inline { | 
					
						
							|  |  |  |     & > p { | 
					
						
							|  |  |  |       display: inline; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       &:has(> sub) > sup { | 
					
						
							| 
									
										
										
										
											2024-06-13 15:04:45 +02:00
										 |  |  |         letter-spacing: -0.05rem; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     &:has(sub) { | 
					
						
							|  |  |  |       &:after { | 
					
						
							|  |  |  |         letter-spacing: -0.2rem; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     sup { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       & + span { | 
					
						
							| 
									
										
										
										
											2024-06-13 15:04:45 +02:00
										 |  |  |         letter-spacing: -0.05rem; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       &:before { | 
					
						
							|  |  |  |         letter-spacing: 0rem; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   .text-bold { | 
					
						
							|  |  |  |     font-weight: bold; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     white-space: normal; | 
					
						
							|  |  |  |     word-break: break-word; | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .note { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   flex-basis: 100%; | 
					
						
							|  |  |  |   width: 100%; | 
					
						
							|  |  |  |   display: block; | 
					
						
							|  |  |  |   line-height: 1.3em; | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  |   font-size: 0.8em; | 
					
						
							|  |  |  |   opacity: 0.7; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   white-space: normal; | 
					
						
							|  |  |  |   word-break: break-word; | 
					
						
							| 
									
										
										
										
											2023-08-21 17:32:09 +02:00
										 |  |  | } | 
					
						
							|  |  |  | </style> |