Komponenten · @repo/ui
Formulare
Eingabe-Komponenten — Input, Select, Combobox, MultiLangInput, LinkPicker, Checkbox, Radio, Slider. Alle mit Label, Hilfetext, Fehlerzustand und i18n-fähig.
InputStable
Textfeld mit Label, Hilfetext, Fehleranzeige und Icon-Slots.
import { Input } from "@repo/ui/input"
<Input
type="text"
label="Vorname"
placeholder="Max"
/>SelectStable
Native <select>-Wrapper mit Label, Hilfetext, Fehlerzustand und Pflichtfeld-Markierung. Für kurze Listen (≤ 20 Optionen) — längere Listen → Combobox.
ComboboxStable
Searchable Single-Select mit Tastaturnavigation. Drop-in für <Select> auf langen oder dynamischen Listen (Sprecher, Leitlinien, Kurse).
MultiLangInputStable
Mehrsprachige Eingabe mit Tabs für DE/EN/FR. Single-Line oder Multiline (Textarea), optional mit Link-Insert-Popover. Schreibt einen { de, en, fr }-Wert.
LinkPickerStable
Autocomplete für interne URLs aus einer Suggestions-Liste. Gruppiert nach group, hebt Treffer hervor, akzeptiert auch freie Eingabe.
CheckboxStable
Checkbox mit Label und optionaler Beschreibung. Label akzeptiert ReactNode für inline-Links (z. B. AGB).
import { Checkbox } from "@repo/ui/checkbox"
<Checkbox
label="AGB akzeptieren"
description="Ich stimme den Nutzungsbedingungen zu."
/>Der label-Prop akzeptiert nicht nur Strings, sondern beliebige ReactNodes — z. B. für Booking-Flow-AGB pro Rechtsträger. Bei Inline-Links onClick={(e)=>e.stopPropagation()} setzen, damit der Klick nicht zusätzlich die Checkbox toggelt.
RadioStable
Radio-Button mit Label und optionaler Beschreibung. Auswahl genau einer Option aus einer Gruppe.
import { Radio } from "@repo/ui/radio"
<Radio
name="format"
label="Live-Webinar"
description="Teilnahme in Echtzeit"
defaultChecked
/>SliderStable
Schieberegler mit Wertanzeige.
import { Slider } from "@repo/ui/slider"
<Slider
label="CME-Jahresziel"
defaultValue={60}
max={250}
/>OtpCodeInputBeta
Einmal-Code-Eingabe für TOTP-2FA: sechs Anzeige-Boxen, getrieben von EINEM echten (unsichtbaren) Input — Paste, iOS-Code-Autofill und Screenreader laufen über das eine Feld, die Boxen sind reine Darstellung.
import { OtpCodeInput } from "@repo/ui/OtpCodeInput"
<OtpCodeInput
value={code}
onChange={setCode}
onComplete={(code) => submit(code)}
label="Code aus der App"
/>TotpQrPanelBeta
QR-Anzeige für das TOTP-Enrollment + ausblendbarer Schlüssel für manuelle Eingabe. Das SVG kommt als String von der Enrollment-API und wird als Data-URI gerendert — kein innerHTML, keine QR-Library.
RecoveryCodesPanelBeta
Einmalige Anzeige frisch generierter Recovery-Codes: Monospace-Grid + Alle-kopieren + Download als Textdatei. Bestätigungs-Slot (children) für den Code-Test des Aufrufers.
- ABCDE-23456
- FGHIJ-34567
- KLMNO-45678
- PQRST-56789
- UVWXY-67234
- Z2345-72345