ein-pfeil-am-rechten-fleck.de/src/lib/image.svelte

39 lines
956 B
Svelte
Raw Normal View History

2023-10-31 07:35:17 +01:00
<script lang="ts" context="module">
export type ImageMetadata = {
format: "webp" | "png" | "avif";
src: string;
}[];
2023-11-04 02:01:36 +01:00
export const getPNGSrc = (img: ImageMetadata) => {
return img.find(({ format }) => format === "png")?.src;
};
2023-10-31 07:35:17 +01:00
const mimeType: Record<string, string> = {
webp: "image/webp",
png: "image/png",
avif: "image/avif",
};
</script>
<script lang="ts">
export let className: string = "";
export let alt: string;
export let img: ImageMetadata;
export let width: number;
export let height: number;
export let loading: "lazy" | undefined = undefined;
const sources = img.map(({ format, src }) => ({
format: mimeType[format],
srcset: src,
}));
2023-11-04 02:01:36 +01:00
const pngSrc = getPNGSrc(img);
2023-10-31 07:35:17 +01:00
</script>
<picture class={className}>
{#each sources as { format, srcset }}
<source type={format} {srcset} />
{/each}
<img src={pngSrc} {width} {height} {alt} class={className} {loading} />
</picture>