---
title: JSX-рендерер
description: Создавайте дизайн с помощью JSX — синтаксиса, который LLM уже знают из миллионов React-компонентов.
---
# JSX-рендерер
OpenPencil использует JSX как язык создания дизайна. LLM видели миллионы React-компонентов — описание макета через `` естественно и не требует специального обучения. Каждый токен важен, когда ИИ-агент выполняет десятки операций, а JSX — это самое компактное декларативное представление.
JSX также поддаётся сравнению. Когда ИИ изменяет дизайн, изменение представлено как JSX-дифф — читаемый, проверяемый, пригодный для контроля версий.
## Создание дизайна
Инструмент `render` (доступен в ИИ-чате, MCP и CLI eval) принимает JSX:
```jsx
Card Title
Description text
```
В MCP-сервере и ИИ-чате инструмент `render` принимает JSX-строки напрямую. В CLI используйте команду `export` для обратного направления — [экспорт дизайна в JSX](./cli/exporting).
## Элементы
Все типы узлов доступны как JSX-элементы:
| Элемент | Создаёт | Псевдонимы |
|---------|---------|------------|
| `` | Фрейм (контейнер, поддерживает автолейаут) | `` |
| `` | Прямоугольник | `` |
| `` | Эллипс / круг | |
| `` | Текстовый узел (дочерние элементы становятся текстовым содержимым) | |
| `` | Линия | |
| `` | Звезда | |
| `` | Многоугольник | |
| `` | Векторный контур | |
| `` | Группа | |
| `` | Секция | |
## Свойства стиля
Компактные сокращённые свойства, вдохновлённые именованием Tailwind.
### Лейаут
| Свойство | Описание |
|----------|----------|
| `flex` | `"row"` или `"col"` — включает автолейаут |
| `gap` | Расстояние между дочерними элементами |
| `wrap` | Перенос дочерних элементов на следующую строку |
| `rowGap` | Межстрочный интервал при переносе |
| `justify` | `"start"`, `"end"`, `"center"`, `"between"` |
| `items` | `"start"`, `"end"`, `"center"`, `"stretch"` |
| `p`, `px`, `py`, `pt`, `pr`, `pb`, `pl` | Отступы |
### Размер и позиция
| Свойство | Описание |
|----------|----------|
| `w`, `h` | Ширина/высота — число, `"fill"` или `"hug"` |
| `minW`, `maxW`, `minH`, `maxH` | Ограничения размера |
| `x`, `y` | Позиция |
### Внешний вид
| Свойство | Описание |
|----------|----------|
| `bg` | Заливка фона (HEX-цвет) |
| `fill` | Псевдоним для `bg` |
| `stroke` | Цвет обводки |
| `strokeWidth` | Толщина обводки (по умолчанию: 1) |
| `rounded` | Скругление углов (или `roundedTL`, `roundedTR`, `roundedBL`, `roundedBR`) |
| `cornerSmoothing` | Плавное скругление в стиле iOS (0–1) |
| `opacity` | 0–1 |
| `shadow` | Тень (напр. `"0 4 8 #00000040"`) |
| `blur` | Радиус размытия слоя |
| `rotate` | Поворот в градусах |
| `blendMode` | Режим наложения |
| `overflow` | `"hidden"` или `"visible"` |
### Типографика
| Свойство | Описание |
|----------|----------|
| `size` / `fontSize` | Размер шрифта |
| `font` / `fontFamily` | Семейство шрифта |
| `weight` / `fontWeight` | `"bold"`, `"medium"`, `"normal"` или число |
| `color` | Цвет текста |
| `textAlign` | `"left"`, `"center"`, `"right"`, `"justified"` |
## Экспорт в JSX
Конвертируйте существующий дизайн обратно в JSX:
```sh
openpencil export design.fig -f jsx # формат OpenPencil
openpencil export design.fig -f jsx --style tailwind # классы Tailwind
```
Круговой цикл работает: экспортируйте дизайн как JSX, измените код, отрендерьте обратно.
## Визуальное сравнение
Поскольку дизайн можно представить как JSX, изменения становятся диффами кода:
```diff
- Old Title
+ New Title
Description
```
Это делает изменения дизайна доступными для ревью в пулл-реквестах, отслеживаемыми в системе контроля версий и проверяемыми в CI.