Gemini-OS / Window.tsx
khulnasoft's picture
Create Window.tsx
1bc2a4b verified
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
/* tslint:disable */
import React from 'react';
interface WindowProps {
title: string;
children: React.ReactNode;
onClose: () => void; // This prop remains, though its direct trigger (the X button) is removed.
isAppOpen: boolean;
appId?: string | null;
onToggleParameters: () => void;
onExitToDesktop: () => void;
isParametersPanelOpen?: boolean;
}
const MenuItem: React.FC<{
children: React.ReactNode;
onClick?: () => void;
className?: string;
}> = ({children, onClick, className}) => (
<span
className={`menu-item cursor-pointer hover:text-blue-600 ${className}`}
onClick={onClick}
onKeyDown={(e) => {
if (e.key === 'Enter' || e.key === ' ') onClick?.();
}}
tabIndex={0}
role="button">
{children}
</span>
);
export const Window: React.FC<WindowProps> = ({
title,
children,
onClose,
isAppOpen,
onToggleParameters,
onExitToDesktop,
isParametersPanelOpen,
}) => {
return (
<div className="w-[800px] h-[600px] bg-white border border-gray-300 rounded-xl shadow-2xl flex flex-col relative overflow-hidden font-sans backdrop-blur-sm bg-white/80">
{/* Title Bar */}
<div className="bg-gray-800/90 text-white py-2 px-4 font-semibold text-base flex justify-between items-center select-none cursor-default rounded-t-xl flex-shrink-0">
<span className="title-bar-text">{title}</span>
{/* "X" button removed from here */}
</div>
{/* Menu Bar */}
<div className="bg-gray-100/80 py-2 px-3 border-b border-gray-200 select-none flex gap-4 flex-shrink-0 text-sm text-gray-700 items-center">
{!isParametersPanelOpen && (
<MenuItem onClick={onToggleParameters}>
<u>P</u>arameters
</MenuItem>
)}
{isAppOpen && (
<MenuItem onClick={onExitToDesktop} className="ml-auto">
Exit to Desktop
</MenuItem>
)}
</div>
{/* Content */}
<div className="flex-grow overflow-y-auto">{children}</div>
</div>
);
};