Saltar al contenido
Moodle Design Systemby Didactika
Moodle 5.3 LTS
v0.1
ES

API: tokens y versiones de Moodle

Las variables CSS de cada versión de Moodle, en claro y oscuro, cómo convertirlas en SCSS o en archivos de herramientas de diseño y cómo comprobar el contraste.

Un token es una variable CSS que define el tema de una versión de Moodle: --bs-primary, --bs-body-bg, los --mds-* de Moodle 5.3. Leerlos de aquí mantiene la documentación de un plugin, un kit de Figma o un script de build al paso de la hoja de estilos real de esa versión.

Qué se publica

Dirección Qué guarda
/api/index.json → versions[] Cada versión con su generación de Bootstrap, familia de iconos, soporte y los enlaces a sus tokens y stylesheet
/api/tokens/<version>.json tokens.light y tokens.dark, cada uno un mapa de nombre de variable a valor
/moodle/<version>/boost.css La hoja de esa versión, acotada bajo .ds-<version> para que varias convivan en una página

<version> es v53, v45 o v41. Moodle 5.3 tiene unas 500 variables por modo; las versiones 4.x tienen muchas menos, porque Bootstrap 4 compila sus colores en las clases. El modo oscuro existe desde Moodle 5.x; los archivos de 4.x tienen dark vacío.

Leer un token

const root = 'https://moodle-design.didactika.org';
const v53 = await (await fetch(root + '/api/tokens/v53.json')).json();

console.log(v53.version.label);           // "Moodle 5.3 LTS"
console.log(v53.tokens.light['--bs-primary']);
console.log(v53.tokens.dark['--bs-body-bg']);

Las familias de variables

Prefijo Qué guarda
--bs-* Bootstrap: colores, cuerpo, bordes, fuentes, sombras, radios
--bs-*-rgb Los mismos colores como canales, para rgba(var(--bs-primary-rgb), .2)
--bs-*-bg-subtle, -border-subtle, -text-emphasis Los tonos que Bootstrap 5.3 deriva para cada rol
--mds-* El sistema de diseño propio de Moodle 5.3 (tipografía, espaciado, color)
--primary, --secondary… Los nombres antiguos de Moodle, aún definidos

Generar SCSS para una herramienta

const entries = Object.entries(v53.tokens.light).filter(([name]) => name.startsWith('--bs-'));
const scss = entries.map(([name, value]) => `$${name.slice(2)}: ${value};`).join('\n');

Generar un archivo para una herramienta de diseño

Un conjunto de tokens en el formato que leen los plugins de Figma y Style Dictionary ({ "nombre": { "value": … } }):

const toTokens = (map) => Object.fromEntries(
    Object.entries(map)
        .filter(([name]) => name.startsWith('--bs-') && !name.endsWith('-rgb'))
        .map(([name, value]) => [name.slice(5), {value, type: /^#|^rgb/.test(value) ? 'color' : 'other'}]),
);
const file = {light: toTokens(v53.tokens.light), dark: toTokens(v53.tokens.dark)};

Comprobar el contraste con los colores reales

const luminance = ([r, g, b]) => {
    const f = (x) => { const v = x / 255; return v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4; };
    return 0.2126 * f(r) + 0.7152 * f(g) + 0.0722 * f(b);
};
const rgb = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
const ratio = (a, b) => { const [x, y] = [luminance(rgb(a)), luminance(rgb(b))].sort((p, q) => q - p); return (x + 0.05) / (y + 0.05); };

console.log(ratio(v53.tokens.light['--bs-primary'], '#ffffff').toFixed(2));  // 4,5 o más

Los colores del tema de Didactika no son tokens de Moodle

La paleta del tema de Didactika (/api/brand.json) se aplica sobre las variables de Moodle. Un plugin nunca fija un hex de ella: usa la variable de Bootstrap (var(--bs-primary)) y la paleta llega con el tema. Mira la página “Tema de Didactika”.

Comprueba una versión antes de apoyarte en ella

El campo support de cada versión dice si es vigente, LTS o heredada, en los dos idiomas. Léelo cuando una guía diga qué versiones probar; la matriz de una CI debería incluir los dos extremos del rango admitido y la LTS intermedia.