Введение

Что нового

Изменения последних версий SXL Studio простыми словами и таблица совместимости плагина с Bridge, Transformer, Resolver и Storybook Addon.

Номер установленной версии плагина виден на вкладке Tokens внизу пустой рабочей области и в первой строке вкладки Diagnostics. Плагин обновляется через Figma Community автоматически.

Совместимость

КомпонентВерсияГде взять
Плагин SXL Studio2.9.4Figma Community
SXL Bridge1.9.0npm i -g @sxl-studio/bridge, см. Утилита Bridge
Transformer3.4.1npm i -g @sxl-studio/token-transformer, см. Transformer
Resolver для VS Code2.3.4Маркетплейс VS Code, см. Resolver
Storybook Addon2.0.2npm, см. Storybook Addon

Плагин 2.9.x работает с Bridge 1.10.0. Если Bridge старее, обновите его: Local Workspace и Local Storage могут не открыться.

Transformer: сохранение токенов

Начиная с Transformer 3.4.0, команда sync --preserve-existing сохраняет ранее сгенерированные токены после удаления JSON, обновляет совпавшие и добавляет новые во всех форматах. В 3.4.1 дополнительно стабилизированы повторные запуски force и XML preserve, уточнены записи smart и исправлено экранирование текста. Preserve включается только флагом команды; примеры smart, force и preserve приведены в документации Transformer.

Утилиты вместе с 2.9.3

  • Bridge 1.9.0: надёжнее установка через npm, рабочие команды справки/версии и понятная диагностика установленного пакета.
  • Transformer 3.3.1: улучшена обработка объектов DTCG, градиентов, составных ссылок, URL изображений и easing; исправлены повторная генерация SCSS и однократная пересборка после обновления. Ограничения платформ явно отражаются в диагностике; см. Transformer.

