import type { ReactNode } from "react"; // Gemeinsame Bausteine der Admin-Formulare (Produkt anlegen/bearbeiten, // spaeter Gutscheine, Versand, Benutzer). Reine Server-Komponenten — sie // rendern nur Markup, damit jedes Formular gleich gegliedert aussieht. const inputClass = "mt-1 w-full border border-ink/20 bg-background px-3 py-2"; export function AdminField({ name, label, type = "text", defaultValue, placeholder, required = false, min, hint, readOnly = false, }: { name: string; label: string; type?: string; defaultValue?: string; placeholder?: string; required?: boolean; min?: number; /** Kurzer Zusatz unter dem Feld, statt ihn in die Beschriftung zu packen. */ hint?: string; /** Wird angezeigt und mitgeschickt, laesst sich aber nicht aendern. */ readOnly?: boolean; }) { return ( ); } export function AdminTextarea({ name, label, defaultValue, required = false, rows = 3, }: { name: string; label: string; defaultValue?: string; required?: boolean; rows?: number; }) { return ( ); } export function AdminSelect({ name, label, defaultValue, hint, children, }: { name: string; label: string; defaultValue?: string; hint?: string; children: ReactNode; }) { return ( ); } export function AdminFieldset({ legend, last = false, className = "", children, }: { legend: string; /** Letzter Abschnitt vor der Speicherleiste: ohne Trennlinie. */ last?: boolean; className?: string; children: ReactNode; }) { return (
); } export function AdminHint({ children }: { children: ReactNode }) { return{children}
; } /** Schalter statt kleiner Checkbox — dasselbe Formularfeld, nur als Umschalter dargestellt. */ export function AdminSwitch({ name, label, defaultChecked, }: { name: string; label: string; defaultChecked?: boolean; }) { return ( ); } /** Formularrahmen samt Speicherleiste, die beim Scrollen am unteren Rand bleibt — der Knopf ist bei langen Formularen immer erreichbar. */ export function AdminFormPanel({ action, actions, className = "", children, }: { action: (formData: FormData) => void | Promise