mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="text-subtitle-1 dense-markdown ingredient-item">
 | |
|     <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"
 | |
|     />
 | |
|     <template v-else>
 | |
|       <SafeMarkdown
 | |
|         v-if="parsedIng.name"
 | |
|         class="text-bold d-inline"
 | |
|         :source="parsedIng.name"
 | |
|       />
 | |
|       <SafeMarkdown
 | |
|         v-if="parsedIng.note"
 | |
|         class="note"
 | |
|         :source="parsedIng.note"
 | |
|       />
 | |
|     </template>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script setup lang="ts">
 | |
| import type { RecipeIngredient } from "~/lib/api/types/household";
 | |
| import { useParsedIngredientText } from "~/composables/recipes";
 | |
| 
 | |
| interface Props {
 | |
|   ingredient: RecipeIngredient;
 | |
|   scale?: number;
 | |
| }
 | |
| const props = withDefaults(defineProps<Props>(), {
 | |
|   scale: 1,
 | |
| });
 | |
| 
 | |
| const parsedIng = computed(() => {
 | |
|   return useParsedIngredientText(props.ingredient, props.scale);
 | |
| });
 | |
| </script>
 | |
| 
 | |
| <style lang="scss">
 | |
| .ingredient-item {
 | |
|   display: flex;
 | |
|   flex-wrap: wrap;
 | |
|   align-items: center;
 | |
|   gap: 0.25em;
 | |
|   word-break: break-word;
 | |
|   min-width: 0;
 | |
| 
 | |
|   .d-inline {
 | |
|     & > p {
 | |
|       display: inline;
 | |
|       &:has(> sub) > sup {
 | |
|         letter-spacing: -0.05rem;
 | |
|       }
 | |
|     }
 | |
|     &:has(sub) {
 | |
|       &:after {
 | |
|         letter-spacing: -0.2rem;
 | |
|       }
 | |
|     }
 | |
|     sup {
 | |
|       & + span {
 | |
|         letter-spacing: -0.05rem;
 | |
|       }
 | |
|       &:before {
 | |
|         letter-spacing: 0rem;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   .text-bold {
 | |
|     font-weight: bold;
 | |
|     white-space: normal;
 | |
|     word-break: break-word;
 | |
|   }
 | |
| }
 | |
| 
 | |
| .note {
 | |
|   flex-basis: 100%;
 | |
|   width: 100%;
 | |
|   display: block;
 | |
|   line-height: 1.3em;
 | |
|   font-size: 0.8em;
 | |
|   opacity: 0.7;
 | |
|   white-space: normal;
 | |
|   word-break: break-word;
 | |
| }
 | |
| </style>
 |