2.9.5

  • Адаптивные варианты: STRING-токены в ref.properties, в том числе экспортированные в другой файл рабочей области (библиотека Core → файл компонентов): переменная импортируется по опубликованному ключу. Исходный вариант выбирается по режиму места размещения; неиспользуемые режимы переменной не мешают привязке, проверяется активное значение инстанса.

  • Миграция матрицы вариантов: изменение числа вариантов и осей обновляет существующий ComponentSet на месте с сохранением идентификаторов; экземпляры удаляемых вариантов переводятся на сохраняемые нативной заменой с сохранением переопределений; опубликованные варианты и удалённые значения осей требуют явной карты variantMigration.

  • Неразрешённые ссылки: результат становится ошибкой с первичной причиной, текущий слой сохраняет идентификатор без каскадных ошибок и повторных заглушек, а после исправления ссылки Apply приводит его к JSON.

  • Grid и перенос строк в композициях целиком: сетка Figma со всеми настройками — число колонок и строк, дорожки fr/px/hug (в том числе repeat(7, 1fr)), отступы, автопозиционирование (gridAutoFlow, gridAutoRows), явное размещение инстансов по ячейкам (gridRow, gridColumn, span, выравнивание); перенос строк с wrapGap: "auto" и space-evenly/space-around. Удалённые из JSON ключи сетки и переноса сбрасываются при Apply, несовпадение числа дорожек и колонок — ошибка авторства с исправлением.

  • Hover без сдвига соседей: добавлен рецепт независимого увеличения всей карточки в Auto Layout и Grid: фиксированная ячейка сохраняет место и min/max-переменные, внутренний слой сохраняет пропорции. Это явная структура композиции, а не автоматическая обёртка.

  • Пропорции и ограничения размеров: масштабирование учитывает min/max переменные; замок в JSON с разными переменными на двух сторонах одной пары (width/height, minWidth/minHeight, maxWidth/maxHeight) — ошибка авторства с указанием слоя, пары и исправления до любых изменений; один токен на обеих сторонах пары и переменные в разных парах допустимы; замок с канваса (унаследованный или ручной) даёт предупреждение aspect-lock-settled; сбой стиля корня не оставляет вариант пустым. Исправлен сброс явно включённого constrainProportions у FRAME.

  • Восстановление управляемых привязок в Smart: поддерживаемые прямые связи с переменными проверяются и без изменения соответствующего JSON-блока. Ручное содержимое слотов и унаследованные слои инстансов сохраняются.

  • Масштаб инстансов из JSON: абсолютный scale для явно объявленных INSTANCE и ICON, включая default-инстанс нативного слота. Повторный Apply не накапливает масштаб; удаление значения возвращает масштаб к единице. Поддерживаемые сочетания и ограничения описаны в Composition.

  • Привязка размера текста: fontSize сохраняет числовую переменную после записи размера; ошибка привязки попадает в диагностику. Стиль любого вида (текстовый, заливка, градиент, тень, blur, сетка), экспортированный раньше своих переменных, получает литерал и замечание по каждому полю с подсказкой; после экспорта зависимостей обычный повторный экспорт восстанавливает привязки без Force update all, сохраняя ID стиля.

  • Прозрачность и blend mode слоя с цветом по переменной: слой заливки со ссылкой на цветовую переменную и своей opacity получает прозрачность уже при первом экспорте — Figma сбрасывала её при создании стиля, и значение появлялось только после второго экспорта. Blend mode у такого слоя Figma не хранит: экспорт оставляет NORMAL и сообщает замечанием; чтобы сохранить blend mode, задайте цвет слоя литералом.

  • Local Workspace и сохранения в редакторе (Bridge 1.10.0): после записи плагина в файл Bridge мог перестать замечать последующие сохранения этого же файла в редакторе до перезапуска. Ожидание завершения записи теперь выполняет сам Bridge, и мгновенное отсутствие файла во время журналируемой замены его не сбивает.

  • Три статуса результата и Auto-fix: успех, предупреждение с рекомендациями по пунктам и ошибка с перечнем исправлений; кнопки Repair и Auto-fix прямо в уведомлении (повторная привязка вариантов, ожидание Local Workspace, Repair, затем Smart). Bridge 1.10.0 возвращает status, diagnosticsdetails и fixes), suggestedAction; команды auto_fix_composition и reload_local_workspace; get_plugin_status показывает состояние Local Workspace. Замечания и ошибки во всех уведомлениях — композиции, экспорт переменных и стилей, Apply Tokens, Apply Data — оформлены единым списком: значок серьёзности, сначала ошибки; длинное сообщение разобрано на заголовок и строки «что не так», шаги исправления — отдельными стрелками, свойства и токены выделены, общий набор шагов показан один раз над списком; счёт «N errors · M notices», Show N more для длинных списков. Apply Data перечисляет пропущенные поля с причиной и исправлением вместо «Applied to 0 layers».

  • Редактирование активного профиля Local Workspace: имя и папки активного профиля меняются без деактивации — кнопка Save and reopen сохраняет профиль и заново открывает рабочую область из новых папок; несохранённый черновик редактора или конфликт с диском останавливают сохранение с объяснением; удаление активного профиля по-прежнему требует Use Plugin Local. Рядом с полями корня, tokens и data — кнопка выбора папки через системный диалог (нужен Bridge 1.10.0); папки tokens и data должны лежать внутри Git-корня.

  • Local Workspace без незавершённых операций: ожидание перезагрузки рабочей области перед записью и повтор записи трекинга после изменения канваса; изменение файла на диске во время операции применяется в её точке ожидания, а конфликт несохранённого черновика с диском остаётся решением пользователя.

  • Привязка переменной к VARIANT при вариантных ref: блок ref внутри $prop=value-секции стилей меняет только названные свойства вложенного инстанса; привязки {token} из структурного ref (например _breakpoint: "{breakpoint}") сохраняются, а после всех стадий Apply каждая такая привязка проверяется: потеря становится ошибкой, а не успехом.

  • Смена вида слоя FRAME ↔ SLOT: Apply меняет тег существующего слоя на месте: на одиночном компоненте создаётся нативный слот, в наборе вариантов — свойство SLOT со связанными слоями; обратная смена снимает свойство без пересоздания узлов.

  • Литеральные свойства ссылок в Smart: Smart Apply сверяет текстовые, логические и вариантные значения ref.properties вложенных инстансов с живыми и переприменяет разошедшиеся, например после переименования свойства в компоненте-источнике.

  • INSTANCE_SWAP и вариантные ссылки: значение по умолчанию берётся из JSON; вариантная замена компонента на привязанном слое сообщается предупреждением, а аудит понимает вариантные замены на обычных слоях.

  • Надёжнее Generate и Apply: исправлены выбор целевой страницы, добавление и переименование нативных слотов, привязка существующих слотов и обработка отмены. Незавершённая операция не получает отметку об успешном обновлении.

