--- title: JSX-Renderer description: Designs mit JSX erstellen — die Syntax, die LLMs bereits von Millionen von React-Komponenten kennen. --- # JSX-Renderer OpenPencil verwendet JSX als Sprache zur Designerstellung. LLMs haben Millionen von React-Komponenten gesehen — ein Layout als `` 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 Card Title Description text ``` 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](./cli/exporting). ## Elemente Alle Knotentypen sind als JSX-Elemente verfügbar: | Element | Erstellt | Aliasse | |---------|----------|---------| | `` | Frame (Container, unterstützt Auto-Layout) | `` | | `` | Rechteck | `` | | `` | Ellipse / Kreis | | | `` | Textknoten (Kinder werden zum Textinhalt) | | | `` | Linie | | | `` | Stern | | | `` | Polygon | | | `` | Vektorpfad | | | `` | Gruppe | | | `
` | Abschnitt | | ## Stil-Props Kompakte Kurzschreibweisen, inspiriert von Tailwinds Benennung. ### Layout | Prop | Beschreibung | |------|--------------| | `flex` | `"row"` oder `"col"` — aktiviert Auto-Layout | | `gap` | Abstand zwischen Kindern | | `wrap` | Kinder in nächste Zeile umbrechen | | `rowGap` | Gegenachsen-Abstand beim Umbrechen | | `justify` | `"start"`, `"end"`, `"center"`, `"between"` | | `items` | `"start"`, `"end"`, `"center"`, `"stretch"` | | `p`, `px`, `py`, `pt`, `pr`, `pb`, `pl` | Innenabstand | ### Größe & Position | Prop | Beschreibung | |------|--------------| | `w`, `h` | Breite/Höhe — Zahl, `"fill"` oder `"hug"` | | `minW`, `maxW`, `minH`, `maxH` | Größenbeschränkungen | | `x`, `y` | Position | ### Erscheinungsbild | Prop | Beschreibung | |------|--------------| | `bg` | Hintergrundfüllung (Hex-Farbe) | | `fill` | Alias für `bg` | | `stroke` | Konturfarbe | | `strokeWidth` | Konturbreite (Standard: 1) | | `rounded` | Eckenradius (oder `roundedTL`, `roundedTR`, `roundedBL`, `roundedBR`) | | `cornerSmoothing` | iOS-artig abgerundete Ecken (0–1) | | `opacity` | 0–1 | | `shadow` | Schlagschatten (z.B. `"0 4 8 #00000040"`) | | `blur` | Ebenen-Unschärferadius | | `rotate` | Rotation in Grad | | `blendMode` | Mischmodus | | `overflow` | `"hidden"` oder `"visible"` | ### Typografie | Prop | Beschreibung | |------|--------------| | `size` / `fontSize` | Schriftgröße | | `font` / `fontFamily` | Schriftfamilie | | `weight` / `fontWeight` | `"bold"`, `"medium"`, `"normal"` oder Zahl | | `color` | Textfarbe | | `textAlign` | `"left"`, `"center"`, `"right"`, `"justified"` | ## Als JSX exportieren Bestehende Designs zurück in JSX konvertieren: ```sh openpencil export design.fig -f jsx # OpenPencil-Format openpencil 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 - Old Title + New Title Description ``` Das macht Designänderungen in Pull Requests überprüfbar, in der Versionskontrolle nachverfolgbar und in der CI auditierbar.