Instalación
npx logic2b@next add tags-inputUso
import { TagsInput } from "@/components/ui/tags-input"
const [tags, setTags] = React.useState<string[]>([])
<TagsInput
value={tags}
onValueChange={setTags}
placeholder="Añadir una etiqueta…"
/>
Intro o coma confirman el borrador. El texto pegado y separado por comas se divide en etiquetas, Retroceso sobre un campo vacío elimina la última y perder el foco confirma cualquier texto pendiente. Los duplicados se ignoran.
Ejemplos
Máximo de etiquetas
Limita la lista con max: los valores pegados que excedan el máximo se descartan
y el campo queda desactivado hasta que se elimine una etiqueta.
Accesibilidad
- La parte editable es un
<input>real. Dale una etiqueta con<Label htmlFor>—se reenvía elid— o mediantearia-label. - El botón de cierre de cada etiqueta expone
aria-label="Remove <tag>". - Retroceso sobre un campo vacío elimina la última etiqueta, por lo que todo el control funciona sin puntero.
Playground interactivo
Edita las propiedades del componente y revisa el JSX exacto antes de copiarlo. La vista previa se carga solo cuando esta sección entra en pantalla.
<TagsInput
defaultValue={["registry", "accessible"]}
placeholder="Add a tag…"
max={5}
aria-label="Component tags"
/>Referencia de API
Generada a partir de las exportaciones públicas de TypeScript en src/ui/tags-input.tsx. Las descripciones técnicas conservan el texto canónico del código fuente.
TagsInput
ComponenteTags input — free-form multi-value entry rendered as removable chips. Enter or comma commits the draft, paste splits on commas, Backspace on an empty draft removes the last tag. Duplicates are ignored; `max` caps the list.
Props: Omit<React.ComponentProps<"div">, "defaultValue" | "onChange"> & { value?: string[] defaultValue?: string[] onValueChange?: (value: string[]) => void placeholder?: string max?: number disabled?: boolean }| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
value | string[] | No | — | — |
defaultValue | string[] | No | — | — |
onValueChange | (value: string[]) => void | No | — | — |
placeholder | string | No | — | — |
max | number | No | — | — |
disabled | boolean | No | — | — |
Contrato de accesibilidad
Comportamiento legible por máquinas y responsabilidades de quien integra tags-input. Los detalles normativos conservan el texto canónico del registro.
- Soporte
- Comportamiento implementado
- Patrón
- multi-value textbox
- HTMLInputElement
| Teclas | Comportamiento |
|---|---|
| Enter , | Commit the current text as a tag. |
| Backspace | Remove the last tag when the text field is empty. |
Semántica incorporada
- The editable input receives id/aria-label/aria-labelledby; removal buttons name their tag.
Responsabilidades de integración
- Provide a visible label and announce additions/removals in application context when that feedback is important.