MenuChevron Down
TagsField Champ de Tags - Docs - Artefact

TagsField Champ de Tags

Forms
Détection automatique intelligente

Un composant qui permet aux utilisateurs de saisir plusieurs balises sous forme de liste, avec les mêmes conventions de libellé / texte d'aide / texte d'erreur que Field.

Utilisation

React
Hono
Appuyez sur Entrée pour ajouter une balise
import { TagsField } from "../components/ui";

export default function MyPage() {
  return (
    <TagsField
      label="Skills"
      helperText="Appuyez sur Entrée pour ajouter une balise"
      defaultValue={["React", "Hono"]}
      onValueChange={(details) => console.log(details.value)}
    />
  );
}

Comportement

  • Entrée valide le texte saisi comme nouvelle balise (les doublons sont ignorés) et vide le champ.
  • Retour arrière sur un champ vide supprime la dernière balise.
  • Cliquer sur le déclencheur de suppression d'une balise (rendu par Items) supprime cette balise précise.
  • Cliquer n'importe où dans le contrôle qui n'est pas une balise donne le focus au champ de saisie.

Variantes et tailles

variant ("outline" | "subtle" | "surface", par défaut "outline") et size ("xs" | "sm" | "md" | "lg", par défaut "md") contrôlent l'apparence, selon les mêmes conventions que Field/Input.

<TagsField variant="subtle" size="lg" defaultValue={["React"]} />

Composition

Les props par défaut label/helperText/errorText couvrent la plupart des cas, mais les parties sous-jacentes sont aussi exportées pour des mises en page personnalisées :

import { TagsField } from "../components/ui";

<TagsField.Root defaultValue={["React", "Hono"]}>
  <TagsField.Label>Skills</TagsField.Label>
  <TagsField.Control>
    <TagsField.Items />
    <TagsField.Input placeholder="Add a skill…" />
  </TagsField.Control>
  <TagsField.ClearTrigger>Clear all</TagsField.ClearTrigger>
  <TagsField.HiddenInput name="skills" />
</TagsField.Root>;

Constructeur de pages CMS

Ce composant est disponible sous forme de bloc tagsField dans Page Builder (content/pages/*.json) :

{
  "type": "tagsField",
  "label": "Amenities",
  "defaultValue": ["WiFi", "Fireplace", "Hot Tub"]
}

Propriétés

PropriétéTypeDéfautDescription
valuestring[]-Balises contrôlées (force le mode interactif).
defaultValuestring[]-Balises initiales.
inputValuestring-Valeur contrôlée du champ de texte (force le mode interactif).
defaultInputValuestring-Valeur initiale du champ de texte.
labelChild-Libellé du champ.
helperTextChild-Texte d'aide affiché sous les balises.
errorTextChild-Texte d'erreur affiché quand invalid est défini.
invalidboolean-Force l'état invalide, affichant errorText.
disabledboolean-Désactive le champ de saisie et les déclencheurs de suppression/effacement.
readOnlyboolean-Masque le champ de texte, empêchant l'ajout de nouvelles balises.
variant"outline" | "subtle" | "surface""outline"Style visuel.
size"xs" | "sm" | "md" | "lg""md"Taille du contrôle.
namestring-Nom du champ de formulaire pour l'entrée cachée (balises jointes par des virgules).
dir"ltr" | "rtl"-Direction du texte.
onValueChange(details: { value: string[] }) => void-Se déclenche à l'ajout ou à la suppression d'une balise (force le mode interactif).
onInputValueChange(details: { inputValue: string }) => void-Se déclenche à chaque changement du champ de texte (force le mode interactif).
interactiveboolean-Force ou empêche l'hydratation en tant qu'île.

Configuration du CMS

- label: Tags Field
  name: tagsField
  widget: object
  fields:
    - { label: Label, name: label, widget: string, required: false }
    - { label: Helper Text, name: helperText, widget: string, required: false }
    - { label: Error Text, name: errorText, widget: string, required: false }
    - { label: Default Tags, name: defaultValue, widget: list, required: false }

Hydratation

Niveau 2 : s'hydrate lorsque « value », « inputValue », « defaultValue », « defaultInputValue », « onValueChange » ou « onInputValueChange » est présent.