@ncds/ui-admin 1.5.1 → 1.5.3
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/cjs/assets/scripts/datePicker.js +377 -90
- package/dist/cjs/src/components/button/ButtonGroup.js +2 -1
- package/dist/cjs/src/components/date-picker/DatePicker.js +162 -5
- package/dist/cjs/src/components/date-picker/RangeDatePickerWithButtons.js +4 -2
- package/dist/cjs/src/components/image-file-input/ImageFileInput.js +6 -4
- package/dist/cjs/src/components/input/PasswordInput.js +5 -20
- package/dist/cjs/src/components/pagination/Pagination.js +5 -5
- package/dist/cjs/src/components/tab/HorizontalTab.js +1 -1
- package/dist/esm/assets/scripts/datePicker.js +377 -90
- package/dist/esm/src/components/date-picker/DatePicker.js +161 -6
- package/dist/esm/src/components/date-picker/RangeDatePickerWithButtons.js +4 -2
- package/dist/esm/src/components/image-file-input/ImageFileInput.js +6 -4
- package/dist/esm/src/components/input/PasswordInput.js +5 -20
- package/dist/esm/src/components/pagination/Pagination.js +5 -5
- package/dist/esm/src/components/tab/HorizontalTab.js +1 -1
- package/dist/types/assets/scripts/datePicker.d.ts +35 -1
- package/dist/types/src/components/button/ButtonGroup.d.ts +3 -1
- package/dist/types/src/components/date-picker/DatePicker.d.ts +7 -0
- package/dist/types/src/components/date-picker/RangeDatePickerWithButtons.d.ts +63 -6
- package/dist/types/src/constant/date-picker.d.ts +6 -0
- package/dist/ui-admin/assets/styles/style.css +10 -2
- package/package.json +1 -1
|
@@ -17,10 +17,11 @@ var __rest = this && this.__rest || function (s, e) {
|
|
|
17
17
|
return t;
|
|
18
18
|
};
|
|
19
19
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
/** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */
|
|
20
21
|
import classNames from 'classnames';
|
|
21
22
|
import { Korean } from 'flatpickr/dist/l10n/ko';
|
|
22
23
|
import moment from 'moment';
|
|
23
|
-
import { forwardRef, useId, useMemo } from 'react';
|
|
24
|
+
import { forwardRef, useId, useMemo, useRef } from 'react';
|
|
24
25
|
import Flatpickr from 'react-flatpickr';
|
|
25
26
|
import { formatDateInput, formatHourInput, formatMinuteInput } from '../../utils/date-picker';
|
|
26
27
|
import { CustomInput } from './CustomInput';
|
|
@@ -38,17 +39,117 @@ export var DatePicker = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
38
39
|
datePickerOptions = _a.datePickerOptions,
|
|
39
40
|
_d = _a.isEndDate,
|
|
40
41
|
isEndDate = _d === void 0 ? false : _d,
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
onValidationError = _a.onValidationError,
|
|
43
|
+
attrs = __rest(_a, ["shouldFocus", "currentDate", "size", "onChangeDate", "datePickerOptions", "isEndDate", "onValidationError"]);
|
|
44
|
+
var flatpickrInstanceRef = useRef(null);
|
|
45
|
+
var dateFormatRef = useRef('Y-m-d');
|
|
46
|
+
var minMaxDateRef = useRef({});
|
|
47
|
+
var checkDateViolations = function (date, minDate, maxDate) {
|
|
48
|
+
var violations = [];
|
|
49
|
+
var inputDate = moment(date);
|
|
50
|
+
if (!inputDate.isValid()) return violations;
|
|
51
|
+
if (minDate) {
|
|
52
|
+
var min = moment(minDate);
|
|
53
|
+
if (min.isValid() && inputDate.isBefore(min, 'day')) {
|
|
54
|
+
violations.push('minDate');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (maxDate) {
|
|
58
|
+
var max = moment(maxDate);
|
|
59
|
+
if (max.isValid() && inputDate.isAfter(max, 'day')) {
|
|
60
|
+
violations.push('maxDate');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return violations;
|
|
64
|
+
};
|
|
65
|
+
var onChangeDateHandler = function (dateTimeStamp, dateStr, instance) {
|
|
66
|
+
var _a;
|
|
67
|
+
if (!dateTimeStamp || dateTimeStamp.length === 0) {
|
|
68
|
+
restorePreviousDate(instance.input, instance);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
var selectedDate = dateTimeStamp[0];
|
|
72
|
+
if (!selectedDate || !(selectedDate instanceof Date) || isNaN(selectedDate.getTime())) {
|
|
73
|
+
// 유효하지 않은 날짜 - 이전 값으로 복원하거나 빈 값으로 처리
|
|
74
|
+
var previousDate = instance === null || instance === void 0 ? void 0 : instance._previousDateBeforeInput;
|
|
75
|
+
if (previousDate && previousDate instanceof Date && !isNaN(previousDate.getTime())) {
|
|
76
|
+
// 이전 값이 있으면 이전 값으로 복원
|
|
77
|
+
instance.selectedDates = [previousDate];
|
|
78
|
+
instance.setDate(previousDate, false);
|
|
79
|
+
} else {
|
|
80
|
+
// 이전 값이 없으면 빈 값으로 처리
|
|
81
|
+
restorePreviousDate(instance.input, instance);
|
|
82
|
+
}
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
var minDate = options.minDate,
|
|
86
|
+
maxDate = options.maxDate;
|
|
87
|
+
var violations = checkDateViolations(selectedDate, minDate, maxDate);
|
|
88
|
+
if (violations.length > 0) {
|
|
89
|
+
var prevDate = (_a = instance === null || instance === void 0 ? void 0 : instance.selectedDates) === null || _a === void 0 ? void 0 : _a[0];
|
|
90
|
+
if (onValidationError) {
|
|
91
|
+
onValidationError({
|
|
92
|
+
date: selectedDate,
|
|
93
|
+
minDate: minDate,
|
|
94
|
+
maxDate: maxDate,
|
|
95
|
+
violations: violations,
|
|
96
|
+
previousDate: prevDate instanceof Date && !isNaN(prevDate.getTime()) ? prevDate : undefined
|
|
97
|
+
});
|
|
98
|
+
return; // onValidationError가 있으면 날짜 변경 안 함
|
|
99
|
+
}
|
|
100
|
+
// onValidationError가 없으면 범위를 벗어난 날짜도 허용 (계속 진행)
|
|
101
|
+
}
|
|
102
|
+
// 유효한 날짜인 경우 이전 날짜로 저장
|
|
103
|
+
instance._previousDateBeforeInput = selectedDate;
|
|
43
104
|
var formattedDate = formatDateInput(dateStr);
|
|
44
105
|
isValidDate(formattedDate) ? onChangeDate(formattedDate) : onChangeDate(dateStr);
|
|
45
106
|
};
|
|
107
|
+
var restorePreviousDate = function (target, instance) {
|
|
108
|
+
if (instance.selectedDates.length > 0) {
|
|
109
|
+
var prevDate = instance.selectedDates[0];
|
|
110
|
+
if (prevDate instanceof Date && !isNaN(prevDate.getTime())) {
|
|
111
|
+
var momentFormat = dateFormatRef.current.replace(/Y/g, 'YYYY').replace(/m/g, 'MM').replace(/d/g, 'DD');
|
|
112
|
+
target.value = moment(prevDate).format(momentFormat);
|
|
113
|
+
instance.setDate(prevDate, false);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
target.value = '';
|
|
118
|
+
instance.setDate('', false);
|
|
119
|
+
};
|
|
46
120
|
var onInputHandler = function (e) {
|
|
47
121
|
var target = e.target;
|
|
48
122
|
var input = target.value;
|
|
123
|
+
var instance = flatpickrInstanceRef.current;
|
|
124
|
+
if (!instance) return;
|
|
125
|
+
if (!input || input.trim() === '') {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// 숫자가 최소 하나는 포함되어야 함 (하이픈만 있는 경우 방지)
|
|
129
|
+
if (!/[0-9]/.test(input)) {
|
|
130
|
+
restorePreviousDate(target, instance);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
49
133
|
var formattedInput = formatDateInput(input);
|
|
50
|
-
if (formattedInput
|
|
51
|
-
|
|
134
|
+
if (formattedInput !== input) {
|
|
135
|
+
target.value = formattedInput;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (formattedInput && formattedInput.length >= 10) {
|
|
139
|
+
var parsedDate = moment(formattedInput);
|
|
140
|
+
if (!parsedDate.isValid()) {
|
|
141
|
+
restorePreviousDate(target, instance);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
var parsedDateObj = parsedDate.toDate();
|
|
145
|
+
var violations = checkDateViolations(parsedDateObj, minMaxDateRef.current.minDate, minMaxDateRef.current.maxDate);
|
|
146
|
+
if (violations.length > 0) {
|
|
147
|
+
// onInputHandler에서는 onValidationError를 호출하지 않음
|
|
148
|
+
// validation은 onChangeDateHandler에서만 처리
|
|
149
|
+
// onValidationError가 없으면 아무것도 하지 않음 (범위를 벗어난 날짜도 허용)
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
52
153
|
};
|
|
53
154
|
var onHourInputHandler = function (e) {
|
|
54
155
|
var target = e.target;
|
|
@@ -72,13 +173,50 @@ export var DatePicker = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
72
173
|
dateFormat: 'Y-m-d',
|
|
73
174
|
clickOpens: true,
|
|
74
175
|
time_24hr: true,
|
|
176
|
+
formatDate: function (date, format, locale) {
|
|
177
|
+
try {
|
|
178
|
+
// 유효한 날짜인지 확인
|
|
179
|
+
if (!date || !(date instanceof Date) || isNaN(date.getTime())) {
|
|
180
|
+
return '';
|
|
181
|
+
}
|
|
182
|
+
// moment로 포맷팅
|
|
183
|
+
var momentDate = moment(date);
|
|
184
|
+
if (!momentDate.isValid()) {
|
|
185
|
+
return '';
|
|
186
|
+
}
|
|
187
|
+
// format을 moment 형식으로 변환
|
|
188
|
+
var momentFormat = format.replace(/Y/g, 'YYYY').replace(/y/g, 'YY').replace(/m/g, 'MM').replace(/d/g, 'DD').replace(/H/g, 'HH').replace(/i/g, 'mm').replace(/S/g, 'ss');
|
|
189
|
+
return momentDate.format(momentFormat);
|
|
190
|
+
} catch (error) {
|
|
191
|
+
// 오류 발생 시 빈 문자열 반환 (232-23 같은 잘못된 날짜 처리)
|
|
192
|
+
return '';
|
|
193
|
+
}
|
|
194
|
+
},
|
|
75
195
|
onChange: onChangeDateHandler,
|
|
76
196
|
allowInvalidPreload: true,
|
|
77
197
|
onReady: function (selectedDates, dateStr, instance) {
|
|
78
198
|
var _a;
|
|
79
199
|
var input = instance.input;
|
|
80
200
|
if (!input) return;
|
|
201
|
+
flatpickrInstanceRef.current = instance;
|
|
202
|
+
dateFormatRef.current = (datePickerOptions === null || datePickerOptions === void 0 ? void 0 : datePickerOptions.dateFormat) || options.dateFormat || 'Y-m-d';
|
|
203
|
+
minMaxDateRef.current = {
|
|
204
|
+
minDate: (datePickerOptions === null || datePickerOptions === void 0 ? void 0 : datePickerOptions.minDate) || options.minDate,
|
|
205
|
+
maxDate: (datePickerOptions === null || datePickerOptions === void 0 ? void 0 : datePickerOptions.maxDate) || options.maxDate
|
|
206
|
+
};
|
|
207
|
+
// blur 시점에 현재 selectedDates를 저장 (입력 전 상태)
|
|
208
|
+
var onBlurHandler = function (e) {
|
|
209
|
+
if (instance && instance.selectedDates.length > 0) {
|
|
210
|
+
// 이전 날짜를 별도로 저장 (onChange에서 사용)
|
|
211
|
+
instance._previousDateBeforeInput = instance.selectedDates[0];
|
|
212
|
+
}
|
|
213
|
+
};
|
|
81
214
|
input.addEventListener('input', onInputHandler);
|
|
215
|
+
input.addEventListener('blur', onBlurHandler);
|
|
216
|
+
// 초기 날짜가 있으면 저장
|
|
217
|
+
if (instance.selectedDates.length > 0) {
|
|
218
|
+
instance._previousDateBeforeInput = instance.selectedDates[0];
|
|
219
|
+
}
|
|
82
220
|
var timeInputWrapper = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-time');
|
|
83
221
|
if (!timeInputWrapper) return;
|
|
84
222
|
var hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
@@ -100,13 +238,20 @@ export var DatePicker = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
100
238
|
};
|
|
101
239
|
document.addEventListener('mousedown', handleMouseDown, true);
|
|
102
240
|
instance._handleMouseDown = handleMouseDown;
|
|
241
|
+
instance._onBlurHandler = onBlurHandler;
|
|
103
242
|
},
|
|
104
243
|
onDestroy: function (selectedDates, dateStr, instance) {
|
|
105
244
|
var _a;
|
|
106
245
|
var input = instance.input;
|
|
107
246
|
if (!input) return;
|
|
247
|
+
flatpickrInstanceRef.current = null;
|
|
108
248
|
// 메인 input 이벤트 리스너 제거
|
|
109
249
|
input.removeEventListener('input', onInputHandler);
|
|
250
|
+
// blur 이벤트 리스너 제거
|
|
251
|
+
var onBlurHandler = instance === null || instance === void 0 ? void 0 : instance._onBlurHandler;
|
|
252
|
+
if (onBlurHandler) {
|
|
253
|
+
input.removeEventListener('blur', onBlurHandler);
|
|
254
|
+
}
|
|
110
255
|
var timeInputWrapper = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-time');
|
|
111
256
|
if (!timeInputWrapper) return;
|
|
112
257
|
// 시간 input 이벤트 리스너 제거
|
|
@@ -159,7 +304,17 @@ export var DatePicker = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
159
304
|
var defaultValue = _a.defaultValue,
|
|
160
305
|
value = _a.value,
|
|
161
306
|
props = __rest(_a, ["defaultValue", "value"]);
|
|
162
|
-
|
|
307
|
+
// input에 반영 되면 안되는 attribute 제외
|
|
308
|
+
var _b = props,
|
|
309
|
+
allowInput = _b.allowInput,
|
|
310
|
+
dateFormat = _b.dateFormat,
|
|
311
|
+
minDate = _b.minDate,
|
|
312
|
+
maxDate = _b.maxDate,
|
|
313
|
+
enableTime = _b.enableTime,
|
|
314
|
+
enableSeconds = _b.enableSeconds,
|
|
315
|
+
noCalendar = _b.noCalendar,
|
|
316
|
+
inputProps = __rest(_b, ["allowInput", "dateFormat", "minDate", "maxDate", "enableTime", "enableSeconds", "noCalendar"]);
|
|
317
|
+
return _jsx(CustomInput, __assign({}, inputProps, {
|
|
163
318
|
id: inputId,
|
|
164
319
|
iconSize: size,
|
|
165
320
|
disabled: !!attrs.disabled,
|
|
@@ -25,9 +25,11 @@ export var RangeDatePickerWithButtons = function (_a) {
|
|
|
25
25
|
endDateOptions = _a.endDateOptions,
|
|
26
26
|
validationOption = _a.validationOption,
|
|
27
27
|
periodKeys = _a.periodKeys,
|
|
28
|
+
periodItems = _a.periodItems,
|
|
28
29
|
onDateValidation = _a.onDateValidation;
|
|
30
|
+
var items = periodItems !== null && periodItems !== void 0 ? periodItems : PERIOD_ITEM;
|
|
29
31
|
var setCalculatedDate = function () {
|
|
30
|
-
var currentPeriodItem =
|
|
32
|
+
var currentPeriodItem = items[currentButtonId];
|
|
31
33
|
if (!currentPeriodItem) {
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
@@ -65,7 +67,7 @@ export var RangeDatePickerWithButtons = function (_a) {
|
|
|
65
67
|
children: periodKeys.map(function (key) {
|
|
66
68
|
return _jsx(ButtonGroup.Item, {
|
|
67
69
|
isCurrent: currentButtonId === key,
|
|
68
|
-
label:
|
|
70
|
+
label: items[key].text,
|
|
69
71
|
onClick: function () {
|
|
70
72
|
return setCurrentButtonId(key);
|
|
71
73
|
}
|
|
@@ -26,13 +26,13 @@ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
|
|
|
26
26
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
27
27
|
};
|
|
28
28
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
|
-
import { forwardRef, useState, useRef, useEffect } from 'react';
|
|
30
|
-
import classNames from 'classnames';
|
|
31
29
|
import Icon from '@ncds/ui-admin-icon/dynamic';
|
|
30
|
+
import classNames from 'classnames';
|
|
31
|
+
import { forwardRef, useEffect, useRef, useState } from 'react';
|
|
32
32
|
import { Button } from '../button';
|
|
33
33
|
import { HintText, Label } from '../shared';
|
|
34
|
-
import { ImagePreview } from './components/ImagePreview';
|
|
35
34
|
import { Tooltip } from '../tooltip';
|
|
35
|
+
import { ImagePreview } from './components/ImagePreview';
|
|
36
36
|
export var ImageFileInputErrorType;
|
|
37
37
|
(function (ImageFileInputErrorType) {
|
|
38
38
|
ImageFileInputErrorType["ALREADY_UPLOADED"] = "ALREADY_UPLOADED";
|
|
@@ -182,7 +182,9 @@ export var ImageFileInput = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
182
182
|
children: [_jsx(Button, {
|
|
183
183
|
onlyIcon: true,
|
|
184
184
|
size: size,
|
|
185
|
-
className:
|
|
185
|
+
className: classNames('ncua-image-file-input__preview-container', {
|
|
186
|
+
destructive: destructive
|
|
187
|
+
}),
|
|
186
188
|
onClick: handleBrowseClick,
|
|
187
189
|
disabled: disabled,
|
|
188
190
|
label: imagePreviewTooltipLabel
|
|
@@ -20,7 +20,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
20
20
|
import { Eye, EyeOff } from '@ncds/ui-admin-icon';
|
|
21
21
|
import classNames from 'classnames';
|
|
22
22
|
import { forwardRef, useState } from 'react';
|
|
23
|
-
import { useCallbackRef, useMergeRefs } from '../../hooks';
|
|
24
23
|
import { InputBase } from './InputBase';
|
|
25
24
|
var svgSize = {
|
|
26
25
|
xs: 14,
|
|
@@ -33,37 +32,23 @@ export var PasswordInput = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
33
32
|
var _c = useState(false),
|
|
34
33
|
isVisible = _c[0],
|
|
35
34
|
setIsVisible = _c[1];
|
|
36
|
-
var _d = useState(false),
|
|
37
|
-
hasContent = _d[0],
|
|
38
|
-
setHasContent = _d[1];
|
|
39
|
-
var callbackRef = useCallbackRef(function (node) {
|
|
40
|
-
if (node) {
|
|
41
|
-
setHasContent(!!node.value);
|
|
42
|
-
var handleInput_1 = function () {
|
|
43
|
-
setHasContent(!!node.value);
|
|
44
|
-
};
|
|
45
|
-
node.addEventListener('input', handleInput_1);
|
|
46
|
-
return function () {
|
|
47
|
-
node.removeEventListener('input', handleInput_1);
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
var mergedRef = useMergeRefs([ref, callbackRef]);
|
|
52
35
|
var svgProps = {
|
|
53
36
|
width: svgSize[size],
|
|
54
37
|
height: svgSize[size]
|
|
55
38
|
};
|
|
56
39
|
var handleVisibilityChange = function () {
|
|
57
|
-
setIsVisible(
|
|
40
|
+
setIsVisible(function (prev) {
|
|
41
|
+
return !prev;
|
|
42
|
+
});
|
|
58
43
|
};
|
|
59
44
|
return _jsx(InputBase, __assign({
|
|
60
|
-
ref:
|
|
45
|
+
ref: ref,
|
|
61
46
|
size: size,
|
|
62
47
|
type: isVisible ? 'text' : 'password',
|
|
63
48
|
leadingElement: {
|
|
64
49
|
type: 'icon',
|
|
65
50
|
icon: 'lock-01',
|
|
66
|
-
color:
|
|
51
|
+
color: props.value ? 'gray600' : 'gray300'
|
|
67
52
|
},
|
|
68
53
|
trailingElement: {
|
|
69
54
|
type: 'custom',
|
|
@@ -39,8 +39,8 @@ export var Pagination = function (_a) {
|
|
|
39
39
|
var _f = useState(1),
|
|
40
40
|
start = _f[0],
|
|
41
41
|
setStart = _f[1];
|
|
42
|
-
var noPrev = start === 1;
|
|
43
|
-
var noNext = start + pageCount - 1 >= totalPage;
|
|
42
|
+
var noPrev = breakPoint === 'mo' ? currentPage === 1 : start === 1;
|
|
43
|
+
var noNext = breakPoint === 'mo' ? currentPage >= totalPage : start + pageCount - 1 >= totalPage;
|
|
44
44
|
var showJumpPageButton = totalPage > pageCount;
|
|
45
45
|
var handleClickButton = function (pageNum) {
|
|
46
46
|
if (isFunction(onPageChange)) {
|
|
@@ -62,7 +62,7 @@ export var Pagination = function (_a) {
|
|
|
62
62
|
setStart(1);
|
|
63
63
|
}
|
|
64
64
|
if (currentPage === totalPage) {
|
|
65
|
-
var lastGroupStart = Math.
|
|
65
|
+
var lastGroupStart = Math.floor((totalPage - 1) / pageCount) * pageCount + 1;
|
|
66
66
|
setStart(lastGroupStart);
|
|
67
67
|
}
|
|
68
68
|
}, [currentPage]);
|
|
@@ -85,7 +85,7 @@ export var Pagination = function (_a) {
|
|
|
85
85
|
noPrev: noPrev,
|
|
86
86
|
noNext: noNext,
|
|
87
87
|
onClick: function () {
|
|
88
|
-
return handleClickButton(Math.max(start - pageCount, 1));
|
|
88
|
+
return breakPoint === 'mo' ? handleClickButton(Math.max(currentPage - 1, 1)) : handleClickButton(Math.max(start - pageCount, 1));
|
|
89
89
|
}
|
|
90
90
|
})]
|
|
91
91
|
}), _jsx("ul", __assign({
|
|
@@ -122,7 +122,7 @@ export var Pagination = function (_a) {
|
|
|
122
122
|
noPrev: noPrev,
|
|
123
123
|
noNext: noNext,
|
|
124
124
|
onClick: function () {
|
|
125
|
-
return handleClickButton(Math.min(start + pageCount, totalPage));
|
|
125
|
+
return breakPoint === 'mo' ? handleClickButton(Math.min(currentPage + 1, totalPage)) : handleClickButton(Math.min(start + pageCount, totalPage));
|
|
126
126
|
}
|
|
127
127
|
}), NavButton({
|
|
128
128
|
type: 'last',
|
|
@@ -32,7 +32,7 @@ export var HorizontalTab = function (_a) {
|
|
|
32
32
|
};
|
|
33
33
|
if (!menus.length) return _jsx(_Fragment, {});
|
|
34
34
|
return _jsx("div", __assign({
|
|
35
|
-
className: classNames('ncua-horizontal-tab', "ncua-horizontal-tab--".concat(type), {
|
|
35
|
+
className: classNames('ncua-horizontal-tab', "ncua-horizontal-tab--".concat(type), "ncua-horizontal-tab--".concat(size), {
|
|
36
36
|
'ncua-horizontal-tab--fullWidth': fullWidth
|
|
37
37
|
})
|
|
38
38
|
}, {
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { Options as FlatpickrOptions } from 'flatpickr/dist/types/options';
|
|
2
2
|
export type DatePickerSize = 'xs' | 'sm';
|
|
3
|
+
export interface ValidationError {
|
|
4
|
+
index: number;
|
|
5
|
+
date: string | Date;
|
|
6
|
+
minDate?: string | Date;
|
|
7
|
+
maxDate?: string | Date;
|
|
8
|
+
violations: Array<'minDate' | 'maxDate'>;
|
|
9
|
+
previousDate?: string | Date;
|
|
10
|
+
}
|
|
3
11
|
interface Options {
|
|
4
12
|
buttons?: DatePickerButton[];
|
|
5
13
|
size: DatePickerSize;
|
|
6
14
|
autoComplete?: 'on' | 'off';
|
|
7
15
|
datePickerOptions: DatePickerOptionWrapper[];
|
|
16
|
+
onValidationError?: (error: ValidationError) => void;
|
|
8
17
|
}
|
|
9
18
|
interface DatePickerOptionWrapper {
|
|
10
19
|
element: string;
|
|
@@ -31,6 +40,7 @@ export declare class DatePicker {
|
|
|
31
40
|
private flatpickrInstances;
|
|
32
41
|
private currentButton;
|
|
33
42
|
private dateFormat;
|
|
43
|
+
private onValidationError?;
|
|
34
44
|
constructor(wrapper: HTMLElement, options: Options);
|
|
35
45
|
private validateWrapper;
|
|
36
46
|
private init;
|
|
@@ -41,11 +51,35 @@ export declare class DatePicker {
|
|
|
41
51
|
private reRenderButtonGroup;
|
|
42
52
|
private initDatePicker;
|
|
43
53
|
private initializeFlatpickr;
|
|
54
|
+
private createBlurHandler;
|
|
55
|
+
private setupFlatpickrLocale;
|
|
56
|
+
private createInputHandler;
|
|
57
|
+
private findFlatpickrInstanceByInput;
|
|
58
|
+
private clearInputValue;
|
|
59
|
+
private restorePreviousDate;
|
|
60
|
+
private createHourInputHandler;
|
|
61
|
+
private createMinuteInputHandler;
|
|
62
|
+
private createMouseDownHandler;
|
|
63
|
+
private createOnChangeHandler;
|
|
64
|
+
private invokeOriginalOnChange;
|
|
65
|
+
private isValidDate;
|
|
66
|
+
private validateAndRestoreIfNeeded;
|
|
67
|
+
private findFlatpickrInstanceIndexByInput;
|
|
68
|
+
private restoreDateToInstance;
|
|
69
|
+
private createOnReadyHandler;
|
|
70
|
+
private createOnDestroyHandler;
|
|
71
|
+
private convertDateOption;
|
|
72
|
+
private validateDate;
|
|
73
|
+
private checkDateViolations;
|
|
74
|
+
setDate(dates: string[]): void;
|
|
75
|
+
private formatDateForOption;
|
|
76
|
+
private parseDateWithMultipleFormats;
|
|
77
|
+
private formatMomentDate;
|
|
78
|
+
private calculatePeriod;
|
|
44
79
|
private updateDateWithButton;
|
|
45
80
|
private setMultipleDates;
|
|
46
81
|
private updateButtonsByPeriod;
|
|
47
82
|
private calculateDatesFromButton;
|
|
48
|
-
setDate(dates: string[]): void;
|
|
49
83
|
private convertFlatpickrFormatToMoment;
|
|
50
84
|
getDates(): string[];
|
|
51
85
|
}
|
|
@@ -164,7 +164,7 @@ export declare const ButtonGroup: {
|
|
|
164
164
|
onBlurCapture?: React.FocusEventHandler<HTMLButtonElement> | undefined;
|
|
165
165
|
onChange?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
166
166
|
onChangeCapture?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
167
|
-
onBeforeInput?: React.
|
|
167
|
+
onBeforeInput?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
168
168
|
onBeforeInputCapture?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
169
169
|
onInput?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
170
170
|
onInputCapture?: React.FormEventHandler<HTMLButtonElement> | undefined;
|
|
@@ -214,6 +214,8 @@ export declare const ButtonGroup: {
|
|
|
214
214
|
onProgressCapture?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
215
215
|
onRateChange?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
216
216
|
onRateChangeCapture?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
217
|
+
onResize?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
218
|
+
onResizeCapture?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
217
219
|
onSeeked?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
218
220
|
onSeekedCapture?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
219
221
|
onSeeking?: React.ReactEventHandler<HTMLButtonElement> | undefined;
|
|
@@ -10,6 +10,13 @@ export type DatePickerProps = {
|
|
|
10
10
|
placeholder?: string;
|
|
11
11
|
isEndDate?: boolean;
|
|
12
12
|
onChangeDate: (date: string) => void;
|
|
13
|
+
onValidationError?: (error: {
|
|
14
|
+
date: Date;
|
|
15
|
+
minDate?: any;
|
|
16
|
+
maxDate?: any;
|
|
17
|
+
violations: Array<'minDate' | 'maxDate'>;
|
|
18
|
+
previousDate?: Date;
|
|
19
|
+
}) => void;
|
|
13
20
|
} & Omit<DateTimePickerProps, 'size' | 'options' | 'value'>;
|
|
14
21
|
export declare const DatePicker: import("react").ForwardRefExoticComponent<Omit<DatePickerProps, "ref"> & import("react").RefAttributes<DateTimePickerHandle>>;
|
|
15
22
|
//# sourceMappingURL=DatePicker.d.ts.map
|
|
@@ -1,14 +1,71 @@
|
|
|
1
1
|
import { type Dispatch, type SetStateAction } from 'react';
|
|
2
|
-
import { PERIOD_ITEM } from '../../constant/date-picker';
|
|
2
|
+
import { PERIOD_ITEM, type PeriodItemMap } from '../../constant/date-picker';
|
|
3
3
|
import { type RangeDatePickerProps } from './RangeDatePicker';
|
|
4
4
|
export type PeriodKeyType = keyof typeof PERIOD_ITEM;
|
|
5
|
-
type RangeDatePickerWithButtonsProps = {
|
|
5
|
+
type RangeDatePickerWithButtonsProps<T extends PeriodItemMap = typeof PERIOD_ITEM> = {
|
|
6
6
|
useYesterdayAsEndDate?: boolean;
|
|
7
|
-
currentButtonId:
|
|
8
|
-
setCurrentButtonId: Dispatch<SetStateAction<
|
|
9
|
-
periodKeys:
|
|
7
|
+
currentButtonId: keyof T & string;
|
|
8
|
+
setCurrentButtonId: Dispatch<SetStateAction<keyof T & string>>;
|
|
9
|
+
periodKeys: (keyof T & string)[];
|
|
10
|
+
periodItems?: T;
|
|
10
11
|
size?: 'xs' | 'sm';
|
|
11
12
|
} & RangeDatePickerProps;
|
|
12
|
-
export declare const RangeDatePickerWithButtons:
|
|
13
|
+
export declare const RangeDatePickerWithButtons: <T extends PeriodItemMap = {
|
|
14
|
+
TODAY: {
|
|
15
|
+
text: string;
|
|
16
|
+
period: number;
|
|
17
|
+
unit: string;
|
|
18
|
+
};
|
|
19
|
+
YESTERDAY: {
|
|
20
|
+
text: string;
|
|
21
|
+
period: number;
|
|
22
|
+
unit: string;
|
|
23
|
+
};
|
|
24
|
+
'3DAYS': {
|
|
25
|
+
text: string;
|
|
26
|
+
period: number;
|
|
27
|
+
unit: string;
|
|
28
|
+
};
|
|
29
|
+
'7DAYS': {
|
|
30
|
+
text: string;
|
|
31
|
+
period: number;
|
|
32
|
+
unit: string;
|
|
33
|
+
};
|
|
34
|
+
'1WEEK': {
|
|
35
|
+
text: string;
|
|
36
|
+
period: number;
|
|
37
|
+
unit: string;
|
|
38
|
+
};
|
|
39
|
+
'15DAYS': {
|
|
40
|
+
text: string;
|
|
41
|
+
period: number;
|
|
42
|
+
unit: string;
|
|
43
|
+
};
|
|
44
|
+
'1MONTHS': {
|
|
45
|
+
text: string;
|
|
46
|
+
period: number;
|
|
47
|
+
unit: string;
|
|
48
|
+
};
|
|
49
|
+
'3MONTHS': {
|
|
50
|
+
text: string;
|
|
51
|
+
period: number;
|
|
52
|
+
unit: string;
|
|
53
|
+
};
|
|
54
|
+
'1YEAR': {
|
|
55
|
+
text: string;
|
|
56
|
+
period: number;
|
|
57
|
+
unit: string;
|
|
58
|
+
};
|
|
59
|
+
ENTIRE: {
|
|
60
|
+
text: string;
|
|
61
|
+
period: number;
|
|
62
|
+
unit: null;
|
|
63
|
+
};
|
|
64
|
+
NONE: {
|
|
65
|
+
text: string;
|
|
66
|
+
period: number;
|
|
67
|
+
unit: null;
|
|
68
|
+
};
|
|
69
|
+
}>({ useYesterdayAsEndDate, size, currentButtonId, setCurrentButtonId, startDateOptions, endDateOptions, validationOption, periodKeys, periodItems, onDateValidation, }: RangeDatePickerWithButtonsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
13
70
|
export {};
|
|
14
71
|
//# sourceMappingURL=RangeDatePickerWithButtons.d.ts.map
|
|
@@ -4157,6 +4157,10 @@ button {
|
|
|
4157
4157
|
background-color: var(--gray-500);
|
|
4158
4158
|
border-color: var(--gray-500);
|
|
4159
4159
|
}
|
|
4160
|
+
.ncua-date-picker .flatpickr-day.selected.nextMonthDay, .ncua-date-picker .flatpickr-day.selected.prevMonthDay {
|
|
4161
|
+
background-color: var(--gray-500);
|
|
4162
|
+
border-color: var(--gray-500);
|
|
4163
|
+
}
|
|
4160
4164
|
.ncua-date-picker .flatpickr-day.selected:hover {
|
|
4161
4165
|
border-color: var(--gray-700);
|
|
4162
4166
|
background-color: var(--gray-700);
|
|
@@ -5322,6 +5326,10 @@ button {
|
|
|
5322
5326
|
.ncua-image-file-input__preview-container[disabled], .ncua-image-file-input__preview-container.is-disable, .ncua-image-file-input__preview-container.ncua-btn:hover {
|
|
5323
5327
|
border: 1px dashed var(--gray-200);
|
|
5324
5328
|
}
|
|
5329
|
+
.ncua-image-file-input__preview-container.destructive {
|
|
5330
|
+
background-color: var(--primary-red-100);
|
|
5331
|
+
border: 1px solid var(--primary-red-600);
|
|
5332
|
+
}
|
|
5325
5333
|
.ncua-image-file-input__preview-remove-button {
|
|
5326
5334
|
position: absolute;
|
|
5327
5335
|
top: 50%;
|
|
@@ -6322,7 +6330,7 @@ span.flatpickr-weekday {
|
|
|
6322
6330
|
}
|
|
6323
6331
|
}
|
|
6324
6332
|
/**
|
|
6325
|
-
* Swiper 11.2.
|
|
6333
|
+
* Swiper 11.2.6
|
|
6326
6334
|
* Most modern mobile touch slider and framework with hardware accelerated transitions
|
|
6327
6335
|
* https://swiperjs.com
|
|
6328
6336
|
*
|
|
@@ -6330,7 +6338,7 @@ span.flatpickr-weekday {
|
|
|
6330
6338
|
*
|
|
6331
6339
|
* Released under the MIT License
|
|
6332
6340
|
*
|
|
6333
|
-
* Released on:
|
|
6341
|
+
* Released on: March 19, 2025
|
|
6334
6342
|
*/
|
|
6335
6343
|
/* FONT_START */
|
|
6336
6344
|
@font-face {
|