Volver a la wiki

ThemeConfigModal — configuración visual del tema Markdown del Cuaderno

ThemeConfigModal

Componente React modal que permite al usuario configurar los colores con los que el editor Tiptap pinta los elementos de Markdown en el Cuaderno de Workspace. Es una preferencia exclusivamente visual del navegador — no modifica el contenido de las notas ni los archivos exportados.

Introducido en commit e230534 (2026-05-08).


Ubicación

src/components/notebook/ThemeConfigModal.tsx

Exports públicos

SímboloTipoDescripción
ThemeConfigModaldefault (componente React)Modal de configuración
ThemeConfiginterfaceTipo con los 9 colores configurables
DEFAULT_THEMEconst ThemeConfigValores por defecto
loadTheme()functionLee tema desde localStorage
saveTheme(theme)functionPersiste en localStorage
applyTheme(theme)functionAplica al :root via CSS vars

Interface ThemeConfig

export interface ThemeConfig {
  h1: string;        // color hex Heading 1
  h2: string;        // color hex Heading 2
  h3: string;        // color hex Heading 3
  code: string;      // código inline
  codeBlock: string; // bloque de código
  link: string;      // enlaces
  blockquote: string;// cita
  marker: string;    // marcadores de lista
  strong: string;    // negrita
}

CSS variables generadas

applyTheme() escribe en document.documentElement.style:

CSS varCampo
--cuaderno-color-h1h1
--cuaderno-color-h2h2
--cuaderno-color-h3h3
--cuaderno-color-codecode
--cuaderno-color-code-blockcodeBlock
--cuaderno-color-linklink
--cuaderno-color-blockquoteblockquote
--cuaderno-color-markermarker
--cuaderno-color-strongstrong

Persistencia


Props del componente

interface Props {
  onClose: () => void;
  onApply: (theme: ThemeConfig) => void;
  current: ThemeConfig;
}
PropDescripción
currentTema activo al abrir el modal (para restaurar si se cancela)
onApplyCallback que recibe el nuevo tema tras «Aplicar y guardar»
onCloseCallback de cierre (Escape, Cancelar, fondo)

Ciclo de vida del modal

  1. Abre → recibe current como estado inicial.
  2. Cada cambio de color → applyTheme() (preview en vivo, sin guardar).
  3. «Restaurar defaults» → resetea estado local a DEFAULT_THEME (sin cerrar).
  4. «Cancelar» / Escape / fondo → applyTheme(current) (restaura) y cierra sin persistir.
  5. «Aplicar y guardar» → saveTheme() + onApply() + cierra.

Integración en NotebookPage

// Estado
const [theming, setTheming] = useState(false);
const [theme, setTheme] = useState<ThemeConfig>(() => loadTheme());

// Aplicar al montar
useEffect(() => { applyTheme(theme); }, [theme]);

// Render
{theming && (
  <ThemeConfigModal
    current={theme}
    onApply={(t) => setTheme(t)}
    onClose={() => setTheming(false)}
  />
)}

El botón «Tema MD» se renderiza en Toolbar.tsx y dispara onOpenTheme(), prop nueva de NoteEditor.


Valores por defecto (DEFAULT_THEME)

export const DEFAULT_THEME: ThemeConfig = {
  h1: '#ffffff',
  h2: '#e5e7eb',
  h3: '#d1d5db',
  code: '#f59e0b',
  codeBlock: '#10b981',
  link: '#3b82f6',
  blockquote: '#9ca3af',
  marker: '#6b7280',
  strong: '#ffffff',
};

Paleta oscura por defecto (el Workspace usa tema dark).


Véase también

Subir