);
}
// Pflicht-Zahlenfeld, das wirklich LEER sein kann (NumberField erzwingt eine Zahl und hätte
// damit immer einen Default -- genau das soll bei Annahmen vermieden werden, siehe
// SPEZIFIKATION 9.15/9.18: ein stiller Default wird nicht hinterfragt). Der Wert wird als
// String geführt; die Validierung liegt beim Aufrufer.
export function RequiredNumberField({
label,
help,
value,
onChange,
step = 0.1,
suffix,
placeholder = "Pflicht",
}: {
label: string;
help?: string;
value: string;
onChange: (value: string) => void;
step?: number;
suffix?: string;
placeholder?: string;
}) {
const empty = value.trim() === "";
return (
);
}
// --- "Aus Vorphase uebernehmen" (Roadmap Nr. 44, Punkt A) --------------------------------
//
// Wiederkehr-Parameter (Raten, Beitraege, Amortisation) gelten weiter, bis man sie bewusst
// aendert. Bisher war das unsichtbar: Beim Anlegen einer Phase wurde der Wert KOPIERT, und
// spaetere Aenderungen an der Vorphase kamen deshalb nie an. Jetzt entscheidet ein sichtbares
// Haekchen: angehakt = Feld leer lassen und live erben; abgehakt = eigener Wert fuer diese
// Phase. In der ersten Phase gibt es nichts zu erben -- dort erscheint das Haekchen nicht.
export function InheritableField({
label,
help,
canInherit,
isInheriting,
inheritedDisplay,
onToggle,
children,
}: {
label: string;
help?: string;
canInherit: boolean;
isInheriting: boolean;
inheritedDisplay: string;
onToggle: (inherit: boolean) => void;
children: React.ReactNode;
}) {
return (