// widgets.jsx — Fahrplan / Störungen / Karte tabbed widget. Tailwind utilities. function FahrplanWidget({mode = 'fahrplan'}) { return (
{/* Tabs */}
{[ {id: 'fahrplan', label: 'Fahrplan', icon: }, {id: 'stoerungen', label: 'Störungen', icon: }, {id: 'karte', label: 'Karte', icon: }, ].map(t => ( ))}
{/* Body */}
{mode === 'fahrplan' && } {mode === 'stoerungen' && } {mode === 'karte' && }
); } function FahrplanForm() { return (

Fahrplan suchen

{/* Von */} } value="Altdorf, Bahnhof"/> {/* Swap button */}
{/* Nach */} } value="Andermatt, Bahnhof"/> {/* Date + Time row */}
} value="Mi, 22. Mai 2026" small/> } value="13:10" small/>
{/* Quick chips */}
{['Jetzt', 'Abfahrt', 'Ankunft'].map((c,i) => ( ))}
); } function Field({label, placeholder, icon, value, small}) { return (
{icon} {value || placeholder}
); } function StoerungenInline() { const items = [ {line: '402', from: 'Flüelen', to: 'Andermatt', text: 'Verspätungen wegen Baustelle bei Wassen.', sev: 'warn'}, {line: '108', from: 'Altdorf', to: 'Bürglen', text: 'Umleitung Schulhausstrasse bis 24.05.', sev: 'info'}, ]; return (

Aktuelle Störungen

{items.map((it, i) => (
{it.line}
{it.from} → {it.to}
{it.text}
))}
Alle Störungen
); } function KartePreview() { return (

Liniennetz

{/* fake roads */} {[[40,40],[120,130],[180,110],[240,80],[290,60],[140,100],[210,150],[260,180]].map(([x,y],i)=>( ))}
[map preview]
); } Object.assign(window, { FahrplanWidget, FahrplanForm, StoerungenInline, KartePreview });