Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

InputTags

Crea una lista de etiquetas escribiendo, pegando o eligiendo sugerencias.

Categoría
Formularios y selección
Import
@neural-ui/core/input-tags
Selector
neu-input-tags
import { NeuInputTagsComponent } from '@neural-ui/core/input-tags';

Uso

El modelo es un array readonly de valores. Intro o un separador añaden un elemento; escribir un borrador no modifica el array. options y typeahead añaden sugerencias. Con objetos, utiliza optionLabel/optionValue, compareWith para la identidad y textValue para convertir texto libre en valores de dominio.

Ejemplos

Interactúa con el ejemplo y abre Código para ver su implementación completa.

Ejemplos
Angular

Elige una sugerencia o pulsa Intro para añadir texto. Pega temas separados por comas para añadir varios; los duplicados se excluyen por defecto.

Prueba y configura

Cambia las opciones y prueba la vista previa. Despliega el valor de la aplicación o el evento para consultar los datos reales; el template generado permanece junto al configurador.

Prueba y configura

Vista previa

Angular

Template generado: refleja las opciones anteriores. La pestaña Código incluye los imports y el estado.

template.html
<neu-input-tags
  [(value)]="tags"
  [options]="topics"
  [typeahead]="true"
  [allowDuplicates]="false"
  [commitOnBlur]="false"
  size="md"
  [delay]="0"
  [emptyMessage]="'No hay temas coincidentes'"
  [fluid]="true"
  [label]="'Temas'"
  [placeholder]="'Añade un tema'"
  [removeLabel]="'Eliminar'"
/>

Signal Forms

Enlaza FormField una sola vez al componente; el campo controla el valor y la validación. El esquema exige un valor no vacío. Sal del control para marcarlo como visitado y restablece el campo para limpiar el valor y el estado de interacción.

Guía de Signal Forms

Signal Forms

Válido: true

Valor y eventos

Utiliza [(value)] o [value] junto con (valueChange), no ambas formas. El modelo sincroniza el estado de la aplicación; los demás Outputs comunican los eventos documentados. touch comunica que se ha visitado o abandonado el control, no un valor nuevo.

Accesibilidad y teclado

La etiqueta visible nombra el campo de texto. Define removeLabel para los botones de eliminación; un template de elemento debe conservar una acción de eliminación accesible. Las flechas recorren sugerencias, Intro añade un elemento y Escape cierra el panel. readonly permite consultar los valores sin añadir ni eliminar etiquetas.

Tecla
Acción
Tab Entra y sale del control.
Enter Añade el texto o la sugerencia activa.
Backspace / Delete Edita el texto o elimina la etiqueta enfocada.
Escape Cierra el panel de sugerencias.

API

