@kood/claude-code 0.1.5 → 0.1.7

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 (77) hide show
  1. package/dist/index.js +21 -243
  2. package/package.json +1 -1
  3. package/templates/hono/CLAUDE.md +10 -6
  4. package/templates/hono/docs/deployment/index.md +5 -0
  5. package/templates/hono/docs/library/hono/index.md +6 -0
  6. package/templates/hono/docs/library/prisma/index.md +3 -0
  7. package/templates/npx/CLAUDE.md +8 -2
  8. package/templates/tanstack-start/CLAUDE.md +105 -259
  9. package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
  10. package/templates/tanstack-start/docs/deployment/index.md +57 -286
  11. package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
  12. package/templates/tanstack-start/docs/deployment/railway.md +40 -409
  13. package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
  14. package/templates/tanstack-start/docs/design/accessibility.md +56 -326
  15. package/templates/tanstack-start/docs/design/color.md +37 -179
  16. package/templates/tanstack-start/docs/design/components.md +77 -311
  17. package/templates/tanstack-start/docs/design/index.md +24 -87
  18. package/templates/tanstack-start/docs/design/safe-area.md +51 -250
  19. package/templates/tanstack-start/docs/design/spacing.md +57 -276
  20. package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
  21. package/templates/tanstack-start/docs/design/typography.md +40 -284
  22. package/templates/tanstack-start/docs/guides/best-practices.md +3 -8
  23. package/templates/tanstack-start/docs/guides/env-setup.md +3 -3
  24. package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
  25. package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
  26. package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
  27. package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
  28. package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
  29. package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
  30. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
  31. package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
  32. package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
  33. package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
  34. package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
  35. package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
  36. package/templates/tanstack-start/docs/library/prisma/setup.md +13 -113
  37. package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
  38. package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -99
  39. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
  40. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
  41. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +11 -73
  42. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
  43. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
  44. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
  45. package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
  46. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
  47. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
  48. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +41 -172
  49. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
  50. package/templates/tanstack-start/docs/library/zod/basic-types.md +33 -145
  51. package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
  52. package/templates/tanstack-start/docs/library/zod/index.md +22 -150
  53. package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
  54. package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
  55. package/templates/hono/docs/commands/git.md +0 -145
  56. package/templates/hono/docs/mcp/context7.md +0 -106
  57. package/templates/hono/docs/mcp/index.md +0 -176
  58. package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
  59. package/templates/hono/docs/mcp/serena.md +0 -269
  60. package/templates/hono/docs/mcp/sgrep.md +0 -105
  61. package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
  62. package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
  63. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
  64. package/templates/npx/docs/commands/git.md +0 -145
  65. package/templates/npx/docs/mcp/index.md +0 -60
  66. package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
  67. package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
  68. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
  69. package/templates/tanstack-start/docs/commands/git.md +0 -145
  70. package/templates/tanstack-start/docs/mcp/context7.md +0 -204
  71. package/templates/tanstack-start/docs/mcp/index.md +0 -177
  72. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
  73. package/templates/tanstack-start/docs/mcp/serena.md +0 -269
  74. package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
  75. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
  76. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
  77. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
@@ -1,9 +1,8 @@
1
1
  # iOS Safe Area
2
2
 
