---
title: Renderer JSX
description: Crea design con JSX — la sintassi che gli LLM già conoscono da milioni di componenti React.
---
# Renderer JSX
OpenPencil usa JSX come linguaggio di creazione dei design. Gli LLM hanno visto milioni di componenti React — descrivere un layout come `` è 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
Card Title
Description text
```
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](./cli/exporting).
## Elementi
Tutti i tipi di nodo sono disponibili come elementi JSX:
| Elemento | Crea | Alias |
|----------|------|-------|
| `` | Frame (contenitore, supporta auto-layout) | `` |
| `` | Rettangolo | `` |
| `` | Ellisse / cerchio | |
| `` | Nodo di testo (i figli diventano contenuto testuale) | |
| `` | Linea | |
| `` | Stella | |
| `` | Poligono | |
| `` | Tracciato vettoriale | |
| `` | Gruppo | |
| `` | Sezione | |
## Proprietà di Stile
Proprietà abbreviate compatte ispirate alla nomenclatura di Tailwind.
### Layout
| Proprietà | Descrizione |
|-----------|-------------|
| `flex` | `"row"` o `"col"` — attiva l'auto-layout |
| `gap` | Spazio tra i figli |
| `wrap` | Manda a capo i figli alla riga successiva |
| `rowGap` | Spaziatura sull'asse trasversale durante il wrapping |
| `justify` | `"start"`, `"end"`, `"center"`, `"between"` |
| `items` | `"start"`, `"end"`, `"center"`, `"stretch"` |
| `p`, `px`, `py`, `pt`, `pr`, `pb`, `pl` | Padding |
### Dimensione e Posizione
| Proprietà | Descrizione |
|-----------|-------------|
| `w`, `h` | Larghezza/altezza — numero, `"fill"` o `"hug"` |
| `minW`, `maxW`, `minH`, `maxH` | Vincoli di dimensione |
| `x`, `y` | Posizione |
### Aspetto
| Proprietà | Descrizione |
|-----------|-------------|
| `bg` | Riempimento di sfondo (colore esadecimale) |
| `fill` | Alias per `bg` |
| `stroke` | Colore del bordo |
| `strokeWidth` | Larghezza del bordo (predefinito: 1) |
| `rounded` | Raggio degli angoli (o `roundedTL`, `roundedTR`, `roundedBL`, `roundedBR`) |
| `cornerSmoothing` | Angoli arrotondati stile iOS (0–1) |
| `opacity` | 0–1 |
| `shadow` | Ombra esterna (es. `"0 4 8 #00000040"`) |
| `blur` | Raggio sfocatura del livello |
| `rotate` | Rotazione in gradi |
| `blendMode` | Metodo di fusione |
| `overflow` | `"hidden"` o `"visible"` |
### Tipografia
| Proprietà | Descrizione |
|-----------|-------------|
| `size` / `fontSize` | Dimensione del font |
| `font` / `fontFamily` | Famiglia di font |
| `weight` / `fontWeight` | `"bold"`, `"medium"`, `"normal"` o numero |
| `color` | Colore del testo |
| `textAlign` | `"left"`, `"center"`, `"right"`, `"justified"` |
## Esportazione in JSX
Converti design esistenti in JSX:
```sh
openpencil export design.fig -f jsx # formato OpenPencil
openpencil 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
- Old Title
+ New Title
Description
```
Questo rende le modifiche ai design revisionabili nelle pull request, tracciabili nel controllo di versione e verificabili nella CI.