Coves frontend - a photon fork
at main 55 lines 1.5 kB view raw
1<script lang="ts"> 2 import { t } from '$lib/app/i18n' 3 import { Label } from 'mono-svelte' 4 import { DocumentPlus, Icon, Plus } from 'svelte-hero-icons/dist' 5 import ImageInputModal from './ImageInputModal.svelte' 6 7 let { 8 imageUrl: passedImageUrl = $bindable(), 9 label, 10 }: { 11 imageUrl?: string 12 label?: string 13 } = $props() 14 15 let imageUrl = $derived(passedImageUrl) 16 17 let open = $state(false) 18</script> 19 20<div> 21 <Label>{label}</Label> 22 23 <button 24 class={[ 25 'flex flex-col items-center justify-center px-8 py-4 mx-auto w-full rounded-xl', 26 'border border-slate-200 dark:border-zinc-800 border-dashed hover:border-slate-300 hover:dark:border-zinc-700', 27 'cursor-pointer min-h-36 transition-colors bg-white dark:bg-zinc-950 relative', 28 ]} 29 type="button" 30 onclick={() => (open = !open)} 31 > 32 {#if imageUrl} 33 <div> 34 <Icon 35 src={Plus} 36 class="text-slate-400 dark:text-zinc-500 absolute top-0 left-0 m-2" 37 size="20" 38 micro 39 /> 40 </div> 41 <img src={imageUrl} alt="" class="rounded-md mx-auto h-full" /> 42 {:else} 43 <Icon 44 src={DocumentPlus} 45 class="text-slate-400 dark:text-zinc-500" 46 size="36" 47 solid 48 /> 49 <p class="text-slate-600 dark:text-zinc-400 font-medium"> 50 {$t('common.attach')} 51 </p> 52 {/if} 53 <ImageInputModal bind:open bind:imageUrl={passedImageUrl} /> 54 </button> 55</div>