ManimCat / frontend /src /studio /commands /use-studio-command-runner.ts
Bin29's picture
Sync from main: e764154 feat(plot-skill): add math-exam-diagram SKILL.md for exam-style math figures
abcf568
import { useCallback } from 'react'
import type { StudioCommandContext } from './types'
import { resolveStudioCommand } from './resolve-studio-command'
interface UseStudioCommandRunnerInput extends StudioCommandContext {
onRun: (inputText: string) => Promise<void>
}
export function useStudioCommandRunner(input: UseStudioCommandRunnerInput) {
return useCallback(async (inputText: string) => {
const resolved = resolveStudioCommand(inputText)
if (!resolved || resolved.definition.scope !== 'global') {
await input.onRun(inputText)
return { kind: 'run' as const }
}
await resolved.definition.execute(resolved.command as never, {
...input,
runCommandInput: input.onRun,
})
return { kind: 'control' as const, command: resolved.command }
}, [input])
}