import React from 'react'; import { cn } from '../../lib/utils'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '../ui/tooltip'; import { Switch } from '../ui/switch'; import { FiCode, FiZap, FiLock } from 'react-icons/fi'; import Typography from '../ui/Typography'; import { useConfigStore } from '../../stores/configStore'; import { useLegalStore } from '../../stores/legalStore'; export type OperationalMode = 'autonomous' | 'provideBytes' | 'returnBytes'; interface ModeToggleProps { mode: OperationalMode; onChange: (mode: OperationalMode) => void; disabled?: boolean; className?: string; } /** * ModeToggle component with configuration-based autonomous mode support * @param props - Component props including current mode, change handler, and disabled state * @returns React component showing current mode with toggle capability */ export const ModeToggle: React.FC = ({ mode, onChange, disabled = false, className, }) => { const { config } = useConfigStore(); const { hasAcceptedAll } = useLegalStore(); const isAutonomousModeEnabled = config?.autonomousMode && hasAcceptedAll(); const isAutonomousMode = mode === 'autonomous'; const handleToggle = () => { if (disabled || !isAutonomousModeEnabled) return; onChange(isAutonomousMode ? 'provideBytes' : 'autonomous'); }; /** * Mode display text component */ const ModeDisplayText: React.FC<{ isAutonomousMode: boolean; isAutonomousModeEnabled: boolean; }> = ({ isAutonomousMode, isAutonomousModeEnabled }) => { if (isAutonomousMode && isAutonomousModeEnabled) { return <>Autonomous Mode; } return <>Manual Mode; }; /** * Mode icon component */ const ModeIcon: React.FC<{ isAutonomousMode: boolean; isAutonomousModeEnabled: boolean; }> = ({ isAutonomousMode, isAutonomousModeEnabled }) => { if (isAutonomousMode && isAutonomousModeEnabled) { return ; } return ; }; /** * Tooltip content component */ const ModeTooltipContent: React.FC<{ hasAcceptedAll: boolean; config: any; isAutonomousMode: boolean; }> = ({ hasAcceptedAll, config, isAutonomousMode }) => { if (!hasAcceptedAll) { return (
Legal Agreements Required Please accept Terms of Service and Privacy Policy to enable autonomous mode
); } if (!config?.autonomousMode) { return (
Currently in Manual Mode - AI returns transaction bytes for manual signing
); } if (isAutonomousMode) { return (
Autonomous Mode Active AI can automatically sign and submit transactions
Click to switch to Manual Mode
); } return (
Manual Mode Active AI returns transaction bytes for manual signing
Click to switch to Autonomous Mode
); }; return (
{isAutonomousModeEnabled ? ( ) : (
{!hasAcceptedAll() && ( )}
)} {!isAutonomousModeEnabled && ( Autonomous (soon) )}
); }; export default ModeToggle;