@ceed/ads 1.35.1 → 1.36.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 (122) hide show
  1. package/README.md +85 -95
  2. package/dist/components/Accordions/Accordions.d.ts +1 -0
  3. package/dist/components/Alert/Alert.d.ts +5 -5
  4. package/dist/components/Autocomplete/Autocomplete.d.ts +2 -2
  5. package/dist/components/Avatar/Avatar.d.ts +7 -17
  6. package/dist/components/Box/Box.d.ts +1 -0
  7. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +6 -5
  8. package/dist/components/Button/Button.d.ts +3 -2
  9. package/dist/components/Calendar/Calendar.d.ts +1 -0
  10. package/dist/components/Card/Card.d.ts +1 -0
  11. package/dist/components/Checkbox/Checkbox.d.ts +1 -0
  12. package/dist/components/Chip/Chip.d.ts +1 -0
  13. package/dist/components/Container/Container.d.ts +6 -1
  14. package/dist/components/DialogActions/DialogActions.d.ts +1 -0
  15. package/dist/components/DialogContent/DialogContent.d.ts +1 -0
  16. package/dist/components/DialogFrame/DialogFrame.d.ts +1 -1
  17. package/dist/components/DialogTitle/DialogTitle.d.ts +1 -0
  18. package/dist/components/Divider/Divider.d.ts +1 -0
  19. package/dist/components/Dropdown/Dropdown.d.ts +28 -1
  20. package/dist/components/FilterMenu/components/MonthRange.d.ts +11 -0
  21. package/dist/components/FilterMenu/types.d.ts +5 -1
  22. package/dist/components/FormControl/FormControl.d.ts +1 -0
  23. package/dist/components/FormHelperText/FormHelperText.d.ts +1 -0
  24. package/dist/components/FormLabel/FormLabel.d.ts +1 -0
  25. package/dist/components/Grid/Grid.d.ts +1 -0
  26. package/dist/components/IconButton/IconButton.d.ts +3 -2
  27. package/dist/components/IconMenuButton/IconMenuButton.d.ts +7 -6
  28. package/dist/components/InfoSign/InfoSign.d.ts +3 -2
  29. package/dist/components/Input/Input.d.ts +8 -22
  30. package/dist/components/InsetDrawer/InsetDrawer.d.ts +1 -0
  31. package/dist/components/Markdown/Markdown.d.ts +9 -24
  32. package/dist/components/Menu/Menu.d.ts +2 -1
  33. package/dist/components/MenuButton/MenuButton.d.ts +10 -8
  34. package/dist/components/Modal/Modal.d.ts +4 -2
  35. package/dist/components/NavigationGroup/NavigationGroup.d.ts +3 -2
  36. package/dist/components/NavigationItem/NavigationItem.d.ts +3 -2
  37. package/dist/components/Navigator/Navigator.d.ts +5 -4
  38. package/dist/components/Pagination/Pagination.d.ts +1 -1
  39. package/dist/components/ProfileMenu/ProfileMenu.d.ts +2 -2
  40. package/dist/components/Radio/Radio.d.ts +1 -0
  41. package/dist/components/RadioList/RadioList.d.ts +3 -2
  42. package/dist/components/Select/Select.d.ts +12 -10
  43. package/dist/components/Sheet/Sheet.d.ts +1 -0
  44. package/dist/components/Stack/Stack.d.ts +1 -0
  45. package/dist/components/Stepper/Stepper.d.ts +2 -1
  46. package/dist/components/Switch/Switch.d.ts +1 -0
  47. package/dist/components/Table/Table.d.ts +7 -5
  48. package/dist/components/Tabs/Tabs.d.ts +1 -0
  49. package/dist/components/Textarea/Textarea.d.ts +8 -20
  50. package/dist/components/ThemeProvider/ThemeProvider.d.ts +4 -2
  51. package/dist/components/Tooltip/Tooltip.d.ts +1 -0
  52. package/dist/components/Typography/Typography.d.ts +1 -0
  53. package/dist/components/Uploader/Uploader.d.ts +18 -17
  54. package/dist/components/data-display/Avatar.md +60 -72
  55. package/dist/components/data-display/Badge.md +197 -181
  56. package/dist/components/data-display/Chip.md +164 -142
  57. package/dist/components/data-display/DataTable.md +843 -338
  58. package/dist/components/data-display/InfoSign.md +1 -3
  59. package/dist/components/data-display/Markdown.md +93 -125
  60. package/dist/components/data-display/Table.md +1453 -1007
  61. package/dist/components/data-display/Typography.md +101 -104
  62. package/dist/components/feedback/Alert.md +80 -86
  63. package/dist/components/feedback/CircularProgress.md +32 -36
  64. package/dist/components/feedback/Dialog.md +25 -17
  65. package/dist/components/feedback/Modal.md +296 -265
  66. package/dist/components/feedback/Skeleton.md +125 -89
  67. package/dist/components/index.d.ts +60 -1
  68. package/dist/components/inputs/Autocomplete.md +191 -95
  69. package/dist/components/inputs/Button.md +83 -83
  70. package/dist/components/inputs/ButtonGroup.md +195 -185
  71. package/dist/components/inputs/Calendar.md +25 -28
  72. package/dist/components/inputs/Checkbox.md +11 -29
  73. package/dist/components/inputs/CurrencyInput.md +4 -4
  74. package/dist/components/inputs/DatePicker.md +229 -110
  75. package/dist/components/inputs/DateRangePicker.md +248 -137
  76. package/dist/components/inputs/FilterMenu.md +138 -8
  77. package/dist/components/inputs/FilterableCheckboxGroup.md +115 -55
  78. package/dist/components/inputs/FormControl.md +75 -69
  79. package/dist/components/inputs/IconButton.md +229 -205
  80. package/dist/components/inputs/Input.md +131 -98
  81. package/dist/components/inputs/MonthPicker.md +186 -84
  82. package/dist/components/inputs/MonthRangePicker.md +73 -49
  83. package/dist/components/inputs/PercentageInput.md +15 -31
  84. package/dist/components/inputs/RadioButton.md +320 -256
  85. package/dist/components/inputs/RadioList.md +66 -50
  86. package/dist/components/inputs/RadioTileGroup.md +287 -170
  87. package/dist/components/inputs/SearchBar.md +82 -60
  88. package/dist/components/inputs/Select.md +106 -95
  89. package/dist/components/inputs/Slider.md +153 -102
  90. package/dist/components/inputs/Switch.md +193 -138
  91. package/dist/components/inputs/Textarea.md +15 -20
  92. package/dist/components/inputs/Uploader/Uploader.md +68 -39
  93. package/dist/components/layout/Box.md +841 -662
  94. package/dist/components/layout/Container.md +3 -11
  95. package/dist/components/layout/Grid.md +480 -394
  96. package/dist/components/layout/Stack.md +739 -566
  97. package/dist/components/navigation/Breadcrumbs.md +182 -116
  98. package/dist/components/navigation/Dropdown.md +732 -391
  99. package/dist/components/navigation/IconMenuButton.md +14 -6
  100. package/dist/components/navigation/InsetDrawer.md +550 -378
  101. package/dist/components/navigation/Link.md +104 -94
  102. package/dist/components/navigation/Menu.md +623 -502
  103. package/dist/components/navigation/MenuButton.md +18 -10
  104. package/dist/components/navigation/NavigationGroup.md +19 -50
  105. package/dist/components/navigation/NavigationItem.md +6 -6
  106. package/dist/components/navigation/Navigator.md +26 -28
  107. package/dist/components/navigation/Pagination.md +86 -75
  108. package/dist/components/navigation/ProfileMenu.md +65 -43
  109. package/dist/components/navigation/Stepper.md +2 -12
  110. package/dist/components/navigation/Tabs.md +209 -183
  111. package/dist/components/surfaces/Accordions.md +89 -172
  112. package/dist/components/surfaces/Card.md +1094 -709
  113. package/dist/components/surfaces/Divider.md +562 -412
  114. package/dist/components/surfaces/Sheet.md +700 -518
  115. package/dist/guides/ThemeProvider.md +65 -40
  116. package/dist/index.browser.js +4 -4
  117. package/dist/index.browser.js.map +4 -4
  118. package/dist/index.cjs +1643 -1550
  119. package/dist/index.d.ts +1 -1
  120. package/dist/index.js +1303 -1202
  121. package/framer/index.js +1 -1
  122. package/package.json +32 -35
@@ -7,14 +7,19 @@ The Card component is a UI element that groups related content and actions withi
7
7
  Card is composed of five subcomponents: `Card`, `CardContent`, `CardCover`, `CardActions`, and `CardOverflow`.
8
8
 
9
9
  ```tsx
10
- <Card {...args} sx={{
11
- maxWidth: 320
12
- }}>
13
- <CardContent>
14
- <Typography level="title-md">Card Title</Typography>
15
- <Typography level="body-sm">이것은 카드의 내용입니다. 여기에 다양한 정보를 표시할 수 있습니다.</Typography>
16
- </CardContent>
17
- </Card>
10
+ <Card
11
+ {...args}
12
+ sx={{
13
+ maxWidth: 320
14
+ }}
15
+ >
16
+ <CardContent>
17
+ <Typography level="title-md">Card Title</Typography>
18
+ <Typography level="body-sm">
19
+ 이것은 카드의 내용입니다. 여기에 다양한 정보를 표시할 수 있습니다.
20
+ </Typography>
21
+ </CardContent>
22
+ </Card>
18
23
  ```
