@ceed/ads 1.13.4 → 1.15.0-next.2

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 (70) hide show
  1. package/dist/Overview.md +11 -0
  2. package/dist/components/Menu/Menu.d.ts +2 -5
  3. package/dist/components/Stepper/Stepper.d.ts +6 -0
  4. package/dist/components/data-display/Avatar.md +428 -0
  5. package/dist/components/data-display/Badge.md +315 -0
  6. package/dist/components/data-display/Chip.md +301 -0
  7. package/dist/components/data-display/DataTable.md +452 -0
  8. package/dist/components/data-display/InfoSign.md +160 -0
  9. package/dist/components/data-display/Markdown.md +17 -0
  10. package/dist/components/data-display/Table.md +1330 -0
  11. package/dist/components/data-display/Tooltip.md +444 -0
  12. package/dist/components/data-display/Typography.md +271 -0
  13. package/dist/components/data-display/llms.txt +17 -0
  14. package/dist/components/feedback/Alert.md +663 -0
  15. package/dist/components/feedback/Dialog.md +33 -0
  16. package/dist/components/feedback/Modal.md +39 -0
  17. package/dist/components/feedback/llms.txt +11 -0
  18. package/dist/components/inputs/Autocomplete.md +103 -0
  19. package/dist/components/inputs/Button.md +334 -0
  20. package/dist/components/inputs/ButtonGroup.md +382 -0
  21. package/dist/components/inputs/Calendar.md +19 -0
  22. package/dist/components/inputs/Checkbox.md +649 -0
  23. package/dist/components/inputs/CurrencyInput.md +91 -0
  24. package/dist/components/inputs/DatePicker.md +67 -0
  25. package/dist/components/inputs/DateRangePicker.md +55 -0
  26. package/dist/components/inputs/FilterMenu.md +210 -0
  27. package/dist/components/inputs/IconButton.md +361 -0
  28. package/dist/components/inputs/Input.md +283 -0
  29. package/dist/components/inputs/MonthPicker.md +72 -0
  30. package/dist/components/inputs/MonthRangePicker.md +70 -0
  31. package/dist/components/inputs/PercentageInput.md +116 -0
  32. package/dist/components/inputs/RadioButton.md +350 -0
  33. package/dist/components/inputs/RadioTileGroup.md +418 -0
  34. package/dist/components/inputs/Select.md +56 -0
  35. package/dist/components/inputs/Switch.md +577 -0
  36. package/dist/components/inputs/Textarea.md +64 -0
  37. package/dist/components/inputs/Uploader/Uploader.md +238 -0
  38. package/dist/components/inputs/Uploader/llms.txt +9 -0
  39. package/dist/components/inputs/llms.txt +31 -0
  40. package/dist/components/layout/Box.md +997 -0
  41. package/dist/components/layout/Container.md +23 -0
  42. package/dist/components/layout/Grid.md +728 -0
  43. package/dist/components/layout/Stack.md +937 -0
  44. package/dist/components/layout/llms.txt +12 -0
  45. package/dist/components/llms.txt +14 -0
  46. package/dist/components/navigation/Breadcrumbs.md +51 -0
  47. package/dist/components/navigation/Dropdown.md +768 -0
  48. package/dist/components/navigation/IconMenuButton.md +35 -0
  49. package/dist/components/navigation/InsetDrawer.md +133 -0
  50. package/dist/components/navigation/Link.md +24 -0
  51. package/dist/components/navigation/Menu.md +957 -0
  52. package/dist/components/navigation/MenuButton.md +39 -0
  53. package/dist/components/navigation/NavigationGroup.md +17 -0
  54. package/dist/components/navigation/NavigationItem.md +17 -0
  55. package/dist/components/navigation/Navigator.md +17 -0
  56. package/dist/components/navigation/Pagination.md +17 -0
  57. package/dist/components/navigation/ProfileMenu.md +34 -0
  58. package/dist/components/navigation/Stepper.md +108 -0
  59. package/dist/components/navigation/Tabs.md +34 -0
  60. package/dist/components/navigation/llms.txt +22 -0
  61. package/dist/components/surfaces/Accordions.md +96 -0
  62. package/dist/components/surfaces/Card.md +786 -0
  63. package/dist/components/surfaces/Divider.md +762 -0
  64. package/dist/components/surfaces/Sheet.md +900 -0
  65. package/dist/components/surfaces/llms.txt +12 -0
  66. package/dist/index.cjs +22 -10
  67. package/dist/index.js +22 -10
  68. package/dist/llms.txt +75 -0
  69. package/framer/index.js +36 -36
  70. package/package.json +8 -4
