Contenedor Playground
El contenedor ::: playground transforma los ejemplos de código estáticos en entornos de pruebas interactivos y autónomos. Los lectores pueden editar el código directamente en el navegador, ejecutarlo con un solo clic o atajo de teclado, inspeccionar salidas estructuradas de la consola, alternar entre el resultado en vivo y el código fuente, y previsualizar componentes HTML/CSS en tiempo real.
El entorno de ejecución de playground está construido con JavaScript estándar y CSS puro, sin dependencias pesadas. Las páginas que no utilizan playgrounds cargan 0 KB de recursos adicionales.
Sintaxis del Contenedor
El contenedor admite bloques con código encerrado, contenedores de autocierre que cargan scripts externos desde su repositorio y bloques de código delimitados estándar.
1. Contenedor de Bloque con Código
Encapsule código estándar dentro de un bloque ::: playground:
::: playground title="Explorador de Variables Reactivas" icon:code live
```js
const buildYear = docmd.var.get("docmd.buildYear");
const siteTitle = docmd.var.get("site.title");
console.log("Título del Sitio:", siteTitle);
console.log("Año de Compilación:", buildYear);
// Modificar una variable reactiva del cliente
docmd.var.set("user.plan", "Enterprise");
console.info("Plan de usuario actualizado a:", docmd.var.get("user.plan"));
return `Año actual: ${buildYear}`;
```
:::
A continuación se muestra el ejemplo funcional en vivo renderizado directamente por docmd:
::: playground title=“Explorador de Variables Reactivas” icon:code live
const buildYear = docmd.var.get("docmd.buildYear");
const siteTitle = docmd.var.get("site.title");
console.log("Título del Sitio:", siteTitle);
console.log("Año de Compilación:", buildYear);
// Modificar una variable reactiva del cliente
docmd.var.set("user.plan", "Enterprise");
console.info("Plan de usuario actualizado a:", docmd.var.get("user.plan"));
return `Año actual: ${buildYear}`;
:::
2. Alternancia de Pestañas Live y Code (tabs)
Al habilitar tabs (o mode="tabs") en los ajustes del contenedor, la barra de herramientas añade pestañas interactivas Live y Code, permitiendo a los lectores alternar fluidamente entre la salida del componente y el código fuente:
::: playground tabs title="Componente Interactivo (Selector Live & Code)" icon:layout live
```html
<div style="padding: 18px; border-radius: 10px; background: #0f172a; color: #38bdf8; font-family: system-ui, sans-serif; border: 1px solid #1e293b;">
<div style="display:flex; align-items:center; gap:8px; margin-bottom:8px;">
<span style="display:inline-block; width:10px; height:10px; border-radius:50%; background:#10b981;"></span>
<strong style="color:#f8fafc; font-size:14px;">Modo de Vista Previa por Pestañas Activo</strong>
</div>
<p style="margin:0 0 12px 0; font-size:13px; color:#94a3b8; line-height:1.5;">
Alterne entre la vista <strong>Live</strong> en vivo y la vista <strong>Code</strong> mediante las pestañas de la barra de herramientas superior.
</p>
<button style="padding:6px 14px; background:#0284c7; color:#fff; border:none; border-radius:6px; font-size:12px; font-weight:600; cursor:pointer;" onclick="console.log('¡Acción activada en vista previa!')">
Activar Registro en Consola
</button>
</div>
```
:::
Ejemplo funcional en vivo con alternancia de pestañas:
::: playground tabs title=“Componente Interactivo (Selector Live & Code)” icon:layout live
<div style="padding: 18px; border-radius: 10px; background: #0f172a; color: #38bdf8; font-family: system-ui, sans-serif; border: 1px solid #1e293b;">
<div style="display:flex; align-items:center; gap:8px; margin-bottom:8px;">
<span style="display:inline-block; width:10px; height:10px; border-radius:50%; background:#10b981;"></span>
<strong style="color:#f8fafc; font-size:14px;">Modo de Vista Previa por Pestañas Activo</strong>
</div>
<p style="margin:0 0 12px 0; font-size:13px; color:#94a3b8; line-height:1.5;">
Alterne entre la vista <strong>Live</strong> en vivo y la vista <strong>Code</strong> mediante las pestañas de la barra de herramientas superior.
</p>
<button style="padding:6px 14px; background:#0284c7; color:#fff; border:none; border-radius:6px; font-size:12px; font-weight:600; cursor:pointer;" onclick="console.log('¡Acción activada en vista previa!')">
Activar Registro en Consola
</button>
</div>
:::
3. Contenedor por Pestañas con Inicio en Código (tabs:code)
Puede configurar el contenedor para mostrar el código de forma predeterminada mientras mantiene el acceso instantáneo a la pestaña en vivo mediante tabs:code o tabs view="code":
::: playground tabs:code title="Contenedor con Pestañas (Código Primero)" icon:code live
```js
// Calcular factorial de forma recursiva
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
const num = 5;
const resultado = factorial(num);
console.log(`Factorial de ${num} es:`, resultado);
return resultado;
```
:::
Demostración funcional en vivo con vista inicial en código:
::: playground tabs:code title=“Contenedor con Pestañas (Código Primero)” icon:code live
// Calcular factorial de forma recursiva
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
const num = 5;
const resultado = factorial(num);
console.log(`Factorial de ${num} es:`, resultado);
return resultado;
:::
4. Contenedor de Autocierre con Archivo Fuente Activo
En lugar de copiar y pegar código en la documentación, puede vincular directamente archivos de script o componentes de su proyecto mediante el atributo src:
::: playground src="./snippets/counter.js" title="Script Vinculado Activo" icon:cpu live /:::
Ejemplo funcional en vivo que carga [./snippets/counter.js](file:///Users/mac/Workspace/GitHub/docmd-io/docs/docmd-main/v09/es/content/containers/snippets/counter.js):
::: playground src=“./snippets/counter.js” title=“Script Vinculado Activo” icon:cpu live /:::
Al utilizar src="./ruta/al/archivo", docmd resuelve el archivo en tiempo de compilación de forma relativa a la página o raíz del espacio de trabajo. Cuando el código fuente del proyecto se actualiza, la documentación se actualiza automáticamente en la siguiente compilación.
5. Tolerancia a Fallos ante Scripts Inexistentes
Si la ruta de un script no es válida o ha sido reubicada, docmd muestra un banner de advertencia claro y presenta código de reserva limpio sin interrumpir la compilación:
::: playground src="./snippets/script-inexistente.js" title="Aviso de Script Faltante" icon:alert-triangle /:::
Demostración en vivo de tolerancia a fallos:
::: playground src=“./snippets/script-inexistente.js” title=“Aviso de Script Faltante” icon:alert-triangle /:::
6. Sintaxis de Bloques Delimitados
Para ejemplos rápidos sin contenedores anidados, agregue playground a cualquier delimitador de código Markdown:
```js playground title="Ejecutor Rápido de Fibonacci" icon:zap
function fib(n) {
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
console.log("Fib(10) =", fib(10));
return fib(10);
```
Ejemplo delimitado en vivo:
function fib(n) {
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
console.log("Fib(10) =", fib(10));
return fib(10);
Atributos del Contenedor
El contenedor ::: playground admite completos atributos de metadatos:
| Atributo | Tipo | Valor Predeterminado | Descripción |
|---|---|---|---|
title |
string |
Derivado o "Playground" |
Título mostrado en la barra de herramientas. Admite title:"Mi Título" o cadenas entre comillas. |
src / file |
string |
Ninguno | Ruta relativa a un archivo de código local para cargar en el editor. |
icon |
string |
"play" |
Nombre de icono Lucide (p. ej. icon:code, icon:cpu, icon:layout). |
live |
boolean |
false |
Ejecuta el código automáticamente cuando la página se carga. |
tabs / mode |
string | boolean |
false |
Habilita pestañas en la cabecera para alternar entre “Live” y “Code”. Admite tabs:code para iniciar en código. |
readonly |
boolean |
false |
Bloquea el editor contra modificaciones permitiendo la ejecución. |
layout |
string |
"split" |
Disposición visual: "split" (lado a lado) o "stacked" (vertical). |
lang |
string |
Derivado ("js") |
Lenguaje explícito (js, html, css). Deducido de extensiones o bloques de código. |
Características Interactivas
Los playgrounds ejecutan JavaScript en un contexto de evaluación aislado. La consola captura:
console.log(...)— Salidas estándar con resaltado de sintaxisconsole.info(...)— Mensajes informativos con indicador azulconsole.warn(...)— Avisos de advertencia con indicador ámbarconsole.error(...)— Registros de error con indicador rojo y seguimiento de pila- Expresiones de Retorno — Cualquier expresión final se muestra como valor devuelto:
=> 30
console.log("¡Hola desde docmd!");
console.info("Carga útil:", { estado: "activo", versión: "0.9.9" });
console.warn("Aviso: advertencia de prueba");
return "Ejecución completada con éxito";
Cuando el lenguaje se establece en html (mediante ```html playground o ::: playground lang:html), el playground selecciona automáticamente el panel de Vista Previa y renderiza el contenido dentro de un marco aislado:
<button style="padding: 10px 20px; background: #6366f1; color: white; border: none; border-radius: 8px; font-weight: 600; cursor: pointer; transition: transform 0.2s;" onmouseover="this.style.transform='scale(1.05)'" onmouseout="this.style.transform='scale(1)'" onclick="alert('¡Componente pulsado!')">
Botón Interactivo
</button>
Los playgrounds tienen acceso total al objeto global window.docmd y a las variables reactivas:
docmd.var.get('docmd.version')— Leer variables de compilación o del clientedocmd.var.set('key', 'value')— Actualizar variables y provocar la reactualización del DOMdocmd.theme.get()/docmd.theme.toggle()— Consultar o alternar el tema visual
console.log("Tema Actual:", window.docmd?.theme?.get() || "light");
console.log("Versión de docmd:", window.docmd?.var?.get("docmd.version") || "0.9.9");
console.log("Rama Git:", window.docmd?.var?.get("docmd.gitBranch") || "main");
return "SDK disponible";
:::
:::
Atajos de Teclado
El editor de playground ofrece atajos de teclado estándar para máxima productividad:
- Cmd + Enter (macOS) o Ctrl + Enter (Windows/Linux): Ejecutar el código actual * Tab: Inserta sangría de 2 espacios sin perder el foco del navegador * Shift + Tab: Elimina la sangría de la línea o selección
Documentación Relacionada del Plugin
Para conocer detalles técnicos avanzados sobre ganchos de análisis AST, resolución de scripts en tiempo de compilación, gestión de fallos y opciones de configuración global, consulte la Referencia y Arquitectura Técnica del Plugin Playground.