"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 ? (
) }