@kood/claude-code 0.2.5 → 0.3.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.
Files changed (130) hide show
  1. package/dist/index.js +13 -8
  2. package/package.json +1 -1
  3. package/templates/.claude/agents/code-reviewer.md +371 -19
  4. package/templates/.claude/agents/dependency-manager.md +197 -0
  5. package/templates/.claude/agents/deployment-validator.md +136 -0
  6. package/templates/.claude/agents/git-operator.md +147 -0
  7. package/templates/.claude/agents/implementation-executor.md +202 -0
  8. package/templates/.claude/agents/lint-fixer.md +155 -0
  9. package/templates/.claude/agents/refactor-advisor.md +339 -29
  10. package/templates/.claude/commands/agent-creator.md +355 -0
  11. package/templates/.claude/commands/docs-creator.md +404 -163
  12. package/templates/.claude/commands/docs-refactor.md +400 -113
  13. package/templates/.claude/commands/execute.md +357 -185
  14. package/templates/.claude/commands/git-all.md +16 -70
  15. package/templates/.claude/commands/git-session.md +36 -68
  16. package/templates/.claude/commands/git.md +20 -69
  17. package/templates/.claude/commands/lint-fix.md +164 -107
  18. package/templates/.claude/commands/lint-init.md +142 -168
  19. package/templates/.claude/commands/plan.md +300 -84
  20. package/templates/.claude/commands/prd.md +497 -214
  21. package/templates/.claude/commands/pre-deploy.md +242 -0
  22. package/templates/.claude/commands/subagent-creator.md +118 -0
  23. package/templates/.claude/commands/version-update.md +45 -57
  24. package/templates/hono/CLAUDE.md +99 -54
  25. package/templates/hono/docs/guides/conventions.md +352 -0
  26. package/templates/hono/docs/guides/env-setup.md +347 -0
  27. package/templates/hono/docs/guides/getting-started.md +239 -0
  28. package/templates/hono/docs/library/hono/error-handling.md +20 -29
  29. package/templates/hono/docs/library/hono/index.md +25 -52
  30. package/templates/hono/docs/library/hono/middleware.md +16 -75
  31. package/templates/hono/docs/library/hono/rpc.md +7 -35
  32. package/templates/hono/docs/library/hono/validation.md +25 -45
  33. package/templates/hono/docs/library/t3-env/index.md +374 -0
  34. package/templates/npx/CLAUDE.md +165 -65
  35. package/templates/npx/docs/library/commander/index.md +10 -73
  36. package/templates/npx/docs/library/fs-extra/index.md +21 -113
  37. package/templates/npx/docs/library/prompts/index.md +30 -176
  38. package/templates/npx/docs/references/patterns.md +75 -48
  39. package/templates/tanstack-start/CLAUDE.md +101 -77
  40. package/templates/tanstack-start/docs/architecture.md +427 -0
  41. package/templates/tanstack-start/docs/design.md +558 -0
  42. package/templates/tanstack-start/docs/guides/conventions.md +132 -32
  43. package/templates/tanstack-start/docs/guides/env-setup.md +127 -62
  44. package/templates/tanstack-start/docs/guides/getting-started.md +81 -20
  45. package/templates/tanstack-start/docs/guides/hooks.md +241 -36
  46. package/templates/tanstack-start/docs/guides/routes.md +213 -61
  47. package/templates/tanstack-start/docs/guides/services.md +260 -24
  48. package/templates/tanstack-start/docs/library/better-auth/index.md +469 -16
  49. package/templates/tanstack-start/docs/library/t3-env/index.md +307 -0
  50. package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -21
  51. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +22 -35
  52. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +7 -24
  53. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +26 -39
  54. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +23 -26
  55. package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +32 -147
  56. package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +25 -167
  57. package/templates/tanstack-start/docs/library/tanstack-router/index.md +39 -74
  58. package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +46 -116
  59. package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +35 -154
  60. package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +32 -171
  61. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +7 -15
  62. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +16 -23
  63. package/templates/tanstack-start/docs/library/zod/complex-types.md +12 -31
  64. package/templates/tanstack-start/docs/library/zod/index.md +18 -35
  65. package/templates/tanstack-start/docs/library/zod/transforms.md +11 -25
  66. package/templates/tanstack-start/docs/library/zod/validation.md +12 -34
  67. package/templates/.claude/agents/debug-detective.md +0 -37
  68. package/templates/.claude/agents/test-writer.md +0 -41
  69. package/templates/.claude/commands/feedback.md +0 -199
  70. package/templates/.claude/commands/ts-fix.md +0 -176
  71. package/templates/.claude/skills/command-creator/LICENSE.txt +0 -202
  72. package/templates/.claude/skills/command-creator/SKILL.md +0 -245
  73. package/templates/.claude/skills/command-creator/scripts/init_command.py +0 -244
  74. package/templates/.claude/skills/command-creator/scripts/package_command.py +0 -125
  75. package/templates/.claude/skills/command-creator/scripts/quick_validate.py +0 -143
  76. package/templates/.claude/skills/frontend-design/SKILL.md +0 -310
  77. package/templates/.claude/skills/frontend-design/references/animation-patterns.md +0 -446
  78. package/templates/.claude/skills/frontend-design/references/colors-2026.md +0 -244
  79. package/templates/.claude/skills/frontend-design/references/typography-2026.md +0 -302
  80. package/templates/.claude/skills/gemini-review/SKILL.md +0 -118
  81. package/templates/.claude/skills/gemini-review/references/checklists.md +0 -129
  82. package/templates/.claude/skills/gemini-review/references/prompt-templates.md +0 -274
  83. package/templates/.claude/skills/skill-creator/LICENSE.txt +0 -202
  84. package/templates/.claude/skills/skill-creator/SKILL.md +0 -184
  85. package/templates/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  86. package/templates/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  87. package/templates/.claude/skills/skill-creator/scripts/quick_validate.py +0 -65
  88. package/templates/hono/docs/library/ai-sdk/index.md +0 -190
  89. package/templates/hono/docs/library/ai-sdk/openrouter.md +0 -111
  90. package/templates/hono/docs/library/ai-sdk/providers.md +0 -102
  91. package/templates/hono/docs/library/ai-sdk/streaming.md +0 -146
  92. package/templates/hono/docs/library/ai-sdk/structured-output.md +0 -161
  93. package/templates/hono/docs/library/ai-sdk/tools.md +0 -144
  94. package/templates/hono/docs/library/drizzle/cloudflare-d1.md +0 -247
  95. package/templates/hono/docs/library/drizzle/config.md +0 -167
  96. package/templates/hono/docs/library/drizzle/index.md +0 -259
  97. package/templates/hono/docs/library/hono/env-setup.md +0 -169
  98. package/templates/hono/docs/library/pino/index.md +0 -146
  99. package/templates/tanstack-start/docs/architecture/architecture.md +0 -243
  100. package/templates/tanstack-start/docs/deployment/cloudflare.md +0 -132
  101. package/templates/tanstack-start/docs/deployment/index.md +0 -163
  102. package/templates/tanstack-start/docs/deployment/nitro.md +0 -110
  103. package/templates/tanstack-start/docs/deployment/railway.md +0 -147
  104. package/templates/tanstack-start/docs/deployment/vercel.md +0 -135
  105. package/templates/tanstack-start/docs/design/components.md +0 -175
  106. package/templates/tanstack-start/docs/design/index.md +0 -151
  107. package/templates/tanstack-start/docs/design/safe-area.md +0 -118
  108. package/templates/tanstack-start/docs/design/tailwind-setup.md +0 -156
  109. package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +0 -472
  110. package/templates/tanstack-start/docs/library/ai-sdk/index.md +0 -264
  111. package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +0 -371
  112. package/templates/tanstack-start/docs/library/ai-sdk/providers.md +0 -403
  113. package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +0 -320
  114. package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +0 -454
  115. package/templates/tanstack-start/docs/library/ai-sdk/tools.md +0 -473
  116. package/templates/tanstack-start/docs/library/better-auth/2fa.md +0 -48
  117. package/templates/tanstack-start/docs/library/better-auth/advanced.md +0 -55
  118. package/templates/tanstack-start/docs/library/better-auth/plugins.md +0 -34
  119. package/templates/tanstack-start/docs/library/better-auth/session.md +0 -47
  120. package/templates/tanstack-start/docs/library/better-auth/setup.md +0 -41
  121. package/templates/tanstack-start/docs/library/drizzle/cloudflare-d1.md +0 -147
  122. package/templates/tanstack-start/docs/library/drizzle/config.md +0 -118
  123. package/templates/tanstack-start/docs/library/drizzle/crud.md +0 -205
  124. package/templates/tanstack-start/docs/library/drizzle/index.md +0 -79
  125. package/templates/tanstack-start/docs/library/drizzle/relations.md +0 -202
  126. package/templates/tanstack-start/docs/library/drizzle/schema.md +0 -154
  127. package/templates/tanstack-start/docs/library/drizzle/setup.md +0 -96
  128. package/templates/tanstack-start/docs/library/drizzle/transactions.md +0 -127
  129. package/templates/tanstack-start/docs/library/pino/index.md +0 -320
  130. /package/templates/hono/docs/{architecture/architecture.md → architecture.md} +0 -0
