"use client" import { useRef, useState } from "react" import { Link2, Loader2, Upload } from "lucide-react" interface Props { loading?: boolean onSubmitUrl: (url: string) => void onUploadFile: (file: File) => void } export function UrlInput({ loading, onSubmitUrl, onUploadFile }: Props) { const [url, setUrl] = useState("") const [dragOver, setDragOver] = useState(false) const fileRef = useRef(null) const pickFile = () => fileRef.current?.click() const handleFiles = (files: FileList | null) => { if (!files || files.length === 0) return const f = files[0] if (!f.type.startsWith("video/") && !/\.(mp4|mov|webm|mkv|m4v)$/i.test(f.name)) { // sonner is in page; keep simple here console.warn("not a video file:", f.name) return } onUploadFile(f) } return (
{ e.preventDefault() const trimmed = url.trim() if (trimmed) onSubmitUrl(trimmed) }} onDragOver={(e) => { e.preventDefault() if (!loading) setDragOver(true) }} onDragLeave={() => setDragOver(false)} onDrop={(e) => { e.preventDefault() setDragOver(false) if (loading) return handleFiles(e.dataTransfer.files) }} className="relative w-full" >
setUrl(e.target.value)} placeholder={dragOver ? "松开以上传视频" : "粘贴 TikTok 链接,或拖入 / 上传本地视频"} className="w-full bg-transparent text-white placeholder:text-white/30 outline-none text-[15px]" disabled={loading} /> {/* 上传按钮 */} {/* 提交按钮 */} handleFiles(e.target.files)} />
支持:TikTok 链接 · 拖入视频文件 · 点击上传 · 格式 mp4 / mov / webm / mkv / m4v
) }