open-webui/src/lib/components/common/Image.svelte

56 lines
1.4 KiB
Svelte
Raw Normal View History

2024-02-23 02:49:34 +00:00
<script lang="ts">
2024-03-09 01:38:10 +00:00
import { WEBUI_BASE_URL } from '$lib/constants';
2024-02-23 02:49:34 +00:00
import ImagePreview from './ImagePreview.svelte';
export let src = '';
export let alt = '';
2025-02-16 03:27:25 +00:00
export let className = ' w-full outline-hidden focus:outline-hidden';
2024-11-10 07:57:19 +00:00
export let imageClassName = 'rounded-lg';
2024-03-09 01:38:10 +00:00
2025-05-03 19:29:19 +00:00
export let dismissible = false;
export let onDismiss = () => {};
2024-08-05 16:00:04 +00:00
let _src = '';
2024-03-09 01:38:10 +00:00
$: _src = src.startsWith('/') ? `${WEBUI_BASE_URL}${src}` : src;
2024-02-23 02:49:34 +00:00
let showImagePreview = false;
</script>
2024-08-04 23:03:22 +00:00
<ImagePreview bind:show={showImagePreview} src={_src} {alt} />
2025-05-03 19:29:19 +00:00
<div class=" relative group w-fit">
<button
class={className}
on:click={() => {
showImagePreview = true;
}}
type="button"
>
<img src={_src} {alt} class={imageClassName} draggable="false" data-cy="image" />
</button>
{#if dismissible}
<div class=" absolute -top-1 -right-1">
<button
class=" bg-white text-black border border-white rounded-full group-hover:visible invisible transition"
type="button"
on:click={() => {
onDismiss();
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
class="size-4"
>
<path
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
/>
</svg>
</button>
</div>
{/if}
</div>