@uniai-fe/uds-primitives 0.12.6 → 0.12.7

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.
@@ -1,10 +1,6 @@
1
1
  "use client";
2
2
 
3
- import type {
4
- ChangeEvent,
5
- FocusEvent as ReactFocusEvent,
6
- MouseEvent as ReactMouseEvent,
7
- } from "react";
3
+ import type { ChangeEvent, MouseEvent as ReactMouseEvent } from "react";
8
4
  import { forwardRef, useCallback, useMemo, useState } from "react";
9
5
  import { useUncontrolled } from "@mantine/hooks";
10
6
  import { Calendar } from "../../../calendar";
@@ -30,39 +26,30 @@ const INPUT_DATE_TABLE_FORMAT = "YY-MM-DD";
30
26
  * placeholder는 format과 별도 props로 처리되며, format 변경으로 placeholder가 자동 치환되지는 않는다.
31
27
  * @component
32
28
  * @param {InputCalendarProps} props
33
- * @property {"date" | "date-time" | "time"} [props.mode="date"] Calendar layout mode. 선택 body는 date로 유지된다.
34
- * @property {1 | 2} [props.columns=1] 동시 노출 달력 수
35
- * @property {string | null} [props.value] 제어형 날짜
36
- * @property {string | null} [props.defaultValue] 비제어 초기 날짜 값
37
- * @property {(value: string | null) => void} [props.onChange] 값 변경 이벤트
38
- * @property {(value: string | null) => void} [props.onValueChange] onChange alias
39
- * @property {boolean} [props.readOnly] 읽기 전용 여부
40
- * @property {boolean} [props.disabled] 비활성화 여부
41
- * @property {CalendarDatePickerProps} [props.datePickerProps] Mantine DatePicker 옵션
42
- * @property {string} [props.name] hidden input form name
43
- * @property {string} [props.form] hidden input form id
44
- * @property {UseFormRegisterReturn} [props.register] hidden input RHF register
45
- * @property {boolean} [props.required] hidden input required 여부
46
- * @property {InputCalendarHiddenInputProps} [props.hiddenInputProps] Template 고정값을 제외한 hidden input native props
47
- * @property {string} [props.placeholder="YYYY-MM-DD"] placeholder
48
- * @property {"primary" | "secondary" | "tertiary" | "table"} [props.priority="primary"] trigger input priority
49
- * @property {"small" | "medium" | "large"} [props.size="medium"] trigger input size
50
- * @property {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state="default"] trigger input state
51
- * @property {boolean} [props.block=false] trigger width 100% 여부
52
- * @property {"full" | "fit" | "fill" | "auto" | number | string} [props.width] trigger width preset 또는 custom width
53
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onFocus] trigger focus 핸들러
54
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onBlur] trigger blur 핸들러
55
- * @property {ReactNode} [props.header] 패널 header 콘텐츠
56
- * @property {ReactNode} [props.footer] 패널 footer 콘텐츠
57
- * @property {InputCalendarTexts} [props.texts] 기본 Date 문구
58
- * @property {unknown} [props.timePicker] 미구현 compatibility prop
59
- * @property {boolean} [props.calendarOpened] calendar 열림 제어 상태
60
- * @property {(open: boolean) => void} [props.onCalendarOpen] calendar 열림 변경 이벤트
61
- * @property {(event: MouseEvent<Element>) => void} [props.onClick] trigger 클릭 핸들러
62
- * @property {string} [props.id] trigger id
63
- * @property {ReactNode} [props.trigger] 커스텀 trigger 슬롯
64
- * @property {(props: InputCalendarTriggerRenderProps) => ReactNode} [props.renderTrigger] 커스텀 trigger 렌더 함수
65
- * @desc 날짜 표시 trigger, Calendar panel과 YYYY-MM-DD hidden form storage를 조합한다.
29
+ * @param {CalendarMode} [props.mode="date"] 날짜/시간 모드
30
+ * @param {CalendarColumns} [props.columns=1] 동시 노출 달력 수
31
+ * @param {CalendarValue} [props.value] 제어형 값
32
+ * @param {CalendarValue} [props.defaultValue] 비제어 초기값
33
+ * @param {CalendarOnChange} [props.onChange] 값 변경 이벤트
34
+ * @param {CalendarOnChange} [props.onValueChange] onChange alias
35
+ * @param {boolean} [props.readOnly] 읽기 전용 여부
36
+ * @param {boolean} [props.disabled] 비활성화 여부
37
+ * @param {CalendarDatePickerProps} [props.datePickerProps] Mantine DatePicker 옵션
38
+ * @param {string} [props.name] form name/RHF name
39
+ * @param {UseFormRegisterReturn} [props.register] RHF register
40
+ * @param {string} [props.placeholder="YYYY-MM-DD"] placeholder
41
+ * @param {"primary" | "secondary" | "tertiary" | "table"} [props.priority="primary"] trigger input priority
42
+ * @param {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state="default"] trigger input state
43
+ * @param {ReactNode} [props.header] 패널 header 콘텐츠
44
+ * @param {ReactNode} [props.footer] 패널 footer 콘텐츠
45
+ * @param {InputCalendarTexts} [props.texts] 기본 Date 문구
46
+ * @param {unknown} [props.timePicker] TimePicker 확장용 예약 슬롯(현재 미구현)
47
+ * @param {boolean} [props.calendarOpened] calendar 열림 제어 상태
48
+ * @param {(open: boolean) => void} [props.onCalendarOpen] calendar 열림 변경 이벤트
49
+ * @param {(event: MouseEvent<Element>) => void} [props.onClick] trigger 클릭 핸들러
50
+ * @param {string} [props.id] trigger id
51
+ * @param {ReactNode} [props.trigger] 커스텀 trigger 슬롯
52
+ * @param {(props: InputCalendarTriggerRenderProps) => ReactNode} [props.renderTrigger] 커스텀 trigger 렌더 함수
66
53
  */
