Toggle Group
StabilnyZestaw przycisków przełączających do wyboru jednej opcji — albo kilku — z małego, widocznego zbioru.
Anatomia
- 1GrupaJedna kontrolka i jedno miejsce w kolejności tabulacji: strzałki przenoszą fokus między elementami, a Tab przechodzi dalej. Ustala wariant, rozmiar i odstępy wszystkich elementów.
- 2Wciśnięty elementWybrane opcje mają wypełnienie stanu wciśnięcia i zgłaszają aria-pressed. Grupa może dopuszczać jeden wybór albo kilka.
- 3ElementPrzycisk przełączający. Elementy z samą ikoną potrzebują aria-label, jak każdy przycisk z ikoną.
Instalacja
$ pnpm dlx shadcn@latest add https://www.prfct.dev/r/toggle-group.jsonUżycie
import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"<ToggleGroup defaultValue={["left"]} aria-label="Text alignment">
<ToggleGroupItem value="left" aria-label="Align left">
<AlignLeftIcon />
</ToggleGroupItem>
<ToggleGroupItem value="center" aria-label="Align center">
<AlignCenterIcon />
</ToggleGroupItem>
</ToggleGroup>Wartość jest zawsze tablicą wartości wciśniętych elementów — ["left"] przy pojedynczym wyborze, ["bold", "italic"] przy kilku.
Przykłady
Wielokrotny wybór
Dodaj multiple, żeby można było wcisnąć naraz dowolną liczbę elementów — jak na pasku formatowania.
Kontrolka segmentowa
spacing={0} w połączeniu z wariantem outline scala elementy w jedną kontrolkę ze wspólnymi obramowaniami — kontrolkę segmentową do przełączania między kilkoma widokami tej samej treści.
Przełącznik widoku
W grupie jednokrotnego wyboru ponowne naciśnięcie aktywnego elementu zwalnia go i nic nie zostaje wybrane. Gdy jedna opcja musi być zawsze aktywna, kontroluj wartość i ignoruj puste aktualizacje.
- Atlas
- Beacon
- Cinder
- Delta
const [view, setView] = React.useState("grid")
<ToggleGroup
value={[view]}
onValueChange={(value) => value.length > 0 && setView(value[0])}
aria-label="View"
>
…
</ToggleGroup>Układ pionowy
orientation="vertical" układa elementy jeden pod drugim i przełącza nawigację klawiaturą na strzałki w górę i w dół — to układ palety narzędzi.
Rozmiary
size dotyczy wszystkich elementów: sm 32, default 36, lg 40.
Wytyczne
Kiedy używać
- Do przełączania między dwoma–pięcioma widokami lub trybami tej samej treści: Dzień · Tydzień · Miesiąc, siatka albo lista.
- Na paskach narzędzi z powiązanymi opcjami — jednokrotnego wyboru (wyrównanie) lub wielokrotnego (styl tekstu).
Kiedy nie używać
- Do wyborów w formularzu, który zostanie wysłany później — użyj Radio Group: jest odbierany jako pole formularza i obsługuje opisy.
- Przy więcej niż pięciu–sześciu opcjach albo długich etykietach — użyj Select.
- Do niepowiązanych akcji — użyj Button Group. Grupa przycisków przełączających sugeruje wspólny stan.
- Do przełączania widoków, z których każdy ma własny panel — użyj Tabs. Do nawigacji między stronami służą linki.
Krótkie i jednorodne etykiety
Segmenty powinny być tego samego rodzaju i mieć zbliżoną długość — wtedy kontrolka jest odbierana jako jeden zestaw. Ikony sprawdzają się na paskach narzędzi; przy trybach lepiej działają słowa.
Dostępność
- Grupa renderuje
role="group"; nazwij ją przezaria-labelalboaria-labelledbywskazujące widoczną etykietę. - Każdy element to przycisk przełączający z
aria-pressed. Elementy z samą ikoną potrzebująaria-label. - Grupa zajmuje jedno miejsce w kolejności tabulacji, a fokus wędruje w jej obrębie (roving focus): Tab przenosi fokus do grupy, strzałki przesuwają go między elementami, a na końcach fokus przeskakuje na przeciwny koniec grupy (
loopFocus).
| Klawisz | Działanie |
|---|---|
Tab | Przenosi fokus do grupy; kolejne naciśnięcie ją opuszcza. |
→↓ | Przenosi fokus na następny element (w grupach pionowych — w dół). |
←↑ | Przenosi fokus na poprzedni element (w grupach pionowych — w górę). |
SpacjaEnter | Wciska lub zwalnia element, na którym jest fokus. |
Dokumentacja API
ToggleGroup
Renderuje <div> z role="group". Przyjmuje wszystkie propsy komponentu Toggle Group z Base UI.
ToggleGroupItem
Toggle, który zgłasza grupie swoje value. Renderuje <button>.