@wishket/design-system 1.5.0 → 1.5.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/Components/Base/Layouts/Box/Box.d.ts +6 -0
- package/dist/Components/Base/Layouts/Column/Column.d.ts +10 -0
- package/dist/Components/Base/Layouts/FullBleed/FullBleed.d.ts +8 -0
- package/dist/Components/Base/Layouts/GridLayout/GridLayout.d.ts +16 -0
- package/dist/Components/Base/Typography/Typography.d.ts +8 -0
- package/dist/Components/DataDisplays/CountBadge/CountBadge.d.ts +20 -0
- package/dist/Components/DataDisplays/Divider/Divider.d.ts +18 -0
- package/dist/Components/DataDisplays/ImageLabel/ImageLabel.d.ts +18 -0
- package/dist/Components/DataDisplays/Label/Label.d.ts +30 -0
- package/dist/Components/DataDisplays/NewBadge/NewBadge.d.ts +19 -0
- package/dist/Components/DataDisplays/ProductIcon/ProductIcon.d.ts +9 -0
- package/dist/Components/DataDisplays/{ProcessIndicator/ProcessIndicator.d.ts → ProgressIndicator/ProgressIndicator.d.ts} +4 -4
- package/dist/Components/DataDisplays/ProgressIndicator/ProgressIndicator.js +1 -0
- package/dist/Components/DataDisplays/ProgressIndicator/index.d.ts +2 -0
- package/dist/Components/DataDisplays/ProgressIndicator/index.js +1 -0
- package/dist/Components/DataDisplays/ServiceLogo/ServiceLogo.d.ts +18 -0
- package/dist/Components/DataDisplays/SkillLabel/SkillLabel.d.ts +6 -0
- package/dist/Components/DataDisplays/SkillLabel/SkillLabel.parts.d.ts +19 -0
- package/dist/Components/DataDisplays/SystemIcon/SystemIcon.d.ts +29 -0
- package/dist/Components/DataDisplays/index.d.ts +1 -1
- package/dist/Components/Feedbacks/Dialog/Dialog.d.ts +14 -0
- package/dist/Components/Feedbacks/DialogBox/DialogBox.js +1 -1
- package/dist/Components/Feedbacks/GlobalLoadingIndicator/GlobalLoadingIndicator.d.ts +25 -0
- package/dist/Components/Feedbacks/LoadingIndicator/LoadingIndicator.d.ts +19 -0
- package/dist/Components/Feedbacks/MessageBar/MessageBar.d.ts +42 -0
- package/dist/Components/Feedbacks/MessageBar/MessageBar.js +1 -1
- package/dist/Components/Feedbacks/MessageBox/MessageBox.d.ts +35 -0
- package/dist/Components/Feedbacks/PlainTooltip/PlainTooltip.d.ts +36 -2
- package/dist/Components/Feedbacks/RichTooltip/RichTooltip.d.ts +26 -0
- package/dist/Components/Inputs/AutoCompleteList/AutoCompleteList.d.ts +23 -0
- package/dist/Components/Inputs/Autocomplete/Autocomplete.d.ts +39 -0
- package/dist/Components/Inputs/Button/Button.d.ts +47 -0
- package/dist/Components/Inputs/Button/Button.parts.js +1 -1
- package/dist/Components/Inputs/Calendar/Calendar.d.ts +36 -0
- package/dist/Components/Inputs/Checkbox/Checkbox.d.ts +29 -0
- package/dist/Components/Inputs/Checkbox/Checkbox.parts.js +1 -1
- package/dist/Components/Inputs/CheckboxCard/CheckboxCard.d.ts +45 -0
- package/dist/Components/Inputs/CheckboxList/CheckboxList.d.ts +24 -0
- package/dist/Components/Inputs/CheckboxList/CheckboxList.js +1 -1
- package/dist/Components/Inputs/CheckboxListItem/CheckboxListItem.d.ts +43 -0
- package/dist/Components/Inputs/CheckboxListItem/CheckboxListItem.js +1 -1
- package/dist/Components/Inputs/ChoiceChip/ChoiceChip.d.ts +38 -0
- package/dist/Components/Inputs/CommentArea/CommentArea.d.ts +15 -0
- package/dist/Components/Inputs/FilterChip/FilterChip.d.ts +57 -0
- package/dist/Components/Inputs/FilterChip/FilterChip.js +1 -0
- package/dist/Components/Inputs/FilterChip/index.d.ts +2 -0
- package/dist/Components/Inputs/FilterChip/index.js +1 -0
- package/dist/Components/Inputs/FilterList/FilterList.d.ts +47 -6
- package/dist/Components/Inputs/FilterList/index.d.ts +1 -0
- package/dist/Components/Inputs/IconButton/IconButton.d.ts +31 -0
- package/dist/Components/Inputs/IconButtonDropdown/IconButtonDropdown.d.ts +31 -0
- package/dist/Components/Inputs/IconButtonDropdown/IconButtonDropdown.js +1 -1
- package/dist/Components/Inputs/Input/Input.d.ts +25 -0
- package/dist/Components/Inputs/InputChip/InputChip.d.ts +25 -0
- package/dist/Components/Inputs/List/List.d.ts +30 -0
- package/dist/Components/Inputs/MultiColumnList/MultiColumnList.d.ts +28 -0
- package/dist/Components/Inputs/MultiColumnList/MultiColumnList.parts.d.ts +81 -0
- package/dist/Components/Inputs/Radio/Radio.d.ts +27 -0
- package/dist/Components/Inputs/RadioCard/RadioCard.d.ts +44 -0
- package/dist/Components/Inputs/RadioCard/RadioCard.js +1 -1
- package/dist/Components/Inputs/RadioCard/RadioCard.parts.js +1 -1
- package/dist/Components/Inputs/RadioGroup/RadioGroup.d.ts +37 -0
- package/dist/Components/Inputs/RadioList/RadioList.d.ts +29 -0
- package/dist/Components/Inputs/RadioList/RadioList.js +1 -1
- package/dist/Components/Inputs/RadioList/parts/RadioListContainer.d.ts +7 -0
- package/dist/Components/Inputs/RadioList/parts/RadioListContainer.js +1 -0
- package/dist/Components/Inputs/RadioList/{RadioListItem.d.ts → parts/RadioListItem.d.ts} +1 -1
- package/dist/Components/Inputs/RadioList/parts/RadioListItem.js +2 -0
- package/dist/Components/Inputs/RadioList/parts/index.d.ts +2 -0
- package/dist/Components/Inputs/RangeSlider/RangeSlider.d.ts +36 -0
- package/dist/Components/Inputs/SearchField/SearchField.d.ts +38 -2
- package/dist/Components/Inputs/SearchField/SearchField.js +1 -1
- package/dist/Components/Inputs/SegmentedControl/SegmentedControl.d.ts +28 -0
- package/dist/Components/Inputs/Switch/Switch.d.ts +20 -0
- package/dist/Components/Inputs/TextButton/TextButton.d.ts +25 -0
- package/dist/Components/Inputs/TextButtonDropdown/TextButtonDropdown.d.ts +30 -0
- package/dist/Components/Inputs/TextButtonDropdown/TextButtonDropdown.js +2 -0
- package/dist/Components/Inputs/{TextButtonsDropdown/TextButtonsDropdown.parts.d.ts → TextButtonDropdown/TextButtonDropdown.parts.d.ts} +1 -1
- package/dist/Components/Inputs/{TextButtonsDropdown/TextButtonsDropdown.parts.js → TextButtonDropdown/TextButtonDropdown.parts.js} +1 -1
- package/dist/Components/Inputs/{TextButtonsDropdown/TextButtonsDropdown.types.d.ts → TextButtonDropdown/TextButtonDropdown.types.d.ts} +1 -1
- package/dist/Components/Inputs/TextButtonDropdown/index.d.ts +2 -0
- package/dist/Components/Inputs/TextField/TextField.d.ts +41 -0
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.d.ts +32 -0
- package/dist/Components/Inputs/TextFieldDropdown/TextFieldDropdown.js +1 -1
- package/dist/Components/Inputs/Textarea/Textarea.d.ts +38 -0
- package/dist/Components/Inputs/index.d.ts +3 -2
- package/dist/Components/Navigations/BoxTab/BoxTab.d.ts +26 -0
- package/dist/Components/Navigations/BoxTab/BoxTab.parts.d.ts +69 -0
- package/dist/Components/Navigations/Drawer/Drawer.d.ts +27 -0
- package/dist/Components/Navigations/GNBList/GNBList.d.ts +48 -0
- package/dist/Components/Navigations/GNBList/GNBList.parts.d.ts +33 -0
- package/dist/Components/Navigations/Menu/Menu.d.ts +41 -0
- package/dist/Components/Navigations/Pagination/Pagination.d.ts +23 -0
- package/dist/Components/Navigations/TableOfContents/TableOfContents.d.ts +24 -0
- package/dist/Components/Navigations/TextTab/TextTab.d.ts +29 -0
- package/dist/Components/Navigations/TextTab/TextTab.parts.d.ts +69 -0
- package/dist/Components/Utils/Modal/Modal.d.ts +33 -0
- package/dist/Components/Wrappers/WithBadge/WithBadge.d.ts +21 -0
- package/dist/Components/Wrappers/WithRichTooltip/WithRichTooltip.d.ts +29 -0
- package/dist/Components/Wrappers/WithRichTooltip/WithRichTooltip.js +1 -1
- package/dist/Components/Wrappers/WithSnackBar/WithSnackBar.d.ts +23 -0
- package/dist/Components/Wrappers/WithSnackBar/WithSnackBar.js +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useDropdown.d.ts +21 -0
- package/dist/hooks/useDropdown.js +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/Components/DataDisplays/ProcessIndicator/ProcessIndicator.js +0 -1
- package/dist/Components/DataDisplays/ProcessIndicator/index.d.ts +0 -2
- package/dist/Components/DataDisplays/ProcessIndicator/index.js +0 -1
- package/dist/Components/Inputs/RadioList/RadioListItem.js +0 -2
- package/dist/Components/Inputs/TextButtonsDropdown/TextButtonsDropdown.d.ts +0 -3
- package/dist/Components/Inputs/TextButtonsDropdown/TextButtonsDropdown.js +0 -2
- package/dist/Components/Inputs/TextButtonsDropdown/index.d.ts +0 -2
|
@@ -7,5 +7,33 @@ interface SegmentedControlProps {
|
|
|
7
7
|
name?: string;
|
|
8
8
|
onChange: (value: string) => void;
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* 여러 옵션 중 하나를 선택할 수 있는 세그먼트 컨트롤 컴포넌트입니다.
|
|
12
|
+
*
|
|
13
|
+
* @param {Object} props
|
|
14
|
+
* @param {Array<{key: string, name: string}>} props.valueList - 선택 가능한 옵션들의 배열 ({key, name}[])
|
|
15
|
+
* @param {string} props.selectedValue - 현재 선택된 옵션의 key 값
|
|
16
|
+
* @param {string} [props.name='segmented-control'] - 라디오 그룹의 name 속성
|
|
17
|
+
* @param {(value: string) => void} props.onChange - 선택 값이 변경될 때 호출되는 콜백 함수
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* const options = [
|
|
22
|
+
* { key: 'daily', name: '일간' },
|
|
23
|
+
* { key: 'weekly', name: '주간' },
|
|
24
|
+
* { key: 'monthly', name: '월간' }
|
|
25
|
+
* ];
|
|
26
|
+
*
|
|
27
|
+
* const [selected, setSelected] = useState('daily');
|
|
28
|
+
*
|
|
29
|
+
* return (
|
|
30
|
+
* <SegmentedControl
|
|
31
|
+
* valueList={options}
|
|
32
|
+
* selectedValue={selected}
|
|
33
|
+
* onChange={setSelected}
|
|
34
|
+
* />
|
|
35
|
+
* );
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
10
38
|
declare const SegmentedControl: ({ valueList, selectedValue, name, onChange, }: SegmentedControlProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
39
|
export default SegmentedControl;
|
|
@@ -2,5 +2,25 @@ import { ComponentPropsWithoutRef } from 'react';
|
|
|
2
2
|
export interface SwitchProps extends ComponentPropsWithoutRef<'input'> {
|
|
3
3
|
className?: string;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* 토글 스위치 컴포넌트입니다.
|
|
7
|
+
*
|
|
8
|
+
* @component
|
|
9
|
+
* @param {Object} props - 컴포넌트 props
|
|
10
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
11
|
+
* @param {boolean} [props.checked] - 스위치의 체크 상태
|
|
12
|
+
* @param {boolean} [props.disabled] - 스위치의 비활성화 상태
|
|
13
|
+
* @extends {ComponentPropsWithoutRef<'input'>} - input 요소의 기본 props를 상속받습니다
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // 기본 사용법
|
|
17
|
+
* <Switch checked={isOn} onChange={handleChange} />
|
|
18
|
+
*
|
|
19
|
+
* // 비활성화된 스위치
|
|
20
|
+
* <Switch checked={true} disabled={true} />
|
|
21
|
+
*
|
|
22
|
+
* // 커스텀 클래스 적용
|
|
23
|
+
* <Switch className="custom-switch" checked={isOn} />
|
|
24
|
+
*/
|
|
5
25
|
declare const Switch: ({ className, checked, disabled, ...rest }: SwitchProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
26
|
export default Switch;
|
|
@@ -1,3 +1,28 @@
|
|
|
1
1
|
import { TextButtonProps } from './TextButton.types';
|
|
2
|
+
/**
|
|
3
|
+
* 텍스트 버튼 컴포넌트
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* 텍스트로만 구성된 버튼 컴포넌트입니다. 선택적으로 앞이나 뒤에 아이콘을 배치할 수 있습니다.
|
|
7
|
+
* 텍스트의 크기는 기본 크기와 작은 크기 중 선택할 수 있습니다.
|
|
8
|
+
*
|
|
9
|
+
* @param {object} props
|
|
10
|
+
* @param {string} props.text - 버튼에 표시될 텍스트
|
|
11
|
+
* @param {boolean} [props.isTextSmall=false] - 텍스트 크기를 작게 설정 (기본값: false)
|
|
12
|
+
* @param {string} [props.leadingIcon] - 텍스트 앞에 표시될 SystemIcon의 이름
|
|
13
|
+
* @param {string} [props.trailingIcon] - 텍스트 뒤에 표시될 SystemIcon의 이름
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // 기본 텍스트 버튼
|
|
17
|
+
* <TextButton text="버튼 텍스트" />
|
|
18
|
+
*
|
|
19
|
+
* // 작은 텍스트와 앞뒤 아이콘이 있는 버튼
|
|
20
|
+
* <TextButton
|
|
21
|
+
* text="버튼 텍스트"
|
|
22
|
+
* isTextSmall={true}
|
|
23
|
+
* leadingIcon="search"
|
|
24
|
+
* trailingIcon="arrow-right"
|
|
25
|
+
* />
|
|
26
|
+
*/
|
|
2
27
|
declare const TextButton: ({ text, isTextSmall, leadingIcon, trailingIcon, ...rest }: TextButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
28
|
export default TextButton;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TextButtonDropdownProps } from './TextButtonDropdown.types';
|
|
2
|
+
/**
|
|
3
|
+
* 텍스트 버튼 형태의 드롭다운 컴포넌트입니다.
|
|
4
|
+
*
|
|
5
|
+
* @param {Object} props
|
|
6
|
+
* @param {Array<{key: string, value: string, leadingIcon?: React.ReactNode}>} props.items - 드롭다운에 표시될 항목들의 배열
|
|
7
|
+
* @param {{key: string, value: string, leadingIcon?: React.ReactNode}} props.selectedItem - 현재 선택된 항목 ({key, value, leadingIcon}[])
|
|
8
|
+
* @param {(item: {key: string, value: string, leadingIcon?: React.ReactNode}) => void} props.onItemClick - 항목 클릭 시 실행될 콜백 함수 (item: {key, value, leadingIcon} => void)
|
|
9
|
+
* @param {boolean} [props.alignRight=false] - 드롭다운 메뉴를 오른쪽 정렬할지 여부
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const items = [
|
|
13
|
+
* { key: '1', value: '옵션 1' },
|
|
14
|
+
* { key: '2', value: '옵션 2', leadingIcon: <Icon /> },
|
|
15
|
+
* { key: '3', value: '옵션 3' }
|
|
16
|
+
* ];
|
|
17
|
+
*
|
|
18
|
+
* const [selected, setSelected] = useState(items[0]);
|
|
19
|
+
*
|
|
20
|
+
* return (
|
|
21
|
+
* <TextButtonDropdown
|
|
22
|
+
* items={items}
|
|
23
|
+
* selectedItem={selected}
|
|
24
|
+
* onItemClick={setSelected}
|
|
25
|
+
* alignRight={false}
|
|
26
|
+
* />
|
|
27
|
+
* );
|
|
28
|
+
*/
|
|
29
|
+
declare const TextButtonDropdown: ({ items, selectedItem, onItemClick, alignRight, }: TextButtonDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export default TextButtonDropdown;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("tailwind-merge"),n=require("../List/List.js"),i=require("../../../hooks/useDropdown.js"),s=require("./TextButtonDropdown.parts.js");module.exports=function(o){var l=o.items,r=o.selectedItem,a=o.onItemClick,o=o.alignRight,o=void 0!==o&&o,a=i({items:l,onItemClick:a}),d=a.isListOpen,u=a.ref,c=a.focusedIndex,m=a.handleItemClick,x=a.toggleListOpen,a=a.handleKeyDown;return e.jsxs("div",{"data-testid":"design-system-text-button-dropdown",className:"relative flex w-fit flex-col gap-1 outline-none",ref:u,onKeyDown:a,tabIndex:0,children:[e.jsx(s.TextButton,{value:r.value,"data-testid":"design-system-text-button-dropdown--textButton",isListOpen:d,onClick:x}),d&&e.jsx("div",{className:t.twJoin("absolute -bottom-2 z-40 translate-y-full transform transition-all",o?"right-0":"left-0 "),children:e.jsx(n.Root,{className:"max-h-full min-w-40 overflow-y-visible",children:l.map(function(t,i){return e.jsx(n.Item,{text:t.value,leadingIcon:t.leadingIcon,onClick:function(){return m(t)},selected:t.key===(null==r?void 0:r.key),isFocused:i===c},t.key)})})})]})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("../../../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("tailwind-merge"),s=(require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Typography/Typography.js")),t=(require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js"),require("../../DataDisplays/Label/Label.js"),require("../../DataDisplays/SystemIcon/SystemIcon.js"));exports.TextButton=function(i){var n=i.value,u=i.isListOpen,i=e.__rest(i,["value","isListOpen"]);return a.jsxs("button",e.__assign({type:"button",className:"flex items-center gap-2"},i,{children:[a.jsx(s,{variant:"body1",className:"text-w-gray-600",children:n}),a.jsx("span",{className:r.twJoin("transition-transform duration-300",u&&"rotate-180"),children:a.jsx(t,{name:"medium_arrow_down",className:"text-w-gray-600"})})]}))};
|
|
1
|
+
"use strict";var e=require("../../../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("tailwind-merge"),s=(require("../../DataDisplays/Avatar/Avatar.js"),require("../../Base/Typography/Typography.js")),t=(require("../../Base/Layouts/Box/Box.js"),require("../../Base/Layouts/FullBleed/FullBleed.js"),require("../../DataDisplays/Label/Label.js"),require("../../DataDisplays/SystemIcon/SystemIcon.js"));exports.TextButton=function(i){var n=i.value,u=i.isListOpen,i=e.__rest(i,["value","isListOpen"]);return a.jsxs("button",e.__assign({type:"button",className:"flex items-center gap-2 outline-none"},i,{children:[a.jsx(s,{variant:"body1",className:"text-w-gray-600",children:n}),a.jsx("span",{className:r.twJoin("transition-transform duration-300",u&&"rotate-180"),children:a.jsx(t,{name:"medium_arrow_down",className:"text-w-gray-600"})})]}))};
|
|
@@ -13,5 +13,46 @@ export interface TextFieldProps extends ComponentPropsWithoutRef<'input'> {
|
|
|
13
13
|
testId?: string;
|
|
14
14
|
isMaxLengthVisible?: boolean;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* 사용자 입력을 받을 수 있는 텍스트 필드 컴포넌트입니다.
|
|
18
|
+
*
|
|
19
|
+
* @component
|
|
20
|
+
* @param {Object} props - 컴포넌트 props
|
|
21
|
+
* @param {'default' | 'lable'} [props.variant='default'] - 텍스트 필드의 변형 타입
|
|
22
|
+
* @param {string} [props.lable] - 입력 필드의 라벨
|
|
23
|
+
* @param {boolean} [props.isError] - 오류 상태 표시 여부
|
|
24
|
+
* @param {MediumSystemIconName} [props.startIcon] - 시작 부분에 표시될 아이콘
|
|
25
|
+
* @param {MediumSystemIconName} [props.endIcon] - 끝 부분에 표시될 아이콘
|
|
26
|
+
* @param {string} [props.supportMessage] - 도움말 메시지
|
|
27
|
+
* @param {string} [props.measure] - 측정 단위
|
|
28
|
+
* @param {string} [props.errorMessage] - 오류 메시지
|
|
29
|
+
* @param {string} [props.testId] - 테스트용 ID
|
|
30
|
+
* @param {boolean} [props.isMaxLengthVisible=false] - 최대 길이 표시 여부
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* // 기본 텍스트 필드
|
|
34
|
+
* <TextField
|
|
35
|
+
* placeholder="이름을 입력하세요"
|
|
36
|
+
* onChange={(e) => handleChange(e)}
|
|
37
|
+
* />
|
|
38
|
+
*
|
|
39
|
+
* // 라벨이 있는 텍스트 필드
|
|
40
|
+
* <TextField
|
|
41
|
+
* variant="lable"
|
|
42
|
+
* lable="이름"
|
|
43
|
+
* placeholder="홍길동"
|
|
44
|
+
* startIcon="user"
|
|
45
|
+
* supportMessage="실명을 입력해주세요"
|
|
46
|
+
* />
|
|
47
|
+
*
|
|
48
|
+
* // 에러 상태의 텍스트 필드
|
|
49
|
+
* <TextField
|
|
50
|
+
* variant="default"
|
|
51
|
+
* isError={true}
|
|
52
|
+
* errorMessage="필수 입력 항목입니다"
|
|
53
|
+
* maxLength={50}
|
|
54
|
+
* isMaxLengthVisible={true}
|
|
55
|
+
* />
|
|
56
|
+
*/
|
|
16
57
|
declare const TextField: import("react").ForwardRefExoticComponent<TextFieldProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
17
58
|
export default TextField;
|
|
@@ -15,5 +15,37 @@ export interface TextFieldDropdownProps {
|
|
|
15
15
|
className?: string;
|
|
16
16
|
isError?: boolean;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* 드롭다운 형태의 텍스트 필드 컴포넌트입니다.
|
|
20
|
+
*
|
|
21
|
+
* @component
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} props
|
|
24
|
+
* @param {Item[]} props.items - 드롭다운에 표시될 아이템 배열 ({key, value, leadingIcon}[])
|
|
25
|
+
* @param {string} props.placeholder - 선택되지 않은 상태에서 표시될 안내 텍스트
|
|
26
|
+
* @param {(item: Item) => void} props.onItemClick - 아이템 선택 시 호출되는 콜백 함수
|
|
27
|
+
* @param {Item} [props.selectedItem] - 현재 선택된 아이템
|
|
28
|
+
* @param {boolean} [props.disabled] - 비활성화 여부
|
|
29
|
+
* @param {string} [props.supportMessage] - 입력 필드 아래에 표시될 도움말 메시지
|
|
30
|
+
* @param {string} [props.errorMessage] - 오류 발생 시 표시될 메시지
|
|
31
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스명
|
|
32
|
+
* @param {boolean} [props.isError] - 오류 상태 여부
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* const items = [
|
|
37
|
+
* { key: 1, value: '옵션 1', leadingIcon: 'home' },
|
|
38
|
+
* { key: 2, value: '옵션 2', leadingIcon: 'settings' }
|
|
39
|
+
* ];
|
|
40
|
+
*
|
|
41
|
+
* <TextFieldDropdown
|
|
42
|
+
* items={items}
|
|
43
|
+
* placeholder="옵션을 선택하세요"
|
|
44
|
+
* onItemClick={(item) => console.log('선택된 아이템:', item)}
|
|
45
|
+
* selectedItem={items[0]}
|
|
46
|
+
* supportMessage="추가 설명이 필요한 경우 이곳에 표시됩니다"
|
|
47
|
+
* />
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
18
50
|
declare const TextFieldDropdown: ({ selectedItem, items, onItemClick, placeholder, disabled, isError, errorMessage, supportMessage, }: TextFieldDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
51
|
export default TextFieldDropdown;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
"use strict";var e=require("react/jsx-runtime"),r=
|
|
2
|
+
"use strict";var e=require("react/jsx-runtime"),r=(require("../../../_virtual/_tslib.js"),require("tailwind-merge"),require("../../Base/Layouts/Box/Box.js")),s=(require("../../Base/Layouts/FullBleed/FullBleed.js"),require("../List/List.js")),l=require("../SupportTextContainer/SupportTextContainer.js"),i=require("../../../hooks/useDropdown.js"),t=require("./TextFieldDropdown.parts.js");module.exports=function(o){var n=o.selectedItem,a=o.items,u=o.onItemClick,d=o.placeholder,c=o.disabled,p=o.isError,x=o.errorMessage,o=o.supportMessage,u=i({items:a,onItemClick:u,disabled:c}),j=u.isListOpen,m=u.focusedIndex,g=u.ref,v=u.handleItemClick,I=u.toggleListOpen,u=u.handleKeyDown,f=!!o||!!x;return e.jsxs("div",{"data-testid":"design-system--textFieldDropdown",ref:g,className:"relative flex w-full flex-col gap-2 outline-none",onKeyDown:u,tabIndex:0,children:[e.jsx(t.SelectBox,{placeholder:d,value:null==n?void 0:n.value,leadingIcon:null==n?void 0:n.leadingIcon,disabled:c,isListOpen:j,onClick:I,error:p}),f&&e.jsx(l,{errorMessage:x,supportMessage:o}),j&&e.jsx(r,{className:"absolute top-[54px] z-40 w-full",children:e.jsx(s.Root,{children:a.map(function(r,l){return e.jsx(s.Item,{text:r.value,leadingIcon:r.leadingIcon,onClick:function(){return v(r)},selected:r.key===(null==n?void 0:n.key),isFocused:l===m},r.key)})})})]})};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ComponentProps } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Textarea 컴포넌트에서 사용되는 Props 타입을 정의합니다.
|
|
4
|
+
*/
|
|
2
5
|
export interface TextareaProps extends ComponentProps<'textarea'> {
|
|
3
6
|
isError?: boolean;
|
|
4
7
|
size?: 'sm' | 'md' | 'lg';
|
|
@@ -7,5 +10,40 @@ export interface TextareaProps extends ComponentProps<'textarea'> {
|
|
|
7
10
|
errorText?: string;
|
|
8
11
|
isLengthVisible?: boolean;
|
|
9
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* 사용자가 여러 줄의 텍스트를 입력할 수 있는 textarea 컴포넌트입니다.
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} props
|
|
17
|
+
* @param {boolean} [props.isError] - 에러 상태를 표시합니다
|
|
18
|
+
* @param {('sm'|'md'|'lg')} [props.size='md'] - textarea의 크기를 지정합니다
|
|
19
|
+
* @param {boolean} [props.resize=false] - 크기 조절 가능 여부를 설정합니다
|
|
20
|
+
* @param {string} [props.supportText] - 도움말 텍스트를 표시합니다
|
|
21
|
+
* @param {string} [props.errorText] - 에러 메시지를 표시합니다
|
|
22
|
+
* @param {boolean} [props.isLengthVisible=false] - 글자 수 표시 여부를 설정합니다
|
|
23
|
+
* @param {React.ComponentProps<'textarea'>} props.textareaProps - textarea 엘리먼트의 기본 속성들
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* // 기본 사용
|
|
28
|
+
* <Textarea
|
|
29
|
+
* placeholder="내용을 입력하세요"
|
|
30
|
+
* onChange={(e) => console.log(e.target.value)}
|
|
31
|
+
* />
|
|
32
|
+
*
|
|
33
|
+
* // 에러 상태와 에러 메시지
|
|
34
|
+
* <Textarea
|
|
35
|
+
* isError={true}
|
|
36
|
+
* errorText="필수 입력 항목입니다"
|
|
37
|
+
* />
|
|
38
|
+
*
|
|
39
|
+
* // 크기 조절 가능하고 글자 수 제한이 있는 경우
|
|
40
|
+
* <Textarea
|
|
41
|
+
* resize={true}
|
|
42
|
+
* maxLength={1000}
|
|
43
|
+
* isLengthVisible={true}
|
|
44
|
+
* supportText="최대 1000자까지 입력 가능합니다"
|
|
45
|
+
* />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
10
48
|
declare const Textarea: ({ isError, size, resize, isLengthVisible, supportText, errorText, maxLength, value, disabled, name, onChange, ...rest }: TextareaProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
49
|
export default Textarea;
|
|
@@ -21,9 +21,10 @@ export { default as TextButton } from './TextButton';
|
|
|
21
21
|
export { default as TextField } from './TextField';
|
|
22
22
|
export { default as List } from './List';
|
|
23
23
|
export { default as TextFieldDropdown } from './TextFieldDropdown';
|
|
24
|
-
export {
|
|
24
|
+
export { TextButtonDropdown } from './TextButtonDropdown';
|
|
25
|
+
export type { TextButtonDropdownProps } from './TextButtonDropdown';
|
|
25
26
|
export type { SkillItem, LegacySkillItem } from './Autocomplete';
|
|
26
|
-
export type { TextButtonsDropdownProps } from './TextButtonsDropdown';
|
|
27
27
|
export { default as CommentArea } from './CommentArea';
|
|
28
28
|
export { default as IconButtonDropdown } from './IconButtonDropdown';
|
|
29
29
|
export { default as MultiColumnList } from './MultiColumnList';
|
|
30
|
+
export { default as FilterChip } from './FilterChip';
|
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
/**
|
|
3
|
+
* BoxTab 컴포넌트
|
|
4
|
+
* @module BoxTab
|
|
5
|
+
* @description 탭 기반 네비게이션을 구현하는 컴포넌트입니다.
|
|
6
|
+
* @property {Component} Root - 탭 컨테이너
|
|
7
|
+
* @property {Component} Tabs - 탭 목록
|
|
8
|
+
* @property {Component} Tab - 탭
|
|
9
|
+
* @property {Component} Panel - 탭 패널
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* import BoxTab from './BoxTab';
|
|
13
|
+
*
|
|
14
|
+
* function Example() {
|
|
15
|
+
* return (
|
|
16
|
+
* <BoxTab.Root>
|
|
17
|
+
* <BoxTab.Tabs>
|
|
18
|
+
* <BoxTab.Tab index={0}>첫 번째 탭</BoxTab.Tab>
|
|
19
|
+
* <BoxTab.Tab index={1}>두 번째 탭</BoxTab.Tab>
|
|
20
|
+
* </BoxTab.Tabs>
|
|
21
|
+
* <BoxTab.Panel index={0}>첫 번째 패널 내용</BoxTab.Panel>
|
|
22
|
+
* <BoxTab.Panel index={1}>두 번째 패널 내용</BoxTab.Panel>
|
|
23
|
+
* </BoxTab.Root>
|
|
24
|
+
* );
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
2
28
|
declare const BoxTab: {
|
|
3
29
|
Root: ({ children, currentActiveTab, onChange }: import("./BoxTab.types").RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
30
|
Tabs: ({ children, className }: import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,76 @@
|
|
|
1
1
|
import { ComponentProps } from 'react';
|
|
2
2
|
import { PanelProps, RootProps, TabProps } from './BoxTab.types';
|
|
3
|
+
/**
|
|
4
|
+
* BoxTab의 최상위 컴포넌트입니다.
|
|
5
|
+
* 탭의 상태를 관리하고 하위 컴포넌트에 Context를 제공합니다.
|
|
6
|
+
*
|
|
7
|
+
* @param {RootProps} props
|
|
8
|
+
* @param {ReactNode} props.children - 하위 컴포넌트
|
|
9
|
+
* @param {number} [props.currentActiveTab=0] - 현재 활성화된 탭의 인덱스
|
|
10
|
+
* @param {(index: number) => void} [props.onChange] - 탭 변경 시 호출되는 콜백 함수
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <BoxTab.Root currentActiveTab={0} onChange={(index) => console.log(index)}>
|
|
15
|
+
* <BoxTab.Tabs>
|
|
16
|
+
* <BoxTab.Tab index={0}>탭 1</BoxTab.Tab>
|
|
17
|
+
* <BoxTab.Tab index={1}>탭 2</BoxTab.Tab>
|
|
18
|
+
* </BoxTab.Tabs>
|
|
19
|
+
* <BoxTab.Panel index={0}>패널 1 내용</BoxTab.Panel>
|
|
20
|
+
* <BoxTab.Panel index={1}>패널 2 내용</BoxTab.Panel>
|
|
21
|
+
* </BoxTab.Root>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
3
24
|
declare const Root: ({ children, currentActiveTab, onChange }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
/**
|
|
26
|
+
* 탭 버튼들을 감싸는 컨테이너 컴포넌트입니다.
|
|
27
|
+
*
|
|
28
|
+
* @param {ComponentProps<'div'>} props
|
|
29
|
+
* @param {ReactNode} props.children - Tab 컴포넌트들
|
|
30
|
+
* @param {string} [props.className] - 추가 스타일 클래스
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <BoxTab.Tabs className="my-4">
|
|
35
|
+
* <BoxTab.Tab index={0}>탭 1</BoxTab.Tab>
|
|
36
|
+
* <BoxTab.Tab index={1}>탭 2</BoxTab.Tab>
|
|
37
|
+
* </BoxTab.Tabs>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
4
40
|
declare const Tabs: ({ children, className }: ComponentProps<'div'>) => import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
/**
|
|
42
|
+
* 개별 탭 버튼 컴포넌트입니다.
|
|
43
|
+
*
|
|
44
|
+
* @param {TabProps} props
|
|
45
|
+
* @param {ReactNode} props.children - 탭 내용
|
|
46
|
+
* @param {number} props.index - 탭의 인덱스
|
|
47
|
+
* @param {string} [props.className] - 추가 스타일 클래스
|
|
48
|
+
* @param {boolean} [props.isFirst] - 첫 번째 탭 여부 (내부적으로 자동 설정)
|
|
49
|
+
* @param {boolean} [props.isLast] - 마지막 탭 여부 (내부적으로 자동 설정)
|
|
50
|
+
* @param {boolean} [props.disabled] - 비활성화 여부
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* <BoxTab.Tab index={0} disabled={false}>
|
|
55
|
+
* 탭 1
|
|
56
|
+
* </BoxTab.Tab>
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
5
59
|
declare const Tab: ({ children, index, className, isFirst, isLast, disabled, }: TabProps) => import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
/**
|
|
61
|
+
* 탭 패널 컴포넌트입니다.
|
|
62
|
+
* 해당 인덱스의 탭이 선택되었을 때만 내용을 표시합니다.
|
|
63
|
+
*
|
|
64
|
+
* @param {PanelProps} props
|
|
65
|
+
* @param {ReactNode} props.children - 패널 내용
|
|
66
|
+
* @param {number} props.index - 패널의 인덱스 (연결된 탭의 인덱스와 일치해야 함)
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* <BoxTab.Panel index={0}>
|
|
71
|
+
* 첫 번째 탭의 내용입니다.
|
|
72
|
+
* </BoxTab.Panel>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
6
75
|
declare const Panel: ({ children, index }: PanelProps) => false | import("react/jsx-runtime").JSX.Element;
|
|
7
76
|
export { Root, Tabs, Tab, Panel };
|
|
@@ -6,5 +6,32 @@ export interface DrawerProps {
|
|
|
6
6
|
size?: 'full' | 'half' | 'third' | 'quarter';
|
|
7
7
|
className?: string;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* 화면의 가장자리에서 슬라이딩되어 나타나는 서랍형 컴포넌트입니다.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} props
|
|
13
|
+
* @param {boolean} props.isOpen - 서랍이 열려있는지 여부를 결정합니다
|
|
14
|
+
* @param {() => void} props.onClose - 서랍을 닫을 때 실행되는 콜백 함수입니다
|
|
15
|
+
* @param {'left' | 'right' | 'top' | 'bottom'} [props.direction='right'] - 서랍이 나타날 방향을 지정합니다
|
|
16
|
+
* @param {'full' | 'half' | 'third' | 'quarter'} [props.size='quarter'] - 서랍의 크기를 지정합니다
|
|
17
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스를 지정할 수 있습니다
|
|
18
|
+
* @param {React.ReactNode} props.children - 서랍 내부에 표시될 컨텐츠입니다
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // 기본 사용법
|
|
22
|
+
* <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)}>
|
|
23
|
+
* <div>서랍 내용</div>
|
|
24
|
+
* </Drawer>
|
|
25
|
+
*
|
|
26
|
+
* // 왼쪽에서 나타나는 절반 크기의 서랍
|
|
27
|
+
* <Drawer
|
|
28
|
+
* isOpen={isOpen}
|
|
29
|
+
* onClose={() => setIsOpen(false)}
|
|
30
|
+
* direction="left"
|
|
31
|
+
* size="half"
|
|
32
|
+
* >
|
|
33
|
+
* <div>서랍 내용</div>
|
|
34
|
+
* </Drawer>
|
|
35
|
+
*/
|
|
9
36
|
declare const Drawer: ({ isOpen, onClose, direction, size, className, children, }: PropsWithChildren<DrawerProps>) => import("react/jsx-runtime").JSX.Element;
|
|
10
37
|
export default Drawer;
|
|
@@ -1,4 +1,52 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
/**
|
|
3
|
+
* GNB(Global Navigation Bar) 리스트 컴포넌트
|
|
4
|
+
* @module GNBList
|
|
5
|
+
* @property {Component} Root - GNB 리스트 컨테이너
|
|
6
|
+
* @property {Component} UserInfo - 사용자 정보 컴포넌트
|
|
7
|
+
* @property {Component} List - 메뉴 리스트 컴포넌트
|
|
8
|
+
* @property {Component} SubList - 서브 메뉴 리스트 컴포넌트
|
|
9
|
+
* @property {Component} Item - 메뉴 아이템 컴포넌트
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // 기본 메뉴 리스트
|
|
13
|
+
* <GNBList.Root type="main">
|
|
14
|
+
* <GNBList.List>
|
|
15
|
+
* <GNBList.Item>메뉴 1</GNBList.Item>
|
|
16
|
+
* <GNBList.Item>메뉴 2</GNBList.Item>
|
|
17
|
+
* </GNBList.List>
|
|
18
|
+
* </GNBList.Root>
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // 사용자 정보가 포함된 메뉴 리스트
|
|
22
|
+
* <GNBList.Root type="user">
|
|
23
|
+
* <GNBList.UserInfo
|
|
24
|
+
* userId="사용자명"
|
|
25
|
+
* email="user@example.com"
|
|
26
|
+
* imgUrl="/profile.jpg"
|
|
27
|
+
* >
|
|
28
|
+
* <Button>프로필 수정</Button>
|
|
29
|
+
* </GNBList.UserInfo>
|
|
30
|
+
* <GNBList.List>
|
|
31
|
+
* <GNBList.Item>계정 설정</GNBList.Item>
|
|
32
|
+
* <GNBList.Item>알림 설정</GNBList.Item>
|
|
33
|
+
* </GNBList.List>
|
|
34
|
+
* <GNBList.SubList>
|
|
35
|
+
* <GNBList.Item>로그아웃</GNBList.Item>
|
|
36
|
+
* </GNBList.SubList>
|
|
37
|
+
* </GNBList.Root>
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* // 선택 상태가 있는 메뉴 리스트
|
|
41
|
+
* <GNBList.Root type="main">
|
|
42
|
+
* <GNBList.List>
|
|
43
|
+
* <GNBList.Item isSelected>현재 메뉴</GNBList.Item>
|
|
44
|
+
* <GNBList.Item onClick={() => handleNavigation('/other')}>
|
|
45
|
+
* 다른 메뉴
|
|
46
|
+
* </GNBList.Item>
|
|
47
|
+
* </GNBList.List>
|
|
48
|
+
* </GNBList.Root>
|
|
49
|
+
*/
|
|
2
50
|
declare const GNBList: {
|
|
3
51
|
Root: ({ type, children, className }: import("./GNBList.types").RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
52
|
UserInfo: ({ imgUrl, userId, email, children, onClick, }: import("./GNBList.types").UserInfoProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
2
|
import { RootProps, ItemProps, UserInfoProps } from './GNBList.types';
|
|
3
|
+
/**
|
|
4
|
+
* GNB 리스트의 루트 컴포넌트
|
|
5
|
+
* @param {Object} props
|
|
6
|
+
* @param {'main'|'sub'|'user'} [props.type] - 리스트 타입 (main, sub, user)
|
|
7
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
8
|
+
* @param {ReactNode} props.children - 리스트 아이템들
|
|
9
|
+
*/
|
|
3
10
|
declare const Root: ({ type, children, className }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
/**
|
|
12
|
+
* GNB 리스트의 기본 리스트 컴포넌트
|
|
13
|
+
* @param {Object} props
|
|
14
|
+
* @param {ReactNode} props.children - 리스트 아이템들
|
|
15
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
16
|
+
*/
|
|
4
17
|
declare const UserInfo: ({ imgUrl, userId, email, children, onClick, }: UserInfoProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
/**
|
|
19
|
+
* GNB 리스트의 기본 리스트 컴포넌트
|
|
20
|
+
* @param {Object} props
|
|
21
|
+
* @param {ReactNode} props.children - 리스트 아이템들
|
|
22
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
23
|
+
*/
|
|
5
24
|
declare const List: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
/**
|
|
26
|
+
* GNB 리스트의 서브 리스트 컴포넌트
|
|
27
|
+
* @param {Object} props
|
|
28
|
+
* @param {ReactNode} props.children - 서브 리스트 아이템들
|
|
29
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
30
|
+
*/
|
|
6
31
|
declare const SubList: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
/**
|
|
33
|
+
* GNB 리스트의 아이템 컴포넌트
|
|
34
|
+
* @param {Object} props
|
|
35
|
+
* @param {ReactNode} props.children - 아이템 컨텐츠
|
|
36
|
+
* @param {string} [props.className] - 추가적인 CSS 클래스
|
|
37
|
+
* @param {() => void} [props.onClick] - 클릭 핸들러
|
|
38
|
+
* @param {boolean} [props.isSelected] - 선택 상태 여부
|
|
39
|
+
*/
|
|
7
40
|
declare const Item: ({ hasNew, children, className, ...rest }: ItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
41
|
export { Root, UserInfo, List, SubList, Item };
|
|
@@ -12,5 +12,46 @@ export interface MenuProps {
|
|
|
12
12
|
onOptionClick?: () => void;
|
|
13
13
|
children?: ReactNode;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* 메뉴 컴포넌트는 네비게이션에서 사용되는 클릭 가능한 항목을 표시합니다.
|
|
17
|
+
*
|
|
18
|
+
* @param {Object} props
|
|
19
|
+
* @param {'main' | 'sub'} [props.type='main'] - 메뉴 타입 ('main', 'sub')
|
|
20
|
+
* @param {'white' | 'gray'} [props.variant='white'] - 메뉴 스타일 변형 ('white', 'gray')
|
|
21
|
+
* @param {string} props.name - 메뉴에 표시될 텍스트
|
|
22
|
+
* @param {string} [props.badgeCount] - 메뉴 항목에 표시될 뱃지 숫자
|
|
23
|
+
* @param {boolean} [props.isSelected=false] - 메뉴 선택 상태
|
|
24
|
+
* @param {SystemIconName} [props.leadingIcon] - 메뉴 앞쪽에 표시될 아이콘
|
|
25
|
+
* @param {SystemIconName} [props.trailingIcon] - 메뉴 뒤쪽에 표시될 아이콘
|
|
26
|
+
* @param {() => void} props.onClick - 메뉴 클릭 시 실행될 함수
|
|
27
|
+
* @param {() => void} [props.onOptionClick] - 후행 아이콘 클릭 시 실행될 함수
|
|
28
|
+
* @param {ReactNode} [props.children] - 메뉴 내부에 표시될 자식 요소
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // 기본 메뉴
|
|
32
|
+
* <Menu
|
|
33
|
+
* name="메뉴 항목"
|
|
34
|
+
* onClick={() => console.log('메뉴 클릭')}
|
|
35
|
+
* />
|
|
36
|
+
*
|
|
37
|
+
* // 아이콘과 뱃지가 있는 서브 메뉴
|
|
38
|
+
* <Menu
|
|
39
|
+
* type="sub"
|
|
40
|
+
* name="서브 메뉴"
|
|
41
|
+
* leadingIcon="home"
|
|
42
|
+
* badgeCount="5"
|
|
43
|
+
* onClick={() => console.log('서브 메뉴 클릭')}
|
|
44
|
+
* />
|
|
45
|
+
*
|
|
46
|
+
* // 선택된 상태의 옵션 메뉴
|
|
47
|
+
* <Menu
|
|
48
|
+
* variant="gray"
|
|
49
|
+
* name="옵션 메뉴"
|
|
50
|
+
* isSelected={true}
|
|
51
|
+
* trailingIcon="more"
|
|
52
|
+
* onClick={() => console.log('메뉴 클릭')}
|
|
53
|
+
* onOptionClick={() => console.log('옵션 클릭')}
|
|
54
|
+
* />
|
|
55
|
+
*/
|
|
15
56
|
declare const Menu: ({ type, variant, name, isSelected, badgeCount, leadingIcon, trailingIcon, children, onClick, onOptionClick, }: MenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
57
|
export default Menu;
|
|
@@ -4,5 +4,28 @@ export interface PaginationProps {
|
|
|
4
4
|
page: number;
|
|
5
5
|
onChange: (page: number) => void;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* 페이지네이션 컴포넌트
|
|
9
|
+
*
|
|
10
|
+
* @description
|
|
11
|
+
* 여러 페이지로 구성된 콘텐츠를 탐색할 수 있는 페이지네이션 컴포넌트입니다.
|
|
12
|
+
* 좌우 화살표와 페이지 번호 버튼으로 구성되어 있으며, 현재 페이지가 강조 표시됩니다.
|
|
13
|
+
*
|
|
14
|
+
* @param {Object} props
|
|
15
|
+
* @param {number} props.maxPage - 전체 페이지 수
|
|
16
|
+
* @param {number} [props.pageCount=10] - 한 번에 표시할 페이지 버튼의 개수 (기본값: 10)
|
|
17
|
+
* @param {number} props.page - 현재 페이지 번호
|
|
18
|
+
* @param {(page: number) => void} props.onChange - 페이지 변경 시 호출되는 콜백 함수
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <Pagination
|
|
23
|
+
* maxPage={100}
|
|
24
|
+
* pageCount={5}
|
|
25
|
+
* page={1}
|
|
26
|
+
* onChange={(page) => setCurrentPage(page)}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
7
30
|
declare const Pagination: ({ maxPage, pageCount, page, onChange, }: PaginationProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
31
|
export default Pagination;
|