Skip to content

Renderizador JSX

OpenPencil usa JSX como su lenguaje de creación de diseños. Los LLMs han visto millones de componentes React — describir un layout como <Frame><Text> es natural, sin necesidad de entrenamiento especial. Cada token importa cuando un agente de IA realiza docenas de operaciones, y JSX es la representación declarativa más compacta.

JSX también es diferenciable. Cuando una IA modifica un diseño, el cambio es un diff de JSX — legible, revisable, versionable.

Crear Diseños

La herramienta render (disponible en el chat con IA, MCP y CLI eval) acepta JSX:

jsx
<Frame name="Card" w={320} h="hug" flex="col" gap={16} p={24} bg="#FFF" rounded={16}>
  <Text size={18} weight="bold">Card Title</Text>
  <Text size={14} color="#666">Description text</Text>
</Frame>

En el servidor MCP y el chat con IA, la herramienta render acepta cadenas JSX directamente. En el CLI, usa el comando export para ir en la dirección opuesta — exportar diseños como JSX.

Elementos

Todos los tipos de nodos están disponibles como elementos JSX:

ElementoCreaAlias
<Frame>Frame (contenedor, soporta auto-layout)<View>
<Rectangle>Rectángulo<Rect>
<Ellipse>Elipse / círculo
<Text>Nodo de texto (los hijos se convierten en contenido de texto)
<Line>Línea
<Star>Estrella
<Polygon>Polígono
<Vector>Trazado vectorial
<Group>Grupo
<Section>Sección

Props de Estilo

Props abreviados compactos inspirados en la nomenclatura de Tailwind.

Layout

PropDescripción
flex"row" o "col" — activa auto-layout
gapEspacio entre hijos
wrapAjustar hijos a la siguiente línea
rowGapEspaciado en el eje transversal al ajustar
justify"start", "end", "center", "between"
items"start", "end", "center", "stretch"
p, px, py, pt, pr, pb, plPadding

Tamaño y Posición

PropDescripción
w, hAncho/alto — número, "fill" o "hug"
minW, maxW, minH, maxHRestricciones de tamaño
x, yPosición

Apariencia

PropDescripción
bgRelleno de fondo (color hexadecimal)
fillAlias de bg
strokeColor de borde
strokeWidthAncho del borde (predeterminado: 1)
roundedRadio de esquina (o roundedTL, roundedTR, roundedBL, roundedBR)
cornerSmoothingEsquinas suaves estilo iOS (0–1)
opacity0–1
shadowSombra proyectada (ej. "0 4 8 #00000040")
blurRadio de desenfoque de capa
rotateRotación en grados
blendModeModo de fusión
overflow"hidden" o "visible"

Tipografía

PropDescripción
size / fontSizeTamaño de fuente
font / fontFamilyFamilia tipográfica
weight / fontWeight"bold", "medium", "normal" o número
colorColor del texto
textAlign"left", "center", "right", "justified"

Exportar a JSX

Convierte diseños existentes de vuelta a JSX:

sh
open-pencil export design.fig -f jsx                   # formato OpenPencil
open-pencil export design.fig -f jsx --style tailwind  # clases Tailwind

El viaje de ida y vuelta funciona: exporta un diseño como JSX, modifica el código, renderízalo de nuevo.

Diferencias Visuales

Como los diseños son representables como JSX, los cambios se convierten en diffs de código:

diff
 <Frame name="Card" w={320} flex="col" gap={16} p={24} bg="#FFF">
-  <Text size={18} weight="bold">Old Title</Text>
+  <Text size={24} weight="bold" color="#1D1B20">New Title</Text>
   <Text size={14} color="#666">Description</Text>
 </Frame>

Esto hace que los cambios de diseño sean revisables en pull requests, rastreables en control de versiones y auditables en CI.

Released under the MIT License.