@ceed/cds 1.34.1 → 1.35.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 (118) hide show
  1. package/dist/components/Accordions/Accordions.d.ts +1 -0
  2. package/dist/components/Alert/Alert.d.ts +5 -5
  3. package/dist/components/Autocomplete/Autocomplete.d.ts +2 -2
  4. package/dist/components/Avatar/Avatar.d.ts +7 -17
  5. package/dist/components/Box/Box.d.ts +1 -0
  6. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +6 -5
  7. package/dist/components/Button/Button.d.ts +3 -2
  8. package/dist/components/Calendar/Calendar.d.ts +1 -0
  9. package/dist/components/Card/Card.d.ts +1 -0
  10. package/dist/components/Checkbox/Checkbox.d.ts +1 -0
  11. package/dist/components/Chip/Chip.d.ts +1 -0
  12. package/dist/components/Container/Container.d.ts +6 -1
  13. package/dist/components/CurrencyInput/CurrencyInput.d.ts +1 -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/Drawer/Drawer.d.ts +1 -0
  20. package/dist/components/Dropdown/Dropdown.d.ts +28 -1
  21. package/dist/components/FormControl/FormControl.d.ts +1 -0
  22. package/dist/components/FormHelperText/FormHelperText.d.ts +1 -0
  23. package/dist/components/FormLabel/FormLabel.d.ts +1 -0
  24. package/dist/components/Grid/Grid.d.ts +1 -0
  25. package/dist/components/IconButton/IconButton.d.ts +3 -2
  26. package/dist/components/IconMenuButton/IconMenuButton.d.ts +7 -6
  27. package/dist/components/InfoSign/InfoSign.d.ts +3 -2
  28. package/dist/components/Input/Input.d.ts +8 -22
  29. package/dist/components/InsetDrawer/InsetDrawer.d.ts +1 -0
  30. package/dist/components/Markdown/Markdown.d.ts +9 -24
  31. package/dist/components/Menu/Menu.d.ts +2 -1
  32. package/dist/components/MenuButton/MenuButton.d.ts +10 -8
  33. package/dist/components/Modal/Modal.d.ts +4 -2
  34. package/dist/components/NavigationGroup/NavigationGroup.d.ts +3 -2
  35. package/dist/components/NavigationItem/NavigationItem.d.ts +3 -2
  36. package/dist/components/Navigator/Navigator.d.ts +5 -4
  37. package/dist/components/Pagination/Pagination.d.ts +1 -1
  38. package/dist/components/Radio/Radio.d.ts +1 -0
  39. package/dist/components/RadioList/RadioList.d.ts +3 -2
  40. package/dist/components/Select/Select.d.ts +12 -10
  41. package/dist/components/Sheet/Sheet.d.ts +1 -0
  42. package/dist/components/Stack/Stack.d.ts +1 -0
  43. package/dist/components/Stepper/Stepper.d.ts +2 -1
  44. package/dist/components/Switch/Switch.d.ts +1 -0
  45. package/dist/components/Table/Table.d.ts +7 -5
  46. package/dist/components/Tabs/Tabs.d.ts +1 -0
  47. package/dist/components/Textarea/Textarea.d.ts +8 -20
  48. package/dist/components/Tooltip/Tooltip.d.ts +1 -0
  49. package/dist/components/Typography/Typography.d.ts +1 -0
  50. package/dist/components/Uploader/Uploader.d.ts +18 -17
  51. package/dist/components/data-display/Avatar.md +60 -72
  52. package/dist/components/data-display/Badge.md +197 -181
  53. package/dist/components/data-display/Chip.md +164 -142
  54. package/dist/components/data-display/DataTable.md +843 -338
  55. package/dist/components/data-display/InfoSign.md +1 -3
  56. package/dist/components/data-display/Markdown.md +93 -125
  57. package/dist/components/data-display/Table.md +1453 -1007
  58. package/dist/components/data-display/Typography.md +113 -116
  59. package/dist/components/feedback/Alert.md +80 -86
  60. package/dist/components/feedback/CircularProgress.md +32 -36
  61. package/dist/components/feedback/Dialog.md +25 -17
  62. package/dist/components/feedback/Modal.md +296 -264
  63. package/dist/components/feedback/Skeleton.md +125 -89
  64. package/dist/components/index.d.ts +62 -2
  65. package/dist/components/inputs/Autocomplete.md +191 -95
  66. package/dist/components/inputs/Button.md +83 -83
  67. package/dist/components/inputs/ButtonGroup.md +195 -185
  68. package/dist/components/inputs/Calendar.md +25 -28
  69. package/dist/components/inputs/Checkbox.md +11 -29
  70. package/dist/components/inputs/CurrencyInput.md +4 -4
  71. package/dist/components/inputs/DatePicker.md +229 -110
  72. package/dist/components/inputs/DateRangePicker.md +248 -137
  73. package/dist/components/inputs/FilterableCheckboxGroup.md +115 -55
  74. package/dist/components/inputs/FormControl.md +75 -69
  75. package/dist/components/inputs/IconButton.md +229 -205
  76. package/dist/components/inputs/Input.md +131 -98
  77. package/dist/components/inputs/MonthPicker.md +186 -84
  78. package/dist/components/inputs/MonthRangePicker.md +73 -49
  79. package/dist/components/inputs/PercentageInput.md +15 -31
  80. package/dist/components/inputs/RadioButton.md +320 -256
  81. package/dist/components/inputs/RadioList.md +66 -50
  82. package/dist/components/inputs/RadioTileGroup.md +287 -170
  83. package/dist/components/inputs/SearchBar.md +82 -60
  84. package/dist/components/inputs/Select.md +106 -95
  85. package/dist/components/inputs/Slider.md +153 -102
  86. package/dist/components/inputs/Switch.md +193 -138
  87. package/dist/components/inputs/Textarea.md +15 -20
  88. package/dist/components/inputs/Uploader/Uploader.md +68 -39
  89. package/dist/components/layout/Box.md +841 -662
  90. package/dist/components/layout/Container.md +3 -11
  91. package/dist/components/layout/Grid.md +480 -394
  92. package/dist/components/layout/Stack.md +739 -566
  93. package/dist/components/navigation/Breadcrumbs.md +4 -4
  94. package/dist/components/navigation/Drawer.md +34 -25
  95. package/dist/components/navigation/Dropdown.md +745 -408
  96. package/dist/components/navigation/IconMenuButton.md +14 -6
  97. package/dist/components/navigation/InsetDrawer.md +8 -13
  98. package/dist/components/navigation/Link.md +1 -2
  99. package/dist/components/navigation/Menu.md +623 -502
  100. package/dist/components/navigation/MenuButton.md +18 -10
  101. package/dist/components/navigation/NavigationGroup.md +19 -50
  102. package/dist/components/navigation/NavigationItem.md +6 -6
  103. package/dist/components/navigation/Navigator.md +26 -28
  104. package/dist/components/navigation/Pagination.md +86 -75
  105. package/dist/components/navigation/Stepper.md +2 -12
  106. package/dist/components/navigation/Tabs.md +48 -36
  107. package/dist/components/surfaces/Accordions.md +89 -172
  108. package/dist/components/surfaces/Card.md +1094 -709
  109. package/dist/components/surfaces/Divider.md +562 -412
  110. package/dist/components/surfaces/Sheet.md +700 -518
  111. package/dist/guides/ThemeProvider.md +8 -8
  112. package/dist/index.browser.js +4 -4
  113. package/dist/index.browser.js.map +4 -4
  114. package/dist/index.cjs +1059 -1032
  115. package/dist/index.d.ts +2 -1
  116. package/dist/index.js +705 -670
  117. package/framer/index.js +1 -1
  118. package/package.json +32 -35
