Raccourci clavier : Ctrl + K
Commencer

Notation

VRating permet de donner une note sur quelques icônes. C’est un groupe de boutons radio natifs : les flèches, l’envoi de formulaire et required fonctionnent comme dans tout formulaire.

Utilisation

vue
Quality

Your overall impression of the product.

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

const rating = ref<number | null>(3)
</script>

<template>
  <VRating v-model="rating" label="Quality" hint="Your overall impression of the product." />
</template>

Exemples

Effaçable

clearable permet de revenir à null : recliquez la valeur courante, ou atteignez « Aucune note » avec les flèches.

vue
Delivery

Value: 4

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

const rating = ref<number | null>(4)
</script>

<template>
  <div class="demo">
    <VRating v-model="rating" label="Delivery" clearable />
    <VTypography variant="body-sm" tone="muted">Value: {{ rating ?? 'null' }}</VTypography>
  </div>
</template>

<style scoped>
.demo {
  display: grid;
  gap: var(--vectis-space-3);
}
</style>

Lecture seule

readonly affiche la valeur comme une seule image nommée d’après elle, par exemple « 3,7 sur 5 ». Une valeur fractionnaire remplit une partie d’icône.

vue
Average rating

3.7 · 128 reviews

<script setup lang="ts">
import { VRating, VTypography } from 'vectis-ui'
</script>

<template>
  <div class="summary">
    <VRating
      :model-value="3.7"
      readonly
      size="sm"
      tone="warning"
      label="Average rating"
      hide-label
    />
    <VTypography variant="body-sm" tone="muted">3.7 · 128 reviews</VTypography>
  </div>
</template>

<style scoped>
.summary {
  display: flex;
  align-items: center;
  gap: var(--vectis-space-2);
}
</style>

Tailles

size règle les icônes sur 20, 24 ou 32 pixels.

vue
Small
Medium
Large
<script setup lang="ts">
import { VRating } from 'vectis-ui'
</script>

<template>
  <div class="sizes">
    <VRating :model-value="4" size="sm" label="Small" />
    <VRating :model-value="4" label="Medium" />
    <VRating :model-value="4" size="lg" label="Large" />
  </div>
</template>

<style scoped>
.sizes {
  display: grid;
  gap: var(--vectis-space-4);
}
</style>

Tons et icônes

tone colore les icônes remplies, et color le remplace par une couleur de votre choix. icon remplace l’étoile par n’importe quelle icône ; les vides sont dessinées en contour et les remplies avec sa forme pleine.

vue
Accent
Warning
Neutral
Custom colour
<script setup lang="ts">
import { VRating } from 'vectis-ui'
</script>

<template>
  <div class="tones">
    <VRating :model-value="4" label="Accent" />
    <VRating :model-value="4" tone="warning" label="Warning" />
    <VRating :model-value="4" tone="neutral" label="Neutral" />
    <VRating :model-value="4" color="#e91e63" label="Custom colour" />
  </div>
</template>

<style scoped>
.tones {
  display: grid;
  gap: var(--vectis-space-4);
}
</style>

Validation

VRating suit le modèle des champs : error remplace l’aide et est annoncé, et required ajoute un astérisque et rend le choix obligatoire pour le navigateur.

vue
QualityChoose a rating.
<script setup lang="ts">
import { computed, ref } from 'vue'
import { VRating } from 'vectis-ui'

const rating = ref<number | null>(null)
const error = computed(() => (rating.value === null ? 'Choose a rating.' : undefined))
</script>

<template>
  <VRating v-model="rating" label="Quality" :error="error" required name="quality" />
</template>

API

Props

PropTypeDéfaut
maxnumber5
Nombre d’icônes, et valeur la plus haute.
labelstringaucune
Légende du groupe. Par défaut, le nom accessible vient du dictionnaire de la bibliothèque.
hideLabelbooleanfalse
Masque visuellement le libellé, qui reste le nom du groupe.
hintstringaucune
Texte d’aide sous les icônes.
errorstringaucune
Message d’erreur qui remplace l’aide. Annoncé quand il apparaît ou change.
requiredbooleanfalse
Rend la note obligatoire dans un formulaire et ajoute un astérisque.
namestringaucune
Nom du champ dans l’envoi du formulaire.
clearablebooleanfalse
Permet de revenir à aucune note, en recliquant la valeur courante ou avec le choix « Aucune note ».
readonlybooleanfalse
Affiche la valeur comme une seule image. Une valeur fractionnaire remplit une partie d’icône.
disabledbooleanfalse
Désactive tout le groupe.
sizeRatingSize'sm' | 'md' | 'lg''md'
Taille des icônes.
toneRatingTone'accent' | 'warning' | 'danger' | 'success' | 'neutral''accent'
Couleur des icônes remplies.
colorstringaucune
Couleur personnalisée des icônes remplies (hex, nom CSS ou oklch()), qui remplace le ton. Vérifiez son contraste.
iconIconSourcestar
Icône qui remplace l’étoile.
v-modelnumber | nullnull
Note de 1 à max, ou null. Peut être fractionnaire en lecture seule.

Types

Types utilisés dans les tables d’API. Importez les types exportés depuis vectis-ui.

export interface BuiltinIcon {
  name: string
  paths: readonly [string] | readonly [string, string]
}
export type IconRender =
  | { path: string; viewBox?: string }
  | { component: Component; props?: Record<string, unknown> }
  | { src: string }
  | { text: string; class?: string }
  | { class: string }
export type IconSource = string | BuiltinIcon | IconRender

Variables CSS

TokenValeur
--vectis-control-size-rating-sm1.25rem
--vectis-control-size-rating-md1.5rem
--vectis-control-size-rating-lg2rem