@atezer/figma-mcp-bridge 1.7.23 → 1.7.25
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/.claude-plugin/plugin.json +37 -0
- package/.cursor-plugin/plugin.json +21 -0
- package/CHANGELOG.md +30 -0
- package/README.md +4 -3
- package/agents/ds-auditor.md +29 -0
- package/agents/screen-builder.md +29 -0
- package/agents/token-syncer.md +26 -0
- package/assets/logo.png +0 -0
- package/commands/add-library.md +122 -0
- package/commands/ds-add.md +255 -0
- package/commands/ds-sync.md +314 -0
- package/commands/implement.md +43 -0
- package/commands/install-library.md +73 -0
- package/commands/setup.md +26 -0
- package/commands/test.md +39 -0
- package/commands/update.md +25 -0
- package/dist/core/config.d.ts +1 -5
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -111
- package/dist/core/config.js.map +1 -1
- package/dist/core/plugin-bridge-server.d.ts.map +1 -1
- package/dist/core/plugin-bridge-server.js +1 -2
- package/dist/core/plugin-bridge-server.js.map +1 -1
- package/dist/core/response-guard.d.ts +1 -1
- package/dist/core/response-guard.js +1 -1
- package/dist/core/types/index.d.ts +2 -98
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/local-plugin-only.d.ts.map +1 -1
- package/dist/local-plugin-only.js +14 -13
- package/dist/local-plugin-only.js.map +1 -1
- package/f-mcp-plugin/README.md +8 -15
- package/f-mcp-plugin/manifest.json +1 -3
- package/hooks/hooks.json +26 -0
- package/package.json +15 -31
- package/skills/BRAND_PROFILE_SCHEMA.md +113 -0
- package/skills/SKILL_INDEX.md +194 -0
- package/skills/TOOL_MAPPING.md +111 -0
- package/skills/ai-handoff-export/SKILL.md +254 -0
- package/skills/apply-figma-design-system/SKILL.md +104 -0
- package/skills/audit-figma-design-system/SKILL.md +278 -0
- package/skills/code-design-mapper/SKILL.md +370 -0
- package/skills/component-documentation/SKILL.md +190 -0
- package/skills/design-drift-detector/SKILL.md +407 -0
- package/skills/design-system-rules/SKILL.md +407 -0
- package/skills/design-token-pipeline/SKILL.md +619 -0
- package/skills/ds-impact-analysis/SKILL.md +266 -0
- package/skills/figjam-diagram-builder/SKILL.md +172 -0
- package/skills/figma-a11y-audit/SKILL.md +587 -0
- package/skills/figma-canvas-ops/SKILL.md +325 -0
- package/skills/figma-screen-analyzer/SKILL.md +235 -0
- package/skills/fix-figma-design-system-finding/SKILL.md +117 -0
- package/skills/fmcp-project-rules/SKILL.md +93 -0
- package/skills/generate-figma-library/SKILL.md +598 -0
- package/skills/generate-figma-screen/SKILL.md +689 -0
- package/skills/implement-design/SKILL.md +473 -0
- package/skills/ux-copy-guidance/SKILL.md +373 -0
- package/skills/visual-qa-compare/SKILL.md +166 -0
- package/dist/browser/base.d.ts +0 -50
- package/dist/browser/base.d.ts.map +0 -1
- package/dist/browser/base.js +0 -6
- package/dist/browser/base.js.map +0 -1
- package/dist/browser/local.d.ts +0 -81
- package/dist/browser/local.d.ts.map +0 -1
- package/dist/browser/local.js +0 -283
- package/dist/browser/local.js.map +0 -1
- package/dist/core/console-monitor.d.ts +0 -82
- package/dist/core/console-monitor.d.ts.map +0 -1
- package/dist/core/console-monitor.js +0 -428
- package/dist/core/console-monitor.js.map +0 -1
- package/dist/core/design-system-manifest.d.ts +0 -272
- package/dist/core/design-system-manifest.d.ts.map +0 -1
- package/dist/core/design-system-manifest.js +0 -261
- package/dist/core/design-system-manifest.js.map +0 -1
- package/dist/core/enrichment/enrichment-service.d.ts +0 -52
- package/dist/core/enrichment/enrichment-service.d.ts.map +0 -1
- package/dist/core/enrichment/enrichment-service.js +0 -272
- package/dist/core/enrichment/enrichment-service.js.map +0 -1
- package/dist/core/enrichment/index.d.ts +0 -8
- package/dist/core/enrichment/index.d.ts.map +0 -1
- package/dist/core/enrichment/index.js +0 -8
- package/dist/core/enrichment/index.js.map +0 -1
- package/dist/core/enrichment/relationship-mapper.d.ts +0 -106
- package/dist/core/enrichment/relationship-mapper.d.ts.map +0 -1
- package/dist/core/enrichment/relationship-mapper.js +0 -352
- package/dist/core/enrichment/relationship-mapper.js.map +0 -1
- package/dist/core/enrichment/style-resolver.d.ts +0 -80
- package/dist/core/enrichment/style-resolver.d.ts.map +0 -1
- package/dist/core/enrichment/style-resolver.js +0 -327
- package/dist/core/enrichment/style-resolver.js.map +0 -1
- package/dist/core/figma-api.d.ts +0 -137
- package/dist/core/figma-api.d.ts.map +0 -1
- package/dist/core/figma-api.js +0 -274
- package/dist/core/figma-api.js.map +0 -1
- package/dist/core/figma-desktop-connector.d.ts +0 -242
- package/dist/core/figma-desktop-connector.d.ts.map +0 -1
- package/dist/core/figma-desktop-connector.js +0 -1042
- package/dist/core/figma-desktop-connector.js.map +0 -1
- package/dist/core/figma-reconstruction-spec.d.ts +0 -162
- package/dist/core/figma-reconstruction-spec.d.ts.map +0 -1
- package/dist/core/figma-reconstruction-spec.js +0 -387
- package/dist/core/figma-reconstruction-spec.js.map +0 -1
- package/dist/core/figma-tools.d.ts +0 -21
- package/dist/core/figma-tools.d.ts.map +0 -1
- package/dist/core/figma-tools.js +0 -2920
- package/dist/core/figma-tools.js.map +0 -1
- package/dist/core/snippet-injector.d.ts +0 -24
- package/dist/core/snippet-injector.d.ts.map +0 -1
- package/dist/core/snippet-injector.js +0 -97
- package/dist/core/snippet-injector.js.map +0 -1
- package/dist/core/types/enriched.d.ts +0 -213
- package/dist/core/types/enriched.d.ts.map +0 -1
- package/dist/core/types/enriched.js +0 -6
- package/dist/core/types/enriched.js.map +0 -1
- package/dist/local.d.ts +0 -73
- package/dist/local.d.ts.map +0 -1
- package/dist/local.js +0 -2605
- package/dist/local.js.map +0 -1
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-copy-guidance
|
|
3
|
+
description: UX yazarlık rehberi — CTA, hata mesajı, boş durum, onay diyaloğu, başarı mesajı ve yükleme durumu için copy kalıpları üretir. Marka ses/ton profili ile kişiselleştirir. Figma text node'larına doğrudan uygulayabilir. "UX copy yaz", "buton metni ne olsun", "hata mesajı", "empty state copy", "boş durum metni", "copy kılavuzu", "marka sesi", "ton rehberi", "microcopy" ifadeleriyle tetiklenir. F-MCP Bridge plugin bağlantısı gerektirir (Figma entegrasyonu için).
|
|
4
|
+
metadata:
|
|
5
|
+
mcp-server: user-figma-mcp-bridge
|
|
6
|
+
personas:
|
|
7
|
+
- designer
|
|
8
|
+
- uidev
|
|
9
|
+
- po
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# UX Copy Guidance — Yazarlık ve Marka Sesi Rehberi
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Bu skill, arayüz metinlerini (microcopy) tasarım prensipleri ve marka sesiyle uyumlu şekilde üretir veya değerlendirir. Figma text node'larına doğrudan uygulayabilir.
|
|
17
|
+
|
|
18
|
+
**Okuma + Yazma** — Onay ile Figma text node'larını güncelleyebilir.
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- F-MCP Bridge plugin bağlı olmalı (Figma entegrasyonu için)
|
|
23
|
+
- İsteğe bağlı: Proje kökünde `.fmcp-brand-profile.json` (marka kişiselleştirmesi)
|
|
24
|
+
|
|
25
|
+
## F-MCP skill koordinasyonu
|
|
26
|
+
|
|
27
|
+
- **Referans veren skill'ler:**
|
|
28
|
+
- `ai-handoff-export` → İçerik Spesifikasyonları bölümü bu skill'e yönlendirir
|
|
29
|
+
- `figma-screen-analyzer` → Copy kalitesi değerlendirmesinde bu skill'in prensiplerini uygular
|
|
30
|
+
- `component-documentation` → Bileşen label/placeholder copy'si bu skill'in kalıplarını kullanır
|
|
31
|
+
- `generate-figma-screen` → Text node oluştururken bu skill'in kalıplarını kullanır
|
|
32
|
+
- **Profil oluşturma:** Bu skill profil yoksa otomatik oluşturma akışı başlatır
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 5 Temel Prensip
|
|
37
|
+
|
|
38
|
+
Her arayüz metni bu 5 prensibe uygun olmalıdır:
|
|
39
|
+
|
|
40
|
+
| # | Prensip | Açıklama | Örnek |
|
|
41
|
+
|---|---------|----------|-------|
|
|
42
|
+
| 1 | **Anlaşılır** | Jargon yok, belirsizlik yok, açık söyle | "Dosyayı kaldır" ✓ — "Öğeyi kuyruğunuzdan çıkarın" ✗ |
|
|
43
|
+
| 2 | **Kısa** | Tam anlamı en az kelimeyle ifade et | "Kaydet" ✓ — "Değişikliklerinizi kaydetmek için tıklayın" ✗ |
|
|
44
|
+
| 3 | **Tutarlı** | Aynı kavram her yerde aynı terim | "Sil" her yerde "sil" — bazen "kaldır" bazen "çıkar" değil |
|
|
45
|
+
| 4 | **Faydalı** | Her kelime kullanıcının hedefine hizmet etsin | Hata mesajında çözüm yolu ✓ — sadece "Hata oluştu" ✗ |
|
|
46
|
+
| 5 | **İnsanca** | Yardımsever bir insan gibi yaz, robot gibi değil | "Bir sorun oluştu" ✓ — "Exception 403: Forbidden" ✗ |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Kopya Kalıpları
|
|
51
|
+
|
|
52
|
+
### CTA (Call to Action)
|
|
53
|
+
|
|
54
|
+
**Formül:** Fiille başla + spesifik ol + sonuca eşle
|
|
55
|
+
|
|
56
|
+
| Doğru | Yanlış | Neden |
|
|
57
|
+
|-------|--------|-------|
|
|
58
|
+
| Hesap oluştur | Gönder | Sonuç belirsiz |
|
|
59
|
+
| Ücretsiz dene | Başla | Ne başlıyor? |
|
|
60
|
+
| Raporu indir | Tamam | Eylem belirsiz |
|
|
61
|
+
| Değişiklikleri kaydet | İleri | Ne olacak? |
|
|
62
|
+
|
|
63
|
+
**Kurallar:**
|
|
64
|
+
- Max uzunluk: `.fmcp-brand-profile.json` → `copyRules.maxCTALength` (varsayılan: 24 karakter)
|
|
65
|
+
- Kaçınılacak kelimeler: `.fmcp-brand-profile.json` → `copyRules.avoidWords`
|
|
66
|
+
- Tercih edilecek kelimeler: `.fmcp-brand-profile.json` → `copyRules.preferWords`
|
|
67
|
+
|
|
68
|
+
### Hata Mesajları
|
|
69
|
+
|
|
70
|
+
**Formül:** Ne oldu + Neden + Nasıl düzeltilir
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
"Ödeme reddedildi. Bankanız kartı onaylamadı. Farklı bir kart deneyin veya bankanızla iletişime geçin."
|
|
74
|
+
───────────── ────────────────────── ─────────────────────────────────────────────────────
|
|
75
|
+
Ne oldu Neden Nasıl düzeltilir
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
| Durum | Örnek |
|
|
79
|
+
|-------|-------|
|
|
80
|
+
| Doğrulama hatası | "E-posta adresi geçersiz. Lütfen @ işareti içeren bir adres girin." |
|
|
81
|
+
| Sunucu hatası | "Bir sorun oluştu. Birkaç dakika sonra tekrar deneyin." |
|
|
82
|
+
| Bağlantı hatası | "İnternet bağlantınız kesildi. Bağlantınızı kontrol edip tekrar deneyin." |
|
|
83
|
+
| Yetki hatası | "Bu sayfaya erişim izniniz yok. Yöneticinizden izin isteyin." |
|
|
84
|
+
|
|
85
|
+
**Ton:** `.fmcp-brand-profile.json` → `copyRules.errorTone`
|
|
86
|
+
- `empathetic-actionable` (varsayılan): Empatik + çözüm odaklı
|
|
87
|
+
- `technical`: Doğrudan teknik bilgi
|
|
88
|
+
- `minimal`: Sadece gerekli bilgi
|
|
89
|
+
|
|
90
|
+
### Boş Durumlar (Empty State)
|
|
91
|
+
|
|
92
|
+
**Formül:** Bu ne + Neden boş + Nasıl başlanır
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
"Henüz proje yok. İlk projenizi oluşturarak ekibinizle çalışmaya başlayın."
|
|
96
|
+
────────────── ──────────────────────────────────────────────────────
|
|
97
|
+
Bu ne + neden boş Nasıl başlanır
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
| Durum | Örnek |
|
|
101
|
+
|-------|-------|
|
|
102
|
+
| İlk kullanım | "Henüz mesaj yok. İlk mesajınızı gönderin!" |
|
|
103
|
+
| Arama sonuçsuz | "Sonuç bulunamadı. Farklı anahtar kelimelerle deneyin." |
|
|
104
|
+
| Filtre sonuçsuz | "Bu filtreyle eşleşen öğe yok. Filtreleri temizleyin." |
|
|
105
|
+
| Silme sonrası | "Tüm bildirimler okundu. Yeni bildirimler burada görünecek." |
|
|
106
|
+
|
|
107
|
+
### Onay Diyalogları
|
|
108
|
+
|
|
109
|
+
**Formül:** Eylemi netleştir + sonuçları belirt + butonlara eylem fiili
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Başlık: "3 dosya silinsin mi?"
|
|
113
|
+
Açıklama: "Bu işlem geri alınamaz. Silinen dosyalar çöp kutusuna taşınmaz."
|
|
114
|
+
Butonlar: [ Dosyaları sil ] [ Vazgeç ]
|
|
115
|
+
✓ Eylem fiili ✓ Net
|
|
116
|
+
YANLIŞ: [ Tamam ] [ İptal ]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| Durum | Başlık | Açıklama | Butonlar |
|
|
120
|
+
|-------|--------|----------|----------|
|
|
121
|
+
| Silme | "3 dosya silinsin mi?" | "Bu geri alınamaz" | Sil / Vazgeç |
|
|
122
|
+
| Çıkış | "Kaydedilmemiş değişiklikler var" | "Çıkarsanız değişiklikler kaybolur" | Kaydetmeden çık / Kaydet |
|
|
123
|
+
| Yayın | "Makale yayınlansın mı?" | "Yayın sonrası herkes görebilir" | Yayınla / Geri dön |
|
|
124
|
+
|
|
125
|
+
### Başarı Mesajları
|
|
126
|
+
|
|
127
|
+
**Formül:** Kısa kutla + sonraki adım (isteğe bağlı)
|
|
128
|
+
|
|
129
|
+
| Durum | Örnek |
|
|
130
|
+
|-------|-------|
|
|
131
|
+
| Kaydetme | "Değişiklikler kaydedildi." |
|
|
132
|
+
| Oluşturma | "Proje oluşturuldu. Ekip üyelerini davet edebilirsiniz." |
|
|
133
|
+
| Gönderme | "Mesaj gönderildi." |
|
|
134
|
+
| Silme | "Dosya silindi." (nötr ton — kutlama yok) |
|
|
135
|
+
|
|
136
|
+
### Yükleme Durumları
|
|
137
|
+
|
|
138
|
+
**Formül:** Ne yapılıyor + beklenti süresi (uzunsa)
|
|
139
|
+
|
|
140
|
+
| Süre | Örnek |
|
|
141
|
+
|------|-------|
|
|
142
|
+
| 1-3 sn | "Yükleniyor..." (spinner yeterli) |
|
|
143
|
+
| 3-10 sn | "Raporunuz hazırlanıyor..." |
|
|
144
|
+
| >10 sn | "Bu birkaç dakika sürebilir. Sayfayı kapatmayın." |
|
|
145
|
+
| Belirsiz | "İşleminiz sıraya alındı. Tamamlandığında bildirim alacaksınız." |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Ses ve Ton Rehberi
|
|
150
|
+
|
|
151
|
+
### Varsayılan Ton Matrisi
|
|
152
|
+
|
|
153
|
+
| Bağlam | Ton | Örnek |
|
|
154
|
+
|--------|-----|-------|
|
|
155
|
+
| **Başarı** | Kutlayıcı ama abartısız | "Harika! Profiliniz güncellendi." |
|
|
156
|
+
| **Hata** | Empatik + aksiyon odaklı | "Bir sorun oluştu. Tekrar deneyebilirsiniz." |
|
|
157
|
+
| **Uyarı** | Net + acil | "Dikkat: Bu işlem geri alınamaz." |
|
|
158
|
+
| **Nötr** | Bilgilendirici + kısa | "Son güncelleme: 5 dakika önce." |
|
|
159
|
+
| **Onboarding** | Teşvik edici + yönlendirici | "İlk adım: Profilinizi tamamlayın." |
|
|
160
|
+
| **Tebrik** | Sıcak ama profesyonel | "Tebrikler! İlk projenizi oluşturdunuz." |
|
|
161
|
+
|
|
162
|
+
### Marka Profili ile Kişiselleştirme
|
|
163
|
+
|
|
164
|
+
Proje kökünde `.fmcp-brand-profile.json` varsa:
|
|
165
|
+
|
|
166
|
+
1. **`voiceTone.personality`** → Ton kalibrasyonu:
|
|
167
|
+
- `["samimi", "cesur"]` → kısa, direkt, enerjik
|
|
168
|
+
- `["profesyonel", "güvenilir"]` → formel, ölçülü, sakin
|
|
169
|
+
- `["playful", "genç"]` → emoji uygun, günlük dil, cesur kısaltmalar
|
|
170
|
+
|
|
171
|
+
2. **`voiceTone.formality`** → Kelime seçimi:
|
|
172
|
+
- `formal`: "İşleminiz başarıyla tamamlanmıştır."
|
|
173
|
+
- `semi-formal`: "İşlem tamamlandı."
|
|
174
|
+
- `casual`: "Tamam, bitti!"
|
|
175
|
+
|
|
176
|
+
3. **`voiceTone.humor`** → Humor seviyesi:
|
|
177
|
+
- `none`: Asla espri veya şaka tonu
|
|
178
|
+
- `subtle`: Hafif sıcaklık, ince humor ("Harika iş!")
|
|
179
|
+
- `playful`: Emoji, şakacı ton ("Boom! Proje hazır 🚀")
|
|
180
|
+
|
|
181
|
+
4. **`voiceTone.examples`** → Gerçek örnekleri ton referansı olarak kullan
|
|
182
|
+
|
|
183
|
+
### Profil Yoksa: Otomatik Oluşturma Akışı
|
|
184
|
+
|
|
185
|
+
`.fmcp-brand-profile.json` dosyası bulunamadığında, kullanıcıya 3 soru sor:
|
|
186
|
+
|
|
187
|
+
**Soru 1:** "Markanız bir insan olsa nasıl konuşurdu? 3 sıfatla tanımlayın."
|
|
188
|
+
- Örnek: samimi, cesur, profesyonel
|
|
189
|
+
|
|
190
|
+
**Soru 2:** "Formallik seviyesi?"
|
|
191
|
+
- Formal (kurumsal, mesafeli)
|
|
192
|
+
- Yarı-formal (profesyonel ama sıcak)
|
|
193
|
+
- Casual (arkadaşça, günlük)
|
|
194
|
+
|
|
195
|
+
**Soru 3:** "Bir başarı mesajı örneği verin (uygulamanızda kullanılmış veya hayal ettiğiniz)."
|
|
196
|
+
- Örnek: "Harika! Profilin güncellendi."
|
|
197
|
+
|
|
198
|
+
Cevaplardan minimal `.fmcp-brand-profile.json` oluştur ve proje köküne kaydet.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Çok Dilli / i18n Kuralları
|
|
203
|
+
|
|
204
|
+
Çoklu dil desteği olan projelerde copy üretirken:
|
|
205
|
+
|
|
206
|
+
### Metin Uzunluğu Farkları
|
|
207
|
+
|
|
208
|
+
| Dil | Türkçeye göre uzunluk farkı |
|
|
209
|
+
|-----|----------------------------|
|
|
210
|
+
| Almanca | %20-40 daha uzun |
|
|
211
|
+
| Fince | %20-30 daha uzun |
|
|
212
|
+
| İngilizce | %10-20 daha kısa |
|
|
213
|
+
| Japonca/Çince | %30-50 daha kısa (karakter bazlı) |
|
|
214
|
+
| Arapça | Benzer uzunluk ama RTL layout |
|
|
215
|
+
|
|
216
|
+
**Kural:** En uzun dili (`.fmcp-brand-profile.json` → `i18n.longestLocale`) baz alarak tasarımda truncation planla.
|
|
217
|
+
|
|
218
|
+
### RTL (Sağdan Sola) Desteği
|
|
219
|
+
|
|
220
|
+
- Arapça, İbranice, Farsça: layout tamamen ayna
|
|
221
|
+
- İkonlar: yön belirten ikonlar (ok, geri/ileri) ters çevrilmeli
|
|
222
|
+
- Sayılar: RTL dillerde de soldan sağa yazılır (istisna)
|
|
223
|
+
|
|
224
|
+
### Kültür-Nötr Dil
|
|
225
|
+
|
|
226
|
+
- Metafor ve deyimlerden kaçın ("taşı gediğine koymak" → "düzeltmek")
|
|
227
|
+
- Kültüre bağlı emoji dikkatli kullan (🙏 bazı kültürlerde "teşekkür", bazılarında "dua")
|
|
228
|
+
- Tarih formatı: yerelleştir (TR: 07.04.2026, US: 04/07/2026, ISO: 2026-04-07)
|
|
229
|
+
- Para birimi: sembol + format yerelleştir (₺1.234,56 vs $1,234.56)
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Figma Entegrasyonu
|
|
234
|
+
|
|
235
|
+
### Tekli Text Node Güncelleme
|
|
236
|
+
|
|
237
|
+
```js
|
|
238
|
+
// figma_execute — Tek text node'a copy uygula
|
|
239
|
+
const node = await figma.getNodeByIdAsync("<TEXT_NODE_ID>");
|
|
240
|
+
await figma.loadFontAsync(node.fontName);
|
|
241
|
+
node.characters = "Yeni copy metni";
|
|
242
|
+
return { updated: node.id, text: node.characters };
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Toplu Copy İnceleme ve Güncelleme
|
|
246
|
+
|
|
247
|
+
1. Ekrandaki tüm text node'ları listele:
|
|
248
|
+
|
|
249
|
+
```js
|
|
250
|
+
const root = await figma.getNodeByIdAsync("<SCREEN_NODE_ID>");
|
|
251
|
+
const textNodes = root.findAll(n => n.type === "TEXT");
|
|
252
|
+
const copyList = textNodes.map(n => ({
|
|
253
|
+
id: n.id,
|
|
254
|
+
name: n.name,
|
|
255
|
+
current: n.characters,
|
|
256
|
+
fontSize: n.fontSize,
|
|
257
|
+
parent: n.parent?.name || "—"
|
|
258
|
+
}));
|
|
259
|
+
return { totalTextNodes: copyList.length, nodes: copyList.slice(0, 50) };
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
2. Kullanıcıya tablo olarak sun:
|
|
263
|
+
|
|
264
|
+
| # | Node | Mevcut Copy | Önerilen Copy | Durum |
|
|
265
|
+
|---|------|------------|---------------|-------|
|
|
266
|
+
| 1 | CTA Button | "Gönder" | "Hesap oluştur" | Değişecek |
|
|
267
|
+
| 2 | Error Text | "Hata" | "E-posta adresi geçersiz. @ işareti olmalı." | Değişecek |
|
|
268
|
+
| 3 | Page Title | "Hoş Geldiniz" | — | Uygun |
|
|
269
|
+
|
|
270
|
+
3. **Kullanıcı onayı al** — onaylanan node'ları toplu güncelle:
|
|
271
|
+
|
|
272
|
+
```js
|
|
273
|
+
const updates = [
|
|
274
|
+
{ id: "<ID_1>", text: "Hesap oluştur" },
|
|
275
|
+
{ id: "<ID_2>", text: "E-posta adresi geçersiz. @ işareti olmalı." }
|
|
276
|
+
];
|
|
277
|
+
|
|
278
|
+
for (const u of updates) {
|
|
279
|
+
const node = await figma.getNodeByIdAsync(u.id);
|
|
280
|
+
await figma.loadFontAsync(node.fontName);
|
|
281
|
+
node.characters = u.text;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return { updatedCount: updates.length };
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
> **ONAY KURALI:** Text node güncellemeleri kullanıcı onayı olmadan yapılmaz. Önce tablo sun, onay al, sonra uygula.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Required Workflow
|
|
292
|
+
|
|
293
|
+
### Step 1: Plugin Bağlantısını Doğrula
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
figma_get_status()
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Step 2: Marka Profili Kontrol
|
|
300
|
+
|
|
301
|
+
Proje kökünde `.fmcp-brand-profile.json` ara.
|
|
302
|
+
- **Varsa:** Oku, `voiceTone` ve `copyRules` alanlarını not al.
|
|
303
|
+
- **Yoksa:** Kullanıcıya "Marka profili bulunamadı. Oluşturmak ister misiniz?" sor.
|
|
304
|
+
- Evet → 3 soru akışı → profil oluştur
|
|
305
|
+
- Hayır → varsayılan ton matrisiyle devam et
|
|
306
|
+
|
|
307
|
+
### Step 3: Hedef Belirle
|
|
308
|
+
|
|
309
|
+
Kullanıcının isteğine göre:
|
|
310
|
+
|
|
311
|
+
**A) Tek copy üretimi:** CTA, hata mesajı, boş durum vb. → ilgili kalıbı uygula, 3 alternatif sun.
|
|
312
|
+
|
|
313
|
+
**B) Ekran copy incelemesi:** Figma ekranındaki tüm text node'ları tara → mevcut copy'yi değerlendir → öneriler sun.
|
|
314
|
+
|
|
315
|
+
**C) Copy spec üretimi:** Bir bileşen veya ekran için tüm copy kurallarını dokümante et (karakter limitleri, truncation, durum metinleri).
|
|
316
|
+
|
|
317
|
+
### Step 4: Copy Üret / Değerlendir
|
|
318
|
+
|
|
319
|
+
- 5 temel prensibe uygunluk kontrolü
|
|
320
|
+
- Marka profili varsa ton kalibrasyonu
|
|
321
|
+
- Her copy için 2-3 alternatif sun (kullanıcı seçsin)
|
|
322
|
+
- i18n gerekiyorsa en uzun dili baz al
|
|
323
|
+
|
|
324
|
+
### Step 5: Figma'ya Uygula (İsteğe Bağlı)
|
|
325
|
+
|
|
326
|
+
Kullanıcı isterse text node'ları güncelle (onay akışı ile).
|
|
327
|
+
|
|
328
|
+
### Step 6: Copy Spec Çıktısı
|
|
329
|
+
|
|
330
|
+
İstenirse yapılandırılmış copy spec raporu üret:
|
|
331
|
+
|
|
332
|
+
```markdown
|
|
333
|
+
## Copy Spec — [Ekran Adı]
|
|
334
|
+
|
|
335
|
+
### CTA'lar
|
|
336
|
+
| Buton | Copy | Max Karakter | Alternatifler |
|
|
337
|
+
|-------|------|-------------|---------------|
|
|
338
|
+
| Ana CTA | "Hesap oluştur" | 24 | "Kaydol", "Ücretsiz başla" |
|
|
339
|
+
|
|
340
|
+
### Hata Mesajları
|
|
341
|
+
| Alan | Mesaj | Ton |
|
|
342
|
+
|------|-------|-----|
|
|
343
|
+
| E-posta | "Geçerli bir e-posta girin" | empathetic-actionable |
|
|
344
|
+
|
|
345
|
+
### Boş Durumlar
|
|
346
|
+
| Ekran | Mesaj |
|
|
347
|
+
|-------|-------|
|
|
348
|
+
| Proje listesi | "Henüz proje yok. İlk projenizi oluşturun." |
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Türkçe Karakter Kuralı (ZORUNLU)
|
|
354
|
+
|
|
355
|
+
Tüm Türkçe metin içeriklerinde (Figma text node, kod string, dokümantasyon) doğru Unicode karakterler kullanılmalıdır. ASCII karşılıkları YASAKTIR:
|
|
356
|
+
|
|
357
|
+
| Doğru | Yanlış | Doğru | Yanlış |
|
|
358
|
+
|-------|--------|-------|--------|
|
|
359
|
+
| ş | s | Ş | S |
|
|
360
|
+
| ı | i | İ | I |
|
|
361
|
+
| ö | o | Ö | O |
|
|
362
|
+
| ü | u | Ü | U |
|
|
363
|
+
| ç | c | Ç | C |
|
|
364
|
+
| ğ | g | Ğ | G |
|
|
365
|
+
|
|
366
|
+
Son adım: Üretilen tüm Türkçe metinleri karakter kontrolünden geçir.
|
|
367
|
+
|
|
368
|
+
## Evolution Triggers
|
|
369
|
+
|
|
370
|
+
- Yeni copy kalıbı ihtiyacı (notification, tooltip, placeholder) eklenebilir
|
|
371
|
+
- Marka profili şeması genişletilirse alan okuma güncellenmeli
|
|
372
|
+
- AI ile otomatik copy kalite skoru (5 prensibe uyum puanı) eklenebilir
|
|
373
|
+
- Çoklu dil desteği genişletilirse dil bazlı kalıp varyantları eklenebilir
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-qa-compare
|
|
3
|
+
description: Figma tasarımı ile kodlanmış UI arasında görsel karşılaştırma yapar. Screenshot tabanlı fark tespiti, spacing/color/typography sapmaları raporlar. "visual QA", "görsel karşılaştır", "Figma vs kod", "pixel compare", "QA kontrol", "implementasyon doğrula" ifadeleriyle tetiklenir. F-MCP Bridge plugin bağlantısı gerektirir.
|
|
4
|
+
metadata:
|
|
5
|
+
mcp-server: user-figma-mcp-bridge
|
|
6
|
+
personas:
|
|
7
|
+
- uidev
|
|
8
|
+
- designops
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Visual QA Compare — Figma vs Kod Görsel Karşılaştırma
|
|
12
|
+
|
|
13
|
+
> **Design Token Kuralı:** Bu skill'deki kod örneklerinde geçen font adları, renk kodları, piksel boyutları yalnızca FORMAT gösterimidir. Çalışma anında tüm design token değerleri (font, renk, boyut, spacing, radius, gölge) kayıtlı kütüphaneden (`figma_get_variables`, `figma_get_styles`) veya kullanıcıdan okunmalıdır. Hardcoded token değeri kullanma. Detay: `project-context.md` → "Design Token Kuralı".
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
Bu skill, Figma tasarımı ile kodlanmış UI arasındaki **görsel** farkları tespit eder. `design-drift-detector` token/kod tabanlı çalışırken, bu skill **pixel/görsel** tabanlı karşılaştırma yapar.
|
|
18
|
+
|
|
19
|
+
**Salt okunur** — Figma tuvalinde değişiklik yapmaz.
|
|
20
|
+
|
|
21
|
+
## Fark: visual-qa-compare vs design-drift-detector
|
|
22
|
+
|
|
23
|
+
| Özellik | visual-qa-compare | design-drift-detector |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| **Odak** | Görsel/pixel farklar | Token/kod değer farkları |
|
|
26
|
+
| **Girdi** | Figma screenshot + kod UI screenshot | Figma variable'lar + kod token dosyaları |
|
|
27
|
+
| **Çıktı** | Görsel fark raporu (spacing, renk, tipografi) | Drift raporu (değer uyumsuzlukları) |
|
|
28
|
+
| **Araç** | `figma_capture_screenshot` + `figma_get_design_context` | `figma_check_design_parity` + `figma_get_variables` |
|
|
29
|
+
|
|
30
|
+
## Prerequisites
|
|
31
|
+
|
|
32
|
+
- F-MCP Bridge plugin bağlı olmalı
|
|
33
|
+
- Kodlanmış UI'ın çalışır durumda screenshot'ı alınabilmeli (dev server veya deploy)
|
|
34
|
+
- Hedef Figma ekranın node ID'si bilinmeli
|
|
35
|
+
|
|
36
|
+
## F-MCP skill koordinasyonu
|
|
37
|
+
|
|
38
|
+
- **Birlikte:** `design-drift-detector` ile token bazlı kontrol (görsel + token = tam QA)
|
|
39
|
+
- **Önce (isteğe bağlı):** `implement-design` çıktısı sonrası doğrulama
|
|
40
|
+
- **Sonra:** Fark varsa `fix-figma-design-system-finding` (Figma tarafı) veya kod düzeltme
|
|
41
|
+
|
|
42
|
+
## Required Workflow
|
|
43
|
+
|
|
44
|
+
### Step 1: Plugin Bağlantısını Doğrula
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
figma_get_status()
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Step 2: Figma Screenshot Al
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
figma_capture_screenshot(nodeId="<NODE_ID>", format="PNG", scale=2)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Step 3: Figma Design Context Al
|
|
57
|
+
|
|
58
|
+
> **DERİN ANALİZ KURALI:** Sadece frame/node isimlerine bakarak sonuç çıkarma. Her node'un içindeki text content (`characters`), instance prop'ları ve child yapılarını detaylı oku. Bir şeyin "eksik" veya "yok" olduğunu iddia etmeden önce tüm child node'ların içeriğini kontrol et.
|
|
59
|
+
|
|
60
|
+
> **GÖRSEL DOĞRULAMA KURALI:** Analiz sonucunu raporlamadan önce `figma_capture_screenshot` ile ekran görüntüsü al ve görsel olarak kontrol et. Text content ile screenshot'ın tutarlı olduğunu teyit et. Çelişki varsa screenshot'ı esas al.
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
figma_get_design_context(
|
|
64
|
+
nodeId="<NODE_ID>",
|
|
65
|
+
depth=3,
|
|
66
|
+
verbosity="full",
|
|
67
|
+
includeLayout=true,
|
|
68
|
+
includeVisual=true,
|
|
69
|
+
includeTypography=true
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Bu veriden referans değerleri çıkar:
|
|
74
|
+
- **Spacing:** padding, margin, item spacing değerleri
|
|
75
|
+
- **Renk:** fill, stroke, text renkleri (hex)
|
|
76
|
+
- **Tipografi:** font family, size, weight, line height
|
|
77
|
+
- **Boyut:** width, height, corner radius
|
|
78
|
+
|
|
79
|
+
### Step 4: Kod UI Referansı Al
|
|
80
|
+
|
|
81
|
+
Kullanıcıdan kodlanmış UI'ın screenshot'ını veya canlı URL'ini iste. Yöntemler:
|
|
82
|
+
|
|
83
|
+
1. **Kullanıcı screenshot paylaşır** — doğrudan karşılaştır
|
|
84
|
+
2. **Dev server URL** — browser aracıyla screenshot al (varsa)
|
|
85
|
+
3. **Deploy URL** — production/staging screenshot'ı
|
|
86
|
+
|
|
87
|
+
### Step 5: Karşılaştırma Analizi
|
|
88
|
+
|
|
89
|
+
AI ile Figma screenshot ve design context verilerini kullanarak kodlanmış UI ile karşılaştır:
|
|
90
|
+
|
|
91
|
+
#### 5a: Spacing Analizi
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
| Öğe | Figma | Kod | Fark | Öncelik |
|
|
95
|
+
|---|---|---|---|---|
|
|
96
|
+
| Header padding | 24px | 20px | -4px | Orta |
|
|
97
|
+
| Card spacing | 16px | 16px | 0 | ✓ |
|
|
98
|
+
| Button padding H | 24px | 16px | -8px | Yüksek |
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### 5b: Renk Analizi
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
| Öğe | Figma | Kod | Fark | Öncelik |
|
|
105
|
+
|---|---|---|---|---|
|
|
106
|
+
| Primary button | #2563EB | #2563EB | — | ✓ |
|
|
107
|
+
| Body text | #1F2937 | #374151 | Farklı | Orta |
|
|
108
|
+
| Background | #FFFFFF | #FAFAFA | Hafif fark | Düşük |
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### 5c: Tipografi Analizi
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
| Öğe | Figma | Kod | Fark | Öncelik |
|
|
115
|
+
|---|---|---|---|---|
|
|
116
|
+
| H1 | Inter 32/40 Bold | Inter 32/40 Bold | — | ✓ |
|
|
117
|
+
| Body | Inter 16/24 Regular | Inter 14/20 Regular | Size farkı | Yüksek |
|
|
118
|
+
| Caption | Inter 12/16 Regular | Inter 12/16 Regular | — | ✓ |
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Step 6: Token Parity Kontrolü (opsiyonel)
|
|
122
|
+
|
|
123
|
+
Görsel farkların token kaynaklı olup olmadığını kontrol et:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
figma_check_design_parity(
|
|
127
|
+
codeTokens='{"color/primary": "#2563EB", "spacing/md": 16, "font/body-size": 16}'
|
|
128
|
+
)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Step 7: Rapor Üret
|
|
132
|
+
|
|
133
|
+
Tüm karşılaştırma sonuçlarını aşağıdaki formatta yapılandırılmış QA raporu olarak oluştur.
|
|
134
|
+
|
|
135
|
+
## Çıktı Formatı
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
# Visual QA Raporu — [Ekran Adı]
|
|
139
|
+
|
|
140
|
+
## Genel Uyum: %87 (26/30 öğe eşleşiyor)
|
|
141
|
+
|
|
142
|
+
### Kritik Farklar (4)
|
|
143
|
+
1. **Body text font size** — Figma: 16px, Kod: 14px → Token güncellenmeli
|
|
144
|
+
2. **Button horizontal padding** — Figma: 24px, Kod: 16px → CSS düzeltmesi
|
|
145
|
+
3. **Card corner radius** — Figma: 12px, Kod: 8px → Token kontrolü
|
|
146
|
+
4. **Body text color** — Figma: #1F2937, Kod: #374151 → Token eşlemesi kontrol
|
|
147
|
+
|
|
148
|
+
### Eşleşen Öğeler (26)
|
|
149
|
+
✓ Header layout, ✓ Primary colors, ✓ H1 typography, ✓ Spacing grid, ...
|
|
150
|
+
|
|
151
|
+
### Öneriler
|
|
152
|
+
1. `design-drift-detector` ile token kaynaklı farkları tespit et
|
|
153
|
+
2. CSS token değişkenlerini Figma variable isimleriyle hizala
|
|
154
|
+
3. Body text size'ı 16px'e güncelle (DS standardı)
|
|
155
|
+
|
|
156
|
+
### Platform-Spesifik Notlar
|
|
157
|
+
- **iOS:** Dynamic Type ile font scaling kontrol edilmeli
|
|
158
|
+
- **Android:** density-independent pixel (dp) doğrulaması
|
|
159
|
+
- **Web:** Responsive breakpoint'lerde tekrar kontrol
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Evolution Triggers
|
|
163
|
+
|
|
164
|
+
- Bridge'e görsel diff aracı eklenirse (ör. visual diff aracı) otomatik karşılaştırma adımı eklenmeli
|
|
165
|
+
- Browser otomasyon araçlarıyla entegrasyon genişletilirse Step 4 otomatikleştirilebilir
|
|
166
|
+
- CI entegrasyonu için JSON çıktı formatı eklenebilir
|
package/dist/browser/base.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser Manager Interface
|
|
3
|
-
* Abstract interface for browser automation across different runtimes
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Browser Manager Interface
|
|
7
|
-
* Provides unified API for browser automation regardless of runtime (Cloudflare/Local)
|
|
8
|
-
*
|
|
9
|
-
* Note: Uses 'any' for Page type to support both puppeteer-core and @cloudflare/puppeteer
|
|
10
|
-
* implementations which have incompatible type definitions but compatible runtime behavior
|
|
11
|
-
*/
|
|
12
|
-
export interface IBrowserManager {
|
|
13
|
-
/**
|
|
14
|
-
* Launch or connect to browser instance
|
|
15
|
-
*/
|
|
16
|
-
launch(): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Get active page instance
|
|
19
|
-
*/
|
|
20
|
-
getPage(): Promise<any>;
|
|
21
|
-
/**
|
|
22
|
-
* Navigate to Figma URL
|
|
23
|
-
*/
|
|
24
|
-
navigateToFigma(url?: string): Promise<any>;
|
|
25
|
-
/**
|
|
26
|
-
* Reload current page
|
|
27
|
-
*/
|
|
28
|
-
reload(hardReload?: boolean): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Evaluate JavaScript in page context
|
|
31
|
-
*/
|
|
32
|
-
evaluate<T>(fn: () => T): Promise<T>;
|
|
33
|
-
/**
|
|
34
|
-
* Check if browser is running
|
|
35
|
-
*/
|
|
36
|
-
isRunning(): boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Close browser instance
|
|
39
|
-
*/
|
|
40
|
-
close(): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Get current URL
|
|
43
|
-
*/
|
|
44
|
-
getCurrentUrl(): string | null;
|
|
45
|
-
/**
|
|
46
|
-
* Wait for navigation to complete
|
|
47
|
-
*/
|
|
48
|
-
waitForNavigation(timeout?: number): Promise<void>;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/browser/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAExB;;OAEG;IACH,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAKrC;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
|
package/dist/browser/base.js
DELETED
package/dist/browser/base.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/browser/base.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/browser/local.d.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local Browser Manager
|
|
3
|
-
* Connects to Figma Desktop via Chrome Remote Debugging Protocol
|
|
4
|
-
*/
|
|
5
|
-
import { type Page } from 'puppeteer-core';
|
|
6
|
-
import type { IBrowserManager } from './base.js';
|
|
7
|
-
/**
|
|
8
|
-
* Local browser configuration
|
|
9
|
-
*/
|
|
10
|
-
export interface LocalBrowserConfig {
|
|
11
|
-
debugPort: number;
|
|
12
|
-
debugHost: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Local Browser Manager
|
|
16
|
-
* Connects to existing Figma Desktop instance via remote debugging port
|
|
17
|
-
*/
|
|
18
|
-
export declare class LocalBrowserManager implements IBrowserManager {
|
|
19
|
-
private browser;
|
|
20
|
-
private page;
|
|
21
|
-
private config;
|
|
22
|
-
constructor(config: LocalBrowserConfig);
|
|
23
|
-
/**
|
|
24
|
-
* Connect to Figma Desktop via remote debugging port
|
|
25
|
-
*/
|
|
26
|
-
launch(): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Find the best page for plugin debugging
|
|
29
|
-
* Actively searches for pages with workers across ALL tabs
|
|
30
|
-
*/
|
|
31
|
-
private findBestPage;
|
|
32
|
-
/**
|
|
33
|
-
* Get active Figma page or create new one
|
|
34
|
-
* Prefers pages with active plugin workers for plugin debugging
|
|
35
|
-
*/
|
|
36
|
-
getPage(): Promise<Page>;
|
|
37
|
-
/**
|
|
38
|
-
* Navigate to Figma URL
|
|
39
|
-
*/
|
|
40
|
-
navigateToFigma(figmaUrl?: string): Promise<Page>;
|
|
41
|
-
/**
|
|
42
|
-
* Reload current page
|
|
43
|
-
*/
|
|
44
|
-
reload(hardReload?: boolean): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Execute JavaScript in page context
|
|
47
|
-
*/
|
|
48
|
-
evaluate<T>(fn: () => T): Promise<T>;
|
|
49
|
-
/**
|
|
50
|
-
* Check if browser is connected
|
|
51
|
-
*/
|
|
52
|
-
isRunning(): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Disconnect from browser (doesn't close Figma Desktop)
|
|
55
|
-
*/
|
|
56
|
-
close(): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Get current page URL
|
|
59
|
-
*/
|
|
60
|
-
getCurrentUrl(): string | null;
|
|
61
|
-
/**
|
|
62
|
-
* Check if the browser connection is still alive
|
|
63
|
-
* Returns false if connection is stale (e.g., after computer sleep)
|
|
64
|
-
*/
|
|
65
|
-
isConnectionAlive(): Promise<boolean>;
|
|
66
|
-
/**
|
|
67
|
-
* Reconnect to Figma Desktop if connection was lost
|
|
68
|
-
* Call this before any operation that requires a live connection
|
|
69
|
-
*/
|
|
70
|
-
ensureConnection(): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* Force a complete reconnection to Figma Desktop
|
|
73
|
-
* Use this when frames become detached or stale even though the browser appears connected
|
|
74
|
-
*/
|
|
75
|
-
forceReconnect(): Promise<void>;
|
|
76
|
-
/**
|
|
77
|
-
* Wait for navigation
|
|
78
|
-
*/
|
|
79
|
-
waitForNavigation(timeout?: number): Promise<void>;
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=local.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/browser/local.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAkB,EAAgB,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAIjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAC1D,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAItC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C7B;;;OAGG;YACW,YAAY;IA4C1B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC9B;;OAEG;IACG,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvD;;OAEG;IACG,MAAM,CAAC,UAAU,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/C;;OAEG;IACG,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ1C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAQ9B;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAe3C;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrC;;OAEG;IACG,iBAAiB,CAAC,OAAO,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAUvD"}
|