@ncds/ui-admin 1.4.1 → 1.5.0

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.
Files changed (74) hide show
  1. package/dist/cjs/assets/scripts/comboBox.js +18 -0
  2. package/dist/cjs/assets/scripts/datePicker.js +60 -7
  3. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +6 -19
  4. package/dist/cjs/assets/scripts/notification/MessageNotification.js +146 -0
  5. package/dist/cjs/assets/scripts/notification/Notification.js +6 -3
  6. package/dist/cjs/assets/scripts/notification/const/classNames.js +14 -0
  7. package/dist/cjs/assets/scripts/notification/const/index.js +14 -1
  8. package/dist/cjs/assets/scripts/notification/const/sizes.js +7 -1
  9. package/dist/cjs/assets/scripts/notification/const/types.js +10 -1
  10. package/dist/cjs/assets/scripts/notification/index.js +8 -0
  11. package/dist/cjs/assets/scripts/notification/utils.js +3 -3
  12. package/dist/cjs/assets/scripts/utils/selectbox/DropdownModel.js +7 -0
  13. package/dist/cjs/assets/scripts/utils/selectbox/UnifiedSelectBox.js +77 -43
  14. package/dist/cjs/src/components/button/ButtonStepper.js +22 -0
  15. package/dist/cjs/src/components/button/index.js +22 -0
  16. package/dist/cjs/src/components/date-picker/DatePicker.js +45 -6
  17. package/dist/cjs/src/components/date-picker/RangeDatePicker.js +3 -1
  18. package/dist/cjs/src/components/date-picker/RangeDatePickerWithButtons.js +7 -3
  19. package/dist/cjs/src/components/input/InputBase.js +1 -1
  20. package/dist/cjs/src/components/input/NumberInput.js +130 -0
  21. package/dist/cjs/src/components/input/index.js +11 -0
  22. package/dist/cjs/src/components/notification/MessageNotification.js +137 -0
  23. package/dist/cjs/src/components/notification/Notification.js +23 -9
  24. package/dist/cjs/src/components/notification/index.js +11 -0
  25. package/dist/cjs/src/components/tooltip/Tooltip.js +32 -21
  26. package/dist/esm/assets/scripts/comboBox.js +18 -0
  27. package/dist/esm/assets/scripts/datePicker.js +60 -7
  28. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +6 -19
  29. package/dist/esm/assets/scripts/notification/MessageNotification.js +141 -0
  30. package/dist/esm/assets/scripts/notification/Notification.js +6 -3
  31. package/dist/esm/assets/scripts/notification/const/classNames.js +14 -0
  32. package/dist/esm/assets/scripts/notification/const/index.js +2 -1
  33. package/dist/esm/assets/scripts/notification/const/sizes.js +6 -0
  34. package/dist/esm/assets/scripts/notification/const/types.js +8 -1
  35. package/dist/esm/assets/scripts/notification/index.js +1 -0
  36. package/dist/esm/assets/scripts/notification/utils.js +3 -3
  37. package/dist/esm/assets/scripts/utils/selectbox/DropdownModel.js +7 -0
  38. package/dist/esm/assets/scripts/utils/selectbox/UnifiedSelectBox.js +77 -43
  39. package/dist/esm/src/components/button/ButtonStepper.js +14 -0
  40. package/dist/esm/src/components/button/index.js +3 -1
  41. package/dist/esm/src/components/date-picker/DatePicker.js +46 -7
  42. package/dist/esm/src/components/date-picker/RangeDatePicker.js +3 -1
  43. package/dist/esm/src/components/date-picker/RangeDatePickerWithButtons.js +7 -3
  44. package/dist/esm/src/components/input/InputBase.js +1 -1
  45. package/dist/esm/src/components/input/NumberInput.js +124 -0
  46. package/dist/esm/src/components/input/index.js +1 -0
  47. package/dist/esm/src/components/notification/MessageNotification.js +130 -0
  48. package/dist/esm/src/components/notification/Notification.js +23 -9
  49. package/dist/esm/src/components/notification/index.js +2 -1
  50. package/dist/esm/src/components/tooltip/Tooltip.js +33 -22
  51. package/dist/types/assets/scripts/comboBox.d.ts +12 -0
  52. package/dist/types/assets/scripts/datePicker.d.ts +1 -0
  53. package/dist/types/assets/scripts/notification/MessageNotification.d.ts +23 -0
  54. package/dist/types/assets/scripts/notification/Notification.d.ts +1 -1
  55. package/dist/types/assets/scripts/notification/const/classNames.d.ts +14 -0
  56. package/dist/types/assets/scripts/notification/const/index.d.ts +2 -1
  57. package/dist/types/assets/scripts/notification/const/sizes.d.ts +5 -0
  58. package/dist/types/assets/scripts/notification/const/types.d.ts +1 -0
  59. package/dist/types/assets/scripts/notification/index.d.ts +1 -0
  60. package/dist/types/assets/scripts/utils/selectbox/DropdownModel.d.ts +4 -0
  61. package/dist/types/assets/scripts/utils/selectbox/UnifiedSelectBox.d.ts +20 -1
  62. package/dist/types/src/components/button/ButtonStepper.d.ts +10 -0
  63. package/dist/types/src/components/button/index.d.ts +2 -0
  64. package/dist/types/src/components/date-picker/DatePicker.d.ts +1 -0
  65. package/dist/types/src/components/date-picker/RangeDatePickerWithButtons.d.ts +4 -4
  66. package/dist/types/src/components/input/NumberInput.d.ts +10 -0
  67. package/dist/types/src/components/input/index.d.ts +1 -0
  68. package/dist/types/src/components/notification/MessageNotification.d.ts +40 -0
  69. package/dist/types/src/components/notification/Notification.d.ts +6 -1
  70. package/dist/types/src/components/notification/index.d.ts +1 -0
  71. package/dist/types/src/components/selectbox/SelectBox.d.ts +1 -1
  72. package/dist/types/src/components/tooltip/Tooltip.d.ts +4 -2
  73. package/dist/ui-admin/assets/styles/style.css +292 -10
  74. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  export { Notification, type NotificationOptions } from './Notification';
