Skip to content

Renderer JSX

OpenPencil używa JSX jako języka tworzenia projektów. LLM-y widziały miliony komponentów React — opisanie layoutu jako <Frame><Text> jest naturalne, bez potrzeby specjalnego trenowania. Każdy token ma znaczenie, gdy agent AI wykonuje dziesiątki operacji, a JSX jest najbardziej zwięzłą deklaratywną reprezentacją.

JSX jest również porównywalny w diffach. Gdy AI modyfikuje projekt, zmiana jest diffem JSX — czytelnym, weryfikowalnym, kontrolowalnym wersyjnie.

Tworzenie projektów

Narzędzie render (dostępne w czacie AI, MCP i CLI eval) przyjmuje 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>

W serwerze MCP i czacie AI narzędzie render przyjmuje ciągi JSX bezpośrednio. W CLI użyj polecenia export, aby pójść w drugą stronę — eksportowanie projektów jako JSX.

Elementy

Wszystkie typy węzłów są dostępne jako elementy JSX:

ElementTworzyAliasy
<Frame>Ramka (kontener, obsługuje auto-layout)<View>
<Rectangle>Prostokąt<Rect>
<Ellipse>Elipsa / koło
<Text>Węzeł tekstowy (dzieci stają się treścią tekstu)
<Line>Linia
<Star>Gwiazda
<Polygon>Wielokąt
<Vector>Ścieżka wektorowa
<Group>Grupa
<Section>Sekcja

Właściwości stylów

Zwięzłe skrócone właściwości inspirowane nazewnictwem Tailwind.

Layout

WłaściwośćOpis
flex"row" lub "col" — włącza auto-layout
gapOdstęp między dziećmi
wrapZawijanie dzieci do następnej linii
rowGapOdstęp na osi poprzecznej przy zawijaniu
justify"start", "end", "center", "between"
items"start", "end", "center", "stretch"
p, px, py, pt, pr, pb, plPadding

Rozmiar i pozycja

WłaściwośćOpis
w, hSzerokość/wysokość — liczba, "fill" lub "hug"
minW, maxW, minH, maxHOgraniczenia rozmiaru
x, yPozycja

Wygląd

WłaściwośćOpis
bgWypełnienie tła (kolor hex)
fillAlias dla bg
strokeKolor obrysu
strokeWidthSzerokość obrysu (domyślnie: 1)
roundedZaokrąglenie narożników (lub roundedTL, roundedTR, roundedBL, roundedBR)
cornerSmoothingGładkie narożniki w stylu iOS (0–1)
opacity0–1
shadowCień (np. "0 4 8 #00000040")
blurPromień rozmycia warstwy
rotateObrót w stopniach
blendModeTryb mieszania
overflow"hidden" lub "visible"

Typografia

WłaściwośćOpis
size / fontSizeRozmiar czcionki
font / fontFamilyRodzina czcionki
weight / fontWeight"bold", "medium", "normal" lub liczba
colorKolor tekstu
textAlign"left", "center", "right", "justified"

Eksport do JSX

Konwertuj istniejące projekty z powrotem do JSX:

sh
open-pencil export design.fig -f jsx                   # format OpenPencil
open-pencil export design.fig -f jsx --style tailwind  # klasy Tailwind

Pełen cykl działa: wyeksportuj projekt jako JSX, zmodyfikuj kod, wyrenderuj z powrotem.

Wizualne porównywanie

Ponieważ projekty są reprezentowalne jako JSX, zmiany stają się diffami kodu:

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>

Dzięki temu zmiany projektowe są weryfikowalne w pull requestach, śledzone w systemie kontroli wersji i audytowalne w CI.

Released under the MIT License.