@atezer/figma-mcp-bridge 1.9.7 → 1.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -0
- package/README.md +15 -3
- package/dist/core/bootstrap-injector.js +2 -2
- package/dist/core/embedded-skills.d.ts +5 -5
- package/dist/core/embedded-skills.d.ts.map +1 -1
- package/dist/core/embedded-skills.js +6 -5
- package/dist/core/embedded-skills.js.map +1 -1
- package/dist/core/plugin-bridge-connector.d.ts +5 -0
- package/dist/core/plugin-bridge-connector.d.ts.map +1 -1
- package/dist/core/plugin-bridge-connector.js +10 -0
- package/dist/core/plugin-bridge-connector.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.d.ts.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/local-plugin-only.d.ts.map +1 -1
- package/dist/local-plugin-only.js +406 -0
- package/dist/local-plugin-only.js.map +1 -1
- package/f-mcp-plugin/code.js +1 -1
- package/f-mcp-plugin/ui.html +2 -1
- package/package.json +1 -1
- package/skills/SKILL_INDEX.md +2 -1
- package/skills/ai-handoff-export/SKILL.md +31 -0
- package/skills/figma-a11y-audit/SKILL.md +26 -0
- package/skills/figma-prototype-flow/SKILL.md +315 -0
- package/skills/fmcp-intent-router/SKILL.md +1 -0
- package/skills/generate-figma-screen/SKILL.md +18 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: figma-prototype-flow
|
|
3
|
+
description: Üretilen Figma ekranları arasında otomatik prototip bağlantıları, animasyonlar ve flow starting point oluşturur. Screen envanteri → navigasyon haritası → reactions → validate → dokümantasyon. "prototip bağla", "ekranları bağla", "prototype connections", "flow oluştur", "navigasyon kur", "animasyon ekle", "interaction ekle" ifadeleriyle tetiklenir. F-MCP Bridge ve figma_create_prototype_connection gerektirir.
|
|
4
|
+
metadata:
|
|
5
|
+
mcp-server: user-figma-mcp-bridge
|
|
6
|
+
version: 1.9.9
|
|
7
|
+
personas:
|
|
8
|
+
- designer
|
|
9
|
+
- uidev
|
|
10
|
+
required_inputs:
|
|
11
|
+
- name: screen_scope
|
|
12
|
+
type: enum
|
|
13
|
+
options:
|
|
14
|
+
- "Tüm sayfa"
|
|
15
|
+
- "Seçili frame'ler"
|
|
16
|
+
- "Node ID listesi"
|
|
17
|
+
question: "Hangi ekranları bağlayalım?"
|
|
18
|
+
required: true
|
|
19
|
+
default: "Tüm sayfa"
|
|
20
|
+
- name: flow_name
|
|
21
|
+
type: string
|
|
22
|
+
question: "Flow adı ne olsun? (örn. 'Login Akışı')"
|
|
23
|
+
required: true
|
|
24
|
+
- name: starting_screen
|
|
25
|
+
type: node_id_or_auto
|
|
26
|
+
question: "Başlangıç ekranı hangisi? ('auto' derseniz ilk Login/Onboarding/Home tipindeki ekran seçilir.)"
|
|
27
|
+
required: false
|
|
28
|
+
default: "auto"
|
|
29
|
+
- name: animation_profile
|
|
30
|
+
type: enum
|
|
31
|
+
options:
|
|
32
|
+
- "Varsayılan (FUTURE.md animasyon tablosu)"
|
|
33
|
+
- "Hızlı (200ms EASE_OUT)"
|
|
34
|
+
- "Yumuşak (400ms GENTLE)"
|
|
35
|
+
- "Özel (her bağlantı için sor)"
|
|
36
|
+
required: false
|
|
37
|
+
default: "Varsayılan (FUTURE.md animasyon tablosu)"
|
|
38
|
+
- name: autonomy_mode
|
|
39
|
+
type: enum
|
|
40
|
+
options:
|
|
41
|
+
- "Otonom (varsayılan — kritik dallanmada sorar)"
|
|
42
|
+
- "Onaylı (her adımda kullanıcı onayı ister)"
|
|
43
|
+
required: false
|
|
44
|
+
default: "Otonom (varsayılan — kritik dallanmada sorar)"
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
# Figma Prototype Flow — Ekranlar Arası Navigasyon ve Animasyon
|
|
48
|
+
|
|
49
|
+
> **Otonom çalışma ilkesi (v1.9.9+):** Bu skill varsayılan olarak otonom çalışır. Screen envanteri, button text heuristic'i, animasyon eşleme ve bağlantı oluşturma kullanıcı onayı gerektirmeden yürütülür. Kullanıcıya yalnızca **kritik dallanma** noktalarında sorulur: (1) heuristic hedef çözümleyemediğinde, (2) 50+ bağlantı tespit edildiğinde, (3) orphan/circular overlay bulunduğunda, (4) `autonomy_mode=Onaylı` seçildiğinde her adımda.
|
|
50
|
+
|
|
51
|
+
## Overview
|
|
52
|
+
|
|
53
|
+
Bu skill, Figma sayfasındaki ekranlar (FRAME'ler) arasında prototip bağlantıları, animasyonlar ve flow starting point'i otomatik oluşturur. Figma Prototype panel'inin tüm özellikleri (9 trigger, 8 action, 9 transition tipi × 4 yön, 11 easing, scroll behavior, overlay ayarları) desteklenir.
|
|
54
|
+
|
|
55
|
+
**Temel ilke:** Kullanıcının ekranlarını tarar, button/link text'lerinden niyeti çıkarır, navigasyon haritasını üretir ve `setReactionsAsync` ile Figma reactions API'sini çağırır. Her şey plugin context'inde çalışır, REST API gerekmez.
|
|
56
|
+
|
|
57
|
+
## Skill Boundaries
|
|
58
|
+
|
|
59
|
+
- **Bu skill:** prototip bağlantı + animasyon + flow starting point + scroll behavior
|
|
60
|
+
- Ekran üretimi → [generate-figma-screen](../generate-figma-screen/SKILL.md)
|
|
61
|
+
- Code Connect eşlemesi → [code-design-mapper](../code-design-mapper/SKILL.md)
|
|
62
|
+
- A11y focus order → [figma-a11y-audit](../figma-a11y-audit/SKILL.md)
|
|
63
|
+
- Handoff diagram → [ai-handoff-export](../ai-handoff-export/SKILL.md)
|
|
64
|
+
|
|
65
|
+
## Prerequisites
|
|
66
|
+
|
|
67
|
+
- F-MCP Bridge plugin bağlı (`figma_get_status` yeşil dönmeli)
|
|
68
|
+
- Hedef sayfada en az 2 FRAME
|
|
69
|
+
- Ekranlar içinde Button/Link instance'ları isimlendirilmiş olmalı (navigasyon haritası için — isimlendirilmemiş jenerik Rectangle'lar yakalanmaz)
|
|
70
|
+
|
|
71
|
+
## F-MCP skill koordinasyonu
|
|
72
|
+
|
|
73
|
+
- **Önce:** `generate-figma-screen` veya `fmcp-screen-recipes` ile ekranlar üretilmiş olmalı
|
|
74
|
+
- **Birlikte:** `figma-canvas-ops` (her `figma_execute` öncesi zorunlu)
|
|
75
|
+
- **Sonra:** `figma-a11y-audit` (focus sırası cross-check), `ai-handoff-export` (flow diagram)
|
|
76
|
+
|
|
77
|
+
## Required Workflow
|
|
78
|
+
|
|
79
|
+
**Bu adımları sırayla uygula. Adım atlama.**
|
|
80
|
+
|
|
81
|
+
### Step 0: Ön koşullar ve Otonom Mod Ayarı
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
1. figma_get_status() → plugin bağlı mı?
|
|
85
|
+
2. .claude/design-systems/active-ds.md kontrolü (DS context bilgisi için)
|
|
86
|
+
3. autonomy_mode girdisini oku:
|
|
87
|
+
- "Otonom" → varsayılan, kritik dallanmalarda sor
|
|
88
|
+
- "Onaylı" → her Step sonunda kullanıcıya özet + AskUserQuestion
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 1: Screen Envanteri
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
// Plan A: figma_get_file_data(depth=1) ile üst seviye FRAME listesi
|
|
95
|
+
const data = await figma_get_file_data({ depth: 1, verbosity: "standard" });
|
|
96
|
+
// Plan B (daha zengin): figma_execute ile page.children filtrele
|
|
97
|
+
// return figma.currentPage.children.filter(c => c.type === "FRAME").map(f => ({ id: f.id, name: f.name, width: f.width, height: f.height }));
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Çıktı tablosu:
|
|
101
|
+
|
|
102
|
+
| # | Frame ID | Frame Adı | Rol Tahmini | Boyut |
|
|
103
|
+
|---|---|---|---|---|
|
|
104
|
+
| 1 | `1:2` | "Login / Mobile" | Login | 402×874 |
|
|
105
|
+
| 2 | `1:3` | "Home / Mobile" | Home | 402×874 |
|
|
106
|
+
| 3 | `1:4` | "Register" | Register | 402×874 |
|
|
107
|
+
|
|
108
|
+
**Rol tahmini regex'leri (case-insensitive):**
|
|
109
|
+
- Login: `/^(login|giriş|sign ?in)/i`
|
|
110
|
+
- Home / Dashboard: `/^(home|anasayfa|dashboard|main)/i`
|
|
111
|
+
- Register: `/^(register|kayıt|sign ?up)/i`
|
|
112
|
+
- ForgotPassword: `/^(forgot|şifre)/i`
|
|
113
|
+
- Check Email: `/^(check email|e-posta kontrol|onay)/i`
|
|
114
|
+
- Settings / Profile: `/^(settings|ayarlar|profile|profil)/i`
|
|
115
|
+
- Onboarding: `/^(onboard|welcome|hoşgeldin)/i`
|
|
116
|
+
|
|
117
|
+
Eşleşme yoksa rol = `Generic`; heuristic'te kullanıcıya sorulur.
|
|
118
|
+
|
|
119
|
+
### Step 2: Navigasyon Haritası (Heuristic-Based)
|
|
120
|
+
|
|
121
|
+
#### 2a. Etkileşimli eleman tespiti
|
|
122
|
+
|
|
123
|
+
Her frame içinde:
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
frame.findAll(n =>
|
|
127
|
+
(n.type === "INSTANCE" && /button|btn|cta|link|action/i.test((n.mainComponent?.name || n.name))) ||
|
|
128
|
+
(n.type === "TEXT" && n.parent?.type !== "TEXT" && /^(Giriş|Kayıt|Şifre|Devam|Geri|İptal|Tamam|Login|Sign|Back|Cancel|Submit|Continue)/i.test(n.characters || "")) ||
|
|
129
|
+
(n.type === "FRAME" && /clickable|hotspot|tappable/i.test(n.name))
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Button text'i: `button.findOne(t => t.type === "TEXT")?.characters` ile okunur.
|
|
134
|
+
|
|
135
|
+
#### 2b. Button text → hedef heuristic tablosu (TR + EN)
|
|
136
|
+
|
|
137
|
+
| Button text pattern (regex, case-insensitive) | Muhtemel hedef rol | Action | Transition |
|
|
138
|
+
|---|---|---|---|
|
|
139
|
+
| `^(giriş yap\|giriş\|login\|sign ?in)` | Home \| Dashboard \| Main | NAVIGATE | SLIDE_IN / RIGHT |
|
|
140
|
+
| `^(kayıt ol\|kayıt\|sign ?up\|register)` | Register \| SignUp | NAVIGATE | SLIDE_IN / RIGHT |
|
|
141
|
+
| `^(şifremi unuttum\|forgot)` | ForgotPassword | NAVIGATE | SLIDE_IN / RIGHT |
|
|
142
|
+
| `^(gönder\|submit\|send)` | Success \| Confirmation \| CheckEmail | NAVIGATE | SLIDE_IN / RIGHT |
|
|
143
|
+
| `^(geri\|back\|<)` | — (navigation history) | BACK | SLIDE_IN / LEFT |
|
|
144
|
+
| `^(iptal\|cancel\|×\|✕\|kapat\|close)` | — (overlay ise CLOSE, aksi BACK) | CLOSE / BACK | DISSOLVE |
|
|
145
|
+
| `^(devam\|continue\|ileri\|next)` | Sayfa sıralamasında sonraki frame | NAVIGATE | SLIDE_IN / RIGHT |
|
|
146
|
+
| `^(google ile\|facebook ile\|apple ile\|sign in with)` | Auth overlay | OVERLAY | DISSOLVE |
|
|
147
|
+
| `^(kaydet\|save\|onayla\|confirm)` | Success \| Confirmation | NAVIGATE | SLIDE_IN / RIGHT |
|
|
148
|
+
| `^(çıkış\|logout\|sign ?out)` | Login \| Landing | NAVIGATE | SLIDE_IN / LEFT |
|
|
149
|
+
| Hedef eşleşmiyor | — | **Kullanıcıya sor** (AskUserQuestion — kritik dallanma) | — |
|
|
150
|
+
|
|
151
|
+
#### 2c. Frame adı çözümleme
|
|
152
|
+
|
|
153
|
+
Heuristic'teki "Muhtemel hedef rol" → sayfadaki frame adıyla eşle:
|
|
154
|
+
- Regex: `home` → `/home|dashboard|anasayfa|main/i`
|
|
155
|
+
- TR↔EN yaklaşıklığı: `home ≈ anasayfa`, `register ≈ kayıt`, `success ≈ onay`
|
|
156
|
+
|
|
157
|
+
Eşleşme yoksa → `destination: "?"` → kullanıcıya sor (kritik dallanma).
|
|
158
|
+
|
|
159
|
+
#### 2d. Otonom mod davranışı
|
|
160
|
+
|
|
161
|
+
- **`autonomy_mode=Otonom` (varsayılan):** Heuristic %100 eşleşen bağlantılar otomatik uygulanır. Sadece `destination: "?"` olan satırlar için AskUserQuestion.
|
|
162
|
+
- **`autonomy_mode=Onaylı`:** Tüm harita markdown tablo olarak `AskUserQuestion` ile sunulur, kullanıcı satır-bazlı onaylar.
|
|
163
|
+
|
|
164
|
+
**Çıktı formatı (her iki modda gösterilir):**
|
|
165
|
+
```
|
|
166
|
+
| # | Kaynak | Button | → Hedef | Action | Transition | Mod |
|
|
167
|
+
|---|--------|--------|---------|--------|------------|-----|
|
|
168
|
+
| 1 | Login | "Giriş Yap" | Home | NAVIGATE | SLIDE_IN/RIGHT | auto |
|
|
169
|
+
| 2 | Login | "Kayıt Ol" | Register | NAVIGATE | SLIDE_IN/RIGHT | auto |
|
|
170
|
+
| 3 | Login | "Devam" | ? | ? | ? | ask |
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Step 3: Reactions Oluştur (Chunking Kuralı)
|
|
174
|
+
|
|
175
|
+
#### 3a. Ölçek tespiti
|
|
176
|
+
|
|
177
|
+
| Bağlantı sayısı | Strateji |
|
|
178
|
+
|---|---|
|
|
179
|
+
| ≤ 20 | Tek seferde hepsi, her 5 bağlantıda 1 micro-report |
|
|
180
|
+
| 21-50 | 10'lu chunk'lara böl, her chunk sonrası `figma_capture_screenshot` + progress |
|
|
181
|
+
| > 50 | **Kritik dallanma** — kullanıcıya sor: "Önce kritik flow'ları mı (Auth/Onboarding/Ana akış)?" |
|
|
182
|
+
| > 100 | **HARD STOP** — "Bu ölçekte batch modu gelecekte. Şimdi en kritik 50 bağlantıyı seç." |
|
|
183
|
+
|
|
184
|
+
#### 3b. Animasyon standartları (FUTURE.md:232-241)
|
|
185
|
+
|
|
186
|
+
| Geçiş | transitionType | direction | duration | easing | matchLayers |
|
|
187
|
+
|---|---|---|---|---|---|
|
|
188
|
+
| İleri navigasyon | `SLIDE_IN` | `RIGHT` | 300 | `EASE_OUT` | — |
|
|
189
|
+
| Geri navigasyon | `SLIDE_IN` | `LEFT` | 300 | `EASE_OUT` | — |
|
|
190
|
+
| Push ileri | `PUSH` | `RIGHT` | 300 | `EASE_OUT` | — |
|
|
191
|
+
| Modal açma | `DISSOLVE` | — | 200 | `EASE_IN` | — |
|
|
192
|
+
| Modal kapama | `DISSOLVE` | — | 150 | `EASE_OUT` | — |
|
|
193
|
+
| Smart variant | `SMART_ANIMATE` | — | 300 | `EASE_IN_AND_OUT` | `true` |
|
|
194
|
+
| Hover state | `SMART_ANIMATE` | — | 150 | `EASE_IN` | `true` |
|
|
195
|
+
| Press state | `SMART_ANIMATE` | — | 100 | `EASE_OUT` | `true` |
|
|
196
|
+
| Anlık | `INSTANT` | — | — | — | — |
|
|
197
|
+
|
|
198
|
+
#### 3c. Her bağlantı için tool çağrısı
|
|
199
|
+
|
|
200
|
+
```js
|
|
201
|
+
await figma_create_prototype_connection({
|
|
202
|
+
sourceNodeId: button.id,
|
|
203
|
+
destinationNodeId: homeFrame.id,
|
|
204
|
+
trigger: "ON_CLICK",
|
|
205
|
+
action: "NAVIGATE",
|
|
206
|
+
transitionType: "SLIDE_IN",
|
|
207
|
+
direction: "RIGHT",
|
|
208
|
+
duration: 300,
|
|
209
|
+
easing: "EASE_OUT"
|
|
210
|
+
});
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Çoklu trigger:** Aynı node'a birden fazla reaction gerekiyorsa (hover + click aynı button'da), default `replace: false` sayesinde append edilir.
|
|
214
|
+
|
|
215
|
+
### Step 4: Flow Starting Point
|
|
216
|
+
|
|
217
|
+
```js
|
|
218
|
+
// autonomy_mode=Otonom: starting_screen="auto" ise ilk Login/Onboarding/Home tipi frame seçilir
|
|
219
|
+
const start = startingScreen === "auto"
|
|
220
|
+
? screens.find(s => ["Login","Onboarding","Home"].includes(s.role)) || screens[0]
|
|
221
|
+
: screens.find(s => s.id === startingScreen);
|
|
222
|
+
|
|
223
|
+
await figma_set_flow_starting_point({
|
|
224
|
+
nodeId: start.id,
|
|
225
|
+
name: flowName,
|
|
226
|
+
description: `Auto-generated by figma-prototype-flow skill on ${new Date().toISOString()}`
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Step 5: Scroll Behavior (Opsiyonel)
|
|
231
|
+
|
|
232
|
+
Sayfada scroll gereken ekranlar varsa (uzun content, header'ı sticky yapılacak element):
|
|
233
|
+
|
|
234
|
+
```js
|
|
235
|
+
// Ana frame vertical scroll
|
|
236
|
+
await figma_set_scroll_behavior({ nodeId: frame.id, overflowDirection: "VERTICAL" });
|
|
237
|
+
// Header sticky
|
|
238
|
+
await figma_set_scroll_behavior({ nodeId: header.id, scrollBehavior: "FIXED" });
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Otonom modda: frame height > viewport height ise otomatik `overflowDirection: "VERTICAL"` öner.
|
|
242
|
+
|
|
243
|
+
### Step 6: Validasyon
|
|
244
|
+
|
|
245
|
+
```js
|
|
246
|
+
const audit = await figma_get_prototype_connections({ pageScope: true });
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Kontroller:
|
|
250
|
+
- Haritadaki her kaynağın `audit.connections[]` içinde en az 1 reaction'ı var mı?
|
|
251
|
+
- Tüm `destinationId`'ler hâlâ çözülüyor mu? (silinen frame → orphan)
|
|
252
|
+
- `audit.flowStartingPoints` doldu mu?
|
|
253
|
+
- Circular overlay var mı? — OVERLAY graph DFS, A→B→A kontrolü
|
|
254
|
+
|
|
255
|
+
Orphan veya circular bulunursa → **kritik dallanma**, kullanıcıya rapor.
|
|
256
|
+
|
|
257
|
+
### Step 7: Dokümantasyon
|
|
258
|
+
|
|
259
|
+
- `figma_capture_screenshot({ nodeId: pageRoot, scale: 1 })` ile flow overview
|
|
260
|
+
- JSON özet → `ai-handoff-export` ile uyumlu şekilde `prototypeFlow` anahtarı altında
|
|
261
|
+
- Mermaid `graph TD` diagram (handoff entegrasyonu için)
|
|
262
|
+
|
|
263
|
+
**Final Türkçe rapor:**
|
|
264
|
+
```
|
|
265
|
+
✅ Flow "Login Akışı" oluşturuldu
|
|
266
|
+
- 12 bağlantı (11 auto, 1 manual)
|
|
267
|
+
- Flow starting point: Login / Mobile
|
|
268
|
+
- Orphan reaction: 0
|
|
269
|
+
- Circular overlay: 0
|
|
270
|
+
- Screenshot: ~/.fmcp/screenshots/<timestamp>-<nodeId>.png
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Türkçe Karakter Kuralı (ZORUNLU)
|
|
274
|
+
|
|
275
|
+
Tüm çıktılarda Türkçe karakterler (ş, ç, ğ, ö, ü, ı, İ) doğru kullanılmalı. Her Write sonrası bozuk encoding kontrolü:
|
|
276
|
+
```bash
|
|
277
|
+
grep -P "[ÃÄ]" <dosya>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## Hata Yonetimi
|
|
281
|
+
|
|
282
|
+
| Err prefix | Neden | Ne yap |
|
|
283
|
+
|---|---|---|
|
|
284
|
+
| `SOURCE_NOT_FOUND` | sourceNodeId geçersiz | Node ID'yi doğrula, sayfa değişmiş olabilir |
|
|
285
|
+
| `DESTINATION_NOT_FOUND` | destinationNodeId geçersiz | Hedef frame silinmiş olabilir — haritayı yeniden oluştur |
|
|
286
|
+
| `DESTINATION_REQUIRED` | NAVIGATE/OVERLAY vb. için hedef verilmemiş | BACK/CLOSE/URL dışında destinationNodeId zorunlu |
|
|
287
|
+
| `NAVIGATE_REQUIRES_FRAME` | NAVIGATE hedefi FRAME değil | Hedef node'u FRAME'e çevir |
|
|
288
|
+
| `UNSUPPORTED_NODE_TYPE` | Source reactions desteklemiyor (SLICE/CONNECTOR) | FRAME/INSTANCE/COMPONENT/GROUP/SECTION kullan |
|
|
289
|
+
| `KEYCODES_REQUIRED` | ON_KEY_DOWN trigger için keyCodes eksik | En az 1 tuş kodu (örn. [13]=Enter) ver |
|
|
290
|
+
| `DIRECTION_REQUIRED` | DirectionalTransition için direction eksik | LEFT/RIGHT/TOP/BOTTOM ver |
|
|
291
|
+
| `NO_COMPONENT_SET` | Variant değişimi için COMPONENT_SET context yok | Instance'ın main component'i COMPONENT_SET içinde olmalı |
|
|
292
|
+
| `VARIANT_NOT_FOUND` | targetVariantName set içinde yok | `figma_get_component_for_development` ile variant adlarını doğrula |
|
|
293
|
+
| `FLOW_REQUIRES_FRAME` | Flow starting point FRAME olmalı | nodeId'yi FRAME olarak seç |
|
|
294
|
+
| `MISSING_SCOPE` | `figma_get_prototype_connections`'a ne nodeId ne pageScope verilmiş | En az birini belirt |
|
|
295
|
+
| `OVERFLOW_REQUIRES_FRAME_LIKE` | overflowDirection FRAME benzeri node gerektirir | FRAME/COMPONENT/COMPONENT_SET/INSTANCE kullan |
|
|
296
|
+
| `SCROLL_BEHAVIOR_UNSUPPORTED` | scrollBehavior node tipi desteklemiyor | SceneNode subtype kullan |
|
|
297
|
+
| `MISSING_PARAM` | `figma_set_scroll_behavior` — en az bir param gerekli | overflowDirection veya scrollBehavior ver |
|
|
298
|
+
|
|
299
|
+
## Çıktı Formatı
|
|
300
|
+
|
|
301
|
+
Her oturum sonunda kullanıcıya:
|
|
302
|
+
- Toplam bağlantı sayısı (auto + manual ayrımı)
|
|
303
|
+
- Flow starting point: ad + node id
|
|
304
|
+
- Validasyon raporu: orphan reactions, circular overlays, eksik bağlantılar
|
|
305
|
+
- Screenshot path: flow overview
|
|
306
|
+
- Animasyon kullanım özeti: kaç SLIDE_IN, kaç DISSOLVE, kaç SMART_ANIMATE
|
|
307
|
+
|
|
308
|
+
## Evolution Triggers
|
|
309
|
+
|
|
310
|
+
- Figma Plugin API yeni Transition tipi eklerse → `transitionType` enum'a ekle
|
|
311
|
+
- SET_VARIABLE / CONDITIONAL action v2'de desteklenecek → ayrı tool adı önerisi: figma\_create\_prototype\_variable\_action (gelecek sürüm, henüz YOK)
|
|
312
|
+
- ON_KEY_DOWN gamepad desteği gerekirse → `device` enum zaten mevcut (XBOX_ONE/PS4/SWITCH_PRO)
|
|
313
|
+
- `batch` modu eklenirse → 100+ bağlantı için performans iyileşir (şu an her çağrı tek reaction = N roundtrip)
|
|
314
|
+
- Smart Animate için otomatik child matching heuristics → kullanıcı matchLayers seçmek zorunda kalmaz
|
|
315
|
+
- Overlay preset konumlar (centered/top/bottom) — şu an sadece manual `overlayRelativePosition`
|
|
@@ -85,6 +85,7 @@ Kullanıcı talebini oku. Anahtar kelimeleri tara:
|
|
|
85
85
|
| "drift", "kod/tasarım sapması", "out of sync" | `design-drift-detector` |
|
|
86
86
|
| "UX copy", "microcopy", "buton metni", "empty state" | `ux-copy-guidance` |
|
|
87
87
|
| "bu görselden ilham al", "şu resim gibi", "link'teki tasarımdan", "dribbble/behance", "benchmark'tan varyasyon" | `inspiration-intake` → `generate-figma-screen` |
|
|
88
|
+
| "prototip bağla", "ekranları bağla", "prototype connections", "flow oluştur", "navigasyon kur", "animasyon ekle", "interaction ekle", "geçiş animasyonu", "scroll behavior" | `figma-prototype-flow` |
|
|
88
89
|
|
|
89
90
|
**Not (v1.8.3+):** `inspiration-intake` bir **ön-işleme** skill'idir. Kullanıcı bir Figma benchmark linki, internet görsel linki veya sohbete yüklenmiş görsel ile gelirse önce bu skill çalıştırılır (structural_intent JSON üretir, DEĞER çıkarmaz), sonra çıktısı `generate-figma-screen`'in `reference_benchmark` parametresine beslenir. v1.8.2 build-from-scratch kuralı ile tam uyumludur — clone değil, inspiration.
|
|
90
91
|
|
|
@@ -852,6 +852,24 @@ Ne yapayım?
|
|
|
852
852
|
❌ **YANLIŞ:** Alternatif N başarısız, sessizce N+1'e geç
|
|
853
853
|
✅ **DOĞRU:** N başarısız olunca orphan cleanup + rapor + checkpoint
|
|
854
854
|
|
|
855
|
+
### Step 6.7: Prototip Bağlantı Teklifi (Opsiyonel, v1.9.9+)
|
|
856
|
+
|
|
857
|
+
Oturumda **2 veya daha fazla frame üretildiyse** kullanıcıya öner:
|
|
858
|
+
|
|
859
|
+
```
|
|
860
|
+
"Bu oturumda X ekran ürettim (Login, Home, Register). Bunları birbirine bağlamak için
|
|
861
|
+
`figma-prototype-flow` skill'ini kullanabiliriz — otomatik navigasyon haritası çıkarır,
|
|
862
|
+
animasyon + flow starting point oluşturur.
|
|
863
|
+
|
|
864
|
+
Şimdi başlatayım mı? (Üretilen frame ID'leri hazır: 1:2, 1:3, 1:4)"
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
- **Skill-to-skill invoke YOK** — FMCP'de programatik skill tetikleme mekanizması yok. Kullanıcı onaylarsa Claude yeni bir intent olarak skill'i tetikler (`fmcp-intent-router` üzerinden).
|
|
868
|
+
- Kullanıcı evet derse: `screen_scope=Node ID listesi` parametresiyle, üretilen frame ID'lerini listele.
|
|
869
|
+
- Kullanıcı hayır veya sessiz kalırsa: önerme kaydedilir, Step 7'ye geç.
|
|
870
|
+
|
|
871
|
+
**Önkoşul:** Üretilen frame'lerin içinde en az 1 Button/Link instance'ı olmalı (aksi halde heuristic işe yaramaz).
|
|
872
|
+
|
|
855
873
|
### Step 7: Güncelleme Senaryosu
|
|
856
874
|
|
|
857
875
|
Mevcut bir ekranı güncellerken:
|