MenuChevron Down
TagsField Campo de Tags - Docs - Artefact

TagsField Campo de Tags

Forms
Detecção automática inteligente

Um componente que permite aos usuários inserir várias tags como uma lista, com as mesmas convenções de rótulo / texto de ajuda / texto de erro do Field.

Uso

React
Hono
Pressione Enter para adicionar uma tag
import { TagsField } from "../components/ui";

export default function MyPage() {
  return (
    <TagsField
      label="Skills"
      helperText="Pressione Enter para adicionar uma tag"
      defaultValue={["React", "Hono"]}
      onValueChange={(details) => console.log(details.value)}
    />
  );
}

Comportamento

  • Enter confirma o texto digitado como uma nova tag (duplicatas são ignoradas) e limpa o campo.
  • Backspace com o campo vazio remove a última tag.
  • Clicar no botão de remover de uma tag (renderizado por Items) remove aquela tag específica.
  • Clicar em qualquer lugar do controle que não seja uma tag foca o campo de entrada.

Variantes e tamanhos

variant ("outline" | "subtle" | "surface", padrão "outline") e size ("xs" | "sm" | "md" | "lg", padrão "md") controlam a aparência, seguindo as mesmas convenções usadas por Field/Input.

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

Composição

As props padrão label/helperText/errorText cobrem a maioria dos casos, mas as partes internas também são exportadas para layouts 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>;

Construtor de páginas CMS

Este componente está disponível como um bloco tagsField no Construtor de páginas (content/pages/*.json):

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

Propriedades

PropTypeDefaultDescription
valuestring[]-Tags controladas (força o modo interativo).
defaultValuestring[]-Tags iniciais.
inputValuestring-Valor controlado do campo de texto (força o modo interativo).
defaultInputValuestring-Valor inicial do campo de texto.
labelChild-Rótulo do campo.
helperTextChild-Texto de ajuda exibido abaixo das tags.
errorTextChild-Texto de erro exibido quando invalid está definido.
invalidboolean-Força o estado inválido, exibindo errorText.
disabledboolean-Desativa o campo de entrada e os botões de remover/limpar.
readOnlyboolean-Oculta o campo de texto, impedindo a adição de novas tags.

| variant | `"outline" \ | "subtle" \ | "surface"` | "outline" | Estilo visual. |

| size | `"xs" \ | "sm" \ | "md" \ | "lg"` | "md" | Tamanho do controle. |

| name | string | - | Nome do campo de formulário para o input oculto (tags unidas por vírgula). |

| dir | `"ltr" \ | "rtl"` | - | Direção do texto. |

| onValueChange | (details: { value: string[] }) => void | - | Disparado ao adicionar ou remover uma tag (força o modo interativo). | | onInputValueChange | (details: { inputValue: string }) => void | - | Disparado conforme o campo de texto muda (força o modo interativo). | | interactive | boolean | - | Força ou impede a hidratação como ilha. |

Configuração do 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 }

Hidratação

Nível 2: Hidrata quando value, inputValue, defaultValue, defaultInputValue, onValueChange, ou onInputValueChange está presente.