browser / src /components /ChromeAddressBar.tsx
no-name-here's picture
Upload 86 files
9b63060 verified
import React, { useState } from 'react';
import { ArrowLeft, ArrowRight, RotateCcw, Home, Shield, Star, MoreVertical } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
interface ChromeAddressBarProps {
currentUrl?: string;
onNavigate: (url: string) => void;
onBack: () => void;
onForward: () => void;
onRefresh: () => void;
onHome: () => void;
onBookmark: () => void;
onSummarize?: () => void;
onShowScriptPanel?: () => void;
canGoBack: boolean;
canGoForward: boolean;
}
const ChromeAddressBar = ({
currentUrl = '',
onNavigate,
onBack,
onForward,
onRefresh,
onHome,
onBookmark,
onSummarize,
onShowScriptPanel,
canGoBack,
canGoForward
}: ChromeAddressBarProps) => {
const [addressInput, setAddressInput] = useState(currentUrl);
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
if (addressInput.trim()) {
onNavigate(addressInput.trim());
}
};
return (
<div className="bg-white border-b border-gray-200 px-3 py-2 flex items-center gap-2">
{/* Navigation buttons */}
<div className="flex items-center gap-1">
<Button
variant="ghost"
size="sm"
onClick={onBack}
disabled={!canGoBack}
className="w-8 h-8 p-0 rounded-full hover:bg-gray-100"
>
<ArrowLeft className="w-4 h-4" />
</Button>
<Button
variant="ghost"
size="sm"
onClick={onForward}
disabled={!canGoForward}
className="w-8 h-8 p-0 rounded-full hover:bg-gray-100"
>
<ArrowRight className="w-4 h-4" />
</Button>
<Button
variant="ghost"
size="sm"
onClick={onRefresh}
className="w-8 h-8 p-0 rounded-full hover:bg-gray-100"
>
<RotateCcw className="w-4 h-4" />
</Button>
<Button
variant="ghost"
size="sm"
onClick={onHome}
className="w-8 h-8 p-0 rounded-full hover:bg-gray-100"
>
<Home className="w-4 h-4" />
</Button>
</div>
{/* Address bar */}
<form onSubmit={handleSubmit} className="flex-1 max-w-2xl mx-auto">
<div className="relative flex items-center">
<Shield className="absolute left-3 w-4 h-4 text-green-600" />
<Input
value={addressInput}
onChange={(e) => setAddressInput(e.target.value)}
placeholder="Search Google or type a URL"
className="pl-10 pr-10 rounded-full border-2 border-gray-200 focus:border-blue-400 h-10"
/>
<Button
type="button"
variant="ghost"
size="sm"
onClick={onBookmark}
className="absolute right-2 w-6 h-6 p-0 rounded-full hover:bg-gray-100"
>
<Star className="w-4 h-4" />
</Button>
</div>
</form>
{/* Extensions area */}
<div className="flex items-center gap-2">
{/* Extensions menu */}
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
size="sm"
className="w-8 h-8 p-0 rounded-full hover:bg-gray-100"
>
<MoreVertical className="w-4 h-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-48">
<DropdownMenuItem onClick={onSummarize} className="cursor-pointer">
<span className="mr-2">🧠</span>
Summarize Page
</DropdownMenuItem>
<DropdownMenuItem onClick={onShowScriptPanel} className="cursor-pointer">
<span className="mr-2">💡</span>
User Script
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
{/* Profile/Menu area */}
<div className="w-8 h-8 bg-blue-500 rounded-full flex items-center justify-center text-white text-sm font-medium">
U
</div>
</div>
</div>
);
};
export default ChromeAddressBar;