src/components/forms/FormMini.astro
---
interface Props {
placeholder?: string;
submitLabel?: string;
label?: string;
name?: string;
successText?: string;
}
const {
placeholder = "Jouw e-mailadres",
submitLabel = "Aanmelden",
label = "Nieuwsbrief",
name = "email",
successText = "✓ Je staat op de lijst",
} = Astro.props;
---
<div class="fmn-wrap">
{label && <span class="fmn-label">{label}</span>}
<form class="fmn-form" onsubmit="return false;" novalidate>
<input
class="fmn-input"
type="email"
name={name}
placeholder={placeholder}
required
autocomplete="email"
aria-label={placeholder}
/>
<button class="fmn-btn" type="submit">{submitLabel}</button>
</form>
<p class="fmn-hint">Geen spam. Afmelden kan altijd.</p>
</div>
<style>
.fmn-wrap { display: inline-flex; flex-direction: column; gap: 0.5rem; }
.fmn-label {
font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em;
color: var(--color-accent, #6366f1);
}
.fmn-form {
display: flex; align-items: stretch;
background: #fff; border: 1.5px solid #ddd; border-radius: 8px;
overflow: hidden; transition: border-color 0.2s, box-shadow 0.2s;
}
.fmn-form:focus-within {
border-color: var(--color-accent, #6366f1);
box-shadow: 0 0 0 3px rgba(99,102,241,0.12);
}
.fmn-input {
flex: 1; padding: 0.65rem 0.9rem; border: none; font-size: 0.9rem;
color: var(--color-primary, #0a0a0a); background: transparent; font-family: inherit;
min-width: 0;
}
.fmn-input:focus { outline: none; }
.fmn-btn {
padding: 0.65rem 1.1rem; background: var(--color-accent, #6366f1); color: #fff;
border: none; font-size: 0.875rem; font-weight: 600; cursor: pointer;
transition: opacity 0.2s; white-space: nowrap; flex-shrink: 0;
}
.fmn-btn:hover { opacity: 0.88; }
.fmn-hint { font-size: 0.72rem; color: #aaa; margin: 0; }
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
headline | string | — | Formuliertitel |
* = verplicht