import React, { useRef, useEffect } from 'react'; import { Brain, Zap, Sparkles } from 'lucide-react'; interface VisualizationPanelProps { aiState: { quantumState: number[]; chaosState: number[]; activePerspectives: string[]; ethicalScore: number; processingPower: number; }; darkMode: boolean; } const VisualizationPanel: React.FC = ({ aiState, darkMode }) => { const quantumCanvasRef = useRef(null); const neuralCanvasRef = useRef(null); // Draw quantum state visualization useEffect(() => { const canvas = quantumCanvasRef.current; if (!canvas) return; const ctx = canvas.getContext('2d'); if (!ctx) return; // Clear canvas ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw quantum state as a particle system const centerX = canvas.width / 2; const centerY = canvas.height / 2; const radius = Math.min(centerX, centerY) * 0.8; // Background circle ctx.beginPath(); ctx.arc(centerX, centerY, radius, 0, Math.PI * 2); ctx.fillStyle = darkMode ? 'rgba(30, 58, 138, 0.2)' : 'rgba(219, 234, 254, 0.5)'; ctx.fill(); // Draw quantum particles aiState.quantumState.forEach((state, i) => { const angle = (i / aiState.quantumState.length) * Math.PI * 2; const distance = state * radius; const x = centerX + Math.cos(angle) * distance; const y = centerY + Math.sin(angle) * distance; // Particle const gradient = ctx.createRadialGradient(x, y, 0, x, y, 15); gradient.addColorStop(0, darkMode ? 'rgba(147, 51, 234, 0.9)' : 'rgba(147, 51, 234, 0.7)'); gradient.addColorStop(1, darkMode ? 'rgba(147, 51, 234, 0)' : 'rgba(147, 51, 234, 0)'); ctx.beginPath(); ctx.arc(x, y, 15, 0, Math.PI * 2); ctx.fillStyle = gradient; ctx.fill(); // Connection to center ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo(x, y); ctx.strokeStyle = darkMode ? 'rgba(147, 51, 234, 0.4)' : 'rgba(147, 51, 234, 0.3)'; ctx.lineWidth = 2; ctx.stroke(); }); // Draw center node ctx.beginPath(); ctx.arc(centerX, centerY, 8, 0, Math.PI * 2); ctx.fillStyle = darkMode ? '#a855f7' : '#8b5cf6'; ctx.fill(); }, [aiState.quantumState, darkMode]); // Draw neural network visualization useEffect(() => { const canvas = neuralCanvasRef.current; if (!canvas) return; const ctx = canvas.getContext('2d'); if (!ctx) return; // Clear canvas ctx.clearRect(0, 0, canvas.width, canvas.height); // Define layers const layers = [3, 5, 5, 2]; // Input, hidden, hidden, output const nodeSize = 6; const layerSpacing = canvas.width / (layers.length + 1); const neuronColor = darkMode ? '#22c55e' : '#10b981'; const connectionColor = darkMode ? 'rgba(34, 197, 94, 0.2)' : 'rgba(16, 185, 129, 0.1)'; const activeConnectionColor = darkMode ? 'rgba(34, 197, 94, 0.6)' : 'rgba(16, 185, 129, 0.5)'; // Draw connections and nodes for (let l = 0; l < layers.length - 1; l++) { const currentLayerSize = layers[l]; const nextLayerSize = layers[l + 1]; const currentX = (l + 1) * layerSpacing; const nextX = (l + 2) * layerSpacing; for (let i = 0; i < currentLayerSize; i++) { const currentY = (i + 1) * (canvas.height / (currentLayerSize + 1)); for (let j = 0; j < nextLayerSize; j++) { const nextY = (j + 1) * (canvas.height / (nextLayerSize + 1)); // Draw connection ctx.beginPath(); ctx.moveTo(currentX, currentY); ctx.lineTo(nextX, nextY); // Randomly activate some connections based on chaos state const isActive = Math.random() < aiState.chaosState[l % aiState.chaosState.length]; ctx.strokeStyle = isActive ? activeConnectionColor : connectionColor; ctx.lineWidth = isActive ? 1.5 : 0.5; ctx.stroke(); } } } // Draw nodes for (let l = 0; l < layers.length; l++) { const layerSize = layers[l]; const x = (l + 1) * layerSpacing; for (let i = 0; i < layerSize; i++) { const y = (i + 1) * (canvas.height / (layerSize + 1)); // Node ctx.beginPath(); ctx.arc(x, y, nodeSize, 0, Math.PI * 2); // Node color with pulsing effect based on quantum state const stateIndex = (l + i) % aiState.quantumState.length; const pulseFactor = 0.7 + (aiState.quantumState[stateIndex] * 0.3); const gradient = ctx.createRadialGradient(x, y, 0, x, y, nodeSize * 1.5); gradient.addColorStop(0, neuronColor); gradient.addColorStop(1, 'rgba(16, 185, 129, 0)'); ctx.fillStyle = gradient; ctx.fill(); } } }, [aiState.chaosState, aiState.quantumState, darkMode]); return (

Codette State Visualization

Quantum State

{aiState.quantumState.map((value, index) => (
Q{index + 1}
{value.toFixed(2)}
))}

Neural Activity

{aiState.chaosState.map((value, index) => (
C{index + 1}
{value.toFixed(2)}
))}

Active Perspectives

{aiState.activePerspectives.map((perspective, index) => (
{perspective.replace('_', ' ')}
))}

Performance Metrics

Ethical Governance {Number(aiState.ethicalScore) * 100}%
Processing Power {Number(aiState.processingPower) * 100}%
); }; export default VisualizationPanel;