Raccourci clavier : Ctrl + K
Commencer

Champ numérique

VNumberInput est un champ pour un nombre, avec des boutons de pas, le clavier d’un spinbutton et un formatage selon la locale.

Utilisation

vue

Between 1 and 10.

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

const quantity = ref<number | null>(1)
</script>

<template>
  <VNumberInput
    v-model="quantity"
    class="field"
    label="Quantity"
    hint="Between 1 and 10."
    :min="1"
    :max="10"
  />
</template>

<style scoped>
.field {
  max-inline-size: 15rem;
}
</style>

Exemples

Boutons

controls place les boutons de pas de part et d’autre, les empile à la fin ou les retire. Ils restent hors de l’ordre de tabulation : les flèches du clavier agissent depuis le champ.

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

const guests = ref<number | null>(2)
const rooms = ref<number | null>(1)
const nights = ref<number | null>(3)
</script>

<template>
  <div class="stack">
    <VNumberInput v-model="guests" label="Guests" controls="split" :min="1" />
    <VNumberInput v-model="rooms" label="Rooms" controls="stacked" :min="1" />
    <VNumberInput v-model="nights" label="Nights" controls="none" :min="1" />
  </div>
</template>

<style scoped>
.stack {
  display: grid;
  gap: var(--vectis-space-4);
  max-inline-size: 15rem;
}
</style>

Formatage

formatOptions reçoit les options d’Intl.NumberFormat. La valeur est formatée hors édition et affichée brute pendant la saisie. Avec style: 'percent', 0,15 s’affiche et se saisit 15.

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

const price = ref<number | null>(1249.9)
const discount = ref<number | null>(0.15)
const distance = ref<number | null>(42.195)
</script>

<template>
  <div class="stack">
    <VNumberInput
      v-model="price"
      label="Price"
      :min="0"
      :step="10"
      :format-options="{ style: 'currency', currency: 'EUR' }"
    />
    <VNumberInput
      v-model="discount"
      label="Discount"
      :min="0"
      :max="1"
      :step="0.05"
      :format-options="{ style: 'percent' }"
    />
    <VNumberInput
      v-model="distance"
      label="Distance"
      controls="none"
      :format-options="{ style: 'unit', unit: 'kilometer', maximumFractionDigits: 3 }"
    />
  </div>
</template>

<style scoped>
.stack {
  display: grid;
  gap: var(--vectis-space-4);
  max-inline-size: 15rem;
}
</style>

Pas

step fixe de combien les flèches et les boutons déplacent la valeur, sur une grille qui part de min. Les pas décimaux ne dérivent pas.

vue

Page Up and Page Down move ten steps.

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

const weight = ref<number | null>(0.5)
</script>

<template>
  <VNumberInput
    v-model="weight"
    class="field"
    label="Weight"
    hint="Page Up and Page Down move ten steps."
    :min="0"
    :max="20"
    :step="0.5"
    :format-options="{ style: 'unit', unit: 'kilogram' }"
  />
</template>

<style scoped>
.field {
  max-inline-size: 15rem;
}
</style>

API

Props

PropTypeDéfaut
minnumberaucune
Plus petite valeur. Une valeur saisie inférieure y est ramenée à la validation.
maxnumberaucune
Plus grande valeur. Une valeur saisie supérieure y est ramenée à la validation.
stepnumber1
Déplacement des flèches et des boutons. Page précédente et Page suivante déplacent de dix pas.
formatOptionsIntl.NumberFormatOptionsaucune
Options d’Intl.NumberFormat pour la valeur affichée : devise, unité, pourcentage ou décimales.
localestringaucune
Locale utilisée pour formater et lire le nombre. Par défaut, celle de la bibliothèque.
controlsNumberInputControls'split' | 'stacked' | 'none''split'
Position des boutons de pas.
incrementLabelstringaucune
Nom accessible du bouton plus. Par défaut, celui du dictionnaire de la bibliothèque.
decrementLabelstringaucune
Nom accessible du bouton moins. Par défaut, celui du dictionnaire de la bibliothèque.
sizeInputSize'sm' | 'md' | 'lg''md'
Taille du champ. Remplacée quand VInputGroup définit size.
compactbooleanfalse
Réduit la hauteur sans changer les marges ni le texte. Remplacé quand VInputGroup définit compact.
labelstringaucune
Libellé visible lié au champ. Sans lui, fournissez aria-label ou aria-labelledby.
hintstringaucune
Aide sous le champ, liée par aria-describedby.
errorstringaucune
Message d’erreur affiché à la place de l’aide. Définit aria-invalid et est annoncé quand il apparaît.
invalidbooleanfalse
Définit aria-invalid et le style d’erreur.
disabledbooleanfalse
Désactive le champ et ses boutons.
readonlybooleanfalse
Empêche la saisie et les pas, en laissant le focus et la copie possibles.
clearablebooleanfalse
Ajoute un bouton d’effacement qui met la valeur à null.
clearLabelstringaucune
Nom accessible du bouton d’effacement. Par défaut, celui du dictionnaire de la bibliothèque.
loadingbooleanfalse
Affiche un indicateur de chargement à la fin du champ.
loadingTextstringaucune
Texte accessible de l’indicateur. Par défaut, celui du dictionnaire de la bibliothèque.
v-modelnumber | nullnull
Valeur du champ, un nombre, ou null quand il est vide. La saisie est validée à la sortie du champ et sur Entrée.

Événements

ÉvénementType
clear[]
Émis après que le bouton d’effacement a mis la valeur à null.