"use client"; import { useState, useEffect } from "react"; const FILTER_CATEGORIES = [ { id: "All", name: "Todos", color: "#64748b" }, { id: "Ground", name: "Terra (GND)", color: "#64748b" }, { id: "Power", name: "Alimentação", color: "#ef4444" }, { id: "RTC", name: "RTC", color: "#f59e0b" }, { id: "GPIO", name: "GPIO", color: "#22c55e" }, { id: "ADC", name: "ADC", color: "#ec4899" }, { id: "DAC", name: "DAC", color: "#a855f7" }, { id: "Touch", name: "Touch", color: "#06b6d4" }, { id: "UART", name: "UART", color: "#3b82f6" }, { id: "SPI", name: "SPI", color: "#ef4444" }, { id: "I2C", name: "I2C", color: "#10b981" }, { id: "PWM", name: "PWM", color: "#f97316" }, { id: "USB", name: "USB", color: "#8b5cf6" }, { id: "Clock", name: "Clock", color: "#eab308" }, { id: "JTAG", name: "JTAG", color: "#8b5cf6" }, { id: "Strapping", name: "Inicialização", color: "#dc2626" }, ]; export default function ConnectionsDiagram({ connections, color }) { const [activeFilter, setActiveFilter] = useState("All"); const [selectedConnection, setSelectedConnection] = useState(null); const [hoveredConnection, setHoveredConnection] = useState(null); const isConnectionVisible = (connection) => { if (activeFilter === "All") return true; return connection.categorias.includes(activeFilter); }; const getCategoryColor = (category) => { const filter = FILTER_CATEGORIES.find((f) => f.id === category); return filter?.color || "#64748b"; }; useEffect(() => { const handleEscape = (e) => { if (e.key === "Escape") setSelectedConnection(null); }; if (selectedConnection) { document.addEventListener("keydown", handleEscape); document.body.style.overflow = "hidden"; } return () => { document.removeEventListener("keydown", handleEscape); document.body.style.overflow = "unset"; }; }, [selectedConnection]); if (!connections || connections.length === 0) { return (

Diagrama de conexões indisponível

Este modelo ainda não possui dados de conexão

); } return (

📍 Diagrama de Conexões Interativo

Clique em qualquer conexão para ver informações detalhadas ou use filtros para destacar funções específicas.

Filtre por Função

{activeFilter !== "All" && ( {connections.filter(isConnectionVisible).length} de {connections.length} conexões )}
{FILTER_CATEGORIES.map((filter) => { const isActive = activeFilter === filter.id; return ( ); })}
{connections.map((connection, index) => { const visible = isConnectionVisible(connection); const isHovered = hoveredConnection === index; return ( ); })}
{connections.some(c => c.restricoes) && (

Informações Importantes

  • • Conexões com ícones de aviso possuem restrições de uso. Clique para mais detalhes.
  • • Sempre consulte o datasheet oficial antes de usar conexões com funções especiais.
)} {selectedConnection && (
setSelectedConnection(null)} role="dialog" aria-modal="true" aria-labelledby="modal-title" >
e.stopPropagation()} >
{typeof selectedConnection.numero === "number" ? selectedConnection.numero : selectedConnection.numero.substring(0, 4)}

Conexão {selectedConnection.numero}

Categorias

{selectedConnection.categorias.map((cat) => ( {cat} ))}

Funções da Conexão

    {selectedConnection.funcoes.map((func, index) => (
  • {func}
  • ))}
{selectedConnection.restricoes && (

Alertas Importantes

{selectedConnection.restricoes}

)}
)}

Sobre a Matriz de Conexões Flexível

O ESP32 possui uma matriz de conexões flexível que permite mapear diversas funções para múltiplos pinos. Isso significa que muitas conexões podem ser configuradas para desempenhar diferentes papéis, dependendo das necessidades do seu projeto. Consulte a documentação oficial para entender como aproveitar ao máximo essa flexibilidade.

); }