Toggle group
Eine Reihe von Toggles für eine oder mehrere Auswahlen, mit einer Füllung, die zum gewählten Element gleitet, verbundenen oder abgesetzten Elementen und Pfeiltasten-Fokus.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle-group.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 class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/toggle-group.tsx components/ui/toggle.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Kann jeweils ein Item an sein, gleitet eine einzelne Füllung zum gewählten Item und nimmt seine Form an, sodass die Gruppe wie ein Steuerelement wirkt. Mit multiple füllt sich jedes Item für sich. Die Füllung wird vor dem ersten Paint platziert und gleitet daher beim Laden nie herein.
Outline
variant="outline" verbindet die Items zu einem umrandeten Steuerelement.
Mehrfach
multiple lässt beliebig viele Items an sein, wie bei der Textformatierung.
Größen
size an der Gruppe legt die Größe jedes Items fest: sm, default oder lg.
Abstände
spacing setzt einen Abstand zwischen Items auf der Spacing-Skala. Outline-Items mit Abstand behalten ihre eigenen Rahmen und Füllungen.
Icons und Labels
Setze ein Icon vor das Label. Items nur mit Icon brauchen ein aria-label.
Vertikal
orientation="vertical" stapelt die Items und bewegt den Fokus mit ↑ und ↓.
Deaktiviert
Deaktiviere ein Item oder die ganze Gruppe mit disabled. Deaktivierte Items werden von der Tastatur übersprungen.
Kontrolliert
Übergib value und onValueChange. Den leeren Wert zu ignorieren hält ein Item an, sodass ein erneuter Druck auf das gewählte Item nichts bewirkt.
Rechts nach links
Item-Reihenfolge, verbundene Ecken, die gleitende Füllung und Pfeiltasten folgen der Leserichtung.
| Taste | Aktion |
|---|---|
| Tab | Wechselt in die Gruppe zum zuletzt fokussierten Item und wieder hinaus. |
| ←→ | Wechselt zwischen Items, an den Enden umlaufend. ↑ und ↓ bei vertikal. |
| HomeEnd | Springt zum ersten oder letzten Eintrag. |
| EnterSpace | Schaltet das fokussierte Item an oder aus. |
- Die Gruppe hat die Rolle
group; gib ihr einaria-label. Jedes Item ist ein Button mitaria-pressed. - Nur ein Item ist in der Tab-Reihenfolge, sodass die Gruppe ein einziger Tab-Stopp ist und Pfeiltasten sich darin bewegen.
- Ohne
multipleschaltet ein Druck auf das gewählte Item es aus. Kontrolliere den Wert, um ein Item an zu halten. - Bei reduzierter Bewegung blendet die Füllung ein, statt zu gleiten.
| Prop | Typ | Standard |
|---|---|---|
value | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
multiple | boolean | false |
variantLegt die Variante jedes Items fest. | "default" | "outline" | "default" |
sizeLegt die Größe jedes Items fest. | "default" | "sm" | "lg" | "default" |
spacingAbstand zwischen Items auf der Spacing-Skala. 0 verbindet Outline-Items. | 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 0 |
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocus | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="toggle-group" | Das Root. |
data-slot="toggle-group-indicator" | Die gleitende Füllung, ohne multiple gerendert. data-visible, wenn ein Item an ist. |
data-variant / data-size / data-spacing | Variante, Größe und Abstand der Gruppe. |
data-orientation | "horizontal" oder "vertical". |
data-multiple | Vorhanden, wenn viele Items an sein können. |
data-disabled | Vorhanden, wenn die Gruppe deaktiviert ist. |
| Prop | Typ | Standard |
|---|---|---|
valueIdentifiziert das Item im Wert der Gruppe. | string | – |
disabled | boolean | false |
variantWird verwendet, wenn die Gruppe keine setzt. | "default" | "outline" | – |
sizeWird verwendet, wenn die Gruppe keine setzt. | "default" | "sm" | "lg" | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Beschreibung |
|---|---|
data-slot="toggle-group-item" | Jedes Item. |
data-pressed | Das Item ist an. |
data-disabled | Das Item ist deaktiviert. |
data-variant / data-size | Die aufgelöste Variante und Größe des Items. |
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- ToggleEin Button, der an oder aus bleibt, mit einer Füllung, die sich beim Drücken setzt, einem klaren Übergang beim Hover zu „an“ und Icons, die sich mit dem Zustand füllen können.
- ButtonButtons in allen Varianten und Größen, mit eingebautem Lade-, Erfolgs- und Fehlerablauf, der den Spinner bei schnellen Anfragen überspringt.
- Button groupButtons, zu einem Element verbunden, mit gemeinsamen Nähten, Trennern, Text-Addons, Verschachtelung und vertikalen Stapeln.
In Blocks verwendet
Blocks, die auf Toggle group 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.
- API keysDie API-Schlüssel-Seite eines KI-Produkts, wie in den Konsolen von OpenAI und Anthropic. Schlüssel mit eingeschränkten Berechtigungen und Ablaufdatum erstellen, das Secret einmal sehen mit einem Kopieren, das sich bestätigt, mit Rückgängig widerrufen, direkt umbenennen, mit Übergangsfrist rotieren und die Nutzung pro Schlüssel sehen.
- Diff ReviewPrüfe die Änderungen eines Agenten über mehrere Dateien, bevor sie übernommen werden. Ein Dateibaum mit Zählern, jede Änderung, jede Datei oder alles annehmen oder ablehnen, Kommentare zu jeder Zeile oder jedem Bereich, die an den Agenten zurückgehen, Unified- und Split-Ansicht, Hervorhebung auf Wortebene, Rückgängig, streamende Änderungen und eine Zusammenfassung „4 Dateien bearbeitet“ für den Chat.
- MarkdownMarkdown für KI-Antworten. Es streamt flüssig und zeigt nie halb getippte Syntax, mit verlinkbaren Überschriften, Tabellen, die du als Markdown oder CSV kopieren kannst, GitHub-Callouts, Aufgabenlisten, Fußnoten, Bildern, Inline-Zitaten und vollständigen Codeblöcken.