@@ -7,20 +7,26 @@ Sheet is a foundational surface component that serves as a container for groupin
7
7
  Sheet is built on top of Joy UI's Sheet component and inherits all of its styling capabilities, including support for the `sx` prop for custom styling, responsive design tokens, and Framer Motion animation props.
8
8
 
9
9
  ```tsx
10
- <Sheet {...args} sx={{
11
- p: 3,
12
- maxWidth: 400,
13
- borderRadius: 'md'
14
- }}>
15
- <Typography level="title-md" sx={{
16
- mb: 2
17
- }}>
18
- Sheet 컴포넌트
19
- </Typography>
20
- <Typography level="body-md">
21
- 이것은 Sheet 컴포넌트의 기본 예제입니다. 다양한 콘텐츠를 담을 수 있는 표면을 제공합니다.
22
- </Typography>
23
- </Sheet>
10
+ <Sheet
11
+ {...args}
12
+ sx={{
13
+ p: 3,
14
+ maxWidth: 400,
15
+ borderRadius: "md"
16
+ }}
17
+ >
18
+ <Typography
19
+ level="title-md"
20
+ sx={{
21
+ mb: 2
22
+ }}
23
+ >
24
+ Sheet 컴포넌트
25
+ </Typography>
26
+ <Typography level="body-md">
27
+ 이것은 Sheet 컴포넌트의 기본 예제입니다. 다양한 콘텐츠를 담을 수 있는 표면을 제공합니다.
28
+ </Typography>
29
+ </Sheet>
24
30
  ```
25
31
 
26
32
  | Field | Description | Default |
@@ -37,9 +43,7 @@ function MyComponent() {
37
43
  return (
38
44
  <Sheet variant="outlined" sx={{ p: 3, borderRadius: 'md' }}>
39
45
  <Typography level="title-md">Sheet Title</Typography>
40
- <Typography level="body-md">
41
- Content goes inside the sheet.
42
- </Typography>
46
+ <Typography level="body-md">Content goes inside the sheet.</Typography>
43
47
  </Sheet>
44
48
  );
45
49
  }