2.9.4

  • Настройки нативных слотов из JSON: описание, предпочтительные компоненты, минимальное и максимальное число слоёв, отображение пустого слота и настройка растягивания при вставке. Ограничения количества слоёв рекомендательные и не удаляют существующее содержимое.
  • Переименование свойства слота через Apply: изменение имени в componentProperties при прежнем layer сохраняет идентификатор свойства, привязку и содержимое слота. Неизменённый JSON сохраняет ручное имя в Figma. Для композиций из предыдущих версий сначала выполните Apply с прежним JSON, затем меняйте имя. См. Настройки слотов.
  • Default-содержимое слотов по вариантам: Generate и Apply учитывают компонент, его свойства и стили для каждого варианта родителя. Можно задать default-компонент и во вложенном нативном слоте. Ручные замены, изменённые свойства, скрытое и намеренно пустое содержимое защищены от перезаписи.
  • Точнее выбор компонентов: ключ опубликованного набора выбирает нужный вариант; поиск по имени больше не подставляет компонент только из-за совпадения части имени. При разрешении ссылки точное локальное имя имеет приоритет. Если default слота уже создан через другое совпадение имени, используйте Repair для повторного разрешения ссылки. Явные key и library сохраняют приоритет и ограничения источника.
  • Восстановление потерянных связей: Apply может перепривязать существующий инстанс с удалённым локальным мастером к единственному подтверждённому компоненту из того же JSON-источника. При неоднозначности или неподтверждённой сохранности ручного содержимого плагин сообщает о проблеме.
  • Прозрачность по ссылке в цветовых выражениях: поддерживаемые rgb, rgba, hsl, hsla, lch, oklch и color(...) могут сохранять ссылку на токен прозрачности без обязательного figma.modify. Для нативной связи прозрачности цвет по ссылке должен быть непрозрачным. Если Figma не поддерживает нужную связь, экспорт сохраняет вычисленный цвет и сообщает об ограничении.
  • Изображения в JSON композиций: Get Code встраивает PNG, JPEG и GIF, сохраняет обрезку, отражение, скрытые слои и порядок поддерживаемых эффектов. Generate и Apply читают встроенные изображения; недоступный источник вызывает ошибку и сохраняет прежние заливки. GLASS зависит от доступности эффекта в Figma и поддерживается без привязок переменных.
  • Надёжнее Apply и Get Code: сохраняются привязки и настройки слотов, описания, предпочтительные компоненты и пустые слоты. Ошибки привязки свойств и неполные обновления больше не считаются успешным применением. Недопустимая привязка внешнего свойства к обычному слою внутри слота диагностируется до изменения структуры.
  • Local Workspace и повторный Apply: генерация и обновление проверяют готовность синхронизации до изменения слоёв. Ошибка сохранения привязок явно сообщается, а повтор с неполным трекингом не создаёт дубликаты существующих вариантов.
  • Массовые команды Remote Connect: некорректные запросы отклоняются до начала работы, а Cancel останавливает следующие композиции активного прогона. Уже выполненные изменения сохраняются.

