/* ============================================================
FIFA EDGE — app root + Tweaks
============================================================ */
const { useState: useS, useEffect: useE } = React;
const ACCENTS = [
{ id:'green', color:'oklch(0.78 0.16 155)', letter:'G' },
{ id:'amber', color:'oklch(0.80 0.14 75)', letter:'A' },
{ id:'cyan', color:'oklch(0.80 0.12 210)', letter:'C' },
{ id:'violet', color:'oklch(0.72 0.17 300)', letter:'V' },
];
function TweaksPanel({ tweaks, set, editMode, onClose }) {
if (!editMode) return null;
return (
Tweaks
Acento de cor
{ACCENTS.map(a => (
set('accent', a.id)}
title={a.id}>{a.letter}
))}
Densidade
{['compact','comfortable','spacious'].map(d => (
))}
Mostrar coluna EV
);
}
function App() {
const [section, setSection] = useS(() => {
const s = localStorage.getItem('fe.section') || 'today';
return s === 'settings' ? 'today' : s;
});
const [h2hId, setH2hId] = useS(null);
const [tweaks, setTweaks] = useS(window.TWEAKS);
const [editMode, setEditMode] = useS(false);
useE(() => localStorage.setItem('fe.section', section), [section]);
// expose opener for match rows
React.useEffect(() => {
window.openH2H = (id) => setH2hId(id);
}, []);
useE(() => {
document.documentElement.setAttribute('data-accent', tweaks.accent);
document.documentElement.setAttribute('data-density', tweaks.density);
}, [tweaks]);
// Tweaks protocol
useE(() => {
const onMsg = (e) => {
if (!e.data || typeof e.data !== 'object') return;
if (e.data.type === '__activate_edit_mode') setEditMode(true);
if (e.data.type === '__deactivate_edit_mode') setEditMode(false);
};
window.addEventListener('message', onMsg);
window.parent.postMessage({ type: '__edit_mode_available' }, '*');
return () => window.removeEventListener('message', onMsg);
}, []);
const setTweak = (k, v) => {
const next = { ...tweaks, [k]: v };
setTweaks(next);
window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [k]: v } }, '*');
};
if (h2hId) {
return (
{ setH2hId(null); setSection(s); }} />
setEditMode(false)} />
);
}
const viewMap = {
today: ,
live: ,
signals: ,
elo: ,
stats: ,
perf: ,
};
return (
);
}
const __feRoot = ReactDOM.createRoot(document.getElementById('root'));
const __feMount = () => __feRoot.render();
(window.__FIFA_READY__ || Promise.resolve()).finally(__feMount);
window.addEventListener('fifa:data', __feMount); // re-render on future refreshes