"use client" import { useState } from "react" import { AlertCircle, PencilLine, Undo2 } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { MarkdownInput } from "@/components/markdown-input" import { MarkdownRenderer } from "@/components/markdown-renderer" interface DefaultableFieldProps { id: string label: string /** Der zentral gepflegte Standardtext für dieses Feld. */ defaultValue: string /** Abweichender Text dieser Erklärung; leer bedeutet „Standard gilt“. */ value: string onChange: (value: string) => void /** Ohne Standardtext ist ein Pflichtfeld unvollständig – dann Warnung zeigen. */ required?: boolean rows?: number invalid?: boolean } /** * Ein Baustein, der normalerweise aus den zentralen Standardtexten kommt. * * Im Regelfall zeigt das Feld den Standardtext nur an. Erst „Abweichen“ macht * ihn für genau diese Erklärung bearbeitbar; „Standard übernehmen“ verwirft die * Abweichung wieder. Gespeichert wird ausschließlich der abweichende Text – * ein leerer Wert heißt, dass die Erklärung dem Standard folgt. */ export function DefaultableField({ id, label, defaultValue, value, onChange, required = false, rows = 6, invalid = false, }: DefaultableFieldProps) { // Beim Mounten entscheidet der gespeicherte Wert über den Modus; danach // steuert ihn der Benutzer über die beiden Schaltflächen. const [isOverride, setIsOverride] = useState(() => value.trim().length > 0) /** Wechselt in den Sonderfall und übernimmt den Standard als Ausgangstext. */ const startOverride = () => { setIsOverride(true) if (!value.trim()) onChange(defaultValue) } /** Kehrt zum Standard zurück und verwirft den abweichenden Text. */ const resetToDefault = () => { setIsOverride(false) onChange("") } if (isOverride) { return (
Kein Standardtext hinterlegt – dieser Abschnitt bleibt leer.
)}