@@ -50,68 +54,97 @@ function MyComponent() {
50
54
  Sheet supports four visual variants to convey different levels of emphasis.
51
55
 
52
56
  ```tsx
53
- <div style={{
54
- display: 'flex',
55
- gap: '2rem',
56
- flexWrap: 'wrap'
57
- }}>
58
- <Sheet variant="solid" sx={{
59
- p: 3,
60
- maxWidth: 250,
61
- borderRadius: 'md'
62
- }}>
63
- <Typography level="title-md" sx={{
64
- mb: 1,
65
- color: 'white'
66
- }}>
67
- Solid
68
- </Typography>
69
- <Typography level="body-sm" sx={{
70
- color: 'white'
71
- }}>
72
- 배경이 채워진 스타일
73
- </Typography>
74
- </Sheet>
75
-
76
- <Sheet variant="soft" sx={{
77
- p: 3,
78
- maxWidth: 250,
79
- borderRadius: 'md'
80
- }}>
81
- <Typography level="title-md" sx={{
82
- mb: 1
83
- }}>
84
- Soft
85
- </Typography>
86
- <Typography level="body-sm">부드러운 배경 스타일</Typography>
87
- </Sheet>
88
-
89
- <Sheet variant="outlined" sx={{
90
- p: 3,
91
- maxWidth: 250,
92
- borderRadius: 'md'
93
- }}>
94
- <Typography level="title-md" sx={{
95
- mb: 1
96
- }}>
97
- Outlined
98
- </Typography>
99
- <Typography level="body-sm">테두리가 있는 스타일</Typography>
100
- </Sheet>
101
-
102
- <Sheet variant="plain" sx={{
103
- p: 3,
104
- maxWidth: 250,
105
- borderRadius: 'md'
106
- }}>
107
- <Typography level="title-md" sx={{
108
- mb: 1
109
- }}>
110
- Plain
111
- </Typography>
112
- <Typography level="body-sm">배경이 없는 평면 스타일</Typography>
113
- </Sheet>
114
- </div>
57
+ <div
58
+ style={{
59
+ display: "flex",
60
+ gap: "2rem",
61
+ flexWrap: "wrap"
62
+ }}
63
+ >
64
+ <Sheet
65
+ variant="solid"
66
+ sx={{
67
+ p: 3,
68
+ maxWidth: 250,
69
+ borderRadius: "md"
70
+ }}
71
+ >
72
+ <Typography
73
+ level="title-md"
74
+ sx={{
75
+ mb: 1,
76
+ color: "white"
77
+ }}
78
+ >
79
+ Solid
80
+ </Typography>
81
+ <Typography
82
+ level="body-sm"
83
+ sx={{
84
+ color: "white"
85
+ }}
86
+ >
87
+ 배경이 채워진 스타일
88
+ </Typography>
89
+ </Sheet>
90
+
91
+ <Sheet
92
+ variant="soft"
93
+ sx={{
94
+ p: 3,
95
+ maxWidth: 250,
96
+ borderRadius: "md"
97
+ }}
98
+ >
99
+ <Typography
100
+ level="title-md"
101
+ sx={{
102
+ mb: 1
103
+ }}
104
+ >
105
+ Soft
106
+ </Typography>
107
+ <Typography level="body-sm">부드러운 배경 스타일</Typography>
108
+ </Sheet>
109
+
110
+ <Sheet
111
+ variant="outlined"
112
+ sx={{
113
+ p: 3,
114
+ maxWidth: 250,
115
+ borderRadius: "md"
116
+ }}
117
+ >
118
+ <Typography
119
+ level="title-md"
120
+ sx={{
121
+ mb: 1
122
+ }}
123
+ >
124
+ Outlined
125
+ </Typography>
126
+ <Typography level="body-sm">테두리가 있는 스타일</Typography>
127
+ </Sheet>
128
+
129
+ <Sheet
130
+ variant="plain"
131
+ sx={{
132
+ p: 3,
133
+ maxWidth: 250,
134
+ borderRadius: "md"
135
+ }}
136
+ >
137
+ <Typography
138
+ level="title-md"
139
+ sx={{
140
+ mb: 1
141
+ }}
142
+ >
143
+ Plain
144
+ </Typography>
145
+ <Typography level="body-sm">배경이 없는 평면 스타일</Typography>
146
+ </Sheet>
147
+ </div>
115
148
  ```
116
149
 
117
150
  ## Colors
@@ -119,46 +152,68 @@ Plain
119
152
  Apply semantic colors to communicate meaning -- use `danger` for errors, `success` for confirmations, `warning` for alerts, and `primary` for highlighted content.
120
153
 
121
154
  ```tsx
122
- <div style={{
123
- display: 'flex',
124
- gap: '1rem',
125
- flexWrap: 'wrap'
126
- }}>
127
- <Sheet color="primary" variant="soft" sx={{
128
- p: 2,
129
- borderRadius: 'md'
130
- }}>
131
- <Typography level="title-sm">Primary</Typography>
132
- </Sheet>
133
-
134
- <Sheet color="neutral" variant="soft" sx={{
135
- p: 2,
136
- borderRadius: 'md'
137
- }}>
138
- <Typography level="title-sm">Neutral</Typography>
139
- </Sheet>
140
-
141
- <Sheet color="danger" variant="soft" sx={{
142
- p: 2,
143
- borderRadius: 'md'
144
- }}>
145
- <Typography level="title-sm">Danger</Typography>
146
- </Sheet>
147
-
148
- <Sheet color="success" variant="soft" sx={{
149
- p: 2,
150
- borderRadius: 'md'
151
- }}>
152
- <Typography level="title-sm">Success</Typography>
153
- </Sheet>
154
-
155
- <Sheet color="warning" variant="soft" sx={{
156
- p: 2,
157
- borderRadius: 'md'
158
- }}>
159
- <Typography level="title-sm">Warning</Typography>
160
- </Sheet>
161
- </div>
155
+ <div
156
+ style={{
157
+ display: "flex",
158
+ gap: "1rem",
159
+ flexWrap: "wrap"
160
+ }}
161
+ >
162
+ <Sheet
163
+ color="primary"
164
+ variant="soft"
165
+ sx={{
166
+ p: 2,
167
+ borderRadius: "md"
168
+ }}
169
+ >
170
+ <Typography level="title-sm">Primary</Typography>
171
+ </Sheet>
172
+
173
+ <Sheet
174
+ color="neutral"
175
+ variant="soft"
176
+ sx={{
177
+ p: 2,
178
+ borderRadius: "md"
179
+ }}
180
+ >
181
+ <Typography level="title-sm">Neutral</Typography>
182
+ </Sheet>
183
+
184
+ <Sheet
185
+ color="danger"
186
+ variant="soft"
187
+ sx={{
188
+ p: 2,
189
+ borderRadius: "md"
190
+ }}
191
+ >
192
+ <Typography level="title-sm">Danger</Typography>
193
+ </Sheet>
194
+
195
+ <Sheet
196
+ color="success"
197
+ variant="soft"
198
+ sx={{
199
+ p: 2,
200
+ borderRadius: "md"
201
+ }}
202
+ >
203
+ <Typography level="title-sm">Success</Typography>
204
+ </Sheet>
205
+
206
+ <Sheet
207
+ color="warning"
208
+ variant="soft"
209
+ sx={{
210
+ p: 2,
211
+ borderRadius: "md"
212
+ }}
213
+ >
214
+ <Typography level="title-sm">Warning</Typography>
215
+ </Sheet>
216
+ </div>
162
217
  ```
163
218
 
164
219
  ## Basic
@@ -166,37 +221,50 @@ Apply semantic colors to communicate meaning -- use `danger` for errors, `succes
166
221
  The simplest form of a Sheet with minimal configuration.
167
222
 
168
223
  ```tsx
169
- <div style={{
170
- display: 'flex',
171
- gap: '2rem',
172
- flexWrap: 'wrap'
173
- }}>
174
- <Sheet sx={{
175
- p: 3,
176
- maxWidth: 300,
177
- borderRadius: 'md'
178
- }}>
179
- <Typography level="title-md" sx={{
180
- mb: 1
181
- }}>
182
- 기본 Sheet
183
- </Typography>
184
- <Typography level="body-sm">가장 기본적인 Sheet 컴포넌트입니다.</Typography>
185
- </Sheet>
186
-
187
- <Sheet variant="outlined" sx={{
188
- p: 3,
189
- maxWidth: 300,
190
- borderRadius: 'md'
191
- }}>
192
- <Typography level="title-md" sx={{
193
- mb: 1
194
- }}>
195
- Outlined Sheet
196
- </Typography>
197
- <Typography level="body-sm">테두리가 있는 Sheet 컴포넌트입니다.</Typography>
198
- </Sheet>
199
- </div>
224
+ <div
225
+ style={{
226
+ display: "flex",
227
+ gap: "2rem",
228
+ flexWrap: "wrap"
229
+ }}
230
+ >
231
+ <Sheet
232
+ sx={{
233
+ p: 3,
234
+ maxWidth: 300,
235
+ borderRadius: "md"
236
+ }}
237
+ >
238
+ <Typography
239
+ level="title-md"
240
+ sx={{
241
+ mb: 1
242
+ }}
243
+ >
244
+ 기본 Sheet
245
+ </Typography>
246
+ <Typography level="body-sm">가장 기본적인 Sheet 컴포넌트입니다.</Typography>
247
+ </Sheet>
248
+
249
+ <Sheet
250
+ variant="outlined"
251
+ sx={{
252
+ p: 3,
253
+ maxWidth: 300,
254
+ borderRadius: "md"
255
+ }}
256
+ >
257
+ <Typography
258
+ level="title-md"
259
+ sx={{
260
+ mb: 1
261
+ }}
262
+ >
263
+ Outlined Sheet
264
+ </Typography>
265
+ <Typography level="body-sm">테두리가 있는 Sheet 컴포넌트입니다.</Typography>
266
+ </Sheet>
267
+ </div>
200
268
  ```
201
269
 
202
270
  ## User Profile Card
@@ -204,56 +272,64 @@ Outlined Sheet
204
272
  Sheet can be composed with other components to create rich profile cards.
205
273
 
206
274
  ```tsx
207
- <Sheet variant="outlined" sx={{
208
- maxWidth: 400,
209
- borderRadius: 'lg',
210
- p: 3
211
- }}>
212
- <Stack spacing={3}>
213
- <Stack direction="row" spacing={2} alignItems="center">
214
- <Avatar size="lg" src="https://i.pravatar.cc/100?img=1" />
215
- <Stack spacing={0.5}>
216
- <Typography level="title-lg">김철수</Typography>
217
- <Typography level="body-sm" sx={{
218
- color: 'text.secondary'
219
- }}>
220
- 프론트엔드 개발자
221
- </Typography>
222
- </Stack>
223
- <Box sx={{
224
- ml: 'auto'
225
- }}>
226
- <IconButton variant="plain" size="sm">
227
- <SettingsIcon />
228
- </IconButton>
229
- </Box>
230
- </Stack>
231
-
232
- <Typography level="body-md">
233
- 사용자 경험을 중시하는 프론트엔드 개발자입니다. React와 TypeScript를 주로 사용하며, 깔끔하고 직관적인
234
- 인터페이스 구현에 관심이 많습니다.
235
- </Typography>
236
-
237
- <Stack direction="row" spacing={1}>
238
- <Chip size="sm" variant="soft">
239
- React
240
- </Chip>
241
- <Chip size="sm" variant="soft">
242
- TypeScript
243
- </Chip>
244
- <Chip size="sm" variant="soft">
245
- Next.js
246
- </Chip>
247
- </Stack>
248
-
249
- <Stack direction="row" spacing={2}>
250
- <Button variant="outlined" fullWidth>
251
- 팔로우
252
- </Button>
253
- <Button fullWidth>메시지 보내기</Button>
254
- </Stack>
255
- </Stack>
256
- </Sheet>
275
+ <Sheet
276
+ variant="outlined"
277
+ sx={{
278
+ maxWidth: 400,
279
+ borderRadius: "lg",
280
+ p: 3
281
+ }}
282
+ >
283
+ <Stack spacing={3}>
284
+ <Stack direction="row" spacing={2} alignItems="center">
285
+ <Avatar size="lg" src="https://i.pravatar.cc/100?img=1" />
286
+ <Stack spacing={0.5}>
287
+ <Typography level="title-lg">김철수</Typography>
288
+ <Typography
289
+ level="body-sm"
290
+ sx={{
291
+ color: "text.secondary"
292
+ }}
293
+ >
294
+ 프론트엔드 개발자
295
+ </Typography>
296
+ </Stack>
297
+ <Box
298
+ sx={{
299
+ ml: "auto"
300
+ }}
301
+ >
302
+ <IconButton variant="plain" size="sm">
303
+ <SettingsIcon />
304
+ </IconButton>
305
+ </Box>
306
+ </Stack>
307
+
308
+ <Typography level="body-md">
309
+ 사용자 경험을 중시하는 프론트엔드 개발자입니다. React와 TypeScript를 주로 사용하며, 깔끔하고
310
+ 직관적인 인터페이스 구현에 관심이 많습니다.
311
+ </Typography>
312
+
313
+ <Stack direction="row" spacing={1}>
314
+ <Chip size="sm" variant="soft">
315
+ React
316
+ </Chip>
317
+ <Chip size="sm" variant="soft">
318
+ TypeScript
319
+ </Chip>
320
+ <Chip size="sm" variant="soft">
321
+ Next.js
322
+ </Chip>
323
+ </Stack>
324
+
325
+ <Stack direction="row" spacing={2}>
326
+ <Button variant="outlined" fullWidth>
327
+ 팔로우
328
+ </Button>
329
+ <Button fullWidth>메시지 보내기</Button>
330
+ </Stack>
331
+ </Stack>
332
+ </Sheet>
257
333
  ```
258
334
 
259
335
  ## Article Card
@@ -261,72 +337,89 @@ Sheet can be composed with other components to create rich profile cards.
261
337
  Combine Sheet with images, chips, and actions for article-style layouts.
262
338
 
263
339
  ```tsx
264
- <Sheet variant="outlined" sx={{
265
- maxWidth: 500,
266
- borderRadius: 'lg',
267
- overflow: 'hidden'
268
- }}>
269
- <Box sx={{
270
- height: 200,
271
- bgcolor: 'neutral.100',
272
- backgroundImage: 'url(https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80)',
273
- backgroundSize: 'cover',
274
- backgroundPosition: 'center'
275
- }} />
276
-
277
- <Stack spacing={2} sx={{
278
- p: 3
279
- }}>
280
- <Stack direction="row" justifyContent="space-between" alignItems="flex-start">
281
- <Stack spacing={1}>
282
- <Typography level="title-lg">React 18의 새로운 기능들</Typography>
283
- <Typography level="body-sm" sx={{
284
- color: 'text.secondary'
285
- }}>
286
- 2024년 1월 15일 • 5분 읽기
287
- </Typography>
288
- </Stack>
289
- <IconButton variant="plain" size="sm" sx={{
290
- color: 'warning.500'
291
- }}>
292
- <StarIcon />
293
- </IconButton>
294
- </Stack>
295
-
296
- <Typography level="body-md">
297
- React 18에서 도입된 Concurrent Features와 새로운 Hooks에 대해 자세히 알아보겠습니다. Suspense, useTransition,
298
- useDeferredValue 등의 새로운 기능들이 어떻게 사용자 경험을 개선하는지 살펴보겠습니다.
299
- </Typography>
300
-
301
- <Stack direction="row" spacing={1}>
302
- <Chip size="sm" variant="outlined">
303
- React
304
- </Chip>
305
- <Chip size="sm" variant="outlined">
306
- JavaScript
307
- </Chip>
308
- <Chip size="sm" variant="outlined">
309
- 개발
310
- </Chip>
311
- </Stack>
312
-
313
- <Stack direction="row" justifyContent="space-between" alignItems="center">
314
- <Stack direction="row" spacing={1} alignItems="center">
315
- <Avatar size="sm" src="https://i.pravatar.cc/32?img=2" />
316
- <Typography level="body-sm">김개발</Typography>
317
- </Stack>
318
-
319
- <Stack direction="row" spacing={1}>
320
- <Button size="sm" variant="plain" startDecorator={<FavoriteIcon />}>
321
- 24
322
- </Button>
323
- <Button size="sm" variant="plain" startDecorator={<ShareIcon />}>
324
- 공유
325
- </Button>
326
- </Stack>
327
- </Stack>
328
- </Stack>
329
- </Sheet>
340
+ <Sheet
341
+ variant="outlined"
342
+ sx={{
343
+ maxWidth: 500,
344
+ borderRadius: "lg",
345
+ overflow: "hidden"
346
+ }}
347
+ >
348
+ <Box
349
+ sx={{
350
+ height: 200,
351
+ bgcolor: "neutral.100",
352
+ backgroundImage:
353
+ "url(https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80)",
354
+ backgroundSize: "cover",
355
+ backgroundPosition: "center"
356
+ }}
357
+ />
358
+
359
+ <Stack
360
+ spacing={2}
361
+ sx={{
362
+ p: 3
363
+ }}
364
+ >
365
+ <Stack direction="row" justifyContent="space-between" alignItems="flex-start">
366
+ <Stack spacing={1}>
367
+ <Typography level="title-lg">React 18의 새로운 기능들</Typography>
368
+ <Typography
369
+ level="body-sm"
370
+ sx={{
371
+ color: "text.secondary"
372
+ }}
373
+ >
374
+ 2024년 1월 15일 5분 읽기
375
+ </Typography>
376
+ </Stack>
377
+ <IconButton
378
+ variant="plain"
379
+ size="sm"
380
+ sx={{
381
+ color: "warning.500"
382
+ }}
383
+ >
384
+ <StarIcon />
385
+ </IconButton>
386
+ </Stack>
387
+
388
+ <Typography level="body-md">
389
+ React 18에서 도입된 Concurrent Features와 새로운 Hooks에 대해 자세히 알아보겠습니다.
390
+ Suspense, useTransition, useDeferredValue 등의 새로운 기능들이 어떻게 사용자 경험을
391
+ 개선하는지 살펴보겠습니다.
392
+ </Typography>
393
+
394
+ <Stack direction="row" spacing={1}>
395
+ <Chip size="sm" variant="outlined">
396
+ React
397
+ </Chip>
398
+ <Chip size="sm" variant="outlined">
399
+ JavaScript
400
+ </Chip>
401
+ <Chip size="sm" variant="outlined">
402
+ 개발
403
+ </Chip>
404
+ </Stack>
405
+
406
+ <Stack direction="row" justifyContent="space-between" alignItems="center">
407
+ <Stack direction="row" spacing={1} alignItems="center">
408
+ <Avatar size="sm" src="https://i.pravatar.cc/32?img=2" />
409
+ <Typography level="body-sm">김개발</Typography>
410
+ </Stack>
411
+
412
+ <Stack direction="row" spacing={1}>
413
+ <Button size="sm" variant="plain" startDecorator={<FavoriteIcon />}>
414
+ 24
415
+ </Button>
416
+ <Button size="sm" variant="plain" startDecorator={<ShareIcon />}>
417
+ 공유
418
+ </Button>
419
+ </Stack>
420
+ </Stack>
421
+ </Stack>
422
+ </Sheet>
330
423
  ```
331
424
 
332
425
  ## Notification Panel
@@ -334,32 +427,42 @@ Combine Sheet with images, chips, and actions for article-style layouts.
334
427
  Use `variant="soft"` with a semantic color to create attention-grabbing notification banners.
335
428
 
336
429
  ```tsx
337
- <Sheet variant="soft" color="primary" sx={{
338
- maxWidth: 400,
339
- borderRadius: 'lg',
340
- p: 3
341
- }}>
342
- <Stack direction="row" justifyContent="space-between" alignItems="flex-start" spacing={2}>
343
- <Stack spacing={1}>
344
- <Typography level="title-md">새로운 알림이 있습니다</Typography>
345
- <Typography level="body-sm">프로젝트에 새로운 댓글이 달렸습니다. 확인해보시겠습니까?</Typography>
346
- </Stack>
347
- <IconButton variant="plain" size="sm">
348
- <CloseIcon />
349
- </IconButton>
350
- </Stack>
351
-
352
- <Stack direction="row" spacing={2} sx={{
353
- mt: 3
354
- }}>
355
- <Button size="sm" variant="solid">
356
- 확인하기
357
- </Button>
358
- <Button size="sm" variant="outlined">
359
- 나중에
360
- </Button>
361
- </Stack>
362
- </Sheet>
430
+ <Sheet
431
+ variant="soft"
432
+ color="primary"
433
+ sx={{
434
+ maxWidth: 400,
435
+ borderRadius: "lg",
436
+ p: 3
437
+ }}
438
+ >
439
+ <Stack direction="row" justifyContent="space-between" alignItems="flex-start" spacing={2}>
440
+ <Stack spacing={1}>
441
+ <Typography level="title-md">새로운 알림이 있습니다</Typography>
442
+ <Typography level="body-sm">
443
+ 프로젝트에 새로운 댓글이 달렸습니다. 확인해보시겠습니까?
444
+ </Typography>
445
+ </Stack>
446
+ <IconButton variant="plain" size="sm">
447
+ <CloseIcon />
448
+ </IconButton>
449
+ </Stack>
450
+
451
+ <Stack
452
+ direction="row"
453
+ spacing={2}
454
+ sx={{
455
+ mt: 3
456
+ }}
457
+ >
458
+ <Button size="sm" variant="solid">
459
+ 확인하기
460
+ </Button>
461
+ <Button size="sm" variant="outlined">
462
+ 나중에
463
+ </Button>
464
+ </Stack>
465
+ </Sheet>
363
466
  ```
364
467
 
365
468
  ## Stats Cards
@@ -367,77 +470,106 @@ Use `variant="soft"` with a semantic color to create attention-grabbing notifica
367
470
  Multiple Sheet instances arranged side by side make effective dashboard stat widgets.
368
471
 
369
472
  ```tsx
370
- <div style={{
371
- display: 'flex',
372
- gap: '1rem',
373
- flexWrap: 'wrap'
374
- }}>
375
- <Sheet variant="outlined" sx={{
376
- minWidth: 200,
377
- borderRadius: 'lg',
378
- p: 3
379
- }}>
380
- <Stack spacing={1}>
381
- <Typography level="body-sm" sx={{
382
- color: 'text.secondary'
383
- }}>
384
- 총 사용자
385
- </Typography>
386
- <Typography level="h2" color="primary">
387
- 1,234
388
- </Typography>
389
- <Typography level="body-xs" sx={{
390
- color: 'success.600'
391
- }}>
392
- +12% 증가
393
- </Typography>
394
- </Stack>
395
- </Sheet>
396
-
397
- <Sheet variant="outlined" sx={{
398
- minWidth: 200,
399
- borderRadius: 'lg',
400
- p: 3
401
- }}>
402
- <Stack spacing={1}>
403
- <Typography level="body-sm" sx={{
404
- color: 'text.secondary'
405
- }}>
406
- 매출
407
- </Typography>
408
- <Typography level="h2" color="primary">
409
- ₩5.6M
410
- </Typography>
411
- <Typography level="body-xs" sx={{
412
- color: 'success.600'
413
- }}>
414
- +8% 증가
415
- </Typography>
416
- </Stack>
417
- </Sheet>
418
-
419
- <Sheet variant="outlined" sx={{
420
- minWidth: 200,
421
- borderRadius: 'lg',
422
- p: 3
423
- }}>
424
- <Stack spacing={1}>
425
- <Typography level="body-sm" sx={{
426
- color: 'text.secondary'
427
- }}>
428
- 주문 수
429
- </Typography>
430
- <Typography level="h2" color="primary">
431
- 789
432
- </Typography>
433
- <Typography level="body-xs" sx={{
434
- color: 'danger.600'
435
- }}>
436
- -3% 감소
437
- </Typography>
438
- </Stack>
439
- </Sheet>
440
- </div>
473
+ <div
474
+ style={{
475
+ display: "flex",
476
+ gap: "1rem",
477
+ flexWrap: "wrap"
478
+ }}
479
+ >
480
+ <Sheet
481
+ variant="outlined"
482
+ sx={{
483
+ minWidth: 200,
484
+ borderRadius: "lg",
485
+ p: 3
486
+ }}
487
+ >
488
+ <Stack spacing={1}>
489
+ <Typography
490
+ level="body-sm"
491
+ sx={{
492
+ color: "text.secondary"
493
+ }}
494
+ >
495
+ 사용자
496
+ </Typography>
497
+ <Typography level="h2" color="primary">
498
+ 1,234
499
+ </Typography>
500
+ <Typography
501
+ level="body-xs"
502
+ sx={{
503
+ color: "success.600"
504
+ }}
505
+ >
506
+ +12% 증가
507
+ </Typography>
508
+ </Stack>
509
+ </Sheet>
510
+
511
+ <Sheet
512
+ variant="outlined"
513
+ sx={{
514
+ minWidth: 200,
515
+ borderRadius: "lg",
516
+ p: 3
517
+ }}
518
+ >
519
+ <Stack spacing={1}>
520
+ <Typography
521
+ level="body-sm"
522
+ sx={{
523
+ color: "text.secondary"
524
+ }}
525
+ >
526
+ 매출
527
+ </Typography>
528
+ <Typography level="h2" color="primary">
529
+ ₩5.6M
530
+ </Typography>
531
+ <Typography
532
+ level="body-xs"
533
+ sx={{
534
+ color: "success.600"
535
+ }}
536
+ >
537
+ +8% 증가
538
+ </Typography>
539
+ </Stack>
540
+ </Sheet>
541
+
542
+ <Sheet
543
+ variant="outlined"
544
+ sx={{
545
+ minWidth: 200,
546
+ borderRadius: "lg",
547
+ p: 3
548
+ }}
549
+ >
550
+ <Stack spacing={1}>
551
+ <Typography
552
+ level="body-sm"
553
+ sx={{
554
+ color: "text.secondary"
555
+ }}
556
+ >
557
+ 주문 수
558
+ </Typography>
559
+ <Typography level="h2" color="primary">
560
+ 789
561
+ </Typography>
562
+ <Typography
563
+ level="body-xs"
564
+ sx={{
565
+ color: "danger.600"
566
+ }}
567
+ >
568
+ -3% 감소
569
+ </Typography>
570
+ </Stack>
571
+ </Sheet>
572
+ </div>
441
573
  ```
442
574
 
443
575
  ## Form Sheet
@@ -445,87 +577,108 @@ Multiple Sheet instances arranged side by side make effective dashboard stat wid
445
577
  Wrap form elements inside a Sheet to create visually contained form sections.
446
578
 
447
579
  ```tsx
448
- <Sheet variant="outlined" sx={{
449
- maxWidth: 400,
450
- borderRadius: 'lg',
451
- p: 4
452
- }}>
453
- <Stack spacing={3}>
454
- <Stack spacing={1}>
455
- <Typography level="title-lg">문의하기</Typography>
456
- <Typography level="body-sm" sx={{
457
- color: 'text.secondary'
458
- }}>
459
- 궁금한 점이 있으시면 언제든지 연락해 주세요.
460
- </Typography>
461
- </Stack>
462
-
463
- <Stack spacing={2}>
464
- <Stack spacing={1}>
465
- <Typography level="body-sm" fontWeight="500">
466
- 이름
467
- </Typography>
468
- <Box sx={{
469
- p: 2,
470
- border: '1px solid',
471
- borderColor: 'divider',
472
- borderRadius: 'sm',
473
- bgcolor: 'background.level1'
474
- }}>
475
- <Typography level="body-sm" sx={{
476
- color: 'text.secondary'
477
- }}>
478
- 이름을 입력하세요
479
- </Typography>
480
- </Box>
481
- </Stack>
482
-
483
- <Stack spacing={1}>
484
- <Typography level="body-sm" fontWeight="500">
485
- 이메일
486
- </Typography>
487
- <Box sx={{
488
- p: 2,
489
- border: '1px solid',
490
- borderColor: 'divider',
491
- borderRadius: 'sm',
492
- bgcolor: 'background.level1'
493
- }}>
494
- <Typography level="body-sm" sx={{
495
- color: 'text.secondary'
496
- }}>
497
- 이메일을 입력하세요
498
- </Typography>
499
- </Box>
500
- </Stack>
501
-
502
- <Stack spacing={1}>
503
- <Typography level="body-sm" fontWeight="500">
504
- 메시지
505
- </Typography>
506
- <Box sx={{
507
- p: 2,
508
- minHeight: 100,
509
- border: '1px solid',
510
- borderColor: 'divider',
511
- borderRadius: 'sm',
512
- bgcolor: 'background.level1'
513
- }}>
514
- <Typography level="body-sm" sx={{
515
- color: 'text.secondary'
516
- }}>
517
- 메시지를 입력하세요
518
- </Typography>
519
- </Box>
520
- </Stack>
521
- </Stack>
522
-
523
- <Stack direction="row" spacing={2} justifyContent="flex-end">
524
- <Button variant="outlined">취소</Button>
525
- <Button>전송</Button>
526
- </Stack>
527
- </Stack>
528
- </Sheet>
580
+ <Sheet
581
+ variant="outlined"
582
+ sx={{
583
+ maxWidth: 400,
584
+ borderRadius: "lg",
585
+ p: 4
586
+ }}
587
+ >
588
+ <Stack spacing={3}>
589
+ <Stack spacing={1}>
590
+ <Typography level="title-lg">문의하기</Typography>
591
+ <Typography
592
+ level="body-sm"
593
+ sx={{
594
+ color: "text.secondary"
595
+ }}
596
+ >
597
+ 궁금한 점이 있으시면 언제든지 연락해 주세요.
598
+ </Typography>
599
+ </Stack>
600
+
601
+ <Stack spacing={2}>
602
+ <Stack spacing={1}>
603
+ <Typography level="body-sm" fontWeight="500">
604
+ 이름
605
+ </Typography>
606
+ <Box
607
+ sx={{
608
+ p: 2,
609
+ border: "1px solid",
610
+ borderColor: "divider",
611
+ borderRadius: "sm",
612
+ bgcolor: "background.level1"
613
+ }}
614
+ >
615
+ <Typography
616
+ level="body-sm"
617
+ sx={{
618
+ color: "text.secondary"
619
+ }}
620
+ >
621
+ 이름을 입력하세요
622
+ </Typography>
623
+ </Box>
624
+ </Stack>
625
+
626
+ <Stack spacing={1}>
627
+ <Typography level="body-sm" fontWeight="500">
628
+ 이메일
629
+ </Typography>
630
+ <Box
631
+ sx={{
632
+ p: 2,
633
+ border: "1px solid",
634
+ borderColor: "divider",
635
+ borderRadius: "sm",
636
+ bgcolor: "background.level1"
637
+ }}
638
+ >
639
+ <Typography
640
+ level="body-sm"
641
+ sx={{
642
+ color: "text.secondary"
643
+ }}
644
+ >
645
+ 이메일을 입력하세요
646
+ </Typography>
647
+ </Box>
648
+ </Stack>
649
+
650
+ <Stack spacing={1}>
651
+ <Typography level="body-sm" fontWeight="500">
652
+ 메시지
653
+ </Typography>
654
+ <Box
655
+ sx={{
656
+ p: 2,
657
+ minHeight: 100,
658
+ border: "1px solid",
659
+ borderColor: "divider",
660
+ borderRadius: "sm",
661
+ bgcolor: "background.level1"
662
+ }}
663
+ >
664
+ <Typography
665
+ level="body-sm"
666
+ sx={{
667
+ color: "text.secondary"
668
+ }}
669
+ >
670
+ 메시지를 입력하세요
671
+ </Typography>
672
+ </Box>
673
+ </Stack>
674
+ </Stack>
675
+
676
+ <Stack direction="row" spacing={2} justifyContent="flex-end">
677
+ <Button variant="outlined">취소</Button>
678
+ <Button>전송</Button>
679
+ </Stack>
680
+ </Stack>
681
+ </Sheet>
529
682
  ```
530
683
 
531
684
  ## Nested Sheets
@@ -533,70 +686,105 @@ Wrap form elements inside a Sheet to create visually contained form sections.
533
686
  Sheets can be nested to create layered dashboard layouts with distinct visual sections.
534
687
 
535
688
  ```tsx
536
- <Sheet variant="outlined" sx={{
537
- maxWidth: 600,
538
- borderRadius: 'lg',
539
- p: 3
540
- }}>
541
- <Stack spacing={3}>
542
- <Typography level="title-lg">대시보드</Typography>
543
-
544
- <Stack direction="row" spacing={2}>
545
- <Sheet variant="soft" color="primary" sx={{
546
- flex: 1,
547
- p: 2,
548
- borderRadius: 'md'
549
- }}>
550
- <Typography level="body-sm" sx={{
551
- color: 'primary.700'
552
- }}>
553
- 활성 사용자
554
- </Typography>
555
- <Typography level="h3" sx={{
556
- color: 'primary.800'
557
- }}>
558
- 2,345
559
- </Typography>
560
- </Sheet>
561
-
562
- <Sheet variant="soft" color="success" sx={{
563
- flex: 1,
564
- p: 2,
565
- borderRadius: 'md'
566
- }}>
567
- <Typography level="body-sm" sx={{
568
- color: 'success.700'
569
- }}>
570
- 완료된 작업
571
- </Typography>
572
- <Typography level="h3" sx={{
573
- color: 'success.800'
574
- }}>
575
- 156
576
- </Typography>
577
- </Sheet>
578
- </Stack>
579
-
580
- <Sheet variant="soft" sx={{
581
- p: 3,
582
- borderRadius: 'md'
583
- }}>
584
- <Stack spacing={2}>
585
- <Typography level="title-md">최근 활동</Typography>
586
-
587
- <Stack spacing={1}>
588
- {['새로운 사용자가 가입했습니다', '프로젝트가 완료되었습니다', '댓글이 등록되었습니다'].map(activity => <Box key={activity} sx={{
589
- p: 1.5,
590
- bgcolor: 'background.body',
591
- borderRadius: 'sm'
592
- }}>
593
- <Typography level="body-sm">{activity}</Typography>
594
- </Box>)}
595
- </Stack>
596
- </Stack>
597
- </Sheet>
598
- </Stack>
599
- </Sheet>
689
+ <Sheet
690
+ variant="outlined"
691
+ sx={{
692
+ maxWidth: 600,
693
+ borderRadius: "lg",
694
+ p: 3
695
+ }}
696
+ >
697
+ <Stack spacing={3}>
698
+ <Typography level="title-lg">대시보드</Typography>
699
+
700
+ <Stack direction="row" spacing={2}>
701
+ <Sheet
702
+ variant="soft"
703
+ color="primary"
704
+ sx={{
705
+ flex: 1,
706
+ p: 2,
707
+ borderRadius: "md"
708
+ }}
709
+ >
710
+ <Typography
711
+ level="body-sm"
712
+ sx={{
713
+ color: "primary.700"
714
+ }}
715
+ >
716
+ 활성 사용자
717
+ </Typography>
718
+ <Typography
719
+ level="h3"
720
+ sx={{
721
+ color: "primary.800"
722
+ }}
723
+ >
724
+ 2,345
725
+ </Typography>
726
+ </Sheet>
727
+
728
+ <Sheet
729
+ variant="soft"
730
+ color="success"
731
+ sx={{
732
+ flex: 1,
733
+ p: 2,
734
+ borderRadius: "md"
735
+ }}
736
+ >
737
+ <Typography
738
+ level="body-sm"
739
+ sx={{
740
+ color: "success.700"
741
+ }}
742
+ >
743
+ 완료된 작업
744
+ </Typography>
745
+ <Typography
746
+ level="h3"
747
+ sx={{
748
+ color: "success.800"
749
+ }}
750
+ >
751
+ 156
752
+ </Typography>
753
+ </Sheet>
754
+ </Stack>
755
+
756
+ <Sheet
757
+ variant="soft"
758
+ sx={{
759
+ p: 3,
760
+ borderRadius: "md"
761
+ }}
762
+ >
763
+ <Stack spacing={2}>
764
+ <Typography level="title-md">최근 활동</Typography>
765
+
766
+ <Stack spacing={1}>
767
+ {[
768
+ "새로운 사용자가 가입했습니다",
769
+ "프로젝트가 완료되었습니다",
770
+ "댓글이 등록되었습니다"
771
+ ].map((activity) => (
772
+ <Box
773
+ key={activity}
774
+ sx={{
775
+ p: 1.5,
776
+ bgcolor: "background.body",
777
+ borderRadius: "sm"
778
+ }}
779
+ >
780
+ <Typography level="body-sm">{activity}</Typography>
781
+ </Box>
782
+ ))}
783
+ </Stack>
784
+ </Stack>
785
+ </Sheet>
786
+ </Stack>
787
+ </Sheet>
600
788
  ```
601
789
 
602
790
  ## Common Use Cases
@@ -616,11 +804,9 @@ function StatWidget({ label, value, change }) {
616
804
  <Typography level="h2" color="primary">
617
805
  {value}
618
806
  </Typography>
619
- <Typography
620
- level="body-xs"
621
- sx={{ color: change > 0 ? 'success.600' : 'danger.600' }}
622
- >
623
- {change > 0 ? '+' : ''}{change}% from last month
807
+ <Typography level="body-xs" sx={{ color: change > 0 ? 'success.600' : 'danger.600' }}>
808
+ {change > 0 ? '+' : ''}
809
+ {change}% from last month
624
810
  </Typography>
625
811
  </Stack>
626
812
  </Sheet>
@@ -636,11 +822,7 @@ import WarningIcon from '@mui/icons-material/Warning';
636
822
 
637
823
  function AlertBanner({ message, onDismiss }) {
638
824
  return (
639
- <Sheet
640
- variant="soft"
641
- color="warning"
642
- sx={{ borderRadius: 'md', p: 2 }}
643
- >
825
+ <Sheet variant="soft" color="warning" sx={{ borderRadius: 'md', p: 2 }}>
644
826
  <Stack direction="row" alignItems="center" spacing={2}>
645
827
  <WarningIcon />
646
828
  <Typography level="body-md" sx={{ flex: 1 }}>