# Knowledge — Figma AI Plugin > Копилка находок и решений по проекту. Не наступай на грабли дважды. > Пополняется по ходу разработки. Формат: проблема → решение (+ контекст/ссылка). > Hermes имеет право править и дополнять этот файл самостоятельно (см. IDEA.md). ## Сборка / окружение ### Синхронизация билда на Matebook: архив должен сохранять `build/` - **Симптом:** архив на Matebook есть, но Figma продолжает показывать старую версию. - **Причина:** flat-архив, созданный через `zip -j`, складывает `main.js` и `ui.js` в корень. Распаковка обновляет `manifest.json`, но не заменяет `D:\Figma Plugins\figma-ai-plugin\build\main.js` и `build\ui.js`, на которые ссылается манифест. - **Решение:** архивировать из корня проекта с путями (`tar czf /tmp/figma-ai-plugin.tar.gz --exclude=node_modules --exclude=.git .`), проверить список файлов, затем распаковать в целевую папку. Для zip использовать `zip -r`, не `zip -j`. После распаковки сверить SHA-256 локальных и удалённых `build/main.js`, `build/ui.js`, `manifest.json`; дополнительно проверить маркер `0.1.N` в удалённом `build/ui.js`. - **Проверка цели:** наличие архива в `C:\Users\risow\Downloads` не является успешным деплоем. Успешный deploy подтверждается только файлами в `D:\Figma Plugins\figma-ai-plugin\build\`. - **Ссылка:** IDEA.md, раздел «Рабочий флоу». ### TypeScript 7.x ломает `@create-figma-plugin/build` - **Симптом:** `TypeError: Cannot read properties of undefined (reading 'getCurrentDirectory')` при `build-figma-plugin`. - **Причина:** `build-figma-plugin` ожидает `ts.sys`, которого нет в TS 7. - **Решение:** зафиксировать `typescript` на `~5.6.3` в `package.json` devDependencies. - **Ссылка:** package.json ### tsconfig: не оверрайдить `jsx` на `react-jsx` - **Симптом:** `error TS5089: Option 'jsxFactory' cannot be specified when option 'jsx' is 'react-jsx'`. - **Причина:** базовый `@create-figma-plugin/tsconfig` уже задаёт `jsx: react` + `jsxFactory: h`. - **Решение:** в проектном tsconfig только `extends` + добавляем `lib`/`types`. Не трогать `jsx`/`jsxFactory`. Preact `h` уже импортируется в `ui.tsx`. - **Ссылка:** tsconfig.json ### `Text muted` не существует — используй `Muted` - **Симптом:** `Property 'muted' does not exist on type ... Text`. - **Решение:** для приглушённого текста брать компонент `` из `@create-figma-plugin/ui`, а не проп `muted` у ``. - **Ссылка:** src/ui.tsx ### Кнопка-иконка рядом с другими IconButton — бери РОДНУЮ иконку, не инлайн-SVG - **Симптом:** иконка копирования рядом с кнопкой развернуть выглядит «другого размера»/тоньше, хотя `viewBox` один (`24×24`). - **Причина:** `IconButton` из `@create-figma-plugin/ui` оборачивает иконку в `
` (`position:absolute`, БЕЗ задания размера) — размер берётся целиком из самой SVG. Родные иконки сета (`IconExpand24`, `IconCheck24`, `IconCopySmall24` и т.п.) — **залитые** (`fill="currentColor"`). Моя инлайн-SVG была **контурной** (`stroke`, `fill="none"`, `stroke-width=2`) — на том же `24×24` viewBox контурные lucide-иконки визуально кажутся меньше и легче, чем залитые соседки. Отсюда ощущение «разные размеры». - **Правило (как делать правильно):** 1. Рядом с `IconButton` НИКОГДА не ставить текстовую `