FormEventReg Forms
Evenement-registratie met event-kaart bovenaan en registratieformulier eronder.
src/components/forms/FormEventReg.astro
---
/**
* FormEventReg — evenement-registratie: event-kaart bovenaan, registratieformulier eronder.
*
* Props:
* - badge?: string
* - eventTitle?: string
* - eventMeta?: string[] losse meta-regels (datum, locatie, beschikbaarheid)
* - heading?: string
* - newsletterLabel?: string
* - button?: string
* - note?: string
* - action?: string
*/
interface Props {
badge?: string;
eventTitle?: string;
eventMeta?: string[];
heading?: string;
newsletterLabel?: string;
button?: string;
note?: string;
action?: string;
}
const {
badge = 'Evenement',
eventTitle = 'Marketing Masterclass',
eventMeta = ['15 mei, 14:00–17:00', 'Amsterdam, Keizersgracht 123', 'Nog 12 plekken beschikbaar'],
heading = 'Registreer je deelname',
newsletterLabel = 'Houd mij op de hoogte van toekomstige evenementen',
button = 'Ik doe mee',
note = 'Gratis deelname. Annuleren tot 48 uur voor aanvang.',
action = '#',
} = Astro.props;
---
<section class="bl-section fer">
<div class="bl-inner bl-inner--narrow fer-inner">
<div class="fer-wrap">
<div class="fer-event-card">
{badge && <div class="fer-event-badge">{badge}</div>}
<h2 class="fer-event-title">{eventTitle}</h2>
<div class="fer-event-meta">
{eventMeta.map((m, i) => (
<div class:list={['fer-meta-item', i === eventMeta.length - 1 && 'fer-meta-item--spots']}>{m}</div>
))}
</div>
</div>
<div class="fer-form-area">
<h3 class="fer-heading">{heading}</h3>
<form class="fer-form" action={action} novalidate>
<div class="fer-row">
<div class="fer-field"><label class="fer-label" for="fer-first">Voornaam *</label><input class="fer-input" type="text" id="fer-first" name="first_name" placeholder="Jan" required autocomplete="given-name" /></div>
<div class="fer-field"><label class="fer-label" for="fer-last">Achternaam *</label><input class="fer-input" type="text" id="fer-last" name="last_name" placeholder="de Vries" required autocomplete="family-name" /></div>
</div>
<div class="fer-field"><label class="fer-label" for="fer-email">E-mailadres *</label><input class="fer-input" type="email" id="fer-email" name="email" placeholder="Je e-mailadres" required autocomplete="email" /></div>
<div class="fer-row">
<div class="fer-field"><label class="fer-label" for="fer-company">Bedrijf</label><input class="fer-input" type="text" id="fer-company" name="company" placeholder="Jouw bedrijf" autocomplete="organization" /></div>
<div class="fer-field"><label class="fer-label" for="fer-role">Functie</label><input class="fer-input" type="text" id="fer-role" name="role" placeholder="Marketing Manager" autocomplete="organization-title" /></div>
</div>
<div class="fer-field">
<label class="fer-label" for="fer-tickets">Aantal tickets *</label>
<select class="fer-select" id="fer-tickets" name="tickets" required>
<option value="1">1 ticket</option>
<option value="2">2 tickets</option>
<option value="3">3 tickets</option>
</select>
</div>
<div class="fer-field"><label class="fer-label" for="fer-dietary">Dieetwensen</label><input class="fer-input" type="text" id="fer-dietary" name="dietary" placeholder="Bijv. vegetarisch, glutenvrij" /></div>
{newsletterLabel && (
<label class="fer-check-label"><input class="fer-check" type="checkbox" name="newsletter" /> {newsletterLabel}</label>
)}
<button class="fer-submit" type="submit">{button} →</button>
{note && <p class="fer-note">{note}</p>}
</form>
</div>
</div>
</div>
</section>
<style>
.fer-wrap{display:flex;flex-direction:column;gap:2rem}
.fer-event-card{background:var(--color-primary, #0a0a0a);color:#fff;padding:2rem;border-radius:14px}
.fer-event-badge{display:inline-block;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#a5b4fc;background:#6366f126;padding:.3rem .75rem;border-radius:4px;margin-bottom:1rem}
.fer-event-title{font-size:clamp(1.4rem,3vw,1.6rem);font-weight:800;margin:0 0 1.25rem}
.fer-event-meta{display:flex;flex-direction:column;gap:.5rem}
.fer-meta-item{display:flex;align-items:center;gap:.5rem;font-size:1rem;color:#e8e8e8}
.fer-meta-item--spots{color:#86efac;font-weight:600}
.fer-heading{font-size:clamp(1.3rem,3vw,1.5rem);font-weight:800;color:var(--color-primary, #0a0a0a);letter-spacing:-.02em;margin:0 0 1.5rem}
.fer-form{display:flex;flex-direction:column;gap:1.1rem}
.fer-row{display:grid;grid-template-columns:1fr;gap:1.1rem}
.fer-field{display:flex;flex-direction:column;gap:.35rem}
.fer-label{font-size:1rem;font-weight:600;color:var(--color-primary, #0a0a0a)}
.fer-input,.fer-select{padding:.7rem .9rem;border:1.5px solid #d1d5db;border-radius:8px;font-size:1rem;color:var(--color-primary, #0a0a0a);background:#fff;transition:border-color .2s;font-family:inherit;box-sizing:border-box;width:100%}
.fer-input:focus,.fer-select:focus{outline:none;border-color:var(--color-accent, #6366f1);box-shadow:0 0 0 3px #6366f11f}
.fer-check-label{display:flex;align-items:center;gap:.5rem;font-size:.9375rem;color:#374151;cursor:pointer}
.fer-check{accent-color:var(--color-accent, #6366f1)}
.fer-submit{padding:.9rem 2rem;background:var(--color-accent, #6366f1);color:#fff;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:opacity .2s;align-self:flex-start}
.fer-submit:hover{opacity:.88}
.fer-note{font-size:.875rem;color:#6b7280;margin:.25rem 0 0}
@media(min-width:600px){.fer-row{grid-template-columns:1fr 1fr}}
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
badge | string | 'Evenement' | Badge op de event-kaart |
eventTitle | string | - | Titel van het evenement |
eventMeta | string[] | - | Meta-regels (datum, locatie, beschikbaarheid) |
heading | string | - | Koptekst formulier |
newsletterLabel | string | - | Label nieuwsbrief-opt-in |
button | string | 'Ik doe mee' | Knoptekst |
note | string | - | Voettekst onder de knop |
action | string | '#' | Form action URL |
* = verplicht