ManimCat / frontend /src /studio /commands /ui /image-input /StudioImageInputCommandUI.tsx
Bin29's picture
Sync from main: e764154 feat(plot-skill): add math-exam-diagram SKILL.md for exam-style math figures
abcf568
import { useRef } from 'react'
import { CanvasWorkspaceModal } from '../../../../components/canvas/CanvasWorkspaceModal'
import { ImageInputModeModal } from '../../../../components/ImageInputModeModal'
import type { ReferenceImage } from '../../../../types/api'
interface StudioImageInputCommandUIProps {
isImageModeOpen: boolean
isCanvasOpen: boolean
onCloseImageMode: () => void
onCloseCanvas: () => void
onImportFiles: (files: FileList | File[]) => Promise<void> | void
onStartImport: () => void
onStartDraw: () => void
onCanvasComplete: (images: ReferenceImage[]) => void
}
export function StudioImageInputCommandUI({
isImageModeOpen,
isCanvasOpen,
onCloseImageMode,
onCloseCanvas,
onImportFiles,
onStartImport,
onStartDraw,
onCanvasComplete,
}: StudioImageInputCommandUIProps) {
const fileInputRef = useRef<HTMLInputElement>(null)
return (
<>
<input
ref={fileInputRef}
type="file"
accept="image/*"
multiple
className="hidden"
onChange={(event) => {
const files = event.target.files
if (files && files.length > 0) {
void onImportFiles(files)
}
event.currentTarget.value = ''
}}
/>
<ImageInputModeModal
isOpen={isImageModeOpen}
onClose={onCloseImageMode}
onImport={() => {
onStartImport()
fileInputRef.current?.click()
}}
onDraw={onStartDraw}
/>
<CanvasWorkspaceModal
isOpen={isCanvasOpen}
onClose={onCloseCanvas}
onComplete={onCanvasComplete}
/>
</>
)
}