Skip to content

Renderer JSX

OpenPencil usa JSX come linguaggio di creazione dei design. Gli LLM hanno visto milioni di componenti React — descrivere un layout come <Frame><Text> è naturale, nessun addestramento speciale necessario. Ogni token conta quando un agente IA esegue decine di operazioni, e JSX è la rappresentazione dichiarativa più compatta.

JSX è anche confrontabile con diff. Quando un'IA modifica un design, la modifica è un diff JSX — leggibile, revisionabile, versionabile.

Creazione dei Design

Lo strumento render (disponibile nella chat IA, MCP e CLI eval) accetta 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>

Nel server MCP e nella chat IA, lo strumento render accetta direttamente stringhe JSX. Nella CLI, usa il comando export per andare nella direzione opposta — esportare design come JSX.

Elementi

Tutti i tipi di nodo sono disponibili come elementi JSX:

ElementoCreaAlias
<Frame>Frame (contenitore, supporta auto-layout)<View>
<Rectangle>Rettangolo<Rect>
<Ellipse>Ellisse / cerchio
<Text>Nodo di testo (i figli diventano contenuto testuale)
<Line>Linea
<Star>Stella
<Polygon>Poligono
<Vector>Tracciato vettoriale
<Group>Gruppo
<Section>Sezione

Proprietà di Stile

Proprietà abbreviate compatte ispirate alla nomenclatura di Tailwind.

Layout

ProprietàDescrizione
flex"row" o "col" — attiva l'auto-layout
gapSpazio tra i figli
wrapManda a capo i figli alla riga successiva
rowGapSpaziatura sull'asse trasversale durante il wrapping
justify"start", "end", "center", "between"
items"start", "end", "center", "stretch"
p, px, py, pt, pr, pb, plPadding

Dimensione e Posizione

ProprietàDescrizione
w, hLarghezza/altezza — numero, "fill" o "hug"
minW, maxW, minH, maxHVincoli di dimensione
x, yPosizione

Aspetto

ProprietàDescrizione
bgRiempimento di sfondo (colore esadecimale)
fillAlias per bg
strokeColore del bordo
strokeWidthLarghezza del bordo (predefinito: 1)
roundedRaggio degli angoli (o roundedTL, roundedTR, roundedBL, roundedBR)
cornerSmoothingAngoli arrotondati stile iOS (0–1)
opacity0–1
shadowOmbra esterna (es. "0 4 8 #00000040")
blurRaggio sfocatura del livello
rotateRotazione in gradi
blendModeMetodo di fusione
overflow"hidden" o "visible"

Tipografia

ProprietàDescrizione
size / fontSizeDimensione del font
font / fontFamilyFamiglia di font
weight / fontWeight"bold", "medium", "normal" o numero
colorColore del testo
textAlign"left", "center", "right", "justified"

Esportazione in JSX

Converti design esistenti in JSX:

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

Il ciclo completo funziona: esporta un design come JSX, modifica il codice, renderizzalo di nuovo.

Confronto Visuale con Diff

Poiché i design sono rappresentabili come JSX, le modifiche diventano diff del codice:

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>

Questo rende le modifiche ai design revisionabili nelle pull request, tracciabili nel controllo di versione e verificabili nella CI.

Released under the MIT License.