Saltar al contenido principal
Page is under construction.

Check the github issues for ways to contribute! Or provide your feedback in this quick form

Guía de Estilo de Documentación

Esta guía cubre las convenciones de estilo, errores específicos de Mintlify, y mejores prácticas para contribuir a la documentación de Livepeer.

Estilo de Producción para Mintlify

Marco: Propiedades CSS (Variables CSS)

**Mintlify utiliza Propiedades CSS (Variables CSS) como el marco de estilo de producción.**Este es el enfoque oficial y respaldado para el tema en la documentación de Mintlify.

Arquitectura del Tema

La documentación utiliza Propiedades de CSS Personalizadas definidas en style.css en la raíz del repositorio. Esto es la ÚNICAenfoque de producción para el estilo de la documentación Mintlify. NO USAR:
  • ❌ Objetos de tema en JavaScript (ThemeData, themeStyles.jsx) - OBSOLETO
  • ❌ Objetos de estilo en línea con colores predeterminados
  • ❌ Cambio de tema basado en JavaScript
USAR EN SU LUGAR:
  • ✅ Propiedades de CSS personalizadas (--variable-name)
  • ✅ Variables CSS globales en style.css
  • ✅ configuración de tema Mintlify en docs.json

Sistema de colores

Todos los colores del tema se definen como Propiedades de CSS personalizadas en style.css:
VariableModo claroModo oscuroUso
--accent#3CB540 (Verde Jade)#2b9a66 (Jade Oscuro)Resaltados, iconos, enlaces
--accent-dark#18794E#18794EIconos de paso, énfasis
--hero-text#181C18#E0E4E0Títulos, encabezados
--text#717571#A0A4A0Texto principal
--muted-text#9ca3af#6b7280Texto secundario
--background#ffffff#0d0d0dFondo de la página
--card-background#f9fafb#1a1a1aTarjetas, contenedores
--border#e5e7eb#333333Bordes, divisores
--button-text#ffffff#ffffffTexto del botón

Uso de Propiedades CSS Personalizadas

Estilos en línea (Recomendado)

<div style={{ 
  color: "var(--accent)", 
  border: "1px solid var(--border)",
  background: "var(--card-background)"
}}>
  Content
</div>

CSS a nivel de componente

export const MyComponent = () => {
  return (
    <>
      <div className="my-component">
        Content
      </div>
      <style>{`
        .my-component {
          color: var(--text);
          background: var(--card-background);
          border: 1px solid var(--border);
        }
      `}</style>
    </>
  );
};

CSS global en style.css

.my-custom-class {
  color: var(--accent);
  background: var(--card-background);
}

Cómo funciona el cambio de tema

Mintlify agrega automáticamente una.dark clase al<html> elemento cuando el modo oscuro está activo. Las variables de CSS se cambian automáticamente según el tema:
:root {
  --accent: #3CB540; /* Light mode */
}

.dark {
  --accent: #2b9a66; /* Dark mode */
}
No se requiere JavaScript - el cambio de tema se maneja completamente por CSS.

Reglas de color

Casos de usoEnfoque
Colores de la marca (verde)Usar --accento --accent-dark
TítulosUsar --hero-text
Texto principalUsar --text
Texto secundarioUsar --muted-text
FondosUsar --backgroundo --card-background
BordesUsar --border
Colores semánticos (error, advertencia, éxito)Mantener fijo (no tema)
Texto blanco en encabezados verdesMantener fijo como #fff

Enfoques obsoletos

¡NO LOS USE!
  1. Objeto ThemeData - snippets/styles/themeStyles.jsx es OBSOLETO
    // ❌ WRONG - DO NOT USE
    import { ThemeData } from "/snippets/styles/themeStyles.jsx";
    <div style={{ color: ThemeData.light.accent }}>Content</div>
    
  2. Colores predeterminados - Nunca codificar valores hexadecimales que deban adaptarse al tema
    // ❌ WRONG - DO NOT USE
    <div style={{ color: "#3CB540" }}>Content</div>
    
  3. Cambio de tema en JavaScript - No es necesario, CSS lo maneja automáticamente

Qué NO hacer

  • ❌ No importar ni usarThemeData desde themeStyles.jsx
  • ❌ No codifiques colores hexadecimales que deban adaptarse al tema
  • ❌ No uses grises genéricos sin verificar la compatibilidad con el tema
  • ❌ No hagas colores semánticos (calificaciones de confianza, estados de error) dependientes del tema
  • ❌ No sobrescribas el texto blanco en fondos intencionalmente coloreados
  • ❌ No crees objetos de tema personalizados en JavaScript

Arquitectura del marco de estilo

La documentación de Livepeer utiliza unmarco de estilo de tres capas diseñado para funcionar dentro de las restricciones de Mintlify mientras se mantiene la consistencia y la mantenibilidad.

