@decido/discovery-studio 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -2
- package/dist/index.mjs +0 -2
- package/package.json +5 -4
- package/dist/index.d.mts +0 -102
- package/dist/index.d.ts +0 -102
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/panels/SideExplorer.tsx","../src/panels/InspectorPanel.tsx","../src/panels/AgentPanel.tsx","../src/tabs/ChatTab.tsx","../src/nodes/MessageNode.tsx","../src/nodes/BotActionNode.tsx","../src/components/TrackingPreview.tsx","../src/tabs/FlowCanvasTab.tsx","../src/tabs/AnalyticsTab.tsx","../src/tabs/ApiTesterTab.tsx","../src/tabs/TemplateManagerTab.tsx","../src/tabs/RulesArchitectTab.tsx","../src/components/StatusBarMetrics.tsx","../src/DiscoveryStudio.tsx"],"names":["useState","jsxs","jsx","useEffect","io","useRef","kernel","e","API_URL","useCallback","MessageCircle","Reply","Info","memo","BaseNode","Handle","Position","Bot","ShoppingCart","Headphones","Brain","GitBranch","MarkerType","FlowEditor","React"],"mappings":"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","file":"index.js","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { io, Socket } from 'socket.io-client';\n\ninterface SideExplorerProps {\n selectedContact: string | null;\n onSelectContact: (id: string) => void;\n}\n\nconst API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n\ninterface Conversation {\n phone: string;\n last_activity: Date;\n last_message: string;\n profile_name?: string;\n}\n\nconst DEMO_TEMPLATES = [\n { id: 't1', label: 'Confirmación Pedido', icon: 'fas fa-check-circle' },\n { id: 't2', label: 'Estado de Envío', icon: 'fas fa-truck' },\n { id: 't3', label: 'Cotización', icon: 'fas fa-file-invoice' },\n { id: 't4', label: 'Bienvenida', icon: 'fas fa-hand-wave' },\n];\n\nconst DEMO_AUTOMATIONS = [\n { id: 'a1', label: 'Auto-respuesta horario', active: true },\n { id: 'a2', label: 'Crear pedido automático', active: true },\n { id: 'a3', label: 'Escalamiento a asesor', active: false },\n { id: 'a4', label: 'Encuesta satisfacción', active: true },\n];\n\n// ─── Collapsible Section ────────────────────────────────────\nconst Section: React.FC<{ title: string; icon: string; count?: number; defaultOpen?: boolean; children: React.ReactNode }> = ({\n title, icon, count, defaultOpen = true, children\n}) => {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div className=\"border-b\" style={{ borderColor: 'var(--border-color)' }}>\n <button\n onClick={() => setOpen(p => !p)}\n className=\"w-full flex items-center gap-2 px-3 py-2 text-[10px] font-black uppercase tracking-widest transition-all hover:bg-white/5\"\n style={{ color: 'var(--text-secondary)' }}\n >\n <i className={`fas fa-chevron-${open ? 'down' : 'right'} text-[8px] w-3`}></i>\n <i className={`${icon} text-[10px]`}></i>\n <span className=\"flex-1 text-left\">{title}</span>\n {count !== undefined && (\n <span className=\"px-1.5 py-0.5 rounded text-[9px] font-bold\" style={{ background: 'var(--bg-muted)', color: 'var(--text-secondary)' }}>\n {count}\n </span>\n )}\n </button>\n {open && <div className=\"pb-1\">{children}</div>}\n </div>\n );\n};\n\nexport const SideExplorer: React.FC<SideExplorerProps> = ({ selectedContact, onSelectContact }) => {\n const [filter, setFilter] = useState('');\n const [conversations, setConversations] = useState<Conversation[]>([]);\n\n useEffect(() => {\n const fetchConversations = async () => {\n try {\n const res = await fetch(`${API_URL}/api/whatsapp/conversations`);\n const data = await res.json();\n setConversations(data.map((item: any) => ({\n ...item,\n last_activity: new Date(item.last_activity)\n })));\n } catch (err) {}\n };\n fetchConversations();\n \n const s = io(API_URL, { transports: ['websocket', 'polling'] });\n s.on('wa:message_received', fetchConversations);\n s.on('wa:message_sent', fetchConversations);\n return () => { s.disconnect(); };\n }, []);\n\n const filtered = conversations.filter(c =>\n c.phone.includes(filter)\n );\n\n return (\n <div className=\"flex flex-col h-full overflow-hidden\">\n {/* Search */}\n <div className=\"p-2 shrink-0\">\n <div className=\"flex items-center gap-2 px-2.5 py-1.5 rounded-lg text-xs\"\n style={{ background: 'var(--bg-muted)', border: '1px solid var(--border-color)' }}>\n <i className=\"fas fa-search text-[10px]\" style={{ color: 'var(--text-secondary)' }}></i>\n <input\n type=\"text\"\n placeholder=\"Filtrar...\"\n className=\"flex-1 bg-transparent outline-none text-xs\"\n style={{ color: 'var(--text-primary)' }}\n value={filter}\n onChange={e => setFilter(e.target.value)}\n />\n </div>\n </div>\n\n {/* Scrollable content */}\n <div className=\"flex-1 overflow-y-auto scrollbar-thin\">\n {/* Conversations */}\n <Section title=\"Conversaciones\" icon=\"fas fa-comments\" count={filtered.length}>\n {filtered.map(conv => (\n <button\n key={conv.phone}\n onClick={() => onSelectContact(conv.phone)}\n className=\"w-full flex items-start gap-2.5 px-3 py-2 text-left transition-all rounded-md mx-1\"\n style={{\n background: selectedContact === conv.phone ? 'var(--bg-muted)' : 'transparent',\n width: 'calc(100% - 8px)',\n }}\n onMouseEnter={e => { if (selectedContact !== conv.phone) e.currentTarget.style.background = 'var(--bg-muted)'; }}\n onMouseLeave={e => { if (selectedContact !== conv.phone) e.currentTarget.style.background = 'transparent'; }}\n >\n {/* Avatar */}\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center shrink-0 text-white text-[10px] font-bold\"\n style={{ background: 'var(--brand-primary)' }}>\n <i className=\"fab fa-whatsapp text-sm\"></i>\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-bold truncate\" style={{ color: 'var(--text-primary)' }}>{conv.profile_name || '+' + conv.phone}</span>\n <span className=\"text-[9px] shrink-0 ml-1\" style={{ color: 'var(--text-secondary)' }}>\n {conv.last_activity.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </span>\n </div>\n <p className=\"text-[10px] truncate mt-0.5\" style={{ color: 'var(--text-secondary)' }}>{conv.last_message || 'Media'}</p>\n </div>\n </button>\n ))}\n {filtered.length === 0 && (\n <div className=\"px-4 py-3 pb-4 text-center\">\n <i className=\"fab fa-whatsapp text-2xl mb-2\" style={{ color: '#25D366' }}></i>\n <p className=\"text-xs\" style={{ color: 'var(--text-secondary)' }}>No hay chats activos. Manda un WhatsApp al número Business para empezar.</p>\n </div>\n )}\n </Section>\n\n {/* Templates */}\n <Section title=\"Plantillas\" icon=\"fas fa-file-alt\" count={DEMO_TEMPLATES.length} defaultOpen={false}>\n {DEMO_TEMPLATES.map(tpl => (\n <div key={tpl.id} className=\"flex items-center gap-2 px-3 py-1.5 mx-1 rounded-md cursor-pointer transition-all\"\n style={{ width: 'calc(100% - 8px)' }}\n onMouseEnter={e => (e.currentTarget.style.background = 'var(--bg-muted)')}\n onMouseLeave={e => (e.currentTarget.style.background = 'transparent')}\n >\n <i className={`${tpl.icon} text-[10px]`} style={{ color: 'var(--brand-primary)' }}></i>\n <span className=\"text-xs\" style={{ color: 'var(--text-primary)' }}>{tpl.label}</span>\n </div>\n ))}\n </Section>\n\n {/* Automations */}\n <Section title=\"Automatizaciones\" icon=\"fas fa-robot\" count={DEMO_AUTOMATIONS.filter(a => a.active).length} defaultOpen={false}>\n {DEMO_AUTOMATIONS.map(auto => (\n <div key={auto.id} className=\"flex items-center gap-2 px-3 py-1.5 mx-1 rounded-md\"\n style={{ width: 'calc(100% - 8px)' }}>\n <span className={`w-1.5 h-1.5 rounded-full ${auto.active ? 'bg-green-500' : 'bg-slate-400'}`}></span>\n <span className=\"text-xs flex-1\" style={{ color: 'var(--text-primary)' }}>{auto.label}</span>\n <span className=\"text-[9px] font-bold\" style={{ color: auto.active ? '#22c55e' : 'var(--text-secondary)' }}>\n {auto.active ? 'ON' : 'OFF'}\n </span>\n </div>\n ))}\n </Section>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface InspectorPanelProps {\n selectedContact: string | null;\n}\n\n// ─── Demo Contact Details ────────────────────────────────────\nconst CONTACT_DETAILS: Record<string, {\n name: string; phone: string; email: string; city: string;\n totalOrders: number; totalSpent: string; lastOrder: string;\n sentiment: 'positive' | 'neutral' | 'negative';\n tags: string[];\n timeline: { time: string; event: string; icon: string }[];\n}> = {\n c1: {\n name: 'María García', phone: '+57 301 234 5678', email: 'maria@gmail.com', city: 'Bogotá',\n totalOrders: 8, totalSpent: '$4,250,000', lastOrder: 'PED-1847',\n sentiment: 'neutral',\n tags: ['VIP', 'Frecuente', 'Mueblería'],\n timeline: [\n { time: '2m', event: 'Preguntó por estado de pedido', icon: 'fas fa-comment' },\n { time: '1d', event: 'Pedido PED-1847 en PRODUCTION', icon: 'fas fa-industry' },\n { time: '3d', event: 'Transición a IN_CUTTING (Control)', icon: 'fas fa-check-circle' },\n { time: '1w', event: 'Tracking Link Generado', icon: 'fas fa-link' },\n ],\n },\n c2: {\n name: 'Carlos Ruiz', phone: '+57 310 987 6543', email: 'cruiz@empresa.co', city: 'Medellín',\n totalOrders: 3, totalSpent: '$1,890,000', lastOrder: 'PED-1832',\n sentiment: 'positive',\n tags: ['Empresa', 'Nuevo'],\n timeline: [\n { time: '15m', event: 'Solicitó cotización de mesa', icon: 'fas fa-comment' },\n { time: '2d', event: 'RuleEngine Trigger: NEW Order', icon: 'fas fa-bolt' },\n ],\n },\n};\n\nconst SENTIMENTS = {\n positive: { icon: 'fas fa-smile', color: '#22c55e', label: 'Positivo' },\n neutral: { icon: 'fas fa-meh', color: '#f59e0b', label: 'Neutral' },\n negative: { icon: 'fas fa-frown', color: '#ef4444', label: 'Negativo' },\n};\n\n// ─── Info Row ────────────────────────────────────────────────\nconst InfoRow: React.FC<{ label: string; value: string }> = ({ label, value }) => (\n <div className=\"flex justify-between items-center py-1.5\">\n <span className=\"text-[10px] font-bold uppercase tracking-wider\" style={{ color: 'var(--text-secondary)' }}>{label}</span>\n <span className=\"text-xs font-semibold\" style={{ color: 'var(--text-primary)' }}>{value}</span>\n </div>\n);\n\nexport const InspectorPanel: React.FC<InspectorPanelProps> = ({ selectedContact }) => {\n const contact = selectedContact ? CONTACT_DETAILS[selectedContact] : null;\n\n if (!contact) {\n return (\n <div className=\"flex-1 flex flex-col items-center justify-center gap-3 p-6\">\n <div className=\"w-16 h-16 rounded-2xl flex items-center justify-center\"\n style={{ background: 'var(--bg-muted)' }}>\n <i className=\"fas fa-user-slash text-xl\" style={{ color: 'var(--text-secondary)' }}></i>\n </div>\n <p className=\"text-xs text-center font-medium\" style={{ color: 'var(--text-secondary)' }}>\n Selecciona un contacto<br />para ver detalles\n </p>\n </div>\n );\n }\n\n const sentiment = SENTIMENTS[contact.sentiment];\n\n return (\n <div className=\"flex flex-col h-full overflow-y-auto scrollbar-thin\">\n {/* Header */}\n <div className=\"p-4 text-center border-b\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"w-14 h-14 rounded-full mx-auto flex items-center justify-center text-white font-bold text-lg mb-3\"\n style={{ background: 'var(--brand-primary)' }}>\n {contact.name.split(' ').map(n => n[0]).join('')}\n </div>\n <h3 className=\"font-bold text-sm\" style={{ color: 'var(--text-primary)' }}>{contact.name}</h3>\n <p className=\"text-[10px] mt-0.5\" style={{ color: 'var(--text-secondary)' }}>{contact.phone}</p>\n\n {/* Tags */}\n <div className=\"flex flex-wrap justify-center gap-1 mt-3\">\n {contact.tags.map(tag => (\n <span key={tag} className=\"px-2 py-0.5 rounded-full text-[9px] font-bold\"\n style={{ background: 'var(--bg-muted)', color: 'var(--brand-primary)', border: '1px solid var(--border-color)' }}>\n {tag}\n </span>\n ))}\n </div>\n </div>\n\n {/* Sentiment */}\n <div className=\"px-4 py-3 border-b\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"text-[10px] font-black uppercase tracking-widest mb-2\" style={{ color: 'var(--text-secondary)' }}>\n Sentimiento IA\n </div>\n <div className=\"flex items-center gap-2 p-2 rounded-lg\" style={{ background: 'var(--bg-muted)' }}>\n <i className={`${sentiment.icon} text-lg`} style={{ color: sentiment.color }}></i>\n <div>\n <span className=\"text-xs font-bold\" style={{ color: sentiment.color }}>{sentiment.label}</span>\n <div className=\"w-full h-1.5 rounded-full mt-1\" style={{ background: 'var(--border-color)' }}>\n <div className=\"h-full rounded-full transition-all\" style={{\n width: contact.sentiment === 'positive' ? '80%' : contact.sentiment === 'neutral' ? '50%' : '25%',\n background: sentiment.color,\n }}></div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Quick Stats */}\n <div className=\"px-4 py-3 border-b\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"text-[10px] font-black uppercase tracking-widest mb-2\" style={{ color: 'var(--text-secondary)' }}>\n Resumen Cliente\n </div>\n <InfoRow label=\"Pedidos\" value={String(contact.totalOrders)} />\n <InfoRow label=\"Total\" value={contact.totalSpent} />\n <InfoRow label=\"Último\" value={contact.lastOrder} />\n <InfoRow label=\"Ciudad\" value={contact.city} />\n <InfoRow label=\"Email\" value={contact.email} />\n </div>\n\n {/* Timeline */}\n <div className=\"px-4 py-3\">\n <div className=\"text-[10px] font-black uppercase tracking-widest mb-3\" style={{ color: 'var(--text-secondary)' }}>\n Actividad Reciente\n </div>\n <div className=\"space-y-0\">\n {contact.timeline.map((event, i) => (\n <div key={i} className=\"flex gap-3 relative\">\n {/* Connector line */}\n {i < contact.timeline.length - 1 && (\n <div className=\"absolute left-[9px] top-5 w-px h-full\" style={{ background: 'var(--border-color)' }}></div>\n )}\n <div className=\"w-5 h-5 rounded-full flex items-center justify-center shrink-0 z-10\"\n style={{ background: 'var(--bg-muted)', border: '1px solid var(--border-color)' }}>\n <i className={`${event.icon} text-[8px]`} style={{ color: 'var(--brand-primary)' }}></i>\n </div>\n <div className=\"pb-4 min-w-0\">\n <p className=\"text-[11px] font-medium leading-tight\" style={{ color: 'var(--text-primary)' }}>{event.event}</p>\n <span className=\"text-[9px]\" style={{ color: 'var(--text-secondary)' }}>Hace {event.time}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { kernel } from '@decido/kernel-bridge';\n\ninterface Message {\n id: string;\n text: string;\n type: 'user' | 'agent' | 'system';\n}\n\nexport const AgentPanel = () => {\n const [messages, setMessages] = useState<Message[]>([\n { id: '1', text: 'Soy tu Agente Vocal asignado. ¿En qué te ayudo con tus flujos?', type: 'system' }\n ]);\n const [input, setInput] = useState('');\n const [isTyping, setIsTyping] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [messages]);\n\n useEffect(() => {\n // Fallback: Local Kernel Emulator\n const unsubscribe = kernel.onEvent((payload: any) => {\n if (payload.event_type === 'message_sent' && payload.data?.target === 'vocal_domain_agent') {\n // Ignore my own sends\n } else if (payload.event_type === 'message_sent' && payload.data?.intent === 'vocal_response') {\n setMessages(prev => [...prev, { id: Date.now().toString(), text: payload.data.payload, type: 'agent' }]);\n setIsTyping(false);\n }\n });\n\n // Real-time Integration (Phase 3): SSE connection to EventBus\n let es: EventSource | null = null;\n try {\n es = new EventSource('http://localhost:3001/api/events');\n \n // Listen for Real WhatsApp incoming messages\n es.addEventListener('whatsapp:message_received', (e) => {\n try {\n const data = JSON.parse(e.data);\n setMessages(prev => [...prev, { \n id: Date.now().toString(), \n text: `📱 [WA] ${data.profileName || data.from}: ${data.text || 'Archivo Adjunto'}`, \n type: 'user' \n }]);\n setIsTyping(true);\n \n // Mock a rule-engine triggered reply for the demo\n setTimeout(() => {\n setMessages(p => [...p, { id: Date.now().toString(), text: \"Regla disparada: Mensaje recibido. Evaluando intención...\", type: 'system' }]);\n setIsTyping(false);\n }, 1000);\n } catch(e) {}\n });\n\n // Listen for outgoing template status\n es.addEventListener('whatsapp:status_update', (e) => {\n try {\n const data = JSON.parse(e.data);\n setMessages(prev => [...prev, { \n id: Date.now().toString(), \n text: `✔️ [Estado WA] ${data.status} a ${data.recipient_id}`, \n type: 'system' \n }]);\n } catch(e) {}\n });\n \n es.onerror = () => {\n // Silently fallback to kernel emulation if server is disconnected\n es?.close();\n };\n } catch (e) {\n console.log('SSE Error, falling back to local kernel');\n }\n\n return () => {\n unsubscribe();\n if (es) es.close();\n };\n }, []);\n\n const handleSend = async () => {\n if (!input.trim()) return;\n\n const userMsg = input;\n setInput('');\n setMessages(prev => [...prev, { id: Date.now().toString(), text: userMsg, type: 'user' }]);\n setIsTyping(true);\n\n try {\n // Emulate sending a message to the agent swarm\n await kernel.execute('spawn_task', {\n target_id: 'vocal_domain_agent',\n role: 'vocal_domain',\n intent: 'user_prompt',\n payload: userMsg\n });\n\n // For UI testing purposes if backend is mocked:\n setTimeout(() => {\n setIsTyping(false);\n setMessages(prev => {\n // Check if agent already responded, if not, mock a response\n const hasAgentResponse = prev.some(m => m.type === 'agent' && parseInt(m.id) > Date.now() - 2000);\n if (!hasAgentResponse) {\n return [...prev, {\n id: Date.now().toString(),\n text: \"Evaluando el diseño de tu flujo actual... Parece óptimo para WhatsApp Business.\",\n type: 'agent'\n }];\n }\n return prev;\n });\n }, 1500);\n\n } catch (error) {\n console.error('Error contacting agent:', error);\n setIsTyping(false);\n }\n };\n\n return (\n <div className=\"h-full flex flex-col font-sans\" style={{ background: 'var(--bg-elevated)', color: 'var(--text-primary)' }}>\n {/* Header */}\n <div className=\"h-11 shrink-0 flex items-center px-3 border-b gap-2\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"w-6 h-6 rounded-full bg-emerald-500/20 flex items-center justify-center border border-emerald-500/50\">\n <i className=\"fas fa-robot text-emerald-400 text-xs text-brand animate-pulse\"></i>\n </div>\n <span className=\"font-bold text-xs\">Agente Decido</span>\n <span className=\"ml-auto px-1.5 py-0.5 rounded text-[9px] font-bold bg-emerald-500/10 text-emerald-500 border border-emerald-500/20\">\n VOCAL DOMAIN\n </span>\n </div>\n\n {/* Chat Area */}\n <div ref={scrollRef} className=\"flex-1 min-h-0 overflow-y-auto p-3 space-y-3\">\n {messages.map(msg => (\n <div key={msg.id} className={`flex flex-col max-w-[90%] ${msg.type === 'user' ? 'ml-auto items-end' : 'mr-auto items-start'}`}>\n {msg.type === 'system' && (\n <div className=\"text-[10px] text-center w-full my-2 italic\" style={{ color: 'var(--text-secondary)' }}>\n {msg.text}\n </div>\n )}\n {msg.type !== 'system' && (\n <div\n className={`text-xs px-3 py-2 rounded-xl leading-relaxed ${msg.type === 'user'\n ? 'bg-brand text-white rounded-br-sm'\n : 'bg-white/5 border border-white/10 rounded-bl-sm'\n }`}\n >\n {msg.text}\n </div>\n )}\n </div>\n ))}\n {isTyping && (\n <div className=\"flex items-center gap-1.5 p-2 bg-white/5 w-fit rounded-lg border border-white/10 rounded-bl-sm\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-500/50 animate-bounce\" style={{ animationDelay: '0ms' }}></span>\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-500/50 animate-bounce\" style={{ animationDelay: '150ms' }}></span>\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-500/50 animate-bounce\" style={{ animationDelay: '300ms' }}></span>\n </div>\n )}\n </div>\n\n {/* Input Area */}\n <div className=\"p-2 shrink-0 border-t\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"flex items-end gap-2 bg-white/5 border border-white/10 rounded-lg p-1.5 focus-within:border-emerald-500/50 transition-colors\">\n <textarea\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n }}\n placeholder=\"Pregúntale al Agente...\"\n className=\"flex-1 bg-transparent resize-none text-xs outline-none p-1.5 min-h-[32px] max-h-[100px]\"\n rows={input.split('\\n').length > 1 ? Math.min(input.split('\\n').length, 4) : 1}\n />\n <button\n onClick={handleSend}\n disabled={!input.trim() || isTyping}\n className=\"w-8 h-8 shrink-0 rounded-md bg-white/10 hover:bg-white/20 text-emerald-400 flex items-center justify-center transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <i className=\"fas fa-paper-plane text-xs\"></i>\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { io, Socket } from 'socket.io-client';\n\ninterface ChatTabProps {\n selectedContact: string | null;\n}\n\ninterface ChatMessage {\n id: string;\n text: string;\n sender: 'user' | 'bot' | 'system' | 'copilot';\n timestamp: Date;\n isIncoming: boolean;\n status?: 'sent' | 'delivered' | 'read';\n}\n\n// ─── Mode Selector ───────────────────────────────────────────\ntype OpMode = 'MANUAL' | 'COPILOT' | 'AUTO';\n\nconst API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n\nexport const ChatTab: React.FC<ChatTabProps> = ({ selectedContact }) => {\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [input, setInput] = useState('');\n const [opMode, setOpMode] = useState<OpMode>('COPILOT');\n const [socket, setSocket] = useState<Socket | null>(null);\n const chatEndRef = useRef<HTMLDivElement>(null);\n\n const fetchMessages = useCallback(async () => {\n if (!selectedContact) {\n setMessages([]);\n return;\n }\n try {\n const res = await fetch(`${API_URL}/api/whatsapp/messages?phone=${selectedContact}&limit=50`);\n const data = await res.json();\n \n const formatted: ChatMessage[] = data.reverse().map((dbMsg: any) => ({\n id: dbMsg.id.toString(),\n text: dbMsg.body || (dbMsg.message_type === 'image' ? '📸 [Imagen]' : '📎 [Archivo]'),\n sender: dbMsg.direction === 'INBOUND' ? 'user' : 'bot',\n timestamp: new Date(dbMsg.created_at),\n isIncoming: dbMsg.direction === 'INBOUND',\n status: dbMsg.direction === 'OUTBOUND' ? 'sent' : undefined\n }));\n setMessages(formatted);\n } catch (error) {\n console.error('Failed to fetch messages:', error);\n }\n }, [selectedContact]);\n\n // Setup Socket & Fetch Messages\n useEffect(() => {\n fetchMessages();\n\n const s = io(API_URL, { transports: ['websocket', 'polling'] });\n s.on('connect', () => console.log('[ChatTab] Connected to WebSocket'));\n\n s.on('wa:message_received', (data: any) => {\n if (selectedContact && data.from === selectedContact) {\n fetchMessages(); // refresh the view\n }\n });\n \n s.on('wa:message_sent', (data: any) => {\n if (selectedContact && data.to === selectedContact) {\n fetchMessages(); // refresh the view when outbound is synced\n }\n });\n\n s.on('wa:status_update', (data: any) => {\n // Ideally we map wamid to update status purely in state\n // For now, refetching ensures consistency for this MVP\n if (selectedContact) fetchMessages();\n });\n\n setSocket(s);\n\n return () => {\n s.disconnect();\n };\n }, [selectedContact, fetchMessages]);\n\n // Scroll to bottom when messages update\n useEffect(() => {\n chatEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [messages]);\n\n const handleSend = async () => {\n if (!input.trim() || !selectedContact) return;\n \n const originalInput = input;\n setInput(''); // clear immediately for UX\n\n // Optimistic UI update\n const optimisticMsg: ChatMessage = {\n id: `temp-${Date.now()}`,\n text: originalInput,\n sender: 'bot',\n timestamp: new Date(),\n isIncoming: false,\n status: 'sent',\n };\n setMessages(prev => [...prev, optimisticMsg]);\n\n try {\n await fetch(`${API_URL}/api/whatsapp/send-chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ to: selectedContact, text: originalInput })\n });\n // Result is handled via socket wa:message_sent\n } catch (error) {\n console.error('Send failed:', error);\n }\n };\n\n return (\n <div className=\"flex-1 flex flex-col min-h-0 overflow-hidden relative\">\n {/* Chat Header */}\n <div className=\"h-12 shrink-0 flex items-center justify-between px-4 border-b\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center text-white text-[10px] font-bold\"\n style={{ background: '#25D366' }}>\n <i className=\"fab fa-whatsapp text-sm\"></i>\n </div>\n <div>\n <span className=\"text-xs font-bold\" style={{ color: 'var(--text-primary)' }}>\n {selectedContact ? '+' + selectedContact : 'Seleccionar contacto'}\n </span>\n <span className=\"text-[10px] block\" style={{ color: 'var(--text-secondary)' }}>\n {selectedContact ? 'en línea' : '—'}\n </span>\n </div>\n </div>\n\n {/* Mode selector */}\n <div className=\"flex items-center gap-1 p-0.5 rounded-lg\" style={{ background: 'var(--bg-muted)' }}>\n {(['MANUAL', 'COPILOT', 'AUTO'] as const).map(mode => (\n <button\n key={mode}\n onClick={() => setOpMode(mode)}\n className=\"px-2.5 py-1 rounded-md text-[9px] font-black tracking-wide transition-all\"\n style={{\n background: opMode === mode ? 'var(--brand-primary)' : 'transparent',\n color: opMode === mode ? 'white' : 'var(--text-secondary)',\n }}\n >\n {mode === 'COPILOT' && <i className=\"fas fa-wand-sparkles mr-1 text-[8px]\"></i>}\n {mode}\n </button>\n ))}\n </div>\n </div>\n\n {/* Messages Area */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-3 scrollbar-thin\"\n style={{ background: 'var(--bg-primary)' }}>\n {/* WhatsApp pattern background */}\n <div className=\"absolute inset-0 opacity-[0.02] pointer-events-none\"\n style={{ backgroundImage: 'url(\"data:image/svg+xml,%3Csvg width=\\'60\\' height=\\'60\\' viewBox=\\'0 0 60 60\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3E%3Cg fill=\\'none\\' fill-rule=\\'evenodd\\'%3E%3Cg fill=\\'%23888\\' fill-opacity=\\'0.4\\'%3E%3Cpath d=\\'M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z\\'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")' }}>\n </div>\n\n <div className=\"relative z-10 space-y-3\">\n {messages.map(msg => (\n <div key={msg.id} className={`flex ${msg.sender === 'system' ? 'justify-center' : msg.isIncoming ? 'justify-start' : 'justify-end'}`}>\n {msg.sender === 'system' ? (\n <span className=\"px-3 py-1 rounded-full text-[9px] font-bold uppercase tracking-widest\"\n style={{ background: 'var(--bg-muted)', color: 'var(--text-secondary)', border: '1px solid var(--border-color)' }}>\n <i className=\"fas fa-info-circle mr-1\"></i>{msg.text}\n </span>\n ) : msg.sender === 'copilot' ? (\n <div className=\"max-w-[75%] p-3 rounded-xl rounded-bl-none shadow-lg border\"\n style={{ background: 'linear-gradient(135deg, rgba(99,102,241,0.15), rgba(168,85,247,0.15))', borderColor: 'rgba(139,92,246,0.3)' }}>\n <div className=\"flex items-center gap-1.5 mb-1.5\">\n <i className=\"fas fa-wand-sparkles text-[10px]\" style={{ color: '#a855f7' }}></i>\n <span className=\"text-[9px] font-black uppercase tracking-wide\" style={{ color: '#a855f7' }}>CoPilot IA</span>\n </div>\n <p className=\"text-xs italic leading-relaxed\" style={{ color: 'var(--text-primary)' }}>{msg.text}</p>\n <div className=\"mt-2 flex gap-1.5\">\n <button className=\"flex-1 px-2 py-1 rounded-md text-[9px] font-bold transition-all\"\n style={{ background: 'var(--bg-muted)', color: 'var(--text-secondary)', border: '1px solid var(--border-color)' }}>\n Ignorar\n </button>\n <button className=\"flex-1 px-2 py-1 rounded-md text-[9px] font-bold transition-all text-white\"\n style={{ background: '#8b5cf6' }}>\n Aplicar\n </button>\n </div>\n </div>\n ) : (\n <div className={`max-w-[70%] p-3 rounded-xl shadow-sm text-xs leading-relaxed ${msg.isIncoming ? 'rounded-tl-none' : 'rounded-tr-none'\n }`}\n style={{\n background: msg.isIncoming ? 'var(--bg-elevated)' : 'rgba(37,211,102,0.15)',\n color: 'var(--text-primary)',\n border: msg.isIncoming ? '1px solid var(--border-color)' : '1px solid rgba(37,211,102,0.2)',\n }}>\n <p className=\"whitespace-pre-wrap\">{msg.text}</p>\n <div className=\"flex items-center justify-end gap-1 mt-1.5\">\n <span className=\"text-[9px]\" style={{ color: 'var(--text-secondary)' }}>\n {msg.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </span>\n {!msg.isIncoming && msg.status && (\n <i className={`fas fa-check-double text-[9px] ${msg.status === 'read' ? 'text-blue-400' : ''}`}\n style={{ color: msg.status === 'read' ? '#38bdf8' : 'var(--text-secondary)' }}></i>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n <div ref={chatEndRef}></div>\n </div>\n </div>\n\n {/* Input Area */}\n <div className=\"shrink-0 p-3 border-t\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <div className=\"flex items-center gap-2\">\n {/* Quick actions */}\n <button className=\"w-8 h-8 rounded-lg flex items-center justify-center transition-all\"\n style={{ color: 'var(--text-secondary)' }}\n onMouseEnter={e => (e.currentTarget.style.background = 'var(--bg-muted)')}\n onMouseLeave={e => (e.currentTarget.style.background = 'transparent')}>\n <i className=\"fas fa-paperclip text-sm\"></i>\n </button>\n\n <div className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-xl\"\n style={{ background: 'var(--bg-muted)', border: '1px solid var(--border-color)' }}>\n <input\n type=\"text\"\n placeholder=\"Escribe un mensaje...\"\n className=\"flex-1 bg-transparent outline-none text-xs\"\n style={{ color: 'var(--text-primary)' }}\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={e => e.key === 'Enter' && handleSend()}\n />\n <button className=\"text-xs\" style={{ color: 'var(--text-secondary)' }}>\n <i className=\"fas fa-face-smile\"></i>\n </button>\n </div>\n\n <button\n onClick={handleSend}\n className=\"w-9 h-9 rounded-xl flex items-center justify-center text-white transition-all shadow-md\"\n style={{ background: '#25D366' }}\n >\n <i className={`fas ${input.trim() ? 'fa-paper-plane' : 'fa-microphone'} text-sm`}></i>\n </button>\n </div>\n\n {/* Typing indicator when copilot mode */}\n {opMode === 'COPILOT' && (\n <div className=\"flex items-center gap-2 mt-2 px-2\">\n <i className=\"fas fa-wand-sparkles text-[9px]\" style={{ color: '#a855f7' }}></i>\n <span className=\"text-[9px]\" style={{ color: 'var(--text-secondary)' }}>CoPilot activo — sugerencias automáticas</span>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { BaseNode } from '@decido/macia-core';\nimport { MessageCircle, Reply, Info } from 'lucide-react';\n\ninterface MessageNodeData {\n label: string;\n type: 'incoming' | 'outgoing' | 'system';\n text: string;\n time?: string;\n}\n\nconst MESSAGE_CONFIG: Record<string, { icon: React.ReactNode; colorClass: string; bgClass: string }> = {\n incoming: { icon: <MessageCircle size={14} />, colorClass: 'text-emerald-400', bgClass: 'from-emerald-500/10 to-transparent' },\n outgoing: { icon: <Reply size={14} />, colorClass: 'text-blue-400', bgClass: 'from-blue-500/10 to-transparent' },\n system: { icon: <Info size={14} />, colorClass: 'text-purple-400', bgClass: 'from-purple-500/10 to-transparent' },\n};\n\nexport const MessageNode = memo(({ id, data, selected }: NodeProps) => {\n const nodeData = (data || {}) as unknown as MessageNodeData;\n const config = MESSAGE_CONFIG[nodeData.type] || MESSAGE_CONFIG.incoming;\n\n const titleElement = (\n <div className=\"flex justify-between items-center w-full min-w-[140px]\">\n <div className=\"flex items-center gap-2\">\n <span className={config.colorClass}>{config.icon}</span>\n <span>{nodeData.label}</span>\n </div>\n {nodeData.time && (\n <span className=\"text-[9px] text-zinc-500 font-mono tracking-wider ml-4\">\n {nodeData.time}\n </span>\n )}\n </div>\n );\n\n return (\n <BaseNode\n id={id}\n selected={selected}\n title={titleElement}\n className={`border border-white/5 bg-linear-to-br ${config.bgClass} backdrop-blur-md`}\n >\n <Handle type=\"target\" position={Position.Left} className=\"!w-2 !h-2 !bg-zinc-800 !border-[1.5px] !border-zinc-400\" />\n\n <div className=\"p-3 text-xs leading-relaxed text-zinc-300 font-light break-words max-w-[240px]\">\n {nodeData.text}\n </div>\n\n <Handle type=\"source\" position={Position.Right} className={`!w-2 !h-2 !bg-zinc-800 !border-[1.5px] ${config.colorClass.replace('text-', 'border-')}`} />\n </BaseNode>\n );\n});\n\nMessageNode.displayName = 'MessageNode';\n","import React, { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { BaseNode } from '@decido/macia-core';\nimport { Bot, ShoppingCart, Headphones, Brain, GitBranch } from 'lucide-react';\n\ninterface BotActionNodeData {\n label: string;\n actionType: 'reply' | 'create_order' | 'escalate' | 'analyze' | 'decision';\n description?: string;\n}\n\nconst ACTION_CONFIG: Record<string, { icon: React.ReactNode; colorClass: string; bgClass: string }> = {\n reply: { icon: <Bot size={14} />, colorClass: 'text-emerald-400', bgClass: 'from-emerald-500/10 to-transparent' },\n create_order: { icon: <ShoppingCart size={14} />, colorClass: 'text-amber-400', bgClass: 'from-amber-500/10 to-transparent' },\n escalate: { icon: <Headphones size={14} />, colorClass: 'text-rose-400', bgClass: 'from-rose-500/10 to-transparent' },\n analyze: { icon: <Brain size={14} />, colorClass: 'text-violet-400', bgClass: 'from-violet-500/10 to-transparent' },\n decision: { icon: <GitBranch size={14} />, colorClass: 'text-cyan-400', bgClass: 'from-cyan-500/10 to-transparent' },\n};\n\nexport const BotActionNode = memo(({ id, data, selected }: NodeProps) => {\n const nodeData = (data || {}) as unknown as BotActionNodeData;\n const config = ACTION_CONFIG[nodeData?.actionType] || ACTION_CONFIG.reply;\n\n const titleElement = (\n <div className=\"flex items-center gap-2\">\n <span className={config.colorClass}>\n {config.icon}\n </span>\n <span>{nodeData?.label || 'Action'}</span>\n </div>\n );\n\n return (\n <BaseNode\n id={id}\n selected={selected}\n title={titleElement}\n hideTarget={true} // As this node uses Left/Right flow usually\n hideSource={true}\n className={`min-w-[200px] border border-white/5 bg-linear-to-br ${config.bgClass} backdrop-blur-md`}\n >\n <Handle type=\"target\" position={Position.Left} className=\"!w-2 !h-2 !bg-zinc-800 !border-[1.5px] !border-zinc-400\" />\n\n {nodeData.description && (\n <div className=\"px-3 py-2 text-xs text-zinc-400 font-light leading-relaxed\">\n {nodeData.description}\n </div>\n )}\n\n <Handle type=\"source\" position={Position.Right} className={`!w-2 !h-2 !bg-zinc-800 !border-[1.5px] ${config.colorClass.replace('text-', 'border-')}`} />\n\n {nodeData.actionType === 'decision' && (\n <Handle type=\"source\" position={Position.Bottom} id=\"no\" className=\"!w-2 !h-2 !bg-zinc-800 !border-[1.5px] border-rose-500\" />\n )}\n </BaseNode>\n );\n});\n\nBotActionNode.displayName = 'BotActionNode';\n","import React, { useState } from 'react';\n\ninterface TrackingPreviewProps {\n token?: string; // Optional real token to load\n onClose: () => void;\n}\n\nexport const TrackingPreview: React.FC<TrackingPreviewProps> = ({ token = 'demo-token-123', onClose }) => {\n // We point to the public server route for tracking\n const trackingUrl = `http://localhost:3001/track/${token}`;\n const [isLoading, setIsLoading] = useState(true);\n\n return (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center bg-black/60 backdrop-blur-sm p-4 animate-in fade-in\">\n <div className=\"w-full max-w-[400px] bg-[#0E1525] rounded-[24px] overflow-hidden border border-white/10 shadow-2xl flex flex-col h-[700px] max-h-[90vh] relative animate-in zoom-in-95\">\n \n {/* Header Actions */}\n <div className=\"absolute top-4 right-4 z-10 flex gap-2\">\n <button \n onClick={() => window.open(trackingUrl, '_blank')}\n className=\"w-8 h-8 rounded-full bg-white/10 backdrop-blur-md flex items-center justify-center text-white/70 hover:text-white hover:bg-white/20 transition-colors\"\n title=\"Abrir en nueva pestaña\"\n >\n <i className=\"fas fa-external-link-alt text-xs\"></i>\n </button>\n <button \n onClick={onClose}\n className=\"w-8 h-8 rounded-full bg-white/10 backdrop-blur-md flex items-center justify-center text-white/70 hover:text-white hover:bg-white/20 transition-colors\"\n title=\"Cerrar vista previa\"\n >\n <i className=\"fas fa-times text-xs\"></i>\n </button>\n </div>\n\n {/* iPhone Notch Mock */}\n <div className=\"h-7 w-full bg-black flex justify-center items-start shrink-0\">\n <div className=\"w-[120px] h-5 bg-black rounded-b-xl\"></div>\n </div>\n\n {/* Browser URL Bar Mock */}\n <div className=\"px-4 py-2 bg-black/50 border-b border-white/5 flex items-center justify-center shrink-0\">\n <div className=\"bg-white/5 rounded-lg px-3 py-1 flex items-center gap-2 text-[10px] text-white/40 w-fit\">\n <i className=\"fas fa-lock text-[8px]\"></i>\n <span>decido.com/track/{token}</span>\n </div>\n </div>\n\n {/* iframe Container */}\n <div className=\"flex-1 relative bg-black\">\n {isLoading && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-[#0E1525] text-white/50\">\n <i className=\"fas fa-circle-notch fa-spin text-2xl text-emerald-500 mb-3\"></i>\n <span className=\"text-xs font-medium\">Cargando vista móvil...</span>\n </div>\n )}\n <iframe \n src={trackingUrl}\n className={`w-full h-full border-none transition-opacity duration-300 ${isLoading ? 'opacity-0' : 'opacity-100'}`}\n onLoad={() => setIsLoading(false)}\n title=\"Tracking Portal Preview\"\n />\n </div>\n \n {/* iPhone Bottom Indicator */}\n <div className=\"h-6 w-full bg-black flex justify-center items-center shrink-0\">\n <div className=\"w-[120px] h-1 bg-white/20 rounded-full\"></div>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useCallback, useMemo, useState } from 'react';\nimport {\n type Connection,\n MarkerType,\n BackgroundVariant,\n} from '@xyflow/react';\nimport { FlowEditor } from '@decido/canvas-ai';\nimport { MessageNode } from '../nodes/MessageNode';\nimport { BotActionNode } from '../nodes/BotActionNode';\nimport { TrackingPreview } from '../components/TrackingPreview';\n\n// ─── Node Types Registry ─────────────────────────────────────\nconst nodeTypes = {\n messageNode: MessageNode,\n botAction: BotActionNode,\n};\n\n// ─── Demo Flow: WhatsApp conversation pipeline ──────────────\nconst initialNodes: any[] = [\n // Trigger\n {\n id: 'trigger',\n type: 'messageNode',\n position: { x: 50, y: 300 },\n data: { label: 'Mensaje Entrante de WhatsApp', type: 'incoming', text: 'Hola, ¿cómo va mi pedido XJ-901?', time: '10:05 AM' },\n },\n // AI Intent Recognition\n {\n id: 'ai-intent',\n type: 'botAction',\n position: { x: 400, y: 280 },\n data: { label: 'Reconocimiento Intención IA', actionType: 'analyze', description: 'Detectar Intención: \"Estado de Pedido\"' },\n },\n // Database Check\n {\n id: 'db-check',\n type: 'botAction',\n position: { x: 750, y: 150 },\n data: { label: 'Acción Ejecutada', actionType: 'decision', description: 'Action: GENERATE_TRACKING_LINK' },\n },\n {\n id: 'escalate-human',\n type: 'botAction',\n position: { x: 750, y: 400 },\n data: { label: 'Evaluar Sentimiento (Frustrado)', actionType: 'escalate', description: 'Ruteo Inmediato a Humano' },\n },\n // Responses\n {\n id: 'reply-status',\n type: 'messageNode',\n position: { x: 1050, y: 150 },\n data: { label: 'Regla: SEND_WA_TEMPLATE', type: 'outgoing', text: 'Template: pedido_produccion\\nParámetros: [legacyId, trackUrl]', time: '10:06 AM' },\n },\n {\n id: 'assign-agent',\n type: 'messageNode',\n position: { x: 1050, y: 400 },\n data: { label: 'Soporte Asignado', type: 'system', text: 'Asignando Chat #3421 (Humano en la ruta)' },\n },\n];\n\nconst initialEdges = [\n { id: 'e1', source: 'trigger', target: 'ai-intent', animated: true, style: { stroke: '#22c55e' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#22c55e' } },\n { id: 'e2', source: 'ai-intent', target: 'db-check', label: 'Intent: Query Order', animated: true, style: { stroke: '#3b82f6' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#3b82f6' } },\n { id: 'e3', source: 'db-check', target: 'reply-status', label: 'Pedido Encontrado', style: { stroke: '#22c55e' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#22c55e' } },\n { id: 'e4', source: 'ai-intent', target: 'escalate-human', label: 'Intent: Queja/Reclamo', style: { stroke: '#ef4444' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#ef4444' } },\n { id: 'e5', source: 'db-check', sourceHandle: 'no', target: 'escalate-human', label: 'Pedido No Encontrado', style: { stroke: '#ef4444', strokeDasharray: '5 5' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#ef4444' } },\n { id: 'e6', source: 'escalate-human', target: 'assign-agent', style: { stroke: '#f59e0b' }, markerEnd: { type: MarkerType.ArrowClosed, color: '#f59e0b' } },\n];\n\n// ═══════════════════════════════════════════════════════════════\n// FLOW CANVAS TAB\n// ═══════════════════════════════════════════════════════════════\nexport const FlowCanvasTab = () => {\n const [nodes, setNodes] = useState(initialNodes);\n const [edges, setEdges] = useState<any[]>(initialEdges);\n const [previewOpen, setPreviewOpen] = useState(false);\n\n const onNodesChange = useCallback((changes: any) => {\n // Simple mock for Discovery Studio nodes\n }, []);\n\n const onEdgesChange = useCallback((changes: any) => {\n // Simple mock for Discovery Studio edges\n }, []);\n\n const onConnect = useCallback((params: Connection) => {\n setEdges((eds: any[]) => [...eds, { ...params, id: `e-${Date.now()}`, animated: true }]);\n }, [setEdges]);\n\n const onNodeClick = useCallback((event: React.MouseEvent, node: any) => {\n if (node.data?.description?.includes('GENERATE_TRACKING_LINK') || node.data?.text?.includes('trackUrl')) {\n setPreviewOpen(true);\n }\n }, []);\n\n return (\n <div className=\"flex-1 min-h-0 flex flex-col overflow-hidden\">\n {/* Toolbar */}\n <div className=\"h-9 shrink-0 flex items-center gap-2 px-3 border-b\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <span className=\"text-[10px] font-black uppercase tracking-widest\" style={{ color: 'var(--text-secondary)' }}>\n <i className=\"fas fa-project-diagram mr-1.5\"></i>Flujo de Conversación\n </span>\n <div className=\"flex-1\"></div>\n\n {/* Node palette */}\n <div className=\"flex items-center gap-1\">\n {[\n { icon: 'fas fa-comment-dots', label: 'Mensaje', color: '#25D366' },\n { icon: 'fas fa-brain', label: 'IA', color: '#8b5cf6' },\n { icon: 'fas fa-code-branch', label: 'Decisión', color: '#06b6d4' },\n { icon: 'fas fa-cart-plus', label: 'Pedido', color: '#f59e0b' },\n ].map(item => (\n <div key={item.label}\n className=\"flex items-center gap-1 px-2 py-1 rounded-md text-[9px] font-bold cursor-grab transition-all\"\n style={{ border: '1px dashed var(--border-color)', color: item.color }}\n title={`Arrastra para agregar: ${item.label}`}\n >\n <i className={item.icon}></i>\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n\n <div className=\"h-5 w-px mx-1\" style={{ background: 'var(--border-color)' }}></div>\n\n <button className=\"px-2 py-1 rounded-md text-[9px] font-bold transition-all\"\n style={{ color: 'var(--text-secondary)' }}\n title=\"Fit view\">\n <i className=\"fas fa-compress-arrows-alt\"></i>\n </button>\n </div>\n\n {/* ReactFlow Canvas */}\n <div className=\"flex-1 min-h-0 relative\">\n <FlowEditor\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onConnect={onConnect}\n onNodeClick={onNodeClick}\n nodeTypes={nodeTypes as any}\n />\n </div>\n\n {/* Live Tracking Preview Modal */}\n {previewOpen && (\n <TrackingPreview onClose={() => setPreviewOpen(false)} />\n )}\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\n\n// ─── Demo Analytics Data ─────────────────────────────────────\nconst HOURLY_DATA = [\n { hour: '6AM', sent: 2, received: 5 },\n { hour: '7AM', sent: 8, received: 12 },\n { hour: '8AM', sent: 15, received: 22 },\n { hour: '9AM', sent: 28, received: 35 },\n { hour: '10AM', sent: 42, received: 48 },\n { hour: '11AM', sent: 38, received: 41 },\n { hour: '12PM', sent: 20, received: 25 },\n { hour: '1PM', sent: 15, received: 18 },\n { hour: '2PM', sent: 30, received: 33 },\n { hour: '3PM', sent: 45, received: 52 },\n { hour: '4PM', sent: 35, received: 40 },\n { hour: '5PM', sent: 22, received: 28 },\n { hour: '6PM', sent: 10, received: 15 },\n];\n\nconst KPI_CARDS = [\n { label: 'Mensajes Hoy', value: '347', change: '+12%', icon: 'fas fa-paper-plane', color: '#22c55e', positive: true },\n { label: 'Tiempo Respuesta', value: '2.4s', change: '-18%', icon: 'fas fa-clock', color: '#3b82f6', positive: true },\n { label: 'Tasa Conversión', value: '24.5%', change: '+3.2%', icon: 'fas fa-funnel-dollar', color: '#f59e0b', positive: true },\n { label: 'Chats Activos', value: '12', change: '+2', icon: 'fas fa-comments', color: '#8b5cf6', positive: true },\n { label: 'Pedidos vía WA', value: '8', change: '+1', icon: 'fas fa-cart-plus', color: '#06b6d4', positive: true },\n { label: 'Escalamientos', value: '3', change: '+1', icon: 'fas fa-exclamation-triangle', color: '#ef4444', positive: false },\n];\n\nconst TOP_INTENTS = [\n { intent: 'Estado de Pedido', count: 156, pct: 45 },\n { intent: 'Cotización', count: 89, pct: 26 },\n { intent: 'Catálogo', count: 52, pct: 15 },\n { intent: 'Reclamo', count: 28, pct: 8 },\n { intent: 'Otro', count: 22, pct: 6 },\n];\n\nconst INTENT_COLORS = ['#22c55e', '#3b82f6', '#f59e0b', '#ef4444', '#6b7280'];\n\n// ─── Mini Bar Chart (CSS only) ───────────────────────────────\nconst BarChart: React.FC<{ data: typeof HOURLY_DATA }> = ({ data }) => {\n const max = Math.max(...data.map(d => Math.max(d.sent, d.received)));\n return (\n <div className=\"flex items-end gap-1 h-32\">\n {data.map((d, i) => (\n <div key={i} className=\"flex-1 flex flex-col items-center gap-0.5\">\n <div className=\"w-full flex items-end gap-px\" style={{ height: '100px' }}>\n <div className=\"flex-1 rounded-t-sm transition-all duration-500\"\n style={{ height: `${(d.received / max) * 100}%`, background: 'rgba(37,211,102,0.6)' }}\n title={`Recibidos: ${d.received}`}></div>\n <div className=\"flex-1 rounded-t-sm transition-all duration-500\"\n style={{ height: `${(d.sent / max) * 100}%`, background: 'rgba(59,130,246,0.6)' }}\n title={`Enviados: ${d.sent}`}></div>\n </div>\n <span className=\"text-[7px] font-bold\" style={{ color: 'var(--text-secondary)' }}>{d.hour}</span>\n </div>\n ))}\n </div>\n );\n};\n\n// ═══════════════════════════════════════════════════════════════\n// ANALYTICS TAB\n// ═══════════════════════════════════════════════════════════════\nexport const AnalyticsTab = () => {\n const [animatedValues, setAnimatedValues] = useState<Record<string, number>>({});\n\n // Animate intent progress bars on mount\n useEffect(() => {\n const timer = setTimeout(() => {\n const vals: Record<string, number> = {};\n TOP_INTENTS.forEach(intent => { vals[intent.intent] = intent.pct; });\n setAnimatedValues(vals);\n }, 200);\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <div className=\"flex-1 overflow-y-auto p-4 space-y-4 scrollbar-thin\" style={{ background: 'var(--bg-primary)' }}>\n\n {/* KPI Cards */}\n <div className=\"grid grid-cols-3 gap-3\">\n {KPI_CARDS.map((kpi, i) => (\n <div key={kpi.label}\n className=\"p-3 rounded-xl border transition-all hover:shadow-lg\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)', animationDelay: `${i * 80}ms` }}>\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"w-8 h-8 rounded-lg flex items-center justify-center\"\n style={{ background: `${kpi.color}15` }}>\n <i className={`${kpi.icon} text-xs`} style={{ color: kpi.color }}></i>\n </div>\n <span className={`text-[10px] font-bold px-1.5 py-0.5 rounded ${kpi.positive ? 'text-green-500' : 'text-red-500'}`}\n style={{ background: kpi.positive ? 'rgba(34,197,94,0.1)' : 'rgba(239,68,68,0.1)' }}>\n {kpi.change}\n </span>\n </div>\n <div className=\"text-xl font-black\" style={{ color: 'var(--text-primary)' }}>{kpi.value}</div>\n <div className=\"text-[10px] font-medium mt-0.5\" style={{ color: 'var(--text-secondary)' }}>{kpi.label}</div>\n </div>\n ))}\n </div>\n\n {/* Charts Row */}\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Activity Chart */}\n <div className=\"p-4 rounded-xl border\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-xs font-bold\" style={{ color: 'var(--text-primary)' }}>\n <i className=\"fas fa-chart-bar mr-2\" style={{ color: 'var(--brand-primary)' }}></i>Actividad por Hora\n </h3>\n <div className=\"flex items-center gap-3 text-[9px]\">\n <span className=\"flex items-center gap-1\">\n <span className=\"w-2 h-2 rounded-sm\" style={{ background: 'rgba(37,211,102,0.6)' }}></span>\n <span style={{ color: 'var(--text-secondary)' }}>Recibidos</span>\n </span>\n <span className=\"flex items-center gap-1\">\n <span className=\"w-2 h-2 rounded-sm\" style={{ background: 'rgba(59,130,246,0.6)' }}></span>\n <span style={{ color: 'var(--text-secondary)' }}>Enviados</span>\n </span>\n </div>\n </div>\n <BarChart data={HOURLY_DATA} />\n </div>\n\n {/* Intent Distribution */}\n <div className=\"p-4 rounded-xl border\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <h3 className=\"text-xs font-bold mb-4\" style={{ color: 'var(--text-primary)' }}>\n <i className=\"fas fa-brain mr-2\" style={{ color: 'var(--brand-primary)' }}></i>Intenciones Detectadas\n </h3>\n <div className=\"space-y-3\">\n {TOP_INTENTS.map((intent, i) => (\n <div key={intent.intent}>\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-[11px] font-semibold\" style={{ color: 'var(--text-primary)' }}>{intent.intent}</span>\n <span className=\"text-[10px] font-bold\" style={{ color: 'var(--text-secondary)' }}>{intent.count} ({intent.pct}%)</span>\n </div>\n <div className=\"h-2 rounded-full overflow-hidden\" style={{ background: 'var(--bg-muted)' }}>\n <div className=\"h-full rounded-full transition-all duration-1000 ease-out\"\n style={{\n width: `${animatedValues[intent.intent] || 0}%`,\n background: INTENT_COLORS[i],\n }}></div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Heatmap */}\n <div className=\"p-4 rounded-xl border\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <h3 className=\"text-xs font-bold mb-4\" style={{ color: 'var(--text-primary)' }}>\n <i className=\"fas fa-fire-alt mr-2\" style={{ color: 'var(--brand-primary)' }}></i>Heatmap Semanal\n </h3>\n <div className=\"grid gap-1\" style={{ gridTemplateColumns: 'auto repeat(24, 1fr)' }}>\n {/* Header row */}\n <div></div>\n {Array.from({ length: 24 }, (_, i) => (\n <div key={i} className=\"text-[7px] text-center font-bold\" style={{ color: 'var(--text-secondary)' }}>\n {i}\n </div>\n ))}\n\n {/* Days */}\n {['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'].map((day, di) => (\n <React.Fragment key={day}>\n <div className=\"text-[9px] font-bold pr-2 flex items-center\" style={{ color: 'var(--text-secondary)' }}>{day}</div>\n {Array.from({ length: 24 }, (_, hi) => {\n const intensity = Math.random();\n const isWeekend = di >= 5;\n const isWorkHour = hi >= 7 && hi <= 18;\n const adjustedIntensity = (isWeekend ? 0.3 : 1) * (isWorkHour ? 1 : 0.4) * intensity;\n return (\n <div\n key={hi}\n className=\"aspect-square rounded-sm transition-all hover:ring-1 hover:ring-white/30 cursor-pointer\"\n style={{\n background: adjustedIntensity > 0.6 ? '#22c55e' :\n adjustedIntensity > 0.3 ? 'rgba(34,197,94,0.4)' :\n adjustedIntensity > 0.1 ? 'rgba(34,197,94,0.15)' : 'var(--bg-muted)',\n }}\n title={`${day} ${hi}:00 — ${Math.floor(adjustedIntensity * 50)} mensajes`}\n ></div>\n );\n })}\n </React.Fragment>\n ))}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\n\nexport const ApiTesterTab = () => {\n const [phone, setPhone] = useState('');\n const [msgType, setMsgType] = useState('text');\n const [payloadText, setPayloadText] = useState('Hola desde Decido OS 🚀');\n const [templateName, setTemplateName] = useState('hello_world'); // Default meta template\n const [templateLanguage, setTemplateLanguage] = useState('en_US');\n const [loading, setLoading] = useState(false);\n const [result, setResult] = useState<any>(null);\n \n // Address Book (LocalStorage)\n const [savedPhones, setSavedPhones] = useState<{name: string, number: string}[]>([]);\n const [newPhoneName, setNewPhoneName] = useState('');\n const [showPhoneSave, setShowPhoneSave] = useState(false);\n\n // Template Dynamic Variables\n const [templateVariables, setTemplateVariables] = useState<string[]>([]);\n\n // Templates fetched from backend\n const [templates, setTemplates] = useState<any[]>([]);\n const [fetchingTemplates, setFetchingTemplates] = useState(false);\n\n React.useEffect(() => {\n const saved = localStorage.getItem('wa_api_tester_phones');\n if (saved) {\n try { setSavedPhones(JSON.parse(saved)); } catch (e) {}\n }\n fetchTemplates();\n }, []);\n\n React.useEffect(() => {\n const selected = templates.find(t => t.name === templateName && t.language === templateLanguage);\n if (selected) {\n const bodyComponent = selected.components?.find((c: any) => c.type === 'BODY' || c.type === 'body');\n if (bodyComponent && bodyComponent.text) {\n const matches = bodyComponent.text.match(/\\{\\{\\d+\\}\\}/g);\n if (matches) {\n const maxVar = Math.max(...matches.map((m: string) => parseInt(m.replace(/\\{|\\}/g, ''))));\n // Check if current variables array is long enough, otherwise fill with empty strings\n setTemplateVariables(prev => {\n const next = [...prev];\n while(next.length < maxVar) next.push('');\n return next.slice(0, maxVar);\n });\n return;\n }\n }\n }\n setTemplateVariables([]);\n }, [templateName, templateLanguage, templates]);\n\n const fetchTemplates = async () => {\n setFetchingTemplates(true);\n try {\n const API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n const res = await fetch(`${API_URL}/api/whatsapp/templates`);\n if (res.ok) {\n const data = await res.json();\n if (!data.error && Array.isArray(data)) {\n setTemplates(data);\n if (data.length > 0) {\n setTemplateName(data[0].name);\n setTemplateLanguage(data[0].language);\n }\n }\n }\n } catch (err) {\n console.error('Failed to fetch templates', err);\n } finally {\n setFetchingTemplates(false);\n }\n };\n\n const handleSavePhone = () => {\n if (!phone || !newPhoneName) return;\n const newList = [...savedPhones, { name: newPhoneName, number: phone }];\n setSavedPhones(newList);\n localStorage.setItem('wa_api_tester_phones', JSON.stringify(newList));\n setNewPhoneName('');\n setShowPhoneSave(false);\n };\n\n const handleDeletePhone = (number: string) => {\n const newList = savedPhones.filter(p => p.number !== number);\n setSavedPhones(newList);\n localStorage.setItem('wa_api_tester_phones', JSON.stringify(newList));\n if (phone === number) setPhone('');\n };\n\n const handleSend = async () => {\n if (!phone) {\n setResult({ error: 'Ingresa un número de teléfono válido (ej. 52155...)' });\n return;\n }\n\n setLoading(true);\n setResult(null);\n\n try {\n const payload: any = {};\n if (msgType === 'text') {\n payload.text = payloadText;\n } else if (msgType === 'template') {\n payload.templateName = templateName;\n payload.language = templateLanguage;\n payload.components = [];\n if (templateVariables.length > 0) {\n payload.components.push({\n type: \"body\",\n parameters: templateVariables.map(v => ({ type: \"text\", text: v || \"n/a\" }))\n });\n }\n } else if (msgType === 'interactive') {\n payload.bodyText = payloadText;\n payload.buttons = [\n { id: 'opt_1', title: 'Sí, me interesa' },\n { id: 'opt_2', title: 'No, gracias' }\n ];\n }\n\n const API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n \n const res = await fetch(`${API_URL}/api/whatsapp/send-test`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n to: phone,\n type: msgType,\n payload\n })\n });\n\n const data = await res.json();\n setResult(data);\n } catch (err: any) {\n setResult({ error: err.message });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"flex-1 flex flex-col min-h-0 overflow-y-auto p-6\" style={{ background: 'var(--bg-primary)', color: 'var(--text-primary)' }}>\n <div className=\"max-w-2xl mx-auto w-full space-y-6\">\n <div>\n <h2 className=\"text-xl font-bold mb-1\">WhatsApp API Tester</h2>\n <p className=\"text-sm\" style={{ color: 'var(--text-secondary)' }}>\n Prueba el envío de diferentes formatos soportados por Meta Cloud API directamente.\n </p>\n </div>\n\n <div className=\"p-5 rounded-xl border space-y-4\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n \n {/* Destination */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"block text-xs font-bold uppercase tracking-wider\" style={{ color: 'var(--text-secondary)' }}>Teléfono Destino (Sandbox)</label>\n {phone && !savedPhones.find(p => p.number === phone) && (\n <button\n onClick={() => setShowPhoneSave(!showPhoneSave)}\n className=\"text-[10px] font-bold text-indigo-400 hover:text-indigo-300 transition-colors\"\n >\n + Guardar Número\n </button>\n )}\n </div>\n\n {showPhoneSave && (\n <div className=\"flex gap-2 mb-2 p-2 rounded-lg bg-indigo-500/10 border border-indigo-500/30\">\n <input \n type=\"text\" \n placeholder=\"Nombre (ej. Mi Celular)\"\n className=\"flex-1 px-3 py-1.5 text-xs rounded border outline-none bg-black/20 text-white border-transparent focus:border-indigo-500\"\n value={newPhoneName}\n onChange={(e) => setNewPhoneName(e.target.value)}\n />\n <button onClick={handleSavePhone} className=\"px-3 py-1.5 bg-indigo-500 text-white rounded text-xs font-bold hover:bg-indigo-600\">Guardar</button>\n <button onClick={() => setShowPhoneSave(false)} className=\"px-3 py-1.5 bg-white/10 text-white rounded text-xs hover:bg-white/20\">Cancelar</button>\n </div>\n )}\n\n <div className=\"flex flex-col gap-2\">\n {savedPhones.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-1\">\n {savedPhones.map((p, idx) => (\n <div \n key={idx} \n className={`flex items-center gap-2 px-3 py-1.5 rounded-full border border-indigo-500/30 text-xs cursor-pointer transition-colors ${phone === p.number ? 'bg-indigo-500 text-white' : 'bg-transparent text-indigo-300 hover:bg-indigo-500/10'}`}\n onClick={() => setPhone(p.number)}\n >\n <i className=\"fas fa-user-circle\"></i>\n <span className=\"font-bold\">{p.name}</span>\n <button \n onClick={(e) => { e.stopPropagation(); handleDeletePhone(p.number); }}\n className=\"w-4 h-4 rounded-full flex items-center justify-center hover:bg-red-500/50 hover:text-white text-indigo-300 transition-colors\"\n >\n <i className=\"fas fa-times text-[8px]\"></i>\n </button>\n </div>\n ))}\n </div>\n )}\n\n <input \n type=\"text\" \n placeholder=\"Ej. 52155... (Incluye código de país)\"\n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none transition-all focus:border-indigo-500 font-mono\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n />\n <p className=\"text-[10px] mt-1 text-amber-500/80\"><i className=\"fas fa-exclamation-triangle mr-1\"></i>Asegúrate de que este número esté registrado en Meta for Developers si tu app está en modo desarrollo.</p>\n </div>\n </div>\n\n {/* Format Type */}\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Tipo de Mensaje</label>\n <div className=\"flex gap-2\">\n {['text', 'template', 'interactive'].map(type => (\n <button \n key={type}\n onClick={() => setMsgType(type)}\n className={`px-4 py-2 text-sm font-medium rounded-lg transition-all capitalize border ${msgType === type ? 'border-indigo-500 bg-indigo-500/10 text-indigo-400' : 'hover:bg-white/5 opacity-70'}`}\n style={{ borderColor: msgType === type ? '' : 'var(--border-color)' }}\n >\n {type}\n </button>\n ))}\n </div>\n </div>\n\n {/* Payload editor based on type */}\n <div className=\"pt-2\">\n {msgType === 'text' && (\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Mensaje de Texto</label>\n <textarea \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none min-h-[100px]\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={payloadText}\n onChange={(e) => setPayloadText(e.target.value)}\n />\n </div>\n )}\n\n {msgType === 'template' && (\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Seleccionar Template (Aprobado)</label>\n {fetchingTemplates ? (\n <div className=\"text-xs p-2 text-indigo-400\">Cargando plantillas de Meta...</div>\n ) : templates.length > 0 ? (\n <select \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none font-mono\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={`${templateName}::${templateLanguage}`}\n onChange={(e) => {\n const [name, lang] = e.target.value.split('::');\n setTemplateName(name);\n setTemplateLanguage(lang);\n }}\n >\n {templates.filter(t => t.status === 'APPROVED').map(t => (\n <option key={`${t.id || t.name}_${t.language}`} value={`${t.name}::${t.language}`}>\n {t.name} ({t.language}) [{t.category}]\n </option>\n ))}\n </select>\n ) : (\n <input \n type=\"text\" \n placeholder=\"No se pudieron cargar, ingresa el nombre manual (ej. hello_world)\"\n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={templateName}\n onChange={(e) => setTemplateName(e.target.value)}\n />\n )}\n\n {templateVariables.length > 0 && (\n <div className=\"mt-4 p-3 rounded bg-black/20 border border-white/5 space-y-3\">\n <label className=\"block text-xs font-bold text-indigo-300\">Variables Requeridas (Cuerpo)</label>\n {templateVariables.map((val, idx) => (\n <div key={idx} className=\"flex items-center gap-2\">\n <span className=\"text-xs font-mono text-white/50 w-8\">{`{{${idx+1}}}`}</span>\n <input \n type=\"text\" \n placeholder={`Valor para la variable (opcional)`}\n className=\"flex-1 px-3 py-1.5 text-xs rounded border outline-none bg-black/40 text-white border-transparent focus:border-indigo-500\"\n value={val}\n onChange={(e) => {\n const newVars = [...templateVariables];\n newVars[idx] = e.target.value;\n setTemplateVariables(newVars);\n }}\n />\n </div>\n ))}\n </div>\n )}\n <p className=\"text-[10px] mt-2\" style={{ color: 'var(--text-secondary)' }}>Si la plantilla usa variables dinámicas en encabezados o links, la API intentará autocompletarlos si no se incluyen aquí.</p>\n </div>\n )}\n\n {msgType === 'interactive' && (\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Texto Principal (Con Botones)</label>\n <textarea \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none min-h-[80px]\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={payloadText}\n onChange={(e) => setPayloadText(e.target.value)}\n />\n <div className=\"mt-3 flex gap-2\">\n <div className=\"px-3 py-1.5 rounded bg-indigo-500/20 text-indigo-400 text-xs font-bold border border-indigo-500/30\">Botón: Sí, me interesa</div>\n <div className=\"px-3 py-1.5 rounded bg-indigo-500/20 text-indigo-400 text-xs font-bold border border-indigo-500/30\">Botón: No, gracias</div>\n </div>\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"pt-4 border-t flex justify-end\" style={{ borderColor: 'var(--border-color)' }}>\n <button \n onClick={handleSend}\n disabled={loading}\n className={`px-6 py-2 rounded-lg font-bold text-sm text-white flex items-center gap-2 ${loading ? 'opacity-50 cursor-not-allowed' : 'hover:bg-indigo-600'} bg-indigo-500 transition-colors`}\n >\n {loading ? <i className=\"fas fa-spinner fa-spin\"></i> : <i className=\"fab fa-whatsapp\"></i>}\n {loading ? 'Enviando...' : 'Enviar Prueba'}\n </button>\n </div>\n </div>\n\n {/* Status/Result */}\n {result && (\n <div className={`p-4 rounded-xl border ${result.error || !result.success ? 'bg-red-500/10 border-red-500/30' : 'bg-green-500/10 border-green-500/30'}`}>\n <h3 className={`text-sm font-bold mb-2 ${result.error || !result.success ? 'text-red-400' : 'text-green-400'}`}>\n {result.error || !result.success ? 'Error en el envío' : '¡Mensaje enviado con éxito!'}\n </h3>\n <pre className=\"text-[10px] overflow-x-auto p-3 rounded bg-black/50 text-slate-300\">\n {JSON.stringify(result, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\n\nexport const TemplateManagerTab = () => {\n const [templates, setTemplates] = useState<any[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [creating, setCreating] = useState(false);\n\n // Form state\n const [name, setName] = useState('');\n const [category, setCategory] = useState('UTILITY');\n const [language, setLanguage] = useState('es');\n const [headerText, setHeaderText] = useState('');\n const [bodyText, setBodyText] = useState('Hola {{1}}, tu pedido está listo.');\n const [footerText, setFooterText] = useState('');\n const [buttons, setButtons] = useState<Array<{type: string, text: string, url?: string}>>([]);\n\n useEffect(() => {\n fetchTemplates();\n }, []);\n\n const fetchTemplates = async () => {\n setLoading(true);\n setError(null);\n try {\n const API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n const res = await fetch(`${API_URL}/api/whatsapp/templates`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const data = await res.json();\n if (data.error) throw new Error(data.error);\n setTemplates(data || []);\n } catch (err: any) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const handleCreate = async () => {\n if (!name || !bodyText) {\n setError(\"Por favor completa el nombre y el texto.\");\n return;\n }\n\n setLoading(true);\n try {\n const API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n \n // Build the components array for Meta API\n const components: any[] = [];\n \n if (headerText.trim()) {\n components.push({ type: 'HEADER', format: 'TEXT', text: headerText });\n }\n \n // Extract variables to provide examples (Meta requires examples if variables are used)\n const varMatches = bodyText.match(/\\{\\{\\d+\\}\\}/g);\n let exampleBody = undefined;\n if (varMatches && varMatches.length > 0) {\n // Generate dummy examples based on count\n const dummyVars = varMatches.map((_, i) => `Variable${i+1}`);\n exampleBody = { body_text: [dummyVars] };\n }\n\n components.push({ \n type: 'BODY', \n text: bodyText,\n ...(exampleBody ? { example: exampleBody } : {})\n });\n\n if (footerText.trim()) {\n components.push({ type: 'FOOTER', text: footerText });\n }\n\n if (buttons.length > 0) {\n components.push({\n type: 'BUTTONS',\n buttons: buttons.map(b => {\n if (b.type === 'URL') return { type: 'URL', text: b.text, url: b.url };\n return { type: 'QUICK_REPLY', text: b.text };\n })\n });\n }\n\n const payload = {\n name: name.toLowerCase().replace(/[^a-z0-9_]/g, '_'),\n language,\n category,\n components\n };\n\n const res = await fetch(`${API_URL}/api/whatsapp/templates`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n const data = await res.json();\n if (!res.ok || data.error) throw new Error(data.error || 'Error al crear la plantilla');\n \n setCreating(false);\n // reset form\n setName('');\n setHeaderText('');\n setFooterText('');\n setButtons([]);\n setBodyText('Hola {{1}}, tu pedido está listo.');\n \n // Reload templates\n await fetchTemplates();\n } catch (err: any) {\n setError(err.message);\n setLoading(false);\n }\n };\n\n const handleDelete = async (templateName: string) => {\n if (!window.confirm(`¿Seguro que deseas eliminar la plantilla '${templateName}' permanentemente de Meta?`)) return;\n \n setLoading(true);\n try {\n const API_URL = (import.meta as any).env?.VITE_API_BASE_URL || 'http://localhost:3001';\n const res = await fetch(`${API_URL}/api/whatsapp/templates/${templateName}`, {\n method: 'DELETE'\n });\n const data = await res.json();\n if (!res.ok || data.error) throw new Error(data.error || 'Error al eliminar');\n \n await fetchTemplates();\n } catch (err: any) {\n setError(err.message);\n setLoading(false);\n }\n };\n\n return (\n <div className=\"flex-1 flex flex-col min-h-0 overflow-y-auto p-6\" style={{ background: 'var(--bg-primary)', color: 'var(--text-primary)' }}>\n <div className=\"max-w-4xl mx-auto w-full space-y-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-bold mb-1\">Gestor de Plantillas (Meta)</h2>\n <p className=\"text-sm\" style={{ color: 'var(--text-secondary)' }}>\n Crea y administra tus plantillas oficiales de WhatsApp sin salir de Decido OS.\n </p>\n </div>\n <button \n onClick={() => setCreating(!creating)}\n className=\"px-4 py-2 bg-indigo-500 hover:bg-indigo-600 text-white text-sm font-bold rounded-lg transition-colors\"\n >\n {creating ? 'Ver Lista' : '+ Nueva Plantilla'}\n </button>\n </div>\n\n {error && (\n <div className=\"p-4 rounded-lg bg-red-500/10 border border-red-500/30 text-red-400 text-sm font-medium\">\n <i className=\"fas fa-exclamation-triangle mr-2\"></i> {error}\n </div>\n )}\n\n {creating ? (\n <div className=\"p-6 rounded-xl border space-y-4\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <h3 className=\"font-bold text-lg border-b pb-2 mb-4\" style={{ borderColor: 'var(--border-color)' }}>Crear Nueva Plantilla</h3>\n \n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Nombre de la Plantilla</label>\n <input \n type=\"text\" \n placeholder=\"ej. welcome_message_01\"\n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none font-mono\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={name}\n onChange={(e) => setName(e.target.value.toLowerCase().replace(/[^a-z0-9_]/g, '_'))}\n />\n <p className=\"text-[10px] mt-1\" style={{ color: 'var(--text-secondary)' }}>Solo minúsculas y guiones bajos (_)</p>\n </div>\n \n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Categoría</label>\n <select \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={category}\n onChange={(e) => setCategory(e.target.value)}\n >\n <option value=\"UTILITY\">Utilidad (Avisos, tracking, alertas)</option>\n <option value=\"MARKETING\">Marketing (Promociones, ventas)</option>\n <option value=\"AUTHENTICATION\">Autenticación (OTPs)</option>\n </select>\n </div>\n </div>\n\n <div>\n <label className=\"block text-xs font-bold uppercase tracking-wider mb-2\" style={{ color: 'var(--text-secondary)' }}>Idioma (Locale)</label>\n <select \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none max-w-xs\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={language}\n onChange={(e) => setLanguage(e.target.value)}\n >\n <option value=\"es\">Español (es)</option>\n <option value=\"es_LA\">Español Latino (es_LA)</option>\n <option value=\"en_US\">Inglés (en_US)</option>\n </select>\n </div>\n\n <div className=\"pt-4 border-t space-y-4\" style={{ borderColor: 'var(--border-color)' }}>\n <h4 className=\"text-xs font-bold uppercase tracking-wider\" style={{ color: 'var(--text-secondary)' }}>Estructura del Mensaje</h4>\n \n {/* Header */}\n <div>\n <label className=\"block text-xs font-bold mb-2\">Encabezado (Opcional)</label>\n <input \n type=\"text\" \n placeholder=\"Ej. ¡Alerta de Promoción!\"\n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={headerText}\n onChange={(e) => setHeaderText(e.target.value)}\n />\n </div>\n\n {/* Body */}\n <div>\n <label className=\"block text-xs font-bold mb-2\">Cuerpo (Obligatorio)</label>\n <textarea \n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none min-h-[100px]\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={bodyText}\n onChange={(e) => setBodyText(e.target.value)}\n />\n <p className=\"text-[10px] mt-1\" style={{ color: 'var(--text-secondary)' }}>Usa {\"{{\"}1{\"}}\"}, {\"{{\"}2{\"}}\"} para variables que se llenarán dinámicamente.</p>\n </div>\n\n {/* Footer */}\n <div>\n <label className=\"block text-xs font-bold mb-2\">Pie de página (Opcional)</label>\n <input \n type=\"text\" \n placeholder=\"Ej. Responde STOP para cancelar\"\n className=\"w-full px-4 py-2 text-sm rounded-lg border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={footerText}\n onChange={(e) => setFooterText(e.target.value)}\n />\n </div>\n\n {/* Buttons */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"block text-xs font-bold\">Botones (Máx 3)</label>\n <div className=\"flex gap-2\">\n <button \n onClick={() => { if(buttons.length < 3) setButtons([...buttons, {type: 'QUICK_REPLY', text: 'Nuevo Botón'}]) }}\n className=\"px-2 py-1 text-[10px] bg-white/10 hover:bg-white/20 rounded font-bold transition-colors\"\n disabled={buttons.length >= 3}\n >\n + Respuesta Rápida\n </button>\n <button \n onClick={() => { if(buttons.length < 3) setButtons([...buttons, {type: 'URL', text: 'Saber Más', url: 'https://'}]) }}\n className=\"px-2 py-1 text-[10px] bg-white/10 hover:bg-white/20 rounded font-bold transition-colors\"\n disabled={buttons.length >= 3}\n >\n + Enlace Web (URL)\n </button>\n </div>\n </div>\n \n {buttons.length > 0 && (\n <div className=\"space-y-2\">\n {buttons.map((btn, idx) => (\n <div key={idx} className=\"flex gap-2 items-start bg-black/20 p-2 rounded-lg border\" style={{ borderColor: 'var(--border-color)' }}>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold px-2 py-1 bg-white/10 rounded\">{btn.type === 'URL' ? '🌐 URL' : '↪️ RESPUESTA'}</span>\n <input \n type=\"text\" \n placeholder=\"Texto del botón (ej. Comprar)\"\n className=\"flex-1 px-3 py-1.5 text-xs rounded border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={btn.text}\n onChange={(e) => {\n const newBtns = [...buttons];\n newBtns[idx].text = e.target.value;\n setButtons(newBtns);\n }}\n />\n </div>\n {btn.type === 'URL' && (\n <input \n type=\"text\" \n placeholder=\"https://tulink.com\"\n className=\"w-full px-3 py-1.5 text-xs rounded border outline-none\"\n style={{ background: 'var(--bg-primary)', borderColor: 'var(--border-color)', color: 'var(--text-primary)' }}\n value={btn.url || ''}\n onChange={(e) => {\n const newBtns = [...buttons];\n newBtns[idx].url = e.target.value;\n setButtons(newBtns);\n }}\n />\n )}\n </div>\n <button \n onClick={() => setButtons(buttons.filter((_, i) => i !== idx))}\n className=\"w-8 h-8 flex items-center justify-center text-red-400 hover:bg-red-500/20 rounded\"\n >\n <i className=\"fas fa-times\"></i>\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"pt-4 border-t flex justify-end\" style={{ borderColor: 'var(--border-color)' }}>\n <button \n onClick={handleCreate}\n disabled={loading || !name || !bodyText}\n className={`px-6 py-2 rounded-lg font-bold text-sm text-white flex items-center gap-2 ${loading ? 'opacity-50 cursor-not-allowed' : 'hover:bg-green-600'} bg-green-500 transition-colors`}\n >\n {loading ? <i className=\"fas fa-spinner fa-spin\"></i> : <i className=\"fas fa-paper-plane\"></i>}\n Enviar a Meta para Aprobación\n </button>\n </div>\n </div>\n ) : (\n <div className=\"rounded-xl border overflow-hidden\" style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <div className=\"flex bg-black/20 p-4 border-b text-xs font-bold uppercase tracking-wider\" style={{ borderColor: 'var(--border-color)', color: 'var(--text-secondary)' }}>\n <div className=\"flex-[2]\">Nombre</div>\n <div className=\"flex-1\">Categoría</div>\n <div className=\"flex-1\">Idioma</div>\n <div className=\"flex-1\">Estado</div>\n <div className=\"flex-1 text-right\">Acción</div>\n </div>\n \n {loading ? (\n <div className=\"p-8 text-center text-sm\" style={{ color: 'var(--text-secondary)' }}>\n <i className=\"fas fa-spinner fa-spin mr-2\"></i> Cargando plantillas desde Meta...\n </div>\n ) : templates.length === 0 ? (\n <div className=\"p-8 text-center text-sm\" style={{ color: 'var(--text-secondary)' }}>\n No hay plantillas creadas en esta WABA (WhatsApp Business Account).\n </div>\n ) : (\n <div className=\"divide-y\" style={{ borderColor: 'var(--border-color)' }}>\n {templates.map(tpl => (\n <div key={tpl.id} className=\"flex items-center p-4 hover:bg-white/5 transition-colors text-sm\">\n <div className=\"flex-[2] font-mono font-bold\">{tpl.name}</div>\n <div className=\"flex-1 text-[11px] font-bold\"><span className=\"px-2 py-1 rounded-md bg-white/5\">{tpl.category}</span></div>\n <div className=\"flex-1\">{tpl.language}</div>\n <div className=\"flex-1 flex items-center gap-2\">\n {tpl.status === 'APPROVED' && <span className=\"w-2 h-2 rounded-full bg-green-500\"></span>}\n {tpl.status === 'PENDING' && <span className=\"w-2 h-2 rounded-full bg-amber-500\"></span>}\n {tpl.status === 'REJECTED' && <span className=\"w-2 h-2 rounded-full bg-red-500\"></span>}\n <span className=\"text-xs font-bold\">{tpl.status}</span>\n </div>\n <div className=\"flex-1 text-right\">\n <button \n onClick={() => handleDelete(tpl.name)}\n className=\"w-8 h-8 rounded-full hover:bg-red-500/20 text-red-400 transition-colors\"\n title=\"Eliminar Plantilla\"\n >\n <i className=\"fas fa-trash\"></i>\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\n\nconst SUGGESTIONS = [\n { icon: 'fas fa-comment-dots', color: 'text-indigo-400', bg: 'bg-indigo-500/10', text: 'Saluda al cliente cuando se cree un pedido' },\n { icon: 'fas fa-camera', color: 'text-amber-400', bg: 'bg-amber-500/10', text: 'Detecta pagos en fotos de comprobante' },\n { icon: 'fas fa-industry', color: 'text-emerald-400', bg: 'bg-emerald-500/10', text: 'Avisa por WhatsApp al pasar a Producción' },\n { icon: 'fas fa-truck', color: 'text-cyan-400', bg: 'bg-cyan-500/10', text: 'Pedido listo: avisa si >$1M' },\n];\n\nexport const RulesArchitectTab = () => {\n const [prompt, setPrompt] = useState('');\n const [loading, setLoading] = useState(false);\n const [result, setResult] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const generateRule = async (textToUse?: string) => {\n const text = textToUse || prompt;\n if (!text.trim()) return;\n\n setLoading(true);\n setError(null);\n setResult(null);\n\n try {\n // Use the real API endpoint we audited\n const res = await fetch('http://localhost:3001/api/whatsapp/rules/generate', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // Note: Mocking tenant matching local dev\n 'x-tenant-id': 'dev-tenant'\n },\n body: JSON.stringify({ prompt: text })\n });\n\n if (!res.ok) throw new Error('Error al generar regla IA');\n const data = await res.json();\n \n setResult(JSON.stringify(data.rule || data, null, 2));\n } catch (err: any) {\n setError(err.message || 'Error de conexión con el AI Service');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"flex-1 h-full flex flex-col items-center justify-center p-8 bg-black/20 overflow-y-auto\">\n <div className=\"w-full max-w-3xl\">\n <div className=\"text-center mb-10 text-white\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-indigo-500/20 text-indigo-400 mb-6 border border-indigo-500/30 shadow-[0_0_30px_rgba(99,102,241,0.2)]\">\n <i className=\"fas fa-wand-magic-sparkles text-2xl\"></i>\n </div>\n <h2 className=\"text-3xl font-black tracking-tight mb-3\">Workflow Architect</h2>\n <p className=\"text-zinc-400 max-w-lg mx-auto leading-relaxed\">\n Escribe una instrucción en lenguaje natural y Sentinal AI generará la regla JSON requerida para la automatización de WhatsApp.\n </p>\n </div>\n\n {/* Suggestions Grid */}\n <div className=\"grid grid-cols-2 gap-3 mb-8\">\n {SUGGESTIONS.map((s, i) => (\n <button\n key={i}\n onClick={() => {\n setPrompt(s.text);\n generateRule(s.text);\n }}\n className={`flex items-center gap-3 p-4 text-left rounded-xl transition-all border border-white/5 bg-zinc-900/50 hover:bg-zinc-800/80 hover:border-white/10 group`}\n >\n <div className={`w-8 h-8 shrink-0 flex items-center justify-center rounded-lg ${s.bg} ${s.color}`}>\n <i className={s.icon}></i>\n </div>\n <span className=\"text-sm font-medium text-zinc-300 group-hover:text-white leading-tight\">\n {s.text}\n </span>\n </button>\n ))}\n </div>\n\n {/* Input Area */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"relative group\">\n <div className=\"absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none\">\n <i className=\"fas fa-terminal text-zinc-500\"></i>\n </div>\n <input\n type=\"text\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && generateRule()}\n placeholder=\"Ej: Cuando un pedido pase de Producción a Dispatch, envía una plantilla...\"\n className=\"block w-full pl-11 pr-32 py-4 bg-zinc-950/80 border-2 border-zinc-800 rounded-xl text-sm outline-none text-zinc-200 placeholder-zinc-600 focus:border-indigo-500/50 focus:bg-zinc-950 transition-all shadow-inner\"\n />\n <button\n onClick={() => generateRule()}\n disabled={loading || !prompt.trim()}\n className=\"absolute right-2 top-2 bottom-2 px-6 bg-indigo-600 hover:bg-indigo-500 disabled:bg-zinc-800 disabled:text-zinc-600 text-white font-bold rounded-lg text-sm transition-all shadow-lg active:scale-95 flex items-center gap-2\"\n >\n {loading ? <i className=\"fas fa-circle-notch fa-spin\"></i> : 'Generar'}\n </button>\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"p-4 rounded-xl bg-rose-500/10 border border-rose-500/20 text-rose-400 text-sm flex items-start gap-3 animate-in fade-in slide-in-from-top-2\">\n <i className=\"fas fa-exclamation-circle mt-0.5\"></i>\n <div>{error}</div>\n </div>\n )}\n\n {/* Result JSON */}\n {result && (\n <div className=\"rounded-xl overflow-hidden border border-zinc-800 bg-[#0d1117] relative animate-in zoom-in-95 fade-in duration-300 shadow-2xl\">\n <div className=\"px-4 py-2 border-b border-zinc-800 bg-[#161b22] flex items-center gap-2\">\n <i className=\"fab fa-js text-yellow-400/80 text-xs\"></i>\n <span className=\"text-xs font-mono text-zinc-400\">generated_rule.json</span>\n <div className=\"flex-1\"></div>\n <span className=\"text-[10px] uppercase font-bold text-emerald-400 bg-emerald-500/10 px-2 py-0.5 rounded\">Válido</span>\n </div>\n <pre className=\"p-5 text-xs font-mono leading-relaxed text-[#c9d1d9] overflow-x-auto whitespace-pre-wrap max-h-[300px] overflow-y-auto custom-scrollbar\">\n {result}\n </pre>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\n\n// ─── Status Bar Metrics (simulated) ──────────────────────────\nconst useStatusMetrics = () => {\n const [metrics, setMetrics] = useState({\n activeChats: 12,\n avgResponse: '2.4s',\n todayMessages: 347,\n botUptime: '99.8%',\n queuedMessages: 3,\n });\n\n useEffect(() => {\n const interval = setInterval(() => {\n setMetrics(prev => ({\n ...prev,\n activeChats: prev.activeChats + Math.floor(Math.random() * 3) - 1,\n todayMessages: prev.todayMessages + Math.floor(Math.random() * 5),\n queuedMessages: Math.max(0, prev.queuedMessages + Math.floor(Math.random() * 3) - 1),\n }));\n }, 8000);\n return () => clearInterval(interval);\n }, []);\n\n return metrics;\n};\n\nexport const StatusBarMetrics = React.memo(() => {\n const metrics = useStatusMetrics();\n\n return (\n <div className=\"h-6 shrink-0 flex items-center justify-between px-3 text-[10px] font-medium border-t\"\n style={{ background: 'var(--brand-primary)', borderColor: 'transparent', color: 'white' }}>\n <div className=\"flex items-center gap-4\">\n <span className=\"flex items-center gap-1\">\n <i className=\"fas fa-comments\"></i> {metrics.activeChats} chats activos\n </span>\n <span className=\"flex items-center gap-1\">\n <i className=\"fas fa-clock\"></i> Resp: {metrics.avgResponse}\n </span>\n <span className=\"flex items-center gap-1\">\n <i className=\"fas fa-paper-plane\"></i> {metrics.todayMessages} hoy\n </span>\n </div>\n <div className=\"flex items-center gap-4\">\n <span className=\"flex items-center gap-1\">\n <i className=\"fas fa-inbox\"></i> {metrics.queuedMessages} en cola\n </span>\n <span className=\"flex items-center gap-1\">\n <i className=\"fas fa-robot\"></i> Uptime: {metrics.botUptime}\n </span>\n <span className=\"opacity-70\">WhatsApp Business API</span>\n </div>\n </div>\n );\n});\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { SideExplorer } from './panels/SideExplorer';\nimport { InspectorPanel } from './panels/InspectorPanel';\nimport { AgentPanel } from './panels/AgentPanel';\nimport { ChatTab } from './tabs/ChatTab';\nimport { FlowCanvasTab } from './tabs/FlowCanvasTab';\nimport { AnalyticsTab } from './tabs/AnalyticsTab';\nimport { ApiTesterTab } from './tabs/ApiTesterTab';\nimport { TemplateManagerTab } from './tabs/TemplateManagerTab';\nimport { RulesArchitectTab } from './tabs/RulesArchitectTab';\n\n// ─── Types ───────────────────────────────────────────────────\ntype TabId = 'chat' | 'flow' | 'analytics' | 'api_tester' | 'templates' | 'architect';\n\ninterface Tab {\n id: TabId;\n label: string;\n icon: string;\n}\n\nconst TABS: Tab[] = [\n { id: 'chat', label: 'Live Chat', icon: 'fas fa-comments' },\n { id: 'flow', label: 'Flow Canvas', icon: 'fas fa-project-diagram' },\n { id: 'architect', label: 'Workflow Architect', icon: 'fas fa-wand-magic-sparkles' },\n { id: 'analytics', label: 'Analytics', icon: 'fas fa-chart-bar' },\n { id: 'api_tester', label: 'API Tester', icon: 'fas fa-vial' },\n { id: 'templates', label: 'Templates', icon: 'fas fa-layer-group' },\n];\n\nimport { StatusBarMetrics } from './components/StatusBarMetrics';\n\n// ═══════════════════════════════════════════════════════════════\n// MAIN COMPONENT\n// ═══════════════════════════════════════════════════════════════\nexport interface DiscoveryStudioProps {\n gatewayStatus?: 'connected' | 'disconnected' | 'connecting';\n activeProvider?: string;\n}\n\nexport const DiscoveryStudio = ({ gatewayStatus = 'connected', activeProvider = 'Meta Cloud API' }: DiscoveryStudioProps) => {\n const [activeTab, setActiveTab] = useState<TabId>('chat');\n const [explorerOpen, setExplorerOpen] = useState(true);\n const [inspectorOpen, setInspectorOpen] = useState(false);\n const [agentOpen, setAgentOpen] = useState(true);\n const [selectedContact, setSelectedContact] = useState<string | null>(null);\n const [cmdOpen, setCmdOpen] = useState(false);\n const [cmdQuery, setCmdQuery] = useState('');\n const cmdInputRef = useRef<HTMLInputElement>(null);\n\n // Command palette keyboard shortcut\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n setCmdOpen(prev => !prev);\n setCmdQuery('');\n }\n if (e.key === 'Escape') setCmdOpen(false);\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n useEffect(() => {\n if (cmdOpen && cmdInputRef.current) {\n cmdInputRef.current.focus();\n }\n }, [cmdOpen]);\n\n // Command palette actions\n const commands = [\n { id: 'chat', label: 'Abrir Chat en Vivo', icon: 'fas fa-comments', action: () => setActiveTab('chat') },\n { id: 'flow', label: 'Abrir Flow Canvas', icon: 'fas fa-project-diagram', action: () => setActiveTab('flow') },\n { id: 'architect', label: 'Abrir Workflow Architect (IA)', icon: 'fas fa-wand-magic-sparkles', action: () => setActiveTab('architect') },\n { id: 'analytics', label: 'Abrir Analytics', icon: 'fas fa-chart-bar', action: () => setActiveTab('analytics') },\n { id: 'explorer', label: explorerOpen ? 'Cerrar Explorer' : 'Abrir Explorer', icon: 'fas fa-folder-tree', action: () => setExplorerOpen(p => !p) },\n { id: 'inspector', label: inspectorOpen ? 'Cerrar Inspector' : 'Abrir Inspector', icon: 'fas fa-info-circle', action: () => setInspectorOpen(p => !p) },\n { id: 'agent', label: agentOpen ? 'Ocultar Copiloto' : 'Mostrar Copiloto', icon: 'fas fa-robot', action: () => setAgentOpen(p => !p) },\n { id: 'demo', label: 'Activar Modo Demo', icon: 'fas fa-play-circle', action: () => { } },\n ];\n\n const filteredCommands = commands.filter(c =>\n c.label.toLowerCase().includes(cmdQuery.toLowerCase())\n );\n\n const runCommand = (cmd: typeof commands[0]) => {\n cmd.action();\n setCmdOpen(false);\n };\n\n return (\n <div className=\"h-full w-full flex flex-col overflow-hidden relative font-sans\" style={{ background: 'var(--bg-primary)' }}>\n\n {/* ═══ TOP TOOLBAR ═══ */}\n <div className=\"h-11 shrink-0 flex items-center justify-between px-3 gap-2 border-b\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n\n {/* Left section */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-2 px-2 py-1 rounded-lg\" style={{ background: 'var(--bg-muted)' }}>\n <i className=\"fab fa-whatsapp text-green-500 text-lg\"></i>\n <span className=\"font-black text-xs uppercase tracking-widest\" style={{ color: 'var(--text-primary)' }}>\n Discovery Studio\n </span>\n </div>\n\n <div className=\"h-5 w-px mx-1\" style={{ background: 'var(--border-color)' }}></div>\n\n {/* Panel toggles */}\n <button\n onClick={() => setExplorerOpen(p => !p)}\n className={`w-7 h-7 rounded-md flex items-center justify-center text-xs transition-all ${explorerOpen ? 'text-brand' : ''}`}\n style={{ background: explorerOpen ? 'var(--bg-muted)' : 'transparent', color: explorerOpen ? 'var(--brand-primary)' : 'var(--text-secondary)' }}\n title=\"Toggle Explorer\"\n >\n <i className=\"fas fa-folder-tree\"></i>\n </button>\n <button\n onClick={() => setInspectorOpen(p => !p)}\n className={`w-7 h-7 rounded-md flex items-center justify-center text-xs transition-all`}\n style={{ background: inspectorOpen ? 'var(--bg-muted)' : 'transparent', color: inspectorOpen ? 'var(--text-primary)' : 'var(--text-secondary)' }}\n title=\"Toggle Inspector\"\n >\n <i className=\"fas fa-columns\"></i>\n </button>\n <button\n onClick={() => setAgentOpen(p => !p)}\n className={`w-7 h-7 rounded-md flex items-center justify-center text-xs transition-all border border-emerald-500/20`}\n style={{ background: agentOpen ? 'rgba(16, 185, 129, 0.1)' : 'transparent', color: agentOpen ? '#10b981' : 'var(--text-secondary)' }}\n title=\"Toggle Agent Copilot\"\n >\n <i className=\"fas fa-robot\"></i>\n </button>\n </div>\n\n {/* Center — Command palette trigger */}\n <button\n onClick={() => setCmdOpen(true)}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs transition-all hover:border-brand-primary\"\n style={{ background: 'var(--bg-muted)', border: '1px solid var(--border-color)', color: 'var(--text-secondary)' }}\n >\n <i className=\"fas fa-search text-[10px]\"></i>\n <span>Buscar comandos...</span>\n <kbd className=\"ml-4 px-1.5 py-0.5 rounded text-[9px] font-mono font-bold\"\n style={{ background: 'var(--bg-elevated)', border: '1px solid var(--border-color)' }}>\n ⌘K\n </kbd>\n </button>\n\n {/* Right section */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1.5 px-2 py-1 rounded-lg text-[10px] font-bold\"\n style={{ background: gatewayStatus === 'connected' ? 'rgba(34,197,94,0.1)' : 'rgba(239,68,68,0.1)', color: gatewayStatus === 'connected' ? '#22c55e' : '#ef4444' }}>\n <span className={`w-1.5 h-1.5 rounded-full ${gatewayStatus === 'connected' ? 'bg-green-500 animate-pulse' : 'bg-red-500'}`}></span>\n {gatewayStatus === 'connected' ? `CONNECTED: ${activeProvider}` : 'DISCONNECTED'}\n </div>\n <button className=\"w-7 h-7 rounded-md flex items-center justify-center text-xs transition-all\"\n style={{ color: 'var(--text-secondary)' }}\n title=\"Settings\">\n <i className=\"fas fa-cog\"></i>\n </button>\n </div>\n </div>\n\n {/* ═══ TAB BAR ═══ */}\n <div className=\"h-9 shrink-0 flex items-end px-1 gap-px border-b\"\n style={{ background: 'var(--bg-muted)', borderColor: 'var(--border-color)' }}>\n {TABS.map(tab => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={`flex items-center gap-2 px-4 py-1.5 text-xs font-semibold rounded-t-lg transition-all relative ${activeTab === tab.id ? 'font-bold' : 'opacity-60 hover:opacity-80'\n }`}\n style={{\n background: activeTab === tab.id ? 'var(--bg-primary)' : 'transparent',\n color: activeTab === tab.id ? 'var(--text-primary)' : 'var(--text-secondary)',\n borderBottom: activeTab === tab.id ? '2px solid var(--brand-primary)' : '2px solid transparent',\n }}\n >\n <i className={`${tab.icon} text-[10px]`}></i>\n {tab.label}\n </button>\n ))}\n\n {/* Filler */}\n <div className=\"flex-1\"></div>\n\n {/* Tab-level actions */}\n <div className=\"flex items-center gap-1 px-2 pb-1\">\n <button className=\"w-6 h-6 rounded flex items-center justify-center text-[10px] transition-all hover:bg-white/10\"\n style={{ color: 'var(--text-secondary)' }} title=\"Split view\">\n <i className=\"fas fa-columns\"></i>\n </button>\n </div>\n </div>\n\n {/* ═══ MAIN CONTENT ═══ */}\n <div className=\"flex-1 flex min-h-0 overflow-hidden\">\n\n {/* Side Explorer */}\n {explorerOpen && (\n <div className=\"w-60 shrink-0 flex flex-col border-r overflow-hidden animate-fade-in\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <SideExplorer\n selectedContact={selectedContact}\n onSelectContact={setSelectedContact}\n />\n </div>\n )}\n\n {/* Center content area */}\n <div className=\"flex-1 min-w-0 flex flex-col overflow-hidden\">\n {activeTab === 'chat' && <ChatTab selectedContact={selectedContact} />}\n {activeTab === 'flow' && <FlowCanvasTab />}\n {activeTab === 'architect' && <RulesArchitectTab />}\n {activeTab === 'analytics' && <AnalyticsTab />}\n {activeTab === 'api_tester' && <ApiTesterTab />}\n {activeTab === 'templates' && <TemplateManagerTab />}\n </div>\n\n {/* Inspector Panel */}\n {inspectorOpen && (\n <div className=\"w-72 shrink-0 flex flex-col border-l overflow-hidden animate-fade-in\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <InspectorPanel selectedContact={selectedContact} />\n </div>\n )}\n\n {/* Agent Copilot Panel */}\n {agentOpen && (\n <div className=\"w-80 shrink-0 flex flex-col border-l overflow-hidden animate-fade-in relative shadow-[-10px_0_30px_rgba(0,0,0,0.1)]\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}>\n <AgentPanel />\n </div>\n )}\n </div>\n\n {/* ═══ STATUS BAR ═══ */}\n <StatusBarMetrics />\n\n {/* ═══ COMMAND PALETTE OVERLAY ═══ */}\n {cmdOpen && (\n <div className=\"absolute inset-0 z-50 flex items-start justify-center pt-[15%]\"\n onClick={() => setCmdOpen(false)}>\n <div className=\"absolute inset-0 bg-black/40 backdrop-blur-sm\"></div>\n <div\n className=\"relative w-[520px] max-h-[400px] rounded-xl overflow-hidden shadow-2xl border animate-scale-up\"\n style={{ background: 'var(--bg-elevated)', borderColor: 'var(--border-color)' }}\n onClick={e => e.stopPropagation()}\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b\" style={{ borderColor: 'var(--border-color)' }}>\n <i className=\"fas fa-search text-xs\" style={{ color: 'var(--text-secondary)' }}></i>\n <input\n ref={cmdInputRef}\n type=\"text\"\n placeholder=\"Escribe un comando...\"\n className=\"flex-1 bg-transparent outline-none text-sm font-medium\"\n style={{ color: 'var(--text-primary)' }}\n value={cmdQuery}\n onChange={e => setCmdQuery(e.target.value)}\n />\n <kbd className=\"px-1.5 py-0.5 rounded text-[9px] font-mono\"\n style={{ background: 'var(--bg-muted)', color: 'var(--text-secondary)' }}>\n ESC\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"max-h-[320px] overflow-y-auto p-1\">\n {filteredCommands.map((cmd, i) => (\n <button\n key={cmd.id}\n onClick={() => runCommand(cmd)}\n className=\"w-full flex items-center gap-3 px-4 py-2.5 rounded-lg text-sm transition-all text-left\"\n style={{ color: 'var(--text-primary)' }}\n onMouseEnter={e => (e.currentTarget.style.background = 'var(--bg-muted)')}\n onMouseLeave={e => (e.currentTarget.style.background = 'transparent')}\n >\n <i className={`${cmd.icon} w-5 text-center text-xs`} style={{ color: 'var(--brand-primary)' }}></i>\n <span className=\"font-medium\">{cmd.label}</span>\n </button>\n ))}\n {filteredCommands.length === 0 && (\n <div className=\"py-8 text-center text-xs\" style={{ color: 'var(--text-secondary)' }}>\n <i className=\"fas fa-search-minus text-lg mb-2 block opacity-30\"></i>\n No se encontraron comandos\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n"]}
|