fix: hide per-image toolbars during multi-select
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-02-19 21:23:11 +08:00
parent 171b4dce60
commit 1a9ecac889

View File

@ -229,6 +229,7 @@ interface ImageNodeProps {
export function ImageNode({ node, isSelected }: ImageNodeProps) {
const data = node.data as ImageNodeData;
const selectedNodeIds = useCanvasStore((state) => state.selectedNodeIds);
const [isHovered, setIsHovered] = useState(false);
const [isProcessing, setIsProcessing] = useState(false);
const [angleDialogOpen, setAngleDialogOpen] = useState(false);
@ -390,6 +391,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) {
setPickerMode(false);
}, [setPickerMode]);
const displayTitle = getImageNodeTitle(data, node.id);
const isMultiSelected = isSelected && selectedNodeIds.length > 1;
const animateAddToChat = useCallback(async () => {
if (!containerRef.current || !data.src || typeof window === "undefined") {
@ -1427,7 +1429,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) {
return (
<>
{/* 选中时在图片上方显示标题 */}
{isSelected && data.src && (
{isSelected && !isMultiSelected && data.src && (
<div className="absolute -top-7 left-0 right-0 flex items-center text-xs text-muted-foreground px-1 z-10">
<div className="flex items-center gap-1 min-w-0">
<ImagePlus className="h-3 w-3" />
@ -1772,7 +1774,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) {
</Dialog>
{/* 工具栏使用 Portal 渲染到 body,避免被裁剪 */}
{isSelected && data.src && !isEditingTitle && typeof document !== 'undefined' && createPortal(
{isSelected && !isMultiSelected && data.src && !isEditingTitle && typeof document !== 'undefined' && createPortal(
<TooltipProvider delayDuration={200}>
<div
className="fixed flex items-center gap-0.5 rounded-full shadow-xl px-2 py-1 z-[9999] bg-white/95 border border-gray-200 text-gray-800 dark:bg-gray-900/95 dark:border-gray-700 dark:text-gray-100"