Saltar al contenido
Alea0.1
Pro
  1. Alea
  2. Componentes
  3. Formularios
  4. RichTextEditor

FormulariosAlea Pro

RichTextEditor

Un editor de texto enriquecido (WYSIWYG) con una barra que se colapsa a las herramientas más usadas: estilos y tamaños de texto, marcas, listas y listas de tareas, tablas editables, imágenes, buscar y reemplazar, y atajos de Markdown. El contenido pegado y el valor se limpian a un conjunto seguro de etiquetas.

import { sanitizeRichText } from '@alea/ui';
import { RichTextEditor } from '@alea/pro';

Ejemplos

RichTextEditor

Todas las herramientas, en una barra que empieza por las más usadas: Más herramientas muestra tamaño de texto, mayúsculas, color y resaltado, sangría, alineación y dirección, imágenes (subidas o por dirección, con texto alternativo), tablas editables, emoji, caracteres especiales, buscar y reemplazar, la vista HTML y pantalla completa. El HTML que recibes está limpio.

Release notes
Shown on the changelog page.0 palabras, 0 caracteres / 600

Menos herramientas

tools elige qué herramientas se muestran, en orden. RICH_TEXT_BASIC es un conjunto listo para comentarios y chat (negrita, cursiva, tachado, código, enlace, lista, emoji); RICH_TEXT_STANDARD sirve para publicaciones.

0 palabras, 0 caracteres

Solo lectura y HTML seguro

isReadOnly muestra el contenido sin la barra. sanitizeRichText limpia cualquier HTML con la misma lista de permitidos: el script, el manejador en línea y el enlace javascript: de abajo nunca pasan.

0 palabras, 0 caracteres
sanitizeRichText(unsafe)

Listas de tareas, Markdown y la barra de la selección

Escribe "[] " para una lista de tareas, "# " para un título, "- " o "1. " para listas, "> " para una cita; marca una tarea haciendo clic en su casilla o con ⌘Enter (Ctrl+Enter). selectionToolbar añade una pequeña barra sobre el texto seleccionado.

Launch plan
0 palabras, 0 caracteres

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-strong…
  • --alea-accent-subtle…
  • --alea-bg…
  • --alea-border…
  • --alea-border-control…
  • --alea-border-strong…
  • --alea-chip-bg…
  • --alea-chip-text…
  • --alea-field-bg…
  • --alea-focus…
  • --alea-focus-halo…
  • --alea-status-danger…
  • --alea-surface-hover…
  • --alea-surface-raised…
  • --alea-text…
  • --alea-text-faint…
  • --alea-text-muted…

Space

  • --alea-space-2…
  • --alea-space-3…
  • --alea-space-4…
  • --alea-space-5…

Radius

  • --alea-radius-field…
  • --alea-radius-md…
  • --alea-radius-sm…

Type

  • --alea-font-family-body…
  • --alea-font-family-mono…
  • --alea-font-size-md…
  • --alea-font-size-sm…
  • --alea-font-size-xs…
  • --alea-font-weight-medium…
  • --alea-font-weight-semibold…

Shadow

  • --alea-shadow-pop…

Motion

  • --alea-motion-duration-base…
  • --alea-motion-duration-fast…
  • --alea-motion-duration-instant…
  • --alea-motion-ease-emphasized…
  • --alea-motion-ease-out…

Layer

  • --alea-z-modal…

Props

RichTextEditor props

Un editor de texto enriquecido (WYSIWYG): estilos y tamaños de texto, marcas, mayúsculas, color y resaltado, listas, listas de tareas y sangría, citas y código, enlaces, alineación y dirección, tablas editables, imágenes por dirección o subidas con texto alternativo, emoji y caracteres especiales, buscar y reemplazar, atajos de Markdown, vista HTML, pantalla completa, deshacer y conteo de palabras. La barra es una sola parada de Tab y se colapsa a las herramientas más usadas; el contenido pegado y el valor se limpian a un conjunto seguro de etiquetas, así nada pegado puede ejecutar código.

