MenúChevron Down
TagsField Campo de Etiquetas - Docs - Artefact

TagsField Campo de Etiquetas

Forms
Detección automática inteligente

Un componente que permite a los usuarios introducir varias etiquetas en forma de lista, con las mismas convenciones de etiqueta / texto de ayuda / texto de error que Field.

Uso

React
Hono
Presiona Enter para añadir una etiqueta
import { TagsField } from "../components/ui";

export default function MyPage() {
  return (
    <TagsField
      label="Skills"
      helperText="Presiona Enter para añadir una etiqueta"
      defaultValue={["React", "Hono"]}
      onValueChange={(details) => console.log(details.value)}
    />
  );
}

Comportamiento

  • Enter confirma el texto escrito como una nueva etiqueta (los duplicados se ignoran) y limpia el campo.
  • Retroceso con el campo vacío elimina la última etiqueta.
  • Hacer clic en el disparador de eliminar de una etiqueta (renderizado por Items) elimina esa etiqueta específica.
  • Hacer clic en cualquier parte del control que no sea una etiqueta enfoca el campo de entrada.

Variantes y tamaños

variant ("outline" | "subtle" | "surface", por defecto "outline") y size ("xs" | "sm" | "md" | "lg", por defecto "md") controlan la apariencia, siguiendo las mismas convenciones que Field/Input.

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

Composición

Las props predeterminadas label/helperText/errorText cubren la mayoría de los casos, pero las partes internas también se exportan para diseños personalizados:

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>;

Constructor de páginas CMS

Este componente está disponible como un bloque tagsField en el Constructor de páginas (content/pages/*.json):

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

Propiedades

PropTypeDefaultDescription
valuestring[]-Etiquetas controladas (fuerza el modo interactivo).
defaultValuestring[]-Etiquetas iniciales.
inputValuestring-Valor controlado del campo de texto (fuerza el modo interactivo).
defaultInputValuestring-Valor inicial del campo de texto.
labelChild-Etiqueta del campo.
helperTextChild-Texto de ayuda mostrado debajo de las etiquetas.
errorTextChild-Texto de error mostrado cuando invalid está definido.
invalidboolean-Fuerza el estado inválido, mostrando errorText.
disabledboolean-Desactiva el campo de entrada y los disparadores de eliminar/limpiar.
readOnlyboolean-Oculta el campo de texto, impidiendo añadir nuevas etiquetas.
variant"outline" | "subtle" | "surface""outline"Estilo visual.
size"xs" | "sm" | "md" | "lg""md"Tamaño del control.
namestring-Nombre del campo de formulario para la entrada oculta (etiquetas unidas por comas).
dir"ltr" | "rtl"-Dirección del texto.
onValueChange(details: { value: string[] }) => void-Se dispara al añadir o eliminar una etiqueta (fuerza el modo interactivo).
onInputValueChange(details: { inputValue: string }) => void-Se dispara al cambiar el campo de texto (fuerza el modo interactivo).
interactiveboolean-Fuerza o impide la hidratación como isla.

Configuración del 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 }

Hidratación

Nivel 2: Se hidrata cuando está presente value, inputValue, defaultValue, defaultInputValue, onValueChange, o onInputValueChange.