feat: 12 套 Sketch 也上 Figma,47/47 模板全部投射就位

- 16 个 .sketch 经 Playwright Import 上传(Figma 自动转 fig)
- 匹配脚本扩展:fig 优先,sketch 次之
- 47/47 匹配(35 fig + 12 sketch-only)
- banner 文案更新

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
kang
2026-04-22 15:58:06 +08:00
parent be6d4f7b48
commit 3237ef8271
3 changed files with 219 additions and 72 deletions

View File

@@ -2,7 +2,8 @@
{
"W": "W1",
"name": "Saascuy - Saas Landing Page UI KIT",
"fig_stem": "saascuy",
"kind": "fig",
"source_stem": "saascuy",
"matched": "saascuy",
"key": "pxsKzhDM8UL8oTSB4hUpOZ",
"score": 1.0
@@ -10,15 +11,35 @@
{
"W": "W10",
"name": "Havoc Agency UI Kit",
"fig_stem": "Havoc Agency UI Kit",
"kind": "fig",
"source_stem": "Havoc Agency UI Kit",
"matched": "Havoc Agency UI Kit",
"key": "EKp3ZDo2A3kDp88DMvFqte",
"score": 1.0
},
{
"W": "W11",
"name": "Limitless for Web",
"kind": "sketch",
"source_stem": "yoyolabs-Limitless-for-Web-file",
"matched": "yoyolabs-Limitless-for-Web-file",
"key": "IGfS4r69yANQazOxLSjnyQ",
"score": 1.0
},
{
"W": "W12",
"name": "Premise - Website and Landing Page Wireframe Kit - Desktop",
"kind": "sketch",
"source_stem": "DARK:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke",
"matched": "DARK:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke",
"key": "RCAZWKHkrBzwikzpBCebMz",
"score": 1.0
},
{
"W": "W13",
"name": "Premium Online Shop UI Kit & Dashboard",
"fig_stem": "Online Shop UI Kit",
"kind": "fig",
"source_stem": "Online Shop UI Kit",
"matched": "Online Shop UI Kit",
"key": "ms5OYBa3fRlDwRmSLWWorY",
"score": 1.0
@@ -26,31 +47,71 @@
{
"W": "W14",
"name": "Ui Max",
"fig_stem": "Figmaland-UI MAX ( ui8 )",
"kind": "fig",
"source_stem": "Figmaland-UI MAX ( ui8 )",
"matched": "Figmaland-UI MAX ( ui8 )",
"key": "s5KbowY6N6M4IkjHbgLjOc",
"score": 1.0
},
{
"W": "W15",
"name": "BelloBlue Fashion + Delivery Web App",
"kind": "sketch",
"source_stem": "Sketch File",
"matched": "Sketch File",
"key": "dM5zUotUlacnEPU9Oo0RcJ",
"score": 1.0
},
{
"W": "W16",
"name": "Eco -Ecommerce Analytics Admin Dashboard Kit",
"fig_stem": "Eco -Ecommerce Analytics Admin Dashboard",
"kind": "fig",
"source_stem": "Eco -Ecommerce Analytics Admin Dashboard",
"matched": "Eco -Ecommerce Analytics Admin Dashboard",
"key": "fsufV596UmcNyM8yfCYlAr",
"score": 1.0
},
{
"W": "W18",
"name": "Elemento UI Kit",
"kind": "sketch",
"source_stem": "Elemento-UI-Kit",
"matched": "Elemento-UI-Kit",
"key": "byZYVoOiuEEtSMjH7JxcQO",
"score": 1.0
},
{
"W": "W2",
"name": "Core Dashboard Builder",
"fig_stem": "Core - Dashboard Builder",
"kind": "fig",
"source_stem": "Core - Dashboard Builder",
"matched": "Core - Dashboard Builder",
"key": "G4mWQN0IWGkAKpD7Ga0bG3",
"score": 1.0
},
{
"W": "W20",
"name": "Kovid Flew - Coronavirus Awareness",
"kind": "sketch",
"source_stem": "Kovid Flew",
"matched": "Kovid Flew",
"key": "crK1Yhtws6yWkBKcN1OCqB",
"score": 1.0
},
{
"W": "W21",
"name": "Landing Page UI kit fully compatible",
"kind": "sketch",
"source_stem": "Login_page_2020",
"matched": "Login_page_2020",
"key": "SYINzgEkzGIwZF15AvuDcn",
"score": 1.0
},
{
"W": "W24",
"name": "Webflew Agency Template UI Kit",
"fig_stem": "Webflew Agency UI Kit",
"kind": "fig",
"source_stem": "Webflew Agency UI Kit",
"matched": "Webflew Agency UI Kit",
"key": "Sarco9c50gDttu37szmurE",
"score": 1.0
@@ -58,7 +119,8 @@
{
"W": "W25",
"name": "Core Dashboard Builder",
"fig_stem": "Core - Dashboard Builder",
"kind": "fig",
"source_stem": "Core - Dashboard Builder",
"matched": "Core - Dashboard Builder",
"key": "x3g1FivshKeZ9PwccE7w3w",
"score": 1.0
@@ -66,15 +128,26 @@
{
"W": "W26",
"name": "Jobhuntly - Job Board & Portal UI Kit",
"fig_stem": "Jobhuntly - Job Board & Portal UI Kit",
"kind": "fig",
"source_stem": "Jobhuntly - Job Board & Portal UI Kit",
"matched": "Jobhuntly - Job Board & Portal UI Kit",
"key": "oyHlh6eh7TjxYhCUbFTvBS",
"score": 1.0
},
{
"W": "W27",
"name": "Omega - Landing Page Design Template",
"kind": "sketch",
"source_stem": "Omega",
"matched": "Omega",
"key": "yIhPCq93LSUkzrJUVQjU1r",
"score": 1.0
},
{
"W": "W28",
"name": "Finity - Landing Page Template",
"fig_stem": "Landing UI Kit",
"kind": "fig",
"source_stem": "Landing UI Kit",
"matched": "Landing UI Kit",
"key": "5R9tevOwnk4iJzU3jEjg0q",
"score": 1.0
@@ -82,7 +155,8 @@
{
"W": "W29",
"name": "Loomi",
"fig_stem": "LOOMI",
"kind": "fig",
"source_stem": "LOOMI",
"matched": "LOOMI",
"key": "dvPWtG7KaEWr895iCI0Ioy",
"score": 1.0
@@ -90,15 +164,26 @@
{
"W": "W3",
"name": "UXFlow Web Kit Design",
"fig_stem": "UXFlow Web Kit",
"kind": "fig",
"source_stem": "UXFlow Web Kit",
"matched": "UXFlow Web Kit",
"key": "5CZLD5lcxxRQNE1QWjqbmP",
"score": 1.0
},
{
"W": "W30",
"name": "Rybble TM",
"kind": "sketch",
"source_stem": "Rybble TM",
"matched": "Rybble TM",
"key": "AcNy87P0xlqDvkeeBqrQpO",
"score": 1.0
},
{
"W": "W31",
"name": "Sydney Oasis Hotel - Websites Template",
"fig_stem": "Sydney Oasis Hotel Websites",
"kind": "fig",
"source_stem": "Sydney Oasis Hotel Websites",
"matched": "Sydney Oasis Hotel Websites",
"key": "khWI1rrgwj5702NilEcha2",
"score": 1.0
@@ -106,7 +191,8 @@
{
"W": "W32",
"name": "DevAgency - Web Ui Kits",
"fig_stem": "DevAgency - Web Ui Kits",
"kind": "fig",
"source_stem": "DevAgency - Web Ui Kits",
"matched": "DevAgency - Web Ui Kits",
"key": "qFC0pVEHe9Toc2aJ2MgO32",
"score": 1.0
@@ -114,7 +200,8 @@
{
"W": "W33",
"name": "Insight - Dashboard UI Kit",
"fig_stem": "Social Media Dashboard - UI Kit",
"kind": "fig",
"source_stem": "Social Media Dashboard - UI Kit",
"matched": "Social Media Dashboard - UI Kit",
"key": "RKIYTIOCADVsASHNxZ5tr2",
"score": 1.0
@@ -122,7 +209,8 @@
{
"W": "W34",
"name": "Intirior Architecture web ui kit",
"fig_stem": "Intirior Architecture web ui kit",
"kind": "fig",
"source_stem": "Intirior Architecture web ui kit",
"matched": "Intirior Architecture web ui kit",
"key": "BfBzvqu4VK53iSD5fbKNAo",
"score": 1.0
@@ -130,15 +218,26 @@
{
"W": "W35",
"name": "JackCreative Personal Portfolio Website Design",
"fig_stem": "JackCreative",
"kind": "fig",
"source_stem": "JackCreative",
"matched": "JackCreative",
"key": "RNRNDiF6gFcTCi6wJncvgv",
"score": 1.0
},
{
"W": "W36",
"name": "AppStarter UI Kit",
"kind": "sketch",
"source_stem": "AppStarter Sample (Wireframe)",
"matched": "AppStarter Sample (Wireframe)",
"key": "4lPiQwfUnlIh2cRvqFabSn",
"score": 1.0
},
{
"W": "W37",
"name": "Daily UI Starter Pages - A ready-made UI Kits",
"fig_stem": "04_DailyUI_Video_Landing_Website",
"kind": "fig",
"source_stem": "04_DailyUI_Video_Landing_Website",
"matched": "04_DailyUI_Video_Landing_Website",
"key": "PJHgFt29Lyo3JwMKxa5Tsm",
"score": 1.0
@@ -146,15 +245,26 @@
{
"W": "W38",
"name": "Figmaland - Startup Ui Kit",
"fig_stem": "Figmaland- UI Kit (Startup)",
"kind": "fig",
"source_stem": "Figmaland- UI Kit (Startup)",
"matched": "Figmaland- UI Kit (Startup)",
"key": "fL1KqwIS3OmHCsUwhgJusG",
"score": 1.0
},
{
"W": "W4",
"name": "UI KIT Grocery Store",
"kind": "sketch",
"source_stem": "UI KIT Desktop - Froots",
"matched": "UI KIT Desktop - Froots",
"key": "yfsZXkLQbiWwQW9C2fwyDW",
"score": 1.0
},
{
"W": "W40",
"name": "IOTASK UI Kit",
"fig_stem": "iotask",
"kind": "fig",
"source_stem": "iotask",
"matched": "iotask",
"key": "uAcopfnDXakv7l5Jr6sMqG",
"score": 1.0
@@ -162,7 +272,8 @@
{
"W": "W41",
"name": "Master Flow - Responsive Template for Figma",
"fig_stem": "MasterFlow_UI_Kit",
"kind": "fig",
"source_stem": "MasterFlow_UI_Kit",
"matched": "MasterFlow_UI_Kit",
"key": "4OTPxx5sgN8eFJ3joudoVH",
"score": 1.0
@@ -170,15 +281,26 @@
{
"W": "W43",
"name": "Modularity Web Design System for Figma",
"fig_stem": "Modularity",
"kind": "fig",
"source_stem": "Modularity",
"matched": "Modularity",
"key": "huDsMAoVThpYnGAU9j8WVB",
"score": 1.0
},
{
"W": "W44",
"name": "Modularity Web Design System for Sketch",
"kind": "sketch",
"source_stem": "Modularity",
"matched": "Modularity",
"key": "8Yk0Nw1JK1mLGBmAIhAVXR",
"score": 1.0
},
{
"W": "W45",
"name": "Wiredunk - Landing Page Template for Multipurposes",
"fig_stem": "Wiredunk_Wireframe",
"kind": "fig",
"source_stem": "Wiredunk_Wireframe",
"matched": "Wiredunk_Wireframe",
"key": "oZ7a2aFNZ21bg128ixnB3k",
"score": 1.0
@@ -186,7 +308,8 @@
{
"W": "W46",
"name": "agency website template",
"fig_stem": "3 template Agency",
"kind": "fig",
"source_stem": "3 template Agency",
"matched": "3 template Agency",
"key": "sHmAQQxmvRTIxOg8OgQQFG",
"score": 1.0
@@ -194,7 +317,8 @@
{
"W": "W47",
"name": "Estatery - Real Estate SaaS Web UI Kit",
"fig_stem": "Real Estate SaaS Kit & Dashboard (UI8)",
"kind": "fig",
"source_stem": "Real Estate SaaS Kit & Dashboard (UI8)",
"matched": "Real Estate SaaS Kit & Dashboard (UI8)",
"key": "Suvu5K5DSKPngkMKRb01MK",
"score": 1.0
@@ -202,7 +326,8 @@
{
"W": "W48",
"name": "LANDINGKUY - Landing Page Design Templates",
"fig_stem": "LANDINGKUY - Landing Page Design",
"kind": "fig",
"source_stem": "LANDINGKUY - Landing Page Design",
"matched": "LANDINGKUY - Landing Page Design",
"key": "df0oLsZta06a79s5iepJdF",
"score": 1.0
@@ -210,7 +335,8 @@
{
"W": "W5",
"name": "Wiloa 2.0 - Landing Page UI-Kit",
"fig_stem": "WILOA - HOTEL",
"kind": "fig",
"source_stem": "WILOA - HOTEL",
"matched": "WILOA - HOTEL",
"key": "7C3QNOG6FhBRguT3nQ3dzf",
"score": 1.0
@@ -218,7 +344,8 @@
{
"W": "W51",
"name": "Quickr Design System",
"fig_stem": "Quicker Design system",
"kind": "fig",
"source_stem": "Quicker Design system",
"matched": "Quicker Design system",
"key": "KtGIx2vrYNtApMiPYCTiiB",
"score": 1.0
@@ -226,7 +353,8 @@
{
"W": "W52",
"name": "RealStatic - Real State Website Design",
"fig_stem": "Ui8_RealStatic_Static Mania",
"kind": "fig",
"source_stem": "Ui8_RealStatic_Static Mania",
"matched": "Ui8_RealStatic_Static Mania",
"key": "U4YDJ7B0Sefem9r8LiEs8b",
"score": 1.0
@@ -234,7 +362,8 @@
{
"W": "W53",
"name": "Skill Shoot - Online course website and responsive uikit",
"fig_stem": "Aset - skill Shoot",
"kind": "fig",
"source_stem": "Aset - skill Shoot",
"matched": "Aset - skill Shoot",
"key": "pMjAEiLKAFE57eaI4f4vva",
"score": 1.0
@@ -242,7 +371,8 @@
{
"W": "W54",
"name": "GetPay - 6 Unique Finance Landing Pages",
"fig_stem": "GETPAY - FINANCE TEMPLATES DESIGN",
"kind": "fig",
"source_stem": "GETPAY - FINANCE TEMPLATES DESIGN",
"matched": "GETPAY - FINANCE TEMPLATES DESIGN",
"key": "vcb4bLF79NTpybgXvAtkNM",
"score": 1.0
@@ -250,7 +380,8 @@
{
"W": "W55",
"name": "Fecca - Landing Page UI Kit (Figma)",
"fig_stem": "Fecca",
"kind": "fig",
"source_stem": "Fecca",
"matched": "Fecca",
"key": "IpdxPbiWuGZQpr3aNXsVpC",
"score": 1.0
@@ -258,7 +389,8 @@
{
"W": "W56",
"name": "Orabel Web UI Kit",
"fig_stem": "01 Home - Orabel Web UI Kit",
"kind": "fig",
"source_stem": "01 Home - Orabel Web UI Kit",
"matched": "01 Home - Orabel Web UI Kit",
"key": "IoQBzPjHw51WjFKL52kJKN",
"score": 1.0
@@ -266,7 +398,8 @@
{
"W": "W6",
"name": "AKASHA Pages Building Kit",
"fig_stem": "AKASHA-PAGEBUILDING-KIT",
"kind": "fig",
"source_stem": "AKASHA-PAGEBUILDING-KIT",
"matched": "AKASHA-PAGEBUILDING-KIT",
"key": "LA2daTQaigGkMUUNgPr6fp",
"score": 1.0
@@ -274,9 +407,19 @@
{
"W": "W7",
"name": "Bright Kit Web Layouts",
"fig_stem": "Bright Kit",
"kind": "fig",
"source_stem": "Bright Kit",
"matched": "Bright Kit",
"key": "CLZepne3voPYx198q3wUHO",
"score": 1.0
},
{
"W": "W9",
"name": "Fresh Grocery - Landing Page Design Template",
"kind": "sketch",
"source_stem": "Grocery Delivery Landing Page",
"matched": "Grocery Delivery Landing Page",
"key": "V6qWYeL6Hr5QA5Jz9rDmc7",
"score": 1.0
}
]

View File

@@ -35,18 +35,17 @@ def main():
sys.exit(1)
figma_files = json.loads(figma_files_path.read_text()) # list of {key, name, ...}
# for each W template that has fig, find matching figma file
# Match each template (fig preferred, else sketch) against cloud files
matches = []
used_keys = set()
for t in manifest['templates']:
if not t['fig']: continue
# use the .fig file's stem as match target (closer than archive name)
targets = [Path(f).stem for f in t['fig']]
# add archive stem as backup
source_files = t['fig'] if t['fig'] else t['sketch']
if not source_files: continue
kind = 'fig' if t['fig'] else 'sketch'
targets = [Path(f).stem for f in source_files]
if t.get('archive'):
targets.append(Path(t['archive']).stem)
targets.append(t['name'])
# try each target
best_overall = (0, None)
for tgt in targets:
score, cand = best_match(tgt, [f for f in figma_files if f['key'] not in used_keys])
@@ -55,15 +54,16 @@ def main():
if score > 0.95:
break
score, cand = best_overall
stem = Path(source_files[0]).stem
if cand and score >= 0.6:
used_keys.add(cand['key'])
matches.append({
'W': t['id'], 'name': t['name'], 'fig_stem': Path(t['fig'][0]).stem if t['fig'] else None,
'W': t['id'], 'name': t['name'], 'kind': kind, 'source_stem': stem,
'matched': cand['name'], 'key': cand['key'], 'score': round(score, 3)
})
else:
matches.append({
'W': t['id'], 'name': t['name'], 'fig_stem': Path(t['fig'][0]).stem if t['fig'] else None,
'W': t['id'], 'name': t['name'], 'kind': kind, 'source_stem': stem,
'matched': None, 'best_score': round(best_overall[0], 3) if cand else 0,
'best_candidate': cand['name'] if cand else None
})
@@ -83,17 +83,21 @@ def main():
# update banner with imported count
imported = sum(1 for t in data['templates'] if t['figma_key'])
fig_cnt = sum(1 for t in manifest['templates'] if t['fig'])
sketch_only_cnt = sum(1 for t in manifest['templates'] if not t['fig'] and t['sketch'])
data['imported_summary'] = (
f"✅ <b>{imported} 个 Figma 原生文件</b>已云端就位在你的 "
f"<a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>"
f"点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑"
f"✅ <b>{imported}/56 套</b>已云端就位在 "
f"<a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>"
f"{fig_cnt} 个 .fig 原生 + {sketch_only_cnt} 个 .sketch 经 Figma 转换)"
f"点卡片 → modal → iframe 实时投射。"
)
data_path.write_text(json.dumps(data, ensure_ascii=False, indent=2))
# write match report
report = ROOT/'figma-match-report.json'
report.write_text(json.dumps(matches, ensure_ascii=False, indent=2))
print(f"Matched {imported}/{sum(1 for t in manifest['templates'] if t['fig'])} fig templates")
total_matchable = sum(1 for t in manifest['templates'] if t['fig'] or t['sketch'])
print(f"Matched {imported}/{total_matchable} templates ({fig_cnt} fig + {sketch_only_cnt} sketch-only)")
print(f"Report: {report.relative_to(ROOT)}")
unmatched = [m for m in matches if not m.get('key')]
if unmatched:

View File

@@ -69,8 +69,8 @@
"archive": "Limitless for Web.zip",
"archive_size_mb": 54.7,
"source_rel": "../extracted/W11",
"figma_key": null,
"figma_url": null
"figma_key": "IGfS4r69yANQazOxLSjnyQ",
"figma_url": "https://www.figma.com/file/IGfS4r69yANQazOxLSjnyQ"
},
{
"id": "W12",
@@ -92,8 +92,8 @@
"archive": "Premise - Website and Landing Page Wireframe Kit - Desktop.zip",
"archive_size_mb": 12.2,
"source_rel": "../extracted/W12",
"figma_key": null,
"figma_url": null
"figma_key": "RCAZWKHkrBzwikzpBCebMz",
"figma_url": "https://www.figma.com/file/RCAZWKHkrBzwikzpBCebMz"
},
{
"id": "W13",
@@ -161,8 +161,8 @@
"archive": "BelloBlue Fashion + Delivery Web App.zip",
"archive_size_mb": 65.6,
"source_rel": "../extracted/W15",
"figma_key": null,
"figma_url": null
"figma_key": "dM5zUotUlacnEPU9Oo0RcJ",
"figma_url": "https://www.figma.com/file/dM5zUotUlacnEPU9Oo0RcJ"
},
{
"id": "W16",
@@ -235,8 +235,8 @@
"archive": "Elemento UI Kit.zip",
"archive_size_mb": 84.2,
"source_rel": "../extracted/W18",
"figma_key": null,
"figma_url": null
"figma_key": "byZYVoOiuEEtSMjH7JxcQO",
"figma_url": "https://www.figma.com/file/byZYVoOiuEEtSMjH7JxcQO"
},
{
"id": "W19",
@@ -298,8 +298,8 @@
"archive": "Kovid Flew - Coronavirus Awareness.zip",
"archive_size_mb": 200.4,
"source_rel": "../extracted/W20",
"figma_key": null,
"figma_url": null
"figma_key": "crK1Yhtws6yWkBKcN1OCqB",
"figma_url": "https://www.figma.com/file/crK1Yhtws6yWkBKcN1OCqB"
},
{
"id": "W21",
@@ -320,8 +320,8 @@
"archive": "Landing Page UI kit fully compatible.zip",
"archive_size_mb": 18.9,
"source_rel": "../extracted/W21",
"figma_key": null,
"figma_url": null
"figma_key": "SYINzgEkzGIwZF15AvuDcn",
"figma_url": "https://www.figma.com/file/SYINzgEkzGIwZF15AvuDcn"
},
{
"id": "W22",
@@ -461,8 +461,8 @@
"archive": "Omega - Landing Page Design Template.zip",
"archive_size_mb": 1542.5,
"source_rel": "../extracted/W27",
"figma_key": null,
"figma_url": null
"figma_key": "yIhPCq93LSUkzrJUVQjU1r",
"figma_url": "https://www.figma.com/file/yIhPCq93LSUkzrJUVQjU1r"
},
{
"id": "W28",
@@ -553,8 +553,8 @@
"archive": "Rybble TM.zip",
"archive_size_mb": 23.2,
"source_rel": "../extracted/W30",
"figma_key": null,
"figma_url": null
"figma_key": "AcNy87P0xlqDvkeeBqrQpO",
"figma_url": "https://www.figma.com/file/AcNy87P0xlqDvkeeBqrQpO"
},
{
"id": "W31",
@@ -689,8 +689,8 @@
"archive": "AppStarter UI Kit.zip",
"archive_size_mb": 716.5,
"source_rel": "../extracted/W36",
"figma_key": null,
"figma_url": null
"figma_key": "4lPiQwfUnlIh2cRvqFabSn",
"figma_url": "https://www.figma.com/file/4lPiQwfUnlIh2cRvqFabSn"
},
{
"id": "W37",
@@ -780,8 +780,8 @@
"archive": "UI KIT Grocery Store.zip",
"archive_size_mb": 352.7,
"source_rel": "../extracted/W4",
"figma_key": null,
"figma_url": null
"figma_key": "yfsZXkLQbiWwQW9C2fwyDW",
"figma_url": "https://www.figma.com/file/yfsZXkLQbiWwQW9C2fwyDW"
},
{
"id": "W40",
@@ -898,8 +898,8 @@
"archive": "Modularity Web Design System for Sketch.zip",
"archive_size_mb": 127.6,
"source_rel": "../extracted/W44",
"figma_key": null,
"figma_url": null
"figma_key": "8Yk0Nw1JK1mLGBmAIhAVXR",
"figma_url": "https://www.figma.com/file/8Yk0Nw1JK1mLGBmAIhAVXR"
},
{
"id": "W45",
@@ -1283,9 +1283,9 @@
"archive": "Fresh Grocery - Landing Page Design Template.zip",
"archive_size_mb": 15.5,
"source_rel": "../extracted/W9",
"figma_key": null,
"figma_url": null
"figma_key": "V6qWYeL6Hr5QA5Jz9rDmc7",
"figma_url": "https://www.figma.com/file/V6qWYeL6Hr5QA5Jz9rDmc7"
}
],
"imported_summary": "✅ <b>35 个 Figma 原生文件</b>已云端就位在你的 <a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>。点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑。"
"imported_summary": "✅ <b>47/56 套</b>已云端就位在 <a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>35 个 .fig 原生 + 12 个 .sketch 经 Figma 转换)。点卡片 modal iframe 实时投射。"
}