2
2
  export { FullWidthNotification, type FullWidthNotificationOptions } from './FullWidthNotification';
3
3
  export { FloatingNotification, type FloatingNotificationOptions } from './FloatingNotification';
4
+ export { MessageNotification, type MessageNotificationOptions } from './MessageNotification';
4
5
  export * from './utils';
5
6
  export type { NotificationColor, NotificationHierarchy, NotificationAction, BaseNotificationOptions } from './const';
6
7
  export { SVG_ICONS, CLASS_NAMES, ICON_MAP, FLOATING_ICON_MAP, FULL_WIDTH_ICON_MAP } from './const';
@@ -114,6 +114,10 @@ export declare class DropdownModel {
114
114
  * 검색 및 필터링 업데이트 (SearchFilterUtils에서 이동)
115
115
  */
116
116
  updateSearchAndFilter(searchValue: string, showAllItems?: boolean): void;
117
+ /**
118
+ * 검색어만 업데이트 (필터링 없이, API 모드용)
119
+ */
120
+ updateSearchValue(searchValue: string): void;
117
121
  /**
118
122
  * 드롭다운이 열릴 수 있는지 확인 (ComboBox용)
119
123
  */
@@ -5,7 +5,7 @@ export interface UnifiedSelectBoxConfig {
5
5
  placeholder?: string;
6
6
  value?: OptionValue;
7
7
  onChange?: (value: OptionValue) => void;
8
- onSearch?: (searchValue: string) => void;
8
+ onSearch?: (searchValue: string) => void | Promise<void>;
9
9
  onEdit?: () => void;
10
10
  onSelectAll?: () => void;
11
11
  onSearchAll?: () => void;
@@ -48,6 +48,10 @@ export declare class UnifiedSelectBox {
48
48
  private createSelectBoxUI;
49
49
  private createDropdown;
50
50
  private setupController;
51
+ /**
52
+ * 디바운싱 타이머 취소
53
+ */
54
+ private cancelDebounceTimer;
51
55
  private handleInput;
52
56
  private handleInputClick;
53
57
  private handleClearInput;
@@ -76,5 +80,20 @@ export declare class UnifiedSelectBox {
76
80
  modelState: any;
77
81
  isOpen: boolean;
78
82
  };
83
+ /**
84
+ * 드롭다운을 스크롤의 바닥으로 이동
85
+ * 전체 선택 시 추가 데이터 로드를 트리거하기 위해 사용
86
+ */
87
+ scrollToBottom(): void;
88
+ /**
89
+ * 전체 선택 버튼의 텍스트를 외부에서 변경
90
+ * @param text 버튼에 표시할 텍스트
91
+ */
92
+ setSelectAllButtonText(text: string): void;
93
+ /**
94
+ * 특정 인덱스의 옵션으로 포커스 이동
95
+ * @param index 포커스를 이동할 옵션의 인덱스
96
+ */
97
+ setFocusIndex(index: number): void;
79
98
  }
80
99
  //# sourceMappingURL=UnifiedSelectBox.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { Size } from '../../../constant/size';
2
+ export type ButtonStepperProps = {
3
+ size: Extract<Size, 'xs' | 'sm'>;
4
+ direction: 'up' | 'down';
5
+ disabled?: boolean;
6
+ onClick?: () => void;
7
+ className?: string;
8
+ };
9
+ export declare const ButtonStepper: ({ size, direction, disabled, onClick, className }: ButtonStepperProps) => import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=ButtonStepper.d.ts.map
@@ -1,3 +1,5 @@
1
1
  export * from './Button';
2
+ export * from './ButtonCloseX';
2
3
  export * from './ButtonGroup';
4
+ export * from './ButtonStepper';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -8,6 +8,7 @@ export type DatePickerProps = {
8
8
  datePickerOptions?: Options;
9
9
  destructive?: string;
10
10
  placeholder?: string;
11
+ isEndDate?: boolean;
11
12
  onChangeDate: (date: string) => void;
12
13
  } & Omit<DateTimePickerProps, 'size' | 'options' | 'value'>;
13
14
  export declare const DatePicker: import("react").ForwardRefExoticComponent<Omit<DatePickerProps, "ref"> & import("react").RefAttributes<DateTimePickerHandle>>;
@@ -1,14 +1,14 @@
1
- import { Dispatch, SetStateAction } from 'react';
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
2
  import { PERIOD_ITEM } from '../../constant/date-picker';
3
- import { RangeDatePickerProps } from './RangeDatePicker';
3
+ import { type RangeDatePickerProps } from './RangeDatePicker';
4
4
  export type PeriodKeyType = keyof typeof PERIOD_ITEM;
5
5
  type RangeDatePickerWithButtonsProps = {
6
- fixedEndDate?: string;
6
+ useYesterdayAsEndDate?: boolean;
7
7
  currentButtonId: PeriodKeyType;
8
8
  setCurrentButtonId: Dispatch<SetStateAction<PeriodKeyType>>;
9
9
  periodKeys: PeriodKeyType[];
10
10
  size?: 'xs' | 'sm';
11
11
  } & RangeDatePickerProps;
12
- export declare const RangeDatePickerWithButtons: ({ fixedEndDate, size, currentButtonId, setCurrentButtonId, startDateOptions, endDateOptions, validationOption, periodKeys, onDateValidation, }: RangeDatePickerWithButtonsProps) => import("react/jsx-runtime").JSX.Element;
12
+ export declare const RangeDatePickerWithButtons: ({ useYesterdayAsEndDate, size, currentButtonId, setCurrentButtonId, startDateOptions, endDateOptions, validationOption, periodKeys, onDateValidation, }: RangeDatePickerWithButtonsProps) => import("react/jsx-runtime").JSX.Element;
13
13
  export {};
14
14
  //# sourceMappingURL=RangeDatePickerWithButtons.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { InputBaseProps } from './InputBase';
2
+ type NumberInputProps = InputBaseProps & {
3
+ minValue?: number;
4
+ maxValue?: number;
5
+ step?: number;
6
+ stepperPosition?: 'leading' | 'trailing';
7
+ };
8
+ export declare const NumberInput: import("react").ForwardRefExoticComponent<NumberInputProps & import("react").RefAttributes<HTMLInputElement>>;
9
+ export {};
10
+ //# sourceMappingURL=NumberInput.d.ts.map
@@ -1,4 +1,5 @@
1
1
  export * from './InputBase';
2
+ export * from './NumberInput';
2
3
  export * from './PasswordInput';
3
4
  export * from './Textarea';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,40 @@
1
+ import { type IconName } from '@ncds/ui-admin-icon/dynamic';
2
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
3
+ import { NotificationAction, NotificationColor } from './Notification';
4
+ export interface MessageNotificationProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
5
+ /**
6
+ * 알림 제목 텍스트
7
+ */
8
+ title: ReactNode;
9
+ /**
10
+ * 알림 본문 텍스트 (선택사항)
11
+ */
12
+ supportingText?: ReactNode;
13
+ /**
14
+ * 알림 아이콘 이름 (지정하지 않으면 color에 따라 기본 아이콘 사용)
15
+ */
16
+ icon?: IconName;
17
+ /**
18
+ * 알림 색상 스타일
19
+ * @default 'neutral'
20
+ */
21
+ color?: NotificationColor;
22
+ /**
23
+ * 닫기 버튼 클릭 이벤트 핸들러
24
+ */
25
+ onClose?: () => void;
26
+ /**
27
+ * 추가 CSS 클래스
28
+ */
29
+ className?: string;
30
+ /**
31
+ * 액션 버튼 영역 (선택사항)
32
+ */
33
+ actions?: NotificationAction[];
34
+ /**
35
+ * 다시보지 않기 이벤트 핸들러 (선택사항)
36
+ */
37
+ onHidePermanently?: () => void;
38
+ }
39
+ export declare const MessageNotification: import("react").ForwardRefExoticComponent<MessageNotificationProps & import("react").RefAttributes<HTMLDivElement>>;
40
+ //# sourceMappingURL=MessageNotification.d.ts.map
@@ -2,7 +2,7 @@ import type { IconName } from '@ncds/ui-admin-icon/dynamic';
2
2
  import { ComponentPropsWithoutRef, ReactNode } from 'react';
3
3
  import { ColorTone } from '../../../constant/color';
4
4
  import { ButtonTheme } from '../button';
5
- export type NotificationType = 'floating' | 'full-width';
5
+ export type NotificationType = 'floating' | 'full-width' | 'message';
6
6
  export type NotificationColor = Extract<ColorTone, 'neutral' | 'error' | 'warning' | 'success' | 'info'>;
7
7
  export type NotificationSize = 'desktop' | 'mobile';
8
8
  export interface NotificationAction {
@@ -61,6 +61,11 @@ export interface NotificationProps extends Omit<ComponentPropsWithoutRef<'div'>,
61
61
  * @default 0
62
62
  */
63
63
  autoClose?: number;
64
+ /**
65
+ * 다시보지 않기 이벤트 핸들러 (선택사항)
66
+ * message, full-width 타입에서 사용 가능
67
+ */
68
+ onHidePermanently?: () => void;
64
69
  }
65
70
  export declare const Notification: import("react").ForwardRefExoticComponent<NotificationProps & import("react").RefAttributes<HTMLDivElement>>;
66
71
  //# sourceMappingURL=Notification.d.ts.map
@@ -1,4 +1,5 @@
1
1
  export * from './Notification';
2
2
  export * from './FloatingNotification';
3
3
  export * from './FullWidthNotification';
4
+ export * from './MessageNotification';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
- import { Size } from '@ncds/ui-admin/constant/size';
2
1
  import { ComponentPropsWithRef, PropsWithChildren } from 'react';
3
2
  import { UseFormRegisterReturn } from 'react-hook-form';
3
+ import { Size } from '../../../constant/size';
4
4
  import { OptionChangeHandler, OptionType, OptionValue } from '../../types/dropdown';
5
5
  export declare const DEFAULT_MAX_HEIGHT = 275;
6
6
  type BaseSelectBoxProps = Omit<ComponentPropsWithRef<'div'>, 'size' | 'onChange'>;
@@ -5,10 +5,12 @@ interface TooltipProps {
5
5
  size?: 'sm' | 'md';
6
6
  hideArrow?: boolean;
7
7
  title?: string;
8
- content?: string;
8
+ content?: React.ReactNode;
9
9
  type?: 'long' | 'short';
10
10
  className?: string;
11
+ iconColor?: string;
12
+ iconStyle?: 'help-circle' | 'alert-circle';
11
13
  }
12
- export declare const Tooltip: ({ tooltipType, iconType, position, size, title, content, hideArrow, type, className, }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
14
+ export declare const Tooltip: ({ tooltipType, iconType, position, size, title, content, hideArrow, type, iconColor, iconStyle, className, }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
13
15
  export {};
14
16
  //# sourceMappingURL=Tooltip.d.ts.map
@@ -754,6 +754,62 @@ button {
754
754
  background-color: rgba(255, 255, 255, 0.2);
755
755
  }
756
756
 
757
+ .ncua-button-stepper {
758
+ display: inline-flex;
759
+ align-items: center;
760
+ justify-content: center;
761
+ width: 20px;
762
+ height: 10px;
763
+ cursor: pointer;
764
+ background-color: var(--gray-100);
765
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23757678'/%3E%3C/svg%3E");
766
+ background-repeat: no-repeat;
767
+ background-position: center;
768
+ background-size: 6px 4px;
769
+ border-radius: 4px 4px 1px 1px;
770
+ }
771
+ .ncua-button-stepper:hover:not(:disabled), .ncua-button-stepper:focus:not(:disabled) {
772
+ background-color: var(--gray-200);
773
+ }
774
+ .ncua-button-stepper:disabled {
775
+ background-color: var(--gray-100);
776
+ }
777
+ .ncua-button-stepper--xs {
778
+ width: 20px;
779
+ height: 10px;
780
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6px' height='4px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23757678'/%3E%3C/svg%3E");
781
+ background-size: 6px 4px;
782
+ }
783
+ .ncua-button-stepper--xs:hover:not(:disabled), .ncua-button-stepper--xs:focus:not(:disabled) {
784
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6px' height='4px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23171818'/%3E%3C/svg%3E");
785
+ }
786
+ .ncua-input:focus-within .ncua-button-stepper--xs {
787
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6px' height='4px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%232f2f30'/%3E%3C/svg%3E");
788
+ }
789
+ .ncua-input.is-disabled .ncua-button-stepper--xs, .ncua-button-stepper--xs:disabled {
790
+ cursor: not-allowed;
791
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6px' height='4px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23a4a5a8'/%3E%3C/svg%3E");
792
+ }
793
+ .ncua-button-stepper--sm {
794
+ width: 22px;
795
+ height: 14px;
796
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8.2px' height='4.7px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23757678'/%3E%3C/svg%3E");
797
+ background-size: 8.2px 4.7px;
798
+ }
799
+ .ncua-button-stepper--sm:hover:not(:disabled), .ncua-button-stepper--sm:focus:not(:disabled) {
800
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8.2px' height='4.7px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23171818'/%3E%3C/svg%3E");
801
+ }
802
+ .ncua-input:focus-within .ncua-button-stepper--sm {
803
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8.2px' height='4.7px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%232f2f30'/%3E%3C/svg%3E");
804
+ }
805
+ .ncua-input.is-disabled .ncua-button-stepper--sm, .ncua-button-stepper--sm:disabled {
806
+ cursor: not-allowed;
807
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8.2px' height='4.7px' viewBox='0 0 7 4' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3.14645 0.146447C3.34171 -0.0488155 3.65829 -0.0488155 3.85355 0.146447L6.85355 3.14645C7.04882 3.34171 7.04882 3.65829 6.85355 3.85355C6.65829 4.04882 6.34171 4.04882 6.14645 3.85355L3.5 1.20711L0.853553 3.85355C0.658291 4.04882 0.341709 4.04882 0.146447 3.85355C-0.0488155 3.65829 -0.0488155 3.34171 0.146447 3.14645L3.14645 0.146447Z' fill='%23a4a5a8'/%3E%3C/svg%3E");
808
+ }
809
+ .ncua-button-stepper--down {
810
+ transform: rotate(180deg);
811
+ }
812
+
757
813
  .ncua-checkbox-input {
758
814
  --check-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M10 3L4.5 8.5L2 6' stroke='%23171818' stroke-width='1.6666' stroke-linecap='round' stroke-linejoin='round' /%3E%3C/svg%3E");
759
815
  --check-icon-disabled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M10 3L4.5 8.5L2 6' stroke='%23d3d4d8' stroke-width='1.6666' stroke-linecap='round' stroke-linejoin='round' /%3E%3C/svg%3E");
@@ -1317,6 +1373,16 @@ button {
1317
1373
  .ncua-input__field--sm {
1318
1374
  padding: 6px 12px;
1319
1375
  }
1376
+ .ncua-input__field:has(.ncua-input__stepper-button-group ~ .ncua-input__number) {
1377
+ padding-top: 2px;
1378
+ padding-bottom: 2px;
1379
+ padding-left: 2px;
1380
+ }
1381
+ .ncua-input__field:has(.ncua-input__number ~ .ncua-input__stepper-button-group) {
1382
+ padding-top: 2px;
1383
+ padding-bottom: 2px;
1384
+ padding-right: 2px;
1385
+ }
1320
1386
  .ncua-input__field {
1321
1387
  position: relative;
1322
1388
  flex: 1;
@@ -1449,16 +1515,6 @@ button {
1449
1515
  .ncua-input.is-disabled .ncua-input__field {
1450
1516
  overflow: hidden;
1451
1517
  }
1452
- .ncua-input.is-disabled .ncua-input__field::after {
1453
- position: absolute;
1454
- top: 0;
1455
- left: 0;
1456
- content: "";
1457
- width: 100%;
1458
- height: 100%;
1459
- background: inherit;
1460
- opacity: 0.5;
1461
- }
1462
1518
  .ncua-input.is-disabled input,
1463
1519
  .ncua-input.is-disabled textarea {
1464
1520
  color: var(--gray-300);
@@ -1473,6 +1529,31 @@ button {
1473
1529
  .ncua-input.full-width {
1474
1530
  width: 100%;
1475
1531
  }
1532
+ .ncua-input__number::-webkit-inner-spin-button, .ncua-input__number::-webkit-outer-spin-button {
1533
+ -webkit-appearance: none;
1534
+ margin: 0;
1535
+ }
1536
+ .ncua-input__number {
1537
+ -moz-appearance: textfield;
1538
+ appearance: textfield;
1539
+ }
1540
+ .ncua-input__stepper-button-group {
1541
+ display: flex;
1542
+ flex-direction: column;
1543
+ gap: 2px;
1544
+ }
1545
+ .ncua-input__field--xs .ncua-input__stepper-button-group ~ .ncua-input__number {
1546
+ padding-left: 10px;
1547
+ }
1548
+ .ncua-input__field--sm .ncua-input__stepper-button-group ~ .ncua-input__number {
1549
+ padding-left: 12px;
1550
+ }
1551
+ .ncua-input__field--xs .ncua-input__icon-wrap + .ncua-input__stepper-button-group {
1552
+ margin-left: 10px;
1553
+ }
1554
+ .ncua-input__field--sm .ncua-input__icon-wrap + .ncua-input__stepper-button-group {
1555
+ margin-left: 12px;
1556
+ }
1476
1557
 
1477
1558
  .ncua-input__leading-text-wrap .ncua-input__leading-text {
1478
1559
  display: flex;
@@ -2207,6 +2288,207 @@ button {
2207
2288
  }
2208
2289
  }
2209
2290
 
2291
+ .ncua-message-notification {
2292
+ width: 100%;
2293
+ }
2294
+ .ncua-message-notification__container {
2295
+ display: flex;
2296
+ align-items: center;
2297
+ flex-direction: column;
2298
+ width: 100%;
2299
+ padding: 16px 24px;
2300
+ }
2301
+ @media (max-width: 768px) {
2302
+ .ncua-message-notification__container {
2303
+ padding: 16px;
2304
+ }
2305
+ }
2306
+ .ncua-message-notification__content {
2307
+ width: 100%;
2308
+ display: flex;
2309
+ align-items: center;
2310
+ justify-content: space-between;
2311
+ gap: 24px;
2312
+ }
2313
+ @media (max-width: 768px) {
2314
+ .ncua-message-notification__content {
2315
+ flex-direction: column;
2316
+ align-items: flex-start;
2317
+ gap: 12px;
2318
+ }
2319
+ }
2320
+ .ncua-message-notification__content-wrapper {
2321
+ flex: 1;
2322
+ display: flex;
2323
+ align-items: center;
2324
+ gap: 12px;
2325
+ min-width: 0;
2326
+ }
2327
+ .ncua-message-notification__icon {
2328
+ flex-shrink: 0;
2329
+ }
2330
+ .ncua-message-notification__text-container {
2331
+ flex: 1;
2332
+ display: flex;
2333
+ flex-direction: column;
2334
+ min-width: 0;
2335
+ }
2336
+ .ncua-message-notification__title {
2337
+ font-size: var(--font-size-md);
2338
+ line-height: var(--line-heights-md);
2339
+ font-weight: var(--font-weights-commerce-sans-2);
2340
+ }
2341
+ .ncua-message-notification__supporting-text {
2342
+ font-size: var(--font-size-sm);
2343
+ line-height: var(--line-heights-sm);
2344
+ font-weight: var(--font-weights-commerce-sans-0);
2345
+ }
2346
+ .ncua-message-notification__actions-container {
2347
+ display: flex;
2348
+ align-items: center;
2349
+ gap: 8px;
2350
+ flex-shrink: 0;
2351
+ }
2352
+ @media (max-width: 768px) {
2353
+ .ncua-message-notification__actions-container {
2354
+ width: 100%;
2355
+ justify-content: flex-end;
2356
+ }
2357
+ }
2358
+ .ncua-message-notification__actions {
2359
+ display: flex;
2360
+ align-items: center;
2361
+ gap: 8px;
2362
+ }
2363
+ .ncua-message-notification__footer-container {
2364
+ display: flex;
2365
+ align-items: center;
2366
+ gap: 8px;
2367
+ justify-content: flex-end;
2368
+ }
2369
+ .ncua-message-notification__hide-link {
2370
+ text-decoration: underline;
2371
+ cursor: pointer;
2372
+ font-size: var(--font-size-xs);
2373
+ line-height: var(--line-heights-xs);
2374
+ font-weight: var(--font-weights-commerce-sans-0);
2375
+ }
2376
+ .ncua-message-notification__close-button {
2377
+ display: flex;
2378
+ align-items: center;
2379
+ justify-content: center;
2380
+ background: transparent;
2381
+ border: none;
2382
+ cursor: pointer;
2383
+ border-radius: 8px;
2384
+ padding: 8px;
2385
+ flex-shrink: 0;
2386
+ }
2387
+ .ncua-message-notification--neutral {
2388
+ color: var(--gray-600);
2389
+ background-color: var(--gray-50);
2390
+ border-radius: 8px;
2391
+ border: 1px solid var(--gray-300);
2392
+ box-shadow: var(--shadow-lg);
2393
+ }
2394
+ .ncua-message-notification--neutral .ncua-message-notification__title {
2395
+ color: var(--gray-600);
2396
+ }
2397
+ .ncua-message-notification--neutral .ncua-message-notification__supporting-text {
2398
+ color: var(--gray-500);
2399
+ opacity: 0.8;
2400
+ }
2401
+ .ncua-message-notification--neutral .ncua-notification__action-button {
2402
+ color: var(--gray-500);
2403
+ }
2404
+ .ncua-message-notification--neutral .ncua-notification__action-button--text, .ncua-message-notification--neutral .ncua-notification__action-button--text-gray {
2405
+ color: var(--gray-600);
2406
+ }
2407
+ .ncua-message-notification--neutral .ncua-message-notification__hide-link {
2408
+ color: var(--gray-500);
2409
+ }
2410
+ .ncua-message-notification--error {
2411
+ color: var(--primary-red-600);
2412
+ background-color: var(--primary-red-50);
2413
+ border-radius: 8px;
2414
+ border: 1px solid var(--primary-red-300);
2415
+ box-shadow: var(--shadow-lg);
2416
+ }
2417
+ .ncua-message-notification--error .ncua-message-notification__title {
2418
+ color: var(--primary-red-600);
2419
+ }
2420
+ .ncua-message-notification--error .ncua-message-notification__supporting-text {
2421
+ color: var(--gray-500);
2422
+ opacity: 0.8;
2423
+ }
2424
+ .ncua-message-notification--error .ncua-notification__action-button {
2425
+ color: var(--primary-red-500);
2426
+ }
2427
+ .ncua-message-notification--error .ncua-notification__action-button--text, .ncua-message-notification--error .ncua-notification__action-button--text-gray {
2428
+ color: var(--primary-red-600);
2429
+ }
2430
+ .ncua-message-notification--error .ncua-message-notification__hide-link {
2431
+ color: var(--gray-500);
2432
+ }
2433
+ .ncua-message-notification--warning {
2434
+ color: var(--orange-600);
2435
+ background-color: var(--orange-50);
2436
+ border-radius: 8px;
2437
+ border: 1px solid var(--orange-300);
2438
+ box-shadow: var(--shadow-lg);
2439
+ }
2440
+ .ncua-message-notification--warning .ncua-message-notification__title {
2441
+ color: var(--orange-600);
2442
+ }
2443
+ .ncua-message-notification--warning .ncua-message-notification__supporting-text {
2444
+ color: var(--gray-500);
2445
+ opacity: 0.8;
2446
+ }
2447
+ .ncua-message-notification--warning .ncua-notification__action-button {
2448
+ color: var(--orange-500);
2449
+ }
2450
+ .ncua-message-notification--warning .ncua-notification__action-button--text, .ncua-message-notification--warning .ncua-notification__action-button--text-gray {
2451
+ color: var(--orange-600);
2452
+ }
2453
+ .ncua-message-notification--warning .ncua-message-notification__hide-link {
2454
+ color: var(--gray-500);
2455
+ }
2456
+ .ncua-message-notification--success {
2457
+ color: var(--green-600);
2458
+ background-color: var(--green-50);
2459
+ border-radius: 8px;
2460
+ border: 1px solid var(--green-300);
2461
+ box-shadow: var(--shadow-lg);
2462
+ }
2463
+ .ncua-message-notification--success .ncua-message-notification__title {
2464
+ color: var(--green-600);
2465
+ }
2466
+ .ncua-message-notification--success .ncua-message-notification__supporting-text {
2467
+ color: var(--gray-500);
2468
+ opacity: 0.8;
2469
+ }
2470
+ .ncua-message-notification--success .ncua-notification__action-button {
2471
+ color: var(--green-500);
2472
+ }
2473
+ .ncua-message-notification--success .ncua-notification__action-button--text, .ncua-message-notification--success .ncua-notification__action-button--text-gray {
2474
+ color: var(--green-600);
2475
+ }
2476
+ .ncua-message-notification--success .ncua-message-notification__hide-link {
2477
+ color: var(--gray-500);
2478
+ }
2479
+ .ncua-message-notification .ncua-notification__action-button {
2480
+ background: transparent;
2481
+ border: none;
2482
+ padding: 0;
2483
+ vertical-align: middle;
2484
+ font-size: var(--font-size-xs);
2485
+ line-height: var(--line-heights-xs);
2486
+ font-weight: var(--font-weights-commerce-sans-0);
2487
+ }
2488
+ .ncua-message-notification .ncua-notification__action-button--text, .ncua-message-notification .ncua-notification__action-button--text-gray {
2489
+ font-weight: var(--font-weights-commerce-sans-1);
2490
+ }
2491
+
2210
2492
  .ncua-radio-input {
2211
2493
  position: relative;
2212
2494
  flex: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncds/ui-admin",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "nhn-commerce의 어드민 디자인 시스템입니다.",
5
5
  "scripts": {
6
6
  "barrel": "node barrel.js",