7.3 KiB
7.3 KiB
Knowledge — Figma AI Plugin
Копилка находок и решений по проекту. Не наступай на грабли дважды. Пополняется по ходу разработки. Формат: проблема → решение (+ контекст/ссылка). Hermes имеет право править и дополнять этот файл самостоятельно (см. 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.jsondevDependencies. - Ссылка: 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. Preacthуже импортируется вui.tsx. - Ссылка: tsconfig.json
Text muted не существует — используй Muted
- Симптом:
Property 'muted' does not exist on type ... Text. - Решение: для приглушённого текста брать компонент
<Muted>из@create-figma-plugin/ui, а не пропmutedу<Text>. - Ссылка: src/ui.tsx
Кнопка-иконка рядом с другими IconButton — бери РОДНУЮ иконку, не инлайн-SVG
- Симптом: иконка копирования рядом с кнопкой развернуть выглядит «другого размера»/тоньше, хотя
viewBoxодин (24×24). - Причина:
IconButtonиз@create-figma-plugin/uiоборачивает иконку в<div class="icon">(position:absolute, БЕЗ задания размера) — размер берётся целиком из самой SVG. Родные иконки сета (IconExpand24,IconCheck24,IconCopySmall24и т.п.) — залитые (fill="currentColor"). Моя инлайн-SVG была контурной (stroke,fill="none",stroke-width=2) — на том же24×24viewBox контурные lucide-иконки визуально кажутся меньше и легче, чем залитые соседки. Отсюда ощущение «разные размеры». - Правило (как делать правильно):
- Рядом с
IconButtonНИКОГДА не ставить текстовую<Button>с лейблом — толькоIconButton(пользователь прямо сказал: "Очевидно же, что там достаточно кнопки иконки"). - Брать иконку из родного сета
@create-figma-plugin/ui(он же — адаптация lucide, залитые 24px):IconCopySmall24,IconDuplicateSmall24,IconClipboardSmall24,IconCheck24,IconExpand24и т.д. — гарантированно совпадёт по габариту и весу с соседями. - Если нужной иконки в сете нет (напр. copy/clipboard там только 16px
-small), и ты делаешь инлайн-SVG — делай её залитой (fill="currentColor", безstroke),width/height=24,viewBox="0 0 24 24, чтобы вес совпал с родными. Контурные (stroke) иконки lucide рядом с залитыми соседями НЕ класть. - Подтверждение действия (копирование) — переключать иконку на
IconCheck24на ~1.2 с, без текстовой подписи.
- Рядом с
- Ссылка: node_modules/@create-figma-plugin/ui/lib/components/icon-button/icon-button.module.css (
.iconбез размера), icon-24/icon-*-24.js (залитые SVG), src/ui.tsx (кнопки в тулбаре).
Плагин не запускается в Figma — нет папки build/ на Matebook
- Симптом: плагин не открывается / Figma молча ничего не делает при Run (ошибка не всегда видна).
- Причина:
manifest.jsonуказываетmain: build/main.jsиui: build/ui.js, но в скопированной на Matebook папке папкиbuild/нет (старая команда синхронизации исключала её через--exclude build). - Решение: пересобрать на VPS (
npm run build) и залить на Matebook ВЕСЬ проект вместе сbuild/— исключать толькоnode_modulesи.git(они для запуска в Figma не нужны, Figma исполняет собранныеbuild/*.js). После распаковки проверить наличиеbuild/main.jsиbuild/ui.js. - Ссылка: IDEA.md (раздел «Рабочий флоу», шаг 4), этот файл (раздел синхронизации через tar).
Рабочий флоу (VPS → Matebook → Figma)
Копия на Matebook через tar (rsync/scp с пробелами в пути падают)
- Симптом:
rsync: command not found(на Windows),scp: ambiguous target(пробел в пути). - Решение:
- На VPS:
npm run build(обязательно — иначе нет папкиbuild/) - На VPS:
tar czf /tmp/x.tar.gz --exclude node_modules --exclude .git .←build/НЕ исключать! scp /tmp/x.tar.gz risow@10.200.201.5:D:/x.tar.gz- На Matebook (PowerShell):
Set-Location 'D:/Figma Plugins/figma-ai-plugin'; tar xzf 'D:/x.tar.gz'
- На VPS:
- Ловушка: старая команда исключала
--exclude build→ в папке плагина на Matebook не былоbuild/, и Figma не находилаbuild/main.js/build/ui.js→ плагин не запускался. См. gotcha «Плагин не запускается — нетbuild/». - Ссылка: IDEA.md (раздел «Рабочий флоу»)
Gitea push через токен в URL
- Симптом:
could not read Usernameприgit push(нет credential helper). - Решение: remote как
http://<TOKEN>:@<host>/admin/figma-ai-plugin.git. Токен должен иметь scopewrite:repository(безwrite:userсоздать репо нельзя — создавать через basic auth admin-ом). - Ссылка: IDEA.md, Gitea http://x1qnvk08zec2u5cx6yh5iexh.155.212.186.39.sslip.io/admin/figma-ai-plugin
Ресурсы (не терять)
- UI Storybook: https://yuanqing.github.io/create-figma-plugin/ui/
- Figma Plugin API docs: https://www.figma.com/plugin-docs/
- Исходный плагин «AI assistant» (движок):
D:\YandexDisk\Figma Plugins DEVs\AI assistant(Matebook)