diff --git a/frontend/src/domain/design.ts b/frontend/src/domain/design.ts index 14181dc..a31676a 100644 --- a/frontend/src/domain/design.ts +++ b/frontend/src/domain/design.ts @@ -15,6 +15,7 @@ export type CanvasNode = { width: number; height: number; content: string; + renderContent?: string; tone: string; status: string; parentId?: string; diff --git a/frontend/src/infrastructure/designGateway/canvasSnapshot.ts b/frontend/src/infrastructure/designGateway/canvasSnapshot.ts index 47f77d4..8ef0620 100644 --- a/frontend/src/infrastructure/designGateway/canvasSnapshot.ts +++ b/frontend/src/infrastructure/designGateway/canvasSnapshot.ts @@ -166,6 +166,7 @@ function normalizeCanvasNode(node: Partial | null | undefined, index width: numberValue(fieldValue(source, "width", "Width"), 320), height: numberValue(fieldValue(source, "height", "Height"), 240), content: stringValue(fieldValue(source, "content", "Content")), + renderContent: stringValue(fieldValue(source, "renderContent", "RenderContent")) || undefined, tone: stringValue(fieldValue(source, "tone", "Tone")), status: stringValue(fieldValue(source, "status", "Status")) || "success", parentId: stringValue(fieldValue(source, "parentId", "ParentID")) || undefined, @@ -264,7 +265,7 @@ function base64ToBytes(value: string) { function projectCoverListFromNodes(nodes: CanvasNode[]) { return nodes .filter((node) => (node.type === "image" || node.type === "frame") && node.status === "success" && isCanvasCoverUrl(node.content)) - .map((node) => node.content.trim()) + .map((node) => node.renderContent?.trim() || node.content.trim()) .slice(0, 12); } diff --git a/frontend/src/ui/components/ArtboardPreview/index.tsx b/frontend/src/ui/components/ArtboardPreview/index.tsx index 9885fc8..3431f18 100644 --- a/frontend/src/ui/components/ArtboardPreview/index.tsx +++ b/frontend/src/ui/components/ArtboardPreview/index.tsx @@ -7,7 +7,7 @@ import { useI18n } from "@/i18n/i18n"; import { CanvasWorkOverlay } from "@/ui/components/CanvasWorkOverlay"; import { LayerMergeSkeleton } from "@/ui/components/LayerMergeSkeleton"; import { imageAdjustmentImageStyle, imageAdjustmentLayerStyle, isDefaultImageAdjustments, parseImageAdjustments } from "@/ui/lib/imageAdjustments"; -import { canvasImageUrl } from "@/ui/lib/imageDelivery"; +import { canvasImageUrl, canvasNodeRenderContent } from "@/ui/lib/imageDelivery"; import { isImageUrl } from "@/ui/pages/CanvasWorkspace/canvas/canvasNodeOps"; import { framePreviewStyle } from "@/ui/pages/CanvasWorkspace/canvas/frameStyle"; import { imageGeneratorTargetSizeFromNode, type ImageGeneratorTargetSize } from "@/ui/pages/CanvasWorkspace/canvas/imageGeneratorSizing"; @@ -20,7 +20,7 @@ export function ArtboardPreview({ node, viewportScale = 1, imageGeneratorTargetS if (node.status === "generating" && node.layerRole === "merge-layer") { return (
- {isImageUrl(node.content) && {node.title}} + {isImageUrl(node.content) && {node.title}}
); @@ -58,7 +58,7 @@ export function ArtboardPreview({ node, viewportScale = 1, imageGeneratorTargetS if (node.layerRole === "background-removed" || node.tone === "transparent-image") { return ; } - return {node.title}; + return {node.title}; } if (node.type === "image" && node.layerRole === "image-generator") { @@ -78,14 +78,14 @@ export function ArtboardPreview({ node, viewportScale = 1, imageGeneratorTargetS function TransparentImagePreview({ node }: { node: CanvasNode }) { return (
- {node.title} + {node.title}
); } function AdjustedImagePreview({ node }: { node: CanvasNode }) { const adjustments = parseImageAdjustments(node.imageAdjustments); - const source = canvasImageUrl(node.content); + const source = canvasImageUrl(canvasNodeRenderContent(node)); return (
{node.title} @@ -148,7 +148,7 @@ function ImageGeneratorPreview({ node, viewportScale, targetSize }: { node: Canv function WorkingImagePreview({ node, label, style }: { node: CanvasNode; label: string; style?: CSSProperties }) { return ( - {node.title} + {node.title} ); } diff --git a/frontend/src/ui/components/CanvasPanels/index.tsx b/frontend/src/ui/components/CanvasPanels/index.tsx index 6bfc05c..faee3ec 100644 --- a/frontend/src/ui/components/CanvasPanels/index.tsx +++ b/frontend/src/ui/components/CanvasPanels/index.tsx @@ -4,7 +4,7 @@ import { ChevronDown, ChevronRight, ChevronUp, Download, Eye, EyeOff, Frame, Gri import { Fragment, useEffect, useMemo, useRef, useState, type DragEvent as ReactDragEvent } from "react"; import type { AgentMessage, CanvasNode, CanvasViewport } from "@/domain/design"; import { useI18n } from "@/i18n/i18n"; -import { thumbnailImageUrl } from "@/ui/lib/imageDelivery"; +import { canvasNodeRenderContent, thumbnailImageUrl } from "@/ui/lib/imageDelivery"; import { isFrameContainerNode, type LayerReorderItem, type LayerReorderPlacement, type LayerReorderRequest } from "@/ui/pages/CanvasWorkspace/canvas/canvasNodeOps"; import { ShapeNodePreview } from "@/ui/pages/CanvasWorkspace/canvas/ShapeNodePreview"; import { isBooleanShapeGroupNode, isBooleanShapeOperandNode, isShapeNode } from "@/ui/pages/CanvasWorkspace/canvas/shapeNode"; @@ -95,7 +95,7 @@ export function CanvasGeneratedFilesPanel({ }} > - {node.title} + {node.title} {layerTitle(node, t)}