PropTipoPor defectoDescripción
aria-labelstring-Nombre para lectores de pantalla cuando no hay etiqueta visible.
classNamestring-Clases extra.
collapsibleToolbarbooleantrueMuestra primero las herramientas más usadas, con un botón Más herramientas para el resto (solo si ocultaría más de tres). Por defecto true; false muestra todas.
defaultToolbarExpandedbooleanfalseEmpieza con todas las herramientas a la vista. Por defecto false.
defaultValuestring''El contenido al inicio (no controlado).
descriptionReactNode-Texto de ayuda bajo el editor.
isDisabledboolean-Deshabilita la edición.
isReadOnlyboolean-Muestra el contenido sin la barra y sin edición.
labelReactNode-La etiqueta visible.
markdownShortcutsbooleantrueMarkdown mientras escribes: "# " título, "- " lista, "1. " numerada, "[] " lista de tareas, "> " cita, "---" línea, tres comillas invertidas código. Por defecto true.
maxHeightnumber400Altura del área de escritura antes de tener scroll, en px. Por defecto 400.
maxImageSizenumber2El archivo de imagen más grande que se puede subir, en MB (se guarda en el HTML como datos). Por defecto 2.
maxLengthnumber-Muestra un contador de caracteres contra este límite (un límite suave: avisa, no corta).
minHeightnumber180Altura mínima del área de escritura, en px. Por defecto 180.
onChange((html: string) => void)-Se llama con el HTML limpio en cada cambio.
placeholderstring-Se muestra mientras el editor está vacío.
selectionToolbarbooleanfalseUna pequeña barra sobre el texto seleccionado (negrita, cursiva, subrayado, enlace, resaltado, código), para el puntero. Por defecto false.
showCountbooleantrueMuestra el contador de palabras y caracteres. Por defecto true.
toolsRichTextTool[]ALLQué herramientas se muestran, en orden. Por defecto todas. Conjuntos listos: RICH_TEXT_BASIC (comentarios), RICH_TEXT_STANDARD (publicaciones) y el de por defecto (todo).
valuestring-El contenido como HTML (controlado). Se limpia a las etiquetas permitidas.

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.

Estados
Focus insideHover (CSS)Pressed (CSS)DisabledFocus (CSS)Read onlyHoverExpanded
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-rte-find.alea-rte-find-current.alea-rte-tool.alea-rte-pop.alea-rte-caret.alea-rte-popover.alea-rte-swatches.alea-rte-swatch-grid.alea-rte-swatch.alea-rte-select.alea-rte-chars.alea-rte-char
Atributos data
data-variant=ghostdata-emptydata-overdata-fulldata-tabledata-ondata-checklist

Accesibilidad

  • El área de escritura es un cuadro de texto de varias líneas con etiqueta; su texto de ayuda y el contador de caracteres están enlazados a ella.
  • La barra es una sola parada de Tab: las flechas se mueven entre herramientas, Inicio y Fin saltan. Cada herramienta dice si está activa (aria-pressed) y nombra su atajo.
  • La barra conserva la selección: presionar una herramienta da formato a lo seleccionado y devuelve el cursor.
  • El HTML pegado y el valor pasan por una lista de permitidos (párrafos, títulos, listas, citas, código, enlaces con direcciones seguras, alineación), así nunca entran scripts, estilos ni enlaces javascript:.
  • Escape sale del área de escritura, así quien usa el teclado nunca queda atrapado.
  • Más herramientas es un botón que muestra u oculta (aria-expanded); la barra colapsada conserva las herramientas más usadas, y las de tabla aparecen mientras el cursor está en una tabla.
  • Buscar y reemplazar es una región de búsqueda: se anuncia el número de coincidencias, se resaltan sin cambiar el texto, y se anuncian los reemplazos.
  • Marcar una tarea se anuncia. En el contenido mostrado fuera del editor, la casilla es visual: di hecho o pendiente en el texto cuando importe.
  • La barra de la selección es un atajo para el puntero: cada herramienta que tiene también está en la barra principal y en el teclado.

Teclado

TeclaAcción
⌘B / Ctrl+BNegrita
⌘I / Ctrl+ICursiva
⌘U / Ctrl+USubrayado
⌘K / Ctrl+KAgregar un enlace
⌘F / Ctrl+FBuscar y reemplazar
Shift+⌘V / Ctrl+Shift+VPegar sin formato
⌘Enter / Ctrl+EnterMarca o desmarca una tarea
# , - , 1. , [] , > y luego EspacioTítulo, lista, lista numerada, lista de tareas, cita
--- o tres comillas invertidas, y luego EnterLínea divisoria o bloque de código
⌘Z / Ctrl+ZDeshacer
Shift+⌘Z / Ctrl+YRehacer
Flechas (en la barra)Se mueven entre herramientas
EscapeSale del editor, o cierra la barra de enlace o de búsqueda

Qué hacer y qué evitar

Hacer

  • Elige solo las herramientas que tu contenido necesita con tools: una caja de comentarios necesita negrita, cursiva, enlace y lista.
  • Guarda el HTML limpio de onChange, y límpialo otra vez en el servidor antes de guardarlo.
  • Usa maxLength para avisar de textos largos; nunca corta lo que se escribió.

Evitar

  • No muestres HTML guardado con dangerouslySetInnerHTML sin limpiarlo: usa sanitizeRichText o muéstralo en un editor de solo lectura.
  • No lo uses para campos de texto simple: TextArea es más liviano y claro.
  • No lo uses cuando la gente escribe Markdown: MarkdownEditor conserva su sintaxis.

En Figma

RichTextEditor con los grupos de la barra como propiedades booleanas, estados Default, Focus, Disabled y Read only.

Probado con axe, teclado y roles de lector de pantalla