Skip to content

JSX-Renderer

OpenPencil verwendet JSX als Sprache zur Designerstellung. LLMs haben Millionen von React-Komponenten gesehen — ein Layout als <Frame><Text> zu beschreiben ist natürlich, kein spezielles Training nötig. Jedes Token zählt, wenn ein KI-Agent Dutzende von Operationen durchführt, und JSX ist die kompakteste deklarative Darstellung.

JSX ist auch diff-fähig. Wenn eine KI ein Design ändert, ist die Änderung ein JSX-Diff — lesbar, überprüfbar, versionierbar.

Designs erstellen

Das render-Werkzeug (verfügbar im KI-Chat, MCP und CLI eval) akzeptiert 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>

Im MCP-Server und KI-Chat akzeptiert das render-Werkzeug JSX-Strings direkt. Im CLI verwendest du den export-Befehl für die umgekehrte Richtung — Designs als JSX exportieren.

Elemente

Alle Knotentypen sind als JSX-Elemente verfügbar:

ElementErstelltAliasse
<Frame>Frame (Container, unterstützt Auto-Layout)<View>
<Rectangle>Rechteck<Rect>
<Ellipse>Ellipse / Kreis
<Text>Textknoten (Kinder werden zum Textinhalt)
<Line>Linie
<Star>Stern
<Polygon>Polygon
<Vector>Vektorpfad
<Group>Gruppe
<Section>Abschnitt

Stil-Props

Kompakte Kurzschreibweisen, inspiriert von Tailwinds Benennung.

Layout

PropBeschreibung
flex"row" oder "col" — aktiviert Auto-Layout
gapAbstand zwischen Kindern
wrapKinder in nächste Zeile umbrechen
rowGapGegenachsen-Abstand beim Umbrechen
justify"start", "end", "center", "between"
items"start", "end", "center", "stretch"
p, px, py, pt, pr, pb, plInnenabstand

Größe & Position

PropBeschreibung
w, hBreite/Höhe — Zahl, "fill" oder "hug"
minW, maxW, minH, maxHGrößenbeschränkungen
x, yPosition

Erscheinungsbild

PropBeschreibung
bgHintergrundfüllung (Hex-Farbe)
fillAlias für bg
strokeKonturfarbe
strokeWidthKonturbreite (Standard: 1)
roundedEckenradius (oder roundedTL, roundedTR, roundedBL, roundedBR)
cornerSmoothingiOS-artig abgerundete Ecken (0–1)
opacity0–1
shadowSchlagschatten (z.B. "0 4 8 #00000040")
blurEbenen-Unschärferadius
rotateRotation in Grad
blendModeMischmodus
overflow"hidden" oder "visible"

Typografie

PropBeschreibung
size / fontSizeSchriftgröße
font / fontFamilySchriftfamilie
weight / fontWeight"bold", "medium", "normal" oder Zahl
colorTextfarbe
textAlign"left", "center", "right", "justified"

Als JSX exportieren

Bestehende Designs zurück in JSX konvertieren:

sh
open-pencil export design.fig -f jsx                   # OpenPencil-Format
open-pencil export design.fig -f jsx --style tailwind  # Tailwind-Klassen

Der Roundtrip funktioniert: Exportiere ein Design als JSX, bearbeite den Code, rendere es zurück.

Visuelles Diffing

Da Designs als JSX darstellbar sind, werden Änderungen zu Code-Diffs:

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>

Das macht Designänderungen in Pull Requests überprüfbar, in der Versionskontrolle nachverfolgbar und in der CI auditierbar.

Released under the MIT License.