@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.
@@ -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
- attrs = __rest(_a, ["shouldFocus", "currentDate", "size", "onChangeDate", "datePickerOptions", "isEndDate"]);
42
- var onChangeDateHandler = function (dateTimeStamp, dateStr) {
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 === input) return;
51
- target.value = formattedInput;
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
- return _jsx(CustomInput, __assign({}, props, {
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 = PERIOD_ITEM[currentButtonId];
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: PERIOD_ITEM[key].text,
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: "ncua-image-file-input__preview-container",
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(!isVisible);
40
+ setIsVisible(function (prev) {
41
+ return !prev;
42
+ });
58
43
  };
59
44
  return _jsx(InputBase, __assign({
60
- ref: mergedRef,
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: hasContent ? 'gray600' : 'gray300'
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.max(1, totalPage - pageCount + 1);
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.InputEventHandler<HTMLButtonElement> | undefined;
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: PeriodKeyType;
8
- setCurrentButtonId: Dispatch<SetStateAction<PeriodKeyType>>;
9
- periodKeys: PeriodKeyType[];
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: ({ useYesterdayAsEndDate, size, currentButtonId, setCurrentButtonId, startDateOptions, endDateOptions, validationOption, periodKeys, onDateValidation, }: RangeDatePickerWithButtonsProps) => import("react/jsx-runtime").JSX.Element;
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
@@ -1,3 +1,9 @@
1
+ export type PeriodItem = {
2
+ text: string;
3
+ period: number;
4
+ unit: string | null;
5
+ };
6
+ export type PeriodItemMap = Record<string, PeriodItem>;
1
7
  export declare const PERIOD_ITEM: {
2
8
  TODAY: {
3
9
  text: string;
@@ -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.10
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: June 28, 2025
6341
+ * Released on: March 19, 2025
6334
6342
  */
6335
6343
  /* FONT_START */
6336
6344
  @font-face {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncds/ui-admin",
3
- "version": "1.5.1",
3
+ "version": "1.5.3",
4
4
  "description": "nhn-commerce의 어드민 디자인 시스템입니다.",
5
5
  "scripts": {
6
6
  "barrel": "node barrel.js",