Files
Genarrative/src/components/image-editor/ImageCanvasMetadataModalView.tsx
T
kdletters d8b935317d 拆分编辑器前端画布视图
抽出素材栏、生成器、舞台工具栏和画布世界视图

补充各拆分视图的聚焦测试

更新 TRACKING.md 记录第三十四阶段验证
2026-06-17 17:48:12 +08:00

84 lines
3.0 KiB
TypeScript

import { UnifiedModal } from '../common/UnifiedModal';
import { formatLayerImageType } from './ImageCanvasGenerationModel';
import type { CanvasLayer } from './ImageCanvasEditorTypes';
export type ImageCanvasMetadataModalViewProps = {
layer: CanvasLayer | null;
onClose: () => void;
};
export function ImageCanvasMetadataModalView({
layer,
onClose,
}: ImageCanvasMetadataModalViewProps) {
return (
<UnifiedModal
open={Boolean(layer)}
title={layer ? `${layer.title}图片信息` : '图片信息'}
size="sm"
closeLabel="关闭图片信息"
onClose={onClose}
panelClassName="image-canvas-editor__metadata-dialog"
bodyClassName="image-canvas-editor__metadata-body"
>
{layer ? (
<dl className="image-canvas-editor__metadata-grid">
<dt>图片类型</dt>
<dd>{formatLayerImageType(layer)}</dd>
<dt>生成输入</dt>
<dd className="image-canvas-editor__metadata-inputs">
{layer.generationInputs?.fields.length ||
layer.generationInputs?.references.length ? (
<>
{layer.generationInputs.fields.map((field) => (
<div
key={`${field.title}-${field.value}`}
className="image-canvas-editor__metadata-input-field"
>
<span className="image-canvas-editor__metadata-input-title">
{field.title}
</span>
<span>{field.value}</span>
</div>
))}
{layer.generationInputs.references.length ? (
<div className="image-canvas-editor__metadata-reference-list">
{layer.generationInputs.references.map((reference) => (
<div
key={`${reference.title}-${reference.label}-${reference.src}`}
className="image-canvas-editor__metadata-reference-card"
>
<img src={reference.src} alt="" aria-hidden="true" />
<span className="image-canvas-editor__metadata-reference-copy">
<span className="image-canvas-editor__metadata-input-title">
{reference.title}
</span>
<span>{reference.label}</span>
</span>
</div>
))}
</div>
) : null}
</>
) : (
'-'
)}
</dd>
<dt>Model</dt>
<dd>{layer.model ?? '-'}</dd>
<dt>Resolution</dt>
<dd>
{layer.originalWidth} x {layer.originalHeight} px
</dd>
<dt>Provider</dt>
<dd>{layer.provider ?? '-'}</dd>
<dt>Task</dt>
<dd>{layer.taskId ?? '-'}</dd>
<dt>Object</dt>
<dd>{layer.objectKey ?? layer.assetObjectId ?? '-'}</dd>
</dl>
) : null}
</UnifiedModal>
);
}