import { Check, ChevronLeft, Download, Pencil, X } from 'lucide-react'; import { PlatformStatusMessage } from '../common/PlatformStatusMessage'; import { PlatformTextField } from '../common/PlatformTextField'; import { EditorIconButton } from './ImageCanvasEditorPrimitives'; import type { CanvasLayer } from './ImageCanvasEditorTypes'; import type { AssetExportStatus } from './useImageCanvasAssetExportWorkflow'; export type ImageCanvasTopbarViewProps = { projectId: string | null; projectTitle: string; projectRenameValue: string; isRenamingProject: boolean; isProjectRenameSaving: boolean; projectRenameError: string | null; layers: CanvasLayer[]; assetExportStatus: AssetExportStatus | null; isExportingAssets: boolean; setProjectRenameValue: (value: string) => void; startProjectRename: () => void; cancelProjectRename: () => void; submitProjectRename: (projectId: string | null) => void; resetProjectRenameError: () => void; exportCanvasAssets: () => void | Promise; }; export function ImageCanvasTopbarView({ projectId, projectTitle, projectRenameValue, isRenamingProject, isProjectRenameSaving, projectRenameError, layers, assetExportStatus, isExportingAssets, setProjectRenameValue, startProjectRename, cancelProjectRename, submitProjectRename, resetProjectRenameError, exportCanvasAssets, }: ImageCanvasTopbarViewProps) { const hasExportableLayer = layers.some( (layer) => layer.src.trim().length > 0, ); return (
{isRenamingProject ? (
{ event.preventDefault(); submitProjectRename(projectId); }} > { setProjectRenameValue(event.target.value); resetProjectRenameError(); }} onKeyDown={(event) => { if (event.key === 'Escape') { event.preventDefault(); cancelProjectRename(); } }} /> {projectRenameError ? ( {projectRenameError} ) : null} ) : (
)} 画布
void exportCanvasAssets()} /> {assetExportStatus ? ( {assetExportStatus.message} ) : null}
); }