19
24
 
20
25
  | Field | Description | Default |
@@ -45,16 +50,18 @@ function MyComponent() {
45
50
  The most basic card with a title and body text.
46
51
 
47
52
  ```tsx
48
- <Card sx={{
49
- maxWidth: 300
50
- }}>
51
- <CardContent>
52
- <Typography level="title-lg">기본 카드</Typography>
53
- <Typography level="body-md">
54
- 이것은 가장 기본적인 카드 형태입니다. 제목과 내용으로 구성되어 있습니다.
55
- </Typography>
56
- </CardContent>
57
- </Card>
53
+ <Card
54
+ sx={{
55
+ maxWidth: 300
56
+ }}
57
+ >
58
+ <CardContent>
59
+ <Typography level="title-lg">기본 카드</Typography>
60
+ <Typography level="body-md">
61
+ 이것은 가장 기본적인 카드 형태입니다. 제목과 내용으로 구성되어 있습니다.
62
+ </Typography>
63
+ </CardContent>
64
+ </Card>
58
65
  ```
59
66
 
60
67
  ## Variants
@@ -63,19 +70,28 @@ Four visual styles are available: `solid`, `soft`, `outlined` (default), and `pl
63
70
 
64
71
  ```tsx
65
72
  <Stack direction="row" spacing={2} flexWrap="wrap">
66
- {(['solid', 'soft', 'outlined', 'plain'] as const).map(variant => <Card key={variant} variant={variant} sx={{
67
- width: 200
68
- }}>
69
- <CardContent>
70
- <Typography level="title-md" sx={{
71
- textTransform: 'capitalize'
72
- }}>
73
- {variant}
74
- </Typography>
75
- <Typography level="body-sm">{variant} 스타일 카드</Typography>
76
- </CardContent>
77
- </Card>)}
78
- </Stack>
73
+ {(["solid", "soft", "outlined", "plain"] as const).map((variant) => (
74
+ <Card
75
+ key={variant}
76
+ variant={variant}
77
+ sx={{
78
+ width: 200
79
+ }}
80
+ >
81
+ <CardContent>
82
+ <Typography
83
+ level="title-md"
84
+ sx={{
85
+ textTransform: "capitalize"
86
+ }}
87
+ >
88
+ {variant}
89
+ </Typography>
90
+ <Typography level="body-sm">{variant} 스타일 카드</Typography>
91
+ </CardContent>
92
+ </Card>
93
+ ))}
94
+ </Stack>
79
95
  ```
80
96
 
81
97
  ## Colors
@@ -84,19 +100,29 @@ Apply a color scheme to match your UI context.
84
100
 
85
101
  ```tsx
86
102
  <Stack direction="row" spacing={2} flexWrap="wrap">
87
- {(['primary', 'neutral', 'danger', 'success', 'warning'] as const).map(color => <Card key={color} color={color} variant="soft" sx={{
88
- width: 180
89
- }}>
90
- <CardContent>
91
- <Typography level="title-md" sx={{
92
- textTransform: 'capitalize'
93
- }}>
94
- {color}
95
- </Typography>
96
- <Typography level="body-sm">{color} 색상 카드</Typography>
97
- </CardContent>
98
- </Card>)}
99
- </Stack>
103
+ {(["primary", "neutral", "danger", "success", "warning"] as const).map((color) => (
104
+ <Card
105
+ key={color}
106
+ color={color}
107
+ variant="soft"
108
+ sx={{
109
+ width: 180
110
+ }}
111
+ >
112
+ <CardContent>
113
+ <Typography
114
+ level="title-md"
115
+ sx={{
116
+ textTransform: "capitalize"
117
+ }}
118
+ >
119
+ {color}
120
+ </Typography>
121
+ <Typography level="body-sm">{color} 색상 카드</Typography>
122
+ </CardContent>
123
+ </Card>
124
+ ))}
125
+ </Stack>
100
126
  ```
101
127
 
102
128
  ## Sizes
@@ -105,31 +131,40 @@ Three sizes control the card's internal padding: `sm`, `md` (default), and `lg`.
105
131
 
106
132
  ```tsx
107
133
  <Stack direction="row" spacing={2} alignItems="flex-start" flexWrap="wrap">
108
- <Card size="sm" sx={{
109
- width: 220
110
- }}>
111
- <CardContent>
112
- <Typography level="title-sm">Small</Typography>
113
- <Typography level="body-xs">작은 크기의 카드입니다.</Typography>
114
- </CardContent>
115
- </Card>
116
- <Card size="md" sx={{
117
- width: 260
118
- }}>
119
- <CardContent>
120
- <Typography level="title-md">Medium</Typography>
121
- <Typography level="body-sm">중간 크기의 카드입니다.</Typography>
122
- </CardContent>
123
- </Card>
124
- <Card size="lg" sx={{
125
- width: 300
126
- }}>
127
- <CardContent>
128
- <Typography level="title-lg">Large</Typography>
129
- <Typography level="body-md">큰 크기의 카드입니다.</Typography>
130
- </CardContent>
131
- </Card>
132
- </Stack>
134
+ <Card
135
+ size="sm"
136
+ sx={{
137
+ width: 220
138
+ }}
139
+ >
140
+ <CardContent>
141
+ <Typography level="title-sm">Small</Typography>
142
+ <Typography level="body-xs">작은 크기의 카드입니다.</Typography>
143
+ </CardContent>
144
+ </Card>
145
+ <Card
146
+ size="md"
147
+ sx={{
148
+ width: 260
149
+ }}
150
+ >
151
+ <CardContent>
152
+ <Typography level="title-md">Medium</Typography>
153
+ <Typography level="body-sm">중간 크기의 카드입니다.</Typography>
154
+ </CardContent>
155
+ </Card>
156
+ <Card
157
+ size="lg"
158
+ sx={{
159
+ width: 300
160
+ }}
161
+ >
162
+ <CardContent>
163
+ <Typography level="title-lg">Large</Typography>
164
+ <Typography level="body-md">큰 크기의 카드입니다.</Typography>
165
+ </CardContent>
166
+ </Card>
167
+ </Stack>
133
168
  ```
134
169
 
135
170
  ## Horizontal Layout
@@ -137,57 +172,92 @@ Three sizes control the card's internal padding: `sm`, `md` (default), and `lg`.
137
172
  Set `orientation="horizontal"` to arrange the card's children in a row. Combine with `CardOverflow` for a side-by-side image and text layout.
138
173
 
139
174
  ```tsx
140
- <Stack spacing={2} sx={{
141
- maxWidth: 500
142
- }}>
143
- <Card orientation="horizontal" variant="outlined">
144
- <CardOverflow>
145
- <AspectRatio ratio="1" sx={{
146
- width: 140
147
- }}>
148
- <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=280" loading="lazy" alt="Shoes" />
149
- </AspectRatio>
150
- </CardOverflow>
151
- <CardContent>
152
- <Typography level="title-md">운동화</Typography>
153
- <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
154
- <Stack direction="row" spacing={1} alignItems="center" sx={{
155
- mt: 'auto'
156
- }}>
157
- <Chip variant="outlined" color="primary" size="sm">무료배송</Chip>
158
- <Typography level="title-sm" color="primary">₩129,000</Typography>
159
- </Stack>
160
- </CardContent>
161
- <CardActions sx={{
162
- flexDirection: 'column',
163
- gap: 0.5
164
- }}>
165
- <Button size="sm" variant="solid" color="primary">구매</Button>
166
- <IconButton size="sm" variant="outlined" color="neutral">
167
- <BookmarkAddIcon />
168
- </IconButton>
169
- </CardActions>
170
- </Card>
175
+ <Stack
176
+ spacing={2}
177
+ sx={{
178
+ maxWidth: 500
179
+ }}
180
+ >
181
+ <Card orientation="horizontal" variant="outlined">
182
+ <CardOverflow>
183
+ <AspectRatio
184
+ ratio="1"
185
+ sx={{
186
+ width: 140
187
+ }}
188
+ >
189
+ <img
190
+ src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=280"
191
+ loading="lazy"
192
+ alt="Shoes"
193
+ />
194
+ </AspectRatio>
195
+ </CardOverflow>
196
+ <CardContent>
197
+ <Typography level="title-md">운동화</Typography>
198
+ <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
199
+ <Stack
200
+ direction="row"
201
+ spacing={1}
202
+ alignItems="center"
203
+ sx={{
204
+ mt: "auto"
205
+ }}
206
+ >
207
+ <Chip variant="outlined" color="primary" size="sm">
208
+ 무료배송
209
+ </Chip>
210
+ <Typography level="title-sm" color="primary">
211
+ ₩129,000
212
+ </Typography>
213
+ </Stack>
214
+ </CardContent>
215
+ <CardActions
216
+ sx={{
217
+ flexDirection: "column",
218
+ gap: 0.5
219
+ }}
220
+ >
221
+ <Button size="sm" variant="solid" color="primary">
222
+ 구매
223
+ </Button>
224
+ <IconButton size="sm" variant="outlined" color="neutral">
225
+ <BookmarkAddIcon />
226
+ </IconButton>
227
+ </CardActions>
228
+ </Card>
171
229
 
172
- <Card orientation="horizontal" variant="outlined">
173
- <CardOverflow>
174
- <AspectRatio ratio="1" sx={{
175
- width: 120
176
- }}>
177
- <img src="https://images.unsplash.com/photo-1551963831-b3b1ca40c98e?auto=format&fit=crop&w=240" loading="lazy" alt="Breakfast" />
178
- </AspectRatio>
179
- </CardOverflow>
180
- <CardContent>
181
- <Typography level="title-sm">맛있는 아침식사</Typography>
182
- <Typography level="body-xs" startDecorator={<LocationOnIcon />}>서울, 한국</Typography>
183
- <Typography level="body-xs" sx={{
184
- mt: 0.5
185
- }}>
186
- 건강하고 맛있는 아침 식사로 하루를 시작해보세요.
187
- </Typography>
188
- </CardContent>
189
- </Card>
190
- </Stack>
230
+ <Card orientation="horizontal" variant="outlined">
231
+ <CardOverflow>
232
+ <AspectRatio
233
+ ratio="1"
234
+ sx={{
235
+ width: 120
236
+ }}
237
+ >
238
+ <img
239
+ src="https://images.unsplash.com/photo-1551963831-b3b1ca40c98e?auto=format&fit=crop&w=240"
240
+ loading="lazy"
241
+ alt="Breakfast"
242
+ />
243
+ </AspectRatio>
244
+ </CardOverflow>
245
+ <CardContent>
246
+ <Typography level="title-sm">맛있는 아침식사</Typography>
247
+ <Typography level="body-xs" startDecorator={<LocationOnIcon />}>
248
+ 서울, 한국
249
+ </Typography>
250
+ <Typography
251
+ level="body-xs"
252
+ sx={{
253
+ mt: 0.5
254
+ }}
255
+ >
256
+ 건강하고 맛있는 아침 식사로 하루를 시작해보세요.
257
+ </Typography>
258
+ </CardContent>
259
+ </Card>
260
+ </Stack>
191
261
  ```
192
262
 
193
263
  ## Inverted Colors
@@ -196,25 +266,40 @@ The `invertedColors` prop automatically applies an inverted color scheme to chil
196
266
 
197
267
  ```tsx
198
268
  <Stack direction="row" spacing={2} flexWrap="wrap">
199
- {(['primary', 'neutral', 'danger'] as const).map(color => <Card key={color} variant="solid" color={color} invertedColors sx={{
200
- width: 260
201
- }}>
202
- <CardContent>
203
- <Typography level="title-md" sx={{
204
- textTransform: 'capitalize'
205
- }}>{color}</Typography>
206
- <Typography level="body-sm">
207
- invertedColors를 사용하면 자식 컴포넌트가 자동으로 반전된 색상을 적용받습니다.
208
- </Typography>
209
- </CardContent>
210
- <CardActions>
211
- <Button variant="soft" size="sm">Action</Button>
212
- <IconButton variant="soft" size="sm">
213
- <OpenInNewIcon />
214
- </IconButton>
215
- </CardActions>
216
- </Card>)}
217
- </Stack>
269
+ {(["primary", "neutral", "danger"] as const).map((color) => (
270
+ <Card
271
+ key={color}
272
+ variant="solid"
273
+ color={color}
274
+ invertedColors
275
+ sx={{
276
+ width: 260
277
+ }}
278
+ >
279
+ <CardContent>
280
+ <Typography
281
+ level="title-md"
282
+ sx={{
283
+ textTransform: "capitalize"
284
+ }}
285
+ >
286
+ {color}
287
+ </Typography>
288
+ <Typography level="body-sm">
289
+ invertedColors를 사용하면 자식 컴포넌트가 자동으로 반전된 색상을 적용받습니다.
290
+ </Typography>
291
+ </CardContent>
292
+ <CardActions>
293
+ <Button variant="soft" size="sm">
294
+ Action
295
+ </Button>
296
+ <IconButton variant="soft" size="sm">
297
+ <OpenInNewIcon />
298
+ </IconButton>
299
+ </CardActions>
300
+ </Card>
301
+ ))}
302
+ </Stack>
218
303
  ```
219
304
 
220
305
  ## Full Image Card
@@ -223,74 +308,100 @@ Use `CardOverflow` to fill the entire card with an image, then overlay `CardCont
223
308
 
224
309
  ```tsx
225
310
  <Stack direction="row" spacing={2} flexWrap="wrap">
226
- <Card component="a" href="#" sx={{
227
- width: 280,
228
- height: 360,
229
- boxShadow: 'lg',
230
- textDecoration: 'none',
231
- '&:hover img': {
232
- transform: 'scale(1.05)'
233
- },
234
- transition: 'box-shadow 0.3s',
235
- '&:hover': {
236
- boxShadow: 'xl'
237
- }
238
- }} onClick={e => e.preventDefault()}>
239
- <CardCover>
240
- <img src="https://images.unsplash.com/photo-1527549993586-dff825b37782?auto=format&fit=crop&w=560&h=720" loading="lazy" alt="Mountain Peak" style={{
241
- transition: 'transform 0.4s'
242
- }} />
243
- </CardCover>
244
- <CardCover sx={{
245
- background: 'linear-gradient(to top, rgba(0,0,0,0.7) 30%, rgba(0,0,0,0) 60%)'
246
- }} />
247
- <CardContent sx={{
248
- justifyContent: 'flex-end'
249
- }}>
250
- <Typography level="title-lg" textColor="#fff">
251
- Mountain Peak
252
- </Typography>
253
- <Typography level="body-sm" textColor="neutral.300">
254
- Majestic mountain landscape
255
- </Typography>
256
- </CardContent>
257
- </Card>
311
+ <Card
312
+ component="a"
313
+ href="#"
314
+ sx={{
315
+ width: 280,
316
+ height: 360,
317
+ boxShadow: "lg",
318
+ textDecoration: "none",
319
+ "&:hover img": {
320
+ transform: "scale(1.05)"
321
+ },
322
+ transition: "box-shadow 0.3s",
323
+ "&:hover": {
324
+ boxShadow: "xl"
325
+ }
326
+ }}
327
+ onClick={(e) => e.preventDefault()}
328
+ >
329
+ <CardCover>
330
+ <img
331
+ src="https://images.unsplash.com/photo-1527549993586-dff825b37782?auto=format&fit=crop&w=560&h=720"
332
+ loading="lazy"
333
+ alt="Mountain Peak"
334
+ style={{
335
+ transition: "transform 0.4s"
336
+ }}
337
+ />
338
+ </CardCover>
339
+ <CardCover
340
+ sx={{
341
+ background: "linear-gradient(to top, rgba(0,0,0,0.7) 30%, rgba(0,0,0,0) 60%)"
342
+ }}
343
+ />
344
+ <CardContent
345
+ sx={{
346
+ justifyContent: "flex-end"
347
+ }}
348
+ >
349
+ <Typography level="title-lg" textColor="#fff">
350
+ Mountain Peak
351
+ </Typography>
352
+ <Typography level="body-sm" textColor="neutral.300">
353
+ Majestic mountain landscape
354
+ </Typography>
355
+ </CardContent>
356
+ </Card>
258
357
 
259
- <Card component="button" sx={{
260
- width: 280,
261
- height: 360,
262
- border: 'none',
263
- boxShadow: 'lg',
264
- '&:hover img': {
265
- transform: 'scale(1.05)'
266
- },
267
- '&:focus-visible': {
268
- outline: '3px solid',
269
- outlineColor: 'primary.500',
270
- outlineOffset: 2
271
- },
272
- cursor: 'pointer'
273
- }}>
274
- <CardCover>
275
- <img src="https://images.unsplash.com/photo-1502657877623-f66bf489d236?auto=format&fit=crop&w=560&h=720" loading="lazy" alt="Night view" style={{
276
- transition: 'transform 0.4s'
277
- }} />
278
- </CardCover>
279
- <CardCover sx={{
280
- background: 'linear-gradient(to top, rgba(0,0,0,0.8) 20%, rgba(0,0,0,0) 50%)'
281
- }} />
282
- <CardContent sx={{
283
- justifyContent: 'flex-end'
284
- }}>
285
- <Typography level="title-lg" textColor="#fff">
286
- Night View
287
- </Typography>
288
- <Typography level="body-sm" textColor="neutral.300">
289
- A stunning cityscape
290
- </Typography>
291
- </CardContent>
292
- </Card>
293
- </Stack>
358
+ <Card
359
+ component="button"
360
+ sx={{
361
+ width: 280,
362
+ height: 360,
363
+ border: "none",
364
+ boxShadow: "lg",
365
+ "&:hover img": {
366
+ transform: "scale(1.05)"
367
+ },
368
+ "&:focus-visible": {
369
+ outline: "3px solid",
370
+ outlineColor: "primary.500",
371
+ outlineOffset: 2
372
+ },
373
+ cursor: "pointer"
374
+ }}
375
+ >
376
+ <CardCover>
377
+ <img
378
+ src="https://images.unsplash.com/photo-1502657877623-f66bf489d236?auto=format&fit=crop&w=560&h=720"
379
+ loading="lazy"
380
+ alt="Night view"
381
+ style={{
382
+ transition: "transform 0.4s"
383
+ }}
384
+ />
385
+ </CardCover>
386
+ <CardCover
387
+ sx={{
388
+ background: "linear-gradient(to top, rgba(0,0,0,0.8) 20%, rgba(0,0,0,0) 50%)"
389
+ }}
390
+ />
391
+ <CardContent
392
+ sx={{
393
+ justifyContent: "flex-end"
394
+ }}
395
+ >
396
+ <Typography level="title-lg" textColor="#fff">
397
+ Night View
398
+ </Typography>
399
+ <Typography level="body-sm" textColor="neutral.300">
400
+ A stunning cityscape
401
+ </Typography>
402
+ </CardContent>
403
+ </Card>
404
+ </Stack>
294
405
  ```
295
406
 
296
407
  ## CardContent
@@ -312,50 +423,70 @@ Use `CardOverflow` to fill the entire card with an image, then overlay `CardCont
312
423
 
313
424
  ```tsx
314
425
  <Stack direction="row" spacing={2} flexWrap="wrap">
315
- <Card sx={{
316
- width: 320,
317
- boxShadow: 'lg'
318
- }}>
319
- <CardCover>
320
- <img src="https://images.unsplash.com/photo-1502657877623-f66bf489d236?auto=format&fit=crop&w=640" loading="lazy" alt="Night view" />
321
- </CardCover>
322
- <CardCover sx={{
323
- background: 'linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0) 200px)'
324
- }} />
325
- <CardContent sx={{
326
- justifyContent: 'flex-end'
327
- }}>
328
- <Typography level="title-lg" textColor="#fff">
329
- Beautiful Night View
330
- </Typography>
331
- <Typography level="body-sm" textColor="neutral.300">
332
- A stunning cityscape at night
333
- </Typography>
334
- </CardContent>
335
- </Card>
426
+ <Card
427
+ sx={{
428
+ width: 320,
429
+ boxShadow: "lg"
430
+ }}
431
+ >
432
+ <CardCover>
433
+ <img
434
+ src="https://images.unsplash.com/photo-1502657877623-f66bf489d236?auto=format&fit=crop&w=640"
435
+ loading="lazy"
436
+ alt="Night view"
437
+ />
438
+ </CardCover>
439
+ <CardCover
440
+ sx={{
441
+ background: "linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0) 200px)"
442
+ }}
443
+ />
444
+ <CardContent
445
+ sx={{
446
+ justifyContent: "flex-end"
447
+ }}
448
+ >
449
+ <Typography level="title-lg" textColor="#fff">
450
+ Beautiful Night View
451
+ </Typography>
452
+ <Typography level="body-sm" textColor="neutral.300">
453
+ A stunning cityscape at night
454
+ </Typography>
455
+ </CardContent>
456
+ </Card>
336
457
 
337
- <Card sx={{
338
- width: 320,
339
- boxShadow: 'lg'
340
- }}>
341
- <CardCover>
342
- <img src="https://images.unsplash.com/photo-1527549993586-dff825b37782?auto=format&fit=crop&w=640" loading="lazy" alt="Mountain" />
343
- </CardCover>
344
- <CardCover sx={{
345
- background: 'linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0) 200px)'
346
- }} />
347
- <CardContent sx={{
348
- justifyContent: 'flex-end'
349
- }}>
350
- <Typography level="title-lg" textColor="#fff">
351
- Mountain Peak
352
- </Typography>
353
- <Typography level="body-sm" textColor="neutral.300">
354
- Majestic mountain landscape
355
- </Typography>
356
- </CardContent>
357
- </Card>
358
- </Stack>
458
+ <Card
459
+ sx={{
460
+ width: 320,
461
+ boxShadow: "lg"
462
+ }}
463
+ >
464
+ <CardCover>
465
+ <img
466
+ src="https://images.unsplash.com/photo-1527549993586-dff825b37782?auto=format&fit=crop&w=640"
467
+ loading="lazy"
468
+ alt="Mountain"
469
+ />
470
+ </CardCover>
471
+ <CardCover
472
+ sx={{
473
+ background: "linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0) 200px)"
474
+ }}
475
+ />
476
+ <CardContent
477
+ sx={{
478
+ justifyContent: "flex-end"
479
+ }}
480
+ >
481
+ <Typography level="title-lg" textColor="#fff">
482
+ Mountain Peak
483
+ </Typography>
484
+ <Typography level="body-sm" textColor="neutral.300">
485
+ Majestic mountain landscape
486
+ </Typography>
487
+ </CardContent>
488
+ </Card>
489
+ </Stack>
359
490
  ```
360
491
 
361
492
  ```tsx
@@ -375,53 +506,63 @@ Use `CardOverflow` to fill the entire card with an image, then overlay `CardCont
375
506
 
376
507
  ```tsx
377
508
  <Stack direction="row" spacing={2} flexWrap="wrap">
378
- <Card sx={{
379
- width: 320
380
- }}>
381
- <CardContent>
382
- <Typography level="title-lg">게시물</Typography>
383
- <Typography level="body-md">
384
- 이것은 액션 버튼이 있는 카드입니다. 하단에 다양한 액션을 수행할 수 있는 버튼들이 있습니다.
385
- </Typography>
386
- </CardContent>
387
- <CardActions>
388
- <Button variant="soft" size="sm">
389
- 좋아요
390
- </Button>
391
- <Button variant="soft" size="sm">
392
- 공유하기
393
- </Button>
394
- <Button variant="soft" size="sm">
395
- 더보기
396
- </Button>
397
- </CardActions>
398
- </Card>
509
+ <Card
510
+ sx={{
511
+ width: 320
512
+ }}
513
+ >
514
+ <CardContent>
515
+ <Typography level="title-lg">게시물</Typography>
516
+ <Typography level="body-md">
517
+ 이것은 액션 버튼이 있는 카드입니다. 하단에 다양한 액션을 수행할 수 있는 버튼들이 있습니다.
518
+ </Typography>
519
+ </CardContent>
520
+ <CardActions>
521
+ <Button variant="soft" size="sm">
522
+ 좋아요
523
+ </Button>
524
+ <Button variant="soft" size="sm">
525
+ 공유하기
526
+ </Button>
527
+ <Button variant="soft" size="sm">
528
+ 더보기
529
+ </Button>
530
+ </CardActions>
531
+ </Card>
399
532
 
400
- <Card sx={{
401
- width: 320
402
- }}>
403
- <CardContent>
404
- <Typography level="title-lg">설정</Typography>
405
- <Typography level="body-md">설정을 변경하시겠습니까? 이 작업은 되돌릴 수 없습니다.</Typography>
406
- </CardContent>
407
- <CardActions buttonFlex={1}>
408
- <Button variant="outlined" color="neutral">
409
- 취소
410
- </Button>
411
- <Button variant="solid" color="primary">
412
- 확인
413
- </Button>
414
- </CardActions>
415
- </Card>
416
- </Stack>
533
+ <Card
534
+ sx={{
535
+ width: 320
536
+ }}
537
+ >
538
+ <CardContent>
539
+ <Typography level="title-lg">설정</Typography>
540
+ <Typography level="body-md">
541
+ 설정을 변경하시겠습니까? 이 작업은 되돌릴 수 없습니다.
542
+ </Typography>
543
+ </CardContent>
544
+ <CardActions buttonFlex={1}>
545
+ <Button variant="outlined" color="neutral">
546
+ 취소
547
+ </Button>
548
+ <Button variant="solid" color="primary">
549
+ 확인
550
+ </Button>
551
+ </CardActions>
552
+ </Card>
553
+ </Stack>
417
554
  ```
418
555
 
419
556
  ```tsx
420
557
  <Card>
421
558
  <CardContent>...</CardContent>
422
559
  <CardActions buttonFlex={1}>
423
- <Button variant="outlined" color="neutral">Cancel</Button>
424
- <Button variant="solid" color="primary">Confirm</Button>
560
+ <Button variant="outlined" color="neutral">
561
+ Cancel
562
+ </Button>
563
+ <Button variant="solid" color="primary">
564
+ Confirm
565
+ </Button>
425
566
  </CardActions>
426
567
  </Card>
427
568
  ```
@@ -432,113 +573,164 @@ Use `CardOverflow` to fill the entire card with an image, then overlay `CardCont
432
573
 
433
574
  ```tsx
434
575
  <Stack direction="row" spacing={3} alignItems="flex-start" flexWrap="wrap">
435
- <Box>
436
- <Typography level="body-sm" sx={{
437
- mb: 2,
438
- textAlign: 'center'
439
- }}>
440
- 일반 Card (패딩 있음)
441
- </Typography>
442
- <Card variant="outlined" sx={{
443
- width: 260
444
- }}>
445
- <CardContent sx={{
446
- bgcolor: 'background.level1'
447
- }}>
448
- <AspectRatio ratio="16/9" sx={{
449
- borderRadius: 'xs'
450
- }}>
451
- <img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=520" loading="lazy" alt="Profile" />
452
- </AspectRatio>
453
- </CardContent>
454
- <CardContent>
455
- <Typography level="title-md">John Doe</Typography>
456
- <Typography level="body-sm">Software Engineer</Typography>
457
- </CardContent>
458
- <CardActions>
459
- <Button size="sm" variant="soft">팔로우</Button>
460
- <Button size="sm" variant="solid">메시지</Button>
461
- </CardActions>
462
- </Card>
463
- </Box>
464
-
465
- <Box>
466
- <Typography level="body-sm" sx={{
467
- mb: 2,
468
- textAlign: 'center'
469
- }}>
470
- CardOverflow 사용 (패딩 무시)
471
- </Typography>
472
- <Card variant="outlined" sx={{
473
- width: 260
474
- }}>
475
- <CardOverflow>
476
- <AspectRatio ratio="16/9">
477
- <img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=520" loading="lazy" alt="Profile" />
478
- </AspectRatio>
479
- </CardOverflow>
480
- <CardContent>
481
- <Typography level="title-md">John Doe</Typography>
482
- <Typography level="body-sm">Software Engineer</Typography>
483
- </CardContent>
484
- <CardOverflow variant="soft" sx={{
485
- bgcolor: 'background.level1'
486
- }}>
487
- <CardActions buttonFlex={1}>
488
- <Button size="sm" variant="soft">팔로우</Button>
489
- <Button size="sm" variant="solid">메시지</Button>
490
- </CardActions>
491
- </CardOverflow>
492
- </Card>
493
- </Box>
494
-
495
- <Box>
496
- <Typography level="body-sm" sx={{
497
- mb: 2,
498
- textAlign: 'center'
499
- }}>
500
- 다양한 CardOverflow 활용
501
- </Typography>
502
- <Card variant="outlined" sx={{
503
- width: 260
504
- }}>
505
- <CardOverflow>
506
- <AspectRatio ratio="3">
507
- <Box sx={{
508
- background: 'linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)',
509
- display: 'flex',
510
- alignItems: 'center',
511
- justifyContent: 'center'
512
- }}>
513
- <Typography level="title-lg" textColor="white">
514
- HEADER OVERFLOW
515
- </Typography>
516
- </Box>
517
- </AspectRatio>
518
- </CardOverflow>
519
- <CardContent sx={{
520
- textAlign: 'center'
521
- }}>
522
- <Typography level="title-md">카드 제목</Typography>
523
- <Typography level="body-sm">
524
- CardOverflow를 사용하면 카드의 패딩을 무시하고 전체 너비를 활용할 수 있습니다.
525
- </Typography>
526
- </CardContent>
527
- <CardOverflow variant="plain" sx={{
528
- bgcolor: 'warning.50'
529
- }}>
530
- <Divider inset="context" />
531
- <CardContent sx={{
532
- py: 1.5
533
- }}>
534
- <Typography level="body-xs" textAlign="center" color="warning">
535
- 영역도 CardOverflow로 만들어졌습니다
536
- </Typography>
537
- </CardContent>
538
- </CardOverflow>
539
- </Card>
540
- </Box>
541
- </Stack>
576
+ <Box>
577
+ <Typography
578
+ level="body-sm"
579
+ sx={{
580
+ mb: 2,
581
+ textAlign: "center"
582
+ }}
583
+ >
584
+ 일반 Card (패딩 있음)
585
+ </Typography>
586
+ <Card
587
+ variant="outlined"
588
+ sx={{
589
+ width: 260
590
+ }}
591
+ >
592
+ <CardContent
593
+ sx={{
594
+ bgcolor: "background.level1"
595
+ }}
596
+ >
597
+ <AspectRatio
598
+ ratio="16/9"
599
+ sx={{
600
+ borderRadius: "xs"
601
+ }}
602
+ >
603
+ <img
604
+ src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=520"
605
+ loading="lazy"
606
+ alt="Profile"
607
+ />
608
+ </AspectRatio>
609
+ </CardContent>
610
+ <CardContent>
611
+ <Typography level="title-md">John Doe</Typography>
612
+ <Typography level="body-sm">Software Engineer</Typography>
613
+ </CardContent>
614
+ <CardActions>
615
+ <Button size="sm" variant="soft">
616
+ 팔로우
617
+ </Button>
618
+ <Button size="sm" variant="solid">
619
+ 메시지
620
+ </Button>
621
+ </CardActions>
622
+ </Card>
623
+ </Box>
624
+
625
+ <Box>
626
+ <Typography
627
+ level="body-sm"
628
+ sx={{
629
+ mb: 2,
630
+ textAlign: "center"
631
+ }}
632
+ >
633
+ CardOverflow 사용 (패딩 무시)
634
+ </Typography>
635
+ <Card
636
+ variant="outlined"
637
+ sx={{
638
+ width: 260
639
+ }}
640
+ >
641
+ <CardOverflow>
642
+ <AspectRatio ratio="16/9">
643
+ <img
644
+ src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=520"
645
+ loading="lazy"
646
+ alt="Profile"
647
+ />
648
+ </AspectRatio>
649
+ </CardOverflow>
650
+ <CardContent>
651
+ <Typography level="title-md">John Doe</Typography>
652
+ <Typography level="body-sm">Software Engineer</Typography>
653
+ </CardContent>
654
+ <CardOverflow
655
+ variant="soft"
656
+ sx={{
657
+ bgcolor: "background.level1"
658
+ }}
659
+ >
660
+ <CardActions buttonFlex={1}>
661
+ <Button size="sm" variant="soft">
662
+ 팔로우
663
+ </Button>
664
+ <Button size="sm" variant="solid">
665
+ 메시지
666
+ </Button>
667
+ </CardActions>
668
+ </CardOverflow>
669
+ </Card>
670
+ </Box>
671
+
672
+ <Box>
673
+ <Typography
674
+ level="body-sm"
675
+ sx={{
676
+ mb: 2,
677
+ textAlign: "center"
678
+ }}
679
+ >
680
+ 다양한 CardOverflow 활용
681
+ </Typography>
682
+ <Card
683
+ variant="outlined"
684
+ sx={{
685
+ width: 260
686
+ }}
687
+ >
688
+ <CardOverflow>
689
+ <AspectRatio ratio="3">
690
+ <Box
691
+ sx={{
692
+ background: "linear-gradient(45deg, #2196F3 30%, #21CBF3 90%)",
693
+ display: "flex",
694
+ alignItems: "center",
695
+ justifyContent: "center"
696
+ }}
697
+ >
698
+ <Typography level="title-lg" textColor="white">
699
+ HEADER OVERFLOW
700
+ </Typography>
701
+ </Box>
702
+ </AspectRatio>
703
+ </CardOverflow>
704
+ <CardContent
705
+ sx={{
706
+ textAlign: "center"
707
+ }}
708
+ >
709
+ <Typography level="title-md">카드 제목</Typography>
710
+ <Typography level="body-sm">
711
+ CardOverflow를 사용하면 카드의 패딩을 무시하고 전체 너비를 활용할 수 있습니다.
712
+ </Typography>
713
+ </CardContent>
714
+ <CardOverflow
715
+ variant="plain"
716
+ sx={{
717
+ bgcolor: "warning.50"
718
+ }}
719
+ >
720
+ <Divider inset="context" />
721
+ <CardContent
722
+ sx={{
723
+ py: 1.5
724
+ }}
725
+ >
726
+ <Typography level="body-xs" textAlign="center" color="warning">
727
+ 이 영역도 CardOverflow로 만들어졌습니다
728
+ </Typography>
729
+ </CardContent>
730
+ </CardOverflow>
731
+ </Card>
732
+ </Box>
733
+ </Stack>
542
734
  ```
543
735
 
544
736
  ```tsx
@@ -558,36 +750,45 @@ Clickable cards with hover effects using CSS transitions.
558
750
 
559
751
  ```tsx
560
752
  <Stack direction="row" spacing={2} flexWrap="wrap">
561
- <Card variant="outlined" sx={{
562
- width: 320,
563
- cursor: 'pointer',
564
- transition: 'box-shadow 0.2s, border-color 0.2s',
565
- '&:hover': {
566
- boxShadow: 'md',
567
- borderColor: 'primary.outlinedHoverBorder'
568
- }
569
- }}>
570
- <CardContent>
571
- <Typography level="title-md">클릭 가능한 카드</Typography>
572
- <Typography level="body-sm">이 카드를 클릭하면 액션이 실행됩니다. 호버 효과도 확인해보세요.</Typography>
573
- </CardContent>
574
- </Card>
753
+ <Card
754
+ variant="outlined"
755
+ sx={{
756
+ width: 320,
757
+ cursor: "pointer",
758
+ transition: "box-shadow 0.2s, border-color 0.2s",
759
+ "&:hover": {
760
+ boxShadow: "md",
761
+ borderColor: "primary.outlinedHoverBorder"
762
+ }
763
+ }}
764
+ >
765
+ <CardContent>
766
+ <Typography level="title-md">클릭 가능한 카드</Typography>
767
+ <Typography level="body-sm">
768
+ 이 카드를 클릭하면 액션이 실행됩니다. 호버 효과도 확인해보세요.
769
+ </Typography>
770
+ </CardContent>
771
+ </Card>
575
772
 
576
- <Card variant="soft" color="primary" sx={{
577
- width: 320,
578
- cursor: 'pointer',
579
- transition: 'transform 0.2s, box-shadow 0.2s',
580
- '&:hover': {
581
- transform: 'translateY(-2px)',
582
- boxShadow: 'md'
583
- }
584
- }}>
585
- <CardContent>
586
- <Typography level="title-md">호버 애니메이션</Typography>
587
- <Typography level="body-sm">마우스를 올리면 카드가 살짝 올라갑니다.</Typography>
588
- </CardContent>
589
- </Card>
590
- </Stack>
773
+ <Card
774
+ variant="soft"
775
+ color="primary"
776
+ sx={{
777
+ width: 320,
778
+ cursor: "pointer",
779
+ transition: "transform 0.2s, box-shadow 0.2s",
780
+ "&:hover": {
781
+ transform: "translateY(-2px)",
782
+ boxShadow: "md"
783
+ }
784
+ }}
785
+ >
786
+ <CardContent>
787
+ <Typography level="title-md">호버 애니메이션</Typography>
788
+ <Typography level="body-sm">마우스를 올리면 카드가 살짝 올라갑니다.</Typography>
789
+ </CardContent>
790
+ </Card>
791
+ </Stack>
591
792
  ```
592
793
 
593
794
  ## Media Cards
@@ -596,93 +797,145 @@ Product and food cards combining `CardOverflow`, `CardContent`, and `CardActions
596
797
 
597
798
  ```tsx
598
799
  <Stack direction="row" spacing={2} flexWrap="wrap">
599
- <Card sx={{
600
- width: 320,
601
- boxShadow: 'lg'
602
- }}>
603
- <CardOverflow>
604
- <AspectRatio sx={{
605
- minWidth: 200
606
- }}>
607
- <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=640" loading="lazy" alt="Shoes" />
608
- </AspectRatio>
609
- </CardOverflow>
610
- <CardContent>
611
- <Typography level="title-lg">운동화</Typography>
612
- <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
613
- <Typography level="title-lg" color="primary" sx={{
614
- mt: 0.5
615
- }}>
616
- ₩129,000
617
- </Typography>
618
- </CardContent>
619
- <CardOverflow>
620
- <Divider inset="context" />
621
- <CardContent orientation="horizontal" sx={{
622
- justifyContent: 'space-between'
623
- }}>
624
- <Typography level="body-xs" color="neutral">무료배송</Typography>
625
- <Typography level="body-xs" color="neutral">1,204 리뷰</Typography>
626
- </CardContent>
627
- </CardOverflow>
628
- </Card>
800
+ <Card
801
+ sx={{
802
+ width: 320,
803
+ boxShadow: "lg"
804
+ }}
805
+ >
806
+ <CardOverflow>
807
+ <AspectRatio
808
+ sx={{
809
+ minWidth: 200
810
+ }}
811
+ >
812
+ <img
813
+ src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=640"
814
+ loading="lazy"
815
+ alt="Shoes"
816
+ />
817
+ </AspectRatio>
818
+ </CardOverflow>
819
+ <CardContent>
820
+ <Typography level="title-lg">운동화</Typography>
821
+ <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
822
+ <Typography
823
+ level="title-lg"
824
+ color="primary"
825
+ sx={{
826
+ mt: 0.5
827
+ }}
828
+ >
829
+ ₩129,000
830
+ </Typography>
831
+ </CardContent>
832
+ <CardOverflow>
833
+ <Divider inset="context" />
834
+ <CardContent
835
+ orientation="horizontal"
836
+ sx={{
837
+ justifyContent: "space-between"
838
+ }}
839
+ >
840
+ <Typography level="body-xs" color="neutral">
841
+ 무료배송
842
+ </Typography>
843
+ <Typography level="body-xs" color="neutral">
844
+ 1,204 리뷰
845
+ </Typography>
846
+ </CardContent>
847
+ </CardOverflow>
848
+ </Card>
629
849
 
630
- <Card sx={{
631
- width: 320,
632
- boxShadow: 'lg'
633
- }}>
634
- <CardOverflow>
635
- <AspectRatio sx={{
636
- minWidth: 200
637
- }}>
638
- <img src="https://images.unsplash.com/photo-1551963831-b3b1ca40c98e?auto=format&fit=crop&w=640" loading="lazy" alt="Breakfast" />
639
- </AspectRatio>
640
- <IconButton variant="solid" color="danger" size="md" sx={{
641
- position: 'absolute',
642
- zIndex: 2,
643
- borderRadius: '50%',
644
- right: '1rem',
645
- bottom: 0,
646
- transform: 'translateY(50%)'
647
- }}>
648
- <FavoriteIcon />
649
- </IconButton>
650
- </CardOverflow>
651
- <CardContent>
652
- <Stack direction="row" justifyContent="space-between" alignItems="center">
653
- <Typography level="title-lg">맛있는 아침식사</Typography>
654
- <IconButton variant="plain" color="neutral" size="sm">
655
- <MoreVertIcon />
656
- </IconButton>
850
+ <Card
851
+ sx={{
852
+ width: 320,
853
+ boxShadow: "lg"
854
+ }}
855
+ >
856
+ <CardOverflow>
857
+ <AspectRatio
858
+ sx={{
859
+ minWidth: 200
860
+ }}
861
+ >
862
+ <img
863
+ src="https://images.unsplash.com/photo-1551963831-b3b1ca40c98e?auto=format&fit=crop&w=640"
864
+ loading="lazy"
865
+ alt="Breakfast"
866
+ />
867
+ </AspectRatio>
868
+ <IconButton
869
+ variant="solid"
870
+ color="danger"
871
+ size="md"
872
+ sx={{
873
+ position: "absolute",
874
+ zIndex: 2,
875
+ borderRadius: "50%",
876
+ right: "1rem",
877
+ bottom: 0,
878
+ transform: "translateY(50%)"
879
+ }}
880
+ >
881
+ <FavoriteIcon />
882
+ </IconButton>
883
+ </CardOverflow>
884
+ <CardContent>
885
+ <Stack direction="row" justifyContent="space-between" alignItems="center">
886
+ <Typography level="title-lg">맛있는 아침식사</Typography>
887
+ <IconButton variant="plain" color="neutral" size="sm">
888
+ <MoreVertIcon />
889
+ </IconButton>
890
+ </Stack>
891
+ <Typography level="body-xs" startDecorator={<LocationOnIcon />}>
892
+ 서울, 한국
893
+ </Typography>
894
+ <Typography
895
+ level="body-sm"
896
+ sx={{
897
+ mt: 0.5
898
+ }}
899
+ >
900
+ 건강하고 맛있는 아침 식사로 하루를 시작해보세요.
901
+ </Typography>
902
+ </CardContent>
903
+ <CardOverflow>
904
+ <Divider inset="context" />
905
+ <CardContent
906
+ orientation="horizontal"
907
+ sx={{
908
+ justifyContent: "space-between"
909
+ }}
910
+ >
911
+ <Typography
912
+ level="body-xs"
913
+ startDecorator={
914
+ <FavoriteIcon
915
+ sx={{
916
+ fontSize: 16
917
+ }}
918
+ />
919
+ }
920
+ >
921
+ 1.2K
922
+ </Typography>
923
+ <Typography
924
+ level="body-xs"
925
+ startDecorator={
926
+ <ShareIcon
927
+ sx={{
928
+ fontSize: 16
929
+ }}
930
+ />
931
+ }
932
+ >
933
+ 공유
934
+ </Typography>
935
+ </CardContent>
936
+ </CardOverflow>
937
+ </Card>
657
938
  </Stack>
658
- <Typography level="body-xs" startDecorator={<LocationOnIcon />}>
659
- 서울, 한국
660
- </Typography>
661
- <Typography level="body-sm" sx={{
662
- mt: 0.5
663
- }}>
664
- 건강하고 맛있는 아침 식사로 하루를 시작해보세요.
665
- </Typography>
666
- </CardContent>
667
- <CardOverflow>
668
- <Divider inset="context" />
669
- <CardContent orientation="horizontal" sx={{
670
- justifyContent: 'space-between'
671
- }}>
672
- <Typography level="body-xs" startDecorator={<FavoriteIcon sx={{
673
- fontSize: 16
674
- }} />}>
675
- 1.2K
676
- </Typography>
677
- <Typography level="body-xs" startDecorator={<ShareIcon sx={{
678
- fontSize: 16
679
- }} />}>
680
- 공유
681
- </Typography>
682
- </CardContent>
683
- </CardOverflow>
684
- </Card>
685
- </Stack>
686
939
  ```
687
940
 
688
941
  ## Complex Layout
@@ -690,227 +943,359 @@ Product and food cards combining `CardOverflow`, `CardContent`, and `CardActions
690
943
  A social-media-style card with avatar, text, inline image, and engagement buttons.
691
944
 
692
945
  ```tsx
693
- <Card sx={{
694
- width: 400,
695
- maxWidth: '100%'
696
- }}>
697
- <CardContent>
698
- <Stack direction="row" spacing={1.5} alignItems="center" sx={{
699
- mb: 1.5
700
- }}>
701
- <Avatar size="sm" src="https://i.pravatar.cc/40?img=1" />
702
- <Box sx={{
703
- flex: 1
704
- }}>
705
- <Typography level="title-sm">김철수</Typography>
706
- <Typography level="body-xs" color="neutral">5분 전</Typography>
707
- </Box>
708
- <IconButton variant="plain" color="neutral" size="sm">
709
- <MoreVertIcon />
710
- </IconButton>
711
- </Stack>
712
- <Typography level="body-md">
713
- 오늘 정말 좋은 하루였습니다! 새로운 프로젝트를 시작했는데 너무 흥미진진해요. 팀원들과의 협업도 잘 되고 있고,
714
- 앞으로가 기대됩니다.
715
- </Typography>
716
- </CardContent>
717
- <CardOverflow>
718
- <AspectRatio ratio="2">
719
- <img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=800" loading="lazy" alt="Team work" />
720
- </AspectRatio>
721
- </CardOverflow>
722
- <CardContent>
723
- <Stack direction="row" spacing={1} alignItems="center">
724
- <IconButton variant="plain" color="neutral" size="sm">
725
- <FavoriteIcon />
726
- </IconButton>
727
- <Typography level="body-xs">12</Typography>
728
- <IconButton variant="plain" color="neutral" size="sm">
729
- <ShareIcon />
730
- </IconButton>
731
- <Typography level="body-xs" sx={{
732
- ml: 'auto'
733
- }} color="neutral">댓글 3개</Typography>
734
- </Stack>
735
- </CardContent>
736
- </Card>
946
+ <Card
947
+ sx={{
948
+ width: 400,
949
+ maxWidth: "100%"
950
+ }}
951
+ >
952
+ <CardContent>
953
+ <Stack
954
+ direction="row"
955
+ spacing={1.5}
956
+ alignItems="center"
957
+ sx={{
958
+ mb: 1.5
959
+ }}
960
+ >
961
+ <Avatar size="sm" src="https://i.pravatar.cc/40?img=1" />
962
+ <Box
963
+ sx={{
964
+ flex: 1
965
+ }}
966
+ >
967
+ <Typography level="title-sm">김철수</Typography>
968
+ <Typography level="body-xs" color="neutral">
969
+ 5분 전
970
+ </Typography>
971
+ </Box>
972
+ <IconButton variant="plain" color="neutral" size="sm">
973
+ <MoreVertIcon />
974
+ </IconButton>
975
+ </Stack>
976
+ <Typography level="body-md">
977
+ 오늘 정말 좋은 하루였습니다! 새로운 프로젝트를 시작했는데 너무 흥미진진해요. 팀원들과의
978
+ 협업도 잘 되고 있고, 앞으로가 기대됩니다.
979
+ </Typography>
980
+ </CardContent>
981
+ <CardOverflow>
982
+ <AspectRatio ratio="2">
983
+ <img
984
+ src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=800"
985
+ loading="lazy"
986
+ alt="Team work"
987
+ />
988
+ </AspectRatio>
989
+ </CardOverflow>
990
+ <CardContent>
991
+ <Stack direction="row" spacing={1} alignItems="center">
992
+ <IconButton variant="plain" color="neutral" size="sm">
993
+ <FavoriteIcon />
994
+ </IconButton>
995
+ <Typography level="body-xs">12</Typography>
996
+ <IconButton variant="plain" color="neutral" size="sm">
997
+ <ShareIcon />
998
+ </IconButton>
999
+ <Typography
1000
+ level="body-xs"
1001
+ sx={{
1002
+ ml: "auto"
1003
+ }}
1004
+ color="neutral"
1005
+ >
1006
+ 댓글 3개
1007
+ </Typography>
1008
+ </Stack>
1009
+ </CardContent>
1010
+ </Card>
737
1011
  ```
738
1012
 
739
1013
  ## Product Card
740
1014
 
741
1015
  ```tsx
742
- <Card sx={{
743
- width: 320,
744
- maxWidth: '100%',
745
- boxShadow: 'lg'
746
- }}>
747
- <CardOverflow>
748
- <AspectRatio sx={{
749
- minWidth: 200
750
- }}>
751
- <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=640" loading="lazy" alt="Shoes" />
752
- </AspectRatio>
753
- </CardOverflow>
754
- <CardContent>
755
- <Stack direction="row" justifyContent="space-between" alignItems="flex-start">
756
- <Typography level="title-lg">운동화</Typography>
757
- <IconButton variant="plain" color="neutral" size="sm">
758
- <BookmarkAddIcon />
759
- </IconButton>
760
- </Stack>
761
- <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
762
- <Typography level="title-lg" color="primary" sx={{
763
- mt: 1
764
- }}>
765
- ₩129,000
766
- </Typography>
767
- </CardContent>
768
- <CardOverflow>
769
- <Button variant="solid" color="primary" size="lg" sx={{
770
- borderRadius: 0
771
- }}>
772
- 구매하기
773
- </Button>
774
- </CardOverflow>
775
- </Card>
1016
+ <Card
1017
+ sx={{
1018
+ width: 320,
1019
+ maxWidth: "100%",
1020
+ boxShadow: "lg"
1021
+ }}
1022
+ >
1023
+ <CardOverflow>
1024
+ <AspectRatio
1025
+ sx={{
1026
+ minWidth: 200
1027
+ }}
1028
+ >
1029
+ <img
1030
+ src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?auto=format&fit=crop&w=640"
1031
+ loading="lazy"
1032
+ alt="Shoes"
1033
+ />
1034
+ </AspectRatio>
1035
+ </CardOverflow>
1036
+ <CardContent>
1037
+ <Stack direction="row" justifyContent="space-between" alignItems="flex-start">
1038
+ <Typography level="title-lg">운동화</Typography>
1039
+ <IconButton variant="plain" color="neutral" size="sm">
1040
+ <BookmarkAddIcon />
1041
+ </IconButton>
1042
+ </Stack>
1043
+ <Typography level="body-sm">편안하고 스타일리시한 운동화입니다.</Typography>
1044
+ <Typography
1045
+ level="title-lg"
1046
+ color="primary"
1047
+ sx={{
1048
+ mt: 1
1049
+ }}
1050
+ >
1051
+ ₩129,000
1052
+ </Typography>
1053
+ </CardContent>
1054
+ <CardOverflow>
1055
+ <Button
1056
+ variant="solid"
1057
+ color="primary"
1058
+ size="lg"
1059
+ sx={{
1060
+ borderRadius: 0
1061
+ }}
1062
+ >
1063
+ 구매하기
1064
+ </Button>
1065
+ </CardOverflow>
1066
+ </Card>
776
1067
  ```
777
1068
 
778
1069
  ## Profile Card
779
1070
 
780
1071
  ```tsx
781
- <Card sx={{
782
- width: 300,
783
- maxWidth: '100%',
784
- boxShadow: 'lg'
785
- }}>
786
- <CardOverflow>
787
- <AspectRatio ratio="3">
788
- <Box sx={{
789
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
790
- }} />
791
- </AspectRatio>
792
- </CardOverflow>
793
- <CardContent sx={{
794
- alignItems: 'center',
795
- textAlign: 'center',
796
- mt: -5
797
- }}>
798
- <Avatar size="lg" src="https://i.pravatar.cc/80?img=3" sx={{
799
- '--Avatar-size': '64px',
800
- border: '3px solid',
801
- borderColor: 'background.surface'
802
- }} />
803
- <Typography level="title-lg" sx={{
804
- mt: 1
805
- }}>Jane Smith</Typography>
806
- <Typography level="body-sm" color="neutral">Product Designer</Typography>
807
- <Stack direction="row" spacing={3} sx={{
808
- mt: 1
809
- }}>
810
- <Box sx={{
811
- textAlign: 'center'
812
- }}>
813
- <Typography level="title-sm">128</Typography>
814
- <Typography level="body-xs" color="neutral">게시물</Typography>
815
- </Box>
816
- <Box sx={{
817
- textAlign: 'center'
818
- }}>
819
- <Typography level="title-sm">1.2K</Typography>
820
- <Typography level="body-xs" color="neutral">팔로워</Typography>
821
- </Box>
822
- <Box sx={{
823
- textAlign: 'center'
824
- }}>
825
- <Typography level="title-sm">342</Typography>
826
- <Typography level="body-xs" color="neutral">팔로잉</Typography>
827
- </Box>
828
- </Stack>
829
- </CardContent>
830
- <CardActions buttonFlex={1}>
831
- <Button size="sm" variant="soft">팔로우</Button>
832
- <Button size="sm" variant="solid">메시지</Button>
833
- </CardActions>
834
- </Card>
1072
+ <Card
1073
+ sx={{
1074
+ width: 300,
1075
+ maxWidth: "100%",
1076
+ boxShadow: "lg"
1077
+ }}
1078
+ >
1079
+ <CardOverflow>
1080
+ <AspectRatio ratio="3">
1081
+ <Box
1082
+ sx={{
1083
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
1084
+ }}
1085
+ />
1086
+ </AspectRatio>
1087
+ </CardOverflow>
1088
+ <CardContent
1089
+ sx={{
1090
+ alignItems: "center",
1091
+ textAlign: "center",
1092
+ mt: -5
1093
+ }}
1094
+ >
1095
+ <Avatar
1096
+ size="lg"
1097
+ src="https://i.pravatar.cc/80?img=3"
1098
+ sx={{
1099
+ "--Avatar-size": "64px",
1100
+ border: "3px solid",
1101
+ borderColor: "background.surface"
1102
+ }}
1103
+ />
1104
+ <Typography
1105
+ level="title-lg"
1106
+ sx={{
1107
+ mt: 1
1108
+ }}
1109
+ >
1110
+ Jane Smith
1111
+ </Typography>
1112
+ <Typography level="body-sm" color="neutral">
1113
+ Product Designer
1114
+ </Typography>
1115
+ <Stack
1116
+ direction="row"
1117
+ spacing={3}
1118
+ sx={{
1119
+ mt: 1
1120
+ }}
1121
+ >
1122
+ <Box
1123
+ sx={{
1124
+ textAlign: "center"
1125
+ }}
1126
+ >
1127
+ <Typography level="title-sm">128</Typography>
1128
+ <Typography level="body-xs" color="neutral">
1129
+ 게시물
1130
+ </Typography>
1131
+ </Box>
1132
+ <Box
1133
+ sx={{
1134
+ textAlign: "center"
1135
+ }}
1136
+ >
1137
+ <Typography level="title-sm">1.2K</Typography>
1138
+ <Typography level="body-xs" color="neutral">
1139
+ 팔로워
1140
+ </Typography>
1141
+ </Box>
1142
+ <Box
1143
+ sx={{
1144
+ textAlign: "center"
1145
+ }}
1146
+ >
1147
+ <Typography level="title-sm">342</Typography>
1148
+ <Typography level="body-xs" color="neutral">
1149
+ 팔로잉
1150
+ </Typography>
1151
+ </Box>
1152
+ </Stack>
1153
+ </CardContent>
1154
+ <CardActions buttonFlex={1}>
1155
+ <Button size="sm" variant="soft">
1156
+ 팔로우
1157
+ </Button>
1158
+ <Button size="sm" variant="solid">
1159
+ 메시지
1160
+ </Button>
1161
+ </CardActions>
1162
+ </Card>
835
1163
  ```
836
1164
 
837
1165
  ## News Card
838
1166
 
839
1167
  ```tsx
840
- <Card sx={{
841
- width: 400,
842
- maxWidth: '100%'
843
- }}>
844
- <CardOverflow>
845
- <AspectRatio ratio="2">
846
- <img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=800" loading="lazy" alt="Tech news" />
847
- </AspectRatio>
848
- </CardOverflow>
849
- <CardContent>
850
- <Stack direction="row" spacing={1} sx={{
851
- mb: 0.5
852
- }}>
853
- <Chip variant="soft" color="primary" size="sm">Tech</Chip>
854
- <Typography level="body-xs" color="neutral" sx={{
855
- alignSelf: 'center'
856
- }}>2 hours ago</Typography>
857
- </Stack>
858
- <Typography level="title-md">
859
- <Link overlay underline="none" color="neutral" href="#" onClick={e => e.preventDefault()}>
860
- 새로운 프로젝트 시작
861
- </Link>
862
- </Typography>
863
- <Typography level="body-sm">
864
- 팀원들과 협업하며 새로운 기술을 도입한 프로젝트가 성공적으로 시작되었습니다.
865
- </Typography>
866
- </CardContent>
867
- </Card>
1168
+ <Card
1169
+ sx={{
1170
+ width: 400,
1171
+ maxWidth: "100%"
1172
+ }}
1173
+ >
1174
+ <CardOverflow>
1175
+ <AspectRatio ratio="2">
1176
+ <img
1177
+ src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=800"
1178
+ loading="lazy"
1179
+ alt="Tech news"
1180
+ />
1181
+ </AspectRatio>
1182
+ </CardOverflow>
1183
+ <CardContent>
1184
+ <Stack
1185
+ direction="row"
1186
+ spacing={1}
1187
+ sx={{
1188
+ mb: 0.5
1189
+ }}
1190
+ >
1191
+ <Chip variant="soft" color="primary" size="sm">
1192
+ Tech
1193
+ </Chip>
1194
+ <Typography
1195
+ level="body-xs"
1196
+ color="neutral"
1197
+ sx={{
1198
+ alignSelf: "center"
1199
+ }}
1200
+ >
1201
+ 2 hours ago
1202
+ </Typography>
1203
+ </Stack>
1204
+ <Typography level="title-md">
1205
+ <Link overlay underline="none" color="neutral" href="#" onClick={(e) => e.preventDefault()}>
1206
+ 새로운 프로젝트 시작
1207
+ </Link>
1208
+ </Typography>
1209
+ <Typography level="body-sm">
1210
+ 팀원들과 협업하며 새로운 기술을 도입한 프로젝트가 성공적으로 시작되었습니다.
1211
+ </Typography>
1212
+ </CardContent>
1213
+ </Card>
868
1214
  ```
869
1215
 
870
1216
  ## Dashboard Widget
871
1217
 
872
1218
  ```tsx
873
1219
  <Stack direction="row" spacing={2} flexWrap="wrap">
874
- <Card variant="soft" color="primary" sx={{
875
- width: 200
876
- }}>
877
- <CardContent>
878
- <Typography level="body-sm">총 사용자</Typography>
879
- <Typography level="h2">1,234</Typography>
880
- <Chip variant="soft" color="success" size="sm" startDecorator={<TrendingUpIcon sx={{
881
- fontSize: 16
882
- }} />}>
883
- +12%
884
- </Chip>
885
- </CardContent>
886
- </Card>
887
- <Card variant="soft" color="success" sx={{
888
- width: 200
889
- }}>
890
- <CardContent>
891
- <Typography level="body-sm">완료된 주문</Typography>
892
- <Typography level="h2">856</Typography>
893
- <Chip variant="soft" color="success" size="sm" startDecorator={<TrendingUpIcon sx={{
894
- fontSize: 16
895
- }} />}>
896
- +5%
897
- </Chip>
898
- </CardContent>
899
- </Card>
900
- <Card variant="soft" color="warning" sx={{
901
- width: 200
902
- }}>
903
- <CardContent>
904
- <Typography level="body-sm">대기 중</Typography>
905
- <Typography level="h2">42</Typography>
906
- <Chip variant="soft" color="danger" size="sm" startDecorator={<TrendingDownIcon sx={{
907
- fontSize: 16
908
- }} />}>
909
- -3%
910
- </Chip>
911
- </CardContent>
912
- </Card>
913
- </Stack>
1220
+ <Card
1221
+ variant="soft"
1222
+ color="primary"
1223
+ sx={{
1224
+ width: 200
1225
+ }}
1226
+ >
1227
+ <CardContent>
1228
+ <Typography level="body-sm">총 사용자</Typography>
1229
+ <Typography level="h2">1,234</Typography>
1230
+ <Chip
1231
+ variant="soft"
1232
+ color="success"
1233
+ size="sm"
1234
+ startDecorator={
1235
+ <TrendingUpIcon
1236
+ sx={{
1237
+ fontSize: 16
1238
+ }}
1239
+ />
1240
+ }
1241
+ >
1242
+ +12%
1243
+ </Chip>
1244
+ </CardContent>
1245
+ </Card>
1246
+ <Card
1247
+ variant="soft"
1248
+ color="success"
1249
+ sx={{
1250
+ width: 200
1251
+ }}
1252
+ >
1253
+ <CardContent>
1254
+ <Typography level="body-sm">완료된 주문</Typography>
1255
+ <Typography level="h2">856</Typography>
1256
+ <Chip
1257
+ variant="soft"
1258
+ color="success"
1259
+ size="sm"
1260
+ startDecorator={
1261
+ <TrendingUpIcon
1262
+ sx={{
1263
+ fontSize: 16
1264
+ }}
1265
+ />
1266
+ }
1267
+ >
1268
+ +5%
1269
+ </Chip>
1270
+ </CardContent>
1271
+ </Card>
1272
+ <Card
1273
+ variant="soft"
1274
+ color="warning"
1275
+ sx={{
1276
+ width: 200
1277
+ }}
1278
+ >
1279
+ <CardContent>
1280
+ <Typography level="body-sm">대기 중</Typography>
1281
+ <Typography level="h2">42</Typography>
1282
+ <Chip
1283
+ variant="soft"
1284
+ color="danger"
1285
+ size="sm"
1286
+ startDecorator={
1287
+ <TrendingDownIcon
1288
+ sx={{
1289
+ fontSize: 16
1290
+ }}
1291
+ />
1292
+ }
1293
+ >
1294
+ -3%
1295
+ </Chip>
1296
+ </CardContent>
1297
+ </Card>
1298
+ </Stack>
914
1299
  ```
915
1300
 
916
1301
  ## Props and Customization