// Schwebendes Dialog-Fenster zum Bearbeiten eines Rich-Text-Dokuments (Raum- // Stempel / Textobjekt). Doppelklick auf einen Stempel öffnet es (nicht den // Footer). Der Body ist der bestehende RichTextEditor (mit eigener Mini-Toolbar, // hier ok, weil eigenes Fenster). „Übernehmen" schreibt das bearbeitete Dokument // zurück, „Abbrechen" verwirft. Bezeichner englisch, UI-Text deutsch. import { useState } from "react"; import { t } from "../i18n"; import { RichTextEditor } from "../text/RichTextEditor"; import type { RichTextDoc } from "../text/richText"; export interface TextEditorDialogProps { /** Ausgangsdokument (wird beim Öffnen kopiert; Editor arbeitet lokal). */ value: RichTextDoc; /** „Übernehmen" — das bearbeitete Dokument zurückschreiben. */ onApply: (doc: RichTextDoc) => void; /** „Abbrechen"/Schliessen — ohne Übernahme. */ onCancel: () => void; } export function TextEditorDialog({ value, onApply, onCancel }: TextEditorDialogProps) { // Lokaler Arbeitszustand — erst „Übernehmen" schreibt zurück (echtes // Abbrechen möglich). Start = übergebenes Dokument. const [draft, setDraft] = useState(value); return (
{ if (e.target === e.currentTarget) onCancel(); }} onKeyDown={(e) => { if (e.key === "Escape") onCancel(); }} >
{t("text.editTitle")}
); } export default TextEditorDialog;