--- 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.