dnscms, web: try supporting svgs

This commit is contained in:
2026-05-19 06:15:36 +02:00
parent 509a50c321
commit 10c8ce194c
2 changed files with 26 additions and 4 deletions
+25 -4
View File
@@ -1,4 +1,4 @@
import NextImage, { ImageProps as NextImageProps } from "next/image";
import NextImage, { type ImageProps as NextImageProps } from "next/image";
import styles from "./image.module.scss";
type ImageProps = NextImageProps & {
@@ -7,14 +7,35 @@ type ImageProps = NextImageProps & {
imageFormat?: string | null; // "original" | "bleed" | "fullWidth"
};
function isSvgSrc(src: NextImageProps["src"]): src is string {
return typeof src === "string" && /\.svg(\?|#|$)/i.test(src);
}
function MaybeNextImage(props: NextImageProps) {
if (isSvgSrc(props.src)) {
const { src, alt, width, height, className, style } = props;
return (
<img // eslint-disable-line @next/next/no-img-element
src={src}
alt={alt}
width={width}
height={height}
className={className}
style={style}
/>
);
}
return <NextImage {...props} />;
}
export function ImageFigure(props: ImageProps) {
const { attribution, caption, imageFormat, ...nextImageProps } = props;
const { attribution, caption, imageFormat, ...imageProps } = props;
return (
<figure
className={`${styles.image} ${imageFormat ? styles[imageFormat] : ""}`}
>
<div className={styles.imageWrapper}>
<NextImage {...nextImageProps} />
<MaybeNextImage {...imageProps} />
{attribution && <div className={styles.attribution}>{attribution}</div>}
</div>
{caption && <figcaption>{caption}</figcaption>}
@@ -23,5 +44,5 @@ export function ImageFigure(props: ImageProps) {
}
export function Image(props: NextImageProps) {
return <NextImage {...props} />;
return <MaybeNextImage {...props} />;
}