@xiwebdesign/xicms-core 5.2.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/blockEditors/index.js +2 -2
- package/dist/admin/blockEditors/index.js.map +1 -1
- package/dist/blocks/builtins/Booking.js +1 -1
- package/dist/blocks/builtins/Booking.js.map +1 -1
- package/dist/blocks/builtins/Embed.js +2 -0
- package/dist/blocks/builtins/Embed.js.map +1 -1
- package/dist/blocks/builtins/Hero.js +45 -6
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/ImageBlock.js +14 -3
- package/dist/blocks/builtins/ImageBlock.js.map +1 -1
- package/dist/blocks/builtins/Jobs.d.ts +2 -2
- package/dist/blocks/builtins/Jobs.js +1 -1
- package/dist/blocks/builtins/Jobs.js.map +1 -1
- package/dist/blocks/builtins/Newsletter.js +18 -5
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/Pricing.js +3 -1
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/Sections.js +4 -4
- package/dist/blocks/builtins/Sections.js.map +1 -1
- package/dist/blocks/builtins/Slider.js +9 -4
- package/dist/blocks/builtins/Slider.js.map +1 -1
- package/dist/blocks/builtins/Video.js +1 -1
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/Widgets.js +2 -1
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/schema/blocks.d.ts +0 -78
- package/dist/schema/blocks.js +1 -6
- package/dist/schema/blocks.js.map +1 -1
- package/dist/styles.css +50 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/blockEditors/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ComponentType, useEffect, useState } from \"react\";\nimport { collection, getDocs } from \"firebase/firestore\";\nimport { getDb } from \"../../firebase/client\";\nimport { Button, Field, Input, Textarea } from \"../ui/primitives\";\nimport { Select } from \"../ui/select\";\nimport { Switch } from \"../ui/switch\";\nimport { ArrayEditor } from \"../ui/ArrayEditor\";\nimport { RichTextEditor } from \"../editors/RichTextEditor\";\nimport { MediaPickerButton } from \"../media/MediaPicker\";\nimport { useRegistry } from \"../../blocks/context\";\nimport { GenericEditor } from \"./GenericEditor\";\nimport { SymbolRefEditor } from \"./SymbolRefEditor\";\n\nconst VARIANT_OPTIONS = [\n { value: \"primary\", label: \"Primair\" },\n { value: \"secondary\", label: \"Secundair\" },\n { value: \"outline\", label: \"Outline\" },\n];\n\nexport interface BlockEditorProps {\n block: Record<string, unknown>;\n siteId: string;\n onChange: (next: Record<string, unknown>) => void;\n}\n\nfunction patch(block: Record<string, unknown>, onChange: BlockEditorProps[\"onChange\"], part: Record<string, unknown>) {\n onChange({ ...block, ...part });\n}\n\n/**\n * Beeldveld-knop: opent de mediabibliotheek-kiezer (zoek + klik om te kiezen, of upload nieuw).\n * Behoudt de `onUploaded(url, mediaId)`-signatuur zodat alle bestaande beeldvelden 'm meteen krijgen.\n */\nfunction ImageUploadButton({ siteId, onUploaded }: { siteId: string; onUploaded: (url: string, mediaId: string, alt?: string) => void }) {\n return <MediaPickerButton siteId={siteId} onSelect={(m) => onUploaded(m.url, m.mediaId, m.alt)} />;\n}\n\ntype FaqItem = { q: string; a: string; aHtml?: string };\ntype PricingItem = {\n label: string;\n price: string;\n detail?: string;\n features?: string[];\n ctaLabel?: string;\n ctaHref?: string;\n highlighted?: boolean;\n billingPeriod?: string;\n};\ntype DownloadItem = { label: string; href: string; meta?: string };\n\nfunction HeroEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Regeltje boven de titel (optioneel)\" hint=\"bv. 'Hoveniers sinds 2001'\">\n <Input value={(block.eyebrow as string) ?? \"\"} onChange={(e) => patch(block, onChange, { eyebrow: e.target.value || undefined })} />\n </Field>\n <Field label=\"Titel\">\n <Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} />\n </Field>\n <Field label=\"Ondertitel\">\n <Input value={(block.subtitle as string) ?? \"\"} onChange={(e) => patch(block, onChange, { subtitle: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"left\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Gecentreerd\" },\n ]}\n />\n </Field>\n <Field label=\"Achtergrondafbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url, mediaId) => patch(block, onChange, { imageUrl: url, imageId: mediaId })} />\n </div>\n </Field>\n <Field label=\"Video-achtergrond (mp4/webm, optioneel)\" hint=\"Overschrijft de afbeelding.\">\n <Input value={(block.videoUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { videoUrl: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Verticale uitlijning\">\n <Select\n value={(block.vAlign as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { vAlign: v })}\n options={[\n { value: \"top\", label: \"Boven\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"bottom\", label: \"Onder\" },\n ]}\n />\n </Field>\n <Field label=\"Hoogte\">\n <Select\n value={(block.minHeight as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { minHeight: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"sm\", label: \"Klein\" },\n { value: \"md\", label: \"Normaal\" },\n { value: \"lg\", label: \"Groot\" },\n { value: \"full\", label: \"Volledig scherm\" },\n ]}\n />\n </Field>\n <Field label=\"Overlay-kleur (optioneel)\">\n <Input value={(block.overlayColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { overlayColor: e.target.value })} placeholder=\"#000000\" />\n </Field>\n <Field label=\"Overlay-dekking (%)\">\n <Input type=\"number\" value={String((block.overlayOpacity as number) ?? 0)} onChange={(e) => patch(block, onChange, { overlayOpacity: Math.max(0, Math.min(100, Number(e.target.value) || 0)) })} />\n </Field>\n <ToggleField label=\"Gradient-overlay (donker onderaan — leesbare tekst op foto's)\" checked={Boolean(block.overlayGradient)} onChange={(v) => patch(block, onChange, { overlayGradient: v })} />\n </div>\n <div>\n <span className=\"text-sm font-medium\">Knoppen</span>\n <ArrayEditor\n items={(block.buttons as { label: string; href: string; variant: string }[]) ?? []}\n onChange={(buttons) => patch(block, onChange, { buttons })}\n newItem={() => ({ label: \"\", href: \"#\", variant: \"primary\" })}\n addLabel=\"+ Knop\"\n renderRow={(b, update) => (\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={b.label} placeholder=\"Label\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={b.href} placeholder=\"/pad of https://…\" onChange={(e) => update({ href: e.target.value })} />\n <Select value={b.variant} onValueChange={(v) => update({ variant: v })} options={VARIANT_OPTIONS} />\n </div>\n )}\n />\n </div>\n </div>\n );\n}\n\nfunction RichTextBlockEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n );\n}\n\nfunction ImageEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url, mediaId) => patch(block, onChange, { url, mediaId })} />\n </div>\n </Field>\n <Field label=\"Alt-tekst (toegankelijkheid)\" hint=\"Beschrijf de afbeelding kort.\">\n <Input value={(block.alt as string) ?? \"\"} onChange={(e) => patch(block, onChange, { alt: e.target.value })} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Link (klikbaar)\">\n <Input value={(block.href as string) ?? \"\"} onChange={(e) => patch(block, onChange, { href: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"right\", label: \"Rechts\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"1:1\" },\n { value: \"3/2\", label: \"3:2\" },\n ]}\n />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FaqEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as FaqItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ToggleField label=\"Items standaard open tonen\" checked={block.defaultOpen === true} onChange={(v) => patch(block, onChange, { defaultOpen: v })} />\n {/* ArrayEditor levert toevoegen + verwijderen + herorden (↑/↓) — zo kun je de volgorde van\n vragen aanpassen, consistent met pricing/cards/team. */}\n <ArrayEditor<FaqItem>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ q: \"\", a: \"\" })}\n addLabel=\"+ Vraag toevoegen\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Field label=\"Vraag\">\n <Input value={it.q ?? \"\"} onChange={(e) => update({ q: e.target.value })} />\n </Field>\n {it.aHtml !== undefined ? (\n <Field label=\"Antwoord (met opmaak)\">\n <RichTextEditor siteId={siteId} value={it.aHtml} onChange={(html) => update({ aHtml: html })} />\n </Field>\n ) : (\n <Field label=\"Antwoord\">\n <Textarea rows={2} value={it.a ?? \"\"} onChange={(e) => update({ a: e.target.value })} />\n </Field>\n )}\n {it.aHtml === undefined ? (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: it.a ? `<p>${it.a}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n </div>\n ) : (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n </div>\n )}\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction PricingEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as PricingItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", price: \"\", features: [], highlighted: false })}\n addLabel=\"+ Pakket\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={it.price} placeholder=\"€ 00\" onChange={(e) => update({ price: e.target.value })} />\n <Input value={it.billingPeriod ?? \"\"} placeholder=\"/maand\" onChange={(e) => update({ billingPeriod: e.target.value })} />\n </div>\n <Input value={it.detail ?? \"\"} placeholder=\"Korte omschrijving\" onChange={(e) => update({ detail: e.target.value })} />\n <Field label=\"Features (één per regel)\">\n <Textarea\n rows={3}\n value={(it.features ?? []).join(\"\\n\")}\n onChange={(e) => update({ features: e.target.value.split(\"\\n\").map((s) => s.trim()).filter(Boolean) })}\n />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.ctaLabel ?? \"\"} placeholder=\"Knoptekst\" onChange={(e) => update({ ctaLabel: e.target.value })} />\n <Input value={it.ctaHref ?? \"\"} placeholder=\"Knoplink\" onChange={(e) => update({ ctaHref: e.target.value })} />\n </div>\n <label className=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={Boolean(it.highlighted)} onChange={(e) => update({ highlighted: e.target.checked })} />\n Uitgelicht pakket\n </label>\n </div>\n )}\n />\n <Field label=\"Voetnoot (optioneel)\">\n <Input value={(block.note as string) ?? \"\"} onChange={(e) => patch(block, onChange, { note: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 items-end gap-2\">\n <Field label=\"Valuta\" hint=\"ISO-code voor zoekmachines, bv. EUR\">\n <Input value={(block.currency as string) ?? \"EUR\"} onChange={(e) => patch(block, onChange, { currency: e.target.value || \"EUR\" })} />\n </Field>\n <ToggleField label=\"JSON-LD (Product/Offer)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n </div>\n );\n}\n\nfunction NewsListEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-3\">\n <Field label=\"Per pagina\" hint=\"0 = alles ineens; anders 'Meer laden'-knop\">\n <Input\n type=\"number\"\n value={String((block.pageSize as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { pageSize: Math.max(0, Math.min(24, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Aantal\">\n <Input\n type=\"number\"\n value={String((block.limit as number) ?? 6)}\n onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(50, Number(e.target.value) || 6)) })}\n />\n </Field>\n <Field label=\"Basispad\">\n <Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FormEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n\n const current = (block.formId as string) ?? \"\";\n const missing = current && forms.length > 0 && !forms.some((f) => f.id === current);\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <Field label=\"Formulier\" hint=\"Maak een formulier aan onder het tabblad Formulieren.\">\n {forms.length > 0 ? (\n <Select\n value={current}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={current} onChange={(e) => patch(block, onChange, { formId: e.target.value })} placeholder=\"Formulier-id\" />\n )}\n </Field>\n {missing && (\n <p className=\"text-xs text-red-600\">Dit formulier-id bestaat niet (meer). Kies een bestaand formulier.</p>\n )}\n </div>\n );\n}\n\nfunction GalleryEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { url?: string; alt?: string; caption?: string; tag?: string }[]) ?? [];\n const set = (next: typeof items) => patch(block, onChange, { items: next });\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Kolommen\" hint=\"0 = volg module-instelling\">\n <Input\n type=\"number\"\n value={String((block.columns as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { columns: Math.max(0, Math.min(6, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Lightbox\">\n <Select\n value={(block.lightbox as string) ?? \"inherit\"}\n onValueChange={(v) => patch(block, onChange, { lightbox: v })}\n options={[\n { value: \"inherit\", label: \"Volg module-instelling\" },\n { value: \"on\", label: \"Aan\" },\n { value: \"off\", label: \"Uit\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"1/1\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"1/1\", label: \"Vierkant (1:1)\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"auto\", label: \"Eigen verhouding\" },\n ]}\n />\n </Field>\n </div>\n {items.map((it, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label={`Foto ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, url: e.target.value } : x)))} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => set(items.map((x, j) => (j === i ? { ...x, url } : x)))} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Alt-tekst\">\n <Input value={it.alt ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, alt: e.target.value } : x)))} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={it.caption ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, caption: e.target.value } : x)))} />\n </Field>\n <Field label=\"Tag\" hint=\"Voor de filterbalk\">\n <Input value={it.tag ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, tag: e.target.value || undefined } : x)))} />\n </Field>\n </div>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(items.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...items, { url: \"\", alt: \"\" }])}>+ Foto toevoegen</Button>\n </div>\n <ToggleField label=\"Filterbalk op tags\" checked={Boolean(block.showFilter)} onChange={(v) => patch(block, onChange, { showFilter: v })} />\n </div>\n );\n}\n\nfunction AgendaEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as { title: string; start: string; end?: string; location?: string; description?: string; url?: string }[]) ?? [];\n const set = (next: typeof events) => patch(block, onChange, { events: next });\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n {events.map((ev, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label=\"Titel\">\n <Input value={ev.title ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, title: e.target.value } : x)))} />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Start\" hint=\"bv. 2026-07-01 of 2026-07-01T19:30\">\n <Input value={ev.start ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, start: e.target.value } : x)))} />\n </Field>\n <Field label=\"Einde (optioneel)\">\n <Input value={ev.end ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, end: e.target.value } : x)))} />\n </Field>\n </div>\n <Field label=\"Locatie (optioneel)\">\n <Input value={ev.location ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, location: e.target.value } : x)))} />\n </Field>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(events.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...events, { title: \"\", start: \"\" }])}>+ Evenement toevoegen</Button>\n </div>\n </div>\n );\n}\n\nfunction HeadingField({ block, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n );\n}\nfunction ToggleField({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch checked={checked} onCheckedChange={onChange} />\n {label}\n </label>\n );\n}\n\nfunction FeatureEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Beeldpositie\">\n <Select value={(block.imagePosition as string) ?? \"left\"} onValueChange={(v) => patch(block, onChange, { imagePosition: v })} options={[{ value: \"left\", label: \"Links\" }, { value: \"right\", label: \"Rechts\" }]} />\n </Field>\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction VideoEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Bron\">\n <Select value={(block.provider as string) ?? \"youtube\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"youtube\", label: \"YouTube\" }, { value: \"vimeo\", label: \"Vimeo\" }, { value: \"file\", label: \"MP4/WebM-URL\" }]} />\n </Field>\n <Field label=\"Id of URL\"><Input value={(block.src as string) ?? \"\"} onChange={(e) => patch(block, onChange, { src: e.target.value })} /></Field>\n </div>\n <Field label=\"Bijschrift (optioneel)\"><Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} /></Field>\n <Field label=\"Voorvertoningsbeeld (optioneel)\">\n <div className=\"flex gap-2\">\n <Input value={(block.posterUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { posterUrl: e.target.value || undefined })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { posterUrl: url })} />\n </div>\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n <ToggleField label=\"Click-to-play (speler laadt pas na klik — sneller & privacyvriendelijker)\" checked={Boolean(block.facade)} onChange={(v) => patch(block, onChange, { facade: v })} />\n </div>\n );\n}\n\n/** Coördinaten als één \"lat, lng\"-veld: pas bij een compleet geldig paar wordt het blok bijgewerkt\n * (een half ingevuld paar zou het blok anders schema-ongeldig maken). */\nfunction GeoField({ value, onChange }: { value?: { lat: number; lng: number }; onChange: (geo?: { lat: number; lng: number }) => void }) {\n const [text, setText] = useState(value ? `${value.lat}, ${value.lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 52.0907, 5.1214 — toont het bedrijf op de juiste plek in Google\">\n <Input\n value={text}\n placeholder=\"52.0907, 5.1214\"\n onChange={(e) => {\n setText(e.target.value);\n const m = e.target.value.trim().match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) {\n if (e.target.value.trim() === \"\") onChange(undefined);\n return;\n }\n const lat = Number(m[1]);\n const lng = Number(m[2]);\n if (Math.abs(lat) <= 90 && Math.abs(lng) <= 180) onChange({ lat, lng });\n }}\n />\n </Field>\n );\n}\n\nfunction ContactEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n <Field label=\"Openingstijden\"><Input value={(block.hours as string) ?? \"\"} onChange={(e) => patch(block, onChange, { hours: e.target.value })} /></Field>\n <GeoField\n value={block.geo as { lat: number; lng: number } | undefined}\n onChange={(geo) => patch(block, onChange, { geo })}\n />\n <ToggleField label=\"JSON-LD (LocalBusiness)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n );\n}\n\n/** Coördinaten-veld voor de kaart: zet `lat`/`lng` (los, want het map-schema gebruikt geen geo-object).\n * Pas bij een geldig paar wordt het blok bijgewerkt; leegmaken wist de coördinaten (terug naar de\n * adres/query-fallback). */\nfunction MapCoordField({ block, onChange }: BlockEditorProps) {\n const lat = block.lat as number | undefined;\n const lng = block.lng as number | undefined;\n const [text, setText] = useState(lat != null && lng != null ? `${lat}, ${lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 51.9958, 5.0924 — toont een echte kaart i.p.v. de wereldkaart. Coördinaten vind je door in openstreetmap.org rechts te klikken → 'Toon adres'.\">\n <Input\n value={text}\n placeholder=\"51.9958, 5.0924\"\n onChange={(e) => {\n setText(e.target.value);\n const t = e.target.value.trim();\n if (t === \"\") { patch(block, onChange, { lat: undefined, lng: undefined }); return; }\n const m = t.match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) return;\n const la = Number(m[1]);\n const ln = Number(m[2]);\n if (Math.abs(la) <= 90 && Math.abs(ln) <= 180) patch(block, onChange, { lat: la, lng: ln });\n }}\n />\n </Field>\n );\n}\n\nfunction MapEditor({ block, siteId, onChange }: BlockEditorProps) {\n const isGoogle = (block.provider as string) === \"google\";\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aanbieder\">\n <Select value={(block.provider as string) ?? \"osm\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"osm\", label: \"OpenStreetMap (coördinaten)\" }, { value: \"google\", label: \"Google (embed-URL)\" }]} />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 360)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(800, Number(e.target.value) || 360)) })} /></Field>\n </div>\n {isGoogle ? (\n <Field label=\"Embed-URL\">\n <Input value={(block.query as string) ?? \"\"} onChange={(e) => patch(block, onChange, { query: e.target.value })} />\n </Field>\n ) : (\n <>\n <MapCoordField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Zoom (1–20)\"><Input type=\"number\" value={String((block.zoom as number) ?? 14)} onChange={(e) => patch(block, onChange, { zoom: Math.max(1, Math.min(20, Number(e.target.value) || 14)) })} /></Field>\n </>\n )}\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction NewsletterEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL (provider)\" hint=\"bv. Mailchimp form-action\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n {!block.actionUrl && (\n <Field label=\"Of: opslaan in XiCMS-formulier\" hint=\"Maak onder Formulieren een formulier met een 'email'-veld; aanmeldingen verschijnen daar.\">\n {forms.length > 0 ? (\n <Select\n value={(block.formId as string) ?? \"\"}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v || undefined })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={(block.formId as string) ?? \"\"} onChange={(e) => patch(block, onChange, { formId: e.target.value || undefined })} placeholder=\"formulier-id\" />\n )}\n </Field>\n )}\n <Field label=\"AVG-akkoordtekst\" hint=\"Leeg = geen checkbox; bv. 'Ik ga akkoord met de privacyverklaring'\">\n <Input value={(block.consentText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { consentText: e.target.value || undefined })} />\n </Field>\n </div>\n );\n}\n\nfunction BookingEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <p className=\"rounded-md bg-slate-50 p-2 text-xs text-slate-600\">\n Dit blok <strong>toont een bestaand afsprakensysteem</strong> in je pagina (een embed). XiCMS heeft\n geen eigen agenda. Maak een account bij een boekingsdienst — bv.{\" \"}\n <strong>Calendly</strong>, <strong>Salonized</strong>, <strong>Treatwell</strong>,{\" \"}\n <strong>Acuity</strong> of <strong>SimplyBook</strong> — kopieer daar de “embed/insluiten”-link\n en plak die hieronder.\n </p>\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Reserveersysteem\" hint=\"Kies je aanbieder of 'Eigen embed' voor een vrije link.\">\n <Select\n value={(block.provider as string) ?? \"custom\"}\n onValueChange={(v) => patch(block, onChange, { provider: v })}\n options={[\n { value: \"custom\", label: \"Eigen embed (vrije URL)\" },\n { value: \"calendly\", label: \"Calendly\" },\n { value: \"cal\", label: \"Cal.com\" },\n { value: \"formitable\", label: \"Formitable\" },\n { value: \"resengo\", label: \"Resengo\" },\n { value: \"thefork\", label: \"TheFork\" },\n { value: \"treatwell\", label: \"Treatwell\" },\n { value: \"salonized\", label: \"Salonized\" },\n { value: \"tablebooker\", label: \"Tablebooker\" },\n { value: \"bookingkit\", label: \"bookingkit\" },\n ]}\n />\n </Field>\n <Field label=\"Embed-URL of account-naam\" hint=\"Volledige link óf alleen je slug/id — de provider-keuze bouwt er de juiste embed van.\">\n <Input value={(block.embedUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { embedUrl: e.target.value })} placeholder=\"https://calendly.com/jouw-naam/intake — of: jouw-naam/intake\" />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 630)} onChange={(e) => patch(block, onChange, { height: Math.max(300, Math.min(1200, Number(e.target.value) || 630)) })} /></Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction AccordionEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { title: string; body: string; bodyHtml?: string }[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <ArrayEditor<{ title: string; body: string; bodyHtml?: string }>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ title: \"\", body: \"\" })}\n addLabel=\"+ Paneel\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n {it.bodyHtml !== undefined ? (\n <RichTextEditor siteId={siteId} value={it.bodyHtml} onChange={(html) => update({ bodyHtml: html })} />\n ) : (\n <Textarea rows={2} value={it.body} placeholder=\"Inhoud\" onChange={(e) => update({ body: e.target.value })} />\n )}\n <div>\n {it.bodyHtml === undefined ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: it.body ? `<p>${it.body}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n ) : (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n )}\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Meerdere tegelijk open\" checked={Boolean(block.multiple)} onChange={(v) => patch(block, onChange, { multiple: v })} />\n </div>\n );\n}\n\nfunction EmbedEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"URL (iframe)\"><Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Titel (toegankelijkheid)\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 420)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(1200, Number(e.target.value) || 420)) })} /></Field>\n </div>\n <Field label=\"Beeldverhouding\" hint=\"'Vaste hoogte' gebruikt het hoogte-veld\">\n <Select\n value={(block.aspectRatio as string) ?? \"fixed\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"fixed\", label: \"Vaste hoogte\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"Vierkant\" },\n ]}\n />\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\n/* ════════════════════ Indeling: geneste blok-lijsten ════════════════════ */\n\nfunction nestKey() {\n return (globalThis.crypto?.randomUUID?.() ?? `b${Date.now()}${Math.random()}`).slice(0, 12);\n}\n\n/**\n * Beheert een geneste blok-lijst (kolommen / zijbalk / tab): blok toevoegen, sorteren, verwijderen,\n * en per blok zijn eigen velden bewerken (recursief via dezelfde editor-registry). Zo kun je ook in\n * een zijbalk gewoon widgets plaatsen en instellen, zonder JSON.\n */\nexport function NestedBlocksEditor({\n blocks,\n siteId,\n onChange,\n addLabel = \"+ Blok toevoegen…\",\n}: {\n blocks: Record<string, unknown>[];\n siteId: string;\n onChange: (next: Record<string, unknown>[]) => void;\n addLabel?: string;\n}) {\n const registry = useRegistry();\n const [openKey, setOpenKey] = useState<string | null>(null);\n const list = blocks ?? [];\n const addOptions = [...registry.values()].map((d) => ({ value: d.type, label: `${d.icon ?? \"▫\"} ${d.label}` }));\n\n function add(type: string) {\n const def = registry.get(type);\n const base = def?.defaults?.() ?? {};\n const b = { _key: nestKey(), _type: type, ...base } as Record<string, unknown>;\n onChange([...list, b]);\n setOpenKey(b._key as string);\n }\n function move(i: number, dir: -1 | 1) {\n const j = i + dir;\n if (j < 0 || j >= list.length) return;\n const copy = [...list];\n [copy[i], copy[j]] = [copy[j], copy[i]];\n onChange(copy);\n }\n\n return (\n <div className=\"grid gap-2\">\n {list.map((b, i) => {\n const type = b._type as string;\n const def = registry.get(type);\n const Editor = (def?.Editor as ComponentType<BlockEditorProps> | undefined) ?? builtinBlockEditors[type] ?? GenericEditor;\n const open = openKey === (b._key as string);\n return (\n <div key={(b._key as string) ?? i} className=\"rounded-lg border border-slate-200 bg-white\">\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <button\n type=\"button\"\n className=\"flex-1 truncate text-left text-sm\"\n onClick={() => setOpenKey(open ? null : (b._key as string))}\n >\n <span className=\"mr-1\">{def?.icon ?? \"▫\"}</span>\n {def?.label ?? type}\n </button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, -1)} aria-label=\"Omhoog\">↑</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, 1)} aria-label=\"Omlaag\">↓</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => onChange(list.filter((_, j) => j !== i))} aria-label=\"Verwijderen\">🗑</Button>\n </div>\n {open && (\n <div className=\"border-t border-slate-100 p-2\">\n <Editor block={b} siteId={siteId} onChange={(next) => onChange(list.map((x, j) => (j === i ? next : x)))} />\n </div>\n )}\n </div>\n );\n })}\n {list.length === 0 && <p className=\"text-xs text-slate-400\">Nog geen blokken.</p>}\n <Select value=\"\" placeholder={addLabel} onValueChange={(v) => v && add(v)} options={addOptions} />\n </div>\n );\n}\n\nfunction ColumnsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const cols = (block.columns as { blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof cols) => patch(block, onChange, { columns: next });\n return (\n <div className=\"grid gap-3\">\n {cols.map((c, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-slate-500\">Kolom {i + 1}</span>\n {cols.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(cols.filter((_, j) => j !== i))}>Kolom weg</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={c.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(cols.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {cols.length < 4 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...cols, { blocks: [] }])}>+ Kolom toevoegen</Button>\n )}\n </div>\n );\n}\n\nfunction WithSidebarEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Zijbalk\">\n <Select\n value={(block.side as string) ?? \"right\"}\n onValueChange={(v) => patch(block, onChange, { side: v })}\n options={[{ value: \"right\", label: \"Rechts\" }, { value: \"left\", label: \"Links\" }]}\n />\n </Field>\n <Field label=\"Breedte\">\n <Select\n value={(block.sidebarWidth as string) ?? \"md\"}\n onValueChange={(v) => patch(block, onChange, { sidebarWidth: v })}\n options={[{ value: \"sm\", label: \"Smal\" }, { value: \"md\", label: \"Normaal\" }, { value: \"lg\", label: \"Breed\" }]}\n />\n </Field>\n <Field label=\"Meescrollen\">\n <Select\n value={block.sticky === false ? \"no\" : \"yes\"}\n onValueChange={(v) => patch(block, onChange, { sticky: v === \"yes\" })}\n options={[{ value: \"yes\", label: \"Sticky\" }, { value: \"no\", label: \"Nee\" }]}\n />\n </Field>\n </div>\n <Field label=\"Hoofdinhoud\">\n <NestedBlocksEditor\n blocks={(block.main as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { main: next })}\n />\n </Field>\n <Field label=\"Zijbalk (widgets)\" hint=\"Plaats hier compacte widgets: laatste nieuws, agenda, contact…\">\n <NestedBlocksEditor\n blocks={(block.aside as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { aside: next })}\n addLabel=\"+ Widget/blok toevoegen…\"\n />\n </Field>\n </div>\n );\n}\n\nfunction TabsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const tabs = (block.tabs as { label: string; blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof tabs) => patch(block, onChange, { tabs: next });\n return (\n <div className=\"grid gap-3\">\n {tabs.map((t, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={t.label} placeholder={`Tab ${i + 1}`} onChange={(e) => set(tabs.map((x, j) => (j === i ? { ...x, label: e.target.value } : x)))} />\n {tabs.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(tabs.filter((_, j) => j !== i))}>🗑</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={t.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(tabs.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {tabs.length < 10 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...tabs, { label: `Tab ${tabs.length + 1}`, blocks: [] }])}>+ Tab toevoegen</Button>\n )}\n </div>\n );\n}\n\n/* ════════════════════ Nieuwe modules ════════════════════ */\n\ntype CardItem = { icon?: string; imageUrl?: string; title: string; text?: string; href?: string; linkLabel?: string; featured?: boolean };\nfunction CountdownEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n <ToggleField label=\"Labels tonen (dagen/uur/min/sec)\" checked={block.showLabels !== false} onChange={(v) => patch(block, onChange, { showLabels: v })} />\n <Field label=\"Na afloop\">\n <Select\n value={(block.onExpire as string) ?? \"message\"}\n onValueChange={(v) => patch(block, onChange, { onExpire: v })}\n options={[\n { value: \"message\", label: \"Melding tonen\" },\n { value: \"hide\", label: \"Blok verbergen\" },\n ]}\n />\n </Field>\n </div>\n );\n}\n\ntype Slide = { imageUrl?: string; alt?: string; caption?: string; href?: string };\nfunction SliderEditor({ block, siteId, onChange }: BlockEditorProps) {\n const slides = (block.slides as Slide[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"16/9\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"1/1\", label: \"Vierkant\" },\n { value: \"21/9\", label: \"Breedbeeld\" },\n ]}\n />\n </Field>\n <Field label=\"Interval (sec)\">\n <Input type=\"number\" value={String((block.interval as number) ?? 5)} onChange={(e) => patch(block, onChange, { interval: Math.max(2, Math.min(20, Number(e.target.value) || 5)) })} />\n </Field>\n </div>\n <div className=\"flex flex-wrap gap-4\">\n <ToggleField label=\"Automatisch afspelen\" checked={Boolean(block.autoplay)} onChange={(v) => patch(block, onChange, { autoplay: v })} />\n <ToggleField label=\"Stippen\" checked={block.showDots !== false} onChange={(v) => patch(block, onChange, { showDots: v })} />\n <ToggleField label=\"Pijlen\" checked={block.showArrows !== false} onChange={(v) => patch(block, onChange, { showArrows: v })} />\n </div>\n <ArrayEditor\n items={slides}\n onChange={(next) => patch(block, onChange, { slides: next })}\n newItem={() => ({ imageUrl: \"\", alt: \"\", caption: \"\" })}\n addLabel=\"+ Slide\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <Field label={`Afbeelding ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.imageUrl ?? \"\"} onChange={(e) => update({ imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n <Input value={it.caption ?? \"\"} placeholder=\"Bijschrift (optioneel)\" onChange={(e) => update({ caption: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\n/* ════════════════════ Widget-editors ════════════════════ */\n\nfunction NewsWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <Field label=\"Basispad\"><Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} /></Field>\n </div>\n <ToggleField label=\"Miniaturen tonen\" checked={Boolean(block.showImages)} onChange={(v) => patch(block, onChange, { showImages: v })} />\n </div>\n );\n}\n\ntype WEvent = { title: string; start: string; end?: string; location?: string; url?: string };\nfunction AgendaWidgetEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as WEvent[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={events}\n onChange={(next) => patch(block, onChange, { events: next })}\n newItem={(): WEvent => ({ title: \"\", start: \"\" })}\n addLabel=\"+ Evenement\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.start} placeholder=\"2026-07-01T19:30\" onChange={(e) => update({ start: e.target.value })} />\n <Input value={it.location ?? \"\"} placeholder=\"Locatie\" onChange={(e) => update({ location: e.target.value })} />\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Verlopen evenementen verbergen\" checked={block.hidePast !== false} onChange={(v) => patch(block, onChange, { hidePast: v })} />\n </div>\n );\n}\n\ntype Row = { day: string; hours: string };\nfunction OpeningHoursWidgetEditor({ block, onChange }: BlockEditorProps) {\n const rows = (block.rows as Row[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={rows}\n onChange={(next) => patch(block, onChange, { rows: next })}\n newItem={() => ({ day: \"\", hours: \"\" })}\n addLabel=\"+ Regel\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.day} placeholder=\"Maandag\" onChange={(e) => update({ day: e.target.value })} />\n <Input value={it.hours} placeholder=\"09:00 – 17:00\" onChange={(e) => update({ hours: e.target.value })} />\n </div>\n )}\n />\n <ToggleField label=\"Vandaag markeren\" checked={block.highlightToday !== false} onChange={(v) => patch(block, onChange, { highlightToday: v })} />\n </div>\n );\n}\n\nfunction ContactWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\ntype SocialItem = { platform: string; href: string };\nfunction SocialWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as SocialItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ platform: \"\", href: \"\" })}\n addLabel=\"+ Link\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.platform} placeholder=\"Instagram\" onChange={(e) => update({ platform: e.target.value })} />\n <Input value={it.href} placeholder=\"https://…\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction NewsletterWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"Aanmelden\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction CtaWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Titel\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n <Field label=\"Achtergrondkleur (optioneel)\"><Input value={(block.backgroundColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { backgroundColor: e.target.value })} placeholder=\"#f5f5f5\" /></Field>\n </div>\n );\n}\n\ntype GalleryWItem = { url?: string; alt?: string };\nfunction GalleryWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as GalleryWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Kolommen\"><Input type=\"number\" value={String((block.columns as number) ?? 3)} onChange={(e) => patch(block, onChange, { columns: Math.max(2, Math.min(4, Number(e.target.value) || 3)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ url: \"\", alt: \"\" })}\n addLabel=\"+ Foto\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => update({ url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ url })} />\n </div>\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\ntype TWItem = { quote: string; author: string; rating?: number };\nfunction TestimonialsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as TWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={(): TWItem => ({ quote: \"\", author: \"\" })}\n addLabel=\"+ Review\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Textarea rows={2} value={it.quote} placeholder=\"Citaat\" onChange={(e) => update({ quote: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.author} placeholder=\"Naam\" onChange={(e) => update({ author: e.target.value })} />\n <Input type=\"number\" value={String(it.rating ?? \"\")} placeholder=\"Sterren 1-5\" onChange={(e) => update({ rating: e.target.value ? Math.max(1, Math.min(5, Number(e.target.value))) : undefined })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\ntype CardWItem = { icon?: string; title: string; text?: string; href?: string };\nfunction CardsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as CardWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ icon: \"\", title: \"\", text: \"\" })}\n addLabel=\"+ Item\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.icon ?? \"\"} placeholder=\"Icoon (emoji)\" onChange={(e) => update({ icon: e.target.value })} />\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n </div>\n <Input value={it.text ?? \"\"} placeholder=\"Korte tekst\" onChange={(e) => update({ text: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction DownloadsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as DownloadItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", href: \"\", meta: \"\" })}\n addLabel=\"+ Document\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.href} placeholder=\"URL\" onChange={(e) => update({ href: e.target.value })} />\n <Input value={it.meta ?? \"\"} placeholder=\"PDF · 1,2 MB\" onChange={(e) => update({ meta: e.target.value })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction CountdownWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n </div>\n );\n}\n\n// Fallback-editor voor bloktypes zonder eigen `Editor` — sinds 5.0 aangedreven door de Field-IR\n// (repeaters/groepen/conditionele velden als echte UI). Zie ./GenericEditor.tsx (import bovenaan).\n\n/** Ingebouwde editors per blocktype. Klant-blokken kunnen hun eigen `Editor` meegeven. */\nexport const builtinBlockEditors: Record<string, ComponentType<BlockEditorProps>> = {\n hero: HeroEditor,\n richText: RichTextBlockEditor,\n image: ImageEditor,\n faq: FaqEditor,\n pricing: PricingEditor,\n newsList: NewsListEditor,\n form: FormEditor,\n gallery: GalleryEditor,\n agenda: AgendaEditor,\n feature: FeatureEditor,\n video: VideoEditor,\n contact: ContactEditor,\n map: MapEditor,\n newsletter: NewsletterEditor,\n booking: BookingEditor,\n accordion: AccordionEditor,\n embed: EmbedEditor,\n symbolRef: SymbolRefEditor,\n // Indeling\n columns: ColumnsEditor,\n withSidebar: WithSidebarEditor,\n tabs: TabsEditor,\n // Nieuwe modules\n countdown: CountdownEditor,\n slider: SliderEditor,\n // Widgets\n newsWidget: NewsWidgetEditor,\n agendaWidget: AgendaWidgetEditor,\n openingHoursWidget: OpeningHoursWidgetEditor,\n contactWidget: ContactWidgetEditor,\n socialWidget: SocialWidgetEditor,\n newsletterWidget: NewsletterWidgetEditor,\n ctaWidget: CtaWidgetEditor,\n galleryWidget: GalleryWidgetEditor,\n testimonialsWidget: TestimonialsWidgetEditor,\n cardsWidget: CardsWidgetEditor,\n downloadsWidget: DownloadsWidgetEditor,\n countdownWidget: CountdownWidgetEditor,\n};\n\nexport { GenericEditor };\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/blockEditors/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ComponentType, useEffect, useState } from \"react\";\nimport { collection, getDocs } from \"firebase/firestore\";\nimport { getDb } from \"../../firebase/client\";\nimport { Button, Field, Input, Textarea } from \"../ui/primitives\";\nimport { Select } from \"../ui/select\";\nimport { Switch } from \"../ui/switch\";\nimport { ArrayEditor } from \"../ui/ArrayEditor\";\nimport { RichTextEditor } from \"../editors/RichTextEditor\";\nimport { MediaPickerButton } from \"../media/MediaPicker\";\nimport { useRegistry } from \"../../blocks/context\";\nimport { GenericEditor } from \"./GenericEditor\";\nimport { SymbolRefEditor } from \"./SymbolRefEditor\";\n\nconst VARIANT_OPTIONS = [\n { value: \"primary\", label: \"Primair\" },\n { value: \"secondary\", label: \"Secundair\" },\n { value: \"outline\", label: \"Outline\" },\n];\n\nexport interface BlockEditorProps {\n block: Record<string, unknown>;\n siteId: string;\n onChange: (next: Record<string, unknown>) => void;\n}\n\nfunction patch(block: Record<string, unknown>, onChange: BlockEditorProps[\"onChange\"], part: Record<string, unknown>) {\n onChange({ ...block, ...part });\n}\n\n/**\n * Beeldveld-knop: opent de mediabibliotheek-kiezer (zoek + klik om te kiezen, of upload nieuw).\n * Behoudt de `onUploaded(url, mediaId)`-signatuur zodat alle bestaande beeldvelden 'm meteen krijgen.\n */\nfunction ImageUploadButton({ siteId, onUploaded }: { siteId: string; onUploaded: (url: string, mediaId: string, alt?: string) => void }) {\n return <MediaPickerButton siteId={siteId} onSelect={(m) => onUploaded(m.url, m.mediaId, m.alt)} />;\n}\n\ntype FaqItem = { q: string; a: string; aHtml?: string };\ntype PricingItem = {\n label: string;\n price: string;\n detail?: string;\n features?: string[];\n ctaLabel?: string;\n ctaHref?: string;\n highlighted?: boolean;\n billingPeriod?: string;\n};\ntype DownloadItem = { label: string; href: string; meta?: string };\n\nfunction HeroEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Regeltje boven de titel (optioneel)\" hint=\"bv. 'Hoveniers sinds 2001'\">\n <Input value={(block.eyebrow as string) ?? \"\"} onChange={(e) => patch(block, onChange, { eyebrow: e.target.value || undefined })} />\n </Field>\n <Field label=\"Titel\">\n <Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} />\n </Field>\n <Field label=\"Ondertitel\">\n <Input value={(block.subtitle as string) ?? \"\"} onChange={(e) => patch(block, onChange, { subtitle: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"left\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Gecentreerd\" },\n ]}\n />\n </Field>\n <Field label=\"Achtergrondafbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { imageUrl: url })} />\n </div>\n </Field>\n <Field label=\"Video-achtergrond (mp4/webm, optioneel)\" hint=\"Overschrijft de afbeelding.\">\n <Input value={(block.videoUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { videoUrl: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Verticale uitlijning\">\n <Select\n value={(block.vAlign as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { vAlign: v })}\n options={[\n { value: \"top\", label: \"Boven\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"bottom\", label: \"Onder\" },\n ]}\n />\n </Field>\n <Field label=\"Hoogte\">\n <Select\n value={(block.minHeight as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { minHeight: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"sm\", label: \"Klein\" },\n { value: \"md\", label: \"Normaal\" },\n { value: \"lg\", label: \"Groot\" },\n { value: \"full\", label: \"Volledig scherm\" },\n ]}\n />\n </Field>\n <Field label=\"Overlay-kleur (optioneel)\">\n <Input value={(block.overlayColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { overlayColor: e.target.value })} placeholder=\"#000000\" />\n </Field>\n <Field label=\"Overlay-dekking (%)\">\n <Input type=\"number\" value={String((block.overlayOpacity as number) ?? 0)} onChange={(e) => patch(block, onChange, { overlayOpacity: Math.max(0, Math.min(100, Number(e.target.value) || 0)) })} />\n </Field>\n <ToggleField label=\"Gradient-overlay (donker onderaan — leesbare tekst op foto's)\" checked={Boolean(block.overlayGradient)} onChange={(v) => patch(block, onChange, { overlayGradient: v })} />\n </div>\n <div>\n <span className=\"text-sm font-medium\">Knoppen</span>\n <ArrayEditor\n items={(block.buttons as { label: string; href: string; variant: string }[]) ?? []}\n onChange={(buttons) => patch(block, onChange, { buttons })}\n newItem={() => ({ label: \"\", href: \"#\", variant: \"primary\" })}\n addLabel=\"+ Knop\"\n renderRow={(b, update) => (\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={b.label} placeholder=\"Label\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={b.href} placeholder=\"/pad of https://…\" onChange={(e) => update({ href: e.target.value })} />\n <Select value={b.variant} onValueChange={(v) => update({ variant: v })} options={VARIANT_OPTIONS} />\n </div>\n )}\n />\n </div>\n </div>\n );\n}\n\nfunction RichTextBlockEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n );\n}\n\nfunction ImageEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { url })} />\n </div>\n </Field>\n <Field label=\"Alt-tekst (toegankelijkheid)\" hint=\"Beschrijf de afbeelding kort.\">\n <Input value={(block.alt as string) ?? \"\"} onChange={(e) => patch(block, onChange, { alt: e.target.value })} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Link (klikbaar)\">\n <Input value={(block.href as string) ?? \"\"} onChange={(e) => patch(block, onChange, { href: e.target.value })} />\n </Field>\n <Field label=\"Uitlijning\">\n <Select\n value={(block.align as string) ?? \"center\"}\n onValueChange={(v) => patch(block, onChange, { align: v })}\n options={[\n { value: \"left\", label: \"Links\" },\n { value: \"center\", label: \"Midden\" },\n { value: \"right\", label: \"Rechts\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"auto\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"auto\", label: \"Automatisch\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"1:1\" },\n { value: \"3/2\", label: \"3:2\" },\n ]}\n />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FaqEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as FaqItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ToggleField label=\"Items standaard open tonen\" checked={block.defaultOpen === true} onChange={(v) => patch(block, onChange, { defaultOpen: v })} />\n {/* ArrayEditor levert toevoegen + verwijderen + herorden (↑/↓) — zo kun je de volgorde van\n vragen aanpassen, consistent met pricing/cards/team. */}\n <ArrayEditor<FaqItem>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ q: \"\", a: \"\" })}\n addLabel=\"+ Vraag toevoegen\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Field label=\"Vraag\">\n <Input value={it.q ?? \"\"} onChange={(e) => update({ q: e.target.value })} />\n </Field>\n {it.aHtml !== undefined ? (\n <Field label=\"Antwoord (met opmaak)\">\n <RichTextEditor siteId={siteId} value={it.aHtml} onChange={(html) => update({ aHtml: html })} />\n </Field>\n ) : (\n <Field label=\"Antwoord\">\n <Textarea rows={2} value={it.a ?? \"\"} onChange={(e) => update({ a: e.target.value })} />\n </Field>\n )}\n {it.aHtml === undefined ? (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: it.a ? `<p>${it.a}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n </div>\n ) : (\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ aHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n </div>\n )}\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction PricingEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as PricingItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", price: \"\", features: [], highlighted: false })}\n addLabel=\"+ Pakket\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <Input value={it.price} placeholder=\"€ 00\" onChange={(e) => update({ price: e.target.value })} />\n <Input value={it.billingPeriod ?? \"\"} placeholder=\"/maand\" onChange={(e) => update({ billingPeriod: e.target.value })} />\n </div>\n <Input value={it.detail ?? \"\"} placeholder=\"Korte omschrijving\" onChange={(e) => update({ detail: e.target.value })} />\n <Field label=\"Features (één per regel)\">\n <Textarea\n rows={3}\n value={(it.features ?? []).join(\"\\n\")}\n onChange={(e) => update({ features: e.target.value.split(\"\\n\").map((s) => s.trim()).filter(Boolean) })}\n />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.ctaLabel ?? \"\"} placeholder=\"Knoptekst\" onChange={(e) => update({ ctaLabel: e.target.value })} />\n <Input value={it.ctaHref ?? \"\"} placeholder=\"Knoplink\" onChange={(e) => update({ ctaHref: e.target.value })} />\n </div>\n <label className=\"flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={Boolean(it.highlighted)} onChange={(e) => update({ highlighted: e.target.checked })} />\n Uitgelicht pakket\n </label>\n </div>\n )}\n />\n <Field label=\"Voetnoot (optioneel)\">\n <Input value={(block.note as string) ?? \"\"} onChange={(e) => patch(block, onChange, { note: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-2 items-end gap-2\">\n <Field label=\"Valuta\" hint=\"ISO-code voor zoekmachines, bv. EUR\">\n <Input value={(block.currency as string) ?? \"EUR\"} onChange={(e) => patch(block, onChange, { currency: e.target.value || \"EUR\" })} />\n </Field>\n <ToggleField label=\"JSON-LD (Product/Offer)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n </div>\n );\n}\n\nfunction NewsListEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <div className=\"grid grid-cols-3 gap-3\">\n <Field label=\"Per pagina\" hint=\"0 = alles ineens; anders 'Meer laden'-knop\">\n <Input\n type=\"number\"\n value={String((block.pageSize as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { pageSize: Math.max(0, Math.min(24, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Aantal\">\n <Input\n type=\"number\"\n value={String((block.limit as number) ?? 6)}\n onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(50, Number(e.target.value) || 6)) })}\n />\n </Field>\n <Field label=\"Basispad\">\n <Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} />\n </Field>\n </div>\n </div>\n );\n}\n\nfunction FormEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n\n const current = (block.formId as string) ?? \"\";\n const missing = current && forms.length > 0 && !forms.some((f) => f.id === current);\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n <Field label=\"Formulier\" hint=\"Maak een formulier aan onder het tabblad Formulieren.\">\n {forms.length > 0 ? (\n <Select\n value={current}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={current} onChange={(e) => patch(block, onChange, { formId: e.target.value })} placeholder=\"Formulier-id\" />\n )}\n </Field>\n {missing && (\n <p className=\"text-xs text-red-600\">Dit formulier-id bestaat niet (meer). Kies een bestaand formulier.</p>\n )}\n </div>\n );\n}\n\nfunction GalleryEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { url?: string; alt?: string; caption?: string; tag?: string }[]) ?? [];\n const set = (next: typeof items) => patch(block, onChange, { items: next });\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <Field label=\"Kolommen\" hint=\"0 = volg module-instelling\">\n <Input\n type=\"number\"\n value={String((block.columns as number) ?? 0)}\n onChange={(e) => patch(block, onChange, { columns: Math.max(0, Math.min(6, Number(e.target.value) || 0)) })}\n />\n </Field>\n <Field label=\"Lightbox\">\n <Select\n value={(block.lightbox as string) ?? \"inherit\"}\n onValueChange={(v) => patch(block, onChange, { lightbox: v })}\n options={[\n { value: \"inherit\", label: \"Volg module-instelling\" },\n { value: \"on\", label: \"Aan\" },\n { value: \"off\", label: \"Uit\" },\n ]}\n />\n </Field>\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"1/1\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"1/1\", label: \"Vierkant (1:1)\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"auto\", label: \"Eigen verhouding\" },\n ]}\n />\n </Field>\n </div>\n {items.map((it, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label={`Foto ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, url: e.target.value } : x)))} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => set(items.map((x, j) => (j === i ? { ...x, url } : x)))} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Alt-tekst\">\n <Input value={it.alt ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, alt: e.target.value } : x)))} />\n </Field>\n <Field label=\"Bijschrift\">\n <Input value={it.caption ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, caption: e.target.value } : x)))} />\n </Field>\n <Field label=\"Tag\" hint=\"Voor de filterbalk\">\n <Input value={it.tag ?? \"\"} onChange={(e) => set(items.map((x, j) => (j === i ? { ...x, tag: e.target.value || undefined } : x)))} />\n </Field>\n </div>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(items.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...items, { url: \"\", alt: \"\" }])}>+ Foto toevoegen</Button>\n </div>\n <ToggleField label=\"Filterbalk op tags\" checked={Boolean(block.showFilter)} onChange={(v) => patch(block, onChange, { showFilter: v })} />\n </div>\n );\n}\n\nfunction AgendaEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as { title: string; start: string; end?: string; location?: string; description?: string; url?: string }[]) ?? [];\n const set = (next: typeof events) => patch(block, onChange, { events: next });\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n {events.map((ev, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-3\">\n <Field label=\"Titel\">\n <Input value={ev.title ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, title: e.target.value } : x)))} />\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Start\" hint=\"bv. 2026-07-01 of 2026-07-01T19:30\">\n <Input value={ev.start ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, start: e.target.value } : x)))} />\n </Field>\n <Field label=\"Einde (optioneel)\">\n <Input value={ev.end ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, end: e.target.value } : x)))} />\n </Field>\n </div>\n <Field label=\"Locatie (optioneel)\">\n <Input value={ev.location ?? \"\"} onChange={(e) => set(events.map((x, j) => (j === i ? { ...x, location: e.target.value } : x)))} />\n </Field>\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(events.filter((_, j) => j !== i))}>Verwijderen</Button>\n </div>\n </div>\n ))}\n <div>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...events, { title: \"\", start: \"\" }])}>+ Evenement toevoegen</Button>\n </div>\n </div>\n );\n}\n\nfunction HeadingField({ block, onChange }: BlockEditorProps) {\n return (\n <Field label=\"Kop\">\n <Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} />\n </Field>\n );\n}\nfunction ToggleField({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch checked={checked} onCheckedChange={onChange} />\n {label}\n </label>\n );\n}\n\nfunction FeatureEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\">\n <RichTextEditor siteId={siteId} value={(block.html as string) ?? \"\"} onChange={(html) => patch(block, onChange, { html })} />\n </Field>\n <Field label=\"Afbeelding\">\n <div className=\"flex items-center gap-2\">\n <Input value={(block.imageUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Beeldpositie\">\n <Select value={(block.imagePosition as string) ?? \"left\"} onValueChange={(v) => patch(block, onChange, { imagePosition: v })} options={[{ value: \"left\", label: \"Links\" }, { value: \"right\", label: \"Rechts\" }]} />\n </Field>\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction VideoEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Bron\">\n <Select value={(block.provider as string) ?? \"youtube\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"youtube\", label: \"YouTube\" }, { value: \"vimeo\", label: \"Vimeo\" }, { value: \"file\", label: \"MP4/WebM-URL\" }]} />\n </Field>\n <Field label=\"Id of URL\"><Input value={(block.src as string) ?? \"\"} onChange={(e) => patch(block, onChange, { src: e.target.value })} /></Field>\n </div>\n <Field label=\"Bijschrift (optioneel)\"><Input value={(block.caption as string) ?? \"\"} onChange={(e) => patch(block, onChange, { caption: e.target.value })} /></Field>\n <Field label=\"Voorvertoningsbeeld (optioneel)\">\n <div className=\"flex gap-2\">\n <Input value={(block.posterUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { posterUrl: e.target.value || undefined })} placeholder=\"URL of upload →\" />\n <ImageUploadButton siteId={siteId} onUploaded={(url) => patch(block, onChange, { posterUrl: url })} />\n </div>\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n <ToggleField label=\"Click-to-play (speler laadt pas na klik — sneller & privacyvriendelijker)\" checked={Boolean(block.facade)} onChange={(v) => patch(block, onChange, { facade: v })} />\n </div>\n );\n}\n\n/** Coördinaten als één \"lat, lng\"-veld: pas bij een compleet geldig paar wordt het blok bijgewerkt\n * (een half ingevuld paar zou het blok anders schema-ongeldig maken). */\nfunction GeoField({ value, onChange }: { value?: { lat: number; lng: number }; onChange: (geo?: { lat: number; lng: number }) => void }) {\n const [text, setText] = useState(value ? `${value.lat}, ${value.lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 52.0907, 5.1214 — toont het bedrijf op de juiste plek in Google\">\n <Input\n value={text}\n placeholder=\"52.0907, 5.1214\"\n onChange={(e) => {\n setText(e.target.value);\n const m = e.target.value.trim().match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) {\n if (e.target.value.trim() === \"\") onChange(undefined);\n return;\n }\n const lat = Number(m[1]);\n const lng = Number(m[2]);\n if (Math.abs(lat) <= 90 && Math.abs(lng) <= 180) onChange({ lat, lng });\n }}\n />\n </Field>\n );\n}\n\nfunction ContactEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n <Field label=\"Openingstijden\"><Input value={(block.hours as string) ?? \"\"} onChange={(e) => patch(block, onChange, { hours: e.target.value })} /></Field>\n <GeoField\n value={block.geo as { lat: number; lng: number } | undefined}\n onChange={(geo) => patch(block, onChange, { geo })}\n />\n <ToggleField label=\"JSON-LD (LocalBusiness)\" checked={Boolean(block.jsonLd)} onChange={(v) => patch(block, onChange, { jsonLd: v })} />\n </div>\n );\n}\n\n/** Coördinaten-veld voor de kaart: zet `lat`/`lng` (los, want het map-schema gebruikt geen geo-object).\n * Pas bij een geldig paar wordt het blok bijgewerkt; leegmaken wist de coördinaten (terug naar de\n * adres/query-fallback). */\nfunction MapCoordField({ block, onChange }: BlockEditorProps) {\n const lat = block.lat as number | undefined;\n const lng = block.lng as number | undefined;\n const [text, setText] = useState(lat != null && lng != null ? `${lat}, ${lng}` : \"\");\n return (\n <Field label=\"Coördinaten (lat, lng)\" hint=\"bv. 51.9958, 5.0924 — toont een echte kaart i.p.v. de wereldkaart. Coördinaten vind je door in openstreetmap.org rechts te klikken → 'Toon adres'.\">\n <Input\n value={text}\n placeholder=\"51.9958, 5.0924\"\n onChange={(e) => {\n setText(e.target.value);\n const t = e.target.value.trim();\n if (t === \"\") { patch(block, onChange, { lat: undefined, lng: undefined }); return; }\n const m = t.match(/^(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)$/);\n if (!m) return;\n const la = Number(m[1]);\n const ln = Number(m[2]);\n if (Math.abs(la) <= 90 && Math.abs(ln) <= 180) patch(block, onChange, { lat: la, lng: ln });\n }}\n />\n </Field>\n );\n}\n\nfunction MapEditor({ block, siteId, onChange }: BlockEditorProps) {\n const isGoogle = (block.provider as string) === \"google\";\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aanbieder\">\n <Select value={(block.provider as string) ?? \"osm\"} onValueChange={(v) => patch(block, onChange, { provider: v })} options={[{ value: \"osm\", label: \"OpenStreetMap (coördinaten)\" }, { value: \"google\", label: \"Google (embed-URL)\" }]} />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 360)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(800, Number(e.target.value) || 360)) })} /></Field>\n </div>\n {isGoogle ? (\n <Field label=\"Embed-URL\">\n <Input value={(block.query as string) ?? \"\"} onChange={(e) => patch(block, onChange, { query: e.target.value })} />\n </Field>\n ) : (\n <>\n <MapCoordField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Zoom (1–20)\"><Input type=\"number\" value={String((block.zoom as number) ?? 14)} onChange={(e) => patch(block, onChange, { zoom: Math.max(1, Math.min(20, Number(e.target.value) || 14)) })} /></Field>\n </>\n )}\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction NewsletterEditor({ block, siteId, onChange }: BlockEditorProps) {\n const [forms, setForms] = useState<{ id: string; name: string }[]>([]);\n useEffect(() => {\n const db = getDb();\n if (!db) return;\n let cancelled = false;\n void getDocs(collection(db, \"sites\", siteId, \"forms\")).then((snap) => {\n if (!cancelled) setForms(snap.docs.map((d) => ({ id: d.id, name: String((d.data() as { name?: string }).name ?? d.id) })));\n });\n return () => {\n cancelled = true;\n };\n }, [siteId]);\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL (provider)\" hint=\"bv. Mailchimp form-action\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n {!block.actionUrl && (\n <Field label=\"Of: opslaan in XiCMS-formulier\" hint=\"Maak onder Formulieren een formulier met een 'email'-veld; aanmeldingen verschijnen daar.\">\n {forms.length > 0 ? (\n <Select\n value={(block.formId as string) ?? \"\"}\n placeholder=\"Kies een formulier…\"\n onValueChange={(v) => patch(block, onChange, { formId: v || undefined })}\n options={forms.map((f) => ({ value: f.id, label: f.name }))}\n />\n ) : (\n <Input value={(block.formId as string) ?? \"\"} onChange={(e) => patch(block, onChange, { formId: e.target.value || undefined })} placeholder=\"formulier-id\" />\n )}\n </Field>\n )}\n <Field label=\"AVG-akkoordtekst\" hint=\"Leeg = geen checkbox; bv. 'Ik ga akkoord met de privacyverklaring'\">\n <Input value={(block.consentText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { consentText: e.target.value || undefined })} />\n </Field>\n </div>\n );\n}\n\nfunction BookingEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <p className=\"rounded-md bg-slate-50 p-2 text-xs text-slate-600\">\n Dit blok <strong>toont een bestaand afsprakensysteem</strong> in je pagina (een embed). XiCMS heeft\n geen eigen agenda. Maak een account bij een boekingsdienst — bv.{\" \"}\n <strong>Calendly</strong>, <strong>Salonized</strong>, <strong>Treatwell</strong>,{\" \"}\n <strong>Acuity</strong> of <strong>SimplyBook</strong> — kopieer daar de “embed/insluiten”-link\n en plak die hieronder.\n </p>\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <Field label=\"Reserveersysteem\" hint=\"Kies je aanbieder of 'Eigen embed' voor een vrije link.\">\n <Select\n value={(block.provider as string) ?? \"custom\"}\n onValueChange={(v) => patch(block, onChange, { provider: v })}\n options={[\n { value: \"custom\", label: \"Eigen embed (vrije URL)\" },\n { value: \"calendly\", label: \"Calendly\" },\n { value: \"cal\", label: \"Cal.com\" },\n { value: \"formitable\", label: \"Formitable\" },\n { value: \"resengo\", label: \"Resengo\" },\n { value: \"thefork\", label: \"TheFork\" },\n { value: \"treatwell\", label: \"Treatwell\" },\n { value: \"salonized\", label: \"Salonized\" },\n { value: \"tablebooker\", label: \"Tablebooker\" },\n { value: \"bookingkit\", label: \"bookingkit\" },\n ]}\n />\n </Field>\n <Field label=\"Embed-URL of account-naam\" hint=\"Volledige link óf alleen je slug/id — de provider-keuze bouwt er de juiste embed van.\">\n <Input value={(block.embedUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { embedUrl: e.target.value })} placeholder=\"https://calendly.com/jouw-naam/intake — of: jouw-naam/intake\" />\n </Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 630)} onChange={(e) => patch(block, onChange, { height: Math.max(300, Math.min(1200, Number(e.target.value) || 630)) })} /></Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\nfunction AccordionEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as { title: string; body: string; bodyHtml?: string }[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <HeadingField block={block} siteId={siteId} onChange={onChange} />\n <ArrayEditor<{ title: string; body: string; bodyHtml?: string }>\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ title: \"\", body: \"\" })}\n addLabel=\"+ Paneel\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n {it.bodyHtml !== undefined ? (\n <RichTextEditor siteId={siteId} value={it.bodyHtml} onChange={(html) => update({ bodyHtml: html })} />\n ) : (\n <Textarea rows={2} value={it.body} placeholder=\"Inhoud\" onChange={(e) => update({ body: e.target.value })} />\n )}\n <div>\n {it.bodyHtml === undefined ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: it.body ? `<p>${it.body}</p>` : \"<p></p>\" })}>\n Opmaak gebruiken\n </Button>\n ) : (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => update({ bodyHtml: undefined })}>\n Terug naar platte tekst\n </Button>\n )}\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Meerdere tegelijk open\" checked={Boolean(block.multiple)} onChange={(v) => patch(block, onChange, { multiple: v })} />\n </div>\n );\n}\n\nfunction EmbedEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"URL (iframe)\"><Input value={(block.url as string) ?? \"\"} onChange={(e) => patch(block, onChange, { url: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Titel (toegankelijkheid)\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Hoogte (px)\"><Input type=\"number\" value={String((block.height as number) ?? 420)} onChange={(e) => patch(block, onChange, { height: Math.max(150, Math.min(1200, Number(e.target.value) || 420)) })} /></Field>\n </div>\n <Field label=\"Beeldverhouding\" hint=\"'Vaste hoogte' gebruikt het hoogte-veld\">\n <Select\n value={(block.aspectRatio as string) ?? \"fixed\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"fixed\", label: \"Vaste hoogte\" },\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"1/1\", label: \"Vierkant\" },\n ]}\n />\n </Field>\n <ToggleField label=\"Pas tonen na cookie-toestemming\" checked={block.consentGated !== false} onChange={(v) => patch(block, onChange, { consentGated: v })} />\n </div>\n );\n}\n\n/* ════════════════════ Indeling: geneste blok-lijsten ════════════════════ */\n\nfunction nestKey() {\n return (globalThis.crypto?.randomUUID?.() ?? `b${Date.now()}${Math.random()}`).slice(0, 12);\n}\n\n/**\n * Beheert een geneste blok-lijst (kolommen / zijbalk / tab): blok toevoegen, sorteren, verwijderen,\n * en per blok zijn eigen velden bewerken (recursief via dezelfde editor-registry). Zo kun je ook in\n * een zijbalk gewoon widgets plaatsen en instellen, zonder JSON.\n */\nexport function NestedBlocksEditor({\n blocks,\n siteId,\n onChange,\n addLabel = \"+ Blok toevoegen…\",\n}: {\n blocks: Record<string, unknown>[];\n siteId: string;\n onChange: (next: Record<string, unknown>[]) => void;\n addLabel?: string;\n}) {\n const registry = useRegistry();\n const [openKey, setOpenKey] = useState<string | null>(null);\n const list = blocks ?? [];\n const addOptions = [...registry.values()].map((d) => ({ value: d.type, label: `${d.icon ?? \"▫\"} ${d.label}` }));\n\n function add(type: string) {\n const def = registry.get(type);\n const base = def?.defaults?.() ?? {};\n const b = { _key: nestKey(), _type: type, ...base } as Record<string, unknown>;\n onChange([...list, b]);\n setOpenKey(b._key as string);\n }\n function move(i: number, dir: -1 | 1) {\n const j = i + dir;\n if (j < 0 || j >= list.length) return;\n const copy = [...list];\n [copy[i], copy[j]] = [copy[j], copy[i]];\n onChange(copy);\n }\n\n return (\n <div className=\"grid gap-2\">\n {list.map((b, i) => {\n const type = b._type as string;\n const def = registry.get(type);\n const Editor = (def?.Editor as ComponentType<BlockEditorProps> | undefined) ?? builtinBlockEditors[type] ?? GenericEditor;\n const open = openKey === (b._key as string);\n return (\n <div key={(b._key as string) ?? i} className=\"rounded-lg border border-slate-200 bg-white\">\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <button\n type=\"button\"\n className=\"flex-1 truncate text-left text-sm\"\n onClick={() => setOpenKey(open ? null : (b._key as string))}\n >\n <span className=\"mr-1\">{def?.icon ?? \"▫\"}</span>\n {def?.label ?? type}\n </button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, -1)} aria-label=\"Omhoog\">↑</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => move(i, 1)} aria-label=\"Omlaag\">↓</Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => onChange(list.filter((_, j) => j !== i))} aria-label=\"Verwijderen\">🗑</Button>\n </div>\n {open && (\n <div className=\"border-t border-slate-100 p-2\">\n <Editor block={b} siteId={siteId} onChange={(next) => onChange(list.map((x, j) => (j === i ? next : x)))} />\n </div>\n )}\n </div>\n );\n })}\n {list.length === 0 && <p className=\"text-xs text-slate-400\">Nog geen blokken.</p>}\n <Select value=\"\" placeholder={addLabel} onValueChange={(v) => v && add(v)} options={addOptions} />\n </div>\n );\n}\n\nfunction ColumnsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const cols = (block.columns as { blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof cols) => patch(block, onChange, { columns: next });\n return (\n <div className=\"grid gap-3\">\n {cols.map((c, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium text-slate-500\">Kolom {i + 1}</span>\n {cols.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(cols.filter((_, j) => j !== i))}>Kolom weg</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={c.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(cols.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {cols.length < 4 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...cols, { blocks: [] }])}>+ Kolom toevoegen</Button>\n )}\n </div>\n );\n}\n\nfunction WithSidebarEditor({ block, siteId, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Zijbalk\">\n <Select\n value={(block.side as string) ?? \"right\"}\n onValueChange={(v) => patch(block, onChange, { side: v })}\n options={[{ value: \"right\", label: \"Rechts\" }, { value: \"left\", label: \"Links\" }]}\n />\n </Field>\n <Field label=\"Breedte\">\n <Select\n value={(block.sidebarWidth as string) ?? \"md\"}\n onValueChange={(v) => patch(block, onChange, { sidebarWidth: v })}\n options={[{ value: \"sm\", label: \"Smal\" }, { value: \"md\", label: \"Normaal\" }, { value: \"lg\", label: \"Breed\" }]}\n />\n </Field>\n <Field label=\"Meescrollen\">\n <Select\n value={block.sticky === false ? \"no\" : \"yes\"}\n onValueChange={(v) => patch(block, onChange, { sticky: v === \"yes\" })}\n options={[{ value: \"yes\", label: \"Sticky\" }, { value: \"no\", label: \"Nee\" }]}\n />\n </Field>\n </div>\n <Field label=\"Hoofdinhoud\">\n <NestedBlocksEditor\n blocks={(block.main as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { main: next })}\n />\n </Field>\n <Field label=\"Zijbalk (widgets)\" hint=\"Plaats hier compacte widgets: laatste nieuws, agenda, contact…\">\n <NestedBlocksEditor\n blocks={(block.aside as Record<string, unknown>[]) ?? []}\n siteId={siteId}\n onChange={(next) => patch(block, onChange, { aside: next })}\n addLabel=\"+ Widget/blok toevoegen…\"\n />\n </Field>\n </div>\n );\n}\n\nfunction TabsEditor({ block, siteId, onChange }: BlockEditorProps) {\n const tabs = (block.tabs as { label: string; blocks: Record<string, unknown>[] }[]) ?? [];\n const set = (next: typeof tabs) => patch(block, onChange, { tabs: next });\n return (\n <div className=\"grid gap-3\">\n {tabs.map((t, i) => (\n <div key={i} className=\"grid gap-2 rounded-lg border border-slate-200 p-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={t.label} placeholder={`Tab ${i + 1}`} onChange={(e) => set(tabs.map((x, j) => (j === i ? { ...x, label: e.target.value } : x)))} />\n {tabs.length > 1 && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => set(tabs.filter((_, j) => j !== i))}>🗑</Button>\n )}\n </div>\n <NestedBlocksEditor\n blocks={t.blocks ?? []}\n siteId={siteId}\n onChange={(next) => set(tabs.map((x, j) => (j === i ? { ...x, blocks: next } : x)))}\n />\n </div>\n ))}\n {tabs.length < 10 && (\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => set([...tabs, { label: `Tab ${tabs.length + 1}`, blocks: [] }])}>+ Tab toevoegen</Button>\n )}\n </div>\n );\n}\n\n/* ════════════════════ Nieuwe modules ════════════════════ */\n\ntype CardItem = { icon?: string; imageUrl?: string; title: string; text?: string; href?: string; linkLabel?: string; featured?: boolean };\nfunction CountdownEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n <ToggleField label=\"Labels tonen (dagen/uur/min/sec)\" checked={block.showLabels !== false} onChange={(v) => patch(block, onChange, { showLabels: v })} />\n <Field label=\"Na afloop\">\n <Select\n value={(block.onExpire as string) ?? \"message\"}\n onValueChange={(v) => patch(block, onChange, { onExpire: v })}\n options={[\n { value: \"message\", label: \"Melding tonen\" },\n { value: \"hide\", label: \"Blok verbergen\" },\n ]}\n />\n </Field>\n </div>\n );\n}\n\ntype Slide = { imageUrl?: string; alt?: string; caption?: string; href?: string };\nfunction SliderEditor({ block, siteId, onChange }: BlockEditorProps) {\n const slides = (block.slides as Slide[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Beeldverhouding\">\n <Select\n value={(block.aspectRatio as string) ?? \"16/9\"}\n onValueChange={(v) => patch(block, onChange, { aspectRatio: v })}\n options={[\n { value: \"16/9\", label: \"16:9\" },\n { value: \"4/3\", label: \"4:3\" },\n { value: \"3/2\", label: \"3:2\" },\n { value: \"1/1\", label: \"Vierkant\" },\n { value: \"21/9\", label: \"Breedbeeld\" },\n ]}\n />\n </Field>\n <Field label=\"Interval (sec)\">\n <Input type=\"number\" value={String((block.interval as number) ?? 5)} onChange={(e) => patch(block, onChange, { interval: Math.max(2, Math.min(20, Number(e.target.value) || 5)) })} />\n </Field>\n </div>\n <div className=\"flex flex-wrap gap-4\">\n <ToggleField label=\"Automatisch afspelen\" checked={Boolean(block.autoplay)} onChange={(v) => patch(block, onChange, { autoplay: v })} />\n <ToggleField label=\"Stippen\" checked={block.showDots !== false} onChange={(v) => patch(block, onChange, { showDots: v })} />\n <ToggleField label=\"Pijlen\" checked={block.showArrows !== false} onChange={(v) => patch(block, onChange, { showArrows: v })} />\n </div>\n <ArrayEditor\n items={slides}\n onChange={(next) => patch(block, onChange, { slides: next })}\n newItem={() => ({ imageUrl: \"\", alt: \"\", caption: \"\" })}\n addLabel=\"+ Slide\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <Field label={`Afbeelding ${i + 1}`}>\n <div className=\"flex items-center gap-2\">\n <Input value={it.imageUrl ?? \"\"} onChange={(e) => update({ imageUrl: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ imageUrl: url })} />\n </div>\n </Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n <Input value={it.caption ?? \"\"} placeholder=\"Bijschrift (optioneel)\" onChange={(e) => update({ caption: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\n/* ════════════════════ Widget-editors ════════════════════ */\n\nfunction NewsWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <Field label=\"Basispad\"><Input value={(block.basePath as string) ?? \"/nieuws\"} onChange={(e) => patch(block, onChange, { basePath: e.target.value })} /></Field>\n </div>\n <ToggleField label=\"Miniaturen tonen\" checked={Boolean(block.showImages)} onChange={(v) => patch(block, onChange, { showImages: v })} />\n </div>\n );\n}\n\ntype WEvent = { title: string; start: string; end?: string; location?: string; url?: string };\nfunction AgendaWidgetEditor({ block, onChange }: BlockEditorProps) {\n const events = (block.events as WEvent[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={events}\n onChange={(next) => patch(block, onChange, { events: next })}\n newItem={(): WEvent => ({ title: \"\", start: \"\" })}\n addLabel=\"+ Evenement\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.start} placeholder=\"2026-07-01T19:30\" onChange={(e) => update({ start: e.target.value })} />\n <Input value={it.location ?? \"\"} placeholder=\"Locatie\" onChange={(e) => update({ location: e.target.value })} />\n </div>\n </div>\n )}\n />\n <ToggleField label=\"Verlopen evenementen verbergen\" checked={block.hidePast !== false} onChange={(v) => patch(block, onChange, { hidePast: v })} />\n </div>\n );\n}\n\ntype Row = { day: string; hours: string };\nfunction OpeningHoursWidgetEditor({ block, onChange }: BlockEditorProps) {\n const rows = (block.rows as Row[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={rows}\n onChange={(next) => patch(block, onChange, { rows: next })}\n newItem={() => ({ day: \"\", hours: \"\" })}\n addLabel=\"+ Regel\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.day} placeholder=\"Maandag\" onChange={(e) => update({ day: e.target.value })} />\n <Input value={it.hours} placeholder=\"09:00 – 17:00\" onChange={(e) => update({ hours: e.target.value })} />\n </div>\n )}\n />\n <ToggleField label=\"Vandaag markeren\" checked={block.highlightToday !== false} onChange={(v) => patch(block, onChange, { highlightToday: v })} />\n </div>\n );\n}\n\nfunction ContactWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Adres\"><Input value={(block.address as string) ?? \"\"} onChange={(e) => patch(block, onChange, { address: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Telefoon\"><Input value={(block.phone as string) ?? \"\"} onChange={(e) => patch(block, onChange, { phone: e.target.value })} /></Field>\n <Field label=\"E-mail\"><Input value={(block.email as string) ?? \"\"} onChange={(e) => patch(block, onChange, { email: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\ntype SocialItem = { platform: string; href: string };\nfunction SocialWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as SocialItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ platform: \"\", href: \"\" })}\n addLabel=\"+ Link\"\n renderRow={(it, update) => (\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.platform} placeholder=\"Instagram\" onChange={(e) => update({ platform: e.target.value })} />\n <Input value={it.href} placeholder=\"https://…\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction NewsletterWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"Aanmelden\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Aanmeld-URL\"><Input value={(block.actionUrl as string) ?? \"\"} onChange={(e) => patch(block, onChange, { actionUrl: e.target.value })} /></Field>\n </div>\n </div>\n );\n}\n\nfunction CtaWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Titel\"><Input value={(block.title as string) ?? \"\"} onChange={(e) => patch(block, onChange, { title: e.target.value })} /></Field>\n <Field label=\"Tekst\"><Input value={(block.text as string) ?? \"\"} onChange={(e) => patch(block, onChange, { text: e.target.value })} /></Field>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Knoptekst\"><Input value={(block.buttonLabel as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonLabel: e.target.value })} /></Field>\n <Field label=\"Knoplink\"><Input value={(block.buttonHref as string) ?? \"\"} onChange={(e) => patch(block, onChange, { buttonHref: e.target.value })} /></Field>\n </div>\n <Field label=\"Achtergrondkleur (optioneel)\"><Input value={(block.backgroundColor as string) ?? \"\"} onChange={(e) => patch(block, onChange, { backgroundColor: e.target.value })} placeholder=\"#f5f5f5\" /></Field>\n </div>\n );\n}\n\ntype GalleryWItem = { url?: string; alt?: string };\nfunction GalleryWidgetEditor({ block, siteId, onChange }: BlockEditorProps) {\n const items = (block.items as GalleryWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Kolommen\"><Input type=\"number\" value={String((block.columns as number) ?? 3)} onChange={(e) => patch(block, onChange, { columns: Math.max(2, Math.min(4, Number(e.target.value) || 3)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ url: \"\", alt: \"\" })}\n addLabel=\"+ Foto\"\n renderRow={(it, update, i) => (\n <div className=\"grid gap-2\">\n <div className=\"flex items-center gap-2\">\n <Input value={it.url ?? \"\"} onChange={(e) => update({ url: e.target.value })} placeholder=\"URL of upload →\" />\n <ImageUploadButton key={i} siteId={siteId} onUploaded={(url) => update({ url })} />\n </div>\n <Input value={it.alt ?? \"\"} placeholder=\"Alt-tekst\" onChange={(e) => update({ alt: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\ntype TWItem = { quote: string; author: string; rating?: number };\nfunction TestimonialsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as TWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={(): TWItem => ({ quote: \"\", author: \"\" })}\n addLabel=\"+ Review\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Textarea rows={2} value={it.quote} placeholder=\"Citaat\" onChange={(e) => update({ quote: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.author} placeholder=\"Naam\" onChange={(e) => update({ author: e.target.value })} />\n <Input type=\"number\" value={String(it.rating ?? \"\")} placeholder=\"Sterren 1-5\" onChange={(e) => update({ rating: e.target.value ? Math.max(1, Math.min(5, Number(e.target.value))) : undefined })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\ntype CardWItem = { icon?: string; title: string; text?: string; href?: string };\nfunction CardsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as CardWItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ icon: \"\", title: \"\", text: \"\" })}\n addLabel=\"+ Item\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.icon ?? \"\"} placeholder=\"Icoon (emoji)\" onChange={(e) => update({ icon: e.target.value })} />\n <Input value={it.title} placeholder=\"Titel\" onChange={(e) => update({ title: e.target.value })} />\n </div>\n <Input value={it.text ?? \"\"} placeholder=\"Korte tekst\" onChange={(e) => update({ text: e.target.value })} />\n <Input value={it.href ?? \"\"} placeholder=\"Link (optioneel)\" onChange={(e) => update({ href: e.target.value })} />\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction DownloadsWidgetEditor({ block, onChange }: BlockEditorProps) {\n const items = (block.items as DownloadItem[]) ?? [];\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Aantal\"><Input type=\"number\" value={String((block.limit as number) ?? 5)} onChange={(e) => patch(block, onChange, { limit: Math.max(1, Math.min(12, Number(e.target.value) || 5)) })} /></Field>\n <ArrayEditor\n items={items}\n onChange={(next) => patch(block, onChange, { items: next })}\n newItem={() => ({ label: \"\", href: \"\", meta: \"\" })}\n addLabel=\"+ Document\"\n renderRow={(it, update) => (\n <div className=\"grid gap-2\">\n <Input value={it.label} placeholder=\"Naam\" onChange={(e) => update({ label: e.target.value })} />\n <div className=\"grid grid-cols-2 gap-2\">\n <Input value={it.href} placeholder=\"URL\" onChange={(e) => update({ href: e.target.value })} />\n <Input value={it.meta ?? \"\"} placeholder=\"PDF · 1,2 MB\" onChange={(e) => update({ meta: e.target.value })} />\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n\nfunction CountdownWidgetEditor({ block, onChange }: BlockEditorProps) {\n return (\n <div className=\"grid gap-3\">\n <Field label=\"Kop\"><Input value={(block.heading as string) ?? \"\"} onChange={(e) => patch(block, onChange, { heading: e.target.value })} /></Field>\n <Field label=\"Streefdatum/-tijd\" hint=\"bv. 2026-12-31T23:59\">\n <Input type=\"datetime-local\" value={(block.target as string) ?? \"\"} onChange={(e) => patch(block, onChange, { target: e.target.value })} />\n </Field>\n <Field label=\"Tekst als de tijd om is\"><Input value={(block.expiredText as string) ?? \"\"} onChange={(e) => patch(block, onChange, { expiredText: e.target.value })} /></Field>\n </div>\n );\n}\n\n// Fallback-editor voor bloktypes zonder eigen `Editor` — sinds 5.0 aangedreven door de Field-IR\n// (repeaters/groepen/conditionele velden als echte UI). Zie ./GenericEditor.tsx (import bovenaan).\n\n/** Ingebouwde editors per blocktype. Klant-blokken kunnen hun eigen `Editor` meegeven. */\nexport const builtinBlockEditors: Record<string, ComponentType<BlockEditorProps>> = {\n hero: HeroEditor,\n richText: RichTextBlockEditor,\n image: ImageEditor,\n faq: FaqEditor,\n pricing: PricingEditor,\n newsList: NewsListEditor,\n form: FormEditor,\n gallery: GalleryEditor,\n agenda: AgendaEditor,\n feature: FeatureEditor,\n video: VideoEditor,\n contact: ContactEditor,\n map: MapEditor,\n newsletter: NewsletterEditor,\n booking: BookingEditor,\n accordion: AccordionEditor,\n embed: EmbedEditor,\n symbolRef: SymbolRefEditor,\n // Indeling\n columns: ColumnsEditor,\n withSidebar: WithSidebarEditor,\n tabs: TabsEditor,\n // Nieuwe modules\n countdown: CountdownEditor,\n slider: SliderEditor,\n // Widgets\n newsWidget: NewsWidgetEditor,\n agendaWidget: AgendaWidgetEditor,\n openingHoursWidget: OpeningHoursWidgetEditor,\n contactWidget: ContactWidgetEditor,\n socialWidget: SocialWidgetEditor,\n newsletterWidget: NewsletterWidgetEditor,\n ctaWidget: CtaWidgetEditor,\n galleryWidget: GalleryWidgetEditor,\n testimonialsWidget: TestimonialsWidgetEditor,\n cardsWidget: CardsWidgetEditor,\n downloadsWidget: DownloadsWidgetEditor,\n countdownWidget: CountdownWidgetEditor,\n};\n\nexport { GenericEditor };\n"],"mappings":"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","names":[]}
|
|
@@ -10,7 +10,7 @@ function BookingRender({ block, mode }) {
|
|
|
10
10
|
if (!src) return null;
|
|
11
11
|
return /* @__PURE__ */ jsxs("section", { className: "xicms-booking", children: [
|
|
12
12
|
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
13
|
-
/* @__PURE__ */ jsx("div", { className: "xicms-booking__frame", style: { height: `${block.height}px` }, children: /* @__PURE__ */ jsx(ConsentEmbed, { gated: block.consentGated, preview: mode === "preview", label: "Afspraak/booking", children: /* @__PURE__ */ jsx("iframe", { src, title: block.heading ?? "Afspraak maken", loading: "lazy", style: { border: 0, width: "100%", height: "100%" } }) }) })
|
|
13
|
+
/* @__PURE__ */ jsx("div", { className: "xicms-booking__frame", style: { height: `${block.height}px` }, children: /* @__PURE__ */ jsx(ConsentEmbed, { gated: block.consentGated, preview: mode === "preview", label: "Afspraak/booking", children: /* @__PURE__ */ jsx("iframe", { src, title: block.heading ?? "Afspraak maken", loading: "lazy", referrerPolicy: "no-referrer-when-downgrade", sandbox: "allow-scripts allow-same-origin allow-forms allow-popups", style: { border: 0, width: "100%", height: "100%" } }) }) })
|
|
14
14
|
] });
|
|
15
15
|
}
|
|
16
16
|
const bookingBlock = defineBlock({
|