@jk-core/components 1.2.1 → 1.2.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/README.md +431 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -71,3 +71,434 @@ onChange={setDate}
|
|
|
71
71
|
|
|
72
72
|
Calendar 컴포넌트는 CSS 모듈을 사용하여 스타일링되어 있습니다. 커스텀 스타일을 적용하려면 `className` prop을 사용하거나 컴포넌트의 CSS 모듈 파일을 직접 수정하세요.
|
|
73
73
|
|
|
74
|
+
<br/>
|
|
75
|
+
<br/>
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Accordion
|
|
80
|
+
|
|
81
|
+
클릭 시 내용이 펼쳐지거나 접히는 아코디언 UI 컴포넌트입니다.
|
|
82
|
+
|
|
83
|
+
<br/>
|
|
84
|
+
|
|
85
|
+
### Props
|
|
86
|
+
|
|
87
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
88
|
+
|------|------|--------|------|
|
|
89
|
+
| children | React.ReactNode | - | 아코디언 본문에 표시할 내용 |
|
|
90
|
+
|
|
91
|
+
<br/>
|
|
92
|
+
|
|
93
|
+
### 사용법
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
import { Accordion } from '@jk-core/components';
|
|
97
|
+
|
|
98
|
+
<Accordion>
|
|
99
|
+
<p>펼쳐지는 내용입니다.</p>
|
|
100
|
+
</Accordion>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
<br/>
|
|
104
|
+
<br/>
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Breadcrumbs
|
|
109
|
+
|
|
110
|
+
여러 개의 `BreadcrumbsItem`을 자식으로 받아 경로(브레드크럼)를 표시합니다. 각 항목 클릭 시 해당 경로로 이동합니다.
|
|
111
|
+
|
|
112
|
+
<br/>
|
|
113
|
+
|
|
114
|
+
### Breadcrumbs Props
|
|
115
|
+
|
|
116
|
+
| Prop | 타입 | 설명 |
|
|
117
|
+
|------|------|------|
|
|
118
|
+
| children | React.ReactNode | `BreadcrumbsItem` 컴포넌트들 |
|
|
119
|
+
|
|
120
|
+
### BreadcrumbsItem Props
|
|
121
|
+
|
|
122
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
123
|
+
|------|------|--------|------|
|
|
124
|
+
| children | React.ReactNode | - | 표시할 텍스트 |
|
|
125
|
+
| path | string | - | 클릭 시 이동할 경로 |
|
|
126
|
+
| root | boolean | false | true일 때 홈 아이콘 표시 |
|
|
127
|
+
|
|
128
|
+
<br/>
|
|
129
|
+
|
|
130
|
+
### 사용법
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
import { Breadcrumbs, BreadcrumbsItem } from '@jk-core/components';
|
|
134
|
+
|
|
135
|
+
<Breadcrumbs>
|
|
136
|
+
<BreadcrumbsItem path="/" root>홈</BreadcrumbsItem>
|
|
137
|
+
<BreadcrumbsItem path="/products">상품</BreadcrumbsItem>
|
|
138
|
+
<BreadcrumbsItem path="/products/123">상품 상세</BreadcrumbsItem>
|
|
139
|
+
</Breadcrumbs>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
<br/>
|
|
143
|
+
<br/>
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Button
|
|
148
|
+
|
|
149
|
+
등급(primary, secondary, tertiary, cancel)과 로딩·비활성화 상태를 지원하는 공용 버튼 컴포넌트입니다.
|
|
150
|
+
|
|
151
|
+
<br/>
|
|
152
|
+
|
|
153
|
+
### Props
|
|
154
|
+
|
|
155
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
156
|
+
|------|------|--------|------|
|
|
157
|
+
| children | ReactNode | - | 버튼 내용 |
|
|
158
|
+
| grade | 'tertiary' \| 'secondary' \| 'primary' \| 'cancel' | 'primary' | 버튼 스타일 등급 |
|
|
159
|
+
| disabled | boolean | false | 비활성화 여부 |
|
|
160
|
+
| className | string | '' | 추가 CSS 클래스 |
|
|
161
|
+
| isLoading | boolean | false | 로딩 중일 때 내부 스피너 표시 |
|
|
162
|
+
| onClick | (e: React.MouseEvent<HTMLButtonElement>) => void | - | 클릭 핸들러 |
|
|
163
|
+
|
|
164
|
+
`React.ButtonHTMLAttributes<HTMLButtonElement>` 의 나머지 속성도 사용할 수 있습니다.
|
|
165
|
+
|
|
166
|
+
<br/>
|
|
167
|
+
|
|
168
|
+
### 사용법
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
import { Button } from '@jk-core/components';
|
|
172
|
+
|
|
173
|
+
<Button grade="primary" onClick={() => {}}>저장</Button>
|
|
174
|
+
<Button grade="secondary" disabled>비활성</Button>
|
|
175
|
+
<Button isLoading>처리 중...</Button>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
<br/>
|
|
179
|
+
<br/>
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Card
|
|
184
|
+
|
|
185
|
+
제목과 본문 영역을 가진 카드 컨테이너 컴포넌트입니다.
|
|
186
|
+
|
|
187
|
+
<br/>
|
|
188
|
+
|
|
189
|
+
### Props
|
|
190
|
+
|
|
191
|
+
| Prop | 타입 | 설명 |
|
|
192
|
+
|------|------|------|
|
|
193
|
+
| title | string \| React.ReactNode | 카드 제목 |
|
|
194
|
+
| children | React.ReactNode | 카드 본문 (선택) |
|
|
195
|
+
|
|
196
|
+
<br/>
|
|
197
|
+
|
|
198
|
+
### 사용법
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
import { Card } from '@jk-core/components';
|
|
202
|
+
|
|
203
|
+
<Card title="카드 제목">
|
|
204
|
+
<p>카드 본문 내용입니다.</p>
|
|
205
|
+
</Card>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
<br/>
|
|
209
|
+
<br/>
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Carousel
|
|
214
|
+
|
|
215
|
+
슬라이드 형태로 콘텐츠를 보여주는 캐러셀 컴포넌트입니다. 무한 루프, 드래그/스와이프, 자동 재생, 키보드·터치 지원을 제공합니다.
|
|
216
|
+
|
|
217
|
+
<br/>
|
|
218
|
+
|
|
219
|
+
### Props
|
|
220
|
+
|
|
221
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
222
|
+
|------|------|--------|------|
|
|
223
|
+
| children | ReactNode[] | - | 슬라이드로 표시할 요소 배열 |
|
|
224
|
+
| autoPlay | boolean | false | 자동 재생 여부 |
|
|
225
|
+
| autoPlayInterval | number | 3000 | 자동 재생 간격(ms) |
|
|
226
|
+
| showIndicators | boolean | true | 인디케이터(점) 표시 여부 |
|
|
227
|
+
| showNavigation | boolean | true | 이전/다음 버튼 표시 여부 |
|
|
228
|
+
| className | string | '' | 추가 CSS 클래스 |
|
|
229
|
+
|
|
230
|
+
<br/>
|
|
231
|
+
|
|
232
|
+
### 사용법
|
|
233
|
+
|
|
234
|
+
```tsx
|
|
235
|
+
import { Carousel } from '@jk-core/components';
|
|
236
|
+
|
|
237
|
+
<Carousel autoPlay autoPlayInterval={5000} showIndicators showNavigation>
|
|
238
|
+
<div>슬라이드 1</div>
|
|
239
|
+
<div>슬라이드 2</div>
|
|
240
|
+
<div>슬라이드 3</div>
|
|
241
|
+
</Carousel>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
<br/>
|
|
245
|
+
<br/>
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## DropDown
|
|
250
|
+
|
|
251
|
+
선택 가능한 목록을 제공하는 드롭다운 컴포넌트입니다. 선택 시 버튼에 선택된 값이 표시되며, 필터(검색) 기능을 옵션으로 사용할 수 있습니다.
|
|
252
|
+
|
|
253
|
+
<br/>
|
|
254
|
+
|
|
255
|
+
### Props
|
|
256
|
+
|
|
257
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
258
|
+
|------|------|--------|------|
|
|
259
|
+
| list | string[] | - | 선택 가능한 목록 |
|
|
260
|
+
| value | string | - | 버튼에 표시할 값(제어용) |
|
|
261
|
+
| onSelect | (item: string, index: number) => void | - | 항목 선택 시 호출되는 함수 |
|
|
262
|
+
| filter | boolean | - | 필터(검색) 활성화 여부 |
|
|
263
|
+
| placeholder | string | '선택하세요' | 플레이스홀더 텍스트 |
|
|
264
|
+
| style | React.CSSProperties | - | 버튼 영역 인라인 스타일 |
|
|
265
|
+
|
|
266
|
+
<br/>
|
|
267
|
+
|
|
268
|
+
### 사용법
|
|
269
|
+
|
|
270
|
+
```tsx
|
|
271
|
+
import { DropDown } from '@jk-core/components';
|
|
272
|
+
|
|
273
|
+
const options = ['옵션1', '옵션2', '옵션3'];
|
|
274
|
+
|
|
275
|
+
<DropDown
|
|
276
|
+
list={options}
|
|
277
|
+
placeholder="선택하세요"
|
|
278
|
+
filter
|
|
279
|
+
onSelect={(item, index) => console.log(item, index)}
|
|
280
|
+
/>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
<br/>
|
|
284
|
+
<br/>
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Pagination
|
|
289
|
+
|
|
290
|
+
총 페이지 수와 현재 페이지를 기준으로 페이지 번호를 표시하고, 클릭 시 해당 페이지로 이동할 수 있는 페이지네이션 컴포넌트입니다.
|
|
291
|
+
|
|
292
|
+
<br/>
|
|
293
|
+
|
|
294
|
+
### Props
|
|
295
|
+
|
|
296
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
297
|
+
|------|------|--------|------|
|
|
298
|
+
| totalPage | number | - | 총 페이지 수 |
|
|
299
|
+
| currentPage | number | - | 현재 페이지 |
|
|
300
|
+
| onPageClick | (page: number) => void | - | 페이지 클릭 핸들러 |
|
|
301
|
+
| large | boolean | false | true일 때 표시되는 페이지 개수 확대(5 → 7) |
|
|
302
|
+
|
|
303
|
+
<br/>
|
|
304
|
+
|
|
305
|
+
### 사용법
|
|
306
|
+
|
|
307
|
+
```tsx
|
|
308
|
+
import { Pagination } from '@jk-core/components';
|
|
309
|
+
|
|
310
|
+
const [page, setPage] = useState(1);
|
|
311
|
+
|
|
312
|
+
<Pagination
|
|
313
|
+
totalPage={20}
|
|
314
|
+
currentPage={page}
|
|
315
|
+
onPageClick={setPage}
|
|
316
|
+
large={false}
|
|
317
|
+
/>
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
<br/>
|
|
321
|
+
<br/>
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## RollingBanner
|
|
326
|
+
|
|
327
|
+
자식 요소를 가로 또는 세로로 무한 스크롤하는 롤링 배너(마키) 컴포넌트입니다. 그라데이션 마스크와 속도·방향 설정을 지원합니다.
|
|
328
|
+
|
|
329
|
+
<br/>
|
|
330
|
+
|
|
331
|
+
### Props
|
|
332
|
+
|
|
333
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
334
|
+
|------|------|--------|------|
|
|
335
|
+
| children | React.ReactNode \| React.ReactNode[] | - | 스크롤할 콘텐츠 |
|
|
336
|
+
| speed | number | 50 | 스크롤 속도(픽셀/초) |
|
|
337
|
+
| reverse | boolean | false | 역방향 재생 여부 |
|
|
338
|
+
| direction | 'row' \| 'column' | 'row' | 스크롤 방향 |
|
|
339
|
+
| gradient | boolean | true | 그라데이션 마스크 사용 여부 |
|
|
340
|
+
| gradientColor | string | 'white' | 그라데이션 색상 |
|
|
341
|
+
| gradientWidth | number \| string | 200 | 그라데이션 너비(px 또는 문자열) |
|
|
342
|
+
|
|
343
|
+
<br/>
|
|
344
|
+
|
|
345
|
+
### 사용법
|
|
346
|
+
|
|
347
|
+
```tsx
|
|
348
|
+
import { RollingBanner } from '@jk-core/components';
|
|
349
|
+
|
|
350
|
+
<RollingBanner speed={50} direction="row" gradient>
|
|
351
|
+
<span>항목 1</span>
|
|
352
|
+
<span>항목 2</span>
|
|
353
|
+
<span>항목 3</span>
|
|
354
|
+
</RollingBanner>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
<br/>
|
|
358
|
+
<br/>
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## SegmentButton
|
|
363
|
+
|
|
364
|
+
여러 옵션 중 하나를 선택하는 세그먼트 형태의 버튼 그룹입니다. 선택된 항목이 시각적으로 강조됩니다.
|
|
365
|
+
|
|
366
|
+
<br/>
|
|
367
|
+
|
|
368
|
+
### Props
|
|
369
|
+
|
|
370
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
371
|
+
|------|------|--------|------|
|
|
372
|
+
| option | Array<{ text: string; onClick: () => void }> | - | 각 옵션의 텍스트와 클릭 핸들러 |
|
|
373
|
+
| selected | number | 0 | 선택된 옵션 인덱스(제어용) |
|
|
374
|
+
| width | string | 'auto' | 버튼 그룹 너비 |
|
|
375
|
+
| stretch | boolean | false | true일 때 부모 너비 전체 사용 |
|
|
376
|
+
|
|
377
|
+
<br/>
|
|
378
|
+
|
|
379
|
+
### 사용법
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
import { SegmentButton } from '@jk-core/components';
|
|
383
|
+
|
|
384
|
+
const options = [
|
|
385
|
+
{ text: '오늘', onClick: () => setDate(new Date()) },
|
|
386
|
+
{ text: '내일', onClick: () => setDate(addDays(new Date(), 1)) },
|
|
387
|
+
];
|
|
388
|
+
|
|
389
|
+
<SegmentButton option={options} selected={0} stretch />
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
<br/>
|
|
393
|
+
<br/>
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Skeleton
|
|
398
|
+
|
|
399
|
+
로딩 상태를 나타내는 스켈레톤 UI 컴포넌트입니다. 모양(circle, rectangle, round)과 애니메이션(glow, blink)을 선택할 수 있습니다.
|
|
400
|
+
|
|
401
|
+
<br/>
|
|
402
|
+
|
|
403
|
+
### Props
|
|
404
|
+
|
|
405
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
406
|
+
|------|------|--------|------|
|
|
407
|
+
| shape | 'circle' \| 'rectangle' \| 'round' | 'rectangle' | 스켈레톤 모양 |
|
|
408
|
+
| width | string \| number | '100%' | 너비 |
|
|
409
|
+
| height | string \| number | '20px' | 높이 |
|
|
410
|
+
| animation | 'glow' \| 'blink' | 'glow' | 로딩 애니메이션 종류 |
|
|
411
|
+
|
|
412
|
+
<br/>
|
|
413
|
+
|
|
414
|
+
### 사용법
|
|
415
|
+
|
|
416
|
+
```tsx
|
|
417
|
+
import { Skeleton } from '@jk-core/components';
|
|
418
|
+
|
|
419
|
+
<Skeleton shape="rectangle" width="100%" height={20} />
|
|
420
|
+
<Skeleton shape="circle" width={40} height={40} />
|
|
421
|
+
<Skeleton shape="round" animation="blink" />
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
<br/>
|
|
425
|
+
<br/>
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## SwitchButton
|
|
430
|
+
|
|
431
|
+
켜짐/꺼짐 상태를 전환하는 스위치 버튼 컴포넌트입니다.
|
|
432
|
+
|
|
433
|
+
<br/>
|
|
434
|
+
|
|
435
|
+
### Props
|
|
436
|
+
|
|
437
|
+
| Prop | 타입 | 기본값 | 설명 |
|
|
438
|
+
|------|------|--------|------|
|
|
439
|
+
| checked | boolean | false | 스위치 켜짐 여부 |
|
|
440
|
+
| onChange | (value: boolean) => void | () => {} | 상태 변경 시 호출되는 함수 |
|
|
441
|
+
|
|
442
|
+
<br/>
|
|
443
|
+
|
|
444
|
+
### 사용법
|
|
445
|
+
|
|
446
|
+
```tsx
|
|
447
|
+
import { SwitchButton } from '@jk-core/components';
|
|
448
|
+
|
|
449
|
+
const [on, setOn] = useState(false);
|
|
450
|
+
|
|
451
|
+
<SwitchButton checked={on} onChange={setOn} />
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
<br/>
|
|
455
|
+
<br/>
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
## Table
|
|
460
|
+
|
|
461
|
+
헤더와 바디 설정으로 테이블을 렌더링하는 컴포넌트입니다. 서브 헤더(2단 헤더), 행별 헤더, 정렬 표시, 둥근 모서리·테두리 옵션을 지원합니다.
|
|
462
|
+
|
|
463
|
+
<br/>
|
|
464
|
+
|
|
465
|
+
### Props
|
|
466
|
+
|
|
467
|
+
| Prop | 타입 | 설명 |
|
|
468
|
+
|------|------|------|
|
|
469
|
+
| header | TableHeaderType[] | 테이블 헤더 설정 |
|
|
470
|
+
| body | TableBodyType[] | 테이블 바디(행) 설정 |
|
|
471
|
+
| rounded | boolean | 모서리 둥글게 처리 여부 |
|
|
472
|
+
| border | boolean | 테두리 표시 여부 |
|
|
473
|
+
|
|
474
|
+
**TableHeaderType**
|
|
475
|
+
|
|
476
|
+
- `label`: { text: string \| number; align?: 'left' \| 'center' \| 'right' }
|
|
477
|
+
- `width`: 열 너비 (선택)
|
|
478
|
+
- `subWidth`: 서브 헤더 열 너비 배열 (선택)
|
|
479
|
+
- `subLabel`: 서브 헤더 라벨 배열 (선택)
|
|
480
|
+
|
|
481
|
+
**TableBodyType**
|
|
482
|
+
|
|
483
|
+
- `head`: 행 헤더(첫 번째 열) (선택)
|
|
484
|
+
- `labels`: 셀 배열, 각 셀은 { text: string \| number; align?: 'left' \| 'center' \| 'right' }
|
|
485
|
+
|
|
486
|
+
<br/>
|
|
487
|
+
|
|
488
|
+
### 사용법
|
|
489
|
+
|
|
490
|
+
```tsx
|
|
491
|
+
import { Table } from '@jk-core/components';
|
|
492
|
+
|
|
493
|
+
const header = [
|
|
494
|
+
{ label: { text: '이름', align: 'left' }, width: '100px' },
|
|
495
|
+
{ label: { text: '점수', align: 'center' } },
|
|
496
|
+
];
|
|
497
|
+
const body = [
|
|
498
|
+
{ labels: [{ text: '홍길동' }, { text: '90', align: 'center' }] },
|
|
499
|
+
{ labels: [{ text: '김철수' }, { text: '85', align: 'center' }] },
|
|
500
|
+
];
|
|
501
|
+
|
|
502
|
+
<Table header={header} body={body} rounded border />
|
|
503
|
+
```
|
|
504
|
+
|