Formato del deck
Fuente de verdad: shared/deck.ts. Todos los objetos son estrictos: las claves desconocidas no pasan la validación.
Deck
| Campo | Tipo | Reglas |
|---|---|---|
version | 1 | Obligatorio, literal 1. |
title | string | Obligatorio, 1–200 caracteres. Se muestra en las listas y en el resumen. |
theme | object | Opcional. Por defecto { background: "#10131a", foreground: "#f4f1ea", accent: "#ff7a45", muted: "#9aa3b2" }. Es preferible { "preset": "<name>" }. |
slides | Slide[] | Obligatorio, 1–200. Los ids de las diapositivas son únicos. |
Tema
Los colores van en hex: # + 3–8 dígitos hexadecimales.
| Campo | Tipo | Reglas |
|---|---|---|
preset | "estudio" | "editorial" | "neon" | "papel" | "brutalista" | "corporativo" | Opcional. Trae colores, fuentes (display/body/mono), fondo de diapositiva (degradado y/o patrón), estilo de tarjeta, estilo de títulos y paleta de gráficos. Ver themes.md. |
background | hex | Obligatorio sin preset; con uno, es un reemplazo opcional. |
foreground | hex | Obligatorio sin preset; con uno, es un reemplazo opcional. |
accent | hex | Obligatorio sin preset; con uno, es un reemplazo opcional. |
muted | hex | Opcional. |
surface | hex | Opcional. Reemplaza el color de tarjeta/superficie (tarjetas, texto con card: true, separaciones del gráfico de dona). |
- Con un preset, reemplaza colores solo cuando la marca del usuario lo exija:
{ "preset": "corporativo", "accent": "#0057b8" }. - Sin preset se mantienen exactamente las reglas de antes:
background,foregroundyaccentson obligatorios,mutedes opcional.
Diapositiva
| Campo | Tipo | Reglas |
|---|---|---|
id | string | Obligatorio, [A-Za-z0-9_-]{1,40}, único en el deck. |
layout | "free" | "quiz" | Opcional, por defecto free. "quiz" requiere quiz, y quiz requiere "quiz". |
background | hex | Background | Opcional, reemplaza el fondo del tema. Ver más abajo. |
notes | string | Opcional (ponlo siempre), máximo 5000 caracteres. Solo para quien presenta; nunca se envía al público. |
elements | Element[] | Obligatorio (usa [] en las diapositivas de quiz), máximo 60. Los ids de los elementos son únicos por diapositiva. |
quiz | Quiz | Solo con layout: "quiz". |
Objeto de fondo de la diapositiva
Un string hex sigue funcionando ("background": "#0b0d12"). La forma de objeto (todos los campos opcionales, estricta):
| Campo | Tipo | Reglas |
|---|---|---|
color | hex | Color base sólido. |
gradient | { "from": hex, "to": hex, "angle"?: number } | Degradado lineal; angle 0–360 (grados). |
image | asset src | Mismas reglas que el src de una imagen (https://… o assets/<file>, sin ..). Cubre toda la diapositiva. |
dim | number 0–0.9 | Oscurece la imagen para que el texto siga siendo legible. Usa 0.4–0.6 debajo de texto. |
pattern | "dots" | "grid" | "lines" | "noise" | Textura sutil sobre el color/degradado. |
{ "background": { "gradient": { "from": "#1b1f3a", "to": "#0b0d12", "angle": 135 }, "pattern": "dots" } }Omite background en la mayoría de diapositivas: el preset ya trae uno. Usa el objeto para aperturas, separadores de sección y cierres.
Las diapositivas importadas (live-deck import) usan exactamente este campo: "background": { "image": "assets/slide-01.png" } sin un layout nuevo; encima pueden ir elementos como el qr para unirse.
Mensajes de validación
La CLI imprime path: message, donde path es la ruta dentro del JSON (slides.2.quiz.correctIndex: correctIndex must point to an option). Corrige en esa ruta y vuelve a ejecutar.