2.9.3

  • Apply может заново создать удалённый обычный корень композиции (component: false). Недоступное значение по умолчанию свойства замены инстанса вызывает предупреждение, но не помечает весь Apply незавершённым.

  • Подписи сетки следуют за перенесённым набором при Apply; старые подписи на другой странице удаляются. Повторный Apply сохраняет неизменные подписи, а ручные изменения текста и оформления исправляются.

  • Повторный Apply в Local Workspace быстрее: данные привязки композиции записываются только при изменении.

  • После сетевого сбоя Local Workspace больше не сообщает об успешном сохранении по старой копии файла. Если результат записи неизвестен, перед следующим сохранением требуется перезагрузить рабочую область.

  • После частично неудачного Apply обработанные варианты сохраняют связь с композицией, а следующий Apply повторяет незавершённую работу. Повторный Apply также сохраняет связи вариантов с их слоями.

  • Apply сохраняет исходную страницу и позицию компонента, в том числе при переходах между одиночным компонентом и набором вариантов. Если страница цели недоступна, Apply останавливается до изменений на канвасе.

  • Композиции учитывают явно указанную библиотеку и ключ опубликованного компонента, в том числе при замене вложенных иконок. Недоступная ссылка вызывает предупреждение вместо молчаливой подстановки локального компонента с тем же именем.

  • Local Workspace: после повторного открытия плагина успешное подключение восстанавливает экспорт и сохранение, даже если первая проверка соединения завершилась ошибкой.

  • В экспорте остался один переключатель Sort для стилей и их папок. Сортировка сохраняет идентификаторы и привязки; настройка пересоздания коллекций убрана. Существующие коллекции, моды и переменные плагины Figma переставлять не могут.

  • Композиции: удаление слоя из JSON надёжно применяется smart Apply. Раньше после структурной правки штамп «нестилевого» хэша набора не обновлялся, и следующий Apply считал удаление слоя стилевой правкой, оставляя слой на канвасе до repair. Быстрый стилевой путь дополнительно сверяет живые слои со структурой. Результат Apply содержит applyPlan: какой план сработал и почему. ref.nested.<слой>.component меняет вложенный инстанс, как ручная замена в Figma; переопределения инстансов при Apply сохраняются, id нод не меняются.

  • Композиции: свойство INSTANCE_SWAP по умолчанию получает тот вариант, который слой уже показывает (ref.properties), а не вариант набора по умолчанию, поэтому привязка свойства больше не сбрасывает variant=secondary. Аудит дрейфа сравнивает хэш композиции с последним Generate/Apply, учитывает переопределения instanceProperties по вариантам, не считает ручные реакции прототипа дрейфом и понимает component: false; для component: false ведётся трекинг в diff-id. Команда get_drift_status в Bridge отвечает по хэшу, а не всегда «нет дрейфа».

  • Композиции: CSS-градиент под углом (linear-gradient(135deg, …)) на фигуре теперь записывается: стопы приводятся к диапазону Figma сдвигом ручек, раньше Figma отклоняла заливку молча. backgroundBlur / layerBlur по токену стиля ({blur.bound}{core.space.md}) получают радиус из цепочки ссылок и привязку к переменной; отказ записи заливки или обводки попадает в предупреждения результата.

  • Композиции: заливка по токену стиля (fill: "{gradient.brand}", "{img.logo}", "{fill.surface-tinted}") подключает стиль заливки Figma или собирает слои из значения токена; blendMode задаётся на слое; значения enum-полей из токенов (textCase, textDecoration) переводятся в термины Figma; Apply работает для component: false; аудиты и поиск использований переменных видят привязки текстовых полей (размер, начертание, интерлиньяж, текст).

  • Local Workspace: после смены ветки или коммита в репозитории токенов сессия переоткрывается сама, без Reload. Если в редакторе есть несохранённый черновик, плагин показывает конфликт и ждёт решения.

  • Композиции: Apply больше не стирает реакции прототипа, добавленные вручную, а переписывает только созданные из transitions; добавленные Apply варианты получают свои переходы, а не копии переходов шаблона; Apply не двигает существующий набор в центр экрана; первый Apply после Adopt не удаляет component properties, созданные дизайнером; padding массивом раскладывается по сторонам как CSS; lineHeight и letterSpacing из токена без переменной Figma записываются корректно.

  • Композиции: селектор с условием и классом ("$variant=secondary .root") принимает вложенные блоки классов, порядок условий и классов в ключе свободный. Раньше такие правила терялись, а вложенный блок попадал в базовые стили.

  • Композиции: visible: "{token}" привязывает булеву переменную; ссылка на вес шрифта из строковой переменной привязывается к полю Font style, из числовой — к Font weight; border: "none" снимает обводку; размеры дорожек сетки fr / px / auto записываются в актуальном формате Figma, строковая форма "1fr 200px auto" тоже работает; textSizing: "truncate" пишется как обрезка с многоточием без устаревшего режима.

  • Переходы: именованные правила ("hover-in") работают через from / to в объектной форме, а правило без направления попадает в предупреждения (раньше такие правила из документации не создавали ни одной реакции); значения осей с дефисами в правилах ($size=extra-large -> …), after-timeout 500 в сокращённой записи, matchLayers у направленных переходов; неизвестная анимация или кривая теперь попадает в предупреждения, а не подменяется молча.

  • Курсив в текстовом стиле сохраняется, даже если вес привязан к строковой переменной: начертание пишется литералом с подсказкой в отчёте.

  • Стили по ссылке на переменную: fill из одной ссылки на цвет и blur / backdrop-blur из ссылки на число привязывают переменную; сетки со STRETCH, MIN, MAX, CENTER проходят проверку Figma; слой noise пишется без blendMode.

  • Значения в форме DTCG: объекты { "value", "unit" } для длин и длительностей, цвет каналами { r, g, b, a } и объект цвета DTCG (colorSpace, components, alpha, hex) читаются как обычные значения. Формулы для duration считаются в миллисекундах.

  • Цвет с прозрачностью экспортируется составной ячейкой Figma: токен цвета с модификатором alpha получает переменную цвета и переменную прозрачности в одной ячейке, как в панели Variables, и это работает и для ссылки на цвет с числовой прозрачностью. Где Figma ещё не открыла запись, цвет остаётся с запечённой прозрачностью, а отчёт перечисляет такие переменные.

  • Файлы, коллекции и папки на экране Tokens открываются во вкладках, как в IDE: переименование двойным щелчком, точка несохранённых изменений, вопрос при закрытии, память вкладок и вида для каждой рабочей области. Датасеты и маппинги вкладки Database живут в той же полосе.

  • Карточка токена по наведению на бейдж переработана: полный путь и тип, превью, значение как в JSON и ссылки с файлами, где они определены; ссылка на формулу считается до числа; клик копирует значение. Без выбранного мода превью считает значения для мода открытого файла.

  • Стили заливки: слои video и pattern, картинки и видео из Database, режим масштабирования, поворот и коррекция изображения, видимость слоя, прозрачность слоя ссылкой на токен. Градиенты: repeating-*, направление словами, форма, размер и позиция radial и conic, позиции стопов в пикселях и долях, ссылки в угле и позициях. Все ссылки на цвета по-прежнему становятся переменными в стиле.

  • Текстовые стили: оси переменных шрифтов fontVariationSettings (Figma Plugin API 1.138), listSpacing, textWrapStyle, hangingPunctuation, hangingList; форма типографики умеет их добавлять.

  • Формы токенов больше не теряют поля при редактировании: видимость, режим наложения и «тень позади слоя» у теней, объектные значения размытий и картинок, цвет и видимость сетки.

  • Импорт из Figma читает все слои стиля заливки, а не только первый, и не выбрасывает скрытые слои эффектов.

