Skip to content

ToggleGroup

Groupe de toggles avec sélection exclusive ou multiple. Supporte le mode connecté, l'orientation verticale/horizontale et les rôles ARIA adaptés au mode de sélection.

Description

ToggleGroup affiche une liste de Toggle et gère la sélection. En mode exclusive, un seul toggle peut être actif (similaire à un groupe radio). En mode multi, plusieurs toggles peuvent être actifs simultanément. Le mode connecté (gap="none") fusionne visuellement les toggles en un seul bloc.

Exemples d'utilisation

Sélection multiple (défaut)

Format de texte

vue
<script setup>
import { ref } from 'vue'

const format = ref(['bold'])
const items = [
  { value: 'bold', label: 'Gras' },
  { value: 'italic', label: 'Italique' },
  { value: 'underline', label: 'Souligné' }
]
</script>

<template>
  <SuToggleGroup
    v-model="format"
    :items="items"
    aria-label="Format du texte"
  />
</template>

Sélection exclusive

vue
<script setup>
import { ref } from 'vue'
import { Bars3BottomLeftIcon, Bars3Icon, Bars3BottomRightIcon } from '@heroicons/vue/24/outline'

const align = ref(['center'])
const items = [
  { value: 'left', icon: Bars3BottomLeftIcon },
  { value: 'center', icon: Bars3Icon },
  { value: 'right', icon: Bars3BottomRightIcon }
]
</script>

<template>
  <SuToggleGroup
    v-model="align"
    :items="items"
    mode="exclusive"
    aria-label="Alignement"
  />
</template>

Mode connecté (gap=none)

vue
<SuToggleGroup
  v-model="selected"
  :items="items"
  gap="none"
  mode="exclusive"
  aria-label="Alignement"
/>

Orientation verticale

vue
<SuToggleGroup
  v-model="selected"
  :items="items"
  orientation="vertical"
  gap="none"
/>

API

Props

PropTypeDéfautDescription
modelValue(string | number)[][]Valeurs actives (v-model)
itemsToggleGroupItem[]requisListe des toggles
mode'exclusive' | 'multi''multi'Mode de sélection
size'sm' | 'md' | 'lg''md'Taille des toggles
variant'default' | 'outline' | 'ghost''default'Variante visuelle
radiusRadius'md'Rayon de bordure
gap'none' | 'sm' | 'md' | 'lg''md'Espacement (none = connecté)
orientation'horizontal' | 'vertical''horizontal'Orientation du groupe
disabledbooleanfalseDésactive tout le groupe

ToggleGroupItem

PropriétéTypeDescription
valuestring | numberIdentifiant unique (requis)
labelstringTexte affiché
iconComponentIcône (état inactif)
activeIconComponentIcône (état actif)
disabledbooleanDésactive cet item

Événements

ÉvénementPayloadDescription
update:modelValue(string | number)[]Émis lors du changement (v-model)
change(string | number)[]Nouvelle liste des valeurs actives
selectstring | number, booleanItem sélectionné et son nouvel état

Accessibilité

  • role="radiogroup" en mode exclusive, role="group" en mode multi
  • Chaque toggle utilise role="switch" avec aria-checked
  • Navigation clavier : Tab entre les toggles, Entrée / Espace pour basculer
  • aria-label sur le conteneur pour décrire le groupe

Publié sous licence MIT.