feat: Oberflaechenbausteine, Anwendungsrahmen und Konventionen
Basisbausteine im shadcn/ui-Stil, aber mit drei bewussten Abweichungen: - Bedienelemente sind 44px hoch statt 36px. Ich bediene die App oft am Handy im Heim oder auf dem Amt; kleiner ist dort nicht treffsicher. - Auswahlfelder benutzen das native <select>. Android und iOS oeffnen dafuer ihre eigene Liste - schneller als jeder Nachbau, und mit Screenreader und Tastatur funktioniert es ohne Zutun. - Eingabefelder haben mindestens 16px Schrift, sonst zoomt iOS-Safari beim Hineintippen das Formular heran. <Feld> verdrahtet Beschriftung, Erklaerung und Fehler ueber aria-describedby. Der Erklaerungstext ist kein Beiwerk: die Anwendung benutzt Begriffe aus dem Betreuungsrecht, die niemand nachschlagen soll. <Rechtshinweis> ist der stehende Vermerk, dass hier keine Rechtsberatung stattfindet. Er steht an jeder Stelle mit Paragraphenbezug. Der Anwendungsrahmen fuehrt drei Bedingungen zusammen, ohne die niemand an Fachdaten kommt: angemeldet, zweiter Faktor eingerichtet, mindestens eine betreute Person zugeordnet. Die Navigation zeigt Zaehler fuer ueberfaellige Fristen und neuen Posteingang - die Frage "wo muss ich hin?" wird schon im Menue beantwortet. Das Farbschema wird per Inline-Skript mit CSP-Nonce gesetzt, bevor die Seite gezeichnet wird - sonst blitzt beim Laden das helle Thema auf. docs/KONVENTIONEN.md haelt fest, was in allen weiteren Etappen gilt: Verzeichnisaufbau, Cent-Betraege, Umgang mit verschluesselten Feldern, Zugriffspruefung, Audit-Pflicht, Ampelfarben, Commit-Trailer. Etappe: 1 Phase: Fundament
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { Scale } from 'lucide-react'
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
/**
|
||||
* Der stehende Hinweis, dass diese Anwendung keine Rechtsberatung ist.
|
||||
*
|
||||
* Er steht an JEDER Stelle, an der ein Paragraph genannt wird. Das ist
|
||||
* keine Formalie: Die App rechnet Fristen aus und schlaegt Einordnungen
|
||||
* vor, aber sie kennt den Einzelfall nicht. Wer sich darauf verlaesst,
|
||||
* statt beim Rechtspfleger nachzufragen, kann Geld und Anspruch verlieren.
|
||||
*/
|
||||
export function Rechtshinweis({
|
||||
rechtsgrundlage,
|
||||
className,
|
||||
kurz = false,
|
||||
}: {
|
||||
rechtsgrundlage?: string
|
||||
className?: string
|
||||
kurz?: boolean
|
||||
}) {
|
||||
if (kurz) {
|
||||
return (
|
||||
<p className={cn('text-xs text-muted-foreground', className)}>
|
||||
{rechtsgrundlage && <span className="font-medium">{rechtsgrundlage} · </span>}
|
||||
Keine Rechtsberatung. Im Zweifel bei Gericht, Bezirk oder Anwalt nachfragen.
|
||||
</p>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'flex items-start gap-2.5 rounded-md border border-border bg-muted/50 p-3',
|
||||
className,
|
||||
)}
|
||||
>
|
||||
<Scale className="mt-0.5 size-4 shrink-0 text-muted-foreground" aria-hidden="true" />
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{rechtsgrundlage && (
|
||||
<>
|
||||
<span className="font-medium text-foreground">{rechtsgrundlage}</span>{' '}
|
||||
</>
|
||||
)}
|
||||
Dieser Hinweis dient der eigenen Orientierung und ersetzt{' '}
|
||||
<strong className="font-medium">keine Rechtsberatung</strong>. Er ersetzt insbesondere nicht
|
||||
die Rückfrage beim Betreuungsgericht, beim Sozialhilfeträger oder bei einem Anwalt.
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user