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