@@ -1,175 +0,0 @@
1
- # 컴포넌트 가이드라인
2
-
3
- ## 버튼 (Button)
4
-
5
- ### 계층
6
-
7
- | 유형 | 용도 | 스타일 |
8
- |------|------|--------|
9
- | Primary | 주된 행동 | `bg-blue-600 text-white` |
10
- | Secondary | 대안적 행동 | `border border-gray-300` |
11
- | Tertiary | 덜 중요한 행동 | `text-blue-600` |
12
- | Destructive | 위험한 행동 | `bg-red-600 text-white` |
13
-
14
- ```tsx
15
- // Primary
16
- <button className="px-4 py-2 bg-blue-600 text-white rounded-lg
17
- hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed">
18
- 저장하기
19
- </button>
20
-
21
- // Secondary
22
- <button className="px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50">
23
- 취소
24
- </button>
25
-
26
- // 로딩 상태
27
- <button disabled={isLoading} className="flex items-center gap-2">
28
- {isLoading && <Spinner className="w-4 h-4 animate-spin" />}
29
- {isLoading ? '저장 중...' : '저장하기'}
30
- </button>
31
- ```
32
-
33
- ### 크기
34
- ```tsx
35
- <button className="px-3 py-1.5 text-sm">Small</button>
36
- <button className="px-4 py-2 text-base">Medium</button>
37
- <button className="px-6 py-3 text-lg">Large</button>
38
- ```
39
-
40
- ## 입력 필드 (Input)
41
-
42
- ```tsx
43
- <div>
44
- <label className="block text-sm font-medium text-gray-700 mb-1">이메일</label>
45
- <input
46
- type="email"
47
- className="w-full px-3 py-2 border border-gray-300 rounded-lg
48
- focus:ring-2 focus:ring-blue-500 focus:border-blue-500
49
- placeholder:text-gray-400"
50
- placeholder="example@email.com"
51
- />
52
- <p className="mt-1 text-sm text-gray-500">도움말</p>
53
- </div>
54
-
55
- // 에러 상태
56
- <input className="border border-red-500 focus:ring-red-500" />
57
- <p className="mt-1 text-sm text-red-600">오류 메시지</p>
58
- ```
59
-
60
- ### 아이콘 포함
61
- ```tsx
62
- <div className="relative">
63
- <SearchIcon className="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400" />
64
- <input className="pl-10 pr-3 py-2 ..." />
65
- </div>
66
- ```
67
-
68
- ## 카드 (Card)
69
-
70
- ```tsx
71
- <div className="bg-white dark:bg-gray-800 rounded-lg border shadow-sm overflow-hidden">
72
- <div className="px-6 py-4 border-b">
73
- <h3 className="text-lg font-semibold">제목</h3>
74
- </div>
75
- <div className="px-6 py-4">본문</div>
76
- <div className="px-6 py-4 bg-gray-50">푸터</div>
77
- </div>
78
- ```
79
-
80
- ## 모달 (Modal)
81
-
82
- ```tsx
83
- <div className="fixed inset-0 bg-black/50 z-50 flex items-center justify-center">
84
- <div className="bg-white rounded-lg shadow-xl w-full max-w-md mx-4">
85
- <div className="px-6 py-4 border-b flex items-center justify-between">
86
- <h2 className="text-lg font-semibold">제목</h2>
87
- <button><XIcon /></button>
88
- </div>
89
- <div className="px-6 py-4">본문</div>
90
- <div className="px-6 py-4 bg-gray-50 flex justify-end gap-3">
91
- <button>취소</button>
92
- <button className="bg-blue-600 text-white">확인</button>
93
- </div>
94
- </div>
95
- </div>
96
- ```
97
-
98
- ### 크기
99
- ```tsx
100
- max-w-sm // 간단한 확인
101
- max-w-md // 기본 (폼)
102
- max-w-lg // 복잡한 내용
103
- max-w-2xl // 테이블, 대시보드
104
- ```
105
-
106
- ## 알림/토스트 (Alert)
107
-
108
- ```tsx
109
- // 정보
110
- <div className="p-4 bg-blue-50 border border-blue-200 rounded-lg flex gap-3">
111
- <InfoIcon className="w-5 h-5 text-blue-600" />
112
- <p className="text-blue-800">안내 메시지</p>
113
- </div>
114
-
115
- // 성공: bg-green-50, border-green-200, text-green-800
116
- // 경고: bg-yellow-50, border-yellow-200, text-yellow-800
117
- // 오류: bg-red-50, border-red-200, text-red-800
118
- ```
119
-
120
- ## 배지 (Badge)
121
-
122
- ```tsx
123
- <span className="px-2 py-0.5 text-xs font-medium rounded-full bg-green-100 text-green-800">
124
- 활성
125
- </span>
126
-
127
- // 숫자 배지
128
- <div className="relative">
129
- <BellIcon />
130
- <span className="absolute -top-1 -right-1 w-5 h-5 bg-red-500 text-white text-xs
131
- rounded-full flex items-center justify-center">3</span>
132
- </div>
133
- ```
134
-
135
- ## 테이블 (Table)
136
-
137
- ```tsx
138
- <table className="w-full">
139
- <thead className="bg-gray-50">
140
- <tr>
141
- <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">
142
- 이름
143
- </th>
144
- </tr>
145
- </thead>
146
- <tbody className="divide-y divide-gray-200">
147
- <tr className="hover:bg-gray-50">
148
- <td className="px-6 py-4 whitespace-nowrap">홍길동</td>
149
- </tr>
150
- </tbody>
151
- </table>
152
- ```
153
-
154
- ## 조합 원칙
155
-
156
- ```tsx
157
- // ✅ Primary 하나만
158
- <div className="flex gap-2">
159
- <button className="border">취소</button>
160
- <button className="bg-blue-600 text-white">저장</button>
161
- </div>
162
-
163
- // ❌ Primary 여러 개
164
- <div className="flex gap-2">
165
- <button className="bg-blue-600">취소</button>
166
- <button className="bg-green-600">저장</button>
167
- </div>
168
- ```
169
-
170
- ## 체크리스트
171
-
172
- - [ ] 버튼 계층 구분 (Primary 화면당 1개)
173
- - [ ] 입력 필드에 레이블 필수
174
- - [ ] 에러/로딩 상태 시각적 표시
175
- - [ ] 포커스 스타일 명확히
@@ -1,151 +0,0 @@
1
- # UI/UX 디자인 가이드
2
-
3
- > TanStack Start + Tailwind CSS v4
4
-
5
- @components.md
6
- @safe-area.md
7
- @tailwind-setup.md
8
-
9
- ---
10
-
11
- ## 핵심 원칙
12
-
13
- | 원칙 | 설명 |
14
- |------|------|
15
- | **일관성** | 같은 요소는 같은 스타일과 동작 |
16
- | **계층 구조** | 중요한 것이 먼저 눈에 들어옴 |
17
- | **단순함** | 색상 3-5개, 폰트 2-3개, 충분한 여백 |
18
- | **접근성** | 충분한 대비, 읽기 쉬운 크기, 키보드 조작 |
19
-
20
- ---
21
-
22
- ## 색상 (60-30-10 규칙)
23
-
24
- ```
25
- 60% - 배경색 (중립색)
26
- 30% - 보조색 (카드, 섹션)
27
- 10% - 강조색 (버튼, CTA)
28
- ```
29
-
30
- ### 의미론적 색상
31
-
32
- | 색상 | 의미 | Tailwind |
33
- |------|------|----------|
34
- | 🟢 Green | 성공 | `text-green-600` |
35
- | 🔴 Red | 오류 | `text-red-600` |
36
- | 🟡 Yellow | 경고 | `text-yellow-600` |
37
- | 🔵 Blue | 정보 | `text-blue-600` |
38
-
39
- ### 다크 모드 매핑
40
-
41
- ```
42
- 라이트 ←→ 다크
43
- bg-white ←→ bg-gray-900
44
- bg-gray-50 ←→ bg-gray-800
45
- text-gray-900 ←→ text-white
46
- text-gray-600 ←→ text-gray-300
47
- ```
48
-
49
- ---
50
-
51
- ## 폰트
52
-
53
- | 폰트 | 용도 |
54
- |------|------|
55
- | Pretendard | 한글 (권장) |
56
- | Inter | 영문 |
57
- | JetBrains Mono | 코드 |
58
-
59
- ### 크기
60
-
61
- ```
62
- text-4xl 36px h1
63
- text-2xl 24px h2, h3
64
- text-base 16px 본문
65
- text-sm 14px 보조 텍스트
66
- ```
67
-
68
- ### Tailwind 설정
69
-
70
- ```css
71
- @theme {
72
- --font-sans: "Pretendard", "Inter", system-ui, sans-serif;
73
- --font-mono: "JetBrains Mono", monospace;
74
- }
75
- ```
76
-
77
- ---
78
-
79
- ## 간격 (8px 그리드)
80
-
81
- | 용도 | Tailwind | 크기 |
82
- |------|----------|------|
83
- | 아이콘-텍스트 | gap-1 | 4px |
84
- | 인라인 요소 | gap-2 | 8px |
85
- | 카드 내부 | p-4 | 16px |
86
- | 카드 간격 | gap-6 | 24px |
87
- | 섹션 간격 | py-12 | 48px |
88
-
89
- ### 컨테이너
90
-
91
- ```
92
- max-w-md 448px 폼
93
- max-w-lg 512px 모달
94
- max-w-3xl 768px 블로그
95
- max-w-7xl 1280px 대시보드
96
- ```
97
-
98
- ---
99
-
100
- ## 접근성 (WCAG AA)
101
-
102
- ### 색상 대비
103
-
104
- | 기준 | 최소 대비 | 적용 대상 |
105
- |------|----------|----------|
106
- | AA | 4.5:1 | 일반 텍스트 |
107
- | AA (큰 텍스트) | 3:1 | 18px 이상 |
108
-
109
- ```tsx
110
- // ❌ 색상만으로 구분
111
- <span className="text-red-600">오류</span>
112
-
113
- // ✅ 아이콘/텍스트 병행
114
- <span className="text-red-600 flex items-center gap-1">
115
- <XCircleIcon className="w-4 h-4" />
116
- 오류가 발생했습니다
117
- </span>
118
- ```
119
-
120
- ### 키보드
121
-
122
- ```tsx
123
- // ✅ 명확한 포커스 스타일
124
- <button className="focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
125
-
126
- // ❌ 포커스 제거 금지
127
- <button className="outline-none focus:outline-none">
128
- ```
129
-
130
- ### 폼
131
-
132
- ```tsx
133
- <label htmlFor="email">이메일</label>
134
- <input
135
- id="email"
136
- required
137
- aria-invalid={hasError}
138
- aria-describedby={hasError ? "email-error" : undefined}
139
- />
140
- {hasError && <p id="email-error" role="alert">오류</p>}
141
- ```
142
-
143
- ### 체크리스트
144
-
145
- - [ ] 모든 이미지에 alt
146
- - [ ] 폼 요소에 레이블
147
- - [ ] 키보드 접근 가능
148
- - [ ] 포커스 표시 유지
149
- - [ ] 대비 4.5:1 이상
150
- - [ ] 색상만으로 정보 전달 금지
151
- - [ ] 터치 영역 44px 이상
@@ -1,118 +0,0 @@
1
- # iOS Safe Area
2
-
3
- > **Library**: [tailwindcss-safe-area](https://github.com/mvllow/tailwindcss-safe-area)
4
-
5
- iOS 노치, 홈 인디케이터, 다이나믹 아일랜드 대응.
6
-
7
- ## 설치
8
-
9
- ```bash
10
- yarn add tailwindcss-safe-area
11
- ```
12
-
13
- ```typescript
14
- // tailwind.config.ts
15
- import safeArea from 'tailwindcss-safe-area'
16
- export default { plugins: [safeArea] }
17
- ```
18
-
19
- ## Viewport 설정 (필수)
20
-
21
- ```typescript
22
- // src/routes/__root.tsx
23
- export const Route = createRootRoute({
24
- head: () => ({
25
- meta: [{
26
- name: 'viewport',
27
- content: 'width=device-width, initial-scale=1, viewport-fit=cover',
28
- }],
29
- }),
30
- })
31
- ```
32
-
33
- ## 유틸리티 클래스
34
-
35
- ### Padding
36
- ```tsx
37
- <div className="p-safe"> {/* 전체 */}
38
- <header className="pt-safe"> {/* 상단 (노치) */}
39
- <footer className="pb-safe"> {/* 하단 (홈 인디케이터) */}
40
- <div className="px-safe py-safe"> {/* X축, Y축 */}
41
- ```
42
-
43
- ### Margin
44
- ```tsx
45
- <div className="m-safe mt-safe mb-safe mx-safe my-safe">
46
- ```
47
-
48
- ### Height
49
- ```tsx
50
- <main className="h-screen-safe"> {/* safe area 제외 높이 */}
51
- <div className="min-h-screen-safe"> {/* 최소 높이 */}
52
- ```
53
-
54
- ### Fallback (safe area 없을 때 대체값)
55
- ```tsx
56
- <div className="p-safe-or-4"> {/* safe area 또는 1rem */}
57
- <header className="pt-safe-or-2"> {/* 상단 또는 0.5rem */}
58
- <footer className="pb-safe-or-4"> {/* 하단 또는 1rem */}
59
- ```
60
-
61
- ## 레이아웃 패턴
62
-
63
- ### 기본 앱 레이아웃
64
- ```tsx
65
- <div className="min-h-screen-safe flex flex-col">
66
- <header className="pt-safe-or-2 px-safe-or-4 bg-white border-b">
67
- <nav className="h-14 flex items-center">헤더</nav>
68
- </header>
69
- <main className="flex-1 px-safe-or-4">{children}</main>
70
- <footer className="pb-safe-or-2 px-safe-or-4 bg-white border-t">
71
- <nav className="h-14 flex items-center justify-around">탭바</nav>
72
- </footer>
73
- </div>
74
- ```
75
-
76
- ### 고정 하단 버튼
77
- ```tsx
78
- <div className="fixed bottom-0 left-0 right-0 pb-safe-or-4 px-safe-or-4 bg-white border-t">
79
- <button className="w-full h-12 bg-primary-600 text-white rounded-lg">
80
- 버튼
81
- </button>
82
- </div>
83
- ```
84
-
85
- ### 전체 화면 모달
86
- ```tsx
87
- <div className="fixed inset-0 bg-white z-50">
88
- <div className="h-screen-safe flex flex-col p-safe">{children}</div>
89
- </div>
90
- ```
91
-
92
- ## 높이 문제 해결
93
-
94
- ```tsx
95
- // 동적 뷰포트 높이 (권장)
96
- <div className="h-dvh">
97
-
98
- // 또는
99
- <div className="h-screen-safe">
100
- ```
101
-
102
- ## 트러블슈팅
103
-
104
- ```tsx
105
- // ❌ 노치에 가려짐
106
- <header className="fixed top-0">
107
-
108
- // ✅ safe area 적용
109
- <header className="fixed top-0 pt-safe">
110
-
111
- // ❌ 홈 인디케이터와 겹침
112
- <button className="fixed bottom-4">
113
-
114
- // ✅ safe area 적용
115
- <div className="fixed bottom-0 pb-safe-or-4">
116
- <button>...</button>
117
- </div>
118
- ```
@@ -1,156 +0,0 @@
1
- # Tailwind CSS 설정
2
-
3
- > Tailwind CSS v4
4
-
5
- ## 설치
6
-
7
- ```bash
8
- yarn add tailwindcss postcss autoprefixer
9
- ```
10
-
11
- ```css
12
- /* src/styles/app.css */
13
- @import "tailwindcss";
14
- ```
15
-
16
- ## 디자인 토큰 (@theme)
17
-
18
- ```css
19
- @import "tailwindcss";
20
-
21
- @theme {
22
- /* 색상 */
23
- --color-primary-500: oklch(0.55 0.2 250);
24
- --color-primary-600: oklch(0.48 0.22 250);
25
- --color-primary-700: oklch(0.42 0.2 250);
26
-
27
- --color-success: oklch(0.55 0.15 145);
28
- --color-error: oklch(0.55 0.2 25);
29
- --color-warning: oklch(0.75 0.15 85);
30
-
31
- /* 폰트 */
32
- --font-sans: "Pretendard", "Inter", system-ui, sans-serif;
33
- --font-mono: "JetBrains Mono", monospace;
34
-
35
- /* 반경 */
36
- --radius-button: 0.5rem;
37
- --radius-card: 0.75rem;
38
- --radius-modal: 1rem;
39
-
40
- /* 그림자 */
41
- --shadow-card: 0 1px 3px rgba(0, 0, 0, 0.1);
42
- --shadow-modal: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
43
- }
44
- ```
45
-
46
- ## 사용법
47
-
48
- ```tsx
49
- <button className="bg-primary-600 hover:bg-primary-700">버튼</button>
50
- <div className="text-success">성공</div>
51
- <div className="rounded-[--radius-card]">카드</div>
52
- ```
53
-
54
- ## 다크 모드
55
-
56
- ```css
57
- @theme {
58
- --color-surface: white;
59
- --color-text-primary: oklch(0.15 0 0);
60
- }
61
-
62
- @media (prefers-color-scheme: dark) {
63
- :root {
64
- --color-surface: oklch(0.15 0 0);
65
- --color-text-primary: oklch(0.95 0 0);
66
- }
67
- }
68
- ```
69
-
70
- ```tsx
71
- // Tailwind dark: 접두사
72
- <div className="bg-white dark:bg-gray-900">
73
- <h1 className="text-gray-900 dark:text-white">제목</h1>
74
- </div>
75
-
76
- // CSS 변수 (자동 대응)
77
- <div className="bg-[--color-surface] text-[--color-text-primary]">
78
- ```
79
-
80
- ## CVA (class-variance-authority)
81
-
82
- ```bash
83
- yarn add class-variance-authority clsx tailwind-merge
84
- ```
85
-
86
- ```tsx
87
- // src/lib/utils.ts
88
- import { clsx, type ClassValue } from 'clsx'
89
- import { twMerge } from 'tailwind-merge'
90
- export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs))
91
-
92
- // src/components/ui/button.tsx
93
- import { cva, type VariantProps } from 'class-variance-authority'
94
-
95
- const buttonVariants = cva(
96
- 'inline-flex items-center justify-center font-medium transition-colors focus:ring-2 disabled:opacity-50',
97
- {
98
- variants: {
99
- variant: {
100
- primary: 'bg-primary-600 text-white hover:bg-primary-700',
101
- secondary: 'border border-gray-300 hover:bg-gray-50',
102
- destructive: 'bg-red-600 text-white hover:bg-red-700',
103
- },
104
- size: {
105
- sm: 'px-3 py-1.5 text-sm rounded-md',
106
- md: 'px-4 py-2 text-base rounded-lg',
107
- lg: 'px-6 py-3 text-lg rounded-lg',
108
- },
109
- },
110
- defaultVariants: { variant: 'primary', size: 'md' },
111
- }
112
- )
113
-
114
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>,
115
- VariantProps<typeof buttonVariants> {}
116
-
117
- export const Button = ({ variant, size, className, ...props }: ButtonProps) => (
118
- <button className={buttonVariants({ variant, size, className })} {...props} />
119
- )
120
- ```
121
-
122
- ## 반응형
123
-
124
- ```css
125
- sm 640px 모바일 가로
126
- md 768px 태블릿
127
- lg 1024px 노트북
128
- xl 1280px 데스크탑
129
- ```
130
-
131
- ```tsx
132
- <div className="p-4 md:p-6 lg:p-8">
133
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6">
134
- ```
135
-
136
- ## 플러그인
137
-
138
- ```css
139
- @import "tailwindcss";
140
- @plugin "@tailwindcss/forms";
141
- @plugin "@tailwindcss/typography";
142
- ```
143
-
144
- ```tsx
145
- <article className="prose dark:prose-invert">
146
- {/* 마크다운 콘텐츠 */}
147
- </article>
148
- ```
149
-
150
- ## 체크리스트
151
-
152
- - [ ] @theme으로 디자인 토큰 정의
153
- - [ ] 브랜드/의미론적 색상 설정
154
- - [ ] 폰트 패밀리 설정
155
- - [ ] 다크 모드 대응
156
- - [ ] 모바일 퍼스트 반응형