class EfficiencyChart extends HTMLElement { connectedCallback() { const initialEfficiency = parseFloat(this.getAttribute('initial-efficiency')) || 95; const yearsToShow = parseInt(this.getAttribute('years-to-show')) || 25; const annualDegradation = parseFloat(this.getAttribute('annual-degradation')) || 0.5; this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = `

Eficiência ao Longo do Tempo

Degradação anual de ${annualDegradation}% • Eficiência após ${yearsToShow} anos: ${(initialEfficiency - (yearsToShow * annualDegradation)).toFixed(2)}%

`; // Generate chart data const data = Array.from({ length: yearsToShow + 1 }, (_, year) => { const efficiency = Math.max( initialEfficiency - year * annualDegradation, 80 ); const warranty = year <= 10 ? 90 : 80; return { year: `Ano ${year}`, efficiency, warranty, }; }); // Initialize chart setTimeout(() => { const chartContainer = this.shadowRoot.getElementById('chart'); if (chartContainer) { const chart = new Recharts.AreaChart({ width: chartContainer.clientWidth, height: 300, data, margin: { top: 10, right: 30, left: 0, bottom: 0 }, }); chart.append(new Recharts.CartesianGrid({ strokeDasharray: '3 3', vertical: false })); chart.append(new Recharts.XAxis({ dataKey: 'year', tickFormatter: (value) => value.slice(4) })); chart.append(new Recharts.YAxis({ domain: [75, 100], tickFormatter: (value) => `${value}%` })); chart.append(new Recharts.Tooltip()); // Warranty area chart.append(new Recharts.Area({ dataKey: 'warranty', type: 'natural', stroke: '#9ca3af', fill: '#f3f4f6', strokeWidth: 2 })); // Efficiency area chart.append(new Recharts.Area({ dataKey: 'efficiency', type: 'natural', stroke: '#3b82f6', fill: '#93c5fd', strokeWidth: 2 })); chartContainer.appendChild(chart); } }, 0); } } customElements.define('efficiency-chart', EfficiencyChart);