"use client"
import { X } from "lucide-react"
/**
* 视觉类节点统一大预览:
* - 浮在缩略图正上方居中,跟随 ReactFlow viewport 缩放
* - 默认 480px 宽(原比例高),视频自动播放(muted loop),图片静态
* - 不 pinned 时:pointer-events-none,依赖 group-hover 显示/隐藏
* - pinned=true:强制 visible,常驻不消失,pointer-events 开启可点 × 关闭
* - 用法:
...
*/
interface Props {
imgSrc?: string
videoSrc?: string
poster?: string
aspect: string
label?: string
caption?: string
borderClass?: string
width?: number
pinned?: boolean
onClose?: () => void
}
export function HoverPreview({
imgSrc, videoSrc, poster, aspect,
label, caption,
borderClass = "border-violet-300/55",
width = 480,
pinned = false,
onClose,
}: Props) {
const visibilityCls = pinned
? "opacity-100 scale-100 pointer-events-auto"
: "pointer-events-none opacity-0 group-hover:opacity-100 scale-95 group-hover:scale-100"
return (
{videoSrc ? (
) : imgSrc ? (

) : (
)}
{(label || caption) && (
{label && {label}}
{caption && {caption}}
)}
{pinned && onClose && (
)}
)
}