// === NOSTR FEED PANEL === import * as THREE from 'three'; import { NEXUS } from './constants.js'; import { NOSTR_STATE } from './nostr.js'; export function createNostrPanelTexture() { const W = 512, H = 512; const canvas = document.createElement('canvas'); canvas.width = W; canvas.height = H; const ctx = canvas.getContext('2d'); const update = () => { ctx.clearRect(0, 0, W, H); // Background ctx.fillStyle = 'rgba(10, 20, 40, 0.8)'; ctx.fillRect(0, 0, W, H); // Header ctx.fillStyle = '#4488ff'; ctx.font = 'bold 32px "Orbitron"'; ctx.fillText('◈ NOSTR_FEED', 30, 60); ctx.fillRect(30, 75, 452, 2); // Connection Status ctx.fillStyle = NOSTR_STATE.connected ? '#00ff88' : '#ff4444'; ctx.beginPath(); ctx.arc(460, 48, 8, 0, Math.PI * 2); ctx.fill(); // Events ctx.font = '18px "JetBrains Mono"'; NOSTR_STATE.events.slice(0, 10).forEach((ev, i) => { const y = 120 + i * 38; ctx.fillStyle = ev.kind === 9735 ? '#ffd700' : '#ffffff'; const prefix = ev.kind === 9735 ? '⚡' : '•'; ctx.fillText(\`\${prefix} [\${ev.pubkey}] \${ev.content}\`, 30, y); }); if (NOSTR_STATE.events.length === 0) { ctx.fillStyle = '#667788'; ctx.fillText('> WAITING FOR EVENTS...', 30, 120); } }; return { canvas, update }; }