Dateien nach "frontend/src" hochladen

This commit is contained in:
2026-05-26 10:22:07 +02:00
parent 4727631709
commit 2a45def43d

View File

@@ -172,9 +172,10 @@ function Sidebar({ active, setActive, user, onLogout, updateInfo, onUpdateClick
DICKEN<span style={{ color:'#4ecdc4' }}>DOCK</span> DICKEN<span style={{ color:'#4ecdc4' }}>DOCK</span>
</div> </div>
</div>} </div>}
<button onClick={()=>setCollapsed(v=>!v)} style={{ background:'transparent', border:'none', <button onClick={()=>setCollapsed(v=>!v)} style={{
color:'rgba(255,255,255,0.3)', cursor:'pointer', padding:4, flexShrink:0, background:'rgba(78,205,196,0.15)', border:'1px solid rgba(78,205,196,0.35)',
fontSize:12, lineHeight:1 }} title={collapsed?'Ausklappen':'Einklappen'}> borderRadius:6, color:'#4ecdc4', cursor:'pointer', padding:'4px 8px', flexShrink:0,
fontSize:14, lineHeight:1, fontWeight:700 }} title={collapsed?'Ausklappen':'Einklappen'}>
{collapsed ? '' : ''} {collapsed ? '' : ''}
</button> </button>
</div> </div>
@@ -196,13 +197,13 @@ function Sidebar({ active, setActive, user, onLogout, updateInfo, onUpdateClick
</button> </button>
{appsOpen && getGroupedTools().map(([group, tools]) => ( {appsOpen && getGroupedTools().map(([group, tools]) => (
<div key={group}> <div key={group}>
{!collapsed && <div style={{ color:'rgba(255,255,255,0.55)', fontSize:9, fontFamily:'monospace', {!collapsed && <div style={{ color:'rgba(78,205,196,0.85)', fontSize:9, fontFamily:'monospace',
letterSpacing:2, padding:'8px 12px 3px 12px' }}>{group.toUpperCase()}</div>} letterSpacing:2, padding:'8px 12px 3px 12px' }}>{group.toUpperCase()}</div>}
{tools.map(t => <NavBtn key={t.id} item={t} sub />)} {tools.map(t => <NavBtn key={t.id} item={t} sub />)}
</div> </div>
))} ))}
{user?.role==='admin' && <NavBtn item={{ id:'admin', icon:'⚙️', label:'Admin' }} />} {user?.role==='admin' && <NavBtn item={{ id:'admin', Icon:AdminIcon, label:'Einstellungen' }} />}
</nav> </nav>
{updateInfo?.hasUpdate && ( {updateInfo?.hasUpdate && (
<button onClick={onUpdateClick} style={{ <button onClick={onUpdateClick} style={{
@@ -269,7 +270,7 @@ function BottomNav({ active, setActive, user, onLogout, updateInfo, onUpdateClic
const mainNav = [ const mainNav = [
{ id:'dashboard', Icon:HomeIcon, label:'Home' }, { id:'dashboard', Icon:HomeIcon, label:'Home' },
{ id:'_apps', Icon:AppsIcon, label:'Apps' }, { id:'_apps', Icon:AppsIcon, label:'Apps' },
...(user?.role==='admin' ? [{ id:'admin', Icon:AdminIcon, label:'Admin' }] : []), ...(user?.role==='admin' ? [{ id:'admin', Icon:AdminIcon, label:'Einstellungen' }] : []),
{ id:'_mehr', Icon:MoreIcon, label:'Mehr' }, { id:'_mehr', Icon:MoreIcon, label:'Mehr' },
]; ];
@@ -280,7 +281,7 @@ function BottomNav({ active, setActive, user, onLogout, updateInfo, onUpdateClic
<div style={{ paddingBottom:4 }}> <div style={{ paddingBottom:4 }}>
{getGroupedTools().map(([group, tools]) => ( {getGroupedTools().map(([group, tools]) => (
<div key={group}> <div key={group}>
<div style={{ color:'rgba(255,255,255,0.6)', fontSize:9, fontFamily:'monospace', <div style={{ color:'rgba(78,205,196,0.85)', fontSize:9, fontFamily:'monospace',
letterSpacing:2, padding:'12px 20px 5px' }}>{group.toUpperCase()}</div> letterSpacing:2, padding:'12px 20px 5px' }}>{group.toUpperCase()}</div>
{tools.map(t => ( {tools.map(t => (
<MI key={t.id} Icon={t.Icon} label={t.label} <MI key={t.id} Icon={t.Icon} label={t.label}
@@ -709,8 +710,21 @@ function AdminPanel({ toast, mobile }) {
return ( return (
<div style={{ padding: mobile ? '14px 12px 90px' : '36px 44px', maxWidth:560 }}> <div style={{ padding: mobile ? '14px 12px 90px' : '36px 44px', maxWidth:560 }}>
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile ? 17 : 22, marginBottom:18 }}>Admin</h1> <h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?17:22, marginBottom:16 }}>Einstellungen</h1>
{/* Subnavigation */}
<div style={{ display:'flex', gap:6, marginBottom:18 }}>
{[['profil','Profil'],['backup','Backup']].map(([k,l]) => (
<button key={k} onClick={()=>setSection(k)} style={{
padding:'6px 16px', borderRadius:20, fontFamily:'monospace', fontSize:12, cursor:'pointer',
border:`1px solid ${section===k?'rgba(78,205,196,0.5)':'rgba(255,255,255,0.1)'}`,
background: section===k?'rgba(78,205,196,0.12)':'transparent',
color: section===k?'#4ecdc4':'rgba(255,255,255,0.45)',
}}>{l}</button>
))}
</div>
{section === 'profil' && <>
<Sec title="AVATAR"> <Sec title="AVATAR">
<div style={{ display:'flex', alignItems:'center', gap:14, marginBottom:12 }}> <div style={{ display:'flex', alignItems:'center', gap:14, marginBottom:12 }}>
<div style={{ width:60, height:60, borderRadius:'50%', overflow:'hidden', flexShrink:0, <div style={{ width:60, height:60, borderRadius:'50%', overflow:'hidden', flexShrink:0,
@@ -763,6 +777,9 @@ function AdminPanel({ toast, mobile }) {
</button> </button>
</Sec> </Sec>
</>}
{section === 'backup' && <>
<Sec title="DATENBANK"> <Sec title="DATENBANK">
<p style={{ color:'rgba(255,255,255,0.3)', fontSize:12, fontFamily:'monospace', marginBottom:12, lineHeight:1.6 }}> <p style={{ color:'rgba(255,255,255,0.3)', fontSize:12, fontFamily:'monospace', marginBottom:12, lineHeight:1.6 }}>
Vollständige SQLite-Datenbank sichern oder wiederherstellen. Vollständige SQLite-Datenbank sichern oder wiederherstellen.
@@ -781,6 +798,7 @@ function AdminPanel({ toast, mobile }) {
</div> </div>
{file && <div style={{ color:'rgba(255,255,255,0.25)', fontSize:10, fontFamily:'monospace', marginTop:5 }}>{file.name}</div>} {file && <div style={{ color:'rgba(255,255,255,0.25)', fontSize:10, fontFamily:'monospace', marginTop:5 }}>{file.name}</div>}
</Sec> </Sec>
</>}
</div> </div>
); );
} }