67
54
  const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
68
55
  (
@@ -77,18 +64,10 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
77
64
  disabled,
78
65
  datePickerProps,
79
66
  name,
80
- form,
81
67
  register,
82
- required,
83
- hiddenInputProps,
84
68
  placeholder = "YYYY-MM-DD",
85
69
  priority = "primary",
86
- size = "medium",
87
70
  state = "default",
88
- block = false,
89
- width,
90
- onFocus,
91
- onBlur,
92
71
  header,
93
72
  footer,
94
73
  texts,
@@ -109,7 +88,7 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
109
88
  * Input Date Template; Calendar open 상태 변경 전달 함수.
110
89
  * 비제어 사용을 위해 내부 상태를 갱신하고, 제어형 사용을 위해 외부 owner에게 next open 값을 전달한다.
111
90
  * @param {boolean} nextOpen 다음 calendar open 상태
112
- * @return {void}
91
+ * @returns {void}
113
92
  */
114
93
  const handleCalendarOpenChange = useCallback(
115
94
  (nextOpen: boolean) => {
@@ -134,7 +113,7 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
134
113
  * Input Date Template; RHF hidden input 변경 이벤트 동기화 함수.
135
114
  * trigger 표시값과 form 저장값을 분리하기 위해 CalendarValue를 직렬화한 synthetic change를 register에 전달한다.
136
115
  * @param {CalendarValue} nextValue 다음 calendar 선택 값
137
- * @return {void}
116
+ * @returns {void}
138
117
  */
139
118
  const emitRegisterChange = useCallback(
140
119
  (nextValue: CalendarValue) => {
@@ -161,7 +140,7 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
161
140
  * Input Date Template; calendar value 갱신 함수.
162
141
  * 내부/제어형 value pipeline을 갱신한 뒤 RHF register 저장값을 같은 CalendarValue 기준으로 동기화한다.
163
142
  * @param {CalendarValue} nextValue 다음 calendar 선택 값
164
- * @return {void}
143
+ * @returns {void}
165
144
  */
166
145
  const updateValue = useCallback(
167
146
  (nextValue: CalendarValue) => {
@@ -185,33 +164,17 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
185
164
  * Input Date Template; trigger click 위임 함수.
186
165
  * Calendar Root의 PopOver toggle은 asChild trigger props가 담당하고, 이 함수는 소비자가 넘긴 trigger onClick만 보존한다.
187
166
  * @param {ReactMouseEvent<Element>} event trigger click event
188
- * @return {void}
167
+ * @returns {void}
189
168
  */
190
169
  const handleTriggerClick = (event: ReactMouseEvent<Element>) => {
191
170
  triggerOnClick?.(event);
192
171
  };
193
172
 
194
- /**
195
- * Input Date Template; trigger blur와 RHF touched 상태 동기화 함수.
196
- * 표시 trigger는 form name을 소유하지 않으므로 직렬화된 hidden input 값을 synthetic blur event로 전달한다.
197
- * @utility
198
- * @param {ReactFocusEvent<HTMLInputElement>} event trigger blur event
199
- * @desc 소비자 blur callback과 hidden input register blur를 같은 날짜 값으로 동기화한다.
200
- * @return {void}
201
- */
202
- const handleTriggerBlur = (event: ReactFocusEvent<HTMLInputElement>) => {
203
- register?.onBlur({
204
- target: { name: register.name, value: serializedCalendarValue },
205
- type: "blur",
206
- });
207
- onBlur?.(event);
208
- };
209
-
210
173
  /**
211
174
  * Input Date Template; Calendar Core change adapter 함수.
212
175
  * Calendar.Root의 onChange 값을 Template value/RHF 동기화 pipeline으로 연결한다.
213
176
  * @param {CalendarValue} nextValue 다음 calendar 선택 값
214
- * @return {void}
177
+ * @returns {void}
215
178
  */
216
179
  const handleCalendarChange = (nextValue: CalendarValue) => {
217
180
  updateValue(nextValue);
@@ -238,12 +201,7 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
238
201
  readOnly,
239
202
  onClick: handleTriggerClick,
240
203
  priority,
241
- size,
242
204
  state,
243
- block,
244
- width,
245
- onFocus,
246
- onBlur: handleTriggerBlur,
247
205
  };
248
206
 
249
207
  const triggerNode = trigger ?? renderTrigger?.(triggerRenderProps) ?? (
@@ -256,11 +214,6 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
256
214
  readOnly={readOnly}
257
215
  onClick={handleTriggerClick}
258
216
  priority={priority}
259
- size={size}
260
- block={block}
261
- width={width}
262
- onFocus={onFocus}
263
- onBlur={handleTriggerBlur}
264
217
  />
265
218
  );
266
219
 
@@ -275,7 +228,7 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
275
228
  readOnly={readOnly}
276
229
  value={calendarValue}
277
230
  onChange={handleCalendarChange}
278
- // Mantine DatePicker는 valueFormat prop을 지원하지 않으므로 옵션을 그대로 전달한다.
231
+ // 변경: Mantine DatePicker는 valueFormat prop을 지원하지 않으므로 옵션을 그대로 전달한다.
279
232
  datePickerProps={datePickerProps}
280
233
  header={header}
281
234
  footer={footerContent}
@@ -286,14 +239,11 @@ const InputDateTemplate = forwardRef<HTMLDivElement, InputCalendarProps>(
286
239
  </Calendar.Root>
287
240
  {(register?.name || name) && (
288
241
  <input
289
- // trigger 표시값과 form 저장값을 분리해 hidden input만 form에 참여한다.
290
- {...hiddenInputProps}
291
- {...register}
242
+ // 변경: trigger 표시값과 저장값을 분리하기 위해 form 참여는 hidden input만 담당한다.
292
243
  type="hidden"
293
244
  value={serializedCalendarValue}
294
245
  name={register?.name ?? name}
295
- form={form ?? hiddenInputProps?.form}
296
- required={required ?? hiddenInputProps?.required}
246
+ {...register}
297
247
  />
298
248
  )}
299
249
  </>
@@ -19,23 +19,17 @@ import type { InputCalendarTriggerViewProps } from "../../types";
19
19
  * 그 외 priority에서는 기존처럼 right 슬롯을 유지한다.
20
20
  * @component
21
21
  * @param {InputCalendarTriggerViewProps} props
22
- * @property {string} [props.className] trigger className
23
- * @property {string} [props.placeholder] placeholder
24
- * @property {string} [props.displayValue] 표시 문자열
25
- * @property {(event: MouseEvent<Element>) => void} [props.onClick] 클릭 핸들러
26
- * @property {boolean} [props.disabled] disabled 여부
27
- * @property {boolean} [props.readOnly] readOnly 여부
28
- * @property {"primary" | "secondary" | "tertiary" | "table"} [props.priority] trigger input priority
29
- * @property {"small" | "medium" | "large"} [props.size] trigger input size
30
- * @property {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state] trigger input state
31
- * @property {boolean} [props.block] trigger width 100% 여부
32
- * @property {"full" | "fit" | "fill" | "auto" | number | string} [props.width] trigger width preset 또는 custom width
33
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onFocus] trigger focus 핸들러
34
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onBlur] trigger blur 핸들러
35
- * @property {string} [props.id] input id
36
- * @property {string} [props.name] form name
37
- * @property {UseFormRegisterReturn} [props.register] RHF register
38
- * @desc Date 값을 직접 편집하지 않고 Calendar 선택값을 표시하는 기본 trigger다.
22
+ * @param {string} [props.className] trigger className
23
+ * @param {string} [props.placeholder] placeholder
24
+ * @param {string} [props.displayValue] 표시 문자열
25
+ * @param {(event: MouseEvent<Element>) => void} [props.onClick] 클릭 핸들러
26
+ * @param {boolean} [props.disabled] disabled 여부
27
+ * @param {boolean} [props.readOnly] readOnly 여부
28
+ * @param {"primary" | "secondary" | "tertiary" | "table"} [props.priority] trigger input priority
29
+ * @param {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state] trigger input state
30
+ * @param {string} [props.id] input id
31
+ * @param {string} [props.name] form name
32
+ * @param {UseFormRegisterReturn} [props.register] RHF register
39
33
  */
40
34
  const InputDateTrigger = forwardRef<
41
35
  HTMLInputElement,
@@ -50,12 +44,7 @@ const InputDateTrigger = forwardRef<
50
44
  disabled,
51
45
  readOnly,
52
46
  priority,
53
- size,
54
47
  state,
55
- block,
56
- width,
57
- onFocus,
58
- onBlur,
59
48
  id,
60
49
  name,
61
50
  register,
@@ -101,7 +90,7 @@ const InputDateTrigger = forwardRef<
101
90
  triggerInputRef.current?.click();
102
91
  };
103
92
 
104
- // Date trigger는 직접 타이핑을 막아 달력 선택을 단일 입력 경로로 유지한다.
93
+ // 변경: Date trigger는 기본적으로 직접 타이핑을 막고, 달력 선택을 단일 입력 경로로 유지한다.
105
94
  const shouldBlockTyping = !disabled && !readOnly;
106
95
 
107
96
  const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
@@ -181,14 +170,9 @@ const InputDateTrigger = forwardRef<
181
170
  name={name ?? register?.name}
182
171
  register={register}
183
172
  priority={priority}
184
- size={size}
185
173
  state={state}
186
- block={block}
187
- width={width}
188
174
  placeholder={placeholder}
189
175
  className={clsx("input-date-trigger-input", className)}
190
- onFocus={onFocus}
191
- onBlur={onBlur}
192
176
  onClick={handleInputClick}
193
177
  onKeyDown={handleKeyDown}
194
178
  onBeforeInput={handleBeforeInput}
@@ -1,10 +1,6 @@
1
1
  "use client";
2
2
 
3
- import type {
4
- ChangeEvent,
5
- FocusEvent as ReactFocusEvent,
6
- MouseEvent as ReactMouseEvent,
7
- } from "react";
3
+ import type { ChangeEvent, MouseEvent as ReactMouseEvent } from "react";
8
4
  import { forwardRef, useCallback, useMemo, useState } from "react";
9
5
  import { useUncontrolled } from "@mantine/hooks";
10
6
  import type { UseFormRegisterReturn } from "react-hook-form";
@@ -35,39 +31,29 @@ const INPUT_DATE_RANGE_TABLE_FORMAT = "YY-MM-DD";
35
31
  * form 저장은 start/end hidden input 2개로 분리한다.
36
32
  * @component
37
33
  * @param {InputCalendarRangeProps} props range date props
38
- * @property {[string | null, string | null]} [props.value] 제어형 range 값
39
- * @property {[string | null, string | null]} [props.defaultValue] 비제어 range 초기값
40
- * @property {(value: [string | null, string | null]) => void} [props.onChange] range 값 변경 이벤트
41
- * @property {(value: [string | null, string | null]) => void} [props.onValueChange] onChange alias
42
- * @property {boolean} [props.readOnly] 읽기 전용 여부
43
- * @property {boolean} [props.disabled] 비활성화 여부
44
- * @property {CalendarRangeDatePickerProps} [props.datePickerProps] Mantine range DatePicker 옵션
45
- * @property {string} [props.startName] 시작일 hidden input name
46
- * @property {string} [props.endName] 종료일 hidden input name
47
- * @property {string} [props.form] start/end hidden input form id
48
- * @property {UseFormRegisterReturn} [props.startRegister] 시작일 RHF register
49
- * @property {UseFormRegisterReturn} [props.endRegister] 종료일 RHF register
50
- * @property {boolean} [props.required] start/end hidden input required 여부
51
- * @property {InputCalendarHiddenInputProps} [props.startHiddenInputProps] 시작일 hidden input native props
52
- * @property {InputCalendarHiddenInputProps} [props.endHiddenInputProps] 종료일 hidden input native props
53
- * @property {string} [props.placeholder="YYYY-MM-DD ~ YYYY-MM-DD"] placeholder
54
- * @property {"primary" | "secondary" | "tertiary" | "table"} [props.priority="primary"] trigger input priority
55
- * @property {"small" | "medium" | "large"} [props.size="medium"] trigger input size
56
- * @property {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state="default"] trigger input state
57
- * @property {boolean} [props.block=false] trigger width 100% 여부
58
- * @property {"full" | "fit" | "fill" | "auto" | number | string} [props.width] trigger width preset 또는 custom width
59
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onFocus] trigger focus 핸들러
60
- * @property {(event: FocusEvent<HTMLInputElement>) => void} [props.onBlur] trigger blur 핸들러
61
- * @property {ReactNode} [props.header] 패널 header 콘텐츠
62
- * @property {ReactNode} [props.footer] 패널 footer 콘텐츠
63
- * @property {InputCalendarTexts} [props.texts] 기본 Date 문구
64
- * @property {boolean} [props.calendarOpened] calendar 열림 제어 상태
65
- * @property {(open: boolean) => void} [props.onCalendarOpen] calendar 열림 변경 이벤트
66
- * @property {string} [props.id] trigger id
67
- * @property {ReactNode} [props.trigger] 커스텀 trigger 슬롯
68
- * @property {(props: InputCalendarTriggerRenderProps) => ReactNode} [props.renderTrigger] 커스텀 trigger 렌더 함수
69
- * @property {(event: MouseEvent<Element>) => void} [props.onClick] trigger 클릭 핸들러
70
- * @desc 기간 표시 trigger, Calendar.Range panel과 start/end hidden form storage를 조합한다.
34
+ * @param {CalendarRangeValue} [props.value] 제어형 range 값
35
+ * @param {CalendarRangeValue} [props.defaultValue] 비제어 range 초기값
36
+ * @param {CalendarRangeOnChange} [props.onChange] range 값 변경 이벤트
37
+ * @param {CalendarRangeOnChange} [props.onValueChange] onChange alias
38
+ * @param {boolean} [props.readOnly] 읽기 전용 여부
39
+ * @param {boolean} [props.disabled] 비활성화 여부
40
+ * @param {CalendarRangeDatePickerProps} [props.datePickerProps] Mantine range DatePicker 옵션
41
+ * @param {string} [props.startName] 시작일 hidden input name
42
+ * @param {string} [props.endName] 종료일 hidden input name
43
+ * @param {UseFormRegisterReturn} [props.startRegister] 시작일 RHF register
44
+ * @param {UseFormRegisterReturn} [props.endRegister] 종료일 RHF register
45
+ * @param {string} [props.placeholder="YYYY-MM-DD ~ YYYY-MM-DD"] placeholder
46
+ * @param {"primary" | "secondary" | "tertiary" | "table"} [props.priority="primary"] trigger input priority
47
+ * @param {"default" | "active" | "focused" | "success" | "error" | "disabled" | "loading"} [props.state="default"] trigger input state
48
+ * @param {ReactNode} [props.header] 패널 header 콘텐츠
49
+ * @param {ReactNode} [props.footer] 패널 footer 콘텐츠
50
+ * @param {InputCalendarTexts} [props.texts] 기본 Date 문구
51
+ * @param {boolean} [props.calendarOpened] calendar 열림 제어 상태
52
+ * @param {(open: boolean) => void} [props.onCalendarOpen] calendar 열림 변경 이벤트
53
+ * @param {string} [props.id] trigger id
54
+ * @param {ReactNode} [props.trigger] 커스텀 trigger 슬롯
55
+ * @param {(props: InputCalendarTriggerRenderProps) => ReactNode} [props.renderTrigger] 커스텀 trigger 렌더 함수
56
+ * @param {(event: MouseEvent<Element>) => void} [props.onClick] trigger 클릭 핸들러
71
57
  * @example
72
58
  * <Input.Date.Range.Template
73
59
  * startName="start_date"
@@ -88,20 +74,11 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
88
74
  datePickerProps,
89
75
  startName,
90
76
  endName,
91
- form,
92
77
  startRegister,
93
78
  endRegister,
94
- required,
95
- startHiddenInputProps,
96
- endHiddenInputProps,
97
79
  placeholder = "YYYY-MM-DD ~ YYYY-MM-DD",
98
80
  priority = "primary",
99
- size = "medium",
100
81
  state = "default",
101
- block = false,
102
- width,
103
- onFocus,
104
- onBlur,
105
82
  header,
106
83
  footer,
107
84
  texts,
@@ -122,7 +99,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
122
99
  * Input Date Range Template; Calendar open 상태 변경 전달 함수.
123
100
  * 비제어 range calendar 상태를 갱신하고, 제어형 owner가 열림 상태를 조율할 수 있게 next open 값을 전달한다.
124
101
  * @param {boolean} nextOpen 다음 range calendar open 상태
125
- * @return {void}
102
+ * @returns {void}
126
103
  */
127
104
  const handleCalendarOpenChange = useCallback(
128
105
  (nextOpen: boolean) => {
@@ -148,7 +125,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
148
125
  * Input Date Range Template; RHF hidden input 변경 이벤트 동기화 함수.
149
126
  * range tuple의 start/end 값을 각각 직렬화해 startRegister/endRegister에 synthetic change로 전달한다.
150
127
  * @param {CalendarRangeValue} nextValue 다음 range calendar 선택 값
151
- * @return {void}
128
+ * @returns {void}
152
129
  */
153
130
  const emitRegisterChange = useCallback(
154
131
  (nextValue: CalendarRangeValue) => {
@@ -157,7 +134,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
157
134
  * start 또는 end register 한쪽에 직렬화 값을 전달한다.
158
135
  * @param {UseFormRegisterReturn | undefined} register RHF register 결과
159
136
  * @param {CalendarValue} nextCalendarValue 다음 start/end 선택 값
160
- * @return {void}
137
+ * @returns {void}
161
138
  */
162
139
  const emit = (
163
140
  register: UseFormRegisterReturn | undefined,
@@ -192,7 +169,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
192
169
  * Input Date Range Template; range value 갱신 함수.
193
170
  * Calendar.Range tuple 값을 갱신하고 start/end hidden input 저장값을 같은 tuple 기준으로 동기화한다.
194
171
  * @param {CalendarRangeValue} nextValue 다음 range calendar 선택 값
195
- * @return {void}
172
+ * @returns {void}
196
173
  */
197
174
  const updateValue = useCallback(
198
175
  (nextValue: CalendarRangeValue) => {
@@ -217,37 +194,17 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
217
194
  * Input Date Range Template; trigger click 위임 함수.
218
195
  * Calendar.Range Root의 PopOver toggle은 asChild trigger props가 담당하고, 이 함수는 소비자가 넘긴 trigger onClick만 보존한다.
219
196
  * @param {ReactMouseEvent<Element>} event trigger click event
220
- * @return {void}
197
+ * @returns {void}
221
198
  */
222
199
  const handleTriggerClick = (event: ReactMouseEvent<Element>) => {
223
200
  triggerOnClick?.(event);
224
201
  };
225
202
 
226
- /**
227
- * Input Date Range Template; trigger blur와 start/end RHF touched 상태 동기화 함수.
228
- * 표시 trigger는 저장 endpoint를 소유하지 않으므로 직렬화한 start/end 값을 각 register에 전달한다.
229
- * @utility
230
- * @param {ReactFocusEvent<HTMLInputElement>} event trigger blur event
231
- * @desc 소비자 blur callback과 두 hidden input register blur를 같은 range 값으로 동기화한다.
232
- * @return {void}
233
- */
234
- const handleTriggerBlur = (event: ReactFocusEvent<HTMLInputElement>) => {
235
- startRegister?.onBlur({
236
- target: { name: startRegister.name, value: serializedStartValue },
237
- type: "blur",
238
- });
239
- endRegister?.onBlur({
240
- target: { name: endRegister.name, value: serializedEndValue },
241
- type: "blur",
242
- });
243
- onBlur?.(event);
244
- };
245
-
246
203
  /**
247
204
  * Input Date Range Template; Calendar Range Core change adapter 함수.
248
205
  * Calendar.Range.Root의 onChange 값을 Template tuple/RHF 동기화 pipeline으로 연결한다.
249
206
  * @param {CalendarRangeValue} nextValue 다음 range calendar 선택 값
250
- * @return {void}
207
+ * @returns {void}
251
208
  */
252
209
  const handleCalendarChange = (nextValue: CalendarRangeValue) => {
253
210
  updateValue(nextValue);
@@ -275,7 +232,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
275
232
  >
276
233
  {texts?.clear ?? "삭제하기"}
277
234
  </InputDateClearButton>
278
- {/* range footer는 삭제/적용을 같은 row에 두고 Apply 폭을 content 기준으로 줄인다. */}
235
+ {/* 변경: range footer는 삭제/적용을 같은 row에 두고 Apply 폭을 content 기준으로 줄인다. */}
279
236
  <InputDateApplyButton
280
237
  className="input-date-range-apply-button"
281
238
  disabled={disabled}
@@ -295,12 +252,7 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
295
252
  readOnly,
296
253
  onClick: handleTriggerClick,
297
254
  priority,
298
- size,
299
255
  state,
300
- block,
301
- width,
302
- onFocus,
303
- onBlur: handleTriggerBlur,
304
256
  };
305
257
 
306
258
  const triggerNode = trigger ?? renderTrigger?.(triggerRenderProps) ?? (
@@ -313,11 +265,6 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
313
265
  readOnly={readOnly}
314
266
  onClick={handleTriggerClick}
315
267
  priority={priority}
316
- size={size}
317
- block={block}
318
- width={width}
319
- onFocus={onFocus}
320
- onBlur={handleTriggerBlur}
321
268
  />
322
269
  );
323
270
 
@@ -340,26 +287,20 @@ const InputDateRangeTemplate = forwardRef<HTMLElement, InputCalendarRangeProps>(
340
287
  </Calendar.Range.Root>
341
288
  {(startRegister?.name || startName) && (
342
289
  <input
343
- // range 시작일 저장값은 trigger 표시와 분리해 hidden input이 담당한다.
344
- {...startHiddenInputProps}
345
- {...startRegister}
290
+ // 변경: range 시작일 저장값은 trigger 표시와 분리해 hidden input이 담당한다.
346
291
  type="hidden"
347
292
  value={serializedStartValue}
348
293
  name={startRegister?.name ?? startName}
349
- form={form ?? startHiddenInputProps?.form}
350
- required={required ?? startHiddenInputProps?.required}
294
+ {...startRegister}
351
295
  />
352
296
  )}
353
297
  {(endRegister?.name || endName) && (
354
298
  <input
355
- // range 종료일 저장값은 trigger 표시와 분리해 hidden input이 담당한다.
356
- {...endHiddenInputProps}
357
- {...endRegister}
299
+ // 변경: range 종료일 저장값은 trigger 표시와 분리해 hidden input이 담당한다.
358
300
  type="hidden"
359
301
  value={serializedEndValue}
360
302
  name={endRegister?.name ?? endName}
361
- form={form ?? endHiddenInputProps?.form}
362
- required={required ?? endHiddenInputProps?.required}
303
+ {...endRegister}
363
304
  />
364
305
  )}
365
306
  </>