mirror of
https://github.com/saicaca/fuwari.git
synced 2025-03-13 23:24:42 +08:00
35 lines
1.2 KiB
Plaintext
35 lines
1.2 KiB
Plaintext
---
|
|
import path from "path";
|
|
interface Props {
|
|
id?: string
|
|
src: string;
|
|
class?: string;
|
|
alt?: string
|
|
basePath?: string
|
|
}
|
|
import { Image } from 'astro:assets';
|
|
import {url} from "../../utils/url-utils";
|
|
|
|
const {id, src, alt, basePath = '/'} = Astro.props;
|
|
const className = Astro.props.class;
|
|
|
|
const isLocal = !(src.startsWith('/') || src.startsWith('http') || src.startsWith('https') || src.startsWith('data:'));
|
|
const isPublic = src.startsWith('/');
|
|
|
|
// TODO temporary workaround for images dynamic import
|
|
// https://github.com/withastro/astro/issues/3373
|
|
let img;
|
|
if (isLocal) {
|
|
const files = import.meta.glob<ImageMetadata>("../../**", { import: 'default' });
|
|
let normalizedPath = path.normalize(path.join("../../", basePath, src)).replace(/\\/g, "/");
|
|
img = await (files[normalizedPath])();
|
|
}
|
|
|
|
---
|
|
<div class:list={[className, 'overflow-hidden relative']}>
|
|
<div class="transition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none"></div>
|
|
{isLocal && <Image src={img} alt={alt || ""} class="w-full h-full object-center object-cover" />}
|
|
{!isLocal && <img src={isPublic ? url(src) : src} alt={alt || ""} class="w-full h-full object-center object-cover" />}
|
|
</div>
|
|
|