Implementing Figma Designs
This skill helps you implement Figma designs 1:1 using the OneKey component library.
Core Principles
Focus on UI First, Data Later
When implementing Figma designs, prioritize pixel-perfect UI over data integration:
-
Use mock data - Hardcode data that matches the design exactly
-
Skip i18n - Use plain strings directly from the design, no intl.formatMessage
-
Skip API calls - No need to fetch real data at this stage
-
Match the design - Focus on visual accuracy, spacing, colors, and layout
What NOT to do
-
Don't worry about where data comes from
-
Don't add translation keys (ETranslations)
-
Don't create API integration or hooks for fetching
-
Don't add complex state management
What TO do
-
Hardcode text exactly as shown in Figma
-
Create mock data arrays/objects that match the design
-
Focus on component structure and styling
-
Match spacing, colors, and typography from design
Component Lookup (On-Demand)
When you need to use a component, look up its source and demo:
Source Code Location Pattern
packages/components/src/{category}/{ComponentName}/
Categories:
-
primitives/
-
Button, Icon, Image, Skeleton, Spinner, Stack, Heading, SizeableText
-
forms/
-
Input, TextArea, Select, Checkbox, Radio, Switch, Slider, Form, OTPInput
-
actions/
-
IconButton, ActionList, Alert, Toast, Popover, SegmentControl, Pagination, Tooltip
-
composite/
-
Dialog, Tabs, Banner, Carousel, Table, Stepper
-
content/
-
Badge, Progress, Empty, Divider, QRCode, Markdown, LottieView, LinearGradient, BlurView
-
layouts/
-
Page, ScrollView, ListView, SectionList, Accordion, Swiper, SearchBar
Demo Location Pattern
packages/kit/src/views/Developer/pages/Gallery/Components/stories/{ComponentName}.tsx
Note: Some demos have different names (e.g., AccordionGallery.tsx , NewTabsGallery.tsx )
How to Look Up a Component
Read the source to understand props and structure:
Read: packages/components/src/{category}/{ComponentName}/index.tsx
Read the demo for usage examples:
Glob: packages/kit/src/views/Developer/pages/Gallery/Components/stories/{ComponentName}.tsx
Quick Reference
All imports from @onekeyhq/components
import { Button, Stack, XStack, YStack, Icon, ... } from '@onekeyhq/components';
Spacing Tokens
-
$1 = 4px, $2 = 8px, $3 = 12px, $4 = 16px
-
$5 = 20px, $6 = 24px, $8 = 32px, $10 = 40px
Color Tokens
-
Text: $text , $textSubdued , $textDisabled
-
Background: $bg , $bgSubdued , $bgHover , $bgActive
-
Border: $border , $borderSubdued , $borderActive
-
Icon: $icon , $iconSubdued , $iconDisabled
Font Size Tokens
Headings (large to small):
- $headingXxl , $headingXl , $headingLg , $headingMd , $headingSm , $headingXs
Body text (large to small):
- $bodyLg , $bodyMd , $bodySm , $bodyXs
With medium weight (append Medium ):
- $bodyLgMedium , $bodyMdMedium , $bodySmMedium , $bodyXsMedium
Usage with SizableText:
<SizableText size="$bodyMd">Regular text</SizableText> <SizableText size="$bodyMdMedium">Medium weight text</SizableText> <SizableText size="$headingSm">Small heading</SizableText>
Common Patterns
Layout with Stack:
<YStack gap="$4"> {/* Vertical /} <XStack gap="$4"> {/ Horizontal /} <Stack gap="$4"> {/ Default vertical */}
Mock Data:
const mockItems = [ { name: 'Bitcoin', symbol: 'BTC', value: '$21,432.50' }, { name: 'Ethereum', symbol: 'ETH', value: '$5,892.30' }, ];
Button Actions:
<Button onPress={() => console.log('clicked')}>Action</Button>
Workflow
-
Analyze the Figma design using Figma MCP
-
Identify which components are needed
-
Look up each component - read source and demo on-demand
-
Create mock data matching the design
-
Implement the UI with hardcoded values