@ceed/ads 1.13.4 → 1.15.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/Overview.md +11 -0
  2. package/dist/components/Menu/Menu.d.ts +2 -5
  3. package/dist/components/Stepper/Stepper.d.ts +6 -0
  4. package/dist/components/data-display/Avatar.md +428 -0
  5. package/dist/components/data-display/Badge.md +315 -0
  6. package/dist/components/data-display/Chip.md +301 -0
  7. package/dist/components/data-display/DataTable.md +452 -0
  8. package/dist/components/data-display/InfoSign.md +160 -0
  9. package/dist/components/data-display/Markdown.md +17 -0
  10. package/dist/components/data-display/Table.md +1330 -0
  11. package/dist/components/data-display/Tooltip.md +444 -0
  12. package/dist/components/data-display/Typography.md +271 -0
  13. package/dist/components/data-display/llms.txt +17 -0
  14. package/dist/components/feedback/Alert.md +663 -0
  15. package/dist/components/feedback/Dialog.md +33 -0
  16. package/dist/components/feedback/Modal.md +39 -0
  17. package/dist/components/feedback/llms.txt +11 -0
  18. package/dist/components/inputs/Autocomplete.md +103 -0
  19. package/dist/components/inputs/Button.md +334 -0
  20. package/dist/components/inputs/ButtonGroup.md +382 -0
  21. package/dist/components/inputs/Calendar.md +19 -0
  22. package/dist/components/inputs/Checkbox.md +649 -0
  23. package/dist/components/inputs/CurrencyInput.md +91 -0
  24. package/dist/components/inputs/DatePicker.md +67 -0
  25. package/dist/components/inputs/DateRangePicker.md +55 -0
  26. package/dist/components/inputs/FilterMenu.md +210 -0
  27. package/dist/components/inputs/IconButton.md +361 -0
  28. package/dist/components/inputs/Input.md +283 -0
  29. package/dist/components/inputs/MonthPicker.md +72 -0
  30. package/dist/components/inputs/MonthRangePicker.md +70 -0
  31. package/dist/components/inputs/PercentageInput.md +116 -0
  32. package/dist/components/inputs/RadioButton.md +350 -0
  33. package/dist/components/inputs/RadioTileGroup.md +418 -0
  34. package/dist/components/inputs/Select.md +56 -0
  35. package/dist/components/inputs/Switch.md +577 -0
  36. package/dist/components/inputs/Textarea.md +64 -0
  37. package/dist/components/inputs/Uploader/Uploader.md +238 -0
  38. package/dist/components/inputs/Uploader/llms.txt +9 -0
  39. package/dist/components/inputs/llms.txt +31 -0
  40. package/dist/components/layout/Box.md +997 -0
  41. package/dist/components/layout/Container.md +23 -0
  42. package/dist/components/layout/Grid.md +728 -0
  43. package/dist/components/layout/Stack.md +937 -0
  44. package/dist/components/layout/llms.txt +12 -0
  45. package/dist/components/llms.txt +14 -0
  46. package/dist/components/navigation/Breadcrumbs.md +51 -0
  47. package/dist/components/navigation/Dropdown.md +768 -0
  48. package/dist/components/navigation/IconMenuButton.md +35 -0
  49. package/dist/components/navigation/InsetDrawer.md +133 -0
  50. package/dist/components/navigation/Link.md +24 -0
  51. package/dist/components/navigation/Menu.md +957 -0
  52. package/dist/components/navigation/MenuButton.md +39 -0
  53. package/dist/components/navigation/NavigationGroup.md +17 -0
  54. package/dist/components/navigation/NavigationItem.md +17 -0
  55. package/dist/components/navigation/Navigator.md +17 -0
  56. package/dist/components/navigation/Pagination.md +17 -0
  57. package/dist/components/navigation/ProfileMenu.md +34 -0
  58. package/dist/components/navigation/Stepper.md +108 -0
  59. package/dist/components/navigation/Tabs.md +34 -0
  60. package/dist/components/navigation/llms.txt +22 -0
  61. package/dist/components/surfaces/Accordions.md +96 -0
  62. package/dist/components/surfaces/Card.md +786 -0
  63. package/dist/components/surfaces/Divider.md +762 -0
  64. package/dist/components/surfaces/Sheet.md +900 -0
  65. package/dist/components/surfaces/llms.txt +12 -0
  66. package/dist/index.cjs +22 -10
  67. package/dist/index.js +22 -10
  68. package/dist/llms.txt +75 -0
  69. package/framer/index.js +36 -36
  70. package/package.json +8 -4
