@ehfuse/mui-form-controls 1.0.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.
- package/LICENSE +21 -0
- package/README.md +169 -0
- package/dist/AddressTextField.d.ts +10 -0
- package/dist/Autocomplete.d.ts +10 -0
- package/dist/BizNumTextField.d.ts +10 -0
- package/dist/CardNumTextField.d.ts +11 -0
- package/dist/Checkbox.d.ts +10 -0
- package/dist/ClearTextField.d.ts +22 -0
- package/dist/DateRange.d.ts +9 -0
- package/dist/DateTextField.d.ts +11 -0
- package/dist/DateTimeTextField.d.ts +11 -0
- package/dist/EmailTextField.d.ts +10 -0
- package/dist/JuminTextField.d.ts +10 -0
- package/dist/LabelSelect.d.ts +10 -0
- package/dist/NumberTextField.d.ts +11 -0
- package/dist/PasswordTextField.d.ts +10 -0
- package/dist/PhoneTextField.d.ts +11 -0
- package/dist/RadioGroup.d.ts +10 -0
- package/dist/SearchTextField.d.ts +33 -0
- package/dist/Select.d.ts +10 -0
- package/dist/Slider.d.ts +10 -0
- package/dist/Switch.d.ts +10 -0
- package/dist/TextArea.d.ts +24 -0
- package/dist/TextAreaTextField.d.ts +24 -0
- package/dist/TimeTextField.d.ts +11 -0
- package/dist/VerificationCodeTextField.d.ts +10 -0
- package/dist/components/ColonBox.d.ts +23 -0
- package/dist/components/GroupedInputWrapper.d.ts +36 -0
- package/dist/components/SimpleCalendar.d.ts +45 -0
- package/dist/components/TimePicker.d.ts +26 -0
- package/dist/components/TimeSelector.d.ts +24 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/useGroupedInput.d.ts +48 -0
- package/dist/hooks/useKoreanHolidays.d.ts +29 -0
- package/dist/hooks/useTextFieldBase.d.ts +47 -0
- package/dist/icons/CalendarIcon.d.ts +10 -0
- package/dist/icons/ChevronLeft.d.ts +8 -0
- package/dist/icons/ChevronRight.d.ts +8 -0
- package/dist/icons/ClockIcon.d.ts +13 -0
- package/dist/icons/ColonIcon.d.ts +13 -0
- package/dist/icons/CopyIcon.d.ts +12 -0
- package/dist/icons/DashIcon.d.ts +12 -0
- package/dist/icons/card-icons.d.ts +21 -0
- package/dist/icons/email-icons.d.ts +27 -0
- package/dist/icons/index.d.ts +8 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +443 -0
- package/dist/index.js.map +7 -0
- package/dist/index.mjs +443 -0
- package/dist/index.mjs.map +7 -0
- package/dist/label-select/LabelSelect.d.ts +9 -0
- package/dist/label-select/index.d.ts +9 -0
- package/dist/label-select/types.d.ts +38 -0
- package/dist/types.d.ts +406 -0
- package/dist/utils/biznum.d.ts +12 -0
- package/dist/utils/card.d.ts +17 -0
- package/dist/utils/date.d.ts +114 -0
- package/dist/utils/datetime.d.ts +37 -0
- package/dist/utils/email.d.ts +15 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/jumin.d.ts +27 -0
- package/dist/utils/number.d.ts +15 -0
- package/dist/utils/password.d.ts +17 -0
- package/dist/utils/phone.d.ts +17 -0
- package/dist/utils/time.d.ts +27 -0
- package/package.json +78 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 KIM YOUNG JIN (ehfuse@gmail.com)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# @ehfuse/mui-form-controls
|
|
2
|
+
|
|
3
|
+
MUI 기반 폼 컨트롤과 텍스트 필드 컴포넌트 모음
|
|
4
|
+
|
|
5
|
+
## 컴포넌트
|
|
6
|
+
|
|
7
|
+
| 컴포넌트 | 설명 | 문서 |
|
|
8
|
+
| ----------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- |
|
|
9
|
+
| **SearchTextField** | 클리어 버튼, 로딩 상태, 디바운스 기능이 있는 검색 필드 | [API](./docs/ko/api.md#searchtextfield) |
|
|
10
|
+
| **PasswordTextField** | 비밀번호 보기/숨기기 토글, 유효성 검사 기능이 있는 비밀번호 필드 | [API](./docs/ko/api.md#passwordtextfield) |
|
|
11
|
+
| **PhoneTextField** | 자동 포맷팅, prefix 고정 기능이 있는 전화번호 필드 | [API](./docs/ko/api.md#phonetextfield) |
|
|
12
|
+
| **EmailTextField** | 도메인 자동완성, 유효성 검사 기능이 있는 이메일 필드 | [API](./docs/ko/api.md#emailtextfield) |
|
|
13
|
+
| **NumberTextField** | 천 단위 구분자, 소수점, 음수 지원하는 숫자 필드 | [API](./docs/ko/api.md#numbertextfield) |
|
|
14
|
+
| **AddressTextField** | 다음 우편번호 API 연동 주소 검색 필드 | [API](./docs/ko/api.md#addresstextfield) |
|
|
15
|
+
| **JuminTextField** | 주민등록번호 입력 필드 (마스킹, 정보 추출) | [API](./docs/ko/api.md#jumintextfield) |
|
|
16
|
+
| **BizNumTextField** | 사업자등록번호 입력 필드 (검증, 복사 기능) | [API](./docs/ko/api.md#biznumtextfield) |
|
|
17
|
+
| **CardNumTextField** | 카드번호 입력 필드 (마스킹, 브랜드 감지, 로고 아이콘) | [API](./docs/ko/api.md#cardnumtextfield) |
|
|
18
|
+
| **VerificationCodeTextField** | 인증번호 입력 필드 (숫자/영문/혼합) | [API](./docs/ko/api.md#verificationcodetextfield) |
|
|
19
|
+
| **DateTextField** | 달력 팝업, 다양한 날짜 포맷, 공휴일 표시 지원 날짜 필드 | [API](./docs/ko/api.md#datetextfield) |
|
|
20
|
+
| **TimeTextField** | 시간 입력 필드 (자동 포맷팅, 시간 범위 제한) | [API](./docs/ko/api.md#timetextfield) |
|
|
21
|
+
|
|
22
|
+
## 훅 (Hooks)
|
|
23
|
+
|
|
24
|
+
| 훅 | 설명 | 문서 |
|
|
25
|
+
| -------------------------- | --------------------------------------------------- | ---------------------------------------------- |
|
|
26
|
+
| **useKoreanHolidays** | 단일 연도의 한국 공휴일을 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidays) |
|
|
27
|
+
| **useKoreanHolidaysRange** | 여러 연도의 한국 공휴일을 한번에 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidaysrange) |
|
|
28
|
+
|
|
29
|
+
## 설치
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install @ehfuse/mui-form-controls
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 필수 의존성
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
40
|
+
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
41
|
+
"@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0",
|
|
42
|
+
"@mui/icons-material": "^5.0.0 || ^6.0.0 || ^7.0.0",
|
|
43
|
+
"@emotion/react": "^11.0.0",
|
|
44
|
+
"@emotion/styled": "^11.0.0",
|
|
45
|
+
"@ehfuse/overlay-scrollbar": "^1.0.0"
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 빠른 시작
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
import {
|
|
53
|
+
SearchTextField,
|
|
54
|
+
PasswordTextField,
|
|
55
|
+
PhoneTextField,
|
|
56
|
+
EmailTextField,
|
|
57
|
+
NumberTextField,
|
|
58
|
+
AddressTextField,
|
|
59
|
+
JuminTextField,
|
|
60
|
+
BizNumTextField,
|
|
61
|
+
CardNumTextField,
|
|
62
|
+
VerificationCodeTextField,
|
|
63
|
+
DateTextField,
|
|
64
|
+
TimeTextField,
|
|
65
|
+
useKoreanHolidays,
|
|
66
|
+
useKoreanHolidaysRange,
|
|
67
|
+
} from '@ehfuse/mui-form-controls';
|
|
68
|
+
|
|
69
|
+
// 검색 필드
|
|
70
|
+
<SearchTextField
|
|
71
|
+
value={search}
|
|
72
|
+
onChange={(e) => setSearch(e.target.value)}
|
|
73
|
+
searchIcon
|
|
74
|
+
loading={isSearching}
|
|
75
|
+
/>
|
|
76
|
+
|
|
77
|
+
// 비밀번호 필드
|
|
78
|
+
<PasswordTextField
|
|
79
|
+
value={password}
|
|
80
|
+
onChange={(e) => setPassword(e.target.value)}
|
|
81
|
+
showToggle
|
|
82
|
+
/>
|
|
83
|
+
|
|
84
|
+
// 전화번호 필드
|
|
85
|
+
<PhoneTextField
|
|
86
|
+
value={phone}
|
|
87
|
+
onChange={(e) => setPhone(e.target.value)}
|
|
88
|
+
prefix="010"
|
|
89
|
+
/>
|
|
90
|
+
|
|
91
|
+
// 이메일 필드 (forma 호환)
|
|
92
|
+
<EmailTextField
|
|
93
|
+
name="email"
|
|
94
|
+
value={email}
|
|
95
|
+
onChange={handleFormChange}
|
|
96
|
+
extraDomains={["mycompany.com"]}
|
|
97
|
+
/>
|
|
98
|
+
|
|
99
|
+
// 숫자 필드
|
|
100
|
+
<NumberTextField
|
|
101
|
+
value={amount}
|
|
102
|
+
onChange={(e) => setAmount(e.target.value)}
|
|
103
|
+
prefix="₩"
|
|
104
|
+
suffix="원"
|
|
105
|
+
/>
|
|
106
|
+
|
|
107
|
+
// 날짜 필드
|
|
108
|
+
<DateTextField
|
|
109
|
+
value={date}
|
|
110
|
+
onChange={(e) => setDate(e.target.value)}
|
|
111
|
+
format="YYYY.MM.DD"
|
|
112
|
+
selectedColor="secondary.main"
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
// 주소 필드
|
|
116
|
+
<AddressTextField
|
|
117
|
+
value={address}
|
|
118
|
+
onChange={setAddress}
|
|
119
|
+
/>
|
|
120
|
+
|
|
121
|
+
// 주민등록번호 필드
|
|
122
|
+
<JuminTextField
|
|
123
|
+
value={jumin}
|
|
124
|
+
onChange={setJumin}
|
|
125
|
+
mask
|
|
126
|
+
/>
|
|
127
|
+
|
|
128
|
+
// 사업자등록번호 필드
|
|
129
|
+
<BizNumTextField
|
|
130
|
+
value={bizNum}
|
|
131
|
+
onChange={setBizNum}
|
|
132
|
+
validate
|
|
133
|
+
copyIcon
|
|
134
|
+
/>
|
|
135
|
+
|
|
136
|
+
// 카드번호 필드
|
|
137
|
+
<CardNumTextField
|
|
138
|
+
value={cardNum}
|
|
139
|
+
onChange={(e) => setCardNum(e.target.value)}
|
|
140
|
+
onCardBrandChange={(brand) => console.log('카드 브랜드:', brand)}
|
|
141
|
+
/>
|
|
142
|
+
|
|
143
|
+
// 인증번호 필드
|
|
144
|
+
<VerificationCodeTextField
|
|
145
|
+
value={code}
|
|
146
|
+
onChange={setCode}
|
|
147
|
+
length={6}
|
|
148
|
+
type="numeric"
|
|
149
|
+
onComplete={(code) => console.log('완료:', code)}
|
|
150
|
+
/>
|
|
151
|
+
|
|
152
|
+
// 시간 필드
|
|
153
|
+
<TimeTextField
|
|
154
|
+
value={time}
|
|
155
|
+
onChange={(e) => setTime(e.target.value)}
|
|
156
|
+
format="HH:mm"
|
|
157
|
+
minTime="09:00"
|
|
158
|
+
maxTime="18:00"
|
|
159
|
+
/>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## 문서 / Documentation
|
|
163
|
+
|
|
164
|
+
- [한국어 문서](./docs/ko/getting-started.md)
|
|
165
|
+
- [English Documentation](./docs/en/getting-started.md)
|
|
166
|
+
|
|
167
|
+
## 라이선스 / License
|
|
168
|
+
|
|
169
|
+
MIT © 김영진 (Kim Young Jin)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AddressTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import type { AddressTextFieldProps } from "./types";
|
|
10
|
+
export declare const AddressTextField: import("react").ForwardRefExoticComponent<Omit<AddressTextFieldProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autocomplete.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { AutocompleteProps } from "./types";
|
|
10
|
+
export declare const Autocomplete: React.ForwardRefExoticComponent<Omit<AutocompleteProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BizNumTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import type { BizNumTextFieldProps } from "./types";
|
|
10
|
+
export declare const BizNumTextField: import("react").ForwardRefExoticComponent<Omit<BizNumTextFieldProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CardNumTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { CardNumTextFieldProps } from "./types";
|
|
11
|
+
export declare const CardNumTextField: React.ForwardRefExoticComponent<Omit<CardNumTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkbox.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { CheckboxProps } from "./types";
|
|
10
|
+
export declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClearTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
export declare const ClearTextField: React.ForwardRefExoticComponent<(Omit<import("@mui/material").FilledTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
11
|
+
clearIcon?: boolean;
|
|
12
|
+
spellCheck?: boolean;
|
|
13
|
+
onClear?: () => void;
|
|
14
|
+
}, "ref"> | Omit<import("@mui/material").OutlinedTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
15
|
+
clearIcon?: boolean;
|
|
16
|
+
spellCheck?: boolean;
|
|
17
|
+
onClear?: () => void;
|
|
18
|
+
}, "ref"> | Omit<import("@mui/material").StandardTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
19
|
+
clearIcon?: boolean;
|
|
20
|
+
spellCheck?: boolean;
|
|
21
|
+
onClear?: () => void;
|
|
22
|
+
}, "ref">) & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DateRange.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import type { DateRangeProps } from "./types";
|
|
9
|
+
export declare function DateRange({ form, startName, endName, startLabel, endLabel, startValue, endValue, onStartChange, onEndChange, fullWidth, size, readonly, gap, startProps, endProps, }: DateRangeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DateTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { DateTextFieldProps } from "./types";
|
|
11
|
+
export declare const DateTextField: React.ForwardRefExoticComponent<Omit<DateTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DateTimeTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { DateTimeTextFieldProps } from "./types";
|
|
11
|
+
export declare const DateTimeTextField: React.ForwardRefExoticComponent<Omit<DateTimeTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmailTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { EmailTextFieldProps } from "./types";
|
|
10
|
+
export declare const EmailTextField: React.ForwardRefExoticComponent<Omit<EmailTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JuminTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import type { JuminTextFieldProps } from "./types";
|
|
10
|
+
export declare const JuminTextField: import("react").ForwardRefExoticComponent<Omit<JuminTextFieldProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LabelSelect.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 Kim Young Jin
|
|
6
|
+
* @author Kim Young Jin (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { LabelSelectProps } from "./types";
|
|
10
|
+
export declare const LabelSelect: React.ForwardRefExoticComponent<Omit<LabelSelectProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NumberTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { NumberTextFieldProps } from "./types";
|
|
11
|
+
export declare const NumberTextField: React.ForwardRefExoticComponent<Omit<NumberTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PasswordTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { PasswordTextFieldProps } from "./types";
|
|
10
|
+
export declare const PasswordTextField: React.ForwardRefExoticComponent<Omit<PasswordTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhoneTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { PhoneTextFieldProps } from "./types";
|
|
11
|
+
export declare const PhoneTextField: React.ForwardRefExoticComponent<Omit<PhoneTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RadioGroup.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { RadioGroupProps } from "./types";
|
|
10
|
+
export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
export declare const SearchTextField: React.ForwardRefExoticComponent<(Omit<import("@mui/material").FilledTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
10
|
+
loading?: boolean;
|
|
11
|
+
searchIcon?: boolean;
|
|
12
|
+
searchIconColor?: string;
|
|
13
|
+
clearIcon?: boolean;
|
|
14
|
+
clearIconColor?: string;
|
|
15
|
+
spellCheck?: boolean;
|
|
16
|
+
onClear?: () => void;
|
|
17
|
+
}, "ref"> | Omit<import("@mui/material").OutlinedTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
18
|
+
loading?: boolean;
|
|
19
|
+
searchIcon?: boolean;
|
|
20
|
+
searchIconColor?: string;
|
|
21
|
+
clearIcon?: boolean;
|
|
22
|
+
clearIconColor?: string;
|
|
23
|
+
spellCheck?: boolean;
|
|
24
|
+
onClear?: () => void;
|
|
25
|
+
}, "ref"> | Omit<import("@mui/material").StandardTextFieldProps & import("./types").BaseTextFieldProps & {
|
|
26
|
+
loading?: boolean;
|
|
27
|
+
searchIcon?: boolean;
|
|
28
|
+
searchIconColor?: string;
|
|
29
|
+
clearIcon?: boolean;
|
|
30
|
+
clearIconColor?: string;
|
|
31
|
+
spellCheck?: boolean;
|
|
32
|
+
onClear?: () => void;
|
|
33
|
+
}, "ref">) & React.RefAttributes<HTMLDivElement>>;
|
package/dist/Select.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 Kim Young Jin
|
|
6
|
+
* @author Kim Young Jin (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { SelectProps } from "./types";
|
|
10
|
+
export declare const Select: React.ForwardRefExoticComponent<Omit<SelectProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
package/dist/Slider.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slider.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { SliderProps } from "./types";
|
|
10
|
+
export declare const Slider: React.ForwardRefExoticComponent<Omit<SliderProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
package/dist/Switch.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Switch.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { SwitchProps } from "./types";
|
|
10
|
+
export declare const Switch: React.ForwardRefExoticComponent<Omit<SwitchProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextArea.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
export declare const TextArea: React.ForwardRefExoticComponent<import("./types").BaseTextFieldProps & {
|
|
10
|
+
label?: string;
|
|
11
|
+
value?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
14
|
+
onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
15
|
+
onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
16
|
+
minRows?: number;
|
|
17
|
+
maxRows?: number;
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
fullWidth?: boolean;
|
|
21
|
+
sx?: import("@mui/material").SxProps<import("@mui/material").Theme>;
|
|
22
|
+
inputProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
23
|
+
inputRef?: React.Ref<HTMLTextAreaElement>;
|
|
24
|
+
} & React.RefAttributes<HTMLTextAreaElement>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextArea.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
export declare const TextArea: React.ForwardRefExoticComponent<import("./types").BaseTextFieldProps & {
|
|
10
|
+
label?: string;
|
|
11
|
+
value?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
14
|
+
onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
15
|
+
onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
16
|
+
minRows?: number;
|
|
17
|
+
maxRows?: number;
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
fullWidth?: boolean;
|
|
21
|
+
sx?: import("@mui/material").SxProps<import("@mui/material").Theme>;
|
|
22
|
+
inputProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
23
|
+
inputRef?: React.Ref<HTMLTextAreaElement>;
|
|
24
|
+
} & React.RefAttributes<HTMLTextAreaElement>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TimeTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
form,
|
|
6
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
7
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
8
|
+
*/
|
|
9
|
+
import React from "react";
|
|
10
|
+
import type { TimeTextFieldProps } from "./types";
|
|
11
|
+
export declare const TimeTextField: React.ForwardRefExoticComponent<Omit<TimeTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VerificationCodeTextField.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import React from "react";
|
|
9
|
+
import type { VerificationCodeTextFieldProps } from "./types";
|
|
10
|
+
export declare const VerificationCodeTextField: React.ForwardRefExoticComponent<Omit<VerificationCodeTextFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ColonBox.tsx - 시간 필드 사이의 콜론 아이콘 컴포넌트
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
import type { SxProps, Theme } from "@mui/material/styles";
|
|
9
|
+
export interface ColonBoxProps {
|
|
10
|
+
/** 크기 (small | medium) */
|
|
11
|
+
size?: "small" | "medium";
|
|
12
|
+
/** 가로 마진 */
|
|
13
|
+
mx?: number;
|
|
14
|
+
/** 콜론 표시 여부 */
|
|
15
|
+
visible?: boolean;
|
|
16
|
+
/** 추가 스타일 */
|
|
17
|
+
sx?: SxProps<Theme>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 콜론 아이콘을 감싸는 박스 컴포넌트
|
|
21
|
+
* TimeTextField와 DateTimeTextField에서 공통으로 사용
|
|
22
|
+
*/
|
|
23
|
+
export declare function ColonBox({ size, mx, visible, sx }: ColonBoxProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GroupedInputWrapper.tsx
|
|
3
|
+
*
|
|
4
|
+
* 그룹화된 입력 컴포넌트(사업자번호, 주민번호, 카드번호, 시간 등)를 위한
|
|
5
|
+
* FormControl + OutlinedInput 래퍼 컴포넌트
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
9
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
10
|
+
*/
|
|
11
|
+
import React, { RefObject } from "react";
|
|
12
|
+
import type { SxProps, Theme } from "@mui/material/styles";
|
|
13
|
+
export interface GroupedInputWrapperProps {
|
|
14
|
+
label?: React.ReactNode;
|
|
15
|
+
size?: "small" | "medium";
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
readonly?: boolean;
|
|
18
|
+
focusedGroup: number | null;
|
|
19
|
+
setFocusedGroup: (group: number | null) => void;
|
|
20
|
+
hasValue: boolean;
|
|
21
|
+
isInvalid?: boolean;
|
|
22
|
+
invalidBorderColor?: string;
|
|
23
|
+
inputRefs: RefObject<HTMLInputElement | null>[];
|
|
24
|
+
getTargetRefOnClick: () => {
|
|
25
|
+
ref: RefObject<HTMLInputElement | null>;
|
|
26
|
+
groupIndex: number;
|
|
27
|
+
};
|
|
28
|
+
sx?: SxProps<Theme>;
|
|
29
|
+
className?: string;
|
|
30
|
+
id?: string;
|
|
31
|
+
fullWidth?: boolean;
|
|
32
|
+
children: React.ReactNode;
|
|
33
|
+
contentSx?: SxProps<Theme>;
|
|
34
|
+
endAdornment?: React.ReactNode;
|
|
35
|
+
}
|
|
36
|
+
export declare function GroupedInputWrapper({ label, size, disabled, readonly, focusedGroup, setFocusedGroup, hasValue, isInvalid, invalidBorderColor, inputRefs, getTargetRefOnClick, sx, className, id, fullWidth, children, contentSx, endAdornment, }: GroupedInputWrapperProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SimpleCalendar.tsx
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 김영진 (Kim Young Jin)
|
|
6
|
+
* @author 김영진 (ehfuse@gmail.com)
|
|
7
|
+
*/
|
|
8
|
+
export type SimpleCalendarProps = {
|
|
9
|
+
selectedDate: Date | null;
|
|
10
|
+
onSelect: (date: Date) => void;
|
|
11
|
+
minDate?: Date;
|
|
12
|
+
maxDate?: Date;
|
|
13
|
+
holidays?: Date[];
|
|
14
|
+
selectedColor?: string;
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
showToday?: boolean;
|
|
17
|
+
showTimePicker?: boolean;
|
|
18
|
+
timeValue?: {
|
|
19
|
+
hour: string;
|
|
20
|
+
minute: string;
|
|
21
|
+
second?: string;
|
|
22
|
+
};
|
|
23
|
+
onTimeChange?: (hour: number, minute: number, second?: number) => void;
|
|
24
|
+
timeFormat?: "HH:mm" | "HH:mm:ss" | "hh:mm" | "hh:mm:ss";
|
|
25
|
+
minTime?: string;
|
|
26
|
+
maxTime?: string;
|
|
27
|
+
minuteStep?: number;
|
|
28
|
+
secondStep?: number;
|
|
29
|
+
hideDisabledTime?: boolean;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* 간단한 MUI 스타일 달력 컴포넌트
|
|
33
|
+
*
|
|
34
|
+
* 구조:
|
|
35
|
+
* calendar-root (flex column, 100% height)
|
|
36
|
+
* ├── calendar-header (공통, 고정 높이 40px)
|
|
37
|
+
* │ - viewMode에 따라 내용 변경
|
|
38
|
+
* ├── calendar-content (flex: 1)
|
|
39
|
+
* │ - [calendar] 요일 헤더 + 날짜 그리드
|
|
40
|
+
* │ - [year] 연도 그리드 (OverlayScrollbar)
|
|
41
|
+
* │ - [month] 월 그리드
|
|
42
|
+
* └── calendar-footer (공통, 고정 높이 40px)
|
|
43
|
+
* - viewMode에 따라 버튼 변경
|
|
44
|
+
*/
|
|
45
|
+
export declare function SimpleCalendar({ selectedDate, onSelect, minDate, maxDate, holidays, selectedColor, onClose, showToday, showTimePicker, timeValue, onTimeChange, timeFormat, minTime, maxTime, minuteStep, secondStep, hideDisabledTime, }: SimpleCalendarProps): import("react/jsx-runtime").JSX.Element;
|