/** Gemeinsame UI-Bausteine (Forms, Buttons, Badges) im einheitlichen Look. */ /** * Einheitliches Badge fuer Status/Rollen-Labels. * variant: neutral (Standard), success (aktiv), warning (Hinweis), * danger (Fehler), accent (hervorgehoben, z. B. eigene Rolle). */ export function Badge({ children, variant = 'neutral', }: { children: React.ReactNode; variant?: 'neutral' | 'success' | 'warning' | 'danger' | 'accent'; }) { const styles = { neutral: 'bg-slate-200 text-slate-700 dark:bg-slate-700 dark:text-slate-200', success: 'bg-slate-200 text-slate-800 ring-1 ring-slate-400 dark:bg-slate-600 dark:text-slate-100 dark:ring-slate-500', warning: 'bg-slate-100 text-slate-700 ring-1 ring-slate-300 dark:bg-slate-800 dark:text-slate-300 dark:ring-slate-600', danger: 'bg-slate-800 text-slate-100 dark:bg-slate-100 dark:text-slate-900', accent: 'bg-slate-700 text-slate-50 dark:bg-slate-300 dark:text-slate-900', }[variant]; return ( {children} ); } export function Card({ children, className = '', }: { children: React.ReactNode; className?: string; }) { return (
{children}
); } export function Button({ children, type = 'submit', variant = 'primary', disabled, onClick, ...rest }: { children: React.ReactNode; type?: 'submit' | 'button'; variant?: 'primary' | 'secondary' | 'danger'; disabled?: boolean; onClick?: () => void; } & Omit, 'type' | 'onClick' | 'disabled'>) { const styles = { primary: 'bg-slate-800 text-white hover:bg-slate-700 dark:bg-slate-100 dark:text-slate-900 dark:hover:bg-slate-200', secondary: 'bg-slate-200 text-slate-900 hover:bg-slate-300 dark:bg-slate-700 dark:text-slate-100 dark:hover:bg-slate-600', danger: 'bg-red-600 text-white hover:bg-red-700', }[variant]; return ( ); } export function Input(props: React.InputHTMLAttributes) { const { className = '', ...rest } = props; return ( ); } export function Label({ children, htmlFor }: { children: React.ReactNode; htmlFor?: string }) { return ( ); } export function ErrorMessage({ message }: { message: string | null }) { if (!message) { return null; } return (

{message}

); }