Volver a la wiki

TableBubbleMenu — Menú flotante de tabla en el Cuaderno

Descripción

TableBubbleMenu es un componente React que muestra un menú flotante contextual (bubble menu) encima de cualquier tabla cuando el cursor del editor está posicionado dentro de ella. Sigue el patrón “esquina superior” popularizado por Notion, Confluence y Coda.

El componente se monta directamente en NoteEditor.tsx y delega el posicionamiento al BubbleMenu de @tiptap/react/menus, usando @floating-ui/dom internamente.

Ubicación en el código

ArtefactoRuta
Componentesrc/components/notebook/TableBubbleMenu.tsx
Estilossrc/styles/tools.css (clases .cuaderno-table-menu*)
Punto de montajesrc/components/notebook/NoteEditor.tsx

Props

PropTipoDescripción
editorEditor | nullInstancia del editor TipTap. Si es null el componente no renderiza nada.

Comportamiento

Botones expuestos

LabelComando TipTapAcción
+ fila ↑addRowBefore()Inserta fila encima de la celda actual
+ fila ↓addRowAfter()Inserta fila debajo
+ col ←addColumnBefore()Inserta columna a la izquierda
+ col →addColumnAfter()Inserta columna a la derecha
− filadeleteRow()Elimina fila actual
− coldeleteColumn()Elimina columna actual
⇈ headertoggleHeaderRow()Alterna la fila de cabecera <th>
⊟mergeOrSplit()Fusiona celdas seleccionadas o divide celda fusionada
✕ Eliminar tabladeleteTable()Elimina la tabla entera (con confirm() de seguridad)

Patrón onMouseDown + preventDefault

Todos los botones usan onMouseDown={(e) => e.preventDefault()} para evitar que el editor pierda el foco antes de ejecutar el comando. Sin esto, el cursor se mueve y isActive('table') devuelve false en el momento del onClick.

Estilos CSS relevantes

/* Contenedor */
.cuaderno-table-menu { display: flex; gap: 2px; padding: 4px; background: var(--bg-raised); border-radius: 8px; }

/* Botones */
.cuaderno-table-menu button { padding: 4px 8px; border-radius: 5px; color: var(--fg-muted); }

/* Separadores visuales */
.cuaderno-table-menu-sep { width: 1px; height: 18px; background: var(--border); }

/* Botón destructivo */
.cuaderno-table-menu-danger { color: var(--danger) !important; }

Dependencias clave

Notas de mantenimiento

Véase también

Subir