Volver a la wiki

ADR 2026-05-08 — Migración editor Cuaderno: TipTap → CodeMirror 6

Contexto

El módulo Cuaderno del Workspace usaba TipTap 3 como editor de notas con un paradigma WYSIWYG: el usuario veía texto formateado visualmente sin ver los markers Markdown. El almacenamiento ya era Markdown plano desde la iteración s54.

El usuario principal (Edu) expresó preferencia explícita por ver el Markdown fuente con los markers visibles (##, **, `, |…) y syntax highlighting por colores, al estilo Notepad++. El modelo WYSIWYG de TipTap es opuesto a este objetivo.

Decisión

Reemplazar TipTap 3 por CodeMirror 6 en modo source (sin preview WYSIWYG).

Alternativas descartadas

AlternativaRazón de descarte
Mantener TipTap + añadir “source mode”TipTap no tiene un modo source-first real; añadir preview inverso es workaround frágil
ProseMirror directoMás bajo nivel aún; CodeMirror 6 tiene mejor soporte de lenguajes y Lezer ya incluye lang-markdown
Monaco EditorDemasiado pesado para notas simples; orientado a código, no a Markdown
Marked + textarea rawSin highlighting; experiencia pobre

Consecuencias

Positivas

Negativas / Trade-offs

Implementación

Componentes refactorizados

ComponenteCambio
NoteEditor.tsxTipTap Editor → CodeMirror EditorView con @codemirror/lang-markdown
Toolbar.tsxComandos TipTap → manipulación de texto Markdown literal sobre EditorView
ExportModal.tsxSimplificado: export directo del storage sin ghost editor
ThemeConfigModal.tsxapplyTheme dispara CustomEvent cuaderno-theme-changed
codemirrorTheme.tsNuevo — HighlightStyle Lezer con 9 elementos sintácticos leyendo CSS vars de :root

Integración del tema dinámico

ThemeConfigModal → CustomEvent("cuaderno-theme-changed")
                 → codemirrorTheme.ts reconfigura HighlightStyle
                 → EditorView relee CSS vars de :root

Deps

Añadidas: @codemirror/{state,view,language,lang-markdown,commands,search,autocomplete} + @lezer/highlight

Eliminadas: @tiptap/core, @tiptap/extension-bubble-menu, @tiptap/extension-color, @tiptap/extension-link, @tiptap/extension-placeholder, @tiptap/extension-table*, @tiptap/extension-task*, @tiptap/extension-text-style, @tiptap/pm, @tiptap/react, @tiptap/starter-kit, @tiptap/suggestion, tiptap-markdown

Estado

Aplicada y en producción desde 2026-05-08.

Véase también

Subir