@uniai-fe/uds-primitives 0.12.7 → 0.12.8
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/package.json +2 -2
- package/src/components/input/markup/date/Template.tsx +83 -33
- package/src/components/input/markup/date/Trigger.tsx +28 -12
- package/src/components/input/markup/date/range/Template.tsx +94 -35
- package/src/components/input/markup/time/Template.tsx +118 -5
- package/src/components/input/markup/time/Trigger.tsx +35 -2
- package/src/components/input/types/date.ts +176 -33
- package/src/components/input/types/time.ts +10 -4
- package/src/components/time-picker/markup/Footer.tsx +5 -5
- package/src/components/time-picker/markup/HourSection.tsx +7 -7
- package/src/components/time-picker/markup/MinuteSection.tsx +5 -5
- package/src/components/time-picker/markup/Summary.tsx +2 -2
- package/src/components/time-picker/markup/Template.tsx +11 -11
- package/src/components/time-picker/types/time-picker.ts +6 -0
- package/src/components/time-picker/utils/time.ts +21 -9
|
@@ -5,11 +5,11 @@ import type { TimePickerFooterProps } from "../types";
|
|
|
5
5
|
* TimePicker Footer; 삭제와 적용 action을 렌더한다.
|
|
6
6
|
* @component
|
|
7
7
|
* @param {TimePickerFooterProps} props
|
|
8
|
-
* @
|
|
9
|
-
* @
|
|
10
|
-
* @
|
|
11
|
-
* @
|
|
12
|
-
* @
|
|
8
|
+
* @property {boolean} props.clearable 삭제 action 노출 여부
|
|
9
|
+
* @property {boolean} props.disabled 비활성화 여부
|
|
10
|
+
* @property {() => void} props.onClear 삭제 핸들러
|
|
11
|
+
* @property {() => void} props.onApply 적용 핸들러
|
|
12
|
+
* @desc clearable 상태에 따라 삭제 action을 노출하고 적용 action을 유지한다.
|
|
13
13
|
* @example
|
|
14
14
|
* <TimePickerFooter
|
|
15
15
|
* clearable
|
|
@@ -12,13 +12,13 @@ const PERIOD_OPTIONS = [
|
|
|
12
12
|
* TimePicker Hour Section; 오전·오후와 시 선택 grid를 렌더한다.
|
|
13
13
|
* @component
|
|
14
14
|
* @param {TimePickerHourSectionProps} props
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
17
|
-
* @
|
|
18
|
-
* @
|
|
19
|
-
* @
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
15
|
+
* @property {"12h" | "24h"} props.format 표시 형식
|
|
16
|
+
* @property {number | null} props.selectedHour 선택한 표시 시
|
|
17
|
+
* @property {"am" | "pm"} props.period 오전·오후
|
|
18
|
+
* @property {boolean} props.disabled 비활성화 여부
|
|
19
|
+
* @property {(hours: number) => void} props.onHourSelect 시 선택 핸들러
|
|
20
|
+
* @property {(period: "am" | "pm") => void} props.onPeriodChange 오전·오후 변경 핸들러
|
|
21
|
+
* @desc 12시간제와 24시간제에 맞는 시 목록과 period control을 렌더한다.
|
|
22
22
|
* @example
|
|
23
23
|
* <TimePickerHourSection
|
|
24
24
|
* format="12h"
|
|
@@ -8,11 +8,11 @@ const MINUTES = Array.from({ length: 12 }, (_, index) => index * 5);
|
|
|
8
8
|
* TimePicker Minute Section; 1분 stepper와 5분 선택 grid를 렌더한다.
|
|
9
9
|
* @component
|
|
10
10
|
* @param {TimePickerMinuteSectionProps} props
|
|
11
|
-
* @
|
|
12
|
-
* @
|
|
13
|
-
* @
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
11
|
+
* @property {number | null} props.selectedMinute 선택한 분
|
|
12
|
+
* @property {boolean} props.disabled 비활성화 여부
|
|
13
|
+
* @property {(amount: 1 | -1) => void} props.onMinuteStep 1분 증감 핸들러
|
|
14
|
+
* @property {(minutes: number) => void} props.onMinuteSelect 분 선택 핸들러
|
|
15
|
+
* @desc 5분 간격 빠른 선택과 1분 단위 미세 조정을 함께 제공한다.
|
|
16
16
|
* @example
|
|
17
17
|
* <TimePickerMinuteSection
|
|
18
18
|
* selectedMinute={30}
|
|
@@ -4,8 +4,8 @@ import type { TimePickerSummaryProps } from "../types";
|
|
|
4
4
|
* TimePicker Summary; 현재 선택한 시간을 표시한다.
|
|
5
5
|
* @component
|
|
6
6
|
* @param {TimePickerSummaryProps} props
|
|
7
|
-
* @
|
|
8
|
-
* @
|
|
7
|
+
* @property {string} props.summary 선택한 시간 표시값
|
|
8
|
+
* @desc TimePicker panel 상단에 현재 선택값 또는 빈 상태를 표시한다.
|
|
9
9
|
* @example
|
|
10
10
|
* <TimePickerSummary summary="09:30 오전" />
|
|
11
11
|
*/
|
|
@@ -11,17 +11,17 @@ import TimePickerSummary from "./Summary";
|
|
|
11
11
|
* TimePicker Template; Figma의 시간·분 선택과 footer action을 렌더한다.
|
|
12
12
|
* @component
|
|
13
13
|
* @param {TimePickerTemplateProps} props
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
17
|
-
* @
|
|
18
|
-
* @
|
|
19
|
-
* @
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
22
|
-
* @
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
14
|
+
* @property {string} props.value 24시간 형식 시간 값
|
|
15
|
+
* @property {"12h" | "24h"} props.format 표시 형식
|
|
16
|
+
* @property {boolean} props.clearable 삭제 action 노출 여부
|
|
17
|
+
* @property {boolean} props.disabled 비활성화 여부
|
|
18
|
+
* @property {(hours: number) => void} props.onHourSelect 시 선택 핸들러
|
|
19
|
+
* @property {(minutes: number) => void} props.onMinuteSelect 분 선택 핸들러
|
|
20
|
+
* @property {(period: "am" | "pm") => void} props.onPeriodChange 오전·오후 변경 핸들러
|
|
21
|
+
* @property {(amount: 1 | -1) => void} props.onMinuteStep 1분 증감 핸들러
|
|
22
|
+
* @property {() => void} props.onClear 삭제 핸들러
|
|
23
|
+
* @property {() => void} props.onApply 적용 핸들러
|
|
24
|
+
* @desc 24시간 저장값을 표시 형식에 맞춰 시·분 선택 section과 action에 배분한다.
|
|
25
25
|
* @example
|
|
26
26
|
* <TimePicker.Template
|
|
27
27
|
* value="09:30"
|
|
@@ -21,6 +21,7 @@ export type TimePickerUnit = "hours" | "minutes" | "seconds";
|
|
|
21
21
|
* @property {number} hours 시
|
|
22
22
|
* @property {number} minutes 분
|
|
23
23
|
* @property {number} seconds 초
|
|
24
|
+
* @desc 24시간 저장값의 정규화된 시·분·초 숫자 구성
|
|
24
25
|
*/
|
|
25
26
|
export interface TimePickerParts {
|
|
26
27
|
/**
|
|
@@ -49,6 +50,7 @@ export interface TimePickerParts {
|
|
|
49
50
|
* @property {(amount: 1 | -1) => void} onMinuteStep 1분 증감 핸들러
|
|
50
51
|
* @property {() => void} onClear 삭제 핸들러
|
|
51
52
|
* @property {() => void} onApply 적용 핸들러
|
|
53
|
+
* @desc TimePicker panel의 선택값, 표시 형식과 action 계약
|
|
52
54
|
*/
|
|
53
55
|
export interface TimePickerTemplateProps {
|
|
54
56
|
/**
|
|
@@ -96,6 +98,7 @@ export interface TimePickerTemplateProps {
|
|
|
96
98
|
/**
|
|
97
99
|
* TimePicker Summary props.
|
|
98
100
|
* @property {string} summary 선택한 시간 표시값
|
|
101
|
+
* @desc panel 상단의 현재 선택값 표시 계약
|
|
99
102
|
*/
|
|
100
103
|
export interface TimePickerSummaryProps {
|
|
101
104
|
/**
|
|
@@ -112,6 +115,7 @@ export interface TimePickerSummaryProps {
|
|
|
112
115
|
* @property {boolean} disabled 비활성화 여부
|
|
113
116
|
* @property {(hours: number) => void} onHourSelect 시 선택 핸들러
|
|
114
117
|
* @property {(period: "am" | "pm") => void} onPeriodChange 오전·오후 변경 핸들러
|
|
118
|
+
* @desc 표시 형식별 시 목록과 오전·오후 선택 계약
|
|
115
119
|
*/
|
|
116
120
|
export interface TimePickerHourSectionProps {
|
|
117
121
|
/**
|
|
@@ -146,6 +150,7 @@ export interface TimePickerHourSectionProps {
|
|
|
146
150
|
* @property {boolean} disabled 비활성화 여부
|
|
147
151
|
* @property {(amount: 1 | -1) => void} onMinuteStep 1분 증감 핸들러
|
|
148
152
|
* @property {(minutes: number) => void} onMinuteSelect 분 선택 핸들러
|
|
153
|
+
* @desc 분 quick select와 1분 step action 계약
|
|
149
154
|
*/
|
|
150
155
|
export interface TimePickerMinuteSectionProps {
|
|
151
156
|
/**
|
|
@@ -172,6 +177,7 @@ export interface TimePickerMinuteSectionProps {
|
|
|
172
177
|
* @property {boolean} disabled 비활성화 여부
|
|
173
178
|
* @property {() => void} onClear 삭제 핸들러
|
|
174
179
|
* @property {() => void} onApply 적용 핸들러
|
|
180
|
+
* @desc 삭제 노출 여부와 panel footer action 계약
|
|
175
181
|
*/
|
|
176
182
|
export interface TimePickerFooterProps {
|
|
177
183
|
/**
|
|
@@ -12,8 +12,10 @@ const wrapTimePart = (value: number, limit: number) =>
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* TimePicker Utility; 24시간 문자열을 시간 값으로 파싱한다.
|
|
15
|
+
* @utility
|
|
15
16
|
* @param {string} value HH:mm 또는 HH:mm:ss 값
|
|
16
|
-
* @
|
|
17
|
+
* @desc 형식 또는 시·분·초 범위가 유효하지 않으면 null을 반환한다.
|
|
18
|
+
* @return {TimePickerParts | null} 파싱 결과
|
|
17
19
|
*/
|
|
18
20
|
export const parseTimeValue = (value: string): TimePickerParts | null => {
|
|
19
21
|
const match = /^(\d{2}):(\d{2})(?::(\d{2}))?$/.exec(value);
|
|
@@ -33,9 +35,11 @@ export const parseTimeValue = (value: string): TimePickerParts | null => {
|
|
|
33
35
|
|
|
34
36
|
/**
|
|
35
37
|
* TimePicker Utility; 시간 값을 24시간 문자열로 직렬화한다.
|
|
38
|
+
* @utility
|
|
36
39
|
* @param {TimePickerParts} parts 시간 값
|
|
37
40
|
* @param {boolean} withSeconds 초 포함 여부
|
|
38
|
-
* @
|
|
41
|
+
* @desc 각 단위를 두 자리로 맞추고 withSeconds에 따라 초를 포함한다.
|
|
42
|
+
* @return {string} HH:mm 또는 HH:mm:ss 값
|
|
39
43
|
*/
|
|
40
44
|
export const serializeTimeValue = (
|
|
41
45
|
parts: TimePickerParts,
|
|
@@ -47,11 +51,13 @@ export const serializeTimeValue = (
|
|
|
47
51
|
|
|
48
52
|
/**
|
|
49
53
|
* TimePicker Utility; 지정 단위만 순환 증감한다.
|
|
54
|
+
* @utility
|
|
50
55
|
* @param {string} value 시간 값
|
|
51
|
-
* @param {
|
|
56
|
+
* @param {"hours" | "minutes" | "seconds"} unit 증감 단위
|
|
52
57
|
* @param {number} amount 증감량
|
|
53
58
|
* @param {boolean} withSeconds 초 포함 여부
|
|
54
|
-
* @
|
|
59
|
+
* @desc 빈 값은 00:00 기준으로 시작하고 시는 24, 분·초는 60을 경계로 순환한다.
|
|
60
|
+
* @return {string} 증감한 시간 값
|
|
55
61
|
*/
|
|
56
62
|
export const stepTimeValue = (
|
|
57
63
|
value: string,
|
|
@@ -73,27 +79,33 @@ export const stepTimeValue = (
|
|
|
73
79
|
|
|
74
80
|
/**
|
|
75
81
|
* TimePicker Utility; 저장 시를 표시 시로 변환한다.
|
|
82
|
+
* @utility
|
|
76
83
|
* @param {number} hours 24시간 시 값
|
|
77
|
-
* @param {
|
|
78
|
-
* @
|
|
84
|
+
* @param {"12h" | "24h"} format 표시 형식
|
|
85
|
+
* @desc 12시간제에서는 0시와 12시를 12로 표시한다.
|
|
86
|
+
* @return {number} 표시 시 값
|
|
79
87
|
*/
|
|
80
88
|
export const toDisplayHour = (hours: number, format: TimePickerFormat) =>
|
|
81
89
|
format === "12h" ? hours % 12 || 12 : hours;
|
|
82
90
|
|
|
83
91
|
/**
|
|
84
92
|
* TimePicker Utility; 24시간 시 값의 오전·오후를 반환한다.
|
|
93
|
+
* @utility
|
|
85
94
|
* @param {number} hours 24시간 시 값
|
|
86
|
-
* @
|
|
95
|
+
* @desc 12시 이상을 pm, 그 미만을 am으로 분류한다.
|
|
96
|
+
* @return {"am" | "pm"} 오전·오후
|
|
87
97
|
*/
|
|
88
98
|
export const getTimePeriod = (hours: number): TimePickerPeriod =>
|
|
89
99
|
hours >= 12 ? "pm" : "am";
|
|
90
100
|
|
|
91
101
|
/**
|
|
92
102
|
* TimePicker Utility; 오전·오후를 24시간 저장값에 반영한다.
|
|
103
|
+
* @utility
|
|
93
104
|
* @param {string} value 시간 값
|
|
94
|
-
* @param {
|
|
105
|
+
* @param {"am" | "pm"} period 오전·오후
|
|
95
106
|
* @param {boolean} withSeconds 초 포함 여부
|
|
96
|
-
* @
|
|
107
|
+
* @desc 기존 분·초를 보존하고 선택한 period에 맞춰 저장 시만 변환한다.
|
|
108
|
+
* @return {string} 변경한 시간 값
|
|
97
109
|
*/
|
|
98
110
|
export const setTimePeriod = (
|
|
99
111
|
value: string,
|