Cuaderno: color de texto y tablas ajustables (filas/cols + edición contextual)
Cuaderno: color de texto y tablas ajustables
Commit fc380c8 (2026-05-08) — @Esquembri · Co-authored Claude Opus 4.7
Añade dos grupos de capacidades al editor de notas del módulo Cuaderno (CreaRack Workspace):
- Color de texto — paleta de 9 colores aplicable a cualquier selección.
- Tablas ajustables — inserción parametrizada + edición contextual en-línea.
Color de texto
Dependencias añadidas
| Paquete | Versión | Rol |
|---|---|---|
@tiptap/extension-text-style | 3.23.1 | Base que habilita atributos de estilo en marcas de texto |
@tiptap/extension-color | 3.23.1 | Aplica/elimina colores sobre textStyle |
Las extensiones se registran en NoteEditor.tsx tras las extensiones de tabla:
import { TextStyle, Color } from '@tiptap/extension-text-style';
// …
extensions: [
// … otras extensiones …
TextStyle,
Color,
Markdown.configure({ html: false, linkify: true, breaks: false }),
]
UX — Botón “A” en toolbar
- Botón
Aen la barra de herramientas; muestra un indicador de color activo: barra horizontal de 10×3 px bajo la letra, con el color activo ocurrentColorsi no hay ninguno. - Al pulsarlo abre un popover de paleta (role=“menu”) con 9 swatches de 24×24 px en grid 3 columnas.
- Primer swatch: reset (”×”), vuelve al color heredado llamando
unsetColor(). - Los 8 colores disponibles:
| Label | Hex |
|---|---|
| Rojo | #ef4444 |
| Naranja | #f59e0b |
| Amarillo | #eab308 |
| Verde | #10b981 |
| Cian | #06b6d4 |
| Azul | #3b82f6 |
| Morado | #8b5cf6 |
| Rosa | #ec4899 |
- Cierra al seleccionar color, al pulsar Escape o al hacer clic fuera del toolbar (listener
mousedownenwindow).
Estilos CSS relevantes
/* src/styles/tools.css */
.tb-popover-anchor { position: relative; display: inline-block; }
.tb-popover { position: absolute; top: calc(100% + 4px); … z-index: 30; }
.tb-popover[role="menu"] { display: grid; grid-template-columns: repeat(3, 24px); gap: 6px; }
.tb-color-swatch { width: 24px; height: 24px; border-radius: 4px; … }
.tb-color-swatch:hover { border-color: var(--fg); transform: scale(1.05); }
Tablas ajustables
Antes vs. después
| Aspecto | Antes | Después |
|---|---|---|
| Inserción | Fija 3×3 con withHeaderRow:true | Popover con inputs filas (1-20) y cols (1-10) |
| Edición | Sin acciones en toolbar | Botones contextuales cuando el cursor está dentro |
Popover de inserción
- Botón
⊞abretb-popover tb-popover-table(role=“dialog”). - Dos
<input type="number">para filas (1-20) y columnas (1-10). - Botón “Insertar N×M” (label dinámico) ejecuta:
editor.chain().focus().insertTable({ rows, cols, withHeaderRow: true }).run();
- Cierra el popover al insertar, Escape o clic fuera.
Botones contextuales (solo cuando inTable === true)
Se detecta con editor.isActive('table'). Aparecen a continuación del separador:
| Botón | Acción TipTap |
|---|---|
+ fila | addRowAfter() |
+ col | addColumnAfter() |
− fila | deleteRow() |
− col | deleteColumn() |
⇈ | toggleHeaderRow() |
✕ | confirm() → deleteTable() |
El botón ✕ requiere confirmación del navegador antes de destruir la tabla.
Estilos CSS relevantes
.tb-popover-table { min-width: 200px; padding: 12px; }
.tb-popover-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.tb-popover-row label { display: flex; flex-direction: column; font-size: 0.72rem; … }
.tb-popover-row input { padding: 5px 8px; background: var(--bg-raised-2); … }
Gestión de foco y accesibilidad
- Todos los botones de toolbar usan
onMouseDown={(e) => e.preventDefault()}para evitar que el editor pierda el foco al pulsar. - El listener de cierre de popovers está montado en
useEffecty se limpia correctamente al desmontar. - Se usan atributos
role="menu",role="menuitem",role="dialog"yaria-labelen los popovers.
Archivos modificados
| Archivo | Cambio principal |
|---|---|
package.json | +2 deps Tiptap |
pnpm-lock.yaml | Lock actualizado |
src/components/notebook/NoteEditor.tsx | Import + registro TextStyle, Color |
src/components/notebook/Toolbar.tsx | Paleta color + popover tabla + botones contextuales |
src/styles/tools.css | .tb-popover*, .tb-color-swatch, .tb-popover-table |
Véase también
- [[entity—cuaderno—component—toolbar]]
- [[workspace—que-es-workspace]]