AgentSkillsCN

design-system-developer

根据上下文,智能路由至 Anytype iOS 设计系统,涵盖图标、字体、色彩与间距等元素。当您从事 Figma 转码、设计资产制作,或 UI 组件开发时,此技能将助您事半功倍。

SKILL.md
--- frontmatter
name: design-system-developer
description: Context-aware routing to the Anytype iOS design system including icons, typography, colors, and spacing. Use when working with Figma-to-code translation, design assets, or UI components.

Design System Developer (Smart Router)

Purpose

Context-aware routing to the Anytype iOS design system: icons, typography, colors, spacing. Helps you navigate Figma-to-code translation.

When Auto-Activated

  • Working with icons or typography
  • Keywords: icon, typography, design system, figma, color, spacing
  • Editing files in DesignSystem/ or Assets.xcassets
  • Discussing colors or UI components

🚨 CRITICAL RULES (NEVER VIOLATE)

  1. ALWAYS use design system constants - Never hardcode hex colors, font sizes, or asset names
  2. ALWAYS run make generate after adding assets - Icons and assets must be code-generated
  3. Icons are organized by size - x18, x24, x32, x40 (use correct size for context)
  4. Typography follows strict mapping - Figma style names map to specific Swift enum cases
  5. Spacing formula - NextElement.Y - (CurrentElement.Y + CurrentElement.Height)

📋 Quick Reference

Icon Usage

swift
// 18pt - Toolbar/nav bar icons
Image(asset: .X18.search)

// 24pt - List row icons
Image(asset: .X24.camera)

// 32pt - Buttons, main UI (most common)
Image(asset: .X32.qrCode)

// 40pt - Large features
Image(asset: .X40.profile)

Adding Icons

  1. Export SVG from Figma ("32/qr code" → QRCode.svg)
  2. Add to /Modules/Assets/.../Assets.xcassets/DesignSystem/x32/QRCode.imageset/
  3. Run make generate
  4. Use: Image(asset: .X32.qrCode)

Typography Usage

swift
// Screen titles
AnytypeText("Settings", style: .uxTitle1Semibold)

// Section headers
AnytypeText("Recent", style: .uxTitle2Semibold)

// Body text
Text("Description").anytypeStyle(.bodyRegular)

// Small labels
Text("Add Member").anytypeStyle(.caption1Medium)  // Note: no "ux" prefix!

Typography Mapping (Figma → Swift)

Content Styles (remove "Content/" prefix):

  • "Content/Body/Semibold" → .bodySemibold
  • "Content/Preview Title 2/Regular" → .previewTitle2Regular

UX Styles - Title/Body/Callout (keep "ux" prefix lowercase):

  • "UX/Title 1/Semibold" → .uxTitle1Semibold
  • "UX/Body/Regular" → .uxBodyRegular

UX Styles - Captions (DROP "ux" prefix - EXCEPTION!):

  • "UX/Caption 1/Medium" → .caption1Medium (no "ux")
  • "UX/Caption 2/Regular" → .caption2Regular (no "ux")

Common Typography Styles

Use CaseFigma StyleSwift ConstantSize
Screen titlesUX/Title 1/Semibold.uxTitle1Semibold28pt
Section headersUX/Title 2/Semibold.uxTitle2Semibold17pt
Body textContent/Body/Regular.bodyRegular17pt
Small labelsUX/Caption 1/Medium.caption1Medium13pt

Color Usage

swift
// Backgrounds
.background(Color.Shape.transparentSecondary)
.background(Color.Background.primary)

// Text colors
.foregroundColor(Color.Text.primary)
.foregroundColor(Color.Text.secondary)

// Control colors
.foregroundColor(Color.Control.active)

📏 Spacing from Figma (CRITICAL FORMULA)

CRITICAL: Spacing is the GAP between elements, not top-to-top distance.

Formula:

code
Spacing = NextElement.Y - (CurrentElement.Y + CurrentElement.Height)

Example:

  1. First element: Y=326px, Height=24px → Bottom edge = 350px
  2. Second element: Y=374px
  3. Spacing = 374 - 350 = 24px

Common mistake:

code
❌ WRONG: 374 - 326 = 48px  (includes first element's height!)
✅ CORRECT: 374 - (326 + 24) = 24px  (actual gap)

SwiftUI usage:

swift
Text("Title")
Spacer.fixedHeight(24)  // ✅ Correct spacing
Text("Feature")

⚠️ Common Mistakes

Typography Style Doesn't Exist

swift
// ❌ WRONG
Text("Button").anytypeStyle(.uxCaption1Medium)  // Doesn't exist!

// ✅ CORRECT
Text("Button").anytypeStyle(.caption1Medium)  // Captions drop "ux" prefix

Hardcoded Colors

swift
// ❌ WRONG
.background(Color(hex: "#FF0000"))

// ✅ CORRECT
.background(Color.Pure.red)

Wrong Icon Size

swift
// ❌ WRONG - Upscaling looks bad
Image(asset: .X18.qrCode)
    .frame(width: 32, height: 32)

// ✅ CORRECT - Use native size
Image(asset: .X32.qrCode)
    .frame(width: 32, height: 32)

Spacing Calculation

swift
// ❌ WRONG - Top-to-top (includes height)
Spacing = NextElement.Y - CurrentElement.Y

// ✅ CORRECT - Actual gap
Spacing = NextElement.Y - (CurrentElement.Y + CurrentElement.Height)

📚 Complete Documentation

Full Guides:

  • Design System: Anytype/Sources/PresentationLayer/Common/DESIGN_SYSTEM_MAPPING.md
  • Typography: Anytype/Sources/PresentationLayer/Common/TYPOGRAPHY_MAPPING.md

For comprehensive coverage of:

  • Complete typography mapping table
  • All color categories and constants
  • Icon organization and workflows
  • Corner radius standards
  • Dimension standards (whole numbers only)
  • Design verification workflow
  • Dark/light mode considerations

Figma References:

✅ Design Implementation Checklist

  • All icons use .X* constants, no hardcoded asset names
  • All typography uses .anytypeStyle() or AnytypeText
  • All colors use Color.* constants, no hex values
  • Spacing extracted from Figma using correct formula
  • All dimensions are whole numbers (or documented if rounded)
  • Ran make generate after adding new assets
  • Verified against Figma design visually
  • Checked dark/light mode appearance

🔗 Related Skills & Docs

  • code-generation-developerCODE_GENERATION_GUIDE.md - Run make generate after adding icons
  • ios-dev-guidelinesIOS_DEVELOPMENT_GUIDE.md - SwiftUI patterns for design system
  • localization-developer → Combine typography with localized text

Navigation: This is a smart router. For deep technical details, always refer to DESIGN_SYSTEM_MAPPING.md and TYPOGRAPHY_MAPPING.md.