Apply и Generate
Runtime-поведение Apply Data и Generate instance в SXL Studio: scope, правила применения значений, auto-hide, генерация строк и ограничения Figma.
Overview
Два способа записать контент датасета в Figma через маппинг:
| Режим | Что делает | Для чего |
|---|---|---|
| Apply Data | Заполняет выбранные существующие ноды из датасета | Обновление фиксированного макета на месте |
| Generate instance | Клонирует шаблон-инстанс по строке датасета | Списки, таблицы и сетки карточек из N строк |
Apply Data
Apply Data исполняет правила маппинга и записывает значения dataset в совпавшие узлы Figma.
Пайплайн Apply
- Строится карта полей из всех маппингов (
Target Layer -> fields). - Собираются target-узлы в выбранном scope.
- Для каждого поля резолвится dataset (dataset поля -> dataset маппинга -> автоопределение).
- Считается row index (fill strategy + group fill mode + контекст выделения).
- Вычисляется expression и применяются директивы/картинки/текст.
- Выполняются post-pass этапы (если включены):
- Auto-hide unused
- Slot repeater
- Composition templates (
{{ ... }})
Scope
| Scope | Поведение |
|---|---|
selection | только выбранные корни и их потомки |
page | текущая страница |
document | все страницы |
selection — самый безопасный режим для быстрых итераций.
Порядок полей, если несколько маппингов пишут в один target
Apply приоритизирует поля так:
- группа
cell/table, - группы, начинающиеся с
cell/, - остальные поля (стабильно по mapping id).
Матрица обработки значений
| Входное значение | Target-узел | Результат |
|---|---|---|
| обычный текст | TEXT | обновляет characters |
| источник изображения | узел с поддержкой image fill | ставит IMAGE fill |
@prop:... | INSTANCE-контекст | устанавливает component properties |
@node:..., @hide, @show | узел / родительский контейнер | обновляет node-свойства |
@rows:N | контейнер с детьми | оставляет видимыми первые N детей |
| boolean-подобное значение | INSTANCE | устанавливает первое BOOLEAN component prop |
Auto-hide unused: фактическое поведение
Когда autoHideUnused=true и feature доступна:
- auto-hide запускается в границах конкретного row/container,
- скрываются неиспользованные TEXT-узлы в этой границе,
- узлы-цели маппинга и уже затронутые узлы защищены от скрытия,
- это не логика «скрыть, если значение пустое», а cleanup по mapping-target правилам.
Generate instance
Generate instance дублирует шаблон и применяет по одной строке dataset на каждую сгенерированную строку.
Preconditions
- Feature Generate должна быть включена.
- Должен быть выбран mapping (в picker попадают
.map.jsonс хотя бы одним полем). - Dataset для mapping должен содержать строки.
- Выделение должно быть валидным шаблонным контекстом (instance/component или frame/list host).
Количество строк
All: генерация на все строки dataset.Limit: генерацияmin(limit, datasetRows).
Общий flow генерации
- Резолвится container + template из текущего выделения.
- Опционально проверяется
Bind component(targetComponentKey). - Чистятся предыдущие siblings в container, сохраняется template anchor.
- Дублируются строки и вставляются по порядку.
- Выполняется Apply по сгенерированным строкам выбранным mapping.
- Разворачиваются composition templates (
{{...}}) построчно. - Сгенерированные узлы выделяются.
Стратегия дублирования
Frame/list host
- строка 1: существующий template,
- строка 2: клон template,
- строка 3+: клон предыдущей вставленной строки.
Slot host
- обычный slot mode: строка 2 от template, строка 3+ от предыдущей строки,
- table-row slot mode: каждая новая строка клонируется от предыдущей.
Такая стратегия нужна для стабильности во вложенных instance-деревьях.
Apply-фаза после Generate
Generate применяет:
- выбранный mapping к сгенерированным строкам,
- composition templates для каждой строки.
Другие mapping-файлы в текущем default-пайплайне автоматически не применяются.
Известные ограничения Figma (важно)
1) Ghost-строка во вложенных slot/table
Для глубоких структур вида WTable -> rows(SLOT) -> row(INSTANCE) Figma может оставлять одну master-наследованную строку, которую plugin API не может безопасно удалить.
Если cleanup не смог её убрать/скрыть, показывается разовое уведомление и нужна ручная очистка.
2) Порог производительности на глубоко вложенных instance
Запись текста в глубокие instance sublayer может быть очень медленной (сотни миллисекунд на ячейку), особенно в nested-table кейсах.
Для больших dataset по возможности используйте более плоские row-template структуры.
3) Доступность шрифтов
Плагин прогревает шрифты автоматически, но недоступный шрифт всё равно может блокировать обновление текста.
Практические рекомендации
- Начинайте с
Selectionscope для безопасной итерации. - Давайте слоям явные и уникальные target-имена.
- Включайте
Bind componentдля строгой валидации шаблона в Generate. - Для больших таблиц делите генерацию на батчи или упрощайте структуру строки.
- Уведомления про slot/table edge-cases считайте ограничением API, а не только ошибкой маппинга.
Связанные страницы
- Ключи, директивы, JSON-схемы: Файлы и маппинги
- Общий workflow: Обзор Database