diff --git a/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx b/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx index 1b9bf1b..a46ed92 100644 --- a/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx +++ b/web/src/app/(user)/canvas/[id]/canvas-client-page.tsx @@ -2339,6 +2339,7 @@ function InfiniteCanvasPage() { onSetBatchPrimary={setBatchPrimary} onRetry={(node) => void handleRetryNode(node)} onGenerateImage={generateImageFromTextNode} + onViewImage={(node) => setPreviewNodeId(node.id)} onContextMenu={(event, id) => { event.preventDefault(); event.stopPropagation(); diff --git a/web/src/app/(user)/canvas/components/canvas-node.tsx b/web/src/app/(user)/canvas/components/canvas-node.tsx index f2cb900..4fda12e 100644 --- a/web/src/app/(user)/canvas/components/canvas-node.tsx +++ b/web/src/app/(user)/canvas/components/canvas-node.tsx @@ -45,6 +45,7 @@ type CanvasNodeProps = { onSetBatchPrimary?: (node: CanvasNodeData) => void; onRetry?: (node: CanvasNodeData) => void; onGenerateImage?: (node: CanvasNodeData) => void; + onViewImage?: (node: CanvasNodeData) => void; onContextMenu: (event: React.MouseEvent, nodeId: string) => void; }; @@ -99,6 +100,7 @@ export const CanvasNode = React.memo(function CanvasNode({ onSetBatchPrimary, onRetry, onGenerateImage, + onViewImage, onContextMenu, }: CanvasNodeProps) { const theme = canvasThemes[useThemeStore((state) => state.theme)]; @@ -269,6 +271,11 @@ export const CanvasNode = React.memo(function CanvasNode({ onToggleBatch?.(data.id); return; } + if (data.type === CanvasNodeType.Image && hasImageContent) { + event.stopPropagation(); + onViewImage?.(data); + return; + } if (data.type !== CanvasNodeType.Text) return; event.stopPropagation(); setIsEditingContent(true);