Raccourci clavier : Ctrl + K
Commencer

Groupe de champs

VFieldset regroupe des contrôles liés dans un <fieldset> natif nommé par sa légende, avec une aide et un message d’erreur.

Utilisation

vue
Plan

You can change it at any time.

<script setup lang="ts">
import { ref } from 'vue'
import { VFieldset, VRadio } from 'vectis-ui'

const plan = ref('free')
</script>

<template>
  <VFieldset legend="Plan" hint="You can change it at any time.">
    <VRadio v-model="plan" name="plan" value="free" label="Free" />
    <VRadio v-model="plan" name="plan" value="pro" label="Pro" />
    <VRadio v-model="plan" name="plan" value="team" label="Team" />
  </VFieldset>
</template>

Exemples

Horizontal

orientation="horizontal" dispose les contrôles sur une ligne qui passe à la ligne si besoin.

vue
Notifications
<script setup lang="ts">
import { VCheckbox, VFieldset } from 'vectis-ui'
</script>

<template>
  <VFieldset legend="Notifications" orientation="horizontal">
    <VCheckbox label="Email" />
    <VCheckbox label="Text message" />
    <VCheckbox label="Push" />
  </VFieldset>
</template>

Erreur et obligatoire

error remplace l’aide, décrit le groupe et est annoncé quand il apparaît. Un groupe ne peut pas porter aria-invalid : liez les invalid et required du slot sur les contrôles.

vue
Plan
<script setup lang="ts">
import { ref } from 'vue'
import { VButton, VFieldset, VRadio } from 'vectis-ui'

const plan = ref<string>()
const error = ref<string>()

function submit() {
  error.value = plan.value ? undefined : 'Choose a plan to continue.'
}

function pick(value: string) {
  plan.value = value
  error.value = undefined
}
</script>

<template>
  <div class="demo">
    <VFieldset v-slot="{ invalid, required }" legend="Plan" :error="error" required>
      <VRadio
        v-for="value in ['Free', 'Pro', 'Team']"
        :key="value"
        :model-value="plan"
        name="plan"
        :value="value"
        :label="value"
        :invalid="invalid"
        :required="required"
        @update:model-value="pick(value)"
      />
    </VFieldset>
    <VButton @click="submit">Continue</VButton>
  </div>
</template>

<style scoped>
.demo {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--vectis-space-4);
}
</style>

Légende masquée

hideLegend masque la légende visuellement. Elle nomme toujours le groupe pour les lecteurs d’écran.

vue
Notifications
<script setup lang="ts">
import { VCheckbox, VFieldset } from 'vectis-ui'
</script>

<template>
  <VFieldset legend="Notifications" hide-legend orientation="horizontal">
    <VCheckbox label="Email" />
    <VCheckbox label="Text message" />
  </VFieldset>
</template>

API

Props

PropTypeDéfaut
legendstringaucune
Légende qui nomme le groupe.
hintstringaucune
Texte d’aide sous le groupe, lié par aria-describedby.
errorstringaucune
Message d’erreur affiché à la place de l’aide, lié par aria-describedby et annoncé quand il apparaît. Active le invalid du slot.
requiredbooleanfalse
Ajoute un astérisque après la légende et active le required du slot.
hideLegendbooleanfalse
Masque la légende visuellement tout en la gardant comme nom du groupe.
orientationFieldsetOrientation'vertical' | 'horizontal''vertical'
Dispose les contrôles en colonne ou sur une ligne qui passe à la ligne.

Slots

SlotType
default{ invalid: boolean; required: boolean; }
Les contrôles. Liez invalid et required sur eux.