import type { ComponentProps, ReactNode } from "react"; import { clsx } from "clsx"; const EINGABE_KLASSEN = clsx( "bg-bg border-border-strong text-text rounded-feld min-h-11 w-full min-w-0 border px-3 text-[15px]", "placeholder:text-muted/70 focus-visible:border-accent", "aria-[invalid=true]:border-danger-border", ); /** Hinweis und Fehlermeldung unter einem Feld; die Ids verknuepft `aria-describedby` (#008). */ function FeldFuss({ feldId, hinweis, fehler }: { feldId: string; hinweis?: ReactNode; fehler?: string }) { return ( <> {/* Bei einem Fehler ersetzt die Meldung den Hinweis – meist sagt sie dasselbe genauer. */} {hinweis && !fehler && (

{hinweis}

)} {fehler && (

{fehler}

)} ); } function beschreibtDurch(feldId: string, hinweis?: ReactNode, fehler?: string): string | undefined { if (fehler) return `${feldId}-fehler`; return hinweis ? `${feldId}-hinweis` : undefined; } /** Eingabefeld mit Beschriftung (#004). Mindesthoehe 44 px wie alle Klickflaechen. */ export function Feld({ beschriftung, hinweis, fehler, mono = false, className, id, name, ...rest }: ComponentProps<"input"> & { beschriftung: string; hinweis?: ReactNode; fehler?: string; mono?: boolean }) { const feldId = id ?? `feld-${name}`; return (
); } /** Mehrzeiliges Textfeld, z. B. fuer Beschreibungen (#008). */ export function Textbereich({ beschriftung, hinweis, fehler, className, id, name, ...rest }: ComponentProps<"textarea"> & { beschriftung: string; hinweis?: ReactNode; fehler?: string }) { const feldId = id ?? `feld-${name}`; return (