Los Inputs, modelos y Outputs proceden del contrato de Core fijado. Pulsa un tipo con nombre para abrir su definición. Cada Template incluye su ejemplo y código real.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
allowDuplicatesbooleanfalse[allowDuplicates]Permite valores repetidos; en otro caso compareWith excluye los duplicados.
ariaDescribedBystring''[ariaDescribedBy]IDs de los elementos que describen el control, separados por espacios.
ariaLabelstring''[ariaLabel]Nombre accesible cuando no hay una etiqueta visible.
ariaLabelledBystring''[ariaLabelledBy]ID del elemento que proporciona el nombre accesible.
ariaRequiredbooleanfalse[ariaRequired]Estado accesible de obligatoriedad; no instala un validador.
autocompletestring'off'[autocomplete]Atributo autocomplete del navegador para el input.
autofocusbooleanfalse[autofocus]Solicita el foco cuando se inicializa el control.
autoOptionFocusbooleanfalse[autoOptionFocus]Activa una opción disponible al abrir la lista.
commitOnBlurbooleanfalse[commitOnBlur]Añade el borrador al salir del control compuesto.
compareWithNeuOptionCompareWith<V>Object.isValor derivado[compareWith]Función para comparar valores seleccionados; utiliza una identidad de dominio estable.
completeOnFocusbooleanfalse[completeOnFocus]Solicita sugerencias al entrar el foco en el control.
delaynumber300[delay]Espera en milisegundos antes de solicitar sugerencias.
dirtybooleanfalse[dirty]Estado del formulario que indica que el usuario ha cambiado el valor.
disabledbooleanfalse[disabled]Impide la interacción del usuario.
emptyMessagestring'No suggestions'[emptyMessage]Mensaje que se muestra cuando la colección de opciones está vacía.
errorsreadonly ValidationError.WithOptionalFieldTree[][][errors]Errores de validación proporcionados por el formulario o la aplicación.
fluidbooleanfalse[fluid]Hace que el control ocupe el ancho de su contenedor.
focusOnHoverbooleantrue[focusOnHover]Cambia la opción activa cuando el puntero entra en una opción.
groupsreadonly NeuInputTagsGroup<T>[][][groups]Opciones agrupadas, con sus elementos hijos definidos mediante groupConfig.
hiddenbooleanfalse[hidden]Oculta el control según el estado del formulario.
hintstring''[hint]Texto de ayuda asociado al campo.
inputIdstring''[inputId]Identificador estable del control nativo; se genera si se omite.
invalidbooleanfalse[invalid]Muestra el estado inválido; no añade una regla de validación.
labelstring''[label]Etiqueta visible y nombre accesible del control.
loadingbooleanfalse[loading]Muestra el estado de carga mientras la aplicación proporciona datos.
maxItemsnumber | nullnull[maxItems]Número máximo de etiquetas confirmadas, o null sin límite.
maxlengthnumber | nullnull[maxlength]Longitud máxima del borrador nativo, o null sin límite.
minlengthnumber | nullnull[minlength]Longitud mínima del borrador nativo, o null si no se especifica.
minQueryLengthnumber1[minQueryLength]Longitud mínima del borrador antes de solicitar sugerencias.
namestring''[name]Nombre asociado al control nativo del formulario.
normalizeToken(text: string) => string(text) => text.trim()Valor derivado[normalizeToken]Normaliza el texto antes de convertirlo y comparar duplicados. Por defecto elimina espacios extremos.
optionDisabledNeuOptionDisabledAccessor<T> | nullnull[optionDisabled]Nombre de campo o función que indica si una opción está deshabilitada.
optionLabelNeuOptionLabelAccessor<T> | nullnull[optionLabel]Nombre de campo o función que obtiene la etiqueta visible de la opción.
optionsreadonly T[][][options]Registros de opciones cargados. Los accessors permiten usar tus propios objetos de dominio.
optionValueNeuOptionValueAccessor<T, V> | nullnull[optionValue]Nombre de campo o función que obtiene el valor guardado de la opción.
pendingbooleanfalse[pending]Estado del formulario que indica que hay una validación asíncrona pendiente.
placeholderstring'Add tag...'[placeholder]Texto que se muestra cuando el campo no tiene un valor seleccionado.
readonlybooleanfalse[readonly]Mantiene el control enfocable y legible sin aceptar cambios.
removeLabelstring'Remove'[removeLabel]Prefijo accesible para eliminar una etiqueta.
requiredbooleanfalse[required]Marca el campo como obligatorio; utiliza un validador del formulario para exigirlo.
scrollHeightstring'200px'[scrollHeight]Altura máxima del área visible de opciones.
separatorsreadonly string[][','][separators]Caracteres que añaden un borrador o separan texto pegado. Por defecto la coma.
size"sm" | "md" | "lg"'md'[size]Tamaño visual del campo: sm, md o lg.
tabindexnumber | nullnull[tabindex]Orden de tabulación del punto de entrada por teclado.
textValue((text: string) => V | null | undefined) | nullnull[textValue]Convierte texto libre en un valor. Devolver null/undefined rechaza el elemento.
titlestring''[title]Texto del tooltip nativo del campo.
touchedbooleanfalse[touched]Estado del formulario que indica que el control ha sido visitado.
typeaheadbooleanfalse[typeahead]Activa el panel de sugerencias a partir de options o groups.
variant"outline" | "solid"'outline'[variant]Variante visual del campo: outline o solid.

