/* global React, ReactDOM, Icon, RouteCtx, Sidebar, TopBar, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakToggle, TweakSelect, TweakButton, ScreenLanding, ScreenBinding, ScreenDashboard, ScreenRelics, ScreenStaticRoster, ScreenRaidNight, ScreenLoot, ScreenFC, ScreenSettings */
const { useState: useStateApp, useEffect: useEffectApp, useMemo: useMemoApp } = React;
// EDITMODE block for persistence
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"theme": "dark",
"syncState": "ok",
"staticEmpty": false,
"fflogsImported": true,
"initialScreen": "dashboard"
}/*EDITMODE-END*/;
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
// initial screen from hash, or tweak default, or dashboard
const hashScreen = () => {
const h = (window.location.hash || '').replace('#', '');
return h || t.initialScreen || 'dashboard';
};
const [screen, setScreen] = useStateApp(hashScreen);
useEffectApp(() => {
const onHash = () => setScreen(hashScreen());
window.addEventListener('hashchange', onHash);
return () => window.removeEventListener('hashchange', onHash);
}, []);
const go = (s) => {
window.location.hash = s;
setScreen(s);
};
const route = useMemoApp(() => ({ screen, go }), [screen]);
// theme
useEffectApp(() => {
document.documentElement.classList.toggle('theme-light', t.theme === 'light');
document.documentElement.classList.toggle('theme-dark', t.theme !== 'light');
}, [t.theme]);
const character = { name: 'Aerith Nightsong', world: 'Sargatanas', dc: 'Aether' };
// Some screens have no shell (landing, binding)
const noShell = screen === 'landing' || screen === 'binding';
const screenEl = (() => {
switch (screen) {
case 'landing': return