@kood/claude-code 0.4.1 → 0.5.0
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/dist/index.js +53 -7
- package/package.json +2 -1
- package/templates/.claude/PARALLEL_AGENTS.md +737 -0
- package/templates/.claude/agents/analyst.md +416 -0
- package/templates/.claude/agents/architect.md +569 -0
- package/templates/.claude/agents/code-reviewer.md +132 -133
- package/templates/.claude/agents/dependency-manager.md +93 -94
- package/templates/.claude/agents/deployment-validator.md +64 -65
- package/templates/.claude/agents/designer.md +655 -0
- package/templates/.claude/agents/document-writer.md +500 -0
- package/templates/.claude/agents/explore.md +499 -0
- package/templates/.claude/agents/git-operator.md +74 -75
- package/templates/.claude/agents/implementation-executor.md +138 -109
- package/templates/.claude/agents/ko-to-en-translator.md +18 -22
- package/templates/.claude/agents/lint-fixer.md +250 -93
- package/templates/.claude/agents/planner.md +356 -0
- package/templates/.claude/agents/refactor-advisor.md +135 -136
- package/templates/.claude/commands/bug-fix.md +296 -207
- package/templates/.claude/commands/git-all.md +199 -46
- package/templates/.claude/commands/git-session.md +113 -57
- package/templates/.claude/commands/lint-fix.md +219 -153
- package/templates/.claude/commands/lint-init.md +113 -76
- package/templates/.claude/commands/pre-deploy.md +190 -124
- package/templates/.claude/commands/refactor.md +407 -162
- package/templates/.claude/commands/version-update.md +138 -37
- package/templates/.claude/instructions/context-engineering/ANTHROPIC_CONTEXT_ENGINEERING.md +178 -0
- package/templates/.claude/instructions/context-engineering/references/claude-4x.md +215 -0
- package/templates/.claude/instructions/context-engineering/references/core-principles.md +137 -0
- package/templates/.claude/instructions/context-engineering/references/examples.md +351 -0
- package/templates/.claude/instructions/context-engineering/references/techniques.md +162 -0
- package/templates/.claude/instructions/parallel-agent-execution.md +874 -0
- package/templates/.claude/skills/docs-creator/AGENTS.md +238 -0
- package/templates/.claude/{commands/docs-creator.md → skills/docs-creator/SKILL.md} +61 -75
- package/templates/.claude/skills/docs-refactor/AGENTS.md +270 -0
- package/templates/.claude/{commands/docs-refactor.md → skills/docs-refactor/SKILL.md} +30 -44
- package/templates/.claude/skills/execute/SKILL.md +451 -0
- package/templates/.claude/skills/figma-to-code/AGENTS.md +287 -0
- package/templates/.claude/skills/figma-to-code/SKILL.md +225 -225
- package/templates/.claude/skills/figma-to-code/references/design-tokens.md +75 -73
- package/templates/.claude/skills/figma-to-code/references/figma-mcp-tools.md +73 -73
- package/templates/.claude/skills/figma-to-code/references/layout-mapping.md +104 -104
- package/templates/.claude/skills/figma-to-code/references/responsive-design.md +99 -99
- package/templates/.claude/skills/figma-to-code/references/verification.md +91 -91
- package/templates/.claude/skills/global-uiux-design/AGENTS.md +317 -0
- package/templates/.claude/skills/global-uiux-design/SKILL.md +738 -0
- package/templates/.claude/skills/global-uiux-design/references/accessibility.md +401 -0
- package/templates/.claude/skills/global-uiux-design/references/color-system.md +275 -0
- package/templates/.claude/skills/global-uiux-design/references/design-philosophy.md +206 -0
- package/templates/.claude/skills/global-uiux-design/references/design-systems.md +446 -0
- package/templates/.claude/skills/korea-uiux-design/AGENTS.md +307 -0
- package/templates/.claude/skills/korea-uiux-design/SKILL.md +170 -0
- package/templates/.claude/skills/nextjs-react-best-practices/AGENTS.md +95 -116
- package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +134 -152
- package/templates/.claude/skills/nextjs-react-best-practices/rules/advanced-event-handler-refs.md +6 -6
- package/templates/.claude/skills/nextjs-react-best-practices/rules/advanced-use-latest.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/async-api-routes.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/async-defer-await.md +22 -22
- package/templates/.claude/skills/nextjs-react-best-practices/rules/async-dependencies.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/async-parallel.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/async-suspense-boundaries.md +21 -21
- package/templates/.claude/skills/nextjs-react-best-practices/rules/bundle-barrel-imports.md +18 -18
- package/templates/.claude/skills/nextjs-react-best-practices/rules/bundle-conditional.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/bundle-defer-third-party.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/bundle-dynamic-imports.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/bundle-preload.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/client-event-listeners.md +9 -9
- package/templates/.claude/skills/nextjs-react-best-practices/rules/client-swr-dedup.md +7 -7
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-batch-dom-css.md +13 -13
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-cache-function-results.md +14 -14
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-cache-property-access.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-cache-storage.md +10 -10
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-combine-iterations.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-early-exit.md +7 -7
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-hoist-regexp.md +6 -6
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-index-maps.md +6 -6
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-length-check-first.md +14 -14
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-min-max-loop.md +16 -16
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-set-map-lookups.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/js-tosorted-immutable.md +17 -17
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-activity.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-animate-svg-wrapper.md +11 -11
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-conditional-render.md +8 -8
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-content-visibility.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-hoist-jsx.md +6 -6
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-hydration-no-flicker.md +14 -14
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rendering-svg-precision.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-defer-reads.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-dependencies.md +7 -7
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-derived-state.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-functional-setstate.md +34 -34
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-lazy-state-init.md +15 -15
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-memo.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/rerender-transitions.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/server-after-nonblocking.md +24 -24
- package/templates/.claude/skills/nextjs-react-best-practices/rules/server-cache-lru.md +10 -10
- package/templates/.claude/skills/nextjs-react-best-practices/rules/server-cache-react.md +4 -4
- package/templates/.claude/skills/nextjs-react-best-practices/rules/server-parallel-fetching.md +5 -5
- package/templates/.claude/skills/nextjs-react-best-practices/rules/server-serialization.md +6 -6
- package/templates/.claude/skills/plan/SKILL.md +594 -0
- package/templates/.claude/skills/prd/SKILL.md +496 -0
- package/templates/.claude/skills/ralph/AGENTS.md +393 -0
- package/templates/.claude/skills/ralph/SKILL.md +1035 -0
- package/templates/.claude/skills/tanstack-start-react-best-practices/AGENTS.md +100 -121
- package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +139 -157
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-defer-await.md +22 -22
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-dependencies.md +5 -5
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-loader.md +7 -7
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-parallel.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-barrel-imports.md +18 -18
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-conditional.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-defer-third-party.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-lazy-routes.md +12 -12
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-preload.md +5 -5
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-event-listeners.md +9 -9
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-tanstack-query.md +12 -12
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-batch-dom-css.md +13 -13
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-function-results.md +14 -14
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-property-access.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-storage.md +10 -10
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-combine-iterations.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-early-exit.md +7 -7
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-hoist-regexp.md +6 -6
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-index-maps.md +6 -6
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-length-check-first.md +14 -14
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-min-max-loop.md +16 -16
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-set-map-lookups.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-tosorted-immutable.md +17 -17
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-animate-svg-wrapper.md +11 -11
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-conditional-render.md +8 -8
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-content-visibility.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-hoist-jsx.md +6 -6
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-svg-precision.md +5 -5
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-defer-reads.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-dependencies.md +7 -7
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-derived-state.md +5 -5
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-functional-setstate.md +34 -34
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-lazy-state-init.md +15 -15
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-memo.md +5 -5
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-transitions.md +4 -4
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-cache-lru.md +12 -12
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-deferred-data.md +14 -14
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-parallel-fetching.md +9 -9
- package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-serialization.md +6 -6
- package/templates/.claude/commands/agent-creator.md +0 -370
- package/templates/.claude/commands/command-creator.md +0 -524
- package/templates/.claude/commands/execute.md +0 -469
- package/templates/.claude/commands/git.md +0 -98
- package/templates/.claude/commands/plan.md +0 -526
- package/templates/.claude/commands/prd.md +0 -629
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Design Tokens
|
|
1
|
+
# Design Tokens 추출 및 매핑
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Figma Variables와 Styles를 Tailwind CSS v4 @theme 블록으로 정확히 변환하는 가이드.
|
|
4
4
|
|
|
5
|
-
**Tailwind v4
|
|
6
|
-
- **No Config File**:
|
|
7
|
-
- **@theme in CSS**:
|
|
8
|
-
- **Auto Class Generation**: `@theme { --color-primary: #xxx; }` → `bg-primary`
|
|
5
|
+
**Tailwind v4 특징:**
|
|
6
|
+
- **No Config File**: tailwind.config.js 제거
|
|
7
|
+
- **@theme in CSS**: globals.css에 직접 토큰 정의
|
|
8
|
+
- **Auto Class Generation**: `@theme { --color-primary: #xxx; }` → `bg-primary` 자동
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## Variables
|
|
12
|
+
## Variables 추출
|
|
13
13
|
|
|
14
14
|
### Color Variables
|
|
15
15
|
|
|
16
|
-
**Figma
|
|
16
|
+
**Figma 구조:**
|
|
17
17
|
```
|
|
18
18
|
color/
|
|
19
19
|
├─ primary/
|
|
@@ -29,11 +29,11 @@ color/
|
|
|
29
29
|
└─ warning → #F59E0B
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
**코드 변환:**
|
|
33
33
|
|
|
34
|
-
#### Tailwind v4 (@theme
|
|
34
|
+
#### Tailwind v4 (@theme 블록)
|
|
35
35
|
|
|
36
|
-
**Vite** (src/index.css
|
|
36
|
+
**Vite** (src/index.css 또는 src/main.css):
|
|
37
37
|
```css
|
|
38
38
|
@import "tailwindcss";
|
|
39
39
|
|
|
@@ -59,23 +59,23 @@ color/
|
|
|
59
59
|
@import "tailwindcss";
|
|
60
60
|
|
|
61
61
|
@theme {
|
|
62
|
-
/*
|
|
62
|
+
/* 동일한 구조 */
|
|
63
63
|
}
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
**자동 클래스 생성:**
|
|
67
67
|
```tsx
|
|
68
|
-
//
|
|
69
|
-
<div className="bg-primary-500"> {/*
|
|
70
|
-
<div className="text-primary-500"> {/*
|
|
71
|
-
<div className="border-primary-500"> {/*
|
|
68
|
+
// @theme { --color-primary-500: #3182F6; } 정의 후
|
|
69
|
+
<div className="bg-primary-500"> {/* 배경색 */}
|
|
70
|
+
<div className="text-primary-500"> {/* 텍스트 */}
|
|
71
|
+
<div className="border-primary-500"> {/* 보더 */}
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
**병합:** 기존 globals.css 토큰과 Figma 추출 토큰을 @theme 블록에 함께 정의.
|
|
75
75
|
|
|
76
76
|
### Spacing Variables
|
|
77
77
|
|
|
78
|
-
**Figma
|
|
78
|
+
**Figma 구조:**
|
|
79
79
|
```
|
|
80
80
|
spacing/
|
|
81
81
|
├─ xs → 4px
|
|
@@ -86,7 +86,7 @@ spacing/
|
|
|
86
86
|
└─ 2xl → 48px
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
**코드 변환 (Tailwind v4):**
|
|
90
90
|
|
|
91
91
|
```css
|
|
92
92
|
@import "tailwindcss";
|
|
@@ -101,11 +101,11 @@ spacing/
|
|
|
101
101
|
}
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
**사용:** `p-md` (16px), `gap-xs` (4px), `m-lg` (24px)
|
|
105
105
|
|
|
106
106
|
### Typography Variables
|
|
107
107
|
|
|
108
|
-
**Figma
|
|
108
|
+
**Figma 구조:**
|
|
109
109
|
```
|
|
110
110
|
font/
|
|
111
111
|
├─ size/
|
|
@@ -123,7 +123,7 @@ font/
|
|
|
123
123
|
└─ bold → 700
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
**코드 변환 (Tailwind v4):**
|
|
127
127
|
|
|
128
128
|
```css
|
|
129
129
|
@import "tailwindcss";
|
|
@@ -147,11 +147,11 @@ font/
|
|
|
147
147
|
}
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
**사용:** `text-sm font-regular font-sans` (14px/400/Pretendard), `text-lg font-semibold` (18px/600)
|
|
151
151
|
|
|
152
152
|
---
|
|
153
153
|
|
|
154
|
-
## Styles
|
|
154
|
+
## Styles 추출
|
|
155
155
|
|
|
156
156
|
### Text Styles
|
|
157
157
|
|
|
@@ -169,7 +169,7 @@ font/
|
|
|
169
169
|
}
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
**코드 변환:**
|
|
173
173
|
|
|
174
174
|
#### CSS Class
|
|
175
175
|
|
|
@@ -187,7 +187,7 @@ font/
|
|
|
187
187
|
|
|
188
188
|
```tsx
|
|
189
189
|
<h1 className="font-sans text-[28px] font-semibold leading-[36px] tracking-[-0.02em]">
|
|
190
|
-
|
|
190
|
+
제목
|
|
191
191
|
</h1>
|
|
192
192
|
```
|
|
193
193
|
|
|
@@ -212,16 +212,16 @@ const H1 = ({ children }: { children: React.ReactNode }) => (
|
|
|
212
212
|
}
|
|
213
213
|
```
|
|
214
214
|
|
|
215
|
-
**RGB → HEX
|
|
215
|
+
**RGB → HEX 변환:**
|
|
216
216
|
```
|
|
217
217
|
r: 0.133 × 255 = 34 → 22
|
|
218
218
|
g: 0.725 × 255 = 185 → B9
|
|
219
219
|
b: 0.478 × 255 = 122 → 7A
|
|
220
220
|
|
|
221
|
-
|
|
221
|
+
결과: #22B97A (정확히는 #22C55E)
|
|
222
222
|
```
|
|
223
223
|
|
|
224
|
-
|
|
224
|
+
**코드 사용:**
|
|
225
225
|
```css
|
|
226
226
|
.text-success {
|
|
227
227
|
color: #22C55E;
|
|
@@ -246,7 +246,7 @@ Result: #22B97A (more accurately: #22C55E)
|
|
|
246
246
|
}
|
|
247
247
|
```
|
|
248
248
|
|
|
249
|
-
|
|
249
|
+
**코드 변환:**
|
|
250
250
|
```css
|
|
251
251
|
.shadow-medium {
|
|
252
252
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
|
@@ -262,19 +262,19 @@ Result: #22B97A (more accurately: #22C55E)
|
|
|
262
262
|
|
|
263
263
|
---
|
|
264
264
|
|
|
265
|
-
##
|
|
265
|
+
## 변환 규칙
|
|
266
266
|
|
|
267
|
-
###
|
|
267
|
+
### 단위 변환
|
|
268
268
|
|
|
269
|
-
| Figma | CSS |
|
|
270
|
-
|
|
271
|
-
| `16` | `16px` |
|
|
272
|
-
| `{ unit: "PERCENT", value: 120 }` | `120%`
|
|
269
|
+
| Figma | CSS | 설명 |
|
|
270
|
+
|-------|-----|------|
|
|
271
|
+
| `16` | `16px` | 픽셀 그대로 |
|
|
272
|
+
| `{ unit: "PERCENT", value: 120 }` | `120%` 또는 `1.2` | line-height |
|
|
273
273
|
| `{ unit: "PERCENT", value: -2 }` | `-0.02em` | letter-spacing |
|
|
274
274
|
| `{ r: 0.5, g: 0.5, b: 0.5, a: 1 }` | `#808080` | RGB → HEX |
|
|
275
|
-
| `{ r: 0, g: 0, b: 0, a: 0.5 }` | `rgba(0,0,0,0.5)` |
|
|
275
|
+
| `{ r: 0, g: 0, b: 0, a: 0.5 }` | `rgba(0,0,0,0.5)` | 투명도 있을 때 |
|
|
276
276
|
|
|
277
|
-
###
|
|
277
|
+
### 네이밍 규칙
|
|
278
278
|
|
|
279
279
|
| Figma | CSS Variable | Tailwind |
|
|
280
280
|
|-------|--------------|----------|
|
|
@@ -282,7 +282,7 @@ Result: #22B97A (more accurately: #22C55E)
|
|
|
282
282
|
| `spacing/md` | `--spacing-md` | `md` (spacing) |
|
|
283
283
|
| `font/size/lg` | `--font-size-lg` | `text-lg` |
|
|
284
284
|
|
|
285
|
-
###
|
|
285
|
+
### 케이스 변환
|
|
286
286
|
|
|
287
287
|
```
|
|
288
288
|
Figma (PascalCase/slash): Heading/H1
|
|
@@ -292,42 +292,42 @@ Tailwind (custom): [28px] or heading-h1
|
|
|
292
292
|
|
|
293
293
|
---
|
|
294
294
|
|
|
295
|
-
##
|
|
295
|
+
## 워크플로우
|
|
296
296
|
|
|
297
|
-
|
|
|
298
|
-
|
|
299
|
-
|
|
|
300
|
-
|
|
|
301
|
-
|
|
|
302
|
-
|
|
|
303
|
-
|
|
|
297
|
+
| 단계 | 도구 | 출력 |
|
|
298
|
+
|------|------|------|
|
|
299
|
+
| Variables 추출 | get_variables | variables.json |
|
|
300
|
+
| CSS 변환 | Node 스크립트 | :root { --color-*: #...; } |
|
|
301
|
+
| Styles 추출 | get_styles | styles.json |
|
|
302
|
+
| @theme 생성 | 수동/스크립트 | @theme { --shadow-*: ...; } |
|
|
303
|
+
| 검증 | DevTools | className 값 일치 확인 |
|
|
304
304
|
|
|
305
305
|
---
|
|
306
306
|
|
|
307
|
-
##
|
|
307
|
+
## 베스트 프랙티스
|
|
308
308
|
|
|
309
309
|
### DO
|
|
310
310
|
|
|
311
|
-
|
|
|
312
|
-
|
|
313
|
-
| **Variables
|
|
314
|
-
|
|
|
315
|
-
|
|
|
316
|
-
|
|
|
311
|
+
| 원칙 | 예시 |
|
|
312
|
+
|------|------|
|
|
313
|
+
| **Variables 우선** | Figma Variables → CSS Variables → Tailwind |
|
|
314
|
+
| **정확한 값** | `#3182F6` (16진수 그대로) |
|
|
315
|
+
| **계층 유지** | `color/primary/500` → `--color-primary-500` |
|
|
316
|
+
| **코드 신택스 활용** | Figma codeSyntax 속성 참조 |
|
|
317
317
|
|
|
318
318
|
### DON'T
|
|
319
319
|
|
|
320
|
-
|
|
|
321
|
-
|
|
322
|
-
|
|
|
323
|
-
|
|
|
324
|
-
|
|
|
320
|
+
| 금지 사항 | 이유 |
|
|
321
|
+
|----------|------|
|
|
322
|
+
| **근사치 사용** | `#3182F6` → `bg-blue-500` (다름) |
|
|
323
|
+
| **임의 네이밍** | Figma 네이밍 구조 무시 |
|
|
324
|
+
| **하드코딩** | Variables 대신 직접 값 사용 |
|
|
325
325
|
|
|
326
326
|
---
|
|
327
327
|
|
|
328
|
-
##
|
|
328
|
+
## 도구
|
|
329
329
|
|
|
330
|
-
### Color
|
|
330
|
+
### Color 변환
|
|
331
331
|
|
|
332
332
|
```js
|
|
333
333
|
// RGB (0-1) → HEX
|
|
@@ -336,11 +336,11 @@ function rgbToHex(r, g, b) {
|
|
|
336
336
|
return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
//
|
|
339
|
+
// 사용
|
|
340
340
|
rgbToHex(0.192, 0.51, 0.965) // "#3182F6"
|
|
341
341
|
```
|
|
342
342
|
|
|
343
|
-
### Letter Spacing
|
|
343
|
+
### Letter Spacing 변환
|
|
344
344
|
|
|
345
345
|
```js
|
|
346
346
|
// Figma PERCENT → em
|
|
@@ -348,11 +348,11 @@ function percentToEm(percent) {
|
|
|
348
348
|
return (percent / 100).toFixed(3) + 'em'
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
-
//
|
|
351
|
+
// 사용
|
|
352
352
|
percentToEm(-2) // "-0.02em"
|
|
353
353
|
```
|
|
354
354
|
|
|
355
|
-
### Line Height
|
|
355
|
+
### Line Height 변환
|
|
356
356
|
|
|
357
357
|
```js
|
|
358
358
|
// Figma pixels → CSS
|
|
@@ -361,38 +361,40 @@ function lineHeight(fontSize, lineHeightPx) {
|
|
|
361
361
|
return `${lineHeightPx}px /* ${(ratio * 100).toFixed(1)}% */`
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
//
|
|
364
|
+
// 사용
|
|
365
365
|
lineHeight(28, 36) // "36px /* 128.6% */"
|
|
366
366
|
```
|
|
367
367
|
|
|
368
368
|
---
|
|
369
369
|
|
|
370
|
-
##
|
|
370
|
+
## 예제
|
|
371
371
|
|
|
372
|
-
Figma Variables → @theme
|
|
372
|
+
Figma Variables → @theme 블록 → 자동 클래스 생성:
|
|
373
373
|
|
|
374
374
|
```css
|
|
375
375
|
@theme { --color-primary-500: #3182F6; }
|
|
376
376
|
```
|
|
377
377
|
```tsx
|
|
378
|
-
<button className="bg-primary-500"
|
|
378
|
+
<button className="bg-primary-500">버튼</button>
|
|
379
379
|
```
|
|
380
380
|
|
|
381
381
|
---
|
|
382
382
|
|
|
383
|
+
---
|
|
384
|
+
|
|
383
385
|
## Tailwind v4 Migration
|
|
384
386
|
|
|
385
387
|
| v3 | v4 |
|
|
386
388
|
|-----|-----|
|
|
387
|
-
| `tailwind.config.js` |
|
|
389
|
+
| `tailwind.config.js` | 없음 (CSS로 이동) |
|
|
388
390
|
| `theme.extend` in JS | `@theme` in CSS |
|
|
389
391
|
| `@tailwind base/...` | `@import "tailwindcss"` |
|
|
390
392
|
|
|
391
|
-
**globals.css
|
|
393
|
+
**globals.css 위치:** Vite(`src/index.css`), Next.js App(`app/globals.css`), Pages(`styles/globals.css`)
|
|
392
394
|
|
|
393
395
|
---
|
|
394
396
|
|
|
395
|
-
##
|
|
397
|
+
## 참조
|
|
396
398
|
|
|
397
399
|
- [Figma Variables API](https://www.figma.com/developers/api#variables)
|
|
398
400
|
- [Design Tokens with Figma](https://blog.prototypr.io/design-tokens-with-figma-aef25c42430f)
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
# Figma MCP
|
|
1
|
+
# Figma MCP 도구 사용법
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Figma MCP가 제공하는 도구와 API 엔드포인트 상세 가이드.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## MCP
|
|
7
|
+
## MCP 연결 타입
|
|
8
8
|
|
|
9
|
-
### Desktop MCP (
|
|
9
|
+
### Desktop MCP (로컬)
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- Selection-based:
|
|
13
|
-
-
|
|
14
|
-
-
|
|
11
|
+
**장점:**
|
|
12
|
+
- 선택 기반 (Selection-based): 현재 선택한 레이어만 처리
|
|
13
|
+
- 빠른 응답 속도
|
|
14
|
+
- 인터넷 연결 불필요
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**설정:**
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
#
|
|
19
|
+
# 추가
|
|
20
20
|
claude mcp add --transport http figma-desktop http://127.0.0.1:3845/mcp
|
|
21
21
|
|
|
22
|
-
#
|
|
22
|
+
# 확인
|
|
23
23
|
claude mcp list
|
|
24
24
|
|
|
25
|
-
#
|
|
25
|
+
# 재시작
|
|
26
26
|
claude mcp restart figma-desktop
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
**활성화:** Figma Desktop → Dev Mode (Shift+D) → Inspect → "Enable desktop MCP server" → 확인: `http://127.0.0.1:3845/health`
|
|
30
30
|
|
|
31
|
-
### Remote MCP (
|
|
31
|
+
### Remote MCP (클라우드)
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
33
|
+
**장점:**
|
|
34
|
+
- 파일 URL로 접근 가능
|
|
35
|
+
- 데스크톱 앱 불필요
|
|
36
|
+
- 팀 협업에 유리
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
**설정:**
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
#
|
|
41
|
+
# 추가
|
|
42
42
|
claude mcp add --transport http figma-remote-mcp https://mcp.figma.com/mcp
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# 인증
|
|
45
45
|
claude mcp login figma-remote-mcp
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
**사용:**
|
|
49
49
|
```
|
|
50
|
-
|
|
50
|
+
파일 URL 제공:
|
|
51
51
|
https://www.figma.com/file/ABC123/ProjectName
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## 주요 MCP 도구
|
|
57
57
|
|
|
58
58
|
### 1. get_file_info
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
파일 메타데이터 및 구조 조회 (작업 시작 전 필수).
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
**응답:**
|
|
63
63
|
```json
|
|
64
64
|
{
|
|
65
65
|
"name": "Design System",
|
|
@@ -76,9 +76,9 @@ Retrieve file metadata and structure (required before starting work).
|
|
|
76
76
|
|
|
77
77
|
### 2. get_variables
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
Variables (Color, Number, String, Boolean) 추출.
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
**응답:**
|
|
82
82
|
```json
|
|
83
83
|
{
|
|
84
84
|
"variables": [
|
|
@@ -116,7 +116,7 @@ Extract Variables (Color, Number, String, Boolean).
|
|
|
116
116
|
|
|
117
117
|
### 3. get_styles
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Text Styles, Color Styles, Effect Styles 추출.
|
|
120
120
|
|
|
121
121
|
**Text Styles:**
|
|
122
122
|
```json
|
|
@@ -155,9 +155,9 @@ Extract Text Styles, Color Styles, Effect Styles.
|
|
|
155
155
|
|
|
156
156
|
### 4. get_node_properties
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
선택된 레이어의 레이아웃/Auto Layout/스타일/텍스트/이미지 속성 (Desktop MCP: 레이어 선택 필수).
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
**응답:**
|
|
161
161
|
```json
|
|
162
162
|
{
|
|
163
163
|
"id": "123:456",
|
|
@@ -179,7 +179,7 @@ Retrieve layer properties including layout/Auto Layout/styles/text/images (Deskt
|
|
|
179
179
|
"children": [
|
|
180
180
|
{
|
|
181
181
|
"type": "TEXT",
|
|
182
|
-
"characters": "
|
|
182
|
+
"characters": "버튼 텍스트",
|
|
183
183
|
"style": { "fontSize": 14, "fontWeight": 600 }
|
|
184
184
|
}
|
|
185
185
|
]
|
|
@@ -189,98 +189,98 @@ Retrieve layer properties including layout/Auto Layout/styles/text/images (Deskt
|
|
|
189
189
|
**→ TSX:**
|
|
190
190
|
```tsx
|
|
191
191
|
<button className="flex items-center justify-center gap-[8px] px-[16px] py-[12px] bg-[#3182F6] rounded-[8px] w-[120px] h-[44px]">
|
|
192
|
-
<span className="text-[14px] font-semibold text-white"
|
|
192
|
+
<span className="text-[14px] font-semibold text-white">버튼 텍스트</span>
|
|
193
193
|
</button>
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
### 5. get_images
|
|
197
197
|
|
|
198
|
-
|
|
198
|
+
이미지 에셋 다운로드 링크 생성.
|
|
199
199
|
|
|
200
|
-
|
|
200
|
+
**사용:**
|
|
201
201
|
```json
|
|
202
202
|
// Input: image_refs: ["123:456"]
|
|
203
203
|
// Output: { "123:456": "https://s3-alpha.figma.com/..." }
|
|
204
204
|
```
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
**워크플로우:**
|
|
207
207
|
```bash
|
|
208
|
-
# PNG/JPG → WebP (SVG
|
|
208
|
+
# PNG/JPG → WebP (SVG 파일은 변환하지 않음)
|
|
209
209
|
curl -o hero.png "https://..." && cwebp hero.png -q 80 -o hero.webp && mv hero.webp public/images/
|
|
210
210
|
curl -o banner.jpg "https://..." && cwebp banner.jpg -q 80 -o banner.webp && mv banner.webp public/images/
|
|
211
211
|
```
|
|
212
212
|
|
|
213
213
|
### 6. export_node
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
레이어를 SVG/PNG/JPG로 export.
|
|
216
216
|
|
|
217
|
-
|
|
217
|
+
**설정:**
|
|
218
218
|
```json
|
|
219
219
|
{ "node_id": "123:456", "format": "SVG", "scale": 2 }
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
|
|
222
|
+
**케이스:** 아이콘(SVG), 일러스트(PNG/WebP 2x), 로고(SVG)
|
|
223
223
|
|
|
224
224
|
---
|
|
225
225
|
|
|
226
|
-
##
|
|
226
|
+
## 워크플로우
|
|
227
227
|
|
|
228
|
-
|
|
|
229
|
-
|
|
230
|
-
| 1.
|
|
231
|
-
| 2.
|
|
232
|
-
| 3.
|
|
233
|
-
| 4.
|
|
234
|
-
| 5.
|
|
235
|
-
| 6.
|
|
236
|
-
| 7.
|
|
228
|
+
| 단계 | 도구 | 출력 |
|
|
229
|
+
|------|------|------|
|
|
230
|
+
| 1. 파일 구조 | get_file_info | Canvas/Frame 구조 |
|
|
231
|
+
| 2. 토큰 추출 | get_variables | CSS Variables |
|
|
232
|
+
| 3. 스타일 추출 | get_styles | Text/Color Styles |
|
|
233
|
+
| 4. 레이어 속성 | get_node_properties | Layout/Auto Layout |
|
|
234
|
+
| 5. 이미지 수집 | get_images | 다운로드 URL |
|
|
235
|
+
| 6. 코드 구현 | - | Flexbox/Grid + 정확한 수치 |
|
|
236
|
+
| 7. 검증 | DevTools | 수치 비교 |
|
|
237
237
|
|
|
238
238
|
---
|
|
239
239
|
|
|
240
|
-
##
|
|
240
|
+
## 주의 사항
|
|
241
241
|
|
|
242
242
|
### Desktop MCP
|
|
243
243
|
|
|
244
|
-
|
|
|
245
|
-
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
|
|
|
244
|
+
| 제약 | 해결 |
|
|
245
|
+
|------|------|
|
|
246
|
+
| 레이어 선택 필수 | 구현 전 대상 레이어 선택 |
|
|
247
|
+
| 동시 실행 제한 | 한 번에 하나의 파일만 |
|
|
248
|
+
| 로컬 네트워크 필요 | 방화벽 확인 (포트 3845) |
|
|
249
249
|
|
|
250
250
|
### Remote MCP
|
|
251
251
|
|
|
252
|
-
|
|
|
253
|
-
|
|
254
|
-
|
|
|
255
|
-
| Rate
|
|
256
|
-
|
|
|
252
|
+
| 제약 | 해결 |
|
|
253
|
+
|------|------|
|
|
254
|
+
| 인증 필요 | `claude mcp login` 실행 |
|
|
255
|
+
| Rate Limit | 429 에러 시 대기 |
|
|
256
|
+
| 파일 권한 | View 권한 이상 필요 |
|
|
257
257
|
|
|
258
258
|
---
|
|
259
259
|
|
|
260
|
-
##
|
|
260
|
+
## 디버깅
|
|
261
261
|
|
|
262
|
-
###
|
|
262
|
+
### MCP 연결 확인
|
|
263
263
|
|
|
264
264
|
```bash
|
|
265
|
-
# Desktop MCP
|
|
265
|
+
# Desktop MCP 상태
|
|
266
266
|
curl http://127.0.0.1:3845/health
|
|
267
267
|
|
|
268
|
-
# Remote MCP
|
|
268
|
+
# Remote MCP 로그인 상태
|
|
269
269
|
claude mcp status figma-remote-mcp
|
|
270
270
|
```
|
|
271
271
|
|
|
272
|
-
###
|
|
272
|
+
### 오류 해결
|
|
273
273
|
|
|
274
|
-
|
|
|
275
|
-
|
|
276
|
-
| `Connection refused` | Desktop MCP
|
|
277
|
-
| `401 Unauthorized` | Remote MCP
|
|
278
|
-
| `404 Not Found` |
|
|
279
|
-
| `429 Too Many Requests` | Rate
|
|
274
|
+
| 오류 | 원인 | 해결 |
|
|
275
|
+
|------|------|------|
|
|
276
|
+
| `Connection refused` | Desktop MCP 미활성화 | Figma Dev Mode에서 Enable |
|
|
277
|
+
| `401 Unauthorized` | Remote MCP 인증 만료 | `claude mcp login` 재실행 |
|
|
278
|
+
| `404 Not Found` | 잘못된 node_id | Figma에서 ID 재확인 |
|
|
279
|
+
| `429 Too Many Requests` | Rate Limit 초과 | 1분 대기 후 재시도 |
|
|
280
280
|
|
|
281
281
|
---
|
|
282
282
|
|
|
283
|
-
##
|
|
283
|
+
## 참조
|
|
284
284
|
|
|
285
285
|
- [Figma MCP Server Documentation](https://developers.figma.com/docs/figma-mcp-server/)
|
|
286
286
|
- [Figma REST API Reference](https://www.figma.com/developers/api)
|