--- import path from "node:path"; interface Props { id?: string; src: string; class?: string; alt?: string; position?: string; basePath?: string; } import { Image } from "astro:assets"; import { url } from "../../utils/url-utils"; const { id, src, alt, position = "center", 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 // biome-ignore lint/suspicious/noImplicitAnyLet: let img; if (isLocal) { const files = import.meta.glob("../../**", { import: "default", }); let normalizedPath = path .normalize(path.join("../../", basePath, src)) .replace(/\\/g, "/"); const file = files[normalizedPath]; if (!file) { console.error( `\n[ERROR] Image file not found: ${normalizedPath.replace("../../", "src/")}`, ); } img = await file(); } const imageClass = "w-full h-full object-cover"; const imageStyle = `object-position: ${position}`; ---
{isLocal && img && {alt} {!isLocal && {alt}