crystalai's picture
Upload 42 files
cf165dd verified
import React, { useState } from 'react';
import { GuardianCommandType } from '../types';
interface GuardianConsoleProps {
onAction: (command: GuardianCommandType, targetNode: string) => void;
disabled: boolean;
}
const GuardianConsole: React.FC<GuardianConsoleProps> = ({ onAction, disabled }) => {
const [command, setCommand] = useState<GuardianCommandType>(GuardianCommandType.DEPLOY_SWARM);
const [targetNode, setTargetNode] = useState('');
const handleSend = () => {
if (!disabled && targetNode.trim()) {
onAction(command, targetNode.trim());
setTargetNode('');
}
};
return (
<div className="bg-black bg-opacity-30 p-4 border border-cyan-700/50 rounded-lg text-sm mt-4 h-full">
<h2 className="text-lg font-bold mb-4 text-cyan-400 tracking-widest">GUARDIAN CONSOLE</h2>
<div className="space-y-3">
<div>
<label htmlFor="guardian-command" className="block text-xs text-gray-400 mb-1">Directive:</label>
<select
id="guardian-command"
value={command}
onChange={(e) => setCommand(e.target.value as GuardianCommandType)}
disabled={disabled}
className="w-full bg-gray-900 border border-cyan-700/50 rounded-md px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-cyan-500"
>
{Object.values(GuardianCommandType).map((cmd) => (
<option key={cmd} value={cmd}>{cmd}</option>
))}
</select>
</div>
<div>
<label htmlFor="target-node" className="block text-xs text-gray-400 mb-1">Target Node ID:</label>
<input
id="target-node"
type="text"
value={targetNode}
onChange={(e) => setTargetNode(e.target.value)}
placeholder="e.g., Node-77B"
disabled={disabled}
className="w-full bg-gray-900 border border-cyan-700/50 rounded-md px-3 py-2 text-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-cyan-500"
/>
</div>
<button
onClick={handleSend}
disabled={disabled || !targetNode.trim()}
className="w-full px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-cyan-600 hover:bg-cyan-700 disabled:bg-gray-700 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-cyan-500 ring-offset-gray-900 transition"
>
Execute Directive
</button>
</div>
</div>
);
};
export default GuardianConsole;