Saltar al contenido
Alea0.1
Pro
  1. Alea
  2. Componentes
  3. IA
  4. PromptInput

IA

PromptInput

El cuadro de mensaje de un asistente: crece con el texto, Enter envía, el botón Enviar se vuelve Detener mientras se genera una respuesta, y las sugerencias dan un punto de partida.

import { PromptInput, PromptSuggestions } from '@alea/ui';

Ejemplos

Asistente

Una conversación completa hecha con las piezas: sugerencias para empezar, el campo de mensaje, el razonamiento que se pliega, un paso de herramienta, una respuesta que llega por partes con citas y fuentes, y acciones debajo. Elige una sugerencia o escribe una pregunta.

How can I help?

Enter para enviar, Shift+Enter para una línea nueva

Archivos, un modelo y estados

header contiene los archivos adjuntos; tools contiene un selector de modelo y botones, junto a Enviar. Activa Generando para ver Detener y el brillo; Desactivado lo bloquea.

brief.pdf
tokens.json

Tokens

Los tokens de diseño que usa este componente, con su valor en el tema actual. Cambia cualquiera para darle otro estilo.

Color

  • --alea-accent…
  • --alea-accent-on…
  • --alea-accent-solid…
  • --alea-accent-strong…
  • --alea-accent-subtle…
  • --alea-border-control…
  • --alea-chart-2…
  • --alea-field-bg…
  • --alea-focus-halo…
  • --alea-status-success…
  • --alea-surface-hover…
  • --alea-surface-raised…
  • --alea-text…
  • --alea-text-faint…
  • --alea-text-muted…

Space

  • --alea-space-1…
  • --alea-space-2…

Radius

  • --alea-radius-lg…
  • --alea-radius-sm…

Type

  • --alea-font-family-body…
  • --alea-font-size-md…
  • --alea-font-size-xs…

Motion

  • --alea-motion-duration-fast…
  • --alea-motion-ease-emphasized…
  • --alea-motion-ease-out…
  • --alea-motion-scale-press…

Component

  • --alea-prompt-angle…

Props

PromptInput props

El cuadro de mensaje de un asistente: crece con el texto, Enter envía y Shift+Enter añade una línea, un botón Enviar que se vuelve Detener mientras se genera una respuesta, un espacio para archivos arriba y herramientas abajo. El borde brilla mientras trabaja.

PropTipoPor defectoDescripción
classNamestring-Clases extra.
clearOnSubmitbooleantrueBorra el texto después de enviar. Por defecto true.
defaultValuestring''El texto al principio.
headerReactNode-Contenido sobre el texto: archivos adjuntos, un mensaje citado.
isDisabledboolean-Desactiva escribir y enviar.
isGeneratingboolean-Se está generando una respuesta: el botón de enviar se vuelve Detener, y el borde brilla.
labelReactNode-Etiqueta visible; sin ella el campo se llama "Mensaje".
maxRowsnumber8Líneas antes de que tenga scroll. Por defecto 8.
onAttach(() => void)-Muestra un botón de clip; se llama al pulsarlo (abre ahí tu selector de archivos).
onChange((value: string) => void)-Se llama con cada cambio.
onStop(() => void)-Se llama con el botón Detener.
onSubmit((value: string) => void)-Se llama con el texto al pulsar Enter o el botón de enviar. El texto vacío nunca se envía.
placeholderstring-Se muestra mientras está vacío.
showHintboolean-Muestra bajo el campo la pista de Enter y Shift+Enter. Por defecto false.
toolsReactNode-Contenido al inicio de la fila de abajo: un selector de modelo, botones de herramientas.
valuestring-El texto (controlado).

PromptSuggestions props

Puntos de partida para una conversación, como chips o tarjetas. Cada uno es un botón; entran uno tras otro.

PropTipoPor defectoDescripción
itemsobligatoriaPromptSuggestion[]-
onSelectobligatoria(prompt: string, item: PromptSuggestion) => void-Se llama con el texto a enviar.
classNamestring-Clases extra.
variant"chips" | "cards"'chips'chips (por defecto) para una fila bajo el campo, o cards para una conversación vacía.

Especificaciones

Generado desde el código: las variantes de los tipos, los estados y tokens del CSS, y los patrones de motion que aplican. Las grillas muestran el componente real en ambos temas; los números se miden en la página.

PromptInput

Estados
Focus insideHover (CSS)Pressed (CSS)Disabled
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-prompt.alea-prompt-box.alea-prompt-header.alea-prompt-input.alea-prompt-row.alea-prompt-btn.alea-prompt-tools.alea-prompt-send.alea-prompt-hint
Atributos data
data-generatingdata-donedata-stop

PromptSuggestions

Variantes
variantchipscards
Estados
Hover (CSS)Pressed (CSS)
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-suggestions.alea-suggestion.alea-suggestion-icon.alea-suggestion-text.alea-suggestion-label.alea-suggestion-desc
Atributos data
data-variant=cards

Accesibilidad

  • El campo de texto tiene nombre (Mensaje por defecto) y dice que Enter envía cuando showHint está activo.
  • Enviar está desactivado mientras el campo está vacío; mientras se genera una respuesta se vuelve un botón Detener con nombre, y se anuncia Generando una respuesta.
  • Las sugerencias son una lista de botones con nombre; el brillo alrededor del campo es decorativo y se queda quieto con movimiento reducido.

Teclado

TeclaAcción
EnterEnvía
Shift+EnterLínea nueva
TabPasa por adjuntar, las herramientas y Enviar o Detener

Qué hacer y qué evitar

Hacer

  • Pon el selector de modelo o de modo en tools, junto a Enviar.
  • Muestra sugerencias en una conversación vacía, y escóndelas cuando la gente empiece a escribir.
  • Mantén Detener disponible todo el tiempo que se genera una respuesta.

Evitar

  • No envíes con Enter en un campo pensado para textos largos: usa TextArea y un botón.
  • No borres lo que la gente escribió si el envío falla: pon clearOnSubmit en false y bórralo tú.

En Figma

PromptInput con State (Empty, Typing, Generating, Disabled) y espacios para la cabecera y las herramientas; PromptSuggestions con Variant (Chips, Cards).

Probado con axe, teclado y roles de lector de pantalla