41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
import { useRouter } from "next/navigation";
|
|
import { Search } from "lucide-react";
|
|
|
|
export default function SearchBox() {
|
|
const [query, setQuery] = useState("");
|
|
const router = useRouter();
|
|
|
|
const handleSubmit = (e: React.FormEvent) => {
|
|
e.preventDefault();
|
|
const trimmed = query.trim();
|
|
if (!trimmed) return;
|
|
router.push(`/search?q=${encodeURIComponent(trimmed)}`);
|
|
};
|
|
|
|
return (
|
|
<form onSubmit={handleSubmit} className="relative w-full max-w-2xl mb-8">
|
|
<input
|
|
type="text"
|
|
value={query}
|
|
onChange={(e) => setQuery(e.target.value)}
|
|
placeholder="搜索视频、图文描述或语音内容..."
|
|
className="w-full bg-white/80 dark:bg-zinc-800/80 border border-zinc-300 dark:border-zinc-700 rounded-full px-5 py-3 pl-12 pr-12 text-zinc-900 dark:text-white placeholder-zinc-500 dark:placeholder-zinc-400 focus:outline-none focus:ring-2 focus:ring-blue-500/50 focus:border-blue-500 transition-all shadow-sm"
|
|
/>
|
|
<Search
|
|
size={20}
|
|
className="absolute left-4 top-1/2 -translate-y-1/2 text-zinc-500 dark:text-zinc-400"
|
|
/>
|
|
<button
|
|
type="submit"
|
|
className="absolute right-2 top-1/2 -translate-y-1/2 px-4 py-1.5 bg-blue-600 hover:bg-blue-700 text-white text-sm rounded-full font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
|
|
disabled={!query.trim()}
|
|
>
|
|
搜索
|
|
</button>
|
|
</form>
|
|
);
|
|
}
|