import type { ClipboardEvent } from "react"; // pasteImage erlaubt Strg+V eines Bildes aus der Zwischenablage direkt im // Formular: das Bild wandert in den File-Input (über DataTransfer, weil sich // .files nicht direkt setzen lässt). Liegt kein Bild vor (Text o. Ä.), tun wir // nichts und lassen den normalen Paste durchlaufen -> preventDefault nur, wenn // wir wirklich ein Bild gegriffen haben. Gibt true zurück, wenn ein Bild // übernommen wurde. export function pasteImage(e: ClipboardEvent): boolean { const item = [...(e.clipboardData?.items ?? [])].find( (it) => it.kind === "file" && it.type.startsWith("image/"), ); const original = item?.getAsFile(); if (!original) return false; e.preventDefault(); // Browser benennen Clipboard-Bilder uneinheitlich ("grafik.png" o. Ä.) -> // neu verpacken mit sprechendem Namen. Endung aus dem MIME-Typ, sonst png. const ext = (original.type.split("/")[1] || "png").toLowerCase(); const file = new File([original], `zwischenablage.${ext}`, { type: original.type }); const input = e.currentTarget.querySelector("input[name='file']"); if (!input) return false; const dt = new DataTransfer(); dt.items.add(file); input.files = dt.files; return true; }