3
- > **Framework**: TanStack Start + Tailwind CSS v4
4
3
  > **Library**: [tailwindcss-safe-area](https://github.com/mvllow/tailwindcss-safe-area)
5
4
 
6
- iOS 기기의 노치, 홈 인디케이터, 다이나믹 아일랜드 등을 고려한 Safe Area 처리 가이드입니다.
5
+ iOS 노치, 홈 인디케이터, 다이나믹 아일랜드 대응.
7
6
 
8
7
  ## 설치
9
8
 
@@ -11,307 +10,109 @@ iOS 기기의 노치, 홈 인디케이터, 다이나믹 아일랜드 등을 고
11
10
  yarn add tailwindcss-safe-area
12
11
  ```
13
12
 
14
- ## 설정
15
-
16
- ### 1. Tailwind CSS 플러그인 등록
17
-
18
13
  ```typescript
19
14
  // tailwind.config.ts
20
- import type { Config } from 'tailwindcss'
21
15
  import safeArea from 'tailwindcss-safe-area'
22
-
23
- export default {
24
- content: ['./src/**/*.{ts,tsx}'],
25
- plugins: [safeArea],
26
- } satisfies Config
16
+ export default { plugins: [safeArea] }
27
17
  ```
28
18
 
29
- ### 2. Viewport 메타 태그 설정 (필수)
30
-
31
- Safe Area 유틸리티가 작동하려면 `viewport-fit=cover`가 **반드시** 필요합니다.
32
-
33
- ```html
34
- <!-- app.html 또는 root layout -->
35
- <meta
36
- name="viewport"
37
- content="width=device-width, initial-scale=1, viewport-fit=cover"
38
- />
39
- ```
40
-
41
- TanStack Start에서:
19
+ ## Viewport 설정 (필수)
42
20
 
43
21
  ```typescript
44
22
  // src/routes/__root.tsx
45
23
  export const Route = createRootRoute({
46
24
  head: () => ({
47
- meta: [
48
- {
49
- name: 'viewport',
50
- content: 'width=device-width, initial-scale=1, viewport-fit=cover',
51
- },
52
- ],
25
+ meta: [{
26
+ name: 'viewport',
27
+ content: 'width=device-width, initial-scale=1, viewport-fit=cover',
28
+ }],
53
29
  }),
54
30
  })
55
31
  ```
56
32
 
57
33
  ## 유틸리티 클래스
58
34
 
59
- ### Padding 유틸리티
60
-
35
+ ### Padding
61
36
  ```tsx
62
- // 전체 방향 safe area padding
63
- <div className="p-safe">...</div>
64
-
65
- // 개별 방향
66
- <header className="pt-safe">상단 노치/다이나믹 아일랜드 영역</header>
67
- <footer className="pb-safe">하단 홈 인디케이터 영역</footer>
68
- <div className="pl-safe pr-safe">좌우 safe area</div>
69
-
70
- // X축, Y축
71
- <div className="px-safe">좌우 safe area</div>
72
- <div className="py-safe">상하 safe area</div>
37
+ <div className="p-safe"> {/* 전체 */}
38
+ <header className="pt-safe"> {/* 상단 (노치) */}
39
+ <footer className="pb-safe"> {/* 하단 (홈 인디케이터) */}
40
+ <div className="px-safe py-safe"> {/* X축, Y축 */}
73
41
  ```
74
42
 
75
- ### Margin 유틸리티
76
-
43
+ ### Margin
77
44
  ```tsx
78
- // 전체 방향 safe area margin
79
- <div className="m-safe">...</div>
80
-
81
- // 개별 방향
82
- <div className="mt-safe mb-safe">상하 margin</div>
83
- <div className="ml-safe mr-safe">좌우 margin</div>
84
-
85
- // X축, Y축
86
- <div className="mx-safe">좌우 safe area margin</div>
87
- <div className="my-safe">상하 safe area margin</div>
45
+ <div className="m-safe mt-safe mb-safe mx-safe my-safe">
88
46
  ```
89
47
 
90
- ### Height 유틸리티
91
-
48
+ ### Height
92
49
  ```tsx
93
- // Safe area 제외한 화면 높이
94
- <main className="h-screen-safe">
95
- 전체 화면에서 safe area를 뺀 높이
96
- </main>
97
-
98
- // 최소 높이
99
- <div className="min-h-screen-safe">
100
- 최소 높이로 safe area 적용
101
- </div>
50
+ <main className="h-screen-safe"> {/* safe area 제외 높이 */}
51
+ <div className="min-h-screen-safe"> {/* 최소 높이 */}
102
52
  ```
103
53
 
104
- ## Fallback 유틸리티
105
-
106
- Safe Area가 0일 때 대체 값을 지정할 수 있습니다.
107
-
54
+ ### Fallback (safe area 없을 때 대체값)
108
55
  ```tsx
109
- // safe area 0이면 1rem(4) 적용
110
- <div className="p-safe-or-4">...</div>
111
-
112
- // 상단: safe area 또는 0.5rem(2)
113
- <header className="pt-safe-or-2">...</header>
114
-
115
- // 하단: safe area 또는 1rem(4)
116
- <footer className="pb-safe-or-4">...</footer>
117
-
118
- // 좌우: safe area 또는 1.5rem(6)
119
- <div className="px-safe-or-6">...</div>
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 */}
120
59
  ```
121
60
 
122
- ### Fallback 패턴
123
-
124
- | 클래스 | Safe Area 있을 때 | Safe Area 없을 때 |
125
- |--------|-------------------|-------------------|
126
- | `p-safe-or-4` | `env(safe-area-inset-*)` | `1rem` |
127
- | `pt-safe-or-2` | `env(safe-area-inset-top)` | `0.5rem` |
128
- | `pb-safe-or-4` | `env(safe-area-inset-bottom)` | `1rem` |
129
- | `px-safe-or-6` | `env(safe-area-inset-left/right)` | `1.5rem` |
130
-
131
- ## 실전 패턴
61
+ ## 레이아웃 패턴
132
62
 
133
63
  ### 기본 앱 레이아웃
134
-
135
- ```tsx
136
- // src/components/app-layout.tsx
137
- export function AppLayout({ children }: { children: React.ReactNode }) {
138
- return (
139
- <div className="min-h-screen-safe flex flex-col">
140
- {/* 상단 헤더 - 노치/다이나믹 아일랜드 대응 */}
141
- <header className="pt-safe-or-2 px-safe-or-4 bg-white border-b">
142
- <nav className="h-14 flex items-center">
143
- <h1>앱 타이틀</h1>
144
- </nav>
145
- </header>
146
-
147
- {/* 메인 콘텐츠 */}
148
- <main className="flex-1 px-safe-or-4">
149
- {children}
150
- </main>
151
-
152
- {/* 하단 탭바 - 홈 인디케이터 대응 */}
153
- <footer className="pb-safe-or-2 px-safe-or-4 bg-white border-t">
154
- <nav className="h-14 flex items-center justify-around">
155
- {/* 탭 아이템들 */}
156
- </nav>
157
- </footer>
158
- </div>
159
- )
160
- }
161
- ```
162
-
163
- ### 전체 화면 모달
164
-
165
64
  ```tsx
