"use client"; import { useState } from "react"; import ImageLightbox from "@/components/markdown/ImageLightbox"; import { variantURL, widthSrcSet } from "@/lib/responsiveImage"; /** * 静态图片图箱入口(区别于 markdown 管线的 MdImage): * 封面等非 markdown 图片点击进全屏图箱(单图,无多图切换)。 * 在 Link 内使用时 preventDefault + stopPropagation 阻断外层导航—— * 点图片本身是看图,点卡片其余区域仍走原链接。 * * 可变宽度位可传 variantWidths(白名单档位)+ sizes:页面内显示变体, * 图箱始终打开 data-full 指向的原图。 */ export default function LightboxImage({ src, alt, className, variantWidths, sizes, }: { src: string; alt: string; className?: string; /** 传入白名单档位则输出宽度 srcset;不传则直连原图 */ variantWidths?: readonly number[]; /** 配合 srcset 的 sizes 提示 */ sizes?: string; }) { const [open, setOpen] = useState(false); const hasVariants = !!variantWidths && variantWidths.length > 0; return ( <> {/* eslint-disable-next-line @next/next/no-img-element */} {alt} { e.preventDefault(); e.stopPropagation(); setOpen(true); }} /> {open && ( setOpen(false)} onIndexChange={() => {}} /> )} ); }