/* ARBEITSSCHIRM — sticky ink header with wordmark + Sprachumschalter */
(function () {
const { Button } = window.ABIndustrieServiceDesignSystem_89df89;
const { Icon } = window.ABIcons;
const NAV = [
{ label: 'Warum', href: '#warum' },
{ label: 'Modelle', href: '#modelle' },
{ label: 'Technik', href: '#technik' },
{ label: 'Einsatz', href: '#einsatz' },
];
const WX = [
{ key: 'wind', label: 'Wind', icon: 'wind' },
{ key: 'regen', label: 'Regen', icon: 'cloud-rain' },
{ key: 'sturm', label: 'Sturm', icon: 'cloud-lightning' },
{ key: 'schnee', label: 'Schnee', icon: 'snowflake' },
{ key: 'sonne', label: 'Sonne', icon: 'sun' },
];
// ---- Sprachen (Vorbereitung Mehrsprachigkeit; Übersetzung folgt später) ----
// Deutsch = aktuell aktiv. Reihenfolge wie vom Kunden vorgegeben.
const LANGS = [
{ code: 'de', label: 'Deutsch' },
{ code: 'en', label: 'English' },
{ code: 'pl', label: 'Polski' },
{ code: 'fr', label: 'Français' },
{ code: 'nl', label: 'Nederlands' },
{ code: 'cs', label: 'Čeština' },
{ code: 'it', label: 'Italiano' },
{ code: 'ru', label: 'Русский' },
];
// SVG-Flaggen (keine Emoji — Markenregel). viewBox 0 0 20 14.
const FLAGS = {
de: (
),
en: (
),
pl: (
),
fr: (
),
nl: (
),
cs: (
),
it: (
),
ru: (
),
};
function Flag({ code, w = 22 }) {
const h = Math.round(w * 0.7);
return (
{FLAGS[code] || null}
);
}
function LangSwitch({ lang, onPick }) {
const [open, setOpen] = React.useState(false);
const ref = React.useRef(null);
React.useEffect(() => {
if (!open) return;
const onDoc = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
const onKey = (e) => { if (e.key === 'Escape') setOpen(false); };
document.addEventListener('mousedown', onDoc);
document.addEventListener('keydown', onKey);
return () => { document.removeEventListener('mousedown', onDoc); document.removeEventListener('keydown', onKey); };
}, [open]);
const cur = LANGS.find((l) => l.code === lang) || LANGS[0];
return (
setOpen((o) => !o)} aria-haspopup="listbox" aria-expanded={open}
aria-label={'Sprache wählen — aktuell ' + cur.label}
style={{ display: 'inline-flex', alignItems: 'center', gap: 8, height: 40, padding: '0 10px', cursor: 'pointer',
background: 'rgba(0,0,0,0.32)', border: '1px solid var(--border-on-dark)', borderRadius: 'var(--radius-md)',
fontFamily: 'var(--font-display)', fontWeight: 700, fontSize: 12, letterSpacing: '0.08em', color: '#fff', textTransform: 'uppercase',
transition: 'background var(--dur-fast) var(--ease-out)' }}
onMouseEnter={(e) => { e.currentTarget.style.background = 'rgba(0,0,0,0.5)'; }}
onMouseLeave={(e) => { e.currentTarget.style.background = 'rgba(0,0,0,0.32)'; }}>
{cur.code.toUpperCase()}
{open && (
{LANGS.map((l) => {
const on = l.code === lang;
return (
{ onPick(l.code); setOpen(false); }}
onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onPick(l.code); setOpen(false); } }}
style={{ display: 'flex', alignItems: 'center', gap: 10, padding: '9px 10px', cursor: 'pointer', borderRadius: 'var(--radius-sm)',
background: on ? 'rgba(168,25,43,0.22)' : 'transparent', color: on ? '#fff' : 'var(--steel-300)', outline: 'none',
transition: 'background var(--dur-fast) var(--ease-out)' }}
onMouseEnter={(e) => { if (!on) e.currentTarget.style.background = 'rgba(255,255,255,0.06)'; }}
onMouseLeave={(e) => { if (!on) e.currentTarget.style.background = 'transparent'; }}>
{l.label}
{on && }
);
})}
)}
);
}
function Header({ onCta, mode = 'sturm', onPick, auto = false, interval = 9000, lang = 'de', onLang }) {
const [scrolled, setScrolled] = React.useState(false);
const [open, setOpen] = React.useState(false);
const tr = (s) => window.ABi18n.t(lang, s);
React.useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 12);
window.addEventListener('scroll', onScroll);
return () => window.removeEventListener('scroll', onScroll);
}, []);
const pickLang = (code) => { if (onLang) onLang(code); };
const go = (e, href) => {
e.preventDefault();
setOpen(false);
const el = document.querySelector(href);
if (!el) return;
window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 70, behavior: 'smooth' });
};
return (
go(e, '#top')} style={{ display: 'flex', alignItems: 'center', gap: 12, textDecoration: 'none' }}>
{tr('Arbeitsschirme')}
{tr('von AB Industrie Service')}
{NAV.map((n) => (
go(e, n.href)}
style={{ fontFamily: 'var(--font-display)', fontWeight: 600, fontSize: 14, letterSpacing: '0.04em', color: 'var(--steel-300)', textDecoration: 'none', textTransform: 'uppercase', transition: 'color var(--dur-fast)' }}
onMouseEnter={(e) => (e.currentTarget.style.color = '#fff')}
onMouseLeave={(e) => (e.currentTarget.style.color = 'var(--steel-300)')}>{tr(n.label)}
))}
{WX.map((m) => {
const on = m.key === mode;
return (
onPick && onPick(m.key)}
style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: 40, height: 40, cursor: 'pointer', background: on ? 'var(--brand)' : 'transparent', border: on ? '1px solid var(--brand)' : '1px solid transparent', borderRadius: 'var(--radius-sm)', transition: 'background var(--dur-fast) var(--ease-out)' }}>
);
})}
{/* Laufbalken: visualisiert den Auto-Wechsel-Takt (interval ms).
Per key={mode} startet die Füllung bei jedem Wechsel neu; bei
manueller Wahl ist auto=false → Balken bleibt leer (pausiert). */}
{auto && (
)}
}>{tr('Angebot')}
setOpen((o) => !o)} aria-label="Menü"
style={{ display: 'none', background: 'transparent', border: 0, color: '#fff', cursor: 'pointer', marginLeft: 'auto' }}>
{open && (
)}
);
}
window.ABArbeit = Object.assign(window.ABArbeit || {}, { Header });
})();