Saltar al contenido
EspañolEnglish
Todos los componentes (244)

Selector de personas

Elección · PeoplePicker

Qué es y cuándo usarlo

Elegir a varias personas: a quién se invita a una reunión, quién va en un grupo, a quién se asigna un ticket. Es un MultiSelect con la gente dentro: cada opción lleva su avatar con el punto de presencia, el nombre y una línea de debajo, y cada elegida sale como ficha con su avatar.

Cuándo usarlo

  • Invitar, asignar, compartir: cualquier sitio donde se elige a gente de una lista que se conoce.
  • people lleva a cada persona con su key, su name, su foto (src), su presencia (status) y una description (el cargo, el equipo).
  • exclude con las claves de quien ya está dentro del grupo: no se ofrece, que elegirlo dos veces no tiene sentido.
  • Los conectados van primero, que es a quien se suele buscar; byPresence={false} deja el orden en que llegan.
  • Todo lo del MultiSelect sigue valiendo: max, limitTags, serverFiltered y onType para buscar en el servidor, loading...

Cuándo no

  • Elegir a una sola persona: Select con renderOption y un Avatar dentro.
  • Enseñar quién está, sin elegir: AvatarGroup.

Teclado: el del MultiSelect: se escribe para filtrar, las flechas recorren la lista, Intro elige, Retroceso quita la última ficha y Tab pasa por cada ficha y su aspa.

Accesibilidad: lo que se lee es el nombre, y la presencia va como descripción de la opción («Marta Ruiz, Dirección · en línea»): el punto de color solo no la cuenta. Los avatares de dentro son decorativos, el nombre ya está escrito al lado.

Aspecto fino: sin variables propias; usa las del campo (--amset-field-*) y las clases amset-people__option, amset-people__name, amset-people__description y amset-people__tag.

Cómo se ve

Marta Ruiz
Carla GilOperaciones · ausente
Paco SolerSoporte · ocupado
Lucía FerrerTienda online · desconectado

<PeoplePicker
  label="Asignar a"
  people={personas}
  placeholder="Busca a alguien del equipo"
  byPresence
  initialValue={["marta"]}
/>

Props

Se importa con import { PeoplePicker } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
labelobligatoriastring—
peopleobligatoriareadonly Person[]—
allowsCreatebooleanPermite crear valores que no estan en la lista (etiquetas libres).
byPresencebooleanOrdena por presencia (conectados primero) y despues por nombre. Con `false`, el orden en que llegan.
checklistbooleanModo casillas: la lista sigue enseñando lo elegido con su marca, pulsar una ya elegida la quita y el panel se queda abierto para marcar varias seguidas. Al llegar a `max`, las que faltan por marcar se apagan en vez de desaparecer.
classNamestringSe une a las clases de la biblioteca, no las sustituye.
disabledbooleanNi se escribe, ni se abre la lista, ni se quitan fichas: todo sale del orden del Tab.
errorstring—
excludereadonly string[]Claves que no se ofrecen: quien ya esta en el grupo, quien se esta invitando a si mismo.
hintstring—
initialValuereadonly string[]—
invalidbooleanMarca el campo como no valido. Lo normal es pasar `error`, que ademas lo explica.
limitTagsnumberCuantas fichas se ven con el campo en reposo; el resto se resume en «+N» y salen todas al entrar en el campo. Sin esto se ven todas, y la caja crece en lineas cuando no caben.
loadingbooleanLas opciones estan llegando. Marca el campo como ocupado, enseña un anillo y una fila `loadingText` en la lista; las opciones que ya hubiera se quedan.
loadingTextstringLo que dice la fila de carga. Por defecto, «Cargando…».
maxnumberCuantas se pueden elegir como mucho.
maxVisibleOptionsnumberTope de opciones pintadas a la vez en listas muy largas (miles). El resto no se pinta: la lista avisa de cuantas se ven y que se escriba para acotar. Sin esto se pintan todas.
namestringCon este nombre viaja lo elegido en un formulario nativo: un campo oculto por clave (`name=a&name=b`), como un `<select multiple>`.
noResultsMessagestring—
offsetnumber—
onChange(keys: readonly string[]) => void—
onType(text: string) => void—
placeholderstring—
placementPlacement—
readOnlybooleanLo elegido se ve y el campo se enfoca, pero no se añade ni se quita nada: las fichas pierden su boton de quitar.
removeText(label: string) => stringEl nombre entero del boton de quitar cada ficha: «Quitar Anillos» por defecto. Es todo el nombre; no se le pega nada detras.
requiredboolean—
serverFilteredbooleanLa lista ya llega filtrada de fuera (busqueda en el servidor).
size"sm" | "md" | "lg"—
valuereadonly string[]Claves elegidas. Si se pasa, el estado lo lleva quien use el componente.
variantFieldVariant—

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: