import * as React from "react";
export interface ImagePlaceholderProps {
src?: string;
alt: string;
/** Caption shown on the load-error placeholder. */
label: React.ReactNode;
/** Small monospace hint under the label, e.g. an expected filename. */
hint?: React.ReactNode;
/** Placeholder icon override - defaults to a simple image glyph. */
icon?: React.ReactNode;
size?: "default" | "mini" | "round";
className?: string;
}
const DEFAULT_ICON = (
);
export function ImagePlaceholder({
src,
alt,
label,
hint,
icon,
size = "default",
className,
}: ImagePlaceholderProps) {
/*
* Gemerkt wird die Adresse, die fehlgeschlagen ist - nicht ein blosses
* "ist fehlgeschlagen".
*
* Der Unterschied ist der Fehler, den das behebt: In der Fotogalerie unter
* "Mein Audi" bleibt dieselbe Komponente stehen und bekommt nur eine neue
* src. Mit einem blossen Wahrheitswert blieb ein einmal gesetztes true fuer
* immer stehen - sobald ein noch leerer Platz durchlaufen war, zeigten auch
* alle folgenden Plaetze mit echtem Foto nur noch den Platzhalter. Erst ein
* Seitenwechsel setzte den Zustand zurueck, weil die Komponente dabei neu
* entsteht (gemeldet vom Eigentuemer, 2026-08-31).
*
* Bewusst ohne useEffect: ein Vergleich beim Rendern kommt ohne den
* zusaetzlichen Durchlauf aus, den ein Zuruecksetzen im Effekt braucht -
* und in dem waere fuer einen Wimpernschlag das falsche Bild zu sehen.
*/
const [fehlgeschlagen, setzeFehlgeschlagen] = React.useState(null);
const classes = ["ads-bildbox"];
if (size === "mini") classes.push("ads-bildbox--mini");
if (size === "round") classes.push("ads-bildbox--round");
if (className) classes.push(className);
const showPlaceholder = !src || fehlgeschlagen === src;
return (