Что нового
Изменения последних версий SXL Studio простыми словами и таблица совместимости плагина с Bridge, Transformer, Resolver и Storybook Addon.
Номер установленной версии плагина виден на вкладке Tokens внизу пустой рабочей области и в первой строке вкладки Diagnostics. Плагин обновляется через Figma Community автоматически.
Совместимость
| Компонент | Версия | Где взять |
|---|---|---|
| Плагин SXL Studio | 2.9.6 | Figma Community |
| SXL Bridge | 1.11.0 | npm i -g @sxl-studio/bridge, см. Утилита Bridge |
| Transformer | 3.4.1 | npm i -g @sxl-studio/token-transformer, см. Transformer |
| Resolver для VS Code | 2.3.4 | Маркетплейс VS Code, см. Resolver |
| Storybook Addon | 2.0.2 | npm, см. Storybook Addon |
Плагин 2.9.x работает с Bridge 1.10.0 и новее. Если Bridge старее, обновите его: Local Workspace и Local Storage могут не открыться. Несколько вкладок, управление Figma Desktop и опасные команды, которые включаются сами, требуют Bridge 1.11.
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.6
- Компоненты библиотеки по имени из любого места файла: ссылка
ref.componentбезkeyиlibraryнаходит опубликованный компонент по его инстансу на любой странице документа — даже под переименованным слоем или внутри другого инстанса. Раньше инстанс должен был лежать на текущей странице и называться как компонент, иначе Generate и Apply завершались ошибкой «Unresolved component». Действует для слоёвINSTANCEиICON, вложенных ссылок, замены иконок и значенийINSTANCE_SWAPпо имени; спискиpreferredи значения по умолчанию свойств по документу не ищутся. Вариант выбирается от опубликованного варианта по умолчанию поproperties, его ключ запоминается для следующих запусков; прежний порядок поиска и его стоимость не меняются — поиск по документу срабатывает только там, где раньше ссылка оставалась неразрешённой. Одноимённые компоненты из разных библиотек автоматически не выбираются (сообщение перечисляет их ключи дляkey), а композицию рабочей области, которую не генерирует другой файл, опубликованный тёзка не подменяет. Подробнее: Composition. - Иконка по имени без ручного индекса (необязательно): если Bridge запущен с токеном Figma, достаточно одной любой иконки библиотеки в файле — остальные находятся по имени автоматически; токен остаётся в Bridge.
- Файл diff-id стал меньше: ledger пишется по одной записи на строку без отступов — данные те же, файл меньше примерно на треть (5,7 МБ → 3,6 МБ на реальной дизайн-системе), а изменение переменной или режима — одна строка в Git. Первое сохранение один раз перезапишет файл целиком. Если репозиторий форматирует JSON, держите
diff-id.*.jsonв.prettierignore. Старые версии плагина читают новый файл как обычно и могут записать его обратно с отступами — это безвредно. Clean up Diff-ID переводит файл в новую форму без экспорта. - Clean up Diff-ID забывает удалённые компоненты без JSON: прежнее действие Compact Diff-ID теперь называется Clean up Diff-ID (команда агентов
compact_diff_idне переименована, в её результате появилось полеremovedRoots[]). Если сгенерированного компонента больше нет в файле и его JSON-композиции нет в рабочей области, его запись убирается из diff-id. Компонент, чей JSON остался, по-прежнему помнится: после восстановления из истории версий Apply снова найдёт его. То же самое происходит при экспорте с включённым Delete или Force: в списке удаляемого такие записи показаны информационными строками с пометкой «Diff-ID», в число удаляемых объектов не входят, сами по себе подтверждения не вызывают и забываются только после успешного экспорта. Generate и Apply записи не забывают. Для агентовpreview_export_variablesотдаёт их вdeletionPlan.forgottenCompositionRecords[]. Подробнее: Экспорт переменных и стилей. - Действия над Diff-ID разложены по местам: внизу дерева Tokens остались три действия, они видны всегда: Export variables & styles, Import variables & styles и Collection Settings. Clean up Diff-ID, Reset Diff-ID for one collection… и Reset Diff-ID… находятся в окне Export, подблок Diff-ID в Export settings; сброс одной коллекции переехал туда из Collection Settings. Index library components и Clean up Diff-ID находятся в окне Local Workspace, секция Workspace tools; там же осталось единственное предупреждение о размере Diff-ID больше 28 MiB. Подтверждения показываются окном плагина. Reset Diff-ID для одного файла по-прежнему в контекстном меню файла в дереве, а кнопка Compact Diff-ID в ошибке слишком большого файла не изменилась.
- Единые сворачиваемые блоки во всех окнах: Import, Collection Settings, форма Git-подключения, Local Workspace и Cross-file собраны из тех же сворачиваемых блоков, что и окно Export. Состояние «открыт/свёрнут» запоминается для каждого окна; блок, в котором появилась ошибка или предупреждение, раскрывается сам, а признак проблемы виден в его заголовке.
- Удаление опубликованного варианта больше не блокирует Apply: если значение оси убрано из JSON, опубликованные варианты удаляются с предупреждением вместо отказа с требованием вставить блок
variantMigration. Экземпляры в этом файле переводятся на сохраняемый вариант; экземпляры в других файлах теряют связь с библиотекой только после вашей следующей публикации — диалог публикации Figma показывает удалённые варианты. - Слот с инстансом удалённого компонента чинится Apply: если инстанс по умолчанию в слоте ссылается на удалённый компонент (Figma показывает «Missing variant»), Apply переключает тот же слой на компонент из JSON и сообщает, какой удалённый компонент заменён. Раньше такой инстанс считался ручным содержимым и оставался мёртвым. Инстанс живого компонента, выбранного вручную, по-прежнему сохраняется.
- Вариант, удалённый вручную, пересоздаётся в том же наборе: удаление варианта по умолчанию больше не приводит к созданию второго набора с новыми идентификаторами, а удаление любого другого варианта — к ошибке «binding target … is missing» на первом Apply.
- Delete удаляет то, что обещал план: коллекция, убранная из конфига, и её стили удаляются при любом выборе коллекций. Раньше одна замороженная переменная в посторонней коллекции (например, путь токена, заданный в двух коллекциях) молча отменяла удаление всех коллекций целиком. Если экспорт всё же оставляет объект из подтверждённого плана, он называет его и причину.
- Apply выбранного компонента больше не пересобирает все варианты: Apply из бейджа композиции (и с
anchorNodeIdчерез Bridge) теперь, как обычный Smart Apply, пропускает варианты, которые не изменились, и пересобирает только изменённые. Раньше при каждом таком Apply пересобирался весь набор: у набора на 120 вариантов это около двух минут даже без изменений в JSON. - Правка
ref.stylesиrefStylesбольше не пересобирает варианты: если в JSON изменились только стили корня вставленного инстанса —ref.stylesвstructure,refStylesв стилях илиstylesвнутриrefварианта, — Smart Apply заново записывает эти стили на инстансы изменённых вариантов и повторяет то, что полный Apply записывает на тот же инстанс после них: стили самого слоя, корневой и dot-блоки. Варианты, слоты и экземпляры не пересоздаются. Раньше такая правка пересобирала каждый затронутый вариант целиком (около секунды на вариант). Если результат нельзя доказать равным полному Apply — например, слот по умолчанию заменён вручную, у ссылки естьref.slotsилиscale, или правка цвета иконки может быть переписана другим блоком, — Apply выполняется полностью, как раньше. Подробнее: Composition. - Слоты после Generate на большой странице: сразу после сборки набора Figma какое-то время не принимает привязку нативного слота к свойству компонента; на странице с сотнями компонентов плагин ждал слишком мало и сообщал «SLOT bindings could not be established», хотя повторный Apply привязывал слот. Теперь ожидание дольше и тратится только пока Figma отказывает. Для одиночного компонента (без вариантов) результат привязки слотов теперь дожидается: раньше сбой мог не попасть в итог операции.
- Компонент, получивший оси, остаётся тем же узлом: если у компонента без
propsв JSON появились оси, Smart Apply делает его вариантом по умолчанию нового набора с тем же id и экземплярами. Раньше это получалось, только если трекинг уже хранил компонент под ключом варианта: обычно он лежит под ключом одиночного компонента, а после неудачного Apply (например, из-за неразрешённой ссылки) — не лежит вовсе, и Apply собирал новый набор рядом, оставляя исходный компонент отдельно и сообщая об успехе. Теперь такой прогон либо включает исходный компонент в набор, либо останавливается до объединения с ошибкой и убирает варианты, созданные в этом прогоне (раньше они оставались на странице отдельными компонентами). Набор встаёт в ту же секцию или фрейм, где лежал компонент (раньше — на страницу в координатах секции, далеко от неё). Обратно — если оси из JSON убрать — набор сворачивается в свой вариант по умолчанию с его id на месте набора; раньше этот переход останавливался ошибкой миграции вариантов («invalid variant key») или создавал новый компонент. Подробнее: Composition. - Агент ведёт плагин сам: Remote Connect включается при каждом запуске плагина и ждёт команд в фоне. Интерфейс остаётся доступным, после пересборки и перезапуска Bridge связь восстанавливается сама. Опасные команды включаются сами с Bridge 1.11, кроме защищённых файлов; агент управляет ими командами
set_session_policyиprotect_file. Bridge 1.11 держит плагин сразу в нескольких вкладках и отправляет команду в выбранный файл: любой инструмент плагина принимаетtargetFileKey, ответ показывает, куда ушла команда, а защищённый файл сам целью не становится. На macOS он открывает файлы в Figma Desktop, запускает и перезапускает плагин. Подробнее: Bridge. - План удаления показывает переменные, которые ещё используются: если экспорт с Delete или Force удаляет переменную, к которой ещё привязаны слои файла, в окне подтверждения видно, сколько слоёв и на каких страницах останутся со ссылкой на удалённую переменную.
- Первый экспорт большого DS за один прогон: коллекции заполняются в порядке зависимостей (
ref), отложенные алиасы досвязываются до сходимости; порядок коллекций в панели Variables остаётся порядком конфига. - Начертание веса шрифта не зависит от выбора коллекций: семейство, с которым используется токен
fontWeight, ищется во всех включённых коллекциях. Раньше экспорт одной коллекции записывал, например,Semi Bold, а полный экспорт —Semibold, и два прогона перезаписывали значение друг друга. - Local Workspace: команда во время перечитывания диска ждёт, а не падает: если файл на диске только что изменился, экспорт и другие записи дожидаются перезагрузки workspace (до 20 секунд) вместо ошибки «write synchronization is not active».
- Переходы: триггер по клавише (
on-key Enter),mouse-enter/mouse-leave, задержка триггера, действияurl,set-variable,set-variable-modeи несколько действий в одной реакции. Неизвестное слово вtransitionsостанавливает Apply с ошибкой, а не превращается молча вon-click/smart-animate;cubic-bezier(…)с пробелами работает в сокращённой записи. - Новые ключи стилей:
textWrap,listSpacing,hangingPunctuation,hangingList,strokeMiterLimit; удалённые из JSON торец, соединение и пунктир обводки сбрасываются при Apply. ref.exposeэкспонирует вложенный инстанс на родительском компоненте; аудит дрейфа предупреждает о нарушении ограничений нативных слотов.- Переименование значения оси без потери экземпляров:
tone: b → betaна той же позиции переименовывает варианты на месте, идентификаторы и экземпляры сохраняются; при удалении значения экземпляры сами переводятся на вариант с теми же остальными осями и значением по умолчанию. Раньше переименование удаляло варианты и оставляло экземпляры на удалённом компоненте. - Свойства инстанса в слоте вложенного инстанса:
ref.nested.*.slotsсо свойством INSTANCE_SWAP по имени больше не завершается ошибкой «did not take effect». - Сохранение diff-id за доли секунды: сохранение трекинга композиции больше не зависит от объёма переменных в ledger (раньше около секунды на мегабайт).
- Варианты достают до любой глубины: блок
refв секции$prop=value— наложение на структурныйref:componentповторять не нужно,propertiesсливаются по ключу,nested,slotsиoverrides— по записи. Раньше блок безcomponentи вариантныйref.nestedмолча не применялись. - Свойства стиля без эффекта видны: ключ, который для этого вида слоя ничего не делает (например,
fillна FRAME), даёт предупреждение с названием слоя, селектора и подходящего свойства. - Индекс библиотеки: команда Index library components (окно Local Workspace, секция Workspace tools) в файле-библиотеке записывает в рабочую область имена и ключи её компонентов; после этого иконка или компонент библиотеки вставляется по имени, даже если в документе нет ни одного его инстанса. Подробнее: Composition.
- Цвет с прозрачностью по переменным: ячейка «цвет + opacity» записывается в публичном формате Figma
{ color, opacity }(Plugin API, обновление 139 от 17 сентября 2026). Прежний внутренний формат Figma перестала принимать: каждая такая ячейка получала запечённый цвет и предупреждение. Старый формат остаётся запасным для прежних версий редактора, читаются оба; отказ формата для всех ячеек сообщается одним замечанием на экспорт. nested.pathчерез нативный слот: путь доходит до содержимого слота по имени слоя из JSON мастера. Figma называет инстанс по умолчанию внутри слота именем его компонента, поэтому путь останавливался на «segment … was not found». Правило действует только для нативного слота с единственным инстансом; остальные сегменты по-прежнему сопоставляются точно, слои не переименовываются.- Один файл токенов в двух коллекциях: файл библиотеки, включённый в свою коллекцию и подключённый как
sourceв другой, больше не даёт «alias type is ambiguous» для третьей коллекции, которая на него ссылается. Определения, совпадающие по типу, алиасу и значению, считаются одним ответом; настоящие расхождения остаются ошибкой. - Причина неразрешённой ссылки видна в уведомлении: строка с причиной и охватом поиска (сколько инстансов и страниц прочитано) показывается как предупреждение, а не скрытая информационная запись.
- Массовая генерация по зависимостям:
bulk_generate_compositionsгенерирует мастер раньше композиций, которые на него ссылаются; порядок остальных файлов прежний. Чистая генерация рабочей области больше не требует повторных проходов из-за алфавитного порядка. - Local Workspace при задержанных ответах: оставшийся без ответа запрос событий больше не закрывает сессию после четырёх попыток. Такой запрос ничего не теряет — следующий повторяет тот же курсор, — поэтому плагин продолжает опрос до двух десятков попыток, например пока вкладка Figma в фоне; остальные сетевые ошибки обрабатываются как раньше.
- Быстрое сохранение после Generate и Apply в Local Workspace: время записи Diff-ID после композиции больше не растёт вместе с числом переменных и стилей в файле. При первом сохранении в 2.9.6 разделы композиций в файле Diff-ID переезжают в конец файла: содержимое то же, в Git это выглядит как одно крупное перемещение. Версия 2.9.5 читает такой файл как обычно.
- Список удаляемого и подтверждение при экспорте: экспорт, который собирается что-то удалить, сначала анализирует файл без изменений и показывает в уведомлении список по группам «Removed from JSON (tracked)», «Foreign — not created by SXL», «Disabled in config» и «Kept» с причиной, с кнопками удаления и отмены. Отмена ничего не меняет, вне подтверждённого списка ничего не удаляется; автоэкспорт после Pull не удаляет и не спрашивает. Подробнее: Экспорт переменных и стилей.
- Новые правила Delete и Force update all: без обеих настроек экспорт только добавляет и обновляет, возвращая к JSON ручные правки имён и значений в Figma с теми же идентификаторами. Delete orphaned variables & styles удаляет только то, что SXL экспортировал раньше и чего больше нет в JSON, в выбранных коллекциях и типах; созданное вручную и отключённое в конфигурации не трогает. Force update all приводит файл точно к JSON без сброса идентификаторов: совпадающие значения не перезаписываются (на синхронизированном файле 0 создано, 0 обновлено, 0 удалено), а всё, чего нет во включённом JSON, удаляется — остатки прежних экспортов, созданное вручную, отключённые коллекции и режимы. При выборе части коллекций очистка идёт только внутри них; в файле без
diff-idсозданное вручную не удаляется; стили, используемые композициями, объекты библиотек и выключенные типы не затрагиваются. - Reset Diff-ID без дубликатов: следующий экспорт заново подключает существующие переменные по имени и типу, а стили по имени и виду, и записывает их идентификаторы.
- Строгие числа и единицы: десятичная запятая (
1,5px= 1.5),pt,pc,in,cm,mm,Qпересчитываются в пиксели (10pt= 13.33), регистр единиц не важен, то же работает в формулах (10pt + 2px,{a} * 1,5; внутри скобок функции запятая разделяет аргументы). Единицы без пиксельного значения (vw,vh,ch,frи другие) и записи вроде12abcили1,234,567больше не читаются как число перед хвостом: токен пропускается с причиной, соседние экспортируются. См. Dimension. - Цвета вне sRGB без сдвига оттенка: литералы
lch(),oklch(),color(display-p3 …)и результатыlighten,darken,mixвlchиoklchприводятся в sRGB уменьшением насыщенности с сохранением светлоты и оттенка (CSS Color 4), а не обрезкой каналов.lightenна 100 % даёт точный белый,darkenна 100 % — точный чёрный в любом пространстве. - Имена цветовых функций в любом регистре:
RGB(…),OKLCH(…)принимаются; светлотаoklch()может быть процентом, напримерoklch(70% 0.15 250). - Формулы в полях стилей: числовые поля теней, размытия, эффектов, сетки и типографики принимают формулы вроде
"{dim.px} / 3"; значение вычисляется и записывается числом с замечанием, что формулу привязать нельзя, — для связи сошлитесь на токен с формулой. Литеральные числа в стилях принимают те же единицы;emвlineHeightиletterSpacingсчитается от размера шрифта (1.5em= 150 %). Стиль, подключённый по имени, считается обновлённым, а не созданным. - Доли в стекле и шуме: ссылка на токен прозрачности в
lightIntensity,refraction,dispersionстекла и вopacity,densityшума сохраняет долю:0.48остаётся0.48, а не превращается в максимум. - Bridge 1.11:
preview_export_variablesвозвращает тот же список удаляемого без записи, аexport_variables, которому нужно что-то удалить, требуетconfirmDestructive: true; без него ничего не меняется. - rem base в настройках экспорта: базовый размер для
rem,emи процентов задаётся в окне экспорта числом или ссылкой на токен; поле в Collection Settings убрано, значение по-прежнему хранится вconfig.json. Формулы и числа в полях стилей считаются от этой базы, а не от 16. Неразрешимая ссылка останавливает экспорт до любых изменений. - Local Workspace и серии сохранений: если файлы изменились на диске, пока плагин перечитывал рабочую область (сохранение нескольких файлов,
git checkout), чтение повторяется само; раньше требовался ручной Reload. variantMigrationне мешает Generate: блок можно оставить в JSON навсегда; если набора вариантов нет или его матрица уже совпадает с JSON, он игнорируется, и Generate создаёт набор заново без правки JSON.
2.9.5
-
Compact Diff-ID: красное действие внизу дерева Tokens, когда ledger больше 28 MiB, и команда
compact_diff_idдля агентов переписывают ledger в компактную схему без экспорта и Apply, с сохранением всех id; если ledger вырос выше предела Bridge и рабочая область не открывается, та же кнопка появляется в сообщении об ошибке (Bridge 1.10.2 и новее). -
Компактный трекинг композиций в diff-id (схема 3): ключи слоёв записываются один раз на корень, а варианты хранят только id, legacy-секция
compositionsне хранится, корень с удалённой нодой сворачивается при доказанной замене; ledger реального DS уменьшается в несколько раз, а Generate и Apply работают с теми же картами в памяти. Ledger, записанный 2.9.5, для Apply композиций требует 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. -
Поздние привязки стилей: стиль любого вида (текст, заливка, градиент, тень, размытие, сетка), экспортированный раньше своих переменных, сохраняет литеральное значение и сообщает о каждом таком поле с подсказкой, как исправить. Когда зависимости экспортированы, обычный повторный экспорт восстанавливает привязки без Force update all и сохраняет ID стиля.
-
Привязка размера текста:
fontSizeсохраняет числовую переменную после записи размера; ошибка привязки попадает в диагностику. Стиль любого вида (текстовый, заливка, градиент, тень, blur, сетка), экспортированный раньше своих переменных, получает литерал и замечание по каждому полю с подсказкой; после экспорта зависимостей обычный повторный экспорт восстанавливает привязки без Force update all, сохраняя ID стиля. -
Прозрачность и blend mode слоя с цветом по переменной: слой заливки со ссылкой на цветовую переменную и своей
opacityполучает прозрачность уже при первом экспорте — Figma сбрасывала её при создании стиля, и значение появлялось только после второго экспорта. Blend mode у такого слоя Figma не хранит: экспорт оставляетNORMALи сообщает замечанием; чтобы сохранить blend mode, задайте цвет слоя литералом. -
Local Workspace и сохранения в редакторе (Bridge 1.10.0): после записи плагина в файл Bridge мог перестать замечать последующие сохранения этого же файла в редакторе до перезапуска. Ожидание завершения записи теперь выполняет сам Bridge, и мгновенное отсутствие файла во время журналируемой замены его не сбивает.
-
Вложенные слоты при смене варианта хоста: содержимое, которое композиция положила в нативный слот вложенного инстанса, остаётся авторским, когда тот же блок
ref.nestedпереключает VARIANT-свойство инстанса (напримерsize: md): Figma пересобирает слои инстанса с новыми идентификаторами, а владение переносится вместо ошибки «copied slot ownership…». Скопированный вручную инстанс с таким же содержимым по-прежнему не присваивается. -
Нативный слот в наборе вариантов при Generate: в библиотечном файле генерация могла остановиться на «Slot … could not be attached», потому что ссылка нового слота на свойство приходила пустой сразу после объединения вариантов. Плагин читает ссылки при создании и вокруг объединения и перепроверяет привязку; в замечании об отказе видны ключи и трасса создания слота.
-
Замена содержимого слота без нативной привязки: если слой слота у host-компонента остался обычным FRAME (компонент создан до нативных слотов),
ref.slotsсop: "replace"меняет единственный инстанс внутри него на месте нативной заменой компонента вместо скрытия старого и вставки нового, которую Figma внутри инстанса запрещает; при отказе прежнее содержимое остаётся видимым, а результат получает ошибку. -
Три статуса результата и Auto-fix: успех, предупреждение с рекомендациями по пунктам и ошибка с перечнем исправлений; кнопки Repair и Auto-fix прямо в уведомлении (повторная привязка вариантов, ожидание Local Workspace, Repair, затем Smart). Bridge 1.10.0 возвращает
status,diagnostics(сdetailsи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.