Switch
Ein Ein/Aus-Schalter, den du antippen, drücken oder ziehen kannst, mit einem Thumb, der sich unter deinem Finger streckt, und einem optionalen Pending-Zustand für Speichervorgänge.
pnpm dlx shadcn@latest add https://hextaui.com/r/switch.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/switch.tsx components/ui/spinner.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Beim Drücken streckt sich der Thumb zur anderen Seite, bevor er hinüberfedert, sodass du den Druck spürst. Du kannst den Thumb auch greifen und ziehen: Über die Mitte hinaus kippt er um, davor schnappt er zurück.
iOS
variant="ios" nutzt eine höhere Spur, einen kapselförmigen Thumb und Grün im eingeschalteten Zustand. Drücken, Ziehen und Speichern funktionieren gleich.
Speichern
Gib aus onCheckedChange ein Promise zurück, und der Switch kippt sofort um, auch wenn er kontrolliert ist. Ein Spinner erscheint im Thumb nur, wenn das Speichern länger als 400ms dauert. Wird es abgelehnt, kippt der Switch zurück und wackelt.
Ein- und Aus-Markierungen
icons fügt der Spur ein Häkchen und einen Ring hinzu, damit der Zustand nicht von Farbe abhängt.
Größen
sm, default und lg.
In einem Field
Mit Field sind Label und Beschreibung mit dem Switch verknüpft.
Deaktiviert und schreibgeschützt
readOnly hält den Wert sichtbar und fokussierbar, ändert ihn aber nicht.
Kontrolliert
Übergib checked und onCheckedChange.
Rechts nach links
Der Thumb startet rechts und gleitet nach links, und das Ziehen folgt.
| Taste | Aktion |
|---|---|
| SpaceEnter | Schaltet den fokussierten Switch ein oder aus. |
- Der Switch hat die Rolle
switch, benannt durch sein Label. Umschließe ihn mit einem<label>oder nutzeField. - Beim Speichern ist er
aria-busyund ignoriert neue Betätigungen. - Die Trefferfläche ist größer als der Switch und auf Touch noch größer.
- Bei reduzierter Bewegung bewegt sich der Thumb sofort, und nichts wackelt.
| Prop | Typ | Standard |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChangeGib ein Promise zurück, um den Speicherzustand zu zeigen. Bei Ablehnung kippt ein unkontrollierter Switch zurück. | (checked, details) => void | Promise | – |
variant | "default" | "ios" | "default" |
size | "sm" | "default" | "lg" | "default" |
iconsZeige Ein- und Aus-Markierungen in der Spur. | boolean | false |
name | string | – |
value | string | – |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Beschreibung |
|---|---|
data-slot="switch" | Die Spur, mit data-size und data-variant. |
data-slot="switch-thumb" | Der Thumb. |
data-checked / data-unchecked | Ob der Switch an ist. |
data-dragging | Vorhanden, solange der Thumb gezogen wird. |
data-pending | Vorhanden, solange ein zurückgegebenes Promise aussteht. |
--switch-w / --switch-h / --switch-thumb / --switch-thumb-w | Größen von Spur und Thumb, über size gesetzt. |
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- SpinnerEin Ladeindikator mit Ticks im Apple-Stil oder einem atmenden Ring, der vor dem Anzeigen warten und lange genug sichtbar bleiben kann, um nicht zu flackern.
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
- ComboboxEin filterbares Select mit Chips, Gruppen und asynchronen Ergebnissen, in einem Popup, das sich beim Tippen anpasst.
- Date pickerEin Button, der einen Kalender in einem Popover öffnet, auf Smartphones als Bottom Sheet, für einzelne Daten und Zeiträume.
In Blocks verwendet
Blocks, die auf Switch aufbauen.
- Prompt InputEin Chat-Composer, der als ruhige einzelne Zeile beginnt, beim Schreiben zu einer Karte wächst und nach unten wandert, sobald die Unterhaltung beginnt. Enter sendet, sicher bei japanischer und chinesischer Eingabe. Dateien per Einfügen, Ablegen oder Auswählen hinzufügen, mit Vorschau, Fortschritt und Wiederholen. @ fügt Dateien hinzu und / führt Befehle aus einem Menü an der Einfügemarke aus. Ein Modellwähler mit Zifferntasten, ein Effort-Slider, der bei Max lebendig wird, ein Kontextring, Diktat mit Live-Wellenform, Tool-Chips, eine Warteschlange für Nachrichten, die während einer streamenden Antwort getippt werden, und Entwürfe, die einen Reload überstehen.
- Agent TodosZeige den Plan eines Agenten, während er arbeitet. Jeder Schritt wandert von Backlog über To do und In Arbeit zu Erledigt, mit Live-Zeiten, Fehlern und den dahinterliegenden Tool-Aufrufen. Eine Status-Pille für über dem Composer, sichtbare Planänderungen und ein Review-Schritt, um den Plan vor der Ausführung zu bearbeiten.
- AppearanceDer Bereich „Erscheinungsbild“ in den Einstellungen eines KI-Produkts: Theme, Akzent, Hintergrundtönung, Dichte, Chat-Schrift, Textgrößen und Barrierefreiheitsoptionen, alles als Entwurf gehalten, bis gespeichert wird.
- BillingPlan & Nutzung für ein KI-Produkt, im Stil von Cursor, Claude und Vercel. Eine nach Modell aufgeteilte Nutzungsanzeige, die das Ende des Zyklus hochrechnet und warnt, bevor die Credits ausgehen, ein tägliches Diagramm zum Scrubben, ein Ausgabenlimit mit Warnungen, die du auf der Anzeige in der Vorschau siehst, Planwechsel mit exakter Anteilsberechnung, ein Kartenformular mit echter Validierung und Rechnungen als PDF-Download.