@@ -0,0 +1,786 @@
1
+ # Card
2
+
3
+ ## Introduction
4
+
5
+ Card 컴포넌트는 관련된 내용과 액션을 하나의 컨테이너로 묶어서 표시하는 UI 요소입니다. 정보를 구조화하고 시각적으로 그룹화하여 사용자가 쉽게 스캔하고 이해할 수 있도록 도와줍니다. 뉴스피드, 제품 목록, 사용자 프로필, 대시보드 위젯 등 다양한 용도로 사용됩니다.
6
+
7
+ ```tsx
8
+ <Card {...args} sx={{
9
+ maxWidth: 320
10
+ }}>
11
+ <CardContent>
12
+ <Typography level="title-md">Card Title</Typography>
13
+ <Typography level="body-sm">이것은 카드의 내용입니다. 여기에 다양한 정보를 표시할 수 있습니다.</Typography>
14
+ </CardContent>
15
+ </Card>
16
+ ```
17
+
18
+ | Field | Description | Default |
19
+ | ------- | ----------- | ---------- |
20
+ | variant | 카드 스타일 변형 | "outlined" |
21
+ | color | 카드 색상 | "neutral" |
22
+ | size | 카드 크기 | "md" |
23
+
24
+ ## Usage
25
+
26
+ ```tsx
27
+ import { Card, CardContent, CardActions, CardCover, CardOverflow } from '@ceed/ads';
28
+
29
+ function MyComponent() {
30
+ return (
31
+ <Card sx={{ maxWidth: 320 }}>
32
+ <CardContent>
33
+ <Typography level="title-lg">카드 제목</Typography>
34
+ <Typography level="body-md">카드의 내용이 들어갑니다.</Typography>
35
+ </CardContent>
36
+ </Card>
37
+ );
38
+ }
39
+ ```
40
+
41
+ ## Examples
42
+
43
+ ### Basic Usage
44
+
45
+ 가장 기본적인 카드 사용법입니다.
46
+
47
+ ```tsx
48
+ <div style={{
49
+ display: 'flex',
50
+ gap: '1rem',
51
+ flexWrap: 'wrap'
52
+ }}>
53
+ <Card sx={{
54
+ maxWidth: 300
55
+ }}>
56
+ <CardContent>
57
+ <Typography level="title-lg">기본 카드</Typography>
58
+ <Typography level="body-md">
59
+ 이것은 가장 기본적인 카드 형태입니다. 제목과 내용으로 구성되어 있습니다.
60
+ </Typography>
61
+ </CardContent>
62
+ </Card>
63
+ </div>
64
+ ```
65
+
66
+ ### Variants
67
+
68
+ 다양한 스타일 변형을 제공합니다.
69
+
70
+ ```tsx
71
+ <div style={{
72
+ display: 'flex',
73
+ gap: '1rem',
74
+ flexWrap: 'wrap'
75
+ }}>
76
+ <Card variant="solid" sx={{
77
+ maxWidth: 300
78
+ }}>
79
+ <CardContent>
80
+ <Typography level="title-md">Solid</Typography>
81
+ <Typography level="body-sm">Solid 스타일 카드</Typography>
82
+ </CardContent>
83
+ </Card>
84
+
85
+ <Card variant="soft" sx={{
86
+ maxWidth: 300
87
+ }}>
88
+ <CardContent>
89
+ <Typography level="title-md">Soft</Typography>
90
+ <Typography level="body-sm">Soft 스타일 카드</Typography>
91
+ </CardContent>
92
+ </Card>
93
+
94
+ <Card variant="outlined" sx={{
95
+ maxWidth: 300
96
+ }}>
97
+ <CardContent>
98
+ <Typography level="title-md">Outlined</Typography>
99
+ <Typography level="body-sm">Outlined 스타일 카드</Typography>
100
+ </CardContent>
101
+ </Card>
102
+
103
+ <Card variant="plain" sx={{
104
+ maxWidth: 300
105
+ }}>
106
+ <CardContent>
107
+ <Typography level="title-md">Plain</Typography>
108
+ <Typography level="body-sm">Plain 스타일 카드</Typography>
109
+ </CardContent>
110
+ </Card>
111
+ </div>
112
+ ```
113
+
114
+ ### Colors
115
+
116
+ 다양한 색상을 적용할 수 있습니다.
117
+
118
+ ```tsx
119
+ <div style={{
120
+ display: 'flex',
121
+ gap: '1rem',
122
+ flexWrap: 'wrap'
123
+ }}>
124
+ <Card color="primary" variant="soft" sx={{
125
+ maxWidth: 300
126
+ }}>
127
+ <CardContent>
128
+ <Typography level="title-md">Primary</Typography>
129
+ <Typography level="body-sm">Primary 색상 카드</Typography>
130
+ </CardContent>
131
+ </Card>
132
+
133
+ <Card color="neutral" variant="soft" sx={{
134
+ maxWidth: 300
135
+ }}>
136
+ <CardContent>
137
+ <Typography level="title-md">Neutral</Typography>
138
+ <Typography level="body-sm">Neutral 색상 카드</Typography>
139
+ </CardContent>
140
+ </Card>
141
+
142
+ <Card color="danger" variant="soft" sx={{
143
+ maxWidth: 300
144
+ }}>
145
+ <CardContent>
146
+ <Typography level="title-md">Danger</Typography>
147
+ <Typography level="body-sm">Danger 색상 카드</Typography>
148
+ </CardContent>
149
+ </Card>
150
+
151
+ <Card color="success" variant="soft" sx={{
152
+ maxWidth: 300
153
+ }}>
154
+ <CardContent>
155
+ <Typography level="title-md">Success</Typography>
156
+ <Typography level="body-sm">Success 색상 카드</Typography>
157
+ </CardContent>
158
+ </Card>
159
+
160
+ <Card color="warning" variant="soft" sx={{
161
+ maxWidth: 300
162
+ }}>
163
+ <CardContent>
164
+ <Typography level="title-md">Warning</Typography>
165
+ <Typography level="body-sm">Warning 색상 카드</Typography>
166
+ </CardContent>
167
+ </Card>
168
+ </div>
169
+ ```
170
+
171
+ ### Sizes
172
+
173
+ 크기를 조절할 수 있습니다.
174
+
175
+ ```tsx
176
+ <div style={{
177
+ display: 'flex',
178
+ gap: '1rem',
179
+ alignItems: 'flex-start',
180
+ flexWrap: 'wrap'
181
+ }}>
182
+ <Card size="sm" sx={{
183
+ maxWidth: 250
184
+ }}>
185
+ <CardContent>
186
+ <Typography level="title-sm">Small</Typography>
187
+ <Typography level="body-xs">작은 크기의 카드입니다.</Typography>
188
+ </CardContent>
189
+ </Card>
190
+
191
+ <Card size="md" sx={{
192
+ maxWidth: 300
193
+ }}>
194
+ <CardContent>
195
+ <Typography level="title-md">Medium</Typography>
196
+ <Typography level="body-sm">중간 크기의 카드입니다.</Typography>
197
+ </CardContent>
198
+ </Card>
199
+
200
+ <Card size="lg" sx={{
201
+ maxWidth: 350
202
+ }}>
203
+ <CardContent>
204
+ <Typography level="title-lg">Large</Typography>
205
+ <Typography level="body-md">큰 크기의 카드입니다.</Typography>
206
+ </CardContent>
207
+ </Card>
208
+ </div>
209
+ ```
210
+
211
+ ### With Cover
212
+
213
+ 이미지를 배경으로 사용할 수 있는 CardCover 컴포넌트를 활용한 카드입니다.
214
+
215
+ ```tsx
216
+ <div style={{
217
+ display: 'flex',
218
+ gap: '1rem',
219
+ flexWrap: 'wrap'
220
+ }}>
221
+ <Card sx={{
222
+ maxWidth: 320
223
+ }}>
224
+ <CardCover>
225
+ <img src="https://images.unsplash.com/photo-1502657877623-f66bf489d236?auto=format&fit=crop&w=320" loading="lazy" alt="Night view" />
226
+ </CardCover>
227
+ <CardContent>
228
+ <Typography level="body-lg" textColor="#fff">
229
+ Beautiful Night View
230
+ </Typography>
231
+ <Typography level="body-sm" textColor="neutral.300">
232
+ A stunning cityscape at night
233
+ </Typography>
234
+ </CardContent>
235
+ </Card>
236
+
237
+ <Card sx={{
238
+ maxWidth: 320
239
+ }}>
240
+ <CardCover>
241
+ <img src="https://images.unsplash.com/photo-1527549993586-dff825b37782?auto=format&fit=crop&w=320" loading="lazy" alt="Mountain" />
242
+ </CardCover>
243
+ <CardContent sx={{
244
+ justifyContent: 'flex-end'
245
+ }}>
246
+ <Typography level="title-lg" textColor="#fff">
247
+ Mountain Peak
248
+ </Typography>
249
+ <Typography level="body-sm" textColor="neutral.300">
250
+ Majestic mountain landscape
251
+ </Typography>
252
+ </CardContent>
253
+ </Card>
254
+ </div>
255
+ ```
256
+
257
+ ### With Actions
258
+
259
+ 하단에 액션 버튼들을 배치할 수 있습니다.
260
+
261
+ ```tsx
262
+ <div style={{
263
+ display: 'flex',
264
+ gap: '1rem',
265
+ flexWrap: 'wrap'
266
+ }}>
267
+ <Card sx={{
268
+ maxWidth: 320
269
+ }}>
270
+ <CardContent>
271
+ <Typography level="title-lg">게시물</Typography>
272
+ <Typography level="body-md">
273
+ 이것은 액션 버튼이 있는 카드입니다. 하단에 다양한 액션을 수행할 수 있는 버튼들이 있습니다.
274
+ </Typography>
275
+ </CardContent>
276
+ <CardActions>
277
+ <Button variant="soft" size="sm">
278
+ 좋아요
279
+ </Button>
280
+ <Button variant="soft" size="sm">
281
+ 공유하기
282
+ </Button>
283
+ <Button variant="soft" size="sm">
284
+ 더보기
285
+ </Button>
286
+ </CardActions>
287
+ </Card>
288
+
289
+ <Card sx={{
290
+ maxWidth: 320
291
+ }}>
292
+ <CardContent>
293
+ <Typography level="title-lg">설정</Typography>
294
+ <Typography level="body-md">설정을 변경하시겠습니까? 이 작업은 되돌릴 수 없습니다.</Typography>
295
+ </CardContent>
296
+ <CardActions buttonFlex={1}>
297
+ <Button variant="outlined" color="neutral">
298
+ 취소
299
+ </Button>
300
+ <Button variant="solid" color="primary">
301
+ 확인
302
+ </Button>
303
+ </CardActions>
304
+ </Card>
305
+ </div>
306
+ ```
307
+
308
+ ### With Overflow
309
+
310
+ CardOverflow를 사용하여 카드의 경계를 넘나드는 콘텐츠를 표시할 수 있습니다.
311
+
312
+ ```tsx
313
+ <div style={{
314
+ display: 'flex',
315
+ gap: '2rem',
316
+ flexWrap: 'wrap',
317
+ alignItems: 'flex-start'
318
+ }}>
319
+ {/* CardOverflow 비교 예제 */}
320
+ <div>
321
+ <Typography level="body-sm" sx={{
322
+ mb: 2,
323
+ textAlign: 'center'
324
+ }}>
325
+ 일반 Card (패딩 있음)
326
+ </Typography>
327
+ <Card variant="outlined" sx={{
328
+ maxWidth: 280
329
+ }}>
330
+ <CardContent sx={{
331
+ bgcolor: 'background.level1'
332
+ }}>
333
+ <img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=280" loading="lazy" alt="Profile" style={{
334
+ width: '100%',
335
+ height: 160,
336
+ objectFit: 'cover',
337
+ borderRadius: '4px'
338
+ }} />
339
+ </CardContent>
340
+ <CardContent>
341
+ <Typography level="title-md">John Doe</Typography>
342
+ <Typography level="body-sm">Software Engineer</Typography>
343
+ </CardContent>
344
+ <CardActions>
345
+ <Button size="sm" variant="soft">
346
+ 팔로우
347
+ </Button>
348
+ <Button size="sm" variant="solid">
349
+ 메시지
350
+ </Button>
351
+ </CardActions>
352
+ </Card>
353
+ </div>
354
+
355
+ {/* CardOverflow 사용 예제 */}
356
+ <div>
357
+ <Typography level="body-sm" sx={{
358
+ mb: 2,
359
+ textAlign: 'center'
360
+ }}>
361
+ CardOverflow 사용 (패딩 무시)
362
+ </Typography>
363
+ <Card variant="outlined" sx={{
364
+ maxWidth: 280
365
+ }}>
366
+ <CardOverflow>
367
+ <AspectRatio ratio="3/4">
368
+ <img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=280" loading="lazy" alt="Profile" />
369
+ </AspectRatio>
370
+ </CardOverflow>
371
+ <CardContent>
372
+ <Typography level="title-md">John Doe</Typography>
373
+ <Typography level="body-sm">Software Engineer</Typography>
374
+ </CardContent>
375
+ <CardOverflow variant="soft" sx={{
376
+ bgcolor: 'background.level1'
377
+ }}>
378
+ <CardActions sx={{
379
+ pt: 2,
380
+ pb: 2,
381
+ px: 2
382
+ }} buttonFlex={1}>
383
+ <Button size="sm" variant="soft">
384
+ 팔로우
385
+ </Button>
386
+ <Button size="sm" variant="solid">
387
+ 메시지
388
+ </Button>
389
+ </CardActions>
390
+ </CardOverflow>
391
+ </Card>
392
+ </div>
393
+
394
+ {/* 복합 CardOverflow 예제 */}
395
+ <div>
396
+ <Typography level="body-sm" sx={{
397
+ mb: 2,
398
+ textAlign: 'center'
399
+ }}>
400
+ 다양한 CardOverflow 활용
401
+ </Typography>
402
+ <Card variant="outlined" sx={{
403
+ maxWidth: 280
404
+ }}>
405
+ <CardOverflow>
406
+ <AspectRatio ratio="3">
407
+ <div style={{
408
+ background: 'linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)',
409
+ display: 'flex',
410
+ alignItems: 'center',
411
+ justifyContent: 'center',
412
+ color: 'white'
413
+ }}>
414
+ <Typography level="title-lg" textColor="white">
415
+ HEADER OVERFLOW
416
+ </Typography>
417
+ </div>
418
+ </AspectRatio>
419
+ </CardOverflow>
420
+ <CardContent sx={{
421
+ textAlign: 'center'
422
+ }}>
423
+ <Typography level="title-md">카드 제목</Typography>
424
+ <Typography level="body-sm">
425
+ CardOverflow를 사용하면 카드의 패딩을 무시하고 전체 너비를 활용할 수 있습니다.
426
+ </Typography>
427
+ </CardContent>
428
+ <CardOverflow variant="plain" sx={{
429
+ bgcolor: 'warning.50'
430
+ }}>
431
+ <Divider inset="context" />
432
+ <CardContent sx={{
433
+ py: 1.5
434
+ }}>
435
+ <Typography level="body-xs" textAlign="center" color="warning">
436
+ ⚠️ 이 영역도 CardOverflow로 만들어졌습니다
437
+ </Typography>
438
+ </CardContent>
439
+ </CardOverflow>
440
+ </Card>
441
+ </div>
442
+ </div>
443
+ ```
444
+
445
+ ### Interactive Cards
446
+
447
+ 클릭 가능하고 호버 효과가 있는 인터랙티브한 카드들입니다.
448
+
449
+ ```tsx
450
+ <div style={{
451
+ display: 'flex',
452
+ gap: '1rem',
453
+ flexWrap: 'wrap'
454
+ }}>
455
+ <Card variant="outlined" sx={{
456
+ maxWidth: 320,
457
+ cursor: 'pointer',
458
+ '&:hover': {
459
+ boxShadow: 'md',
460
+ borderColor: 'primary.outlinedHoverBorder'
461
+ }
462
+ }} onClick={() => alert('카드를 클릭했습니다!')}>
463
+ <CardContent>
464
+ <Typography level="title-md">클릭 가능한 카드</Typography>
465
+ <Typography level="body-sm">이 카드를 클릭하면 액션이 실행됩니다. 호버 효과도 확인해보세요.</Typography>
466
+ </CardContent>
467
+ </Card>
468
+
469
+ <Card variant="soft" color="primary" sx={{
470
+ maxWidth: 320,
471
+ cursor: 'pointer',
472
+ transition: 'transform 0.2s',
473
+ '&:hover': {
474
+ transform: 'translateY(-2px)'
475
+ }
476
+ }}>
477
+ <CardContent>
478
+ <Typography level="title-md">호버 애니메이션</Typography>
479
+ <Typography level="body-sm">마우스를 올리면 카드가 살짝 올라갑니다.</Typography>
480
+ </CardContent>
481
+ </Card>
482
+ </div>
483
+ ```
484
+
485
+ ### Media Cards
486
+
487
+ 이미지와 함께 사용하는 미디어 카드들입니다.
488
+
489
+ ```tsx
490
+ <div style={{
491
+ display: 'flex',
492
+ gap: '1rem',
493
+ flexWrap: 'wrap'
494
+ }}>
495
+ <Card sx={{
496
+ maxWidth: 320
497
+ }}>
498
+ <CardOverflow>
499
+ <AspectRatio ratio="1">
500
+ <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=320" loading="lazy" alt="Shoes" />
501
+ </AspectRatio>
502
+ </CardOverflow>
503
+ <CardContent>
504
+ <Typography level="title-lg">운동화</Typography>
505
+ <Typography level="body-md">편안하고 스타일리시한 운동화입니다.</Typography>
506
+ <Typography level="title-lg" sx={{
507
+ color: 'primary.main'
508
+ }}>
509
+ ₩129,000
510
+ </Typography>
511
+ </CardContent>
512
+ <CardActions>
513
+ <Button variant="solid" color="primary" fullWidth>
514
+ 구매하기
515
+ </Button>
516
+ </CardActions>
517
+ </Card>
518
+
519
+ <Card sx={{
520
+ maxWidth: 320
521
+ }}>
522
+ <CardOverflow>
523
+ <AspectRatio ratio="1">
524
+ <img src="https://images.unsplash.com/photo-1551963831-b3b1ca40c98e?auto=format&fit=crop&w=320" loading="lazy" alt="Breakfast" />
525
+ </AspectRatio>
526
+ </CardOverflow>
527
+ <CardContent>
528
+ <div style={{
529
+ display: 'flex',
530
+ justifyContent: 'space-between',
531
+ alignItems: 'center'
532
+ }}>
533
+ <Typography level="title-lg">맛있는 아침식사</Typography>
534
+ <Button size="sm" variant="plain" sx={{
535
+ p: 0.5
536
+ }}>
537
+ <MoreVertIcon />
538
+ </Button>
539
+ </div>
540
+ <Typography level="body-sm" sx={{
541
+ color: 'text.secondary',
542
+ mb: 1
543
+ }}>
544
+ <LocationOnIcon sx={{
545
+ fontSize: 16
546
+ }} /> 서울, 한국
547
+ </Typography>
548
+ <Typography level="body-md">건강하고 맛있는 아침 식사로 하루를 시작해보세요.</Typography>
549
+ </CardContent>
550
+ <CardActions>
551
+ <Button size="sm" variant="plain" startDecorator={<FavoriteIcon />}>
552
+ 좋아요
553
+ </Button>
554
+ <Button size="sm" variant="plain" startDecorator={<ShareIcon />}>
555
+ 공유
556
+ </Button>
557
+ </CardActions>
558
+ </Card>
559
+ </div>
560
+ ```
561
+
562
+ ### Complex Layout
563
+
564
+ 복잡한 레이아웃을 가진 소셜 미디어 스타일 카드입니다.
565
+
566
+ ```tsx
567
+ <div style={{
568
+ display: 'flex',
569
+ gap: '1rem',
570
+ flexWrap: 'wrap'
571
+ }}>
572
+ <Card sx={{
573
+ maxWidth: 400
574
+ }}>
575
+ <CardContent sx={{
576
+ pb: 2
577
+ }}>
578
+ <div style={{
579
+ display: 'flex',
580
+ alignItems: 'center',
581
+ gap: '1rem',
582
+ marginBottom: '1rem'
583
+ }}>
584
+ <Avatar size="sm" src="https://i.pravatar.cc/40?img=1" />
585
+ <div>
586
+ <Typography level="title-sm">김철수</Typography>
587
+ <Typography level="body-xs" sx={{
588
+ color: 'text.secondary'
589
+ }}>
590
+ 5분 전
591
+ </Typography>
592
+ </div>
593
+ </div>
594
+ <Typography level="body-md" sx={{
595
+ mb: 2
596
+ }}>
597
+ 오늘 정말 좋은 하루였습니다! 새로운 프로젝트를 시작했는데 너무 흥미진진해요. 팀원들과의 협업도 잘 되고 있고,
598
+ 앞으로가 기대됩니다.
599
+ </Typography>
600
+ </CardContent>
601
+ <CardOverflow>
602
+ <AspectRatio ratio="2">
603
+ <img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=400" loading="lazy" alt="Team work" />
604
+ </AspectRatio>
605
+ </CardOverflow>
606
+ <CardContent sx={{
607
+ pt: 1
608
+ }}>
609
+ <div style={{
610
+ display: 'flex',
611
+ alignItems: 'center',
612
+ gap: '1rem'
613
+ }}>
614
+ <Button size="sm" variant="plain" startDecorator={<FavoriteIcon />}>
615
+ 12
616
+ </Button>
617
+ <Button size="sm" variant="plain" startDecorator={<ShareIcon />}>
618
+ 공유
619
+ </Button>
620
+ <Typography level="body-xs" sx={{
621
+ ml: 'auto',
622
+ color: 'text.secondary'
623
+ }}>
624
+ 댓글 3개
625
+ </Typography>
626
+ </div>
627
+ </CardContent>
628
+ </Card>
629
+ </div>
630
+ ```
631
+
632
+ ## Card Components
633
+
634
+ Card는 여러 하위 컴포넌트로 구성됩니다:
635
+
636
+ ### Card
637
+
638
+ 메인 카드 컨테이너입니다.
639
+
640
+ ```tsx
641
+ <Card variant="outlined" color="neutral" size="md">
642
+ {/* 카드 내용 */}
643
+ </Card>
644
+ ```
645
+
646
+ ### CardContent
647
+
648
+ 카드의 주요 내용을 담는 영역입니다.
649
+
650
+ ```tsx
651
+ <CardContent>
652
+ <Typography level="title-lg">제목</Typography>
653
+ <Typography level="body-md">내용</Typography>
654
+ </CardContent>
655
+ ```
656
+
657
+ ### CardCover
658
+
659
+ 카드 전체를 덮는 배경 이미지나 미디어를 표시합니다.
660
+
661
+ ```tsx
662
+ <CardCover>
663
+ <img src="image.jpg" alt="Cover" />
664
+ </CardCover>
665
+ ```
666
+
667
+ ### CardActions
668
+
669
+ 액션 버튼들을 배치하는 영역입니다.
670
+
671
+ ```tsx
672
+ <CardActions>
673
+ <Button>확인</Button>
674
+ <Button>취소</Button>
675
+ </CardActions>
676
+ ```
677
+
678
+ ### CardOverflow
679
+
680
+ 카드의 패딩을 무시하고 전체 너비를 사용하는 영역입니다.
681
+
682
+ ```tsx
683
+ <CardOverflow>
684
+ <AspectRatio ratio="3/4">
685
+ <img src="full-width-image.jpg" alt="Full width" />
686
+ </AspectRatio>
687
+ </CardOverflow>
688
+ ```
689
+
690
+ ## Common Use Cases
691
+
692
+ ### Product Cards
693
+
694
+ ```tsx
695
+ <Card sx={{ maxWidth: 320 }}>
696
+ <CardOverflow>
697
+ <AspectRatio ratio="1">
698
+ <img src="product.jpg" alt="Product" />
699
+ </AspectRatio>
700
+ </CardOverflow>
701
+ <CardContent>
702
+ <Typography level="title-lg">제품명</Typography>
703
+ <Typography level="body-md">제품 설명</Typography>
704
+ <Typography level="title-lg" color="primary">
705
+ ₩199,000
706
+ </Typography>
707
+ </CardContent>
708
+ <CardActions>
709
+ <Button variant="solid" fullWidth>
710
+ 구매하기
711
+ </Button>
712
+ </CardActions>
713
+ </Card>
714
+ ```
715
+
716
+ ### User Profile Cards
717
+
718
+ ```tsx
719
+ <Card sx={{ maxWidth: 320 }}>
720
+ <CardContent sx={{ alignItems: 'center', textAlign: 'center' }}>
721
+ <Avatar size="lg" src="profile.jpg" />
722
+ <Typography level="title-lg">사용자 이름</Typography>
723
+ <Typography level="body-sm">직책</Typography>
724
+ </CardContent>
725
+ <CardActions>
726
+ <Button size="sm" variant="soft">
727
+ 팔로우
728
+ </Button>
729
+ <Button size="sm" variant="solid">
730
+ 메시지
731
+ </Button>
732
+ </CardActions>
733
+ </Card>
734
+ ```
735
+
736
+ ### News Cards
737
+
738
+ ```tsx
739
+ <Card sx={{ maxWidth: 400 }}>
740
+ <CardOverflow>
741
+ <AspectRatio ratio="3/2">
742
+ <img src="news.jpg" alt="News" />
743
+ </AspectRatio>
744
+ </CardOverflow>
745
+ <CardContent>
746
+ <Typography level="body-xs" color="neutral">
747
+ 뉴스 · 2시간 전
748
+ </Typography>
749
+ <Typography level="title-md">뉴스 제목</Typography>
750
+ <Typography level="body-sm">뉴스 요약...</Typography>
751
+ </CardContent>
752
+ </Card>
753
+ ```
754
+
755
+ ### Dashboard Widget Cards
756
+
757
+ ```tsx
758
+ <Card variant="soft" color="primary">
759
+ <CardContent>
760
+ <Typography level="body-sm">총 사용자</Typography>
761
+ <Typography level="h2">1,234</Typography>
762
+ <Typography level="body-xs">+12% from last month</Typography>
763
+ </CardContent>
764
+ </Card>
765
+ ```
766
+
767
+ ## Best Practices
768
+
769
+ 1. **적절한 크기**: 카드의 내용에 맞는 적절한 크기를 설정하세요. 너무 크거나 작으면 가독성이 떨어집니다.
770
+
771
+ 2. **일관된 스타일**: 같은 맥락에서 사용되는 카드들은 일관된 variant, color, size를 사용하세요.
772
+
773
+ 3. **명확한 계층구조**: Typography의 level을 활용하여 정보의 중요도에 따른 시각적 계층을 만드세요.
774
+
775
+ 4. **적절한 간격**: 여러 카드를 나열할 때는 적절한 간격을 두어 각각을 구분할 수 있게 하세요.
776
+
777
+ 5. **접근성 고려**:
778
+ - 카드가 클릭 가능한 경우 키보드 탐색을 지원하세요
779
+ - 이미지에는 적절한 alt 텍스트를 제공하세요
780
+ - 색상만으로 정보를 전달하지 마세요
781
+
782
+ 6. **반응형 디자인**: 다양한 화면 크기에서 잘 작동하도록 maxWidth나 responsive 속성을 활용하세요.
783
+
784
+ 7. **로딩 상태**: 데이터를 불러오는 동안에는 Skeleton 컴포넌트를 활용하여 로딩 상태를 표시하세요.
785
+
786
+ 8. **액션 버튼**: CardActions에는 카드와 직접 관련된 주요 액션만 포함하세요. 너무 많은 버튼은 혼란을 야기할 수 있습니다.