import { site, type Media } from "@/content/site";
import type { Reel } from "@/lib/site-media";
import { MediaFrame } from "../MediaFrame";
import { Reveal } from "../Reveal";
import { VideoSlot } from "../VideoSlot";
type TeamMember = { slug: string; name: string; role: string; bio: string | null; portrait: Media };
function Bio({ bio, showDrafts }: { bio: string | null; showDrafts: boolean }) {
if (bio) return
{bio}
;
return showDrafts ? Kurzbeschreibung folgt
: null;
}
/**
* Team: Eric Heitz als Head of Modelcamp gross vorangestellt, darunter alle
* weiteren gleichwertig im Raster. Portraets im Rundbogen, ein Motiv aus
* der Architektur der Villa. Liegt team/.jpg im Medienverzeichnis,
* ersetzt das Foto den Initialen-Platzhalter.
*/
export function TeamSection({ showDrafts, portraits }: { showDrafts: boolean; portraits: Record }) {
const { team } = site;
const { head } = team;
const portraitOf = (member: TeamMember) => portraits[member.slug] ?? member.portrait;
const missing = [head, ...team.people].some((member) => portraitOf(member).kind !== "image");
return (
{head.title}
{head.name}
{head.role}
{team.people.map((person: TeamMember, index) => (
-
{person.name}
{person.role}
))}
{showDrafts && missing && (
Porträts folgen Platzhalter mit Initialen, bis die Fotos im Medienverzeichnis liegen (docs/MEDIEN.md).
)}
);
}
export function AboutSection({ showDrafts }: { showDrafts: boolean }) {
const { about } = site;
if (about.paragraphs.length === 0 && !showDrafts) return null;
return (
{about.title}
{about.paragraphs.length > 0 ? (
about.paragraphs.map((p) =>
{p}
)
) : (
Inhalt folgt Grundlage wird die ARTISTA-Stammmodel-Seite (Link folgt).
)}
{about.sourceUrl && (
Zur ARTISTA-Stammmodel-Seite
)}
);
}
/**
* Drei Reels im Hochformat. Leere Slots erscheinen nur in Entwicklung und
* Staging; oeffentlich nie ein erfundenes Testimonial als Ersatz.
*/
export function ReelsSection({ showDrafts, reels }: { showDrafts: boolean; reels: Reel[] }) {
const { reels: content } = site;
const slots = content.slots.map((slot, index) => ({ ...slot, ...(reels[index] ?? { src: null, poster: null }) }));
const visible = showDrafts ? slots : slots.filter((s) => s.src);
if (visible.length === 0) return null;
return (
{content.title}
{content.lead}
{visible.map((slot, index) => (
-
))}
);
}