@@ -0,0 +1,11 @@
1
+ # ADS (Admin Design System)
2
+
3
+ ADS는 Admin Design System의 약자로, 컴포넌트 기반의 UI 디자인 시스템입니다. 이 시스템은 일관된 사용자 경험을 제공하고, 개발 및 디자인 프로세스를 효율화하기 위해 제작되었습니다.
4
+
5
+ 이 디자인시스템은 [JoyUI](https://mui.com/joy-ui/getting-started/)를 기반으로 하므로 대부분 [JoyUI](https://mui.com/joy-ui/getting-started/)의 문서를 참고할 수 있지만, 일부 컴포넌트는 추상화 레이어가 추가되어 인터페이스가 다를 수 있습니다.
6
+
7
+ 데이터가 중요한 관리 대시보드와 애플리케이션을 위한 UI를 목적으로 이름이 지어졌으며 내부 서비스 외에도 고객이 사용하는 UI에도 적용될 수 있습니다.
8
+
9
+ ## 문서 및 가이드
10
+
11
+ ADS에 대한 자세한 내용은 [Design System 문서](https://ecubelabs.atlassian.net/wiki/spaces/HP/pages/3256123430/Design+System)를 참조하세요.
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { MenuProps, MenuItemProps } from '@mui/joy';
2
+ import { MenuProps } from '@mui/joy';
3
3
  import { MotionProps } from 'framer-motion';
4
4
  /**
5
5
  * @todo [v1.0.0] Restructure menu component to:
@@ -17,8 +17,5 @@ declare const Menu: {
17
17
  displayName: string;
18
18
  };
19
19
  export { Menu };
20
- declare const MenuItem: {
21
- (props: MenuItemProps & MotionProps): React.JSX.Element;
22
- displayName: string;
23
- };
20
+ declare const MenuItem: import("@mui/joy").ExtendMenuItem<import("@mui/joy").MenuItemTypeMap<{}, "div">>;
24
21
  export { MenuItem };
@@ -32,6 +32,12 @@ interface StepperProps {
32
32
  inactiveColor?: TextColor;
33
33
  inactiveLineColor?: TextColor;
34
34
  activeStep: number;
35
+ orientation?: 'horizontal' | 'vertical';
36
+ /**
37
+ * The orientation of each step. When orientation is set to 'vertical',
38
+ * stepOrientation is forcibly set to 'horizontal'.
39
+ */
40
+ stepOrientation?: 'horizontal' | 'vertical';
35
41
  }
36
42
  declare function Stepper(props: StepperProps): React.JSX.Element;
37
43
  declare namespace Stepper {
@@ -0,0 +1,428 @@
1
+ # Avatar
2
+
3
+ ## Introduction
4
+
5
+ Avatar 컴포넌트는 사용자의 프로필 이미지, 이니셜 또는 아이콘을 표시하는 컴포넌트입니다. Joy UI의 Avatar를 기반으로 하며, 다양한 크기, 색상, 변형을 지원합니다. 사용자 인터페이스에서 개인을 시각적으로 나타내거나 그룹, 브랜드를 표현하는 데 사용됩니다.
6
+
7
+ ```tsx
8
+ <Avatar alt="User avatar" />
9
+ ```
10
+
11
+ | Field | Description | Default |
12
+ | -------- | ----------- | ------------- |
13
+ | variant | — | — |
14
+ | color | — | — |
15
+ | size | — | — |
16
+ | src | — | — |
17
+ | alt | — | "User avatar" |
18
+ | children | — | — |
19
+
20
+ ## Usage
21
+
22
+ ```tsx
23
+ import { Avatar } from '@ceed/ads';
24
+
25
+ function MyComponent() {
26
+ return (
27
+ <div>
28
+ {/* 이미지가 있는 아바타 */}
29
+ <Avatar src="/path/to/image.jpg" alt="사용자 이름" />
30
+
31
+ {/* 이니셜 아바타 */}
32
+ <Avatar>김철수</Avatar>
33
+
34
+ {/* 단일 문자 아바타 */}
35
+ <Avatar>김</Avatar>
36
+ </div>
37
+ );
38
+ }
39
+ ```
40
+
41
+ ## Examples
42
+
43
+ ### Basic Usage
44
+
45
+ 가장 기본적인 Avatar 사용법입니다.
46
+
47
+ ```tsx
48
+ <Avatar alt="User avatar" />
49
+ ```
50
+
51
+ ### With Image
52
+
53
+ 이미지를 사용한 아바타입니다.
54
+
55
+ ```tsx
56
+ <Stack direction="row" spacing={2} alignItems="center">
57
+ <Avatar {...args} />
58
+ </Stack>
59
+ ```
60
+
61
+ ### With Text
62
+
63
+ 텍스트나 이니셜을 사용한 아바타입니다.
64
+
65
+ ```tsx
66
+ <Stack direction="row" spacing={2} alignItems="center">
67
+ <Avatar {...args} />
68
+ </Stack>
69
+ ```
70
+
71
+ ## Customization
72
+
73
+ ### Variants
74
+
75
+ 다양한 시각적 스타일을 적용할 수 있습니다.
76
+
77
+ ```tsx
78
+ <Stack direction="row" spacing={2} alignItems="center">
79
+ {variants.map(variant => <Avatar key={variant} {...args} variant={variant} />)}
80
+ </Stack>
81
+ ```
82
+
83
+ - **solid**: 배경색이 채워진 스타일
84
+ - **soft**: 부드러운 배경색 스타일
85
+ - **outlined**: 테두리만 있는 스타일
86
+ - **plain**: 최소한의 스타일
87
+
88
+ ### Sizes
89
+
90
+ 다양한 크기의 아바타를 사용할 수 있습니다.
91
+
92
+ ```tsx
93
+ <Stack direction="row" spacing={2} alignItems="center">
94
+ {sizesWithXs.map(size => <Avatar key={size} {...args} size={size}>
95
+ {getSizeContent(size)}
96
+ </Avatar>)}
97
+ </Stack>
98
+ ```
99
+
100
+ - **xs**: 매우 작은 크기 (16px)
101
+ - **sm**: 작은 크기 (24px)
102
+ - **md**: 중간 크기 (32px, 기본값)
103
+ - **lg**: 큰 크기 (40px)
104
+
105
+ ### Colors
106
+
107
+ 다양한 색상 테마를 적용할 수 있습니다.
108
+
109
+ ```tsx
110
+ <Stack direction="row" spacing={2} alignItems="center">
111
+ {colors.map(color => <Avatar key={color} {...args} color={color} />)}
112
+ </Stack>
113
+ ```
114
+
115
+ - **primary**: 주요 브랜드 색상
116
+ - **neutral**: 중립적인 회색톤
117
+ - **danger**: 경고나 오류를 나타내는 빨간색
118
+ - **success**: 성공을 나타내는 녹색
119
+ - **warning**: 주의를 나타내는 주황색
120
+
121
+ ### All Combinations
122
+
123
+ 모든 변형, 크기, 색상 조합을 확인할 수 있습니다.
124
+
125
+ ```tsx
126
+ <Stack gap={8}>
127
+ {variants.map(variant => <Stack key={variant} gap={2}>
128
+ <Typography level="title-md">
129
+ {variant.slice(0, 1).toLocaleUpperCase()}
130
+ {variant.slice(1)} Variant
131
+ </Typography>
132
+ {colors.map(color => <Stack key={color} direction="row" gap={2} alignItems="center">
133
+ {sizesWithXs.map(size => <Stack key={size} alignItems="center" gap={1}>
134
+ <Avatar {...args} size={size} color={color} variant={variant}>
135
+ {getSizeContent(size)}
136
+ </Avatar>
137
+ <Typography level="body-sm">{size}</Typography>
138
+ </Stack>)}
139
+ {/* With image */}
140
+ <Stack alignItems="center" gap={1}>
141
+ <Avatar {...args} size="md" color={color} variant={variant} />
142
+ <Typography level="body-sm">image</Typography>
143
+ </Stack>
144
+ </Stack>)}
145
+ </Stack>)}
146
+ </Stack>
147
+ ```
148
+
149
+ ## Common Use Cases
150
+
151
+ ### User Profile
152
+
153
+ 사용자 프로필에서 아바타를 사용하는 경우입니다.
154
+
155
+ ```tsx
156
+ <Stack direction="row" spacing={2} alignItems="center">
157
+ <Avatar
158
+ src="/user-profile.jpg"
159
+ alt="김철수"
160
+ size="lg"
161
+ />
162
+ <Stack>
163
+ <Typography level="title-md">김철수</Typography>
164
+ <Typography level="body-sm" color="neutral">
165
+ kim@example.com
166
+ </Typography>
167
+ </Stack>
168
+ </Stack>
169
+ ```
170
+
171
+ ### Navigation Bar
172
+
173
+ 네비게이션 바에서 현재 사용자를 표시할 때 사용합니다.
174
+
175
+ ```tsx
176
+ <Stack direction="row" spacing={2} alignItems="center" sx={{ ml: 'auto' }}>
177
+ <Avatar size="sm" variant="soft" color="primary">
178
+
179
+ </Avatar>
180
+ <Typography level="body-sm">김철수</Typography>
181
+ <IconButton variant="plain" size="sm">
182
+ <ExpandMoreIcon />
183
+ </IconButton>
184
+ </Stack>
185
+ ```
186
+
187
+ ### Comment System
188
+
189
+ 댓글이나 피드에서 사용자를 나타낼 때 사용합니다.
190
+
191
+ ```tsx
192
+ <Stack direction="row" spacing={2}>
193
+ <Avatar size="md" variant="soft" color="primary">
194
+
195
+ </Avatar>
196
+ <Stack flex={1}>
197
+ <Stack direction="row" spacing={1} alignItems="center">
198
+ <Typography level="title-sm">김철수</Typography>
199
+ <Typography level="body-xs" color="neutral">
200
+ 2시간 전
201
+ </Typography>
202
+ </Stack>
203
+ <Typography level="body-md">
204
+ 이것은 사용자의 댓글 내용입니다.
205
+ </Typography>
206
+ </Stack>
207
+ </Stack>
208
+ ```
209
+
210
+ ### Team Members
211
+
212
+ 팀 구성원 목록을 표시할 때 사용합니다.
213
+
214
+ ```tsx
215
+ <Stack spacing={3}>
216
+ <Typography level="title-lg">팀 구성원</Typography>
217
+
218
+ {teamMembers.map((member) => (
219
+ <Stack key={member.id} direction="row" spacing={2} alignItems="center">
220
+ <Avatar
221
+ src={member.avatar}
222
+ alt={member.name}
223
+ size="md"
224
+ variant="soft"
225
+ color="primary"
226
+ >
227
+ {member.name.charAt(0)}
228
+ </Avatar>
229
+ <Stack flex={1}>
230
+ <Typography level="title-sm">{member.name}</Typography>
231
+ <Typography level="body-sm" color="neutral">
232
+ {member.role}
233
+ </Typography>
234
+ </Stack>
235
+ <Chip variant="soft" size="sm" color="success">
236
+ 온라인
237
+ </Chip>
238
+ </Stack>
239
+ ))}
240
+ </Stack>
241
+ ```
242
+
243
+ ### Avatar Groups
244
+
245
+ 여러 사용자를 그룹으로 표시할 때 사용합니다.
246
+
247
+ ```tsx
248
+ <Stack direction="row" spacing={-1}>
249
+ <Avatar size="sm" variant="solid" color="primary">김</Avatar>
250
+ <Avatar size="sm" variant="solid" color="success">이</Avatar>
251
+ <Avatar size="sm" variant="solid" color="warning">박</Avatar>
252
+ <Avatar size="sm" variant="outlined" color="neutral">
253
+ <Typography level="body-xs">+3</Typography>
254
+ </Avatar>
255
+ </Stack>
256
+ ```
257
+
258
+ ### Status Indicators
259
+
260
+ 사용자 상태를 함께 표시할 때 사용합니다.
261
+
262
+ ```tsx
263
+ <Box sx={{ position: 'relative', display: 'inline-block' }}>
264
+ <Avatar src="/user-avatar.jpg" alt="사용자" size="lg" />
265
+ <Box
266
+ sx={{
267
+ position: 'absolute',
268
+ bottom: 0,
269
+ right: 0,
270
+ width: 12,
271
+ height: 12,
272
+ bgcolor: 'success.500',
273
+ borderRadius: '50%',
274
+ border: '2px solid',
275
+ borderColor: 'background.body',
276
+ }}
277
+ />
278
+ </Box>
279
+ ```
280
+
281
+ ### Empty State
282
+
283
+ 데이터가 없을 때 플레이스홀더로 사용합니다.
284
+
285
+ ```tsx
286
+ <Stack alignItems="center" spacing={2}>
287
+ <Avatar size="lg" variant="outlined" color="neutral">
288
+ <PersonIcon />
289
+ </Avatar>
290
+ <Typography level="body-md" color="neutral">
291
+ 프로필 이미지를 업로드하세요
292
+ </Typography>
293
+ <Button variant="outlined" size="sm">
294
+ 이미지 선택
295
+ </Button>
296
+ </Stack>
297
+ ```
298
+
299
+ ### List Items
300
+
301
+ 리스트 아이템에서 사용자나 항목을 표현할 때 사용합니다.
302
+
303
+ ```tsx
304
+ <List>
305
+ {users.map((user) => (
306
+ <ListItem key={user.id}>
307
+ <ListItemDecorator>
308
+ <Avatar src={user.avatar} alt={user.name} size="sm">
309
+ {user.name.charAt(0)}
310
+ </Avatar>
311
+ </ListItemDecorator>
312
+ <ListItemContent>
313
+ <Typography level="title-sm">{user.name}</Typography>
314
+ <Typography level="body-sm" color="neutral">
315
+ {user.email}
316
+ </Typography>
317
+ </ListItemContent>
318
+ </ListItem>
319
+ ))}
320
+ </List>
321
+ ```
322
+
323
+ ## Image Handling
324
+
325
+ ### Fallback Behavior
326
+
327
+ 이미지 로드가 실패했을 때 자동으로 이니셜이나 아이콘으로 대체됩니다.
328
+
329
+ ```tsx
330
+ <Avatar
331
+ src="/broken-image-url.jpg"
332
+ alt="김철수"
333
+ color="primary"
334
+ variant="soft"
335
+ >
336
+
337
+ </Avatar>
338
+ ```
339
+
340
+ ### Loading States
341
+
342
+ 이미지 로딩 중에는 children이 표시되다가 이미지 로드 완료 후 이미지로 전환됩니다.
343
+
344
+ ```tsx
345
+ <Avatar
346
+ src="/slow-loading-image.jpg"
347
+ alt="사용자"
348
+ color="neutral"
349
+ variant="soft"
350
+ >
351
+ <PersonIcon />
352
+ </Avatar>
353
+ ```
354
+
355
+ ## Accessibility
356
+
357
+ Avatar 컴포넌트는 다음과 같은 접근성 기능을 제공합니다:
358
+
359
+ ### Image Alt Text
360
+
361
+ 이미지 아바타의 경우 적절한 alt 텍스트를 제공해야 합니다.
362
+
363
+ ```tsx
364
+ <Avatar
365
+ src="/user-profile.jpg"
366
+ alt="김철수의 프로필 사진"
367
+ />
368
+ ```
369
+
370
+ ### Semantic Meaning
371
+
372
+ 아바타가 단순히 장식적 목적이 아닌 의미를 가질 때는 적절한 역할을 제공하세요.
373
+
374
+ ```tsx
375
+ <Avatar
376
+ src="/user-avatar.jpg"
377
+ alt="현재 사용자"
378
+ role="img"
379
+ aria-label="현재 로그인한 사용자의 프로필 이미지"
380
+ />
381
+ ```
382
+
383
+ ### Color Contrast
384
+
385
+ 텍스트 아바타의 경우 충분한 색상 대비를 유지하세요.
386
+
387
+ ```tsx
388
+ // 좋은 대비를 제공하는 색상 조합
389
+ <Avatar variant="solid" color="primary">김</Avatar>
390
+ <Avatar variant="soft" color="neutral">이</Avatar>
391
+ ```
392
+
393
+ ## Best Practices
394
+
395
+ 1. **적절한 크기 선택**: 사용 맥락에 맞는 적절한 크기를 선택하세요.
396
+
397
+ ```tsx
398
+ // ✅ 적절한 크기 사용
399
+ <Avatar size="sm">김</Avatar> // 리스트 아이템에서
400
+ <Avatar size="lg">김</Avatar> // 프로필 페이지에서
401
+
402
+ // ❌ 부적절한 크기 사용
403
+ <Avatar size="lg">김</Avatar> // 네비게이션 바에서 (너무 큼)
404
+ ```
405
+
406
+ 2. **일관된 스타일**: 같은 컨텍스트에서는 일관된 변형과 색상을 사용하세요.
407
+
408
+ 3. **이미지 최적화**: 아바타 이미지는 적절한 크기로 최적화하여 사용하세요.
409
+
410
+ 4. **폴백 제공**: 이미지가 없거나 로드 실패 시를 대비해 적절한 폴백을 제공하세요.
411
+
412
+ ```tsx
413
+ <Avatar src={user.avatar} alt={user.name} color="primary" variant="soft">
414
+ {user.name?.charAt(0) || '?'}
415
+ </Avatar>
416
+ ```
417
+
418
+ 5. **의미적 사용**: 아바타가 누구를 나타내는지 명확하게 식별할 수 있어야 합니다.
419
+
420
+ ## Performance Considerations
421
+
422
+ 1. **이미지 최적화**: 아바타 이미지는 작은 크기로 최적화하여 로딩 속도를 향상시키세요.
423
+
424
+ 2. **Lazy Loading**: 많은 아바타가 있는 페이지에서는 지연 로딩을 고려하세요.
425
+
426
+ 3. **캐싱**: 자주 사용되는 아바타 이미지는 적절히 캐싱하세요.
427
+
428
+ Avatar는 사용자 인터페이스에서 개인을 시각적으로 나타내는 중요한 컴포넌트입니다. 적절한 크기, 색상, 변형을 선택하여 일관되고 접근 가능한 사용자 경험을 제공할 수 있습니다.