/* HLiD — Workflow, Observability, Integrations, Case, Next, Footer */ /* Demo request form — POSTs to window.HLID_DEMO_ENDPOINT or falls back to mailto */ function DemoForm() { const { t } = useT(); const [state, setState] = React.useState({ status: 'idle', msg: '' }); const [form, setForm] = React.useState({ name: '', email: '', company: '', entities: '', note: '' }); const upd = (k) => (e) => setForm(f => ({ ...f, [k]: e.target.value })); const submit = async (e) => { e.preventDefault(); if (!form.email || !form.name || !form.company) { setState({ status: 'error', msg: t('f.err') }); return; } setState({ status: 'sending', msg: '' }); try { const endpoint = window.HLID_DEMO_ENDPOINT || '/api/demo'; const res = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...form, source: 'hlid.at', ts: new Date().toISOString() }), }); if (!res.ok) throw new Error('Endpoint returned ' + res.status); setState({ status: 'ok', msg: t('f.ok') }); if (window.umami) window.umami.track('demo-submitted', { company: form.company }); } catch (err) { // Fallback: open mail client with prefilled body const body = encodeURIComponent( `Name: ${form.name}\nEmail: ${form.email}\nCompany: ${form.company}\nEntities: ${form.entities}\n\n${form.note}` ); window.location.href = `mailto:hlid@nibelung.io?subject=${encodeURIComponent('Demo request — ' + form.company)}&body=${body}`; setState({ status: 'fallback', msg: t('f.fallback') }); } }; if (state.status === 'ok') { return (
{t('f.okTag')}
{state.msg}
); } const fieldCls = "w-full bg-transparent border border-border text-fg placeholder:text-fg-subtle font-display text-[15px] px-4 py-3 rounded-[3px] focus:outline-none focus:border-fg transition-colors"; return (