Capas del marco

Capa 1: CSS global (style.css)

Propósito: Variables de tema y anulaciones a nivel de framework ¿Qué pertenece aquí:
  • ✅ Propiedades CSS personalizadas (variables de tema)
  • ✅ Mintlify anulaciones de componentes (navegación, pie de página, etc.)
  • ✅ Clases del contenedor del modo Frame
  • ✅ Clases utilitarias para patrones utilizados 5 o más veces en las páginas
¿Qué NO pertenece aquí?
  • ❌ Estilos específicos de página
  • ❌ Estilos específicos de componente (pertenecen en JSX)
  • ❌ Necesidades de diseño únicos
Estructura:
/* ============================================
   THEME VARIABLES (CSS Custom Properties)
   ============================================ */
:root { /* Light mode */ }
.dark { /* Dark mode */ }

/* ============================================
   FRAMEWORK OVERRIDES (Mintlify-specific)
   ============================================ */
/* Navigation, footer, frame mode containers */

/* ============================================
   UTILITY CLASSES (Reusable patterns)
   ============================================ */
/* Only for patterns used 5+ times across pages */

Capa 2: Componentes JSX (snippets/components/**/*.jsx)

Propósito: Componentes autónomos con estilo interno Reglas:
  • ✅ Usar propiedades CSS personalizadas (var(--accent), var(--text), etc.)
  • ✅ Los estilos deben estar dentro del archivo del componente
  • ✅ Usar <style> etiquetas para estilos complejos (pseudoclases, consultas de medios)
  • ✅ Usar objetos de estilo en línea para estilos simples
  • ❌ Importar archivos CSS externos
  • ❌ Codificar colores de tema (usar variables CSS)
  • ❌ Usar “className sin la etiqueta correspondiente “<style>
Patrón A: Objetos de estilo en línea (componentes simples)
export const MyComponent = () => {
  return (
    <div style={{
      color: "var(--text)",
      backgroundColor: "var(--card-background)",
      border: "1px solid var(--border)",
      padding: "1rem"
    }}>
      Content
    </div>
  );
};
Patrón B: Etiqueta de estilo (componentes complejos)
export const MyComponent = () => {
  return (
    <>
      <div className="my-component">
        Content
      </div>
      <style>{`
        .my-component {
          color: var(--text);
          background: var(--card-background);
        }
        .my-component:hover {
          border-color: var(--accent);
        }
      `}</style>
    </>
  );
};
Patrón C: Constantes de estilo (reutilizables dentro del componente)
export const MyComponent = ({ variant = "default" }) => {
  const baseStyle = {
    color: "var(--text)",
    padding: "1rem"
  };
  
  const variantStyles = {
    default: { border: "1px solid var(--border)" },
    accent: { border: "1px solid var(--accent)" }
  };
  
  return (
    <div style={{ ...baseStyle, ...variantStyles[variant] }}>
      Content
    </div>
  );
};

Capa 3: Archivos MDX (v2/pages/**/*.mdx)

Propósito: Contenido solo - Estilos en línea cero Reglas:
  • ✅ Usar primitivas de componentes para todas las necesidades de estilo
  • ✅ Usar componentes globales Mintlify (Card, Tabs, Steps, etc.)
  • ✅ Importar componentes personalizados desde /snippets/components/
  • NO atributos en línea style={{}} atributos
  • NO colores predefinidos
  • NO personalizados className atributos
Antes (❌ ERRÓNEO):
<div style={{ display: "flex", gap: "1rem" }}>
  <Card>Content 1</Card>
  <Card>Content 2</Card>
</div>
Después (✅ CORRECTO):
import { FlexContainer } from '/snippets/components/primitives/layout.jsx';

<FlexContainer gap="1rem">
  <Card>Content 1</Card>
  <Card>Content 2</Card>
</FlexContainer>

Árbol de decisiones: ¿A qué lugar va este estilo?

  1. ¿Es un color de tema? → Añadir a style.css como Propiedad de CSS Personalizada
  2. ¿Se utiliza en un componente? → Colocar en un archivo de componente JSX (en línea o “<style>tag”)
  3. ¿Es necesario en MDX? → Crear/usar una primitive de componente
  4. ¿Se utiliza 5 o más veces globalmente? → Añadir clase de utilidad a style.css
  5. ¿Es específico de la página? → Cree un primitivo de componente (no lo coloque en “style.css)

Biblioteca de Primitivos de Componentes

Para necesidades comunes de estilo en archivos MDX, use primitivos de componente de /snippets/components/primitives/:
  • Diseño: FlexContainer, GridContainer, Spacer
  • Tablas: StyledTable, TableRow, TableCell
  • Contenedores: BorderedBox, CenteredContainer, FullWidthContainer