2.9.2

  • Поддержаны новые типы переменных Figma Timing и Easing: токены duration экспортируются как Timing, cubicBezier и новый тип easing как Easing, включая пресеты и пружины. При импорте из Figma они возвращаются в JSON. В окнах Export и Import появились переключатели Timing и Easing.
  • Стили эффектов поддерживают все текущие эффекты Figma: обычное и прогрессивное размытие, шум, текстуру, стекло и шейдеры, с привязкой переменных к цвету, смещению, радиусу и размытию теней.
  • Цвет с переменной прозрачности: когда Figma включит эту возможность в вашем файле, токен цвета с модификатором alpha на ссылку сам привяжет переменную прозрачности; пока возможности нет, экспорт работает как раньше.
  • Сохранение файла токенов больше не может зависнуть молча: через 20 секунд без ответа редактор показывает причину, а команда status в Diagnostics печатает очередь операций и последние сохранения.

2.9.1

  • В форме Git-подключения появились кнопки Test connection и Fix: проверка токена, репозитория, ветки и папок с отчётом и автоматическим исправлением опечаток в путях и имени ветки.
  • Новая вкладка Diagnostics в окне синхронизации: команды status, diag, test, log и другие, отчёт для поддержки без токенов.
  • Окно Git Sync упрощено: источники переключаются кнопками Use Git и Set Active в строках подключений, статус показывает время последней проверки.
  • Окна Pull и Push сравнивают файлы как в IDE: неизменённые области свёрнуты, есть переходы между изменениями и фильтры по типу изменения.
  • Переключение из Local Workspace на Git проверяет подключение заранее и не оставляет плагин без источника, если Git недоступен.
  • Понятные тексты ошибок GitHub и GitLab: ответ 404 объясняется правами токена, ошибки авторизации и лимитов не выглядят как пустой репозиторий.

2.9.0

  • Новый источник Local Workspace: плагин работает прямо с папкой репозитория на диске через SXL Bridge, следит за изменениями файлов и защищает несохранённый черновик редактора от перезаписи.
  • Несколько профилей Local Workspace с быстрым переключением из футера; последний источник запоминается для каждого файла Figma.
  • В подключении Git появилось поле Figma File URL or Key для случаев, когда плагин не может определить ключ файла сам.
  • Исправлено повторное применение композиций к обычным компонентам.

2.8.10

  • Композиции получили описание в Markdown и ссылки на документацию, которые попадают в панель Figma при Generate и Apply.
  • Get Code обновляет только сгенерированные поля композиции и сохраняет ваши правки.
  • В редакторе токенов для булевых переменных нет scopes, а для fontWeight допустим только FONT_STYLE.

2.8.9

  • Умное сопоставление переменных и стилей при экспорте: без дубликатов стилей и осиротевших переменных.
  • Композиции сообщают о недостающих компонентах и непривязанных переменных в отчёте Apply.
  • Служебный файл Diff-ID сравнивается по содержанию, а не по форматированию; добавьте diff-id.*.json в .prettierignore.

См. также