import { useRef } from "react"; import { createPortal } from "react-dom"; import Icon from "./Icon"; // Einfacher, gestalteter Dialog (nutzt die modal-Klassen der Vorlage). export default function Modal({ title, onClose, children, footer, wide = false }) { // Nur schliessen, wenn der Klick auch AUF dem Hintergrund begonnen hat. // Markiert man Text in einem Feld und zieht dabei über den Rand hinaus, // liegt das Mouseup auf dem Hintergrund; der Klick feuert dann auf dem // gemeinsamen Elternelement und schloss den Dialog mitten im Markieren. const startAussen = useRef(false); // An den Seitenkoerper, nicht an die Stelle im Baum: Steht der Aufrufer in // einem Element mit `transform` – jede Kachel der Uebersicht tut das –, waere // das sonst der Bezugsrahmen fuer `position: fixed`, und der Dialog sitzt // eingeklemmt in der Kachel statt ueber der Seite. return createPortal(
{ startAussen.current = e.target === e.currentTarget; }} onClick={(e) => { if (e.target === e.currentTarget && startAussen.current) onClose(); startAussen.current = false; }} >

{title}

{children}
{footer &&
{footer}
}
, document.body, ); }