import { UnifiedModal } from '../common/UnifiedModal'; import type { CanvasLayer } from './ImageCanvasEditorTypes'; import { formatTaskIdForDisplay } from './ImageCanvasExportModel'; import { formatLayerImageType, getEditorImageModelDisplayName, } from './ImageCanvasGenerationModel'; import { formatCanvasDurationMetric } from './ImageCanvasMediaModel'; export type ImageCanvasMetadataModalViewProps = { layer: CanvasLayer | null; onClose: () => void; }; function formatReferenceType(refType: 'project-resource' | 'asset') { return refType === 'project-resource' ? '项目资源' : '素材'; } function formatLayerDurationForDisplay(layer: CanvasLayer) { return formatCanvasDurationMetric(layer.durationSeconds).replace( /^时长\s*/u, '', ); } export function ImageCanvasMetadataModalView({ layer, onClose, }: ImageCanvasMetadataModalViewProps) { const mediaLabel = layer?.mediaType === 'audio' ? '音频' : layer?.mediaType === 'video' ? '视频' : layer?.mediaType === 'image-sequence' ? '序列帧' : '图片'; return ( {layer ? (
{mediaLabel}类型
{formatLayerImageType(layer)}
生成输入
{layer.generationInputs?.fields.length || layer.generationInputs?.references.length ? ( <> {layer.generationInputs.fields.map((field) => (
{field.title} {field.value}
))} {layer.generationInputs.references.length ? (
{layer.generationInputs.references.map((reference) => (
{reference.title} {reference.label} {formatReferenceType(reference.refType)} ·{' '} {reference.refId}
))}
) : null} ) : ( '-' )}
Model
{layer.model ? getEditorImageModelDisplayName(layer.model) : '-'}
{layer.mediaType === 'audio' ? ( <>
时长
{formatLayerDurationForDisplay(layer)}
) : ( <>
Resolution
{layer.originalWidth} x {layer.originalHeight} px
)}
Task
{formatTaskIdForDisplay(layer.taskId)}
) : null}
); }