166
- // src/components/fullscreen-modal.tsx
167
- export function FullscreenModal({ children }: { children: React.ReactNode }) {
168
- return (
169
- <div className="fixed inset-0 bg-white z-50">
170
- <div className="h-screen-safe flex flex-col p-safe">
171
- {children}
172
- </div>
173
- </div>
174
- )
175
- }
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>
176
74
  ```
177
75
 
178
76
  ### 고정 하단 버튼
179
-
180
77
  ```tsx
181
- // src/components/fixed-bottom-button.tsx
182
- export function FixedBottomButton({ children }: { children: React.ReactNode }) {
183
- return (
184
- <div className="fixed bottom-0 left-0 right-0 pb-safe-or-4 px-safe-or-4 bg-white border-t">
185
- <button className="w-full h-12 bg-primary-600 text-white rounded-lg">
186
- {children}
187
- </button>
188
- </div>
189
- )
190
- }
191
- ```
192
-
193
- ### 스크롤 콘텐츠 with 고정 헤더/푸터
194
-
195
- ```tsx
196
- export function ScrollableContent() {
197
- return (
198
- <div className="h-screen-safe flex flex-col">
199
- {/* 고정 헤더 */}
200
- <header className="pt-safe px-safe-or-4 shrink-0">
201
- <div className="h-14">헤더</div>
202
- </header>
203
-
204
- {/* 스크롤 영역 */}
205
- <main className="flex-1 overflow-y-auto px-safe-or-4">
206
- {/* 스크롤 콘텐츠 */}
207
- </main>
208
-
209
- {/* 고정 푸터 */}
210
- <footer className="pb-safe px-safe-or-4 shrink-0">
211
- <div className="h-14">푸터</div>
212
- </footer>
213
- </div>
214
- )
215
- }
216
- ```
217
-
218
- ## CSS 직접 사용
219
-
220
- Tailwind 유틸리티 외에 CSS에서 직접 사용할 수도 있습니다.
221
-
222
- ```css
223
- .custom-container {
224
- padding-top: env(safe-area-inset-top);
225
- padding-bottom: env(safe-area-inset-bottom);
226
- padding-left: env(safe-area-inset-left);
227
- padding-right: env(safe-area-inset-right);
228
- }
229
-
230
- /* fallback 포함 */
231
- .custom-header {
232
- padding-top: max(env(safe-area-inset-top), 1rem);
233
- }
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>
234
83
  ```
235
84
 
236
- ## 높이 문제 해결
237
-
238
- 모바일 브라우저에서 `100vh`가 실제 뷰포트보다 클 수 있습니다.
239
-
240
- ### 해결 방법 1: h-screen-safe 사용
241
-
85
+ ### 전체 화면 모달
242
86
  ```tsx
