import { type FormEvent } from "react"; import { BookOpen, Check, FileCode, Folder, Plus } from "lucide-react"; import type { ScriptType, Visibility } from "../../services/api"; import { AppFormDialog, dialogPrimaryButtonClass, dialogSecondaryButtonClass, } from "~/components/common/AppFormDialog"; import { Button } from "~/components/ui/button"; import { destinationChipClass, formFieldClass, formHintClass, formInputClass, modalFormClass, } from "./modalUi"; type NewScriptForm = { name: string; scriptType: ScriptType; visibility: Visibility; parentPath: string; }; type CreateScriptModalProps = { open: boolean; creating: boolean; form: NewScriptForm; scripts: Array<{ script_type: ScriptType; script_name: string; relative_path?: string; }>; onFormChange: (form: NewScriptForm) => void; onSubmit: (event: FormEvent) => void; onClose: () => void; }; export function CreateScriptModal({ open, creating, form, scripts: _scripts, onFormChange, onSubmit, onClose, }: CreateScriptModalProps) { return ( { if (!nextOpen) onClose(); }} eyebrow="工作副本" title="新建构建脚本" size="panel" >
保存到:{form.parentPath || "个人根目录"}
脚本类型 {( [ { type: "notebook" as const, title: "Jupyter Notebook", desc: "交互式数据探索与模型实验", Icon: BookOpen, iconTone: "bg-[#fff0ed] text-[#dd5a4c]", size: 22, }, { type: "python" as const, title: "Python 脚本", desc: "批处理、训练和模型调用任务", Icon: FileCode, iconTone: "bg-[#e9f3ff] text-[#2a75c5]", size: 23, }, ] as const ).map((item) => { const selected = form.scriptType === item.type; const TypeIcon = item.Icon; return ( ); })}
); }