@ehfuse/mui-form-controls 3.0.33 → 3.0.36

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 CHANGED
@@ -1,312 +1,312 @@
1
- # @ehfuse/mui-form-controls
2
-
3
- MUI 기반 폼 컨트롤과 텍스트 필드 컴포넌트 모음
4
-
5
- ## 컴포넌트
6
-
7
- | 컴포넌트 | 설명 | 문서 |
8
- | ----------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- |
9
- | **AddressTextField** | 다음 우편번호 API 연동 주소 검색 필드 | [API](./docs/ko/api.md#addresstextfield) |
10
- | **Autocomplete** | 자동완성 기능이 있는 입력 필드 | [API](./docs/ko/api.md#autocomplete) |
11
- | **BizNumTextField** | 사업자등록번호 입력 필드 (검증, 복사 기능) | [API](./docs/ko/api.md#biznumtextfield) |
12
- | **CardNumTextField** | 카드번호 입력 필드 (마스킹, 브랜드 감지, 로고 아이콘) | [API](./docs/ko/api.md#cardnumtextfield) |
13
- | **ClearTextField** | 클리어 버튼이 있는 기본 텍스트 필드 | [API](./docs/ko/api.md#cleartextfield) |
14
- | **DateRange** | 날짜 범위 입력 필드 (시작일, 종료일) | [API](./docs/ko/api.md#daterange) |
15
- | **DateTextField** | 달력 팝업, 다양한 날짜 포맷, 공휴일 표시 지원 날짜 필드 | [API](./docs/ko/api.md#datetextfield) |
16
- | **DateTimeTextField** | 날짜 + 시간 입력 필드 | [API](./docs/ko/api.md#datetimetextfield) |
17
- | **EmailTextField** | 도메인 자동완성, 유효성 검사 기능이 있는 이메일 필드 | [API](./docs/ko/api.md#emailtextfield) |
18
- | **JuminTextField** | 주민등록번호 입력 필드 (마스킹, 정보 추출) | [API](./docs/ko/api.md#jumintextfield) |
19
- | **NumberField** | 숫자 입력 (증감 버튼 포함) | [API](./docs/ko/api.md#numberfield) |
20
- | **NumberSpinner** | 숫자 스피너 | [API](./docs/ko/api.md#numberspinner) |
21
- | **NumberTextField** | 천 단위 구분자, 소수점, 음수 지원하는 숫자 필드 | [API](./docs/ko/api.md#numbertextfield) |
22
- | **PasswordTextField** | 비밀번호 보기/숨기기 토글, 유효성 검사 기능이 있는 비밀번호 필드 | [API](./docs/ko/api.md#passwordtextfield) |
23
- | **PhoneTextField** | 자동 포맷팅, prefix 고정 기능이 있는 전화번호 필드 | [API](./docs/ko/api.md#phonetextfield) |
24
- | **SearchTextField** | 클리어 버튼, 로딩 상태, 디바운스 기능이 있는 검색 필드 | [API](./docs/ko/api.md#searchtextfield) |
25
- | **TextArea** | 여러 줄 텍스트 입력 필드 | [API](./docs/ko/api.md#textarea) |
26
- | **TextField** | MUI TextField 래퍼 (폼 통합) | [API](./docs/ko/api.md#textfield) |
27
- | **TimeTextField** | 시간 입력 필드 (자동 포맷팅, 시간 범위 제한) | [API](./docs/ko/api.md#timetextfield) |
28
- | **VerificationCodeTextField** | 인증번호 입력 필드 (숫자/영문/혼합) | [API](./docs/ko/api.md#verificationcodetextfield) |
29
-
30
- ## 폼 컨트롤 (Form Controls)
31
-
32
- 키보드 입력이 필요한 컴포넌트는 위 "컴포넌트"에, 마우스 조작만으로 선택/토글하는 컴포넌트는 여기서 분리해 정리했습니다.
33
-
34
- | 컴포넌트 | 설명 | 문서 |
35
- | --------------------- | ------------------------------------------------------------ | ----------------------------------------- |
36
- | **ButtonGroup** | 버튼 그룹 컴포넌트 | [API](./docs/ko/api.md#buttongroup) |
37
- | **Checkbox** | MUI Checkbox 래퍼 (폼 통합) | [API](./docs/ko/api.md#checkbox) |
38
- | **LabelSelect** | MUI Select 기반 선택 필드 (권장: 라벨 포함, form 바인딩) | [API](./docs/ko/api.md#labelselect) |
39
- | **RadioGroup** | MUI RadioGroup 래퍼 (폼 통합) | [API](./docs/ko/api.md#radiogroup) |
40
- | **Rating** | 평점 입력 컴포넌트 | [API](./docs/ko/api.md#rating) |
41
- | **Slider** | MUI Slider 래퍼 (폼 통합) | [API](./docs/ko/api.md#slider) |
42
- | **Stepper** | 스텝 진행 표시 컴포넌트 | [API](./docs/ko/api.md#stepper) |
43
- | **Switch** | MUI Switch 래퍼 (폼 통합) | [API](./docs/ko/api.md#switch) |
44
- | **ToggleButton** | 토글 버튼 컴포넌트 | [API](./docs/ko/api.md#togglebutton) |
45
- | **ToggleButtonGroup** | 옵션 기반 토글 그룹 필드 (`ToggleButtonGroup` + form 바인딩) | [API](./docs/ko/api.md#togglebuttongroup) |
46
-
47
- ## 훅 (Hooks)
48
-
49
- | 훅 | 설명 | 문서 |
50
- | -------------------------- | --------------------------------------------------- | ---------------------------------------------- |
51
- | **useKoreanHolidays** | 단일 연도의 한국 공휴일을 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidays) |
52
- | **useKoreanHolidaysRange** | 여러 연도의 한국 공휴일을 한번에 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidaysrange) |
53
-
54
- ## 설치
55
-
56
- ```bash
57
- npm install @ehfuse/mui-form-controls
58
- ```
59
-
60
- `AddressTextField`를 사용할 때만 다음 우편번호 의존성을 추가로 설치합니다.
61
-
62
- ```bash
63
- npm install react-daum-postcode
64
- ```
65
-
66
- ## 필수 의존성
67
-
68
- ```json
69
- {
70
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
71
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
72
- "@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0",
73
- "@mui/icons-material": "^5.0.0 || ^6.0.0 || ^7.0.0",
74
- "@emotion/react": "^11.0.0",
75
- "@emotion/styled": "^11.0.0",
76
- "@ehfuse/overlay-scrollbar": "^1.0.0"
77
- }
78
- ```
79
-
80
- ## 빠른 시작
81
-
82
- ```tsx
83
- import {
84
- SearchTextField,
85
- ClearTextField,
86
- PasswordTextField,
87
- PhoneTextField,
88
- EmailTextField,
89
- NumberTextField,
90
- JuminTextField,
91
- BizNumTextField,
92
- CardNumTextField,
93
- VerificationCodeTextField,
94
- DateTextField,
95
- TimeTextField,
96
- DateTimeTextField,
97
- TextField,
98
- Rating,
99
- ToggleButton,
100
- ToggleButtonGroup,
101
- ButtonGroup,
102
- Stepper,
103
- NumberField,
104
- NumberSpinner,
105
- LabelSelect,
106
- Autocomplete,
107
- Checkbox,
108
- RadioGroup,
109
- Switch,
110
- ToggleButtonGroup,
111
- Slider,
112
- DateRange,
113
- TextArea,
114
- useKoreanHolidays,
115
- useKoreanHolidaysRange,
116
- } from '@ehfuse/mui-form-controls';
117
-
118
- import { AddressTextField } from '@ehfuse/mui-form-controls/address';
119
-
120
- // 검색 필드
121
- <SearchTextField
122
- value={search}
123
- onChange={(e) => setSearch(e.target.value)}
124
- searchIcon
125
- loading={isSearching}
126
- />
127
-
128
- // 비밀번호 필드
129
- <PasswordTextField
130
- value={password}
131
- onChange={(e) => setPassword(e.target.value)}
132
- showToggle
133
- />
134
-
135
- // 전화번호 필드
136
- <PhoneTextField
137
- value={phone}
138
- onChange={(e) => setPhone(e.target.value)}
139
- prefix="010"
140
- />
141
-
142
- // 이메일 필드 (forma 호환)
143
- <EmailTextField
144
- name="email"
145
- value={email}
146
- onChange={handleFormChange}
147
- extraDomains={["mycompany.com"]}
148
- />
149
-
150
- // 숫자 필드
151
- <NumberTextField
152
- value={amount}
153
- onChange={(e) => setAmount(e.target.value)}
154
- prefix="₩"
155
- suffix="원"
156
- />
157
-
158
- // 날짜 필드
159
- <DateTextField
160
- value={date}
161
- onChange={(e) => setDate(e.target.value)}
162
- format="YYYY.MM.DD"
163
- selectedColor="secondary.main"
164
- />
165
-
166
- // 주소 필드
167
- <AddressTextField
168
- value={address}
169
- onChange={setAddress}
170
- />
171
-
172
- // 주민등록번호 필드
173
- <JuminTextField
174
- value={jumin}
175
- onChange={setJumin}
176
- mask
177
- />
178
-
179
- // 사업자등록번호 필드
180
- <BizNumTextField
181
- value={bizNum}
182
- onChange={setBizNum}
183
- validate
184
- copyIcon
185
- />
186
-
187
- // 카드번호 필드
188
- <CardNumTextField
189
- value={cardNum}
190
- onChange={(e) => setCardNum(e.target.value)}
191
- onCardBrandChange={(brand) => console.log('카드 브랜드:', brand)}
192
- />
193
-
194
- // 인증번호 필드
195
- <VerificationCodeTextField
196
- value={code}
197
- onChange={setCode}
198
- length={6}
199
- type="numeric"
200
- onComplete={(code) => console.log('완료:', code)}
201
- />
202
-
203
- // 시간 필드
204
- <TimeTextField
205
- value={time}
206
- onChange={(e) => setTime(e.target.value)}
207
- format="HH:mm"
208
- minTime="09:00"
209
- maxTime="18:00"
210
- />
211
-
212
- // 선택 필드 (권장: LabelSelect)
213
- <LabelSelect
214
- name="category"
215
- label="카테고리"
216
- form={form}
217
- options={[
218
- { value: 'a', label: 'A' },
219
- { value: 'b', label: 'B' },
220
- ]}
221
- />
222
-
223
- // 자동완성 필드
224
- <Autocomplete
225
- name="department"
226
- label="부서"
227
- form={form}
228
- options={[
229
- { value: 'dev', label: '개발' },
230
- { value: 'design', label: '디자인' },
231
- ]}
232
- />
233
-
234
- // 날짜 범위
235
- <DateRange
236
- form={form}
237
- startName="startDate"
238
- endName="endDate"
239
- startLabel="시작일"
240
- endLabel="종료일"
241
- />
242
-
243
- // 텍스트 에어리어
244
- <TextArea
245
- name="memo"
246
- label="메모"
247
- form={form}
248
- minRows={4}
249
- />
250
- ```
251
-
252
- > 선택 입력은 예제/문서 기준으로 `LabelSelect`를 사용합니다.
253
-
254
- ## Boolean 필드 표준 패턴
255
-
256
- `Switch`를 boolean 입력의 기본 form-binding 컴포넌트로 사용합니다.
257
-
258
- ```tsx
259
- import { Switch } from "@ehfuse/mui-form-controls";
260
-
261
- // 1) 단일 스위치 (라벨 없음)
262
- <Switch form={form} name="deceased_disability_certificate" />
263
-
264
- // 2) 라벨 포함 스위치 (권장)
265
- <Switch
266
- form={form}
267
- name="deceased_disability_certificate"
268
- label="장애인 증명서 제출"
269
- />
270
-
271
- // 3) readOnly / disabled
272
- <Switch
273
- form={form}
274
- name="deceased_disability_certificate"
275
- label="수정 불가 항목"
276
- readonly
277
- />
278
- <Switch
279
- form={form}
280
- name="deceased_disability_certificate"
281
- label="비활성 항목"
282
- disabled
283
- />
284
- ```
285
-
286
- ## Toggle 그룹 표준 패턴
287
-
288
- ```tsx
289
- import { ToggleButtonGroup } from "@ehfuse/mui-form-controls";
290
-
291
- <ToggleButtonGroup
292
- form={form}
293
- name="contractor_gender"
294
- exclusive
295
- options={[
296
- { label: "남성", value: "M" },
297
- { label: "여성", value: "F" },
298
- ]}
299
- onDeselect="clear"
300
- fullWidth
301
- size="small"
302
- />;
303
- ```
304
-
305
- ## 문서 / Documentation
306
-
307
- - [한국어 문서](./docs/ko/getting-started.md)
308
- - [English Documentation](./docs/en/getting-started.md)
309
-
310
- ## 라이선스 / License
311
-
312
- MIT © 김영진 (Kim Young Jin)
1
+ # @ehfuse/mui-form-controls
2
+
3
+ MUI 기반 폼 컨트롤과 텍스트 필드 컴포넌트 모음
4
+
5
+ ## 컴포넌트
6
+
7
+ | 컴포넌트 | 설명 | 문서 |
8
+ | ----------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- |
9
+ | **AddressTextField** | 다음 우편번호 API 연동 주소 검색 필드 | [API](./docs/ko/api.md#addresstextfield) |
10
+ | **Autocomplete** | 자동완성 기능이 있는 입력 필드 | [API](./docs/ko/api.md#autocomplete) |
11
+ | **BizNumTextField** | 사업자등록번호 입력 필드 (검증, 복사 기능) | [API](./docs/ko/api.md#biznumtextfield) |
12
+ | **CardNumTextField** | 카드번호 입력 필드 (마스킹, 브랜드 감지, 로고 아이콘) | [API](./docs/ko/api.md#cardnumtextfield) |
13
+ | **ClearTextField** | 클리어 버튼이 있는 기본 텍스트 필드 | [API](./docs/ko/api.md#cleartextfield) |
14
+ | **DateRange** | 날짜 범위 입력 필드 (시작일, 종료일) | [API](./docs/ko/api.md#daterange) |
15
+ | **DateTextField** | 달력 팝업, 다양한 날짜 포맷, 공휴일 표시 지원 날짜 필드 | [API](./docs/ko/api.md#datetextfield) |
16
+ | **DateTimeTextField** | 날짜 + 시간 입력 필드 | [API](./docs/ko/api.md#datetimetextfield) |
17
+ | **EmailTextField** | 도메인 자동완성, 유효성 검사 기능이 있는 이메일 필드 | [API](./docs/ko/api.md#emailtextfield) |
18
+ | **JuminTextField** | 주민등록번호 입력 필드 (마스킹, 정보 추출) | [API](./docs/ko/api.md#jumintextfield) |
19
+ | **NumberField** | 숫자 입력 (증감 버튼 포함) | [API](./docs/ko/api.md#numberfield) |
20
+ | **NumberSpinner** | 숫자 스피너 | [API](./docs/ko/api.md#numberspinner) |
21
+ | **NumberTextField** | 천 단위 구분자, 소수점, 음수 지원하는 숫자 필드 | [API](./docs/ko/api.md#numbertextfield) |
22
+ | **PasswordTextField** | 비밀번호 보기/숨기기 토글, 유효성 검사 기능이 있는 비밀번호 필드 | [API](./docs/ko/api.md#passwordtextfield) |
23
+ | **PhoneTextField** | 자동 포맷팅, prefix 고정 기능이 있는 전화번호 필드 | [API](./docs/ko/api.md#phonetextfield) |
24
+ | **SearchTextField** | 클리어 버튼, 로딩 상태, 디바운스 기능이 있는 검색 필드 | [API](./docs/ko/api.md#searchtextfield) |
25
+ | **TextArea** | 여러 줄 텍스트 입력 필드 | [API](./docs/ko/api.md#textarea) |
26
+ | **TextField** | MUI TextField 래퍼 (폼 통합) | [API](./docs/ko/api.md#textfield) |
27
+ | **TimeTextField** | 시간 입력 필드 (자동 포맷팅, 시간 범위 제한) | [API](./docs/ko/api.md#timetextfield) |
28
+ | **VerificationCodeTextField** | 인증번호 입력 필드 (숫자/영문/혼합) | [API](./docs/ko/api.md#verificationcodetextfield) |
29
+
30
+ ## 폼 컨트롤 (Form Controls)
31
+
32
+ 키보드 입력이 필요한 컴포넌트는 위 "컴포넌트"에, 마우스 조작만으로 선택/토글하는 컴포넌트는 여기서 분리해 정리했습니다.
33
+
34
+ | 컴포넌트 | 설명 | 문서 |
35
+ | --------------------- | ------------------------------------------------------------ | ----------------------------------------- |
36
+ | **ButtonGroup** | 버튼 그룹 컴포넌트 | [API](./docs/ko/api.md#buttongroup) |
37
+ | **Checkbox** | MUI Checkbox 래퍼 (폼 통합) | [API](./docs/ko/api.md#checkbox) |
38
+ | **LabelSelect** | MUI Select 기반 선택 필드 (권장: 라벨 포함, form 바인딩) | [API](./docs/ko/api.md#labelselect) |
39
+ | **RadioGroup** | MUI RadioGroup 래퍼 (폼 통합) | [API](./docs/ko/api.md#radiogroup) |
40
+ | **Rating** | 평점 입력 컴포넌트 | [API](./docs/ko/api.md#rating) |
41
+ | **Slider** | MUI Slider 래퍼 (폼 통합) | [API](./docs/ko/api.md#slider) |
42
+ | **Stepper** | 스텝 진행 표시 컴포넌트 | [API](./docs/ko/api.md#stepper) |
43
+ | **Switch** | MUI Switch 래퍼 (폼 통합) | [API](./docs/ko/api.md#switch) |
44
+ | **ToggleButton** | 토글 버튼 컴포넌트 | [API](./docs/ko/api.md#togglebutton) |
45
+ | **ToggleButtonGroup** | 옵션 기반 토글 그룹 필드 (`ToggleButtonGroup` + form 바인딩) | [API](./docs/ko/api.md#togglebuttongroup) |
46
+
47
+ ## 훅 (Hooks)
48
+
49
+ | 훅 | 설명 | 문서 |
50
+ | -------------------------- | --------------------------------------------------- | ---------------------------------------------- |
51
+ | **useKoreanHolidays** | 단일 연도의 한국 공휴일을 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidays) |
52
+ | **useKoreanHolidaysRange** | 여러 연도의 한국 공휴일을 한번에 조회하는 커스텀 훅 | [API](./docs/ko/api.md#usekoreanholidaysrange) |
53
+
54
+ ## 설치
55
+
56
+ ```bash
57
+ npm install @ehfuse/mui-form-controls
58
+ ```
59
+
60
+ `AddressTextField`를 사용할 때만 다음 우편번호 의존성을 추가로 설치합니다.
61
+
62
+ ```bash
63
+ npm install react-daum-postcode
64
+ ```
65
+
66
+ ## 필수 의존성
67
+
68
+ ```json
69
+ {
70
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
71
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
72
+ "@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0",
73
+ "@mui/icons-material": "^5.0.0 || ^6.0.0 || ^7.0.0",
74
+ "@emotion/react": "^11.0.0",
75
+ "@emotion/styled": "^11.0.0",
76
+ "@ehfuse/overlay-scrollbar": "^1.0.0"
77
+ }
78
+ ```
79
+
80
+ ## 빠른 시작
81
+
82
+ ```tsx
83
+ import {
84
+ SearchTextField,
85
+ ClearTextField,
86
+ PasswordTextField,
87
+ PhoneTextField,
88
+ EmailTextField,
89
+ NumberTextField,
90
+ JuminTextField,
91
+ BizNumTextField,
92
+ CardNumTextField,
93
+ VerificationCodeTextField,
94
+ DateTextField,
95
+ TimeTextField,
96
+ DateTimeTextField,
97
+ TextField,
98
+ Rating,
99
+ ToggleButton,
100
+ ToggleButtonGroup,
101
+ ButtonGroup,
102
+ Stepper,
103
+ NumberField,
104
+ NumberSpinner,
105
+ LabelSelect,
106
+ Autocomplete,
107
+ Checkbox,
108
+ RadioGroup,
109
+ Switch,
110
+ ToggleButtonGroup,
111
+ Slider,
112
+ DateRange,
113
+ TextArea,
114
+ useKoreanHolidays,
115
+ useKoreanHolidaysRange,
116
+ } from '@ehfuse/mui-form-controls';
117
+
118
+ import { AddressTextField } from '@ehfuse/mui-form-controls/address';
119
+
120
+ // 검색 필드
121
+ <SearchTextField
122
+ value={search}
123
+ onChange={(e) => setSearch(e.target.value)}
124
+ searchIcon
125
+ loading={isSearching}
126
+ />
127
+
128
+ // 비밀번호 필드
129
+ <PasswordTextField
130
+ value={password}
131
+ onChange={(e) => setPassword(e.target.value)}
132
+ showToggle
133
+ />
134
+
135
+ // 전화번호 필드
136
+ <PhoneTextField
137
+ value={phone}
138
+ onChange={(e) => setPhone(e.target.value)}
139
+ prefix="010"
140
+ />
141
+
142
+ // 이메일 필드 (forma 호환)
143
+ <EmailTextField
144
+ name="email"
145
+ value={email}
146
+ onChange={handleFormChange}
147
+ extraDomains={["mycompany.com"]}
148
+ />
149
+
150
+ // 숫자 필드
151
+ <NumberTextField
152
+ value={amount}
153
+ onChange={(e) => setAmount(e.target.value)}
154
+ prefix="₩"
155
+ suffix="원"
156
+ />
157
+
158
+ // 날짜 필드
159
+ <DateTextField
160
+ value={date}
161
+ onChange={(e) => setDate(e.target.value)}
162
+ format="YYYY.MM.DD"
163
+ selectedColor="secondary.main"
164
+ />
165
+
166
+ // 주소 필드
167
+ <AddressTextField
168
+ value={address}
169
+ onChange={setAddress}
170
+ />
171
+
172
+ // 주민등록번호 필드
173
+ <JuminTextField
174
+ value={jumin}
175
+ onChange={setJumin}
176
+ mask
177
+ />
178
+
179
+ // 사업자등록번호 필드
180
+ <BizNumTextField
181
+ value={bizNum}
182
+ onChange={setBizNum}
183
+ validate
184
+ copyIcon
185
+ />
186
+
187
+ // 카드번호 필드
188
+ <CardNumTextField
189
+ value={cardNum}
190
+ onChange={(e) => setCardNum(e.target.value)}
191
+ onCardBrandChange={(brand) => console.log('카드 브랜드:', brand)}
192
+ />
193
+
194
+ // 인증번호 필드
195
+ <VerificationCodeTextField
196
+ value={code}
197
+ onChange={setCode}
198
+ length={6}
199
+ type="numeric"
200
+ onComplete={(code) => console.log('완료:', code)}
201
+ />
202
+
203
+ // 시간 필드
204
+ <TimeTextField
205
+ value={time}
206
+ onChange={(e) => setTime(e.target.value)}
207
+ format="HH:mm"
208
+ minTime="09:00"
209
+ maxTime="18:00"
210
+ />
211
+
212
+ // 선택 필드 (권장: LabelSelect)
213
+ <LabelSelect
214
+ name="category"
215
+ label="카테고리"
216
+ form={form}
217
+ options={[
218
+ { value: 'a', label: 'A' },
219
+ { value: 'b', label: 'B' },
220
+ ]}
221
+ />
222
+
223
+ // 자동완성 필드
224
+ <Autocomplete
225
+ name="department"
226
+ label="부서"
227
+ form={form}
228
+ options={[
229
+ { value: 'dev', label: '개발' },
230
+ { value: 'design', label: '디자인' },
231
+ ]}
232
+ />
233
+
234
+ // 날짜 범위
235
+ <DateRange
236
+ form={form}
237
+ startName="startDate"
238
+ endName="endDate"
239
+ startLabel="시작일"
240
+ endLabel="종료일"
241
+ />
242
+
243
+ // 텍스트 에어리어
244
+ <TextArea
245
+ name="memo"
246
+ label="메모"
247
+ form={form}
248
+ minRows={4}
249
+ />
250
+ ```
251
+
252
+ > 선택 입력은 예제/문서 기준으로 `LabelSelect`를 사용합니다.
253
+
254
+ ## Boolean 필드 표준 패턴
255
+
256
+ `Switch`를 boolean 입력의 기본 form-binding 컴포넌트로 사용합니다.
257
+
258
+ ```tsx
259
+ import { Switch } from "@ehfuse/mui-form-controls";
260
+
261
+ // 1) 단일 스위치 (라벨 없음)
262
+ <Switch form={form} name="deceased_disability_certificate" />
263
+
264
+ // 2) 라벨 포함 스위치 (권장)
265
+ <Switch
266
+ form={form}
267
+ name="deceased_disability_certificate"
268
+ label="장애인 증명서 제출"
269
+ />
270
+
271
+ // 3) readOnly / disabled
272
+ <Switch
273
+ form={form}
274
+ name="deceased_disability_certificate"
275
+ label="수정 불가 항목"
276
+ readonly
277
+ />
278
+ <Switch
279
+ form={form}
280
+ name="deceased_disability_certificate"
281
+ label="비활성 항목"
282
+ disabled
283
+ />
284
+ ```
285
+
286
+ ## Toggle 그룹 표준 패턴
287
+
288
+ ```tsx
289
+ import { ToggleButtonGroup } from "@ehfuse/mui-form-controls";
290
+
291
+ <ToggleButtonGroup
292
+ form={form}
293
+ name="contractor_gender"
294
+ exclusive
295
+ options={[
296
+ { label: "남성", value: "M" },
297
+ { label: "여성", value: "F" },
298
+ ]}
299
+ onDeselect="clear"
300
+ fullWidth
301
+ size="small"
302
+ />;
303
+ ```
304
+
305
+ ## 문서 / Documentation
306
+
307
+ - [한국어 문서](./docs/ko/getting-started.md)
308
+ - [English Documentation](./docs/en/getting-started.md)
309
+
310
+ ## 라이선스 / License
311
+
312
+ MIT © 김영진 (Kim Young Jin)
@@ -2,7 +2,6 @@
2
2
  * DateTextField.tsx
3
3
  *
4
4
  * @license MIT
5
- form,
6
5
  * @copyright 2025 김영진 (Kim Young Jin)
7
6
  * @author 김영진 (ehfuse@gmail.com)
8
7
  */
@@ -2,7 +2,6 @@
2
2
  * DateTimeTextField.tsx
3
3
  *
4
4
  * @license MIT
5
- form,
6
5
  * @copyright 2025 김영진 (Kim Young Jin)
7
6
  * @author 김영진 (ehfuse@gmail.com)
8
7
  */
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SwitchField.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 { SwitchFieldProps } from "./types";
10
+ export declare const SwitchField: React.ForwardRefExoticComponent<Omit<SwitchFieldProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
@@ -2,7 +2,6 @@
2
2
  * TimeTextField.tsx
3
3
  *
4
4
  * @license MIT
5
- form,
6
5
  * @copyright 2025 김영진 (Kim Young Jin)
7
6
  * @author 김영진 (ehfuse@gmail.com)
8
7
  */