243
- <div className="h-screen-safe">
244
- {/* safe area를 고려한 정확한 높이 */}
87
+ <div className="fixed inset-0 bg-white z-50">
88
+ <div className="h-screen-safe flex flex-col p-safe">{children}</div>
245
89
  </div>
246
90
  ```
247
91
 
248
- ### 해결 방법 2: -webkit-fill-available
249
-
250
- ```css
251
- .full-height {
252
- height: 100vh;
253
- height: -webkit-fill-available;
254
- }
255
- ```
256
-
257
- ### 해결 방법 3: dvh 단위 (권장)
258
-
259
- ```css
260
- .full-height {
261
- height: 100dvh; /* dynamic viewport height */
262
- }
263
- ```
264
-
265
- Tailwind에서:
92
+ ## 높이 문제 해결
266
93
 
267
94
  ```tsx
95
+ // 동적 뷰포트 높이 (권장)
268
96
  <div className="h-dvh">
269
- {/* 동적 뷰포트 높이 */}
270
- </div>
271
- ```
272
-
273
- ## 디바이스별 Safe Area
274
97
 
275
- | 디바이스 | 상단 | 하단 | 좌우 |
276
- |----------|------|------|------|
277
- | iPhone 14 Pro/15 Pro | 59px (다이나믹 아일랜드) | 34px | 0px |
278
- | iPhone 14/15 | 47px (노치) | 34px | 0px |
279
- | iPhone SE | 20px (상태바) | 0px | 0px |
280
- | iPad Pro | 24px | 20px | 0px |
281
- | Android (일반) | 24px (상태바) | 0px | 0px |
98
+ // 또는
99
+ <div className="h-screen-safe">
100
+ ```
282
101
 
283
102
  ## 트러블슈팅
284
103
 
285
- ### Safe Area가 적용되지 않음
286
-
287
- 1. `viewport-fit=cover` 메타 태그 확인
288
- 2. 플러그인이 올바르게 등록되었는지 확인
289
- 3. 실제 iOS 기기 또는 시뮬레이터에서 테스트 (데스크톱 브라우저는 safe area가 0)
290
-
291
- ### 콘텐츠가 노치에 가려짐
292
-
293
104
  ```tsx
294
- // ❌ 잘못된
295
- <header className="fixed top-0">...</header>
296
-
297
- // ✅ 올바른 예
298
- <header className="fixed top-0 pt-safe">...</header>
299
- ```
105
+ // ❌ 노치에 가려짐
106
+ <header className="fixed top-0">
300
107
 
301
- ### 하단 버튼이 인디케이터와 겹침
108
+ // safe area 적용
109
+ <header className="fixed top-0 pt-safe">
302
110
 
303
- ```tsx
304
- // 잘못된 예
305
- <button className="fixed bottom-4">...</button>
111
+ // ❌ 홈 인디케이터와 겹침
112
+ <button className="fixed bottom-4">
306
113
 
307
- // ✅ 올바른
114
+ // ✅ safe area 적용
308
115
  <div className="fixed bottom-0 pb-safe-or-4">
309
116
  <button>...</button>
310
117
  </div>
311
118
  ```
312
-
313
- ## 참고 자료
314
-
315
- - [tailwindcss-safe-area GitHub](https://github.com/mvllow/tailwindcss-safe-area)
316
- - [Apple Human Interface Guidelines - Layout](https://developer.apple.com/design/human-interface-guidelines/layout)
317
- - [CSS env() function](https://developer.mozilla.org/en-US/docs/Web/CSS/env)