2024-02-22 18:49:34 -08:00
|
|
|
<script lang="ts">
|
2024-03-08 17:38:10 -08:00
|
|
|
import { WEBUI_BASE_URL } from '$lib/constants';
|
2025-07-01 10:10:37 +02:00
|
|
|
|
2025-07-01 12:39:35 +02:00
|
|
|
import { settings } from '$lib/stores';
|
2024-02-22 18:49:34 -08:00
|
|
|
import ImagePreview from './ImagePreview.svelte';
|
2025-06-25 18:44:45 -04:00
|
|
|
import XMark from '$lib/components/icons/XMark.svelte';
|
2025-07-01 10:10:37 +02:00
|
|
|
import { getContext } from 'svelte';
|
2024-02-22 18:49:34 -08:00
|
|
|
|
|
|
|
|
export let src = '';
|
|
|
|
|
export let alt = '';
|
|
|
|
|
|
2025-07-01 12:39:35 +02:00
|
|
|
export let className = ` w-full ${($settings?.highContrastMode ?? false) ? '' : 'outline-hidden focus:outline-hidden'}`;
|
|
|
|
|
|
2024-11-09 23:57:19 -08:00
|
|
|
export let imageClassName = 'rounded-lg';
|
2024-03-08 17:38:10 -08:00
|
|
|
|
2025-05-03 23:29:19 +04:00
|
|
|
export let dismissible = false;
|
|
|
|
|
export let onDismiss = () => {};
|
|
|
|
|
|
2025-07-01 10:10:37 +02:00
|
|
|
const i18n = getContext('i18n');
|
|
|
|
|
|
2024-08-05 18:00:04 +02:00
|
|
|
let _src = '';
|
2024-03-08 17:38:10 -08:00
|
|
|
$: _src = src.startsWith('/') ? `${WEBUI_BASE_URL}${src}` : src;
|
|
|
|
|
|
2024-02-22 18:49:34 -08:00
|
|
|
let showImagePreview = false;
|
|
|
|
|
</script>
|
|
|
|
|
|
2024-08-05 01:03:22 +02:00
|
|
|
<ImagePreview bind:show={showImagePreview} src={_src} {alt} />
|
2025-05-03 23:29:19 +04:00
|
|
|
|
2025-08-14 04:19:54 +04:00
|
|
|
<div class=" relative group w-fit flex items-center">
|
2025-05-03 23:29:19 +04:00
|
|
|
<button
|
|
|
|
|
class={className}
|
|
|
|
|
on:click={() => {
|
|
|
|
|
showImagePreview = true;
|
|
|
|
|
}}
|
2025-07-01 10:10:37 +02:00
|
|
|
aria-label={$i18n.t('Show image preview')}
|
2025-05-03 23:29:19 +04:00
|
|
|
type="button"
|
|
|
|
|
>
|
|
|
|
|
<img src={_src} {alt} class={imageClassName} draggable="false" data-cy="image" />
|
|
|
|
|
</button>
|
|
|
|
|
|
|
|
|
|
{#if dismissible}
|
|
|
|
|
<div class=" absolute -top-1 -right-1">
|
|
|
|
|
<button
|
2025-07-01 10:10:37 +02:00
|
|
|
aria-label={$i18n.t('Remove image')}
|
2025-05-03 23:29:19 +04:00
|
|
|
class=" bg-white text-black border border-white rounded-full group-hover:visible invisible transition"
|
|
|
|
|
type="button"
|
|
|
|
|
on:click={() => {
|
|
|
|
|
onDismiss();
|
|
|
|
|
}}
|
|
|
|
|
>
|
2025-06-27 15:44:26 +04:00
|
|
|
<XMark className={'size-4'} />
|
2025-05-03 23:29:19 +04:00
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
{/if}
|
|
|
|
|
</div>
|