Skip to content

JSX-рендерер

OpenPencil использует JSX как язык создания дизайна. LLM видели миллионы React-компонентов — описание макета через <Frame><Text> естественно и не требует специального обучения. Каждый токен важен, когда ИИ-агент выполняет десятки операций, а JSX — это самое компактное декларативное представление.

JSX также поддаётся сравнению. Когда ИИ изменяет дизайн, изменение представлено как JSX-дифф — читаемый, проверяемый, пригодный для контроля версий.

Создание дизайна

Инструмент render (доступен в ИИ-чате, MCP и CLI eval) принимает 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>

В MCP-сервере и ИИ-чате инструмент render принимает JSX-строки напрямую. В CLI используйте команду export для обратного направления — экспорт дизайна в JSX.

Элементы

Все типы узлов доступны как JSX-элементы:

ЭлементСоздаётПсевдонимы
<Frame>Фрейм (контейнер, поддерживает автолейаут)<View>
<Rectangle>Прямоугольник<Rect>
<Ellipse>Эллипс / круг
<Text>Текстовый узел (дочерние элементы становятся текстовым содержимым)
<Line>Линия
<Star>Звезда
<Polygon>Многоугольник
<Vector>Векторный контур
<Group>Группа
<Section>Секция

Свойства стиля

Компактные сокращённые свойства, вдохновлённые именованием 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)
opacity0–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
open-pencil export design.fig -f jsx                   # формат OpenPencil
open-pencil export design.fig -f jsx --style tailwind  # классы Tailwind

Круговой цикл работает: экспортируйте дизайн как JSX, измените код, отрендерьте обратно.

Визуальное сравнение

Поскольку дизайн можно представить как JSX, изменения становятся диффами кода:

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>

Это делает изменения дизайна доступными для ревью в пулл-реквестах, отслеживаемыми в системе контроля версий и проверяемыми в CI.

Released under the MIT License.