@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.
- package/dist/Overview.md +11 -0
- package/dist/components/Menu/Menu.d.ts +2 -5
- package/dist/components/Stepper/Stepper.d.ts +6 -0
- package/dist/components/data-display/Avatar.md +428 -0
- package/dist/components/data-display/Badge.md +315 -0
- package/dist/components/data-display/Chip.md +301 -0
- package/dist/components/data-display/DataTable.md +452 -0
- package/dist/components/data-display/InfoSign.md +160 -0
- package/dist/components/data-display/Markdown.md +17 -0
- package/dist/components/data-display/Table.md +1330 -0
- package/dist/components/data-display/Tooltip.md +444 -0
- package/dist/components/data-display/Typography.md +271 -0
- package/dist/components/data-display/llms.txt +17 -0
- package/dist/components/feedback/Alert.md +663 -0
- package/dist/components/feedback/Dialog.md +33 -0
- package/dist/components/feedback/Modal.md +39 -0
- package/dist/components/feedback/llms.txt +11 -0
- package/dist/components/inputs/Autocomplete.md +103 -0
- package/dist/components/inputs/Button.md +334 -0
- package/dist/components/inputs/ButtonGroup.md +382 -0
- package/dist/components/inputs/Calendar.md +19 -0
- package/dist/components/inputs/Checkbox.md +649 -0
- package/dist/components/inputs/CurrencyInput.md +91 -0
- package/dist/components/inputs/DatePicker.md +67 -0
- package/dist/components/inputs/DateRangePicker.md +55 -0
- package/dist/components/inputs/FilterMenu.md +210 -0
- package/dist/components/inputs/IconButton.md +361 -0
- package/dist/components/inputs/Input.md +283 -0
- package/dist/components/inputs/MonthPicker.md +72 -0
- package/dist/components/inputs/MonthRangePicker.md +70 -0
- package/dist/components/inputs/PercentageInput.md +116 -0
- package/dist/components/inputs/RadioButton.md +350 -0
- package/dist/components/inputs/RadioTileGroup.md +418 -0
- package/dist/components/inputs/Select.md +56 -0
- package/dist/components/inputs/Switch.md +577 -0
- package/dist/components/inputs/Textarea.md +64 -0
- package/dist/components/inputs/Uploader/Uploader.md +238 -0
- package/dist/components/inputs/Uploader/llms.txt +9 -0
- package/dist/components/inputs/llms.txt +31 -0
- package/dist/components/layout/Box.md +997 -0
- package/dist/components/layout/Container.md +23 -0
- package/dist/components/layout/Grid.md +728 -0
- package/dist/components/layout/Stack.md +937 -0
- package/dist/components/layout/llms.txt +12 -0
- package/dist/components/llms.txt +14 -0
- package/dist/components/navigation/Breadcrumbs.md +51 -0
- package/dist/components/navigation/Dropdown.md +768 -0
- package/dist/components/navigation/IconMenuButton.md +35 -0
- package/dist/components/navigation/InsetDrawer.md +133 -0
- package/dist/components/navigation/Link.md +24 -0
- package/dist/components/navigation/Menu.md +957 -0
- package/dist/components/navigation/MenuButton.md +39 -0
- package/dist/components/navigation/NavigationGroup.md +17 -0
- package/dist/components/navigation/NavigationItem.md +17 -0
- package/dist/components/navigation/Navigator.md +17 -0
- package/dist/components/navigation/Pagination.md +17 -0
- package/dist/components/navigation/ProfileMenu.md +34 -0
- package/dist/components/navigation/Stepper.md +108 -0
- package/dist/components/navigation/Tabs.md +34 -0
- package/dist/components/navigation/llms.txt +22 -0
- package/dist/components/surfaces/Accordions.md +96 -0
- package/dist/components/surfaces/Card.md +786 -0
- package/dist/components/surfaces/Divider.md +762 -0
- package/dist/components/surfaces/Sheet.md +900 -0
- package/dist/components/surfaces/llms.txt +12 -0
- package/dist/index.cjs +22 -10
- package/dist/index.js +22 -10
- package/dist/llms.txt +75 -0
- package/framer/index.js +36 -36
- package/package.json +8 -4
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
# DataTable
|
|
2
|
+
|
|
3
|
+
DataTable은 구조화된 데이터를 효율적으로 표시하고 상호작용할 수 있는 고급 테이블 컴포넌트입니다. 정렬, 편집, 페이지네이션, 선택 등 다양한 기능을 제공합니다.
|
|
4
|
+
|
|
5
|
+
## 기본 사용법
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<DataTable
|
|
9
|
+
onPaginationModelChange={fn()}
|
|
10
|
+
onSelectionModelChange={fn()}
|
|
11
|
+
onRowClick={fn()}
|
|
12
|
+
columns={[{
|
|
13
|
+
field: 'dessert',
|
|
14
|
+
headerName: 'Dessert (100g serving)',
|
|
15
|
+
width: '40%'
|
|
16
|
+
}, {
|
|
17
|
+
field: 'calories',
|
|
18
|
+
headerName: 'Calories',
|
|
19
|
+
type: 'number'
|
|
20
|
+
}, {
|
|
21
|
+
field: 'fat',
|
|
22
|
+
headerName: 'Fat (g)',
|
|
23
|
+
type: 'number'
|
|
24
|
+
}, {
|
|
25
|
+
field: 'carbs',
|
|
26
|
+
headerName: 'Carbs (g)',
|
|
27
|
+
type: 'number'
|
|
28
|
+
}, {
|
|
29
|
+
field: 'protein',
|
|
30
|
+
headerName: 'Protein (g)',
|
|
31
|
+
type: 'number'
|
|
32
|
+
}]}
|
|
33
|
+
rows={rows}
|
|
34
|
+
/>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
| Field | Description | Default |
|
|
38
|
+
| -------- | ----------- | ------- |
|
|
39
|
+
| editMode | — | false |
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { DataTable } from '@ceed/ads';
|
|
43
|
+
|
|
44
|
+
const columns = [
|
|
45
|
+
{ field: 'dessert', headerName: 'Dessert (100g serving)', width: '40%' },
|
|
46
|
+
{ field: 'calories', headerName: 'Calories', type: 'number' },
|
|
47
|
+
{ field: 'fat', headerName: 'Fat (g)', type: 'number' },
|
|
48
|
+
{ field: 'carbs', headerName: 'Carbs (g)', type: 'number' },
|
|
49
|
+
{ field: 'protein', headerName: 'Protein (g)', type: 'number' },
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const rows = [
|
|
53
|
+
{ id: 1, dessert: 'Frozen yoghurt', calories: 159, fat: 6.0, carbs: 24, protein: 4.0 },
|
|
54
|
+
{ id: 2, dessert: 'Ice cream sandwich', calories: 237, fat: 9.0, carbs: 37, protein: 4.3 },
|
|
55
|
+
// ... more data
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
<DataTable columns={columns} rows={rows} />;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 주요 기능
|
|
62
|
+
|
|
63
|
+
### 행 상호작용
|
|
64
|
+
|
|
65
|
+
#### 행 호버 효과
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
<DataTable {...args} />
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
호버 효과를 통해 사용자가 현재 포커스하고 있는 행을 명확하게 표시할 수 있습니다.
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
<DataTable columns={columns} rows={rows} hoverRow={true} />
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 체크박스 선택
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
<DataTable {...args} />
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
여러 행을 선택할 수 있는 체크박스 기능을 제공합니다.
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
<DataTable
|
|
87
|
+
columns={columns}
|
|
88
|
+
rows={rows}
|
|
89
|
+
checkboxSelection={true}
|
|
90
|
+
selectionModel={selectedRows}
|
|
91
|
+
onSelectionModelChange={setSelectedRows}
|
|
92
|
+
/>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 백오피스 스타일 테이블
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
<DataTable {...args} selectionModel={selectionModel} onSelectionModelChange={useCallback((v: any, ...params: any[]) => {
|
|
99
|
+
setSelectionModel(v);
|
|
100
|
+
args.onSelectionModelChange?.(v, ...params);
|
|
101
|
+
}, [args.onSelectionModelChange])} />
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
관리 도구나 대시보드에서 사용하기 적합한 고급 스타일링과 기능을 제공합니다:
|
|
105
|
+
|
|
106
|
+
- 고정 헤더 (stickyHeader)
|
|
107
|
+
- 스트라이프 패턴 (stripe="even")
|
|
108
|
+
- 텍스트 줄바꿈 방지 (noWrap)
|
|
109
|
+
- 커스텀 툴바
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
<DataTable
|
|
113
|
+
columns={columns}
|
|
114
|
+
rows={rows}
|
|
115
|
+
checkboxSelection
|
|
116
|
+
hoverRow
|
|
117
|
+
noWrap
|
|
118
|
+
stripe="even"
|
|
119
|
+
stickyHeader
|
|
120
|
+
slots={{
|
|
121
|
+
toolbar: () => (
|
|
122
|
+
<Stack direction="row" gap={1}>
|
|
123
|
+
<Button variant="plain" color="neutral" size="sm">
|
|
124
|
+
Action
|
|
125
|
+
</Button>
|
|
126
|
+
<Button variant="plain" color="danger" size="sm">
|
|
127
|
+
Delete
|
|
128
|
+
</Button>
|
|
129
|
+
</Stack>
|
|
130
|
+
),
|
|
131
|
+
}}
|
|
132
|
+
slotProps={{
|
|
133
|
+
background: { style: { height: '300px' } },
|
|
134
|
+
}}
|
|
135
|
+
/>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 로딩 상태
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
<DataTable {...args} />
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
데이터 로딩 중일 때의 상태를 표시합니다.
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
<DataTable columns={columns} rows={rows} loading={true} />
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 페이지네이션
|
|
151
|
+
|
|
152
|
+
```tsx
|
|
153
|
+
<DataTable
|
|
154
|
+
onPaginationModelChange={fn()}
|
|
155
|
+
onSelectionModelChange={fn()}
|
|
156
|
+
onRowClick={fn()}
|
|
157
|
+
columns={[{
|
|
158
|
+
field: 'dessert',
|
|
159
|
+
headerName: 'Dessert (100g serving)',
|
|
160
|
+
width: '40%'
|
|
161
|
+
}, {
|
|
162
|
+
field: 'calories',
|
|
163
|
+
headerName: 'Calories',
|
|
164
|
+
type: 'number'
|
|
165
|
+
}, {
|
|
166
|
+
field: 'fat',
|
|
167
|
+
headerName: 'Fat (g)',
|
|
168
|
+
type: 'number'
|
|
169
|
+
}, {
|
|
170
|
+
field: 'carbs',
|
|
171
|
+
headerName: 'Carbs (g)',
|
|
172
|
+
type: 'number'
|
|
173
|
+
}, {
|
|
174
|
+
field: 'protein',
|
|
175
|
+
headerName: 'Protein (g)',
|
|
176
|
+
type: 'number'
|
|
177
|
+
}]}
|
|
178
|
+
rows={[...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows, ...rows].map((row, index) => ({
|
|
179
|
+
...row,
|
|
180
|
+
id: index
|
|
181
|
+
}))}
|
|
182
|
+
pagination
|
|
183
|
+
noWrap
|
|
184
|
+
slotProps={{
|
|
185
|
+
background: {
|
|
186
|
+
style: {
|
|
187
|
+
height: '300px'
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}}
|
|
191
|
+
/>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
대량의 데이터를 페이지 단위로 나누어 표시할 수 있습니다.
|
|
195
|
+
|
|
196
|
+
```tsx
|
|
197
|
+
<DataTable
|
|
198
|
+
columns={columns}
|
|
199
|
+
rows={rows}
|
|
200
|
+
pagination={true}
|
|
201
|
+
paginationModel={{ page: 0, pageSize: 20 }}
|
|
202
|
+
onPaginationModelChange={setPaginationModel}
|
|
203
|
+
/>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### 빈 데이터 상태
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
<DataTable
|
|
210
|
+
onPaginationModelChange={fn()}
|
|
211
|
+
onSelectionModelChange={fn()}
|
|
212
|
+
onRowClick={fn()}
|
|
213
|
+
columns={[{
|
|
214
|
+
field: 'dessert',
|
|
215
|
+
headerName: 'Dessert (100g serving)',
|
|
216
|
+
width: '40%'
|
|
217
|
+
}, {
|
|
218
|
+
field: 'calories',
|
|
219
|
+
headerName: 'Calories',
|
|
220
|
+
type: 'number'
|
|
221
|
+
}, {
|
|
222
|
+
field: 'fat',
|
|
223
|
+
headerName: 'Fat (g)',
|
|
224
|
+
type: 'number'
|
|
225
|
+
}, {
|
|
226
|
+
field: 'carbs',
|
|
227
|
+
headerName: 'Carbs (g)',
|
|
228
|
+
type: 'number'
|
|
229
|
+
}, {
|
|
230
|
+
field: 'protein',
|
|
231
|
+
headerName: 'Protein (g)',
|
|
232
|
+
type: 'number'
|
|
233
|
+
}]}
|
|
234
|
+
rows={[]}
|
|
235
|
+
pagination
|
|
236
|
+
noWrap
|
|
237
|
+
slotProps={{
|
|
238
|
+
background: {
|
|
239
|
+
style: {
|
|
240
|
+
height: '300px'
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}}
|
|
244
|
+
/>
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
데이터가 없을 때의 상태를 적절하게 표시합니다.
|
|
248
|
+
|
|
249
|
+
## 고급 기능
|
|
250
|
+
|
|
251
|
+
### 커스텀 셀 렌더링
|
|
252
|
+
|
|
253
|
+
```tsx
|
|
254
|
+
<DataTable rows={useMemo(() => [...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3, ...rows3].map((row, i) => ({
|
|
255
|
+
...row,
|
|
256
|
+
id: i + 1
|
|
257
|
+
})), [])} columns={columns} checkboxSelection stickyHeader stripe="even" noWrap slotProps={{
|
|
258
|
+
background: {
|
|
259
|
+
style: {
|
|
260
|
+
height: '600px'
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}} />
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
각 셀의 내용을 커스터마이징할 수 있습니다:
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
const columns = [
|
|
270
|
+
{ field: 'id', headerName: 'ID' },
|
|
271
|
+
{
|
|
272
|
+
field: 'dessert',
|
|
273
|
+
renderCell: ({ value, row }) => <Link href={row.storeLink}>{value}</Link>,
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
field: 'location',
|
|
277
|
+
renderCell: ({ value }) => value.join(', '),
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
field: 'expectedSales',
|
|
281
|
+
renderCell: ({ value }) => (value ? `$${value.toFixed(2)}` : ''),
|
|
282
|
+
},
|
|
283
|
+
];
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 편집 가능한 테이블
|
|
287
|
+
|
|
288
|
+
```tsx
|
|
289
|
+
<div>
|
|
290
|
+
<DataTable rows={rows3} columns={columns} checkboxSelection={false} noWrap editMode />
|
|
291
|
+
<Button onClick={() => {
|
|
292
|
+
console.log(editedRows);
|
|
293
|
+
setIsCellEditable(true);
|
|
294
|
+
}}>
|
|
295
|
+
Submit
|
|
296
|
+
</Button>
|
|
297
|
+
</div>
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
인라인 편집 기능을 제공하며, 다양한 입력 타입을 지원합니다:
|
|
301
|
+
|
|
302
|
+
- **text**: 기본 텍스트 입력
|
|
303
|
+
- **number/currency**: 숫자/통화 입력
|
|
304
|
+
- **select**: 드롭다운 선택
|
|
305
|
+
- **autocomplete**: 자동완성 입력
|
|
306
|
+
- **date**: 날짜 선택
|
|
307
|
+
- **longText**: 긴 텍스트 입력
|
|
308
|
+
- **link**: 링크 렌더링
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
const columns = [
|
|
312
|
+
{
|
|
313
|
+
field: 'dessert',
|
|
314
|
+
type: 'autocomplete',
|
|
315
|
+
componentProps: () => ({
|
|
316
|
+
options: ['Frozen yoghurt', 'Ice cream sandwich', 'Eclair'],
|
|
317
|
+
}),
|
|
318
|
+
required: true,
|
|
319
|
+
onCellEditStop: handleCellEdit,
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
field: 'status',
|
|
323
|
+
type: 'select',
|
|
324
|
+
componentProps: {
|
|
325
|
+
options: ['Opened', 'Preparing', 'Closed'],
|
|
326
|
+
},
|
|
327
|
+
onCellEditStop: handleCellEdit,
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
field: 'expectedSales',
|
|
331
|
+
type: 'currency',
|
|
332
|
+
onCellEditStop: handleCellEdit,
|
|
333
|
+
},
|
|
334
|
+
];
|
|
335
|
+
|
|
336
|
+
<DataTable rows={rows} columns={columns} editMode={true} />;
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### 조건부 편집
|
|
340
|
+
|
|
341
|
+
```tsx
|
|
342
|
+
<div>
|
|
343
|
+
<Typography level="title-lg" textColor="text.secondary">
|
|
344
|
+
expectedSales 100초과만 수정 가능
|
|
345
|
+
</Typography>
|
|
346
|
+
<DataTable rows={rows} columns={columns} checkboxSelection={false} noWrap editMode />
|
|
347
|
+
<Button onClick={() => {
|
|
348
|
+
console.log(rows);
|
|
349
|
+
}}>
|
|
350
|
+
Submit
|
|
351
|
+
</Button>
|
|
352
|
+
</div>
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
특정 조건에 따라 셀의 편집 가능 여부를 결정할 수 있습니다:
|
|
356
|
+
|
|
357
|
+
```tsx
|
|
358
|
+
const columns = [
|
|
359
|
+
{
|
|
360
|
+
field: 'dessert',
|
|
361
|
+
type: 'autocomplete',
|
|
362
|
+
isCellEditable: ({ row }) => row.expectedSales > 100,
|
|
363
|
+
onCellEditStop: handleRowChange,
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
field: 'expectedSales',
|
|
367
|
+
type: 'currency',
|
|
368
|
+
isCellEditable: true, // 항상 편집 가능
|
|
369
|
+
onCellEditStop: handleRowChange,
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
field: 'note',
|
|
373
|
+
type: 'longText',
|
|
374
|
+
isCellEditable: ({ row }) => row.expectedSales > 100,
|
|
375
|
+
},
|
|
376
|
+
];
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## 정렬 기능
|
|
380
|
+
|
|
381
|
+
### 기본 정렬
|
|
382
|
+
|
|
383
|
+
```tsx
|
|
384
|
+
<DataTable rows={rows4} columns={columns} />
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
열 헤더를 클릭하여 데이터를 정렬할 수 있습니다. 오름차순 → 내림차순 → 정렬 해제 순서로 동작합니다.
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
const columns = [
|
|
391
|
+
{ field: 'id', headerName: 'ID' },
|
|
392
|
+
{ field: 'number', headerName: 'Number Sort', type: 'number' },
|
|
393
|
+
{ field: 'string', headerName: 'String Sort' },
|
|
394
|
+
{ field: 'date', headerName: 'Date Sort', renderCell: ({ value }) => value.toLocaleDateString() },
|
|
395
|
+
{
|
|
396
|
+
field: 'object',
|
|
397
|
+
headerName: 'Object Sort',
|
|
398
|
+
renderCell: ({ value }) => value.age,
|
|
399
|
+
type: 'number',
|
|
400
|
+
sortComparator: ({ rowA, rowB }) => rowA.object.age - rowB.object.age,
|
|
401
|
+
},
|
|
402
|
+
];
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### 커스텀 정렬 순서
|
|
406
|
+
|
|
407
|
+
```tsx
|
|
408
|
+
<DataTable rows={rows4} columns={columns} sortOrder={['desc', 'asc']} />
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
기본 정렬 순서를 변경할 수 있습니다:
|
|
412
|
+
|
|
413
|
+
```tsx
|
|
414
|
+
<DataTable
|
|
415
|
+
rows={rows}
|
|
416
|
+
columns={columns}
|
|
417
|
+
sortOrder={['desc', 'asc']} // 내림차순 먼저
|
|
418
|
+
/>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
### 정렬 비활성화
|
|
422
|
+
|
|
423
|
+
```tsx
|
|
424
|
+
<DataTable rows={rows4} columns={columns} />
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
특정 열의 정렬을 비활성화할 수 있습니다:
|
|
428
|
+
|
|
429
|
+
```tsx
|
|
430
|
+
const columns = [
|
|
431
|
+
{ field: 'id', headerName: 'ID' },
|
|
432
|
+
{ field: 'number', headerName: 'Number Sort', type: 'number', sortable: false },
|
|
433
|
+
];
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### 열별 정렬 순서
|
|
437
|
+
|
|
438
|
+
```tsx
|
|
439
|
+
<DataTable rows={rows4} columns={columns} />
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
각 열마다 다른 정렬 순서를 지정할 수 있습니다.
|
|
443
|
+
|
|
444
|
+
## 실시간 데이터 업데이트
|
|
445
|
+
|
|
446
|
+
```tsx
|
|
447
|
+
<DataTable rows={editRows} columns={columns} checkboxSelection={false} noWrap />
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
테이블 데이터를 실시간으로 업데이트하고 변경 사항을 즉시 반영할 수 있습니다.
|
|
451
|
+
|
|
452
|
+
DataTable은 현대적인 데이터 관리 애플리케이션에서 요구되는 모든 기능을 제공하는 강력한 컴포넌트입니다. 간단한 데이터 표시부터 복잡한 편집 가능한 테이블까지 다양한 용도로 활용할 수 있습니다.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# InfoSign
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
InfoSign 컴포넌트는 사용자에게 추가 정보를 제공하기 위한 툴팁 아이콘입니다. 물음표 아이콘을 클릭하거나 호버할 때 상세한 설명이나 도움말을 표시할 수 있습니다. 폼 필드, 설정 항목, 복잡한 기능에 대한 설명을 제공할 때 유용합니다.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
<InfoSign
|
|
9
|
+
message={"Sarah Davis, John Doe\nJohn Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John DoeJohn Doe, John Doe, John Doe, John Doe, John Doe"}
|
|
10
|
+
placement="top"
|
|
11
|
+
/>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Field | Description | Default |
|
|
15
|
+
| --------- | ----------- | ------- |
|
|
16
|
+
| placement | — | "top" |
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { InfoSign } from '@ceed/ads';
|
|
22
|
+
|
|
23
|
+
function MyComponent() {
|
|
24
|
+
return (
|
|
25
|
+
<div>
|
|
26
|
+
<label>
|
|
27
|
+
복잡한 설정 항목
|
|
28
|
+
<InfoSign
|
|
29
|
+
message="이 설정은 시스템 전체 성능에 영향을 줄 수 있습니다. 변경하기 전에 관리자와 상의하세요."
|
|
30
|
+
/>
|
|
31
|
+
</label>
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
### Basic Usage
|
|
40
|
+
|
|
41
|
+
가장 기본적인 InfoSign 사용법입니다.
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<InfoSign
|
|
45
|
+
message={"Sarah Davis, John Doe\nJohn Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John Doe, John DoeJohn Doe, John Doe, John Doe, John Doe, John Doe"}
|
|
46
|
+
placement="top"
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Common Use Cases
|
|
51
|
+
|
|
52
|
+
### Form Field Help
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<FormControl>
|
|
56
|
+
<FormLabel>
|
|
57
|
+
비밀번호 복잡도
|
|
58
|
+
<InfoSign
|
|
59
|
+
message="비밀번호는 최소 8자 이상이며, 대문자, 소문자, 숫자, 특수문자를 포함해야 합니다."
|
|
60
|
+
placement="top"
|
|
61
|
+
/>
|
|
62
|
+
</FormLabel>
|
|
63
|
+
<Input type="password" />
|
|
64
|
+
</FormControl>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Settings Explanation
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
<Stack spacing={2}>
|
|
71
|
+
<Box>
|
|
72
|
+
<Typography level="title-sm">
|
|
73
|
+
자동 저장
|
|
74
|
+
<InfoSign
|
|
75
|
+
message="이 기능을 활성화하면 5분마다 자동으로 작업 내용이 저장됩니다."
|
|
76
|
+
placement="right"
|
|
77
|
+
/>
|
|
78
|
+
</Typography>
|
|
79
|
+
<Switch />
|
|
80
|
+
</Box>
|
|
81
|
+
</Stack>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Complex Data Explanation
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
<Card>
|
|
88
|
+
<CardContent>
|
|
89
|
+
<Typography level="title-md">
|
|
90
|
+
처리량 지표
|
|
91
|
+
<InfoSign
|
|
92
|
+
message="처리량은 최근 24시간 동안의 평균 요청 수를 나타냅니다. 이 값이 높을수록 시스템이 더 많은 작업을 처리하고 있다는 의미입니다."
|
|
93
|
+
placement="bottom"
|
|
94
|
+
/>
|
|
95
|
+
</Typography>
|
|
96
|
+
<Typography level="h2">1,234 req/min</Typography>
|
|
97
|
+
</CardContent>
|
|
98
|
+
</Card>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Table Header Help
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
<Table>
|
|
105
|
+
<thead>
|
|
106
|
+
<tr>
|
|
107
|
+
<th>
|
|
108
|
+
사용자 ID
|
|
109
|
+
<InfoSign message="시스템에서 자동 생성된 고유 식별자입니다." />
|
|
110
|
+
</th>
|
|
111
|
+
<th>
|
|
112
|
+
마지막 활동
|
|
113
|
+
<InfoSign message="사용자가 마지막으로 로그인하거나 활동한 시간입니다." />
|
|
114
|
+
</th>
|
|
115
|
+
<th>상태</th>
|
|
116
|
+
</tr>
|
|
117
|
+
</thead>
|
|
118
|
+
</Table>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Props
|
|
122
|
+
|
|
123
|
+
### placement
|
|
124
|
+
|
|
125
|
+
툴팁이 나타나는 위치를 설정할 수 있습니다.
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<InfoSign placement="top" message="위쪽에 표시" />
|
|
129
|
+
<InfoSign placement="bottom" message="아래쪽에 표시" />
|
|
130
|
+
<InfoSign placement="left" message="왼쪽에 표시" />
|
|
131
|
+
<InfoSign placement="right" message="오른쪽에 표시" />
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### message
|
|
135
|
+
|
|
136
|
+
표시할 메시지 내용입니다. 긴 텍스트도 지원합니다.
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
<InfoSign
|
|
140
|
+
message="여러 줄로 된 긴 설명문도 표시할 수 있습니다.\n줄바꿈도 지원되므로 상세한 설명을 제공할 수 있습니다."
|
|
141
|
+
/>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Best Practices
|
|
145
|
+
|
|
146
|
+
1. **간결한 메시지**: 핵심 정보만 포함하여 사용자가 빠르게 이해할 수 있도록 합니다.
|
|
147
|
+
|
|
148
|
+
2. **적절한 배치**: 설명하려는 요소 바로 옆에 배치하여 연관성을 명확히 합니다.
|
|
149
|
+
|
|
150
|
+
3. **일관된 사용**: 비슷한 성격의 정보에는 일관되게 InfoSign을 사용합니다.
|
|
151
|
+
|
|
152
|
+
4. **과도한 사용 금지**: 모든 요소에 InfoSign을 붙이면 인터페이스가 복잡해집니다.
|
|
153
|
+
|
|
154
|
+
## Accessibility
|
|
155
|
+
|
|
156
|
+
- InfoSign은 키보드 탐색이 가능합니다
|
|
157
|
+
- 스크린 리더가 메시지 내용을 읽을 수 있습니다
|
|
158
|
+
- ARIA 라벨이 자동으로 적용됩니다
|
|
159
|
+
|
|
160
|
+
InfoSign은 사용자에게 필요한 추가 정보를 제공하면서도 인터페이스를 깔끔하게 유지하는 데 도움이 되는 유용한 컴포넌트입니다.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Markdown
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
<Markdown
|
|
7
|
+
content="This is markdown with **bold text** and *italic text* and ||accent color||"
|
|
8
|
+
/>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Field | Description | Default |
|
|
12
|
+
| ----------------- | ----------- | ------- |
|
|
13
|
+
| content | — | — |
|
|
14
|
+
| defaultLevel | — | — |
|
|
15
|
+
| defaultLinkAction | — | — |
|
|
16
|
+
| accentColor | — | — |
|
|
17
|
+
| textAlign | — | — |
|