Ver la Biblioteca de Componentes para obtener una referencia completa.

Tipografía

Títulos

Use encabezados estándar de Markdown (#, ##, ###, etc.) para la mayor parte del contenido. Mintlify aplica automáticamente este estilo. Para páginas en modo de marco, use componentes de encabezado personalizados:
import { H1, H2, PageHeader } from "/snippets/components/display/frameMode.jsx";

<PageHeader>Main Title</PageHeader>
<H1>Section Title</H1>
<H2>Subsection Title</H2>
**Nota:**Los componentes en modo de marco utilizan propiedades CSS personalizadas internamente, por lo tanto, no es necesario importar ThemeData.

Estilo del texto

  • Usar negrita (**text**) para énfasis
  • Usa cursiva (*text*) con moderación
  • Usa code (backticks) para código en línea
  • Usar bloques de código para código de múltiples líneas

Expresiones matemáticas

Mintlify admite LaTeX para renderizar expresiones matemáticas. Usar la sintaxis adecuada para asegurar que las ecuaciones se rendericen correctamente.

Matemáticas en línea

Usar signos de dolar únicos $...$ para expresiones matemáticas en línea dentro del texto:
The voting power is calculated as $V_i = \frac{B_i}{B_T}$ where $B_i$ is bonded stake.
Resultado: La potencia de votación se calcula como Vi=BiBTV_i = \frac{B_i}{B_T} donde BiB_i es el stake vinculado.

Ecuaciones de bloque

Usa signos de dólar dobles $$...$$ para ecuaciones independientes en su propia línea:
$$
R_t = S_t \cdot r_t
$$
Resultado: Rt=StrtR_t = S_t \cdot r_t

Sintaxis común de LaTeX

ExpresiónSintaxisResultado
Fracciones$\frac{a}{b}$ab\frac{a}{b}
Subíndices$B_i$BiB_i
Superíndices$x^2$x2x^2
Letras griegas$\alpha, \beta, \theta$α,β,θ\alpha, \beta, \theta
Suma$\sum_{i=1}^{n} x_i$i=1nxi\sum_{i=1}^{n} x_i
Raíz cuadrada$\sqrt{x}$x\sqrt{x}
Proporcional$\propto$\propto
Mayor/menor o igual que$\geq, \leq$,\geq, \leq

Crítico: No usar delimitadores de barra invertida

ERRÓNEO - Estos causarán errores de MDX:
{/* ❌ WRONG - backslash delimiters break MDX */}
\(B_i\) for inline math
\[R_t = S_t \cdot r_t\] for block math
CORRECTO - Usar delimitadores de signo de dólar:
{/* ✅ CORRECT - dollar sign delimiters */}
$B_i$ for inline math
$$R_t = S_t \cdot r_t$$ for block math

Configuración de LaTeX

Puedes configurar la representación de LaTeX en docs.json bajo styles.latex para sobrescribir la detección automática si es necesario. Consulta Mintlify documentación de LaTeX para más detalles.

Espaciado y disposición

Espaciado consistente

  • Utilice un espaciado consistente entre las secciones
  • Agrupe el contenido relacionado
  • Utilice divisores (<CustomDivider />) para separar las secciones principales

Diseño de página

  • Portales - Usar CardGroups para puntos de entrada clave
  • Guías - Usar Pasos para instrucciones secuenciales
  • Referencias - Usar Tablas o Acordeones para datos organizados
  • Guías rápidas - Usar Pestañas para diferentes caminos (Sistema Operativo, en cadena/ fuera de cadena)

Uso de componentes

Cuándo usar componentes

  • Pestañas - Separar el contenido por contexto (sistema operativo, tipo de flujo de trabajo, tipo de usuario)
  • Vistas - Mostrar contenido diferente según el sistema operativo o la ruta del usuario
  • Pasos - Instrucciones secuenciales para procesos
  • Grupos de tarjetas - Agrupaciones visuales para portales, hubs y contenido relacionado
  • Acordeones - Secciones expandibles para información detallada
  • Llamados - Notas importantes, consejos, advertencias y cajas de información

Tipos de llamado

  • <Info> - Información general y consejos
  • <Tip> - Sugerencias útiles
  • <Warning> - Advertencias importantes
  • <Danger> - Alertas críticas
  • <Note> - Contexto adicional

Preferir Componentes Personalizados para Enlaces y Navegación

Preferencia: Usa componentes personalizados para enlaces, tarjetas, citas y otros elementos visualmente atractivos en lugar de enlaces simples Mintlify. ¿Por qué: Los componentes personalizados ofrecen un mejor diseño visual, una temática consistente, una mejor experiencia de usuario y una mejor integración con el sistema de diseño de documentación Livepeer. Componentes personalizados a utilizar:
  • Enlaces: Usa “<GotoLink> y “<GotoCard> en lugar de enlaces de markdown sin formato o Mintlify <Card> con “href
  • Citas: Usa “<Quote> y <FrameQuote> en lugar de bloques de cita
  • Tarjetas: Usa <GotoCard> para tarjetas de navegación con un mejor estilo
  • Llamados: Usa “<CustomCallout>y “<TipWithArrow>para llamadas visuales mejoradas
  • Enlaces externos: Usa “<DoubleIconLink>para enlaces externos (GitHub, etc.)
Ejemplos:
{/* ❌ Plain markdown link */}
[Getting Started](/get-started)

{/* ✅ Custom component with better styling */}
import { GotoLink } from '/snippets/components/primitives/links.jsx';
<GotoLink label="Getting Started" relativePath="/get-started" icon="arrow-right" />
{/* ❌ Plain blockquote */}
> This is a quote

{/* ✅ Custom quote component with attribution */}
import { FrameQuote } from '/snippets/components/display/quote.jsx';
<FrameQuote author="John Doe" source="Livepeer Blog" href="https://livepeer.org/blog">
  This is a quote with better visual design.
</FrameQuote>
{/* ❌ Basic Mintlify Card with href */}
<Card title="API Reference" href="/api/reference">
  API documentation
</Card>

{/* ✅ Custom GotoCard with enhanced styling */}
import { GotoCard } from '/snippets/components/primitives/links.jsx';
<GotoCard
  label="API Reference"
  relativePath="/api/reference"
  icon="book"
  text="Complete API documentation with examples"
  cta="View Docs"
/>
Cuándo usar enlaces simples:
  • Enlaces integrados dentro de párrafos (los enlaces de markdown están bien)
  • Enlaces en ejemplos de código o referencias técnicas
  • Enlaces que no necesitan énfasis visual
Vea el Biblioteca de componentes para todos los componentes personalizados disponibles.

Mintlify Sobrescrituras y mejores prácticas

Nuestro marco de estilo sobrescribe intencionalmente algunas recomendaciones predeterminadas de Mintlify para funcionar mejor dentro de las restricciones de Mintlify y mantener la consistencia.

Sobrescritura: “Usar clases de Tailwind”

Mintlify sugiere: Use Tailwind utility classes
Nuestra aproximación: ❌ No uses Tailwind - usa primitivas de componentes
Razón: Las clases de Tailwind en MDX generan una carga de mantenimiento y reducen el significado semántico. Las primitivas de componentes son más fáciles de mantener y autoexplicativas.
Ejemplo:
{/* ❌ Don't use Tailwind */}
<div className="flex gap-4 items-center">
  <Card>Content</Card>
</div>

{/* ✅ Use component primitives */}
<FlexContainer gap="1rem" align="center">
  <Card>Content</Card>
</FlexContainer>

Sustituir: “Los estilos en línea son adecuados para soluciones rápidas”

Mintlify sugiere: Los estilos en línea son aceptables en MDX
Nuestro enfoque: ❌ No se permiten estilos en línea en MDX, solo en componentes de JSX
Razón: Consistencia y mantenibilidad. Los estilos en línea en MDX hacen más difícil mantener la consistencia del tema y crear inconsistencias visuales.
Ejemplo:
{/* ❌ Don't use inline styles in MDX */}
<div style={{ display: "flex", gap: "1rem" }}>
  <Card>Content</Card>
</div>

{/* ✅ Use component primitives */}
<FlexContainer gap="1rem">
  <Card>Content</Card>
</FlexContainer>

Sobrescribir: “Usar CSS global para todo”

Mintlify sugiere: Colocar todos los estilos en “style.css
Nuestro enfoque: ✅ Solo variables de tema y reemplazos del framework en “style.css
Razón: Mintlify solo permite un archivo CSS global. Poner todo allí hace que sea difícil de mantener. Los estilos específicos de los componentes deben ir en los componentes JSX.
¿Qué va en “style.css
  • ✅ Variables de tema (Propiedades CSS personalizadas)
  • ✅ Mintlify componente de anulación (navegación, pie de página)
  • ✅ Clases del modo de marco
  • ✅ Clases de utilidad utilizadas 5 o más veces globalmente
¿Qué NO va en style.css:
  • ❌ Estilos específicos del componente (colocar en JSX)
  • ❌ Estilos específicos de página (crear primitivas de componentes)
  • ❌ Necesidades de estilo únicos (crear primitivas de componentes)

Sobrescribir: “Los estilos de los componentes pueden ser externos”

Mintlify sugiere: Archivos CSS externos para componentes
Nuestro enfoque: ❌ Los estilos deben estar dentro de los archivos de componentes JSX
Razón: Mintlify no admite importaciones de CSS en componentes de manera confiable. Los estilos en línea y las etiquetas<style> dentro de los componentes funcionan de manera consistente.
Patrón:
{/* ✅ Styles within component */}
export const MyComponent = () => {
  return (
    <>
      <div className="my-component">Content</div>
      <style>{`
        .my-component {
          color: var(--text);
        }
      `}</style>
    </>
  );
};

Mintlify Advertencias y limitaciones

Limitaciones Críticas

1. Las rutas de importación deben ser absolutas

// ✅ Correct - absolute path from repo root
import { MyComponent } from '/snippets/components/MyComponent.jsx';

// ❌ Wrong - relative paths don't work
import { MyComponent } from '../components/MyComponent.jsx';

2. Se requieren extensiones de archivo

// ✅ Include extension
import { Component } from '/snippets/Component.jsx';

// ❌ May not resolve
import { Component } from '/snippets/Component';

3. No se puede importar en archivos de componentes

No puedes importar datos u otros componentes en un archivo de componente JSX:
// ❌ WRONG - This will fail
// snippets/components/MyComponent.jsx
import { themeColor } from '/snippets/styles/themeStyles.jsx';

export const MyComponent = () => {
  return <div style={{ color: themeColor.light.accent }}>Hello</div>;
};
Solución: Importa en el archivo MDX que utiliza el componente:
// ✅ CORRECT
// MyPage.mdx
import { MyComponent } from '/snippets/components/MyComponent.jsx';
import { ThemeData } from '/snippets/styles/themeStyles.jsx';

<MyComponent />
// MyComponent can access ThemeData from parent scope

4. Los archivos JSX no pueden importar otros archivos JSX

Mintlify no permite que los archivos JSX importen otros archivos JSX. Por eso usamos patrones MDX-in-MDX en su lugar.

5. Herencia del ámbito de MDX

Al importar archivos MDX en otros archivos MDX:
  • El MDX secundario hereda el ámbito del padre para las propiedades - Los imports del padre funcionan cuando se usan como props de componente
  • ❌ ** - El MDX hijo NO puede heredar el alcance del padre para la interpolación directa de JSX** - Las variables usadas como {variable} pueden necesitar un nuevo import
  • El hijo puede importar sus propias variables - Si el hijo necesita algo que el padre no importa
Ejemplo:
// Parent.mdx
import { DOCKER_CODE } from '/snippets/data/gateways/code.jsx'
import ChildView from '/snippets/pages/ChildView.mdx'

<ChildView />
// ChildView.mdx
{/* Can use DOCKER_CODE as props */}
<CustomCodeBlock {...DOCKER_CODE.install} />  {/* ✅ Works */}

{/* But direct interpolation may need re-import */}
<Badge>{latestVersion}</Badge>  {/* ❌ May need import */}

6. Los hooks de React son globales

Mintlify proporciona hooks de React de forma global, no se necesitan importaciones:
// ✅ Works - hooks available without import
export function MyComponent() {
  const [count, setCount] = useState(0);
  useEffect(() => { /* ... */ }, []);
  return <div>{count}</div>;
}

// ❌ Not needed - will cause errors
import React, { useState, useEffect } from 'react';

7. Comportamiento del componente de icono

CRITICAL: Mintlify’s <Icon> componente representa iconos personalizados como <img alt="Image"> elementos, NO SVG incrustado.
// ❌ This will NOT work - color styling has no effect
<span style={{ color: "#3CB540" }}>
  <Icon icon="/path/to/icon.svg" size={20} />
</span>
Solución: Use archivos SVG conscientes del tema con CSS interno, o use archivos diferentes para cada tema.

8. Mintlify Componentes globales

Estos componentes están disponibles globalmente - no los importes:
  • React, Frame, Card, Icon, Steps, Step, Tabs, Tab
  • Note, Warning, Info, Tip, Danger
  • Accordion, Columns, CardGroup, CodeBlock, Expandable, Badge, Tooltip
// ✅ Correct - use directly
<Card title="Title">Content</Card>
<Tabs>
  <Tab title="Tab 1">Content</Tab>
</Tabs>

// ❌ Wrong - don't import
import { Card, Tabs } from "@mintlify/components";
CRITICAL: Mintlify componentes globales no se pueden almacenar en variables - deben usarse directamente como JSX:
// ❌ WRONG - Will cause "ReferenceError: Expandable is not defined"
const componentMap = {
  expandable: Expandable,
  accordion: Accordion
};
const Component = componentMap[component];

// ✅ CORRECT - Use conditional rendering with direct JSX
if (component === "expandable") {
  return <Expandable {...props}>{content}</Expandable>;
}
return <Accordion {...props}>{content}</Accordion>;

9. Los comentarios de JSX no impiden el análisis de MDX

CRÍTICO: Los comentarios de JSX ({/* */}) en archivos MDX no NOprevenir que MDX analice el contenido dentro de ellos. MDX aún intentará evaluar componentes JSX y expresiones dentro de los comentarios.
{/* ❌ WRONG - MDX will still try to parse CustomCodeBlock */}
{/* 
<CustomCodeBlock codeString="test" />
*/}

{/* ✅ CORRECT - Remove the entire section, don't comment it */}
{/* Code components temporarily unavailable - see component-bugs.md */}
Si necesitas deshabilitar temporalmente una sección de un componente:
  1. Elimina toda la sección del archivo MDX
  2. Añade un comentario explicando por qué fue eliminada
  3. **Documento en docs/PLAN/errors/component-bugs.md**si es un error de componente
  4. No uses comentarios JSXpara “comentar” el uso de componentes

9. Limitaciones del modo Frame

Modo Frame (mode: frame en el frontmatter) elimina todo el estilo predeterminado de Mintlify. Al usar el modo frame:
  • Las encabezados de markdown predeterminados pueden no renderizarse correctamente
  • Use componentes de encabezado personalizados de frameMode.jsx
  • Todo el estilo debe ser personalizado
  • Los componentes Mintlify aún funcionan pero pierden los estilos predeterminados
  • Mantenga las primitivas de diseño responsivo en style.css (.frame-mode-container, .frame-mode-hero-full, paginación de marco)
  • Mantenga la estructura específica de portal/página en componentes JSX compartidos (por ejemplo /snippets/components/domain/SHARED/Portals.jsx)
  • No use constantes de ruptura fijas directamente en los estilos de los componentes (por ejemplo, valores hardcodeados 96px, 20px, o fijas % anchuras)
  • Preferir variables de CSS + puntos de interrupción para el diseño en modo marco, y propiedades personalizadas de CSS (var(--...)) para la temática

Importar patrones

Patrón Correcto: Importar en MDX, Usar en Componente

// ✅ MyPage.mdx
import { MyComponent } from '/snippets/components/MyComponent.jsx';
import { DOCKER_CODE } from '/snippets/data/gateways/code.jsx';

<MyComponent />
// ✅ MyComponent.jsx - uses CSS Custom Properties (production-grade)
export const MyComponent = () => {
  return (
    <div style={{ color: "var(--accent)" }}>
      <CustomCodeBlock {...DOCKER_CODE.install} />
    </div>
  );
};

Flujo de Trabajo de Git

Gestión de Ramas

SIEMPRE crear una nueva rama desde docs-v2:
git checkout docs-v2
git pull
git checkout -b docs-plan/XX-task-name
Nunca trabajar directamente en:
  • docs-v2 (rama de documentación activa)
  • main o master
  • Cualquier rama que otro agente esté usando
Nombre de rama: Usa el patrón docs-plan/XX-task-name donde XX es el número de la tarea.

Prácticas recomendadas

Organización del código

  1. Mantenga los componentes en /snippets/components/ organizados por propósito:
    • primitives/ - Elementos de interfaz de usuario básicos
    • layout/ - Componentes de diseño
    • display/ - Medios e incrustaciones
    • content/ - Visualización de contenido
    • integrations/ - Servicios externos
    • domain/ - Componentes específicos de dominio
  2. Mantén los datos en /snippets/data/ para cadenas de código y variables reutilizables
  3. Usar /snippets/pages/ para contenido MDX modular que se importa en las páginas principales

Estilo de escritura

  1. Sé claro y conciso - Escribir para usuarios con diferentes niveles de conocimiento técnico
  2. Usar ejemplos - Incluir ejemplos de código y escenarios del mundo real
  3. Proporcionar contexto - Explicar por qué, no solo cómo
  4. Vínculo al contenido relacionado - Ayudar a los usuarios a descubrir información relacionada
  5. Probar ambos temas - Verificar que el contenido se ve bien en los modos claro y oscuro

Directrices del componente

  1. Usar Solo Propiedades Personalizadas de CSS - Nunca usar ThemeData o colores codificados
  2. Referir variables de style.css - Todos los colores del tema están en style.css como variables CSS
  3. Componentes de prueba - Asegúrate de que los componentes se rendericen correctamente
  4. Manejar hijos correctamente - Siempre manejar los hijos como matrices al mapear
  5. Documentar Props - Incluir comentarios JSDoc para las propiedades de los componentes
  6. Proporcionar ejemplos - Añadir ejemplos en la carpetaexamples/ para cada componente

Inmutabilidad de los componentes

REGLA CRÍTICA: Los componentes ensnippets/components/son INMUTABLES NUNCA modifiques archivos en snippets/components/ - Estos componentes se utilizan en muchas páginas. Cualquier cambio podría romper la funcionalidad existente. Permitido:
  • Crear nuevos componentes
  • Modificar archivos MDX que usen componentes
  • Corrigiendo importaciones y uso de MDX
Prohibido:
  • Modificar archivos de componentes existentes
  • Cambiar las firmas de funciones de componentes
  • Añadir o eliminar exportaciones de componentes
  • Cambiar la lógica del componente
Excepción: Solo si se solicita explícitamente por el usuario Y después de confirmar la evaluación de impacto. Si un componente parece tener un error:
  1. Comentar la sección del componente en el archivo MDX donde se utiliza
  2. Verificar que la página se renderice sin esa sección
  3. Si la página se renderiza correctamente → El componente es el problema
  4. Documenta el error en docs/PLAN/errors/component-bugs.md con:
    • Nombre del componente y ruta del archivo
    • Mensaje de error desde la consola
    • Página donde ocurre el error
    • Verificación de que comentar el código lo soluciona
    • Recomendación para arreglar el componente (pero no lo implementes)
NO arregles el componente - Los componentes son inmutables sin permiso explícito del usuario.

Nombres de archivos

  • Use kebab-case para los nombres de archivos: my-component.mdx
  • Use PascalCase para los nombres de componentes: MyComponent
  • Use nombres descriptivos que indiquen su propósito

Lista de verificación de pruebas

Antes de enviar la documentación:
  • El contenido se muestra correctamente en modo oscuro (predeterminado)
  • El contenido se muestra correctamente en modo claro
  • Todos los enlaces funcionan y apuntan a las páginas correctas
  • Los ejemplos de código son precisos y probados
  • Las imágenes se cargan y tienen texto alternativo adecuado
  • Los componentes usan colores adaptados al tema
  • No hay colores fijos que deban adaptarse al tema
  • Los componentes se representan correctamente
  • No hay errores en la consola de herramientas de desarrollo del navegador
  • Errores de sintaxis de MDX revisados y corregidos
  • Todas las páginas verificadas en navegador sin interfaz (ver Requisitos de Verificación a continuación)

Requisitos de verificación

Comprobación de sintaxis MDX

Antes de declarar el trabajo como completo, verifique los archivos MDX:
  1. Use herramientas de linting para verificar todos los archivos MDX modificados
  2. Compruebe lo siguiente:
    • Etiquetas JSX no cerradas
    • Sintaxis de importación no válida
    • Faltan metadatos
    • Errores de sintaxis
  3. Corrija cualquier error de MDX antes de considerar el trabajo completo

Verificación con navegador headless

Antes de declarar que el trabajo está completo, verifique cada página en un navegador headless:
  1. Use Puppeteer o una herramienta similar para cargar cada página
  2. Esperar a que la red esté inactiva
  3. Comprobar errores de consola (filtrando los artefactos del script de prueba)
  4. Verificar que la longitud del contenido sea mayor a 500 caracteres
  5. Verificar que exista un elemento H1
  6. Comprobar errores 404
Filtrar falsos positivos:
  • Ignorar “require no está definido” de los scripts de prueba
  • Ignorar errores relacionados con “puppeteer”
  • Ignorar errores de “fs ya ha sido declarado”
  • Enfocarse en errores reales de componentes
El informe debe mostrar:
  • URL de la página
  • Longitud del contenido
  • Texto H1
  • Lista de errores reales de la consola (si los hay)
  • Estado: ✅ OK o ❌ ERRORES

Verificación de la estructura de la URL

Mintlify páginas usan la estructura de ruta completa:
  • Ruta de la página en docs.json: v2/resources/documentation-guide/component-library/primitives
  • URL: /v2/resources/documentation-guide/component-library/primitives
No asuma patrones de URL - verifique probando URLs reales.

Mintlify Configuración del tema

Mintlify también admite la configuración de temas en docs.json:
{
  "theme": "palm",
  "colors": {
    "primary": "#3CB540",
    "light": "#2b9a66",
    "dark": "#3CB540"
  }
}
Esto controla los componentes integrados de Mintlify (botones, enlaces, etc.). Para estilo personalizado, siempre use Propiedades CSS en style.css.

Ganchos de Pre-Commit

Este repositorio utiliza ganchos de pre-commit de Git para aplicar automáticamente las reglas de la guía de estilo.Estos hooks son obligatorios y bloquearán los commits que violen la guía de estilo.

Lo que se comprueba

Los hooks de pre-commit verifican automáticamente lo siguiente:
  • ObsoletoThemeData Uso - Bloquea las importaciones deThemeData desde snippets/styles/themeStyles.jsx
  • Colores de tema predeterminados - Advierte sobre códigos hexadecimales directos que deben usar Propiedades CSS Personalizadas
  • Importaciones de fragmentos relativos - Marca las importaciones desde snippets/ que usan rutas relativas en lugar de rutas absolutas
  • Importaciones innecesarias - Advierte sobre las importaciones explícitas para los componentes y ganchos de React disponibles globalmente de Mintlify
  • Validación de sintaxis - Verifica la sintaxis de MDX, JSON, Shell y JavaScript
  • Validación del navegador - Prueba que las páginas de MDX se rendericen correctamente en un navegador sin cabeza (simint devestá en ejecución)

Instalación

OBLIGATORIO: Debes instalar los hooks antes de realizar cualquier commit:
./.githooks/install.sh

¿Qué ocurre en caso de incumplimiento

Si intentas hacer un commit con código que viole la guía de estilo:
  1. El commit es bloqueado
  2. Recibes un mensaje de error detallado que enumera todas las violaciones
  3. Debes corregir las violaciones antes de volver a hacer el commit

Ediciones protegidas.allowlist (Solo humano)

El archivo .allowlistestá protegido por comprobaciones de pre-commit. Si un humano necesita intencionalmente editar .allowlist, usar:
git commit -m "Update .allowlist" --trailer "allowlist-edit=true"
Este reemplazo aún ejecuta todas las demás comprobaciones de pre-commit. Si un humano necesita intencionalmente permitir eliminaciones de archivos, usar:
git commit -m "Remove obsolete files" --trailer "allow-deletions=true"
Esta anulación de eliminación también ejecuta todas las otras comprobaciones pre-commit.

Salida de error de ejemplo

╔═══════════════════════════════════════════════════════════════╗
║  STYLE GUIDE VIOLATIONS DETECTED - COMMIT BLOCKED           ║
╚═══════════════════════════════════════════════════════════════╝

Found 2 violation(s):

❌ my-component.jsx: Uses deprecated ThemeData - use CSS Custom Properties instead
⚠️  my-page.mdx: Contains hardcoded theme colors - use CSS Custom Properties (var(--accent), etc.)

📖 MANDATORY: Read the Style Guide before committing:
   v2/resources/documentation-guide/style-guide.mdx

Validación del navegador

Los hooks incluyen validación del navegador sin cabeza que prueba que los archivos MDX se representan realmente en el navegador. Esto captura:
  • Errores en tiempo de ejecución en componentes
  • Importaciones fallidas
  • Errores de consola
  • Fallos de representación
Nota: La validación del navegador requieremint dev para estar en ejecución. Si no está en ejecución, se omite la comprobación (no bloquea el commit).

Suite de pruebas completa

El repositorio incluye un conjunto completo de pruebas que validan todas las reglas de la guía de estilo y más:

Ejecutar pruebas

# Run all tests
npm test

# Run specific test suites
npm run test:style      # Style guide validation
npm run test:mdx        # MDX syntax validation
npm run test:spell      # UK English spelling
npm run test:quality    # Quality checks (alt text, links, frontmatter)
npm run test:browser    # Browser rendering tests

¿Qué se prueba?

Pruebas de la guía de estilo (test:style):
  • Uso de propiedades CSS personalizadas (sin ThemeData, sin colores codificados)
  • Sin estilos en línea en archivos MDX
  • Sin clases de Tailwind
  • Rutas de importación absolutas
  • Convenciones de nombres de archivos
  • Advertencias sobre inmutabilidad de componentes
Validación de MDX (test:mdx)
  • Validación de frontmatter
  • Etiquetas JSX no cerradas
  • Sintaxis de importación no válida
  • Problemas de herencia del ámbito MDX
Pruebas de ortografía (test:spell):
  • Validación de ortografía en inglés británico
  • Diccionario personalizado para términos técnicos (Livepeer, Arbitrum, etc.)
  • Excluye bloques de código y frontmatter
Verificaciones de calidad (test:quality):
  • Presencia de texto alternativo de imagen
  • Completitud del frontmatter
  • Validación de enlaces internos
  • Validación de metadatos SEO
Pruebas en el navegador (test:browser):
  • Renderizado de la página en navegador sin interfaz
  • Detección de errores de consola
  • Pruebas de tema (claro/oscuro)
  • Validación de contenido (H1, longitud del contenido)
El conjunto de pruebas se ejecuta automáticamente en los hooks de pre-commit (modo estacionado/rápido) y en CI/CD. En la CI de solicitud de extracción, las comprobaciones estáticas son específicas del archivo modificado para bloquear, mientras que los barridos del navegador mantienen la cobertura de toda la ruta. Para más detalles sobre los hooks, consulte el Documentación de Git Hooks.

Recursos

Siguientes pasos

Last modified on March 1, 2026