Spaces:
Running
Running
| <script lang="ts"> | |
| import { | |
| BlockLabel, | |
| Empty, | |
| IconButton, | |
| IconButtonWrapper, | |
| DownloadLink | |
| } from "@gradio/atoms"; | |
| import { Download } from "@gradio/icons"; | |
| import { Image as ImageIcon } from "@gradio/icons"; | |
| import { type FileData } from "@gradio/client"; | |
| import type { I18nFormatter } from "@gradio/utils"; | |
| export let value: null | FileData; | |
| export let label: string | undefined = undefined; | |
| export let show_label: boolean; | |
| export let show_download_button = true; | |
| export let selectable = false; | |
| export let i18n: I18nFormatter; | |
| </script> | |
| <BlockLabel | |
| {show_label} | |
| Icon={ImageIcon} | |
| label={label || i18n("image.image")} | |
| /> | |
| {#if value === null || !value.url} | |
| <Empty unpadded_box={true} size="large"><ImageIcon /></Empty> | |
| {:else} | |
| <IconButtonWrapper> | |
| {#if show_download_button} | |
| <DownloadLink href={value.url} download={value.orig_name || "image"}> | |
| <IconButton Icon={Download} label={i18n("common.download")} /> | |
| </DownloadLink> | |
| {/if} | |
| </IconButtonWrapper> | |
| <button> | |
| <div class:selectable class="image-container"> | |
| <img src={value.url} alt="" loading="lazy" /> | |
| </div> | |
| </button> | |
| {/if} | |
| <style> | |
| .image-container { | |
| height: 100%; | |
| } | |
| .image-container :global(img), | |
| button { | |
| width: var(--size-full); | |
| height: var(--size-full); | |
| object-fit: scale-down; | |
| display: block; | |
| border-radius: var(--radius-lg); | |
| } | |
| .selectable { | |
| cursor: crosshair; | |
| } | |
| </style> | |