Dateien nach "frontend/src" hochladen

This commit is contained in:
2026-05-27 08:37:20 +02:00
parent fb6b25f3ed
commit d44fa1d5fa
2 changed files with 25 additions and 19 deletions

View File

@@ -459,10 +459,10 @@ function QuickLinks({ toast, mobile }) {
<a href={l.url} target="_blank" rel="noopener noreferrer"
style={{ display:'flex', flexDirection:'column', alignItems:'center', gap:4,
style={{ display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center', gap:4,
padding:'10px 14px', background:'rgba(255,255,255,0.04)',
border:'1px solid rgba(255,255,255,0.08)', borderRadius:10,
textDecoration:'none', minWidth:60, cursor:'pointer' }}>
textDecoration:'none', minWidth:60, height:76, cursor:'pointer' }}>
{l.icon && l.icon.startsWith('http')
? <img src={l.icon} alt="" style={{width:26,height:26,objectFit:'contain'}} onError={e=>e.target.style.display='none'}/>
: <span style={{ fontSize:26 }}>{l.icon}</span>}
@@ -609,14 +609,14 @@ function Notepad({ toast }) {
return (
<div style={{ ...S.card }}>
<button onClick={()=>setIsOpen(v=>!v)} style={{width:'100%',background:'transparent',border:'none',
display:'flex',alignItems:'center',gap:8,cursor:'pointer',padding:0}}>
display:'flex',justifyContent:'space-between',alignItems:'center',cursor:'pointer',padding:0}}>
<div style={{display:'flex',alignItems:'center',gap:8}}>
<div style={S.head}>NOTIZEN</div>
{!isOpen && content.length > 0 && (
<span style={{color:'rgba(255,255,255,0.45)',fontFamily:'monospace',fontSize:10}}>
{content.length} Zeichen
</span>
<span style={{color:'#4ecdc4',fontFamily:'monospace',fontSize:10}}>({content.length})</span>
)}
<span style={{color:'rgba(255,255,255,0.4)',fontSize:11,display:'inline-block',marginLeft:'auto',
</div>
<span style={{color:'rgba(255,255,255,0.4)',fontSize:11,display:'inline-block',
transform:isOpen?'rotate(90deg)':'rotate(0)',transition:'transform 0.2s'}}></span>
</button>
{isOpen && <div style={{ color: saved ? 'rgba(78,205,196,0.5)' : 'rgba(255,230,109,0.6)',
@@ -1173,13 +1173,16 @@ export default function App() {
const [updateInfo,setUpdateInfo]=useState(null);
const [showUpd,setShowUpd]=useState(false);
const [authChecked, setAuthChecked] = useState(false);
useEffect(()=>{
const token=localStorage.getItem('sk_token');
if(!token)return;
if(token){
try{const p=JSON.parse(atob(token.split('.')[1]));
if(p.exp*1000>Date.now())setUser({id:p.id,username:p.username,role:p.role});
else localStorage.removeItem('sk_token');
}catch{localStorage.removeItem('sk_token');}
}
setAuthChecked(true);
},[]);
useEffect(()=>{
@@ -1196,6 +1199,7 @@ export default function App() {
},[]);
if(splash) return <SplashScreen onDone={()=>{ setSplash(false); sessionStorage.setItem('splash_shown','1'); }}/>;
if(!authChecked) return <div style={{background:'#0d0d0f',minHeight:'100vh'}}/>;
if(!user) return <Login onLogin={u=>setUser(u)}/>;
const activeTool = TOOLS.find(t=>t.id===active);

View File

@@ -215,10 +215,12 @@ export default function CalendarWidget() {
<span style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:13, fontWeight:700 }}>
{MONTHS[cur.m]} {cur.y}
</span>
{(cur.m !== today.getMonth() || cur.y !== today.getFullYear()) && (
<button onClick={() => { setCur({ y:today.getFullYear(), m:today.getMonth() }); setSelected(new Date()); }}
style={{ background:'rgba(78,205,196,0.15)', border:'1px solid rgba(78,205,196,0.3)',
borderRadius:6, color:'#4ecdc4', fontFamily:'monospace', fontSize:9,
cursor:'pointer', padding:'2px 8px' }}>Heute</button>
)}
</div>
<button onClick={nextMonth} style={{ background:'transparent', border:'none', color:'rgba(255,255,255,0.5)',
cursor:'pointer', fontSize:18, padding:'0 6px' }}></button>