Models

Un modelo admite [(propiedad)]="signal" o la pareja [propiedad] y (propiedadChange). Elige una de las dos formas, no ambas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
valuereadonly V[][][(value)]Array readonly de valores confirmados; el borrador es independiente.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
clearedNeuInputTagsClearedEvent<V>(cleared)="onCleared($event)"Se emite con la acción explícita de limpiar; valueChange comunica el valor resultante.
closedvoid(closed)="onClosed($event)"Se emite después de cerrar el panel en el navegador.
focusEnteredFocusEvent(focusEntered)="onFocusEntered($event)"Se emite cuando el foco entra en el control.
focusLeftFocusEvent(focusLeft)="onFocusLeft($event)"Se emite cuando el foco sale del control.
itemRemovedNeuInputTagsRemovedEvent<V>(itemRemoved)="onItemRemoved($event)"Comunica el elemento y el índice eliminados; valueChange ya sincroniza el array.
itemReorderedNeuInputTagsReorderedEvent<V>(itemReordered)="onItemReordered($event)"Comunica una reordenación; valueChange sincroniza el nuevo orden del array.
openedvoid(opened)="onOpened($event)"Se emite después de abrir el panel en el navegador.
optionActivatedNeuOptionActivatedEvent<T, V>(optionActivated)="onOptionActivated($event)"Opción activada, su valor y el evento que la ha activado.
pasteResultNeuInputTagsPasteResult<V>(pasteResult)="onPasteResult($event)"Comunica los elementos aceptados y rechazados después de procesar el pegado.
suggestionsRequestNeuOptionDataRequest(suggestionsRequest)="onSuggestionsRequest($event)"Solicita sugerencias con consulta e identidad de solicitud; la aplicación proporciona suggestions.
touchvoid(touch)="onTouch($event)"Notifica al formulario que el control ha sido visitado; no es un cambio de valor.

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Nombre
Mecanismo
Contrato
NeuInputTagsFooterDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsFooter]
NeuInputTagsGroupDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsGroup]
NeuInputTagsHeaderDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsHeader]
NeuInputTagsItemDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsItem]
NeuInputTagsOptionDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsOption]
NeuInputTagsRemoveIconDirectiveVer ejemplo Directiva pública de templateng-template[neuInputTagsRemoveIcon]

Cada ejemplo muestra un template diferente. Alterna entre Demo y Código para consultar su implementación, imports y estado.

Template Group

NeuInputTagsGroupDirective

Template Group
Angular

Template Header

NeuInputTagsHeaderDirective

Template Header
Angular

Template Item

NeuInputTagsItemDirective

Template Item
Angular

Template Option

NeuInputTagsOptionDirective

Template Option
Angular

Template RemoveIcon

NeuInputTagsRemoveIconDirective

Template RemoveIcon
Angular

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Estilos y tokens

Carga los estilos de Core una sola vez. Utiliza los tokens públicos para personalizaciones locales o un preset para cambios de toda la aplicación. Conserva la legibilidad de etiquetas, foco, opciones seleccionadas y estados deshabilitados en modo claro y oscuro.

Tokens específicos

Este componente utiliza tokens compartidos del tema en lugar de tokens específicos.

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-border Bordes normales de controles y celdas Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.08)
--neu-error Color del campo no válido o de la acción de peligro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #dc2626
--neu-focus-ring Anillo normal del foco de teclado Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 0 0 var(--neu-focus-ring-width) rgba(0, 122, 255, 0.15)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-primary-50 Superficie tenue de marca para estados de puntero y foco Compartido con otros consumidores de Core; limita el cambio a un ámbito. #eff6ff
--neu-radius Radio de las esquinas del control Compartido con otros consumidores de Core; limita el cambio a un ámbito. 8px
--neu-surface Superficie principal del campo, cabecera o control Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff
--neu-surface-2 Superficies secundarias y filas alternas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #f1f5f9