@kood/claude-code 0.5.3 → 0.5.4
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 +548 -340
- package/package.json +1 -1
- package/templates/.claude/agents/document-writer.md +71 -304
- package/templates/.claude/instructions/agent-patterns/index.md +7 -7
- package/templates/.claude/instructions/document-templates/ralph-templates.md +71 -0
- package/templates/.claude/instructions/index.md +14 -14
- package/templates/.claude/instructions/multi-agent/agent-roster.md +14 -14
- package/templates/.claude/instructions/multi-agent/index.md +4 -4
- package/templates/.claude/skills/docs-creator/AGENTS.md +54 -176
- package/templates/.claude/skills/docs-creator/SKILL.md +97 -463
- package/templates/.claude/skills/docs-refactor/AGENTS.md +61 -190
- package/templates/.claude/skills/docs-refactor/SKILL.md +66 -442
- package/templates/.claude/skills/execute/SKILL.md +540 -13
- package/templates/.claude/skills/plan/SKILL.md +83 -17
- package/templates/.claude/skills/ralph/SKILL.md +17 -14
- package/templates/.claude/skills/refactor/AGENTS.md +269 -0
- package/templates/.claude/skills/refactor/SKILL.md +424 -66
- package/templates/.claude/skills/stitch-design/README.md +34 -0
- package/templates/.claude/skills/stitch-design/SKILL.md +213 -0
- package/templates/.claude/skills/stitch-design/examples/DESIGN.md +154 -0
- package/templates/.claude/skills/stitch-loop/README.md +54 -0
- package/templates/.claude/skills/stitch-loop/SKILL.md +316 -0
- package/templates/.claude/skills/stitch-loop/examples/SITE.md +73 -0
- package/templates/.claude/skills/stitch-loop/examples/next-prompt.md +25 -0
- package/templates/.claude/skills/stitch-loop/resources/baton-schema.md +61 -0
- package/templates/.claude/skills/stitch-loop/resources/site-template.md +104 -0
- package/templates/.claude/skills/stitch-react/README.md +36 -0
- package/templates/.claude/skills/stitch-react/SKILL.md +323 -0
- package/templates/.claude/skills/stitch-react/examples/gold-standard-card.tsx +88 -0
- package/templates/.claude/skills/stitch-react/package-lock.json +231 -0
- package/templates/.claude/skills/stitch-react/package.json +16 -0
- package/templates/.claude/skills/stitch-react/resources/architecture-checklist.md +15 -0
- package/templates/.claude/skills/stitch-react/resources/component-template.tsx +37 -0
- package/templates/.claude/skills/stitch-react/resources/stitch-api-reference.md +14 -0
- package/templates/.claude/skills/stitch-react/resources/style-guide.json +24 -0
- package/templates/.claude/skills/stitch-react/scripts/fetch-stitch.sh +30 -0
- package/templates/.claude/skills/stitch-react/scripts/validate.js +77 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stitch:react
|
|
3
|
+
description: 디자인을 모듈형 React 컴포넌트로 변환
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<purpose>
|
|
7
|
+
디자인 자산을 타입 안전하고 모듈화된 React 컴포넌트로 변환
|
|
8
|
+
</purpose>
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<trigger_conditions>
|
|
13
|
+
|
|
14
|
+
| 트리거 | 반응 |
|
|
15
|
+
|--------|------|
|
|
16
|
+
| "React 컴포넌트 생성" | 즉시 실행 |
|
|
17
|
+
| "디자인을 컴포넌트로" | 즉시 실행 |
|
|
18
|
+
| "UI 컴포넌트 구현" | 즉시 실행 |
|
|
19
|
+
|
|
20
|
+
</trigger_conditions>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<workflow>
|
|
25
|
+
|
|
26
|
+
<step number="1">
|
|
27
|
+
<action>디자인 자산 분석</action>
|
|
28
|
+
<tools>Read</tools>
|
|
29
|
+
<details>
|
|
30
|
+
- 디자인 파일(Figma, Sketch, DESIGN.md) 읽기
|
|
31
|
+
- 색상, 타이포, 간격 정보 추출
|
|
32
|
+
- 컴포넌트 구조 파악
|
|
33
|
+
</details>
|
|
34
|
+
</step>
|
|
35
|
+
|
|
36
|
+
<step number="2">
|
|
37
|
+
<action>아키텍처 설계</action>
|
|
38
|
+
<tools>-</tools>
|
|
39
|
+
<details>
|
|
40
|
+
| 분류 | 위치 | 목적 |
|
|
41
|
+
|------|------|------|
|
|
42
|
+
| 컴포넌트 | `src/components/` | 재사용 가능 UI |
|
|
43
|
+
| 훅 | `src/hooks/` | 비즈니스 로직 분리 |
|
|
44
|
+
| 데이터 | `src/data/mockData.ts` | 정적 콘텐츠 |
|
|
45
|
+
| 타입 | `src/types/` | TypeScript 인터페이스 |
|
|
46
|
+
</details>
|
|
47
|
+
</step>
|
|
48
|
+
|
|
49
|
+
<step number="3">
|
|
50
|
+
<action>컴포넌트 구현</action>
|
|
51
|
+
<tools>Write</tools>
|
|
52
|
+
<details>
|
|
53
|
+
**원칙:**
|
|
54
|
+
- 하나의 파일 = 하나의 컴포넌트
|
|
55
|
+
- Props는 TypeScript 인터페이스로 정의
|
|
56
|
+
- Tailwind 클래스 사용 (하드코딩 금지)
|
|
57
|
+
- 접근성(a11y) 고려
|
|
58
|
+
|
|
59
|
+
**구조:**
|
|
60
|
+
```typescript
|
|
61
|
+
interface ButtonProps {
|
|
62
|
+
readonly variant: 'primary' | 'secondary';
|
|
63
|
+
readonly children: React.ReactNode;
|
|
64
|
+
readonly onClick?: () => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function Button({ variant, children, onClick }: ButtonProps) {
|
|
68
|
+
return (
|
|
69
|
+
<button
|
|
70
|
+
className={variant === 'primary' ? 'bg-primary' : 'bg-secondary'}
|
|
71
|
+
onClick={onClick}
|
|
72
|
+
>
|
|
73
|
+
{children}
|
|
74
|
+
</button>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
</details>
|
|
79
|
+
</step>
|
|
80
|
+
|
|
81
|
+
<step number="4">
|
|
82
|
+
<action>Tailwind 설정 동기화</action>
|
|
83
|
+
<tools>Edit</tools>
|
|
84
|
+
<details>
|
|
85
|
+
DESIGN.md의 색상/타이포 → `tailwind.config.ts`
|
|
86
|
+
```typescript
|
|
87
|
+
export default {
|
|
88
|
+
theme: {
|
|
89
|
+
extend: {
|
|
90
|
+
colors: {
|
|
91
|
+
primary: '#3B82F6',
|
|
92
|
+
secondary: '#64748B',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
</details>
|
|
99
|
+
</step>
|
|
100
|
+
|
|
101
|
+
<step number="5">
|
|
102
|
+
<action>검증</action>
|
|
103
|
+
<tools>Bash</tools>
|
|
104
|
+
<details>
|
|
105
|
+
```bash
|
|
106
|
+
# TypeScript 타입 체크
|
|
107
|
+
npx tsc --noEmit
|
|
108
|
+
|
|
109
|
+
# 린트
|
|
110
|
+
npx eslint src/
|
|
111
|
+
|
|
112
|
+
# 빌드 테스트
|
|
113
|
+
npm run build
|
|
114
|
+
```
|
|
115
|
+
</details>
|
|
116
|
+
</step>
|
|
117
|
+
|
|
118
|
+
</workflow>
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
<architecture_rules>
|
|
123
|
+
|
|
124
|
+
## 금지
|
|
125
|
+
|
|
126
|
+
| 패턴 | 이유 |
|
|
127
|
+
|------|------|
|
|
128
|
+
| 단일 파일에 모든 컴포넌트 | 유지보수 어려움 |
|
|
129
|
+
| 하드코딩된 색상 (`#3B82F6`) | 테마 변경 불가 |
|
|
130
|
+
| 인라인 스타일 | 일관성 저하 |
|
|
131
|
+
| any 타입 | 타입 안전성 상실 |
|
|
132
|
+
|
|
133
|
+
## 필수
|
|
134
|
+
|
|
135
|
+
| 패턴 | 이유 |
|
|
136
|
+
|------|------|
|
|
137
|
+
| 컴포넌트당 1파일 | 명확한 구조 |
|
|
138
|
+
| Tailwind 클래스 | 테마 통합 |
|
|
139
|
+
| TypeScript 인터페이스 | 타입 안전성 |
|
|
140
|
+
| Readonly Props | 불변성 보장 |
|
|
141
|
+
|
|
142
|
+
</architecture_rules>
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
<examples>
|
|
147
|
+
|
|
148
|
+
## Button 컴포넌트
|
|
149
|
+
|
|
150
|
+
**입력 (DESIGN.md):**
|
|
151
|
+
```markdown
|
|
152
|
+
### 버튼
|
|
153
|
+
- Primary: 파란색 배경, 흰색 텍스트
|
|
154
|
+
- Secondary: 회색 배경, 검은색 텍스트
|
|
155
|
+
- 모서리: 8px 라운드
|
|
156
|
+
- 패딩: 상하 12px, 좌우 24px
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**출력:**
|
|
160
|
+
```typescript
|
|
161
|
+
// src/components/Button.tsx
|
|
162
|
+
interface ButtonProps {
|
|
163
|
+
readonly variant: 'primary' | 'secondary';
|
|
164
|
+
readonly children: React.ReactNode;
|
|
165
|
+
readonly onClick?: () => void;
|
|
166
|
+
readonly disabled?: boolean;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export function Button({
|
|
170
|
+
variant,
|
|
171
|
+
children,
|
|
172
|
+
onClick,
|
|
173
|
+
disabled
|
|
174
|
+
}: ButtonProps) {
|
|
175
|
+
const baseClasses = 'rounded-lg px-6 py-3 font-medium transition-colors';
|
|
176
|
+
const variantClasses = {
|
|
177
|
+
primary: 'bg-primary text-white hover:bg-primary-dark',
|
|
178
|
+
secondary: 'bg-secondary text-black hover:bg-secondary-dark',
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
return (
|
|
182
|
+
<button
|
|
183
|
+
className={`${baseClasses} ${variantClasses[variant]}`}
|
|
184
|
+
onClick={onClick}
|
|
185
|
+
disabled={disabled}
|
|
186
|
+
aria-disabled={disabled}
|
|
187
|
+
>
|
|
188
|
+
{children}
|
|
189
|
+
</button>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
// tailwind.config.ts
|
|
196
|
+
export default {
|
|
197
|
+
theme: {
|
|
198
|
+
extend: {
|
|
199
|
+
colors: {
|
|
200
|
+
primary: {
|
|
201
|
+
DEFAULT: '#3B82F6',
|
|
202
|
+
dark: '#2563EB',
|
|
203
|
+
},
|
|
204
|
+
secondary: {
|
|
205
|
+
DEFAULT: '#64748B',
|
|
206
|
+
dark: '#475569',
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Card 컴포넌트
|
|
217
|
+
|
|
218
|
+
**입력:**
|
|
219
|
+
```markdown
|
|
220
|
+
### 카드
|
|
221
|
+
- 배경: 흰색
|
|
222
|
+
- 테두리: 연한 회색 1px
|
|
223
|
+
- 그림자: 부드러운 그림자
|
|
224
|
+
- 패딩: 24px
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**출력:**
|
|
228
|
+
```typescript
|
|
229
|
+
// src/components/Card.tsx
|
|
230
|
+
interface CardProps {
|
|
231
|
+
readonly children: React.ReactNode;
|
|
232
|
+
readonly className?: string;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function Card({ children, className = '' }: CardProps) {
|
|
236
|
+
return (
|
|
237
|
+
<div className={`bg-white border border-gray-200 rounded-xl p-6 shadow-sm ${className}`}>
|
|
238
|
+
{children}
|
|
239
|
+
</div>
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
</examples>
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
<custom_hook_pattern>
|
|
249
|
+
|
|
250
|
+
**비즈니스 로직 분리:**
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// src/hooks/useUserData.ts
|
|
254
|
+
import { useState, useEffect } from 'react';
|
|
255
|
+
|
|
256
|
+
interface User {
|
|
257
|
+
readonly id: string;
|
|
258
|
+
readonly name: string;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export function useUserData(userId: string) {
|
|
262
|
+
const [user, setUser] = useState<User | null>(null);
|
|
263
|
+
const [loading, setLoading] = useState(true);
|
|
264
|
+
|
|
265
|
+
useEffect(() => {
|
|
266
|
+
async function fetchUser() {
|
|
267
|
+
const response = await fetch(`/api/users/${userId}`);
|
|
268
|
+
const data = await response.json();
|
|
269
|
+
setUser(data);
|
|
270
|
+
setLoading(false);
|
|
271
|
+
}
|
|
272
|
+
fetchUser();
|
|
273
|
+
}, [userId]);
|
|
274
|
+
|
|
275
|
+
return { user, loading };
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**컴포넌트에서 사용:**
|
|
280
|
+
```typescript
|
|
281
|
+
// src/components/UserProfile.tsx
|
|
282
|
+
import { useUserData } from '@/hooks/useUserData';
|
|
283
|
+
|
|
284
|
+
export function UserProfile({ userId }: { userId: string }) {
|
|
285
|
+
const { user, loading } = useUserData(userId);
|
|
286
|
+
|
|
287
|
+
if (loading) return <div>Loading...</div>;
|
|
288
|
+
return <div>{user?.name}</div>;
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
</custom_hook_pattern>
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
<validation>
|
|
297
|
+
|
|
298
|
+
**체크리스트:**
|
|
299
|
+
- [ ] 컴포넌트당 1파일
|
|
300
|
+
- [ ] TypeScript 인터페이스 정의
|
|
301
|
+
- [ ] Props에 `readonly` 사용
|
|
302
|
+
- [ ] Tailwind 클래스만 사용 (하드코딩 금지)
|
|
303
|
+
- [ ] 접근성(aria-*) 속성 추가
|
|
304
|
+
- [ ] 비즈니스 로직은 Custom Hook으로 분리
|
|
305
|
+
- [ ] `tsc --noEmit` 통과
|
|
306
|
+
- [ ] `eslint` 통과
|
|
307
|
+
|
|
308
|
+
</validation>
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
<best_practices>
|
|
313
|
+
|
|
314
|
+
| 원칙 | 방법 |
|
|
315
|
+
|------|------|
|
|
316
|
+
| **모듈화** | 작은 단위로 분리 |
|
|
317
|
+
| **타입 안전성** | `any` 금지, 명시적 타입 |
|
|
318
|
+
| **불변성** | `readonly` Props |
|
|
319
|
+
| **테마 통합** | Tailwind 설정 활용 |
|
|
320
|
+
| **접근성** | ARIA 속성, 시맨틱 HTML |
|
|
321
|
+
| **로직 분리** | UI ≠ 비즈니스 로직 |
|
|
322
|
+
|
|
323
|
+
</best_practices>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import React from 'react';
|
|
18
|
+
// Note for Agent: The '@' alias refers to the target project's src directory.
|
|
19
|
+
// Ensure src/data/mockData.ts is created before generating this component.
|
|
20
|
+
import { cardData } from '../data/mockData';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Gold Standard: ActivityCard
|
|
24
|
+
* This file serves as the definitive reference for the agent.
|
|
25
|
+
*/
|
|
26
|
+
interface ActivityCardProps {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly username: string;
|
|
29
|
+
readonly action: 'MERGED' | 'COMMIT';
|
|
30
|
+
readonly timestamp: string;
|
|
31
|
+
readonly avatarUrl: string;
|
|
32
|
+
readonly repoName: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const ActivityCard: React.FC<ActivityCardProps> = ({
|
|
36
|
+
username,
|
|
37
|
+
action,
|
|
38
|
+
timestamp,
|
|
39
|
+
avatarUrl,
|
|
40
|
+
repoName,
|
|
41
|
+
}) => {
|
|
42
|
+
const isMerged = action === 'MERGED';
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className='flex items-center justify-between gap-4 rounded-lg bg-surface-dark p-4 min-h-14 shadow-sm ring-1 ring-white/10'>
|
|
46
|
+
<div className='flex items-center gap-4 overflow-hidden'>
|
|
47
|
+
<div
|
|
48
|
+
className='aspect-square h-10 w-10 flex-shrink-0 rounded-full bg-cover bg-center bg-no-repeat'
|
|
49
|
+
style={{ backgroundImage: `url(${avatarUrl})` }}
|
|
50
|
+
aria-label={`Avatar for ${username}`}
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
<div className='flex flex-wrap items-center gap-x-2 gap-y-1 text-sm sm:text-base'>
|
|
54
|
+
<a
|
|
55
|
+
href='#'
|
|
56
|
+
className='font-semibold text-primary hover:underline truncate'
|
|
57
|
+
>
|
|
58
|
+
{username}
|
|
59
|
+
</a>
|
|
60
|
+
|
|
61
|
+
<span
|
|
62
|
+
className={`inline-block px-2 py-0.5 text-xs font-semibold rounded-full ${
|
|
63
|
+
isMerged
|
|
64
|
+
? 'bg-purple-500/30 text-purple-300'
|
|
65
|
+
: 'bg-primary/30 text-primary'
|
|
66
|
+
}`}
|
|
67
|
+
>
|
|
68
|
+
{action}
|
|
69
|
+
</span>
|
|
70
|
+
|
|
71
|
+
<span className='text-white/60'>in</span>
|
|
72
|
+
|
|
73
|
+
<a href='#' className='text-primary hover:underline truncate'>
|
|
74
|
+
{repoName}
|
|
75
|
+
</a>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div className='shrink-0'>
|
|
80
|
+
<p className='text-sm font-normal leading-normal text-white/50'>
|
|
81
|
+
{timestamp}
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export default ActivityCard;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stitch-to-react-pro",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "stitch-to-react-pro",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@swc/core": "^1.3.100"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18.0.0"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"node_modules/@swc/core": {
|
|
18
|
+
"version": "1.15.8",
|
|
19
|
+
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.8.tgz",
|
|
20
|
+
"integrity": "sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==",
|
|
21
|
+
"hasInstallScript": true,
|
|
22
|
+
"license": "Apache-2.0",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@swc/counter": "^0.1.3",
|
|
25
|
+
"@swc/types": "^0.1.25"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=10"
|
|
29
|
+
},
|
|
30
|
+
"funding": {
|
|
31
|
+
"type": "opencollective",
|
|
32
|
+
"url": "https://opencollective.com/swc"
|
|
33
|
+
},
|
|
34
|
+
"optionalDependencies": {
|
|
35
|
+
"@swc/core-darwin-arm64": "1.15.8",
|
|
36
|
+
"@swc/core-darwin-x64": "1.15.8",
|
|
37
|
+
"@swc/core-linux-arm-gnueabihf": "1.15.8",
|
|
38
|
+
"@swc/core-linux-arm64-gnu": "1.15.8",
|
|
39
|
+
"@swc/core-linux-arm64-musl": "1.15.8",
|
|
40
|
+
"@swc/core-linux-x64-gnu": "1.15.8",
|
|
41
|
+
"@swc/core-linux-x64-musl": "1.15.8",
|
|
42
|
+
"@swc/core-win32-arm64-msvc": "1.15.8",
|
|
43
|
+
"@swc/core-win32-ia32-msvc": "1.15.8",
|
|
44
|
+
"@swc/core-win32-x64-msvc": "1.15.8"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"@swc/helpers": ">=0.5.17"
|
|
48
|
+
},
|
|
49
|
+
"peerDependenciesMeta": {
|
|
50
|
+
"@swc/helpers": {
|
|
51
|
+
"optional": true
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"node_modules/@swc/core-darwin-arm64": {
|
|
56
|
+
"version": "1.15.8",
|
|
57
|
+
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz",
|
|
58
|
+
"integrity": "sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==",
|
|
59
|
+
"cpu": [
|
|
60
|
+
"arm64"
|
|
61
|
+
],
|
|
62
|
+
"license": "Apache-2.0 AND MIT",
|
|
63
|
+
"optional": true,
|
|
64
|
+
"os": [
|
|
65
|
+
"darwin"
|
|
66
|
+
],
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=10"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"node_modules/@swc/core-darwin-x64": {
|
|
72
|
+
"version": "1.15.8",
|
|
73
|
+
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz",
|
|
74
|
+
"integrity": "sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==",
|
|
75
|
+
"cpu": [
|
|
76
|
+
"x64"
|
|
77
|
+
],
|
|
78
|
+
"license": "Apache-2.0 AND MIT",
|
|
79
|
+
"optional": true,
|
|
80
|
+
"os": [
|
|
81
|
+
"darwin"
|
|
82
|
+
],
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": ">=10"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"node_modules/@swc/core-linux-arm-gnueabihf": {
|
|
88
|
+
"version": "1.15.8",
|
|
89
|
+
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz",
|
|
90
|
+
"integrity": "sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==",
|
|
91
|
+
"cpu": [
|
|
92
|
+
"arm"
|
|
93
|
+
],
|
|
94
|
+
"license": "Apache-2.0",
|
|
95
|
+
"optional": true,
|
|
96
|
+
"os": [
|
|
97
|
+
"linux"
|
|
98
|
+
],
|
|
99
|
+
"engines": {
|
|
100
|
+
"node": ">=10"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"node_modules/@swc/core-linux-arm64-gnu": {
|
|
104
|
+
"version": "1.15.8",
|
|
105
|
+
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz",
|
|
106
|
+
"integrity": "sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==",
|
|
107
|
+
"cpu": [
|
|
108
|
+
"arm64"
|
|
109
|
+
],
|
|
110
|
+
"license": "Apache-2.0 AND MIT",
|
|
111
|
+
"optional": true,
|
|
112
|
+
"os": [
|
|
113
|
+
"linux"
|
|
114
|
+
],
|
|
115
|
+
"engines": {
|
|
116
|
+
"node": ">=10"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"node_modules/@swc/core-linux-arm64-musl": {
|
|
120
|
+
"version": "1.15.8",
|
|
121
|
+
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz",
|
|
122
|
+
"integrity": "sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==",
|
|
123
|
+
"cpu": [
|
|
124
|
+
"arm64"
|
|
125
|
+
],
|
|
126
|
+
"license": "Apache-2.0 AND MIT",
|
|
127
|
+
"optional": true,
|
|
128
|
+
"os": [
|
|
129
|
+
"linux"
|
|
130
|
+
],
|
|
131
|
+
"engines": {
|
|
132
|
+
"node": ">=10"
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"node_modules/@swc/core-linux-x64-gnu": {
|
|
136
|
+
"version": "1.15.8",
|
|
137
|
+
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz",
|
|
138
|
+
"integrity": "sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==",
|
|
139
|
+
"cpu": [
|
|
140
|
+
"x64"
|
|
141
|
+
],
|
|
142
|
+
"license": "Apache-2.0 AND MIT",
|
|
143
|
+
"optional": true,
|
|
144
|
+
"os": [
|
|
145
|
+
"linux"
|
|
146
|
+
],
|
|
147
|
+
"engines": {
|
|
148
|
+
"node": ">=10"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"node_modules/@swc/core-linux-x64-musl": {
|
|
152
|
+
"version": "1.15.8",
|
|
153
|
+
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz",
|
|
154
|
+
"integrity": "sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==",
|
|
155
|
+
"cpu": [
|
|
156
|
+
"x64"
|
|
157
|
+
],
|
|
158
|
+
"license": "Apache-2.0 AND MIT",
|
|
159
|
+
"optional": true,
|
|
160
|
+
"os": [
|
|
161
|
+
"linux"
|
|
162
|
+
],
|
|
163
|
+
"engines": {
|
|
164
|
+
"node": ">=10"
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"node_modules/@swc/core-win32-arm64-msvc": {
|
|
168
|
+
"version": "1.15.8",
|
|
169
|
+
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz",
|
|
170
|
+
"integrity": "sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==",
|
|
171
|
+
"cpu": [
|
|
172
|
+
"arm64"
|
|
173
|
+
],
|
|
174
|
+
"license": "Apache-2.0 AND MIT",
|
|
175
|
+
"optional": true,
|
|
176
|
+
"os": [
|
|
177
|
+
"win32"
|
|
178
|
+
],
|
|
179
|
+
"engines": {
|
|
180
|
+
"node": ">=10"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"node_modules/@swc/core-win32-ia32-msvc": {
|
|
184
|
+
"version": "1.15.8",
|
|
185
|
+
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz",
|
|
186
|
+
"integrity": "sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==",
|
|
187
|
+
"cpu": [
|
|
188
|
+
"ia32"
|
|
189
|
+
],
|
|
190
|
+
"license": "Apache-2.0 AND MIT",
|
|
191
|
+
"optional": true,
|
|
192
|
+
"os": [
|
|
193
|
+
"win32"
|
|
194
|
+
],
|
|
195
|
+
"engines": {
|
|
196
|
+
"node": ">=10"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"node_modules/@swc/core-win32-x64-msvc": {
|
|
200
|
+
"version": "1.15.8",
|
|
201
|
+
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz",
|
|
202
|
+
"integrity": "sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==",
|
|
203
|
+
"cpu": [
|
|
204
|
+
"x64"
|
|
205
|
+
],
|
|
206
|
+
"license": "Apache-2.0 AND MIT",
|
|
207
|
+
"optional": true,
|
|
208
|
+
"os": [
|
|
209
|
+
"win32"
|
|
210
|
+
],
|
|
211
|
+
"engines": {
|
|
212
|
+
"node": ">=10"
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
"node_modules/@swc/counter": {
|
|
216
|
+
"version": "0.1.3",
|
|
217
|
+
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
|
|
218
|
+
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
|
|
219
|
+
"license": "Apache-2.0"
|
|
220
|
+
},
|
|
221
|
+
"node_modules/@swc/types": {
|
|
222
|
+
"version": "0.1.25",
|
|
223
|
+
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
|
|
224
|
+
"integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
|
|
225
|
+
"license": "Apache-2.0",
|
|
226
|
+
"dependencies": {
|
|
227
|
+
"@swc/counter": "^0.1.3"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "react-components",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Design-to-code prompt to React components for Stitch MCP",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"validate": "node scripts/validate.js",
|
|
8
|
+
"fetch": "bash scripts/fetch-stitch.sh"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@swc/core": "^1.3.100"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18.0.0"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Architecture Quality Gate
|
|
2
|
+
|
|
3
|
+
### Structural integrity
|
|
4
|
+
- [ ] Logic extracted to custom hooks in `src/hooks/`.
|
|
5
|
+
- [ ] No monolithic files; strictly Atomic/Composite modularity.
|
|
6
|
+
- [ ] All static text/URLs moved to `src/data/mockData.ts`.
|
|
7
|
+
|
|
8
|
+
### Type safety and syntax
|
|
9
|
+
- [ ] Props use `Readonly<T>` interfaces.
|
|
10
|
+
- [ ] File is syntactically valid TypeScript (no red squiggles).
|
|
11
|
+
- [ ] Placeholders from templates (e.g., `StitchComponent`) have been replaced with actual names.
|
|
12
|
+
|
|
13
|
+
### Styling and theming
|
|
14
|
+
- [ ] Dark mode (`dark:`) applied to all color classes.
|
|
15
|
+
- [ ] No hardcoded hex values; use theme-mapped Tailwind classes.
|