From 3237ef827109a5d5e7d69f2cfcf9e5e0d83ed42c Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 22 Apr 2026 15:58:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=2012=20=E5=A5=97=20Sketch=20=E4=B9=9F?= =?UTF-8?q?=E4=B8=8A=20Figma=EF=BC=8C47/47=20=E6=A8=A1=E6=9D=BF=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E6=8A=95=E5=B0=84=E5=B0=B1=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- figma-match-report.json | 213 ++++++++++++++++++++++++++++++------ scripts/match-and-update.py | 28 +++-- web/data.json | 50 ++++----- 3 files changed, 219 insertions(+), 72 deletions(-) diff --git a/figma-match-report.json b/figma-match-report.json index 8a08fa6..f651614 100644 --- a/figma-match-report.json +++ b/figma-match-report.json @@ -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 } ] \ No newline at end of file diff --git a/scripts/match-and-update.py b/scripts/match-and-update.py index 93740c8..958d3b0 100755 --- a/scripts/match-and-update.py +++ b/scripts/match-and-update.py @@ -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"✅ {imported} 个 Figma 原生文件已云端就位在你的 " - f"Figma Drafts。" - f"点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑。" + f"✅ {imported}/56 套已云端就位在 " + f"Figma Drafts" + 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: diff --git a/web/data.json b/web/data.json index bf46e03..efea544 100644 --- a/web/data.json +++ b/web/data.json @@ -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": "✅ 35 个 Figma 原生文件已云端就位在你的 Figma Drafts。点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑。" + "imported_summary": "✅ 47/56 套已云端就位在 Figma Drafts(35 个 .fig 原生 + 12 个 .sketch 经 Figma 转换)。点卡片 → modal → iframe 实时投射。" } \ No newline at end of file