@ncds/ui-admin 1.7.0 → 1.8.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.
- package/dist/cjs/assets/scripts/baseBox.js +54 -56
- package/dist/cjs/assets/scripts/comboBox.js +54 -105
- package/dist/cjs/assets/scripts/datePicker.js +289 -324
- package/dist/cjs/assets/scripts/featuredIcon.js +41 -49
- package/dist/cjs/assets/scripts/fileInput/const/classNames.js +4 -10
- package/dist/cjs/assets/scripts/fileInput/fileInput.js +33 -34
- package/dist/cjs/assets/scripts/fileInput/fileInputModel.js +27 -35
- package/dist/cjs/assets/scripts/fileInput/fileInputView.js +53 -48
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInput.js +61 -64
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +79 -112
- package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputView.js +107 -105
- package/dist/cjs/assets/scripts/imageFileInput/const/classNames.js +6 -16
- package/dist/cjs/assets/scripts/index.js +2 -0
- package/dist/cjs/assets/scripts/modal/Modal.js +43 -55
- package/dist/cjs/assets/scripts/modal/ModalActions.js +40 -52
- package/dist/cjs/assets/scripts/modal/ModalContent.js +22 -22
- package/dist/cjs/assets/scripts/modal/ModalHeader.js +37 -48
- package/dist/cjs/assets/scripts/modal/const/classNames.js +5 -13
- package/dist/cjs/assets/scripts/modal/utils/contentUtils.js +1 -1
- package/dist/cjs/assets/scripts/notification/FloatingNotification.js +91 -93
- package/dist/cjs/assets/scripts/notification/FullWidthNotification.js +92 -80
- package/dist/cjs/assets/scripts/notification/MessageNotification.js +92 -79
- package/dist/cjs/assets/scripts/notification/Notification.js +50 -65
- package/dist/cjs/assets/scripts/notification/const/classNames.js +1 -1
- package/dist/cjs/assets/scripts/notification/const/icons.js +11 -25
- package/dist/cjs/assets/scripts/notification/const/sizes.js +11 -19
- package/dist/cjs/assets/scripts/notification/const/types.js +1 -1
- package/dist/cjs/assets/scripts/notification/utils.js +28 -23
- package/dist/cjs/assets/scripts/progress-bar/ProgressBar.js +140 -141
- package/dist/cjs/assets/scripts/selectBox.js +72 -132
- package/dist/cjs/assets/scripts/shared/ButtonCloseX.js +18 -19
- package/dist/cjs/assets/scripts/slider.js +104 -122
- package/dist/cjs/assets/scripts/tab.js +8 -8
- package/dist/cjs/assets/scripts/table/Table.js +377 -0
- package/dist/cjs/assets/scripts/table/const/classNames.js +33 -0
- package/dist/cjs/assets/scripts/table/const/index.js +27 -0
- package/dist/cjs/assets/scripts/table/const/types.js +5 -0
- package/dist/cjs/assets/scripts/table/index.js +43 -0
- package/dist/cjs/assets/scripts/tag/Tag.js +108 -115
- package/dist/cjs/assets/scripts/tag/const/classNames.js +3 -7
- package/dist/cjs/assets/scripts/tag/const/sizes.js +4 -4
- package/dist/cjs/assets/scripts/tooltip/Tooltip.js +155 -182
- package/dist/cjs/assets/scripts/tooltip/TooltipLayerManager.js +23 -25
- package/dist/cjs/assets/scripts/tooltip/const/classNames.js +1 -1
- package/dist/cjs/assets/scripts/tooltip/const/constants.js +14 -14
- package/dist/cjs/assets/scripts/tooltip/const/icons.js +7 -7
- package/dist/cjs/assets/scripts/tooltip/const/templates.js +42 -25
- package/dist/cjs/assets/scripts/tooltip/utils.js +17 -18
- package/dist/cjs/assets/scripts/utils/debounce.js +7 -8
- package/dist/cjs/assets/scripts/utils/unifiedBox/domRenderer.js +102 -116
- package/dist/cjs/assets/scripts/utils/unifiedBox/dropdownModel.js +103 -144
- package/dist/cjs/assets/scripts/utils/unifiedBox/unifiedBoxController.js +180 -207
- package/dist/cjs/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +166 -362
- package/dist/cjs/constant/color.js +1 -1
- package/dist/cjs/index.js +0 -297
- package/dist/cjs/src/components/badge/Badge.js +17 -30
- package/dist/cjs/src/components/badge/index.js +0 -11
- package/dist/cjs/src/components/badge/utils.js +11 -10
- package/dist/cjs/src/components/badge-group/BadgeGroup.js +42 -0
- package/dist/cjs/src/components/badge-group/index.js +16 -0
- package/dist/cjs/src/components/bread-crumb/BreadCrumb.js +55 -0
- package/dist/cjs/src/components/button/Button.js +37 -58
- package/dist/cjs/src/components/button/ButtonCloseX.js +12 -22
- package/dist/cjs/src/components/button/ButtonStepper.js +9 -7
- package/dist/cjs/src/components/button/index.js +0 -11
- package/dist/cjs/src/components/button-group/ButtonGroup.js +97 -0
- package/dist/cjs/src/components/button-group/index.js +16 -0
- package/dist/cjs/src/components/carousel-arrow/CarouselArrow.js +34 -0
- package/dist/cjs/src/components/carousel-arrow/index.js +16 -0
- package/dist/cjs/src/components/carousel-number-group/CarouselNumberGroup.js +33 -0
- package/dist/cjs/src/components/{carousel → carousel-number-group}/index.js +0 -11
- package/dist/cjs/src/components/checkbox/Checkbox.js +28 -49
- package/dist/cjs/src/components/checkbox/CheckboxInput.js +23 -42
- package/dist/cjs/src/components/combo-box/ComboBox.js +290 -0
- package/dist/cjs/src/components/data-grid/DataGrid.js +182 -0
- package/dist/cjs/src/components/data-grid/DataGrid.types.js +5 -0
- package/dist/cjs/src/components/data-grid/index.js +27 -0
- package/dist/cjs/src/components/date-picker/CustomInput.js +16 -32
- package/dist/cjs/src/components/date-picker/DatePicker.js +416 -256
- package/dist/cjs/src/components/date-picker/index.js +0 -22
- package/dist/cjs/src/components/date-picker/utils.js +2 -4
- package/dist/cjs/src/components/divider/Divider.js +14 -25
- package/dist/cjs/src/components/dot/Dot.js +11 -28
- package/dist/cjs/src/components/dropdown/Dropdown.js +90 -132
- package/dist/cjs/src/components/empty-state/EmptyState.js +28 -45
- package/dist/cjs/src/components/featured-icon/FeaturedIcon.js +14 -33
- package/dist/cjs/src/components/file-input/FileInput.js +102 -148
- package/dist/cjs/src/components/horizontal-tab/HorizontalTab.js +53 -0
- package/dist/cjs/src/components/horizontal-tab/index.js +16 -0
- package/dist/cjs/src/components/image-file-input/ImageFileInput.js +109 -170
- package/dist/cjs/src/components/image-file-input/components/ImagePreview.js +8 -17
- package/dist/cjs/src/components/index.js +156 -24
- package/dist/cjs/src/components/input-base/InputBase.js +195 -0
- package/dist/cjs/src/components/input-base/index.js +16 -0
- package/dist/cjs/src/components/modal/Modal.js +76 -105
- package/dist/cjs/src/components/notification/FloatingNotification.js +52 -80
- package/dist/cjs/src/components/notification/FullWidthNotification.js +67 -101
- package/dist/cjs/src/components/notification/MessageNotification.js +60 -89
- package/dist/cjs/src/components/notification/Notification.js +18 -36
- package/dist/cjs/src/components/number-input/NumberInput.js +112 -0
- package/dist/cjs/src/components/number-input/index.js +16 -0
- package/dist/cjs/src/components/pagination/NavButton.js +28 -42
- package/dist/cjs/src/components/pagination/Pagination.js +58 -97
- package/dist/cjs/src/components/password-input/PasswordInput.js +55 -0
- package/dist/cjs/src/components/password-input/index.js +16 -0
- package/dist/cjs/src/components/progress-bar/ProgressBar.js +45 -60
- package/dist/cjs/src/components/progress-bar/components/SegmentBar.js +11 -9
- package/dist/cjs/src/components/progress-bar/components/SegmentLabels.js +32 -43
- package/dist/cjs/src/components/progress-bar/hooks/useProgressBar.js +59 -78
- package/dist/cjs/src/components/progress-bar/utils.js +8 -8
- package/dist/cjs/src/components/progress-circle/ProgressCircle.js +49 -72
- package/dist/cjs/src/components/radio/Radio.js +24 -43
- package/dist/cjs/src/components/radio/RadioInput.js +18 -36
- package/dist/cjs/src/components/range-date-picker/RangeDatePicker.js +147 -0
- package/dist/cjs/src/components/range-date-picker/index.js +16 -0
- package/dist/cjs/src/components/range-date-picker-with-buttons/RangeDatePickerWithButtons.js +81 -0
- package/dist/cjs/src/components/range-date-picker-with-buttons/index.js +16 -0
- package/dist/cjs/src/components/select/Select.js +36 -63
- package/dist/cjs/src/components/select-box/SelectBox.js +260 -0
- package/dist/cjs/src/components/select-dropdown/SelectDropdown.js +64 -100
- package/dist/cjs/src/components/shared/hintText/HintText.js +13 -30
- package/dist/cjs/src/components/shared/label/Label.js +12 -29
- package/dist/cjs/src/components/slider/Slider.js +25 -28
- package/dist/cjs/src/components/spinner/Spinner.js +25 -39
- package/dist/cjs/src/components/switch/Switch.js +44 -69
- package/dist/cjs/src/components/tab/TabButton.js +41 -61
- package/dist/cjs/src/components/tab/index.js +0 -22
- package/dist/cjs/src/components/table/Table.js +269 -0
- package/dist/cjs/src/components/table/index.js +16 -0
- package/dist/cjs/src/components/table/types.js +5 -0
- package/dist/cjs/src/components/tag/Tag.js +65 -85
- package/dist/cjs/src/components/textarea/Textarea.js +79 -0
- package/dist/cjs/src/components/textarea/index.js +16 -0
- package/dist/cjs/src/components/toggle/Toggle.js +28 -52
- package/dist/cjs/src/components/tooltip/Tooltip.js +75 -108
- package/dist/cjs/src/components/vertical-tab/VerticalTab.js +48 -0
- package/dist/cjs/src/components/vertical-tab/index.js +16 -0
- package/dist/cjs/src/constant/breakpoint.js +3 -3
- package/dist/cjs/src/constant/date-picker.js +1 -1
- package/dist/cjs/src/constant/size.js +1 -1
- package/dist/cjs/src/hooks/dropdown/useDropdown.js +58 -60
- package/dist/cjs/src/hooks/dropdown/useDropdownKeyboard.js +37 -40
- package/dist/cjs/src/hooks/dropdown/useDropdownPosition.js +7 -9
- package/dist/cjs/src/hooks/dropdown/useOutsideClick.js +11 -11
- package/dist/cjs/src/hooks/dropdown/useScrollLock.js +23 -19
- package/dist/cjs/src/hooks/dropdown/useWindowResize.js +12 -13
- package/dist/cjs/src/hooks/useCallbackRef.js +2 -2
- package/dist/cjs/src/hooks/useMediaQuery.js +8 -11
- package/dist/cjs/src/hooks/useMergeRefs.js +2 -2
- package/dist/cjs/src/utils/date-picker.js +29 -30
- package/dist/cjs/src/utils/dropdown/dropdownUtils.js +39 -35
- package/dist/cjs/src/utils/dropdown/multiSelect.js +25 -45
- package/dist/esm/assets/scripts/baseBox.js +53 -57
- package/dist/esm/assets/scripts/comboBox.js +54 -107
- package/dist/esm/assets/scripts/datePicker.js +288 -324
- package/dist/esm/assets/scripts/featuredIcon.js +40 -50
- package/dist/esm/assets/scripts/fileInput/const/classNames.js +4 -10
- package/dist/esm/assets/scripts/fileInput/fileInput.js +32 -35
- package/dist/esm/assets/scripts/fileInput/fileInputModel.js +26 -36
- package/dist/esm/assets/scripts/fileInput/fileInputView.js +52 -49
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInput.js +60 -65
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +78 -113
- package/dist/esm/assets/scripts/imageFileInput/ImageFileInputView.js +106 -106
- package/dist/esm/assets/scripts/imageFileInput/const/classNames.js +6 -16
- package/dist/esm/assets/scripts/index.js +2 -0
- package/dist/esm/assets/scripts/modal/Modal.js +43 -55
- package/dist/esm/assets/scripts/modal/ModalActions.js +39 -53
- package/dist/esm/assets/scripts/modal/ModalContent.js +21 -23
- package/dist/esm/assets/scripts/modal/ModalHeader.js +36 -49
- package/dist/esm/assets/scripts/modal/const/classNames.js +5 -13
- package/dist/esm/assets/scripts/modal/utils/contentUtils.js +1 -1
- package/dist/esm/assets/scripts/notification/FloatingNotification.js +90 -94
- package/dist/esm/assets/scripts/notification/FullWidthNotification.js +91 -81
- package/dist/esm/assets/scripts/notification/MessageNotification.js +91 -80
- package/dist/esm/assets/scripts/notification/Notification.js +49 -66
- package/dist/esm/assets/scripts/notification/const/classNames.js +1 -1
- package/dist/esm/assets/scripts/notification/const/icons.js +11 -25
- package/dist/esm/assets/scripts/notification/const/sizes.js +11 -19
- package/dist/esm/assets/scripts/notification/const/types.js +1 -1
- package/dist/esm/assets/scripts/notification/utils.js +28 -23
- package/dist/esm/assets/scripts/progress-bar/ProgressBar.js +139 -142
- package/dist/esm/assets/scripts/selectBox.js +71 -133
- package/dist/esm/assets/scripts/shared/ButtonCloseX.js +18 -19
- package/dist/esm/assets/scripts/slider.js +103 -123
- package/dist/esm/assets/scripts/tab.js +7 -9
- package/dist/esm/assets/scripts/table/Table.js +370 -0
- package/dist/esm/assets/scripts/table/const/classNames.js +27 -0
- package/dist/esm/assets/scripts/table/const/index.js +2 -0
- package/dist/esm/assets/scripts/table/const/types.js +1 -0
- package/dist/esm/assets/scripts/table/index.js +8 -0
- package/dist/esm/assets/scripts/tag/Tag.js +107 -116
- package/dist/esm/assets/scripts/tag/const/classNames.js +3 -7
- package/dist/esm/assets/scripts/tag/const/sizes.js +4 -4
- package/dist/esm/assets/scripts/tooltip/Tooltip.js +154 -183
- package/dist/esm/assets/scripts/tooltip/TooltipLayerManager.js +22 -26
- package/dist/esm/assets/scripts/tooltip/const/classNames.js +1 -1
- package/dist/esm/assets/scripts/tooltip/const/constants.js +14 -14
- package/dist/esm/assets/scripts/tooltip/const/icons.js +7 -7
- package/dist/esm/assets/scripts/tooltip/const/templates.js +42 -25
- package/dist/esm/assets/scripts/tooltip/utils.js +17 -18
- package/dist/esm/assets/scripts/utils/debounce.js +7 -8
- package/dist/esm/assets/scripts/utils/unifiedBox/domRenderer.js +101 -117
- package/dist/esm/assets/scripts/utils/unifiedBox/dropdownModel.js +103 -144
- package/dist/esm/assets/scripts/utils/unifiedBox/unifiedBoxController.js +179 -208
- package/dist/esm/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +165 -363
- package/dist/esm/constant/color.js +1 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/src/components/badge/Badge.js +17 -30
- package/dist/esm/src/components/badge/index.js +1 -2
- package/dist/esm/src/components/badge/utils.js +11 -10
- package/dist/esm/src/components/badge-group/BadgeGroup.js +35 -0
- package/dist/esm/src/components/badge-group/index.js +1 -0
- package/dist/esm/src/components/bread-crumb/BreadCrumb.js +48 -0
- package/dist/esm/src/components/button/Button.js +37 -58
- package/dist/esm/src/components/button/ButtonCloseX.js +12 -22
- package/dist/esm/src/components/button/ButtonStepper.js +9 -7
- package/dist/esm/src/components/button/index.js +0 -1
- package/dist/esm/src/components/button-group/ButtonGroup.js +89 -0
- package/dist/esm/src/components/button-group/index.js +1 -0
- package/dist/esm/src/components/carousel-arrow/CarouselArrow.js +26 -0
- package/dist/esm/src/components/carousel-arrow/index.js +1 -0
- package/dist/esm/src/components/carousel-number-group/CarouselNumberGroup.js +25 -0
- package/dist/esm/src/components/carousel-number-group/index.js +1 -0
- package/dist/esm/src/components/checkbox/Checkbox.js +28 -49
- package/dist/esm/src/components/checkbox/CheckboxInput.js +23 -42
- package/dist/esm/src/components/combo-box/ComboBox.js +284 -0
- package/dist/esm/src/components/data-grid/DataGrid.js +175 -0
- package/dist/esm/src/components/data-grid/DataGrid.types.js +1 -0
- package/dist/esm/src/components/data-grid/index.js +2 -0
- package/dist/esm/src/components/date-picker/CustomInput.js +16 -32
- package/dist/esm/src/components/date-picker/DatePicker.js +421 -260
- package/dist/esm/src/components/date-picker/index.js +0 -2
- package/dist/esm/src/components/date-picker/utils.js +2 -4
- package/dist/esm/src/components/divider/Divider.js +14 -25
- package/dist/esm/src/components/dot/Dot.js +11 -28
- package/dist/esm/src/components/dropdown/Dropdown.js +90 -132
- package/dist/esm/src/components/empty-state/EmptyState.js +28 -45
- package/dist/esm/src/components/featured-icon/FeaturedIcon.js +14 -33
- package/dist/esm/src/components/file-input/FileInput.js +102 -148
- package/dist/esm/src/components/horizontal-tab/HorizontalTab.js +46 -0
- package/dist/esm/src/components/horizontal-tab/index.js +1 -0
- package/dist/esm/src/components/image-file-input/ImageFileInput.js +109 -170
- package/dist/esm/src/components/image-file-input/components/ImagePreview.js +8 -17
- package/dist/esm/src/components/index.js +18 -6
- package/dist/esm/src/components/input-base/InputBase.js +189 -0
- package/dist/esm/src/components/input-base/index.js +1 -0
- package/dist/esm/src/components/modal/Modal.js +76 -105
- package/dist/esm/src/components/notification/FloatingNotification.js +52 -80
- package/dist/esm/src/components/notification/FullWidthNotification.js +67 -101
- package/dist/esm/src/components/notification/MessageNotification.js +60 -89
- package/dist/esm/src/components/notification/Notification.js +18 -36
- package/dist/esm/src/components/{input → number-input}/NumberInput.js +34 -54
- package/dist/esm/src/components/number-input/index.js +1 -0
- package/dist/esm/src/components/pagination/NavButton.js +28 -42
- package/dist/esm/src/components/pagination/Pagination.js +58 -97
- package/dist/esm/src/components/password-input/PasswordInput.js +48 -0
- package/dist/esm/src/components/password-input/index.js +1 -0
- package/dist/esm/src/components/progress-bar/ProgressBar.js +45 -60
- package/dist/esm/src/components/progress-bar/components/SegmentBar.js +11 -9
- package/dist/esm/src/components/progress-bar/components/SegmentLabels.js +32 -43
- package/dist/esm/src/components/progress-bar/hooks/useProgressBar.js +59 -78
- package/dist/esm/src/components/progress-bar/utils.js +8 -8
- package/dist/esm/src/components/progress-circle/ProgressCircle.js +49 -72
- package/dist/esm/src/components/radio/Radio.js +24 -43
- package/dist/esm/src/components/radio/RadioInput.js +18 -36
- package/dist/esm/src/components/range-date-picker/RangeDatePicker.js +141 -0
- package/dist/esm/src/components/range-date-picker/index.js +1 -0
- package/dist/esm/src/components/range-date-picker-with-buttons/RangeDatePickerWithButtons.js +75 -0
- package/dist/esm/src/components/range-date-picker-with-buttons/index.js +1 -0
- package/dist/esm/src/components/select/Select.js +36 -63
- package/dist/esm/src/components/select-box/SelectBox.js +254 -0
- package/dist/esm/src/components/select-dropdown/SelectDropdown.js +64 -100
- package/dist/esm/src/components/shared/hintText/HintText.js +13 -30
- package/dist/esm/src/components/shared/label/Label.js +12 -29
- package/dist/esm/src/components/slider/Slider.js +25 -28
- package/dist/esm/src/components/spinner/Spinner.js +25 -39
- package/dist/esm/src/components/switch/Switch.js +44 -69
- package/dist/esm/src/components/tab/TabButton.js +41 -61
- package/dist/esm/src/components/tab/index.js +1 -3
- package/dist/esm/src/components/table/Table.js +262 -0
- package/dist/esm/src/components/table/index.js +1 -0
- package/dist/esm/src/components/table/types.js +1 -0
- package/dist/esm/src/components/tag/Tag.js +65 -85
- package/dist/esm/src/components/textarea/Textarea.js +72 -0
- package/dist/esm/src/components/textarea/index.js +1 -0
- package/dist/esm/src/components/toggle/Toggle.js +28 -52
- package/dist/esm/src/components/tooltip/Tooltip.js +75 -108
- package/dist/esm/src/components/vertical-tab/VerticalTab.js +40 -0
- package/dist/esm/src/components/vertical-tab/index.js +1 -0
- package/dist/esm/src/constant/breakpoint.js +3 -3
- package/dist/esm/src/constant/date-picker.js +1 -1
- package/dist/esm/src/constant/size.js +1 -1
- package/dist/esm/src/hooks/dropdown/useDropdown.js +58 -60
- package/dist/esm/src/hooks/dropdown/useDropdownKeyboard.js +37 -40
- package/dist/esm/src/hooks/dropdown/useDropdownPosition.js +7 -9
- package/dist/esm/src/hooks/dropdown/useOutsideClick.js +11 -11
- package/dist/esm/src/hooks/dropdown/useScrollLock.js +23 -19
- package/dist/esm/src/hooks/dropdown/useWindowResize.js +12 -13
- package/dist/esm/src/hooks/useCallbackRef.js +2 -2
- package/dist/esm/src/hooks/useMediaQuery.js +8 -11
- package/dist/esm/src/hooks/useMergeRefs.js +2 -2
- package/dist/esm/src/utils/date-picker.js +29 -30
- package/dist/esm/src/utils/dropdown/dropdownUtils.js +39 -35
- package/dist/esm/src/utils/dropdown/multiSelect.js +25 -45
- package/dist/temp/assets/scripts/baseBox.js +53 -57
- package/dist/temp/assets/scripts/comboBox.js +62 -93
- package/dist/temp/assets/scripts/datePicker.js +286 -293
- package/dist/temp/assets/scripts/featuredIcon.js +40 -47
- package/dist/temp/assets/scripts/fileInput/const/classNames.js +4 -8
- package/dist/temp/assets/scripts/fileInput/fileInput.js +29 -33
- package/dist/temp/assets/scripts/fileInput/fileInputModel.js +24 -32
- package/dist/temp/assets/scripts/fileInput/fileInputView.js +52 -49
- package/dist/temp/assets/scripts/imageFileInput/ImageFileInput.js +57 -63
- package/dist/temp/assets/scripts/imageFileInput/ImageFileInputModel.js +79 -99
- package/dist/temp/assets/scripts/imageFileInput/ImageFileInputView.js +106 -104
- package/dist/temp/assets/scripts/imageFileInput/const/classNames.js +6 -10
- package/dist/temp/assets/scripts/index.d.ts +2 -0
- package/dist/temp/assets/scripts/index.js +2 -0
- package/dist/temp/assets/scripts/modal/Modal.js +46 -52
- package/dist/temp/assets/scripts/modal/ModalActions.js +42 -50
- package/dist/temp/assets/scripts/modal/ModalContent.js +21 -23
- package/dist/temp/assets/scripts/modal/ModalHeader.js +40 -46
- package/dist/temp/assets/scripts/modal/const/classNames.js +5 -5
- package/dist/temp/assets/scripts/modal/utils/contentUtils.js +1 -1
- package/dist/temp/assets/scripts/notification/FloatingNotification.js +80 -77
- package/dist/temp/assets/scripts/notification/FullWidthNotification.js +78 -62
- package/dist/temp/assets/scripts/notification/MessageNotification.js +81 -64
- package/dist/temp/assets/scripts/notification/Notification.js +48 -62
- package/dist/temp/assets/scripts/notification/const/classNames.js +1 -1
- package/dist/temp/assets/scripts/notification/const/icons.js +11 -25
- package/dist/temp/assets/scripts/notification/const/sizes.js +11 -11
- package/dist/temp/assets/scripts/notification/const/types.js +1 -1
- package/dist/temp/assets/scripts/notification/utils.js +31 -26
- package/dist/temp/assets/scripts/progress-bar/ProgressBar.js +124 -119
- package/dist/temp/assets/scripts/selectBox.js +81 -105
- package/dist/temp/assets/scripts/shared/ButtonCloseX.js +14 -13
- package/dist/temp/assets/scripts/slider.js +105 -113
- package/dist/temp/assets/scripts/tab.js +7 -9
- package/dist/temp/assets/scripts/table/Table.d.ts +41 -0
- package/dist/temp/assets/scripts/table/Table.js +378 -0
- package/dist/temp/assets/scripts/table/const/classNames.d.ts +27 -0
- package/dist/temp/assets/scripts/table/const/classNames.js +27 -0
- package/dist/temp/assets/scripts/table/const/index.d.ts +2 -0
- package/dist/temp/assets/scripts/table/const/index.js +2 -0
- package/dist/temp/assets/scripts/table/const/types.d.ts +23 -0
- package/dist/temp/assets/scripts/table/const/types.js +1 -0
- package/dist/temp/assets/scripts/table/index.d.ts +3 -0
- package/dist/temp/assets/scripts/table/index.js +8 -0
- package/dist/temp/assets/scripts/tag/Tag.js +104 -112
- package/dist/temp/assets/scripts/tag/const/classNames.js +3 -3
- package/dist/temp/assets/scripts/tag/const/sizes.js +4 -4
- package/dist/temp/assets/scripts/tooltip/Tooltip.js +125 -150
- package/dist/temp/assets/scripts/tooltip/TooltipLayerManager.js +20 -23
- package/dist/temp/assets/scripts/tooltip/const/classNames.js +1 -1
- package/dist/temp/assets/scripts/tooltip/const/constants.d.ts +1 -1
- package/dist/temp/assets/scripts/tooltip/const/constants.js +14 -14
- package/dist/temp/assets/scripts/tooltip/const/icons.js +7 -7
- package/dist/temp/assets/scripts/tooltip/const/templates.js +42 -13
- package/dist/temp/assets/scripts/tooltip/utils.js +13 -15
- package/dist/temp/assets/scripts/utils/debounce.js +5 -9
- package/dist/temp/assets/scripts/utils/unifiedBox/domRenderer.js +96 -105
- package/dist/temp/assets/scripts/utils/unifiedBox/dropdownModel.js +96 -121
- package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxController.js +170 -193
- package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +173 -250
- package/dist/temp/constant/color.js +1 -1
- package/dist/temp/index.d.ts +0 -27
- package/dist/temp/index.js +0 -27
- package/dist/temp/src/components/badge/Badge.js +3 -15
- package/dist/temp/src/components/badge/index.d.ts +0 -1
- package/dist/temp/src/components/badge/index.js +0 -1
- package/dist/temp/src/components/badge/utils.js +5 -7
- package/dist/{types/src/components/badge → temp/src/components/badge-group}/BadgeGroup.d.ts +1 -1
- package/dist/temp/src/components/badge-group/BadgeGroup.js +13 -0
- package/dist/temp/src/components/badge-group/index.d.ts +1 -0
- package/dist/temp/src/components/badge-group/index.js +1 -0
- package/dist/temp/src/components/bread-crumb/BreadCrumb.js +20 -0
- package/dist/temp/src/components/button/Button.js +21 -38
- package/dist/temp/src/components/button/ButtonCloseX.js +3 -15
- package/dist/temp/src/components/button/ButtonStepper.js +2 -3
- package/dist/temp/src/components/button/index.d.ts +0 -1
- package/dist/temp/src/components/button/index.js +0 -1
- package/dist/{types/src/components/button → temp/src/components/button-group}/ButtonGroup.d.ts +5 -4
- package/dist/temp/src/components/button-group/ButtonGroup.js +51 -0
- package/dist/temp/src/components/button-group/index.d.ts +1 -0
- package/dist/temp/src/components/button-group/index.js +1 -0
- package/dist/temp/src/components/carousel-arrow/CarouselArrow.js +9 -0
- package/dist/temp/src/components/carousel-arrow/index.d.ts +1 -0
- package/dist/temp/src/components/carousel-arrow/index.js +1 -0
- package/dist/temp/src/components/carousel-number-group/CarouselNumberGroup.js +10 -0
- package/dist/{types/src/components/carousel → temp/src/components/carousel-number-group}/index.d.ts +0 -1
- package/dist/temp/src/components/{carousel → carousel-number-group}/index.js +0 -1
- package/dist/temp/src/components/checkbox/Checkbox.js +2 -25
- package/dist/temp/src/components/checkbox/CheckboxInput.js +6 -29
- package/dist/temp/src/components/combo-box/ComboBox.js +165 -0
- package/dist/temp/src/components/data-grid/DataGrid.d.ts +28 -0
- package/dist/temp/src/components/data-grid/DataGrid.js +88 -0
- package/dist/temp/src/components/data-grid/DataGrid.types.d.ts +35 -0
- package/dist/temp/src/components/data-grid/DataGrid.types.js +1 -0
- package/dist/temp/src/components/data-grid/index.d.ts +2 -0
- package/dist/temp/src/components/data-grid/index.js +2 -0
- package/dist/temp/src/components/date-picker/CustomInput.js +5 -28
- package/dist/temp/src/components/date-picker/DatePicker.d.ts +11 -7
- package/dist/temp/src/components/date-picker/DatePicker.js +394 -221
- package/dist/temp/src/components/date-picker/index.d.ts +0 -2
- package/dist/temp/src/components/date-picker/index.js +0 -2
- package/dist/temp/src/components/date-picker/utils.js +1 -2
- package/dist/temp/src/components/divider/Divider.js +1 -15
- package/dist/temp/src/components/dot/Dot.js +2 -25
- package/dist/temp/src/components/dropdown/Dropdown.js +23 -39
- package/dist/temp/src/components/empty-state/EmptyState.js +3 -29
- package/dist/temp/src/components/featured-icon/FeaturedIcon.js +3 -26
- package/dist/temp/src/components/file-input/FileInput.d.ts +1 -1
- package/dist/temp/src/components/file-input/FileInput.js +33 -69
- package/dist/{types/src/components/tab → temp/src/components/horizontal-tab}/HorizontalTab.d.ts +1 -1
- package/dist/temp/src/components/horizontal-tab/HorizontalTab.js +24 -0
- package/dist/temp/src/components/horizontal-tab/index.d.ts +1 -0
- package/dist/temp/src/components/horizontal-tab/index.js +1 -0
- package/dist/temp/src/components/image-file-input/ImageFileInput.d.ts +1 -1
- package/dist/temp/src/components/image-file-input/ImageFileInput.js +45 -73
- package/dist/temp/src/components/image-file-input/components/ImagePreview.js +2 -14
- package/dist/temp/src/components/index.d.ts +17 -5
- package/dist/temp/src/components/index.js +17 -5
- package/dist/temp/src/components/{input → input-base}/InputBase.d.ts +1 -0
- package/dist/temp/src/components/input-base/InputBase.js +96 -0
- package/dist/temp/src/components/input-base/index.d.ts +1 -0
- package/dist/temp/src/components/input-base/index.js +1 -0
- package/dist/temp/src/components/modal/Modal.js +15 -41
- package/dist/temp/src/components/notification/FloatingNotification.js +11 -34
- package/dist/temp/src/components/notification/FullWidthNotification.js +12 -35
- package/dist/temp/src/components/notification/MessageNotification.js +8 -31
- package/dist/temp/src/components/notification/Notification.js +4 -27
- package/dist/{types/src/components/input → temp/src/components/number-input}/NumberInput.d.ts +1 -1
- package/dist/temp/src/components/number-input/NumberInput.js +68 -0
- package/dist/temp/src/components/number-input/index.d.ts +1 -0
- package/dist/temp/src/components/number-input/index.js +1 -0
- package/dist/temp/src/components/pagination/NavButton.js +19 -31
- package/dist/temp/src/components/pagination/Pagination.js +33 -60
- package/dist/temp/src/components/{input → password-input}/PasswordInput.d.ts +1 -1
- package/dist/temp/src/components/password-input/PasswordInput.js +28 -0
- package/dist/temp/src/components/password-input/index.d.ts +1 -0
- package/dist/temp/src/components/password-input/index.js +1 -0
- package/dist/temp/src/components/progress-bar/ProgressBar.js +10 -22
- package/dist/temp/src/components/progress-bar/components/SegmentBar.js +5 -6
- package/dist/temp/src/components/progress-bar/components/SegmentLabels.js +11 -24
- package/dist/temp/src/components/progress-bar/hooks/useProgressBar.js +36 -45
- package/dist/temp/src/components/progress-bar/utils.js +8 -8
- package/dist/temp/src/components/progress-circle/ProgressCircle.js +5 -17
- package/dist/temp/src/components/radio/Radio.js +2 -25
- package/dist/temp/src/components/radio/RadioInput.js +2 -25
- package/dist/{types/src/components/date-picker → temp/src/components/range-date-picker}/RangeDatePicker.d.ts +1 -1
- package/dist/temp/src/components/range-date-picker/RangeDatePicker.js +104 -0
- package/dist/temp/src/components/range-date-picker/index.d.ts +1 -0
- package/dist/temp/src/components/range-date-picker/index.js +1 -0
- package/dist/{types/src/components/date-picker → temp/src/components/range-date-picker-with-buttons}/RangeDatePickerWithButtons.d.ts +1 -1
- package/dist/temp/src/components/range-date-picker-with-buttons/RangeDatePickerWithButtons.js +43 -0
- package/dist/temp/src/components/range-date-picker-with-buttons/index.d.ts +1 -0
- package/dist/temp/src/components/range-date-picker-with-buttons/index.js +1 -0
- package/dist/temp/src/components/select/Select.js +3 -26
- package/dist/temp/src/components/select-box/SelectBox.js +130 -0
- package/dist/temp/src/components/select-dropdown/SelectDropdown.js +11 -34
- package/dist/temp/src/components/shared/hintText/HintText.js +2 -25
- package/dist/temp/src/components/shared/label/Label.js +2 -25
- package/dist/temp/src/components/slider/Slider.js +15 -16
- package/dist/temp/src/components/spinner/Spinner.js +4 -17
- package/dist/temp/src/components/switch/Switch.js +17 -30
- package/dist/temp/src/components/tab/TabButton.js +6 -29
- package/dist/temp/src/components/tab/index.d.ts +0 -2
- package/dist/temp/src/components/tab/index.js +0 -2
- package/dist/temp/src/components/table/Table.d.ts +46 -0
- package/dist/temp/src/components/table/Table.js +115 -0
- package/dist/temp/src/components/table/index.d.ts +1 -0
- package/dist/temp/src/components/table/index.js +1 -0
- package/dist/temp/src/components/table/types.d.ts +45 -0
- package/dist/temp/src/components/table/types.js +1 -0
- package/dist/temp/src/components/tag/Tag.js +39 -53
- package/dist/temp/src/components/textarea/Textarea.js +34 -0
- package/dist/temp/src/components/textarea/index.d.ts +1 -0
- package/dist/temp/src/components/textarea/index.js +1 -0
- package/dist/temp/src/components/toggle/Toggle.js +3 -26
- package/dist/temp/src/components/tooltip/Tooltip.js +49 -67
- package/dist/temp/src/components/{tab → vertical-tab}/VerticalTab.d.ts +1 -1
- package/dist/temp/src/components/vertical-tab/VerticalTab.js +20 -0
- package/dist/temp/src/components/vertical-tab/index.d.ts +1 -0
- package/dist/temp/src/components/vertical-tab/index.js +1 -0
- package/dist/temp/src/constant/breakpoint.js +3 -3
- package/dist/temp/src/constant/date-picker.js +1 -1
- package/dist/temp/src/constant/size.js +1 -1
- package/dist/temp/src/hooks/dropdown/useDropdown.js +37 -37
- package/dist/temp/src/hooks/dropdown/useDropdownKeyboard.js +26 -27
- package/dist/temp/src/hooks/dropdown/useDropdownPosition.js +7 -7
- package/dist/temp/src/hooks/dropdown/useOutsideClick.js +7 -7
- package/dist/temp/src/hooks/dropdown/useScrollLock.js +17 -17
- package/dist/temp/src/hooks/dropdown/useWindowResize.js +10 -11
- package/dist/temp/src/hooks/useCallbackRef.js +2 -2
- package/dist/temp/src/hooks/useMediaQuery.js +8 -9
- package/dist/temp/src/hooks/useMergeRefs.js +2 -2
- package/dist/temp/src/utils/date-picker.js +23 -25
- package/dist/temp/src/utils/dropdown/dropdownUtils.js +26 -27
- package/dist/temp/src/utils/dropdown/multiSelect.js +23 -25
- package/dist/types/assets/scripts/index.d.ts +2 -0
- package/dist/types/assets/scripts/table/Table.d.ts +41 -0
- package/dist/types/assets/scripts/table/const/classNames.d.ts +27 -0
- package/dist/types/assets/scripts/table/const/index.d.ts +2 -0
- package/dist/types/assets/scripts/table/const/types.d.ts +23 -0
- package/dist/types/assets/scripts/table/index.d.ts +3 -0
- package/dist/types/assets/scripts/tooltip/const/constants.d.ts +1 -1
- package/dist/types/index.d.ts +0 -27
- package/dist/types/src/components/badge/index.d.ts +0 -1
- package/dist/{temp/src/components/badge → types/src/components/badge-group}/BadgeGroup.d.ts +1 -1
- package/dist/types/src/components/badge-group/index.d.ts +1 -0
- package/dist/types/src/components/button/index.d.ts +0 -1
- package/dist/{temp/src/components/button → types/src/components/button-group}/ButtonGroup.d.ts +5 -4
- package/dist/types/src/components/button-group/index.d.ts +1 -0
- package/dist/types/src/components/carousel-arrow/index.d.ts +1 -0
- package/dist/{temp/src/components/carousel → types/src/components/carousel-number-group}/index.d.ts +0 -1
- package/dist/types/src/components/data-grid/DataGrid.d.ts +28 -0
- package/dist/types/src/components/data-grid/DataGrid.types.d.ts +35 -0
- package/dist/types/src/components/data-grid/index.d.ts +2 -0
- package/dist/types/src/components/date-picker/DatePicker.d.ts +11 -7
- package/dist/types/src/components/date-picker/index.d.ts +0 -2
- package/dist/types/src/components/file-input/FileInput.d.ts +1 -1
- package/dist/{temp/src/components/tab → types/src/components/horizontal-tab}/HorizontalTab.d.ts +1 -1
- package/dist/types/src/components/horizontal-tab/index.d.ts +1 -0
- package/dist/types/src/components/image-file-input/ImageFileInput.d.ts +1 -1
- package/dist/types/src/components/index.d.ts +17 -5
- package/dist/types/src/components/{input → input-base}/InputBase.d.ts +1 -0
- package/dist/types/src/components/input-base/index.d.ts +1 -0
- package/dist/{temp/src/components/input → types/src/components/number-input}/NumberInput.d.ts +1 -1
- package/dist/types/src/components/number-input/index.d.ts +1 -0
- package/dist/types/src/components/{input → password-input}/PasswordInput.d.ts +1 -1
- package/dist/types/src/components/password-input/index.d.ts +1 -0
- package/dist/{temp/src/components/date-picker → types/src/components/range-date-picker}/RangeDatePicker.d.ts +1 -1
- package/dist/types/src/components/range-date-picker/index.d.ts +1 -0
- package/dist/{temp/src/components/date-picker → types/src/components/range-date-picker-with-buttons}/RangeDatePickerWithButtons.d.ts +1 -1
- package/dist/types/src/components/range-date-picker-with-buttons/index.d.ts +1 -0
- package/dist/types/src/components/tab/index.d.ts +0 -2
- package/dist/types/src/components/table/Table.d.ts +46 -0
- package/dist/types/src/components/table/index.d.ts +1 -0
- package/dist/types/src/components/table/types.d.ts +45 -0
- package/dist/types/src/components/textarea/index.d.ts +1 -0
- package/dist/types/src/components/{tab → vertical-tab}/VerticalTab.d.ts +1 -1
- package/dist/types/src/components/vertical-tab/index.d.ts +1 -0
- package/dist/ui-admin/assets/styles/style.css +625 -165
- package/package.json +2 -1
- package/dist/cjs/src/components/badge/BadgeGroup.js +0 -62
- package/dist/cjs/src/components/breadcrumb/BreadCrumb.js +0 -66
- package/dist/cjs/src/components/button/ButtonGroup.js +0 -116
- package/dist/cjs/src/components/carousel/CarouselArrow.js +0 -41
- package/dist/cjs/src/components/carousel/CarouselNumberGroup.js +0 -45
- package/dist/cjs/src/components/combobox/ComboBox.js +0 -349
- package/dist/cjs/src/components/date-picker/RangeDatePicker.js +0 -154
- package/dist/cjs/src/components/date-picker/RangeDatePickerWithButtons.js +0 -99
- package/dist/cjs/src/components/input/InputBase.js +0 -229
- package/dist/cjs/src/components/input/NumberInput.js +0 -132
- package/dist/cjs/src/components/input/PasswordInput.js +0 -72
- package/dist/cjs/src/components/input/Textarea.js +0 -107
- package/dist/cjs/src/components/input/index.js +0 -49
- package/dist/cjs/src/components/selectbox/SelectBox.js +0 -318
- package/dist/cjs/src/components/tab/HorizontalTab.js +0 -68
- package/dist/cjs/src/components/tab/VerticalTab.js +0 -60
- package/dist/esm/src/components/badge/BadgeGroup.js +0 -55
- package/dist/esm/src/components/breadcrumb/BreadCrumb.js +0 -59
- package/dist/esm/src/components/button/ButtonGroup.js +0 -108
- package/dist/esm/src/components/carousel/CarouselArrow.js +0 -33
- package/dist/esm/src/components/carousel/CarouselNumberGroup.js +0 -37
- package/dist/esm/src/components/carousel/index.js +0 -2
- package/dist/esm/src/components/combobox/ComboBox.js +0 -343
- package/dist/esm/src/components/date-picker/RangeDatePicker.js +0 -148
- package/dist/esm/src/components/date-picker/RangeDatePickerWithButtons.js +0 -93
- package/dist/esm/src/components/input/InputBase.js +0 -223
- package/dist/esm/src/components/input/PasswordInput.js +0 -65
- package/dist/esm/src/components/input/Textarea.js +0 -100
- package/dist/esm/src/components/input/index.js +0 -4
- package/dist/esm/src/components/selectbox/SelectBox.js +0 -312
- package/dist/esm/src/components/tab/HorizontalTab.js +0 -61
- package/dist/esm/src/components/tab/VerticalTab.js +0 -52
- package/dist/temp/src/components/badge/BadgeGroup.js +0 -36
- package/dist/temp/src/components/breadcrumb/BreadCrumb.js +0 -33
- package/dist/temp/src/components/button/ButtonGroup.js +0 -72
- package/dist/temp/src/components/carousel/CarouselArrow.js +0 -24
- package/dist/temp/src/components/carousel/CarouselNumberGroup.js +0 -24
- package/dist/temp/src/components/combobox/ComboBox.js +0 -199
- package/dist/temp/src/components/date-picker/RangeDatePicker.js +0 -117
- package/dist/temp/src/components/date-picker/RangeDatePickerWithButtons.js +0 -55
- package/dist/temp/src/components/input/InputBase.js +0 -121
- package/dist/temp/src/components/input/NumberInput.js +0 -93
- package/dist/temp/src/components/input/PasswordInput.js +0 -51
- package/dist/temp/src/components/input/Textarea.js +0 -60
- package/dist/temp/src/components/input/index.d.ts +0 -4
- package/dist/temp/src/components/input/index.js +0 -4
- package/dist/temp/src/components/selectbox/SelectBox.js +0 -163
- package/dist/temp/src/components/tab/HorizontalTab.js +0 -37
- package/dist/temp/src/components/tab/VerticalTab.js +0 -32
- package/dist/types/src/components/input/index.d.ts +0 -4
- /package/dist/cjs/src/components/{breadcrumb → bread-crumb}/index.js +0 -0
- /package/dist/cjs/src/components/{combobox → combo-box}/index.js +0 -0
- /package/dist/cjs/src/components/{selectbox → select-box}/index.js +0 -0
- /package/dist/esm/src/components/{breadcrumb → bread-crumb}/index.js +0 -0
- /package/dist/esm/src/components/{combobox → combo-box}/index.js +0 -0
- /package/dist/esm/src/components/{selectbox → select-box}/index.js +0 -0
- /package/dist/temp/src/components/{breadcrumb → bread-crumb}/BreadCrumb.d.ts +0 -0
- /package/dist/temp/src/components/{breadcrumb → bread-crumb}/index.d.ts +0 -0
- /package/dist/temp/src/components/{breadcrumb → bread-crumb}/index.js +0 -0
- /package/dist/temp/src/components/{carousel → carousel-arrow}/CarouselArrow.d.ts +0 -0
- /package/dist/temp/src/components/{carousel → carousel-number-group}/CarouselNumberGroup.d.ts +0 -0
- /package/dist/temp/src/components/{combobox → combo-box}/ComboBox.d.ts +0 -0
- /package/dist/temp/src/components/{combobox → combo-box}/index.d.ts +0 -0
- /package/dist/temp/src/components/{combobox → combo-box}/index.js +0 -0
- /package/dist/temp/src/components/{selectbox → select-box}/SelectBox.d.ts +0 -0
- /package/dist/temp/src/components/{selectbox → select-box}/index.d.ts +0 -0
- /package/dist/temp/src/components/{selectbox → select-box}/index.js +0 -0
- /package/dist/temp/src/components/{input → textarea}/Textarea.d.ts +0 -0
- /package/dist/types/src/components/{breadcrumb → bread-crumb}/BreadCrumb.d.ts +0 -0
- /package/dist/types/src/components/{breadcrumb → bread-crumb}/index.d.ts +0 -0
- /package/dist/types/src/components/{carousel → carousel-arrow}/CarouselArrow.d.ts +0 -0
- /package/dist/types/src/components/{carousel → carousel-number-group}/CarouselNumberGroup.d.ts +0 -0
- /package/dist/types/src/components/{combobox → combo-box}/ComboBox.d.ts +0 -0
- /package/dist/types/src/components/{combobox → combo-box}/index.d.ts +0 -0
- /package/dist/types/src/components/{selectbox → select-box}/SelectBox.d.ts +0 -0
- /package/dist/types/src/components/{selectbox → select-box}/index.d.ts +0 -0
- /package/dist/types/src/components/{input → textarea}/Textarea.d.ts +0 -0
|
@@ -13,141 +13,275 @@ var _reactFlatpickr = _interopRequireDefault(require("react-flatpickr"));
|
|
|
13
13
|
var _datePicker = require("../../utils/date-picker");
|
|
14
14
|
var _CustomInput = require("./CustomInput");
|
|
15
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
// ══════════════════════════════════════════
|
|
17
|
+
// 유틸리티 함수
|
|
18
|
+
// ══════════════════════════════════════════
|
|
19
|
+
const isValidDate = dateString => {
|
|
20
|
+
const date = new Date(dateString);
|
|
21
|
+
return date instanceof Date && !isNaN(date.getTime());
|
|
22
|
+
};
|
|
23
|
+
/** input의 스크롤 가능한 부모 요소들을 수집 */
|
|
24
|
+
const collectScrollParents = element => {
|
|
25
|
+
const parents = [];
|
|
26
|
+
let parentEl = element.parentElement;
|
|
27
|
+
while (parentEl) {
|
|
28
|
+
const {
|
|
29
|
+
overflow,
|
|
30
|
+
overflowY
|
|
31
|
+
} = getComputedStyle(parentEl);
|
|
32
|
+
if (overflow !== 'visible' || overflowY !== 'visible') {
|
|
33
|
+
parents.push(parentEl);
|
|
21
34
|
}
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
return
|
|
35
|
+
parentEl = parentEl.parentElement;
|
|
36
|
+
}
|
|
37
|
+
return parents;
|
|
25
38
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
39
|
+
/** 현재 열려있는 flatpickr 캘린더 요소를 반환 */
|
|
40
|
+
const getOpenCalendar = (instance, input, isPortal) => {
|
|
41
|
+
if (isPortal) {
|
|
42
|
+
return instance.calendarContainer?.classList.contains('open') ? instance.calendarContainer : null;
|
|
31
43
|
}
|
|
32
|
-
return
|
|
44
|
+
return input.parentElement?.querySelector('.flatpickr-calendar.open') ?? null;
|
|
33
45
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
/** selectedDate가 유효하지 않으면 이전 날짜로 복원하고 true 반환 */
|
|
47
|
+
const restoreIfInvalidDate = (date, instance) => {
|
|
48
|
+
if (date && date instanceof Date && !isNaN(date.getTime())) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const previousDate = instance._previousDateBeforeInput;
|
|
52
|
+
if (previousDate && previousDate instanceof Date && !isNaN(previousDate.getTime())) {
|
|
53
|
+
instance.selectedDates = [previousDate];
|
|
54
|
+
instance.setDate(previousDate, false);
|
|
55
|
+
} else if (instance.input) {
|
|
56
|
+
instance.input.value = '';
|
|
57
|
+
instance.setDate('', false);
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
40
60
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
61
|
+
/** 시간 전용 모드의 기본값 반환 */
|
|
62
|
+
const getTimeOnlyDefault = (hasSeconds, isEndDate) => {
|
|
63
|
+
const endTime = hasSeconds ? '23:59:59' : '23:59';
|
|
64
|
+
const startTime = hasSeconds ? '00:00:00' : '00:00';
|
|
44
65
|
return isEndDate ? endTime : startTime;
|
|
45
66
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
67
|
+
/** 날짜+시간 모드에서 시간이 없는 경우 기본값 부여 */
|
|
68
|
+
const getDateTimeDefault = (currentDate, hasSeconds, isEndDate) => {
|
|
69
|
+
if (!currentDate) return '';
|
|
70
|
+
const format = hasSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm';
|
|
71
|
+
const momentDate = (0, _moment.default)(currentDate);
|
|
49
72
|
return isEndDate ? momentDate.endOf('day').format(format) : momentDate.startOf('day').format(format);
|
|
50
73
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
74
|
+
// ══════════════════════════════════════════
|
|
75
|
+
// 캘린더 위치 조정 (setup / cleanup)
|
|
76
|
+
// ══════════════════════════════════════════
|
|
77
|
+
/** portal 모드: 캘린더 위치 재조정 및 스크롤 이벤트 연결 */
|
|
78
|
+
const setupPortalPositioning = (instance, input) => {
|
|
79
|
+
const reposition = () => {
|
|
80
|
+
if (instance.config) instance._positionCalendar();
|
|
81
|
+
};
|
|
82
|
+
instance._reposition = reposition;
|
|
83
|
+
const scrollParents = collectScrollParents(input);
|
|
84
|
+
instance._portalScrollParents = scrollParents;
|
|
85
|
+
instance.config.onOpen.push(() => {
|
|
86
|
+
scrollParents.forEach(target => {
|
|
87
|
+
target.addEventListener('scroll', reposition, {
|
|
88
|
+
passive: true
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
window.addEventListener('scroll', reposition, {
|
|
92
|
+
passive: true
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
instance.config.onClose.push(() => {
|
|
96
|
+
scrollParents.forEach(target => {
|
|
97
|
+
target.removeEventListener('scroll', reposition);
|
|
98
|
+
});
|
|
99
|
+
window.removeEventListener('scroll', reposition);
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
/** 일반 모드: 아래 공간 부족 시 캘린더를 위에 표시하고 스크롤/리사이즈 이벤트 연결 */
|
|
103
|
+
const setupStaticPositioning = (instance, input) => {
|
|
104
|
+
const adjustPosition = () => {
|
|
105
|
+
const calendar = instance.calendarContainer;
|
|
106
|
+
if (!calendar) return;
|
|
107
|
+
const wrapperEl = input.closest('.ncua-date-picker');
|
|
108
|
+
const rect = wrapperEl ? wrapperEl.getBoundingClientRect() : input.getBoundingClientRect();
|
|
109
|
+
const calendarHeight = calendar.offsetHeight;
|
|
110
|
+
const CALENDAR_GAP = 6;
|
|
111
|
+
const spaceBelow = window.innerHeight - rect.bottom;
|
|
112
|
+
calendar.style.top = spaceBelow < calendarHeight + CALENDAR_GAP ? `${-(calendarHeight + CALENDAR_GAP)}px` : '';
|
|
113
|
+
};
|
|
114
|
+
const scrollParents = collectScrollParents(input);
|
|
115
|
+
instance._adjustPosition = adjustPosition;
|
|
116
|
+
instance._scrollParents = scrollParents;
|
|
117
|
+
instance.config.onOpen.push(() => {
|
|
118
|
+
adjustPosition();
|
|
119
|
+
scrollParents.forEach(target => {
|
|
120
|
+
target.addEventListener('scroll', adjustPosition, {
|
|
121
|
+
passive: true
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
window.addEventListener('scroll', adjustPosition, {
|
|
125
|
+
passive: true
|
|
126
|
+
});
|
|
127
|
+
window.addEventListener('resize', adjustPosition);
|
|
128
|
+
});
|
|
129
|
+
instance.config.onClose.push(() => {
|
|
130
|
+
scrollParents.forEach(target => {
|
|
131
|
+
target.removeEventListener('scroll', adjustPosition);
|
|
132
|
+
});
|
|
133
|
+
window.removeEventListener('scroll', adjustPosition);
|
|
134
|
+
window.removeEventListener('resize', adjustPosition);
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
/** scroll/resize 리스너 정리 */
|
|
138
|
+
const cleanupPositioning = instance => {
|
|
139
|
+
const reposition = instance._reposition;
|
|
140
|
+
if (reposition) {
|
|
141
|
+
const portalScrollParents = instance._portalScrollParents || [];
|
|
142
|
+
portalScrollParents.forEach(target => {
|
|
143
|
+
target.removeEventListener('scroll', reposition);
|
|
144
|
+
});
|
|
145
|
+
window.removeEventListener('scroll', reposition);
|
|
146
|
+
}
|
|
147
|
+
const adjustPosition = instance._adjustPosition;
|
|
148
|
+
if (adjustPosition) {
|
|
149
|
+
const scrollParents = instance._scrollParents || [];
|
|
150
|
+
scrollParents.forEach(target => {
|
|
151
|
+
target.removeEventListener('scroll', adjustPosition);
|
|
152
|
+
});
|
|
153
|
+
window.removeEventListener('scroll', adjustPosition);
|
|
154
|
+
window.removeEventListener('resize', adjustPosition);
|
|
56
155
|
}
|
|
57
|
-
if (!currentDate) return '';
|
|
58
|
-
return getDateTimeValue(currentDate, enableSeconds, isEndDate);
|
|
59
156
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
157
|
+
// ══════════════════════════════════════════
|
|
158
|
+
// 시간 입력 필드 (setup / cleanup)
|
|
159
|
+
// ══════════════════════════════════════════
|
|
160
|
+
/** enableTime 옵션 사용 시 시간 입력 필드 이벤트 설정 */
|
|
161
|
+
const setupTimeInputHandlers = (instance, input, isPortal, onHourInput, onMinuteInput) => {
|
|
162
|
+
const timeContainer = isPortal ? instance.calendarContainer : input.parentElement;
|
|
163
|
+
const timeInputWrapper = timeContainer?.querySelector('.flatpickr-time');
|
|
164
|
+
if (!timeInputWrapper) return;
|
|
165
|
+
const hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
166
|
+
const minuteInput = timeInputWrapper.querySelector('.flatpickr-minute');
|
|
167
|
+
if (!hourInput || !minuteInput) return;
|
|
168
|
+
hourInput.addEventListener('input', onHourInput);
|
|
169
|
+
minuteInput.addEventListener('input', onMinuteInput);
|
|
170
|
+
const handleMouseDown = e => {
|
|
171
|
+
const flatpickrCalendar = getOpenCalendar(instance, input, isPortal);
|
|
172
|
+
if (flatpickrCalendar && !flatpickrCalendar.contains(e.target)) {
|
|
173
|
+
const timeInputs = flatpickrCalendar.querySelectorAll('.flatpickr-time input');
|
|
174
|
+
timeInputs.forEach(timeInput => {
|
|
175
|
+
if (document.activeElement === timeInput) {
|
|
176
|
+
timeInput.blur();
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
document.addEventListener('mousedown', handleMouseDown, true);
|
|
182
|
+
instance._handleMouseDown = handleMouseDown;
|
|
183
|
+
};
|
|
184
|
+
/** 시간 입력 필드 이벤트 리스너 정리 */
|
|
185
|
+
const cleanupTimeInputHandlers = (instance, input, isPortal, onHourInput, onMinuteInput) => {
|
|
186
|
+
const timeContainer = isPortal ? instance.calendarContainer : input.parentElement;
|
|
187
|
+
const timeInputWrapper = timeContainer?.querySelector('.flatpickr-time');
|
|
188
|
+
if (!timeInputWrapper) return;
|
|
189
|
+
const hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
190
|
+
if (hourInput) {
|
|
191
|
+
hourInput.removeEventListener('input', onHourInput);
|
|
192
|
+
}
|
|
193
|
+
const minuteInput = timeInputWrapper.querySelector('.flatpickr-minute');
|
|
194
|
+
if (minuteInput) {
|
|
195
|
+
minuteInput.removeEventListener('input', onMinuteInput);
|
|
196
|
+
}
|
|
197
|
+
const handleMouseDown = instance._handleMouseDown;
|
|
198
|
+
if (handleMouseDown) {
|
|
199
|
+
document.removeEventListener('mousedown', handleMouseDown, true);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
// ══════════════════════════════════════════
|
|
203
|
+
// DatePicker 컴포넌트
|
|
204
|
+
// ══════════════════════════════════════════
|
|
205
|
+
const DatePicker = exports.DatePicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
206
|
+
let {
|
|
207
|
+
shouldFocus = true,
|
|
208
|
+
currentDate,
|
|
209
|
+
size = 'xs',
|
|
210
|
+
onChangeDate,
|
|
211
|
+
datePickerOptions,
|
|
212
|
+
isEndDate = false,
|
|
213
|
+
onValidationError,
|
|
214
|
+
className,
|
|
215
|
+
portal = false,
|
|
216
|
+
...attrs
|
|
217
|
+
} = _ref;
|
|
218
|
+
const flatpickrInstanceRef = (0, _react.useRef)(null);
|
|
219
|
+
const dateFormatRef = (0, _react.useRef)('Y-m-d');
|
|
220
|
+
const minMaxDateRef = (0, _react.useRef)({});
|
|
221
|
+
/** portal 모드: 캘린더를 담을 persistent 컨테이너 (한 번 생성, 언마운트 시 제거) */
|
|
222
|
+
const portalContainerRef = (0, _react.useRef)(null);
|
|
223
|
+
const hasTimeOption = datePickerOptions && Object.hasOwn(datePickerOptions, 'enableTime');
|
|
224
|
+
// 콜백 props를 ref에 저장하여 memoized options에서 최신값 참조
|
|
225
|
+
const onChangeDateRef = (0, _react.useRef)(onChangeDate);
|
|
226
|
+
onChangeDateRef.current = onChangeDate;
|
|
227
|
+
const onValidationErrorRef = (0, _react.useRef)(onValidationError);
|
|
228
|
+
onValidationErrorRef.current = onValidationError;
|
|
229
|
+
/** portal 컨테이너를 lazily 생성 (이미 있으면 재사용), className은 매번 갱신 */
|
|
230
|
+
const getPortalContainer = () => {
|
|
231
|
+
if (!portal || typeof document === 'undefined') return undefined;
|
|
232
|
+
const portalClassName = (0, _classnames.default)('ncua-date-picker', 'ncua-date-picker--portal', `ncua-date-picker--${size}`, {
|
|
233
|
+
'ncua-date-picker--has-time': hasTimeOption
|
|
234
|
+
});
|
|
235
|
+
if (portalContainerRef.current) {
|
|
236
|
+
portalContainerRef.current.className = portalClassName;
|
|
237
|
+
return portalContainerRef.current;
|
|
238
|
+
}
|
|
239
|
+
const el = document.createElement('div');
|
|
240
|
+
el.className = portalClassName;
|
|
241
|
+
// ncua-date-picker의 position/width/height가 캘린더 배치를 방해하지 않도록 무력화
|
|
242
|
+
el.style.cssText = 'position:static;width:auto;height:auto;overflow:visible;';
|
|
243
|
+
document.body.appendChild(el);
|
|
244
|
+
portalContainerRef.current = el;
|
|
245
|
+
return el;
|
|
246
|
+
};
|
|
247
|
+
/** 컴포넌트 언마운트 시 포탈 컨테이너 및 스크롤 리스너 정리 */
|
|
248
|
+
(0, _react.useEffect)(() => {
|
|
249
|
+
return () => {
|
|
250
|
+
portalContainerRef.current?.remove();
|
|
251
|
+
portalContainerRef.current = null;
|
|
252
|
+
};
|
|
253
|
+
}, []);
|
|
254
|
+
// ──────────────────────────────────────────────
|
|
255
|
+
// 날짜 유효성 검사
|
|
256
|
+
// ──────────────────────────────────────────────
|
|
257
|
+
/** minDate/maxDate 범위를 벗어났는지 확인 */
|
|
258
|
+
const checkDateViolations = (date, minDate, maxDate) => {
|
|
259
|
+
const violations = [];
|
|
260
|
+
const inputDate = (0, _moment.default)(date);
|
|
79
261
|
if (!inputDate.isValid()) return violations;
|
|
80
262
|
if (minDate) {
|
|
81
|
-
|
|
263
|
+
const min = (0, _moment.default)(minDate);
|
|
82
264
|
if (min.isValid() && inputDate.isBefore(min, 'day')) {
|
|
83
265
|
violations.push('minDate');
|
|
84
266
|
}
|
|
85
267
|
}
|
|
86
268
|
if (maxDate) {
|
|
87
|
-
|
|
269
|
+
const max = (0, _moment.default)(maxDate);
|
|
88
270
|
if (max.isValid() && inputDate.isAfter(max, 'day')) {
|
|
89
271
|
violations.push('maxDate');
|
|
90
272
|
}
|
|
91
273
|
}
|
|
92
274
|
return violations;
|
|
93
275
|
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (isValidDateInstance(previousDate)) {
|
|
100
|
-
// 이전 값이 있으면 이전 값으로 복원
|
|
101
|
-
instance.selectedDates = [previousDate];
|
|
102
|
-
instance.setDate(previousDate, false);
|
|
103
|
-
} else {
|
|
104
|
-
// 이전 값이 없으면 빈 값으로 처리
|
|
105
|
-
restorePreviousDate(instance.input, instance);
|
|
106
|
-
}
|
|
107
|
-
return true;
|
|
108
|
-
};
|
|
109
|
-
var handleDateViolations = function (selectedDate, instance) {
|
|
110
|
-
var _a;
|
|
111
|
-
var minDate = options.minDate,
|
|
112
|
-
maxDate = options.maxDate;
|
|
113
|
-
var violations = checkDateViolations(selectedDate, minDate, maxDate);
|
|
114
|
-
if (violations.length > 0 && onValidationError) {
|
|
115
|
-
var prevDate = (_a = instance === null || instance === void 0 ? void 0 : instance.selectedDates) === null || _a === void 0 ? void 0 : _a[0];
|
|
116
|
-
onValidationError({
|
|
117
|
-
date: selectedDate,
|
|
118
|
-
minDate: minDate,
|
|
119
|
-
maxDate: maxDate,
|
|
120
|
-
violations: violations,
|
|
121
|
-
previousDate: isValidDateInstance(prevDate) ? prevDate : undefined
|
|
122
|
-
});
|
|
123
|
-
return true; // onValidationError가 있으면 날짜 변경 안 함
|
|
124
|
-
}
|
|
125
|
-
return false;
|
|
126
|
-
};
|
|
127
|
-
var onChangeDateHandler = function (dateTimeStamp, dateStr, instance) {
|
|
128
|
-
if (!dateTimeStamp || dateTimeStamp.length === 0) {
|
|
129
|
-
restorePreviousDate(instance.input, instance);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
var selectedDate = dateTimeStamp[0];
|
|
133
|
-
if (!isValidDateInstance(selectedDate)) {
|
|
134
|
-
// 유효하지 않은 날짜 - 이전 값으로 복원하거나 빈 값으로 처리
|
|
135
|
-
handleInvalidSelectedDate(instance);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
if (handleDateViolations(selectedDate, instance)) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
// 유효한 날짜인 경우 이전 날짜로 저장
|
|
142
|
-
instance._previousDateBeforeInput = selectedDate;
|
|
143
|
-
var formattedDate = (0, _datePicker.formatDateInput)(dateStr);
|
|
144
|
-
isValidDate(formattedDate) ? onChangeDate(formattedDate) : onChangeDate(dateStr);
|
|
145
|
-
};
|
|
146
|
-
var restorePreviousDate = function (target, instance) {
|
|
276
|
+
// ──────────────────────────────────────────────
|
|
277
|
+
// 이벤트 핸들러
|
|
278
|
+
// ──────────────────────────────────────────────
|
|
279
|
+
/** 유효하지 않은 입력 시 이전 날짜로 복원 */
|
|
280
|
+
const restorePreviousDate = (target, instance) => {
|
|
147
281
|
if (instance.selectedDates.length > 0) {
|
|
148
|
-
|
|
282
|
+
const prevDate = instance.selectedDates[0];
|
|
149
283
|
if (prevDate instanceof Date && !isNaN(prevDate.getTime())) {
|
|
150
|
-
|
|
284
|
+
const momentFormat = dateFormatRef.current.replace(/Y/g, 'YYYY').replace(/m/g, 'MM').replace(/d/g, 'DD');
|
|
151
285
|
target.value = (0, _moment.default)(prevDate).format(momentFormat);
|
|
152
286
|
instance.setDate(prevDate, false);
|
|
153
287
|
return;
|
|
@@ -156,214 +290,240 @@ var DatePicker = exports.DatePicker = /*#__PURE__*/(0, _react.forwardRef)(functi
|
|
|
156
290
|
target.value = '';
|
|
157
291
|
instance.setDate('', false);
|
|
158
292
|
};
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
instance
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
var validateFormattedDate = function (formattedInput, target, instance) {
|
|
166
|
-
var parsedDate = (0, _moment.default)(formattedInput);
|
|
167
|
-
if (!parsedDate.isValid()) {
|
|
168
|
-
restorePreviousDate(target, instance);
|
|
169
|
-
return false;
|
|
293
|
+
/** flatpickr에서 날짜가 변경되었을 때 호출 */
|
|
294
|
+
const onChangeDateHandler = (0, _react.useCallback)((dateTimeStamp, dateStr, fpInstance) => {
|
|
295
|
+
const instance = fpInstance;
|
|
296
|
+
if (!dateTimeStamp || dateTimeStamp.length === 0) {
|
|
297
|
+
restorePreviousDate(instance.input, instance);
|
|
298
|
+
return;
|
|
170
299
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
300
|
+
if (restoreIfInvalidDate(dateTimeStamp[0], instance)) return;
|
|
301
|
+
const selectedDate = dateTimeStamp[0];
|
|
302
|
+
const minDate = instance.config.minDate;
|
|
303
|
+
const maxDate = instance.config.maxDate;
|
|
304
|
+
const violations = checkDateViolations(selectedDate, minDate, maxDate);
|
|
305
|
+
if (violations.length > 0 && onValidationErrorRef.current) {
|
|
306
|
+
const prevDate = instance?.selectedDates?.[0];
|
|
307
|
+
const validPrevDate = prevDate instanceof Date && !isNaN(prevDate.getTime()) ? prevDate : undefined;
|
|
308
|
+
onValidationErrorRef.current({
|
|
309
|
+
date: selectedDate,
|
|
310
|
+
minDate,
|
|
311
|
+
maxDate,
|
|
312
|
+
violations,
|
|
313
|
+
previousDate: validPrevDate
|
|
314
|
+
});
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
instance._previousDateBeforeInput = selectedDate;
|
|
318
|
+
const formattedDate = (0, _datePicker.formatDateInput)(dateStr);
|
|
319
|
+
isValidDate(formattedDate) ? onChangeDateRef.current(formattedDate) : onChangeDateRef.current(dateStr);
|
|
320
|
+
}, []);
|
|
321
|
+
/** input에 직접 타이핑할 때 날짜 형식 자동 변환 및 유효성 검사 */
|
|
322
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
323
|
+
const onInputHandler = (0, _react.useCallback)(e => {
|
|
324
|
+
const target = e.target;
|
|
325
|
+
const input = target.value;
|
|
326
|
+
const instance = flatpickrInstanceRef.current;
|
|
181
327
|
if (!instance) return;
|
|
182
|
-
if (!input
|
|
183
|
-
|
|
328
|
+
if (!input?.trim()) {
|
|
329
|
+
target.value = '';
|
|
330
|
+
instance.setDate('', false);
|
|
331
|
+
onChangeDateRef.current('');
|
|
184
332
|
return;
|
|
185
333
|
}
|
|
186
|
-
// 숫자가 최소 하나는 포함되어야 함 (하이픈만 있는 경우 방지)
|
|
187
334
|
if (!/[0-9]/.test(input)) {
|
|
188
335
|
restorePreviousDate(target, instance);
|
|
189
336
|
return;
|
|
190
337
|
}
|
|
191
|
-
|
|
338
|
+
const formattedInput = (0, _datePicker.formatDateInput)(input);
|
|
192
339
|
if (formattedInput !== input) {
|
|
193
340
|
target.value = formattedInput;
|
|
194
341
|
return;
|
|
195
342
|
}
|
|
196
|
-
if (formattedInput
|
|
343
|
+
if (!formattedInput || formattedInput.length < 10) return;
|
|
344
|
+
const parsedDate = (0, _moment.default)(formattedInput);
|
|
345
|
+
if (!parsedDate.isValid()) {
|
|
346
|
+
restorePreviousDate(target, instance);
|
|
197
347
|
return;
|
|
198
348
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
349
|
+
const parsedDateObj = parsedDate.toDate();
|
|
350
|
+
const violations = checkDateViolations(parsedDateObj, minMaxDateRef.current.minDate, minMaxDateRef.current.maxDate);
|
|
351
|
+
if (violations.length > 0) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
}, []);
|
|
355
|
+
/** 시간 입력 필드 - 시(hour) 값 포맷팅 (0~23) */
|
|
356
|
+
const onHourInputHandler = (0, _react.useCallback)(e => {
|
|
357
|
+
const target = e.target;
|
|
358
|
+
const input = target.value;
|
|
359
|
+
const formattedInput = (0, _datePicker.formatHourInput)(input);
|
|
204
360
|
if (formattedInput === input) return;
|
|
205
361
|
target.value = formattedInput;
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
362
|
+
}, []);
|
|
363
|
+
/** 시간 입력 필드 - 분(minute) 값 포맷팅 (0~59) */
|
|
364
|
+
const onMinuteInputHandler = (0, _react.useCallback)(e => {
|
|
365
|
+
const target = e.target;
|
|
366
|
+
const input = target.value;
|
|
367
|
+
const formattedInput = (0, _datePicker.formatMinuteInput)(input);
|
|
211
368
|
if (formattedInput === input) return;
|
|
212
369
|
target.value = formattedInput;
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
|
|
370
|
+
}, []);
|
|
371
|
+
const inputId = (0, _react.useId)();
|
|
372
|
+
// ──────────────────────────────────────────────
|
|
373
|
+
// flatpickr 옵션
|
|
374
|
+
// ──────────────────────────────────────────────
|
|
375
|
+
// datePickerOptions는 부모에서 매 렌더 새 객체일 수 있으므로 값 기반 비교
|
|
376
|
+
// 주의: JSON.stringify는 함수를 무시하고 Date를 문자열로 변환하므로,
|
|
377
|
+
// datePickerOptions에 함수나 Date 객체를 넘기면 변경 감지가 누락될 수 있음
|
|
378
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
379
|
+
const datePickerOptionsKey = JSON.stringify(datePickerOptions);
|
|
380
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
381
|
+
const options = (0, _react.useMemo)(() => ({
|
|
216
382
|
mode: 'single',
|
|
217
|
-
static:
|
|
383
|
+
static: !portal,
|
|
384
|
+
...(portal && {
|
|
385
|
+
appendTo: getPortalContainer()
|
|
386
|
+
}),
|
|
218
387
|
locale: _ko.Korean,
|
|
219
388
|
dateFormat: 'Y-m-d',
|
|
220
389
|
clickOpens: true,
|
|
221
390
|
time_24hr: true,
|
|
222
|
-
|
|
391
|
+
/** flatpickr 기본 포맷 대신 moment를 사용하여 한국어 날짜 형식 지원 */
|
|
392
|
+
formatDate: (date, format, _locale) => {
|
|
223
393
|
try {
|
|
224
|
-
// 유효한 날짜인지 확인
|
|
225
394
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) {
|
|
226
395
|
return '';
|
|
227
396
|
}
|
|
228
|
-
|
|
229
|
-
var momentDate = (0, _moment.default)(date);
|
|
397
|
+
const momentDate = (0, _moment.default)(date);
|
|
230
398
|
if (!momentDate.isValid()) {
|
|
231
399
|
return '';
|
|
232
400
|
}
|
|
233
|
-
|
|
234
|
-
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');
|
|
401
|
+
const 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');
|
|
235
402
|
return momentDate.format(momentFormat);
|
|
236
|
-
} catch (
|
|
237
|
-
// 오류 발생 시 빈 문자열 반환 (232-23 같은 잘못된 날짜 처리)
|
|
403
|
+
} catch (_error) {
|
|
238
404
|
return '';
|
|
239
405
|
}
|
|
240
406
|
},
|
|
241
407
|
onChange: onChangeDateHandler,
|
|
242
408
|
allowInvalidPreload: true,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
409
|
+
// ──────────────────────────────────────────────
|
|
410
|
+
// onReady: flatpickr 인스턴스 초기화 후 실행
|
|
411
|
+
// ──────────────────────────────────────────────
|
|
412
|
+
onReady: (_selectedDates, _dateStr, fpInstance) => {
|
|
413
|
+
const instance = fpInstance;
|
|
414
|
+
const input = instance.input;
|
|
246
415
|
if (!input) return;
|
|
247
416
|
flatpickrInstanceRef.current = instance;
|
|
248
|
-
dateFormatRef.current =
|
|
417
|
+
dateFormatRef.current = instance.config.dateFormat || 'Y-m-d';
|
|
249
418
|
minMaxDateRef.current = {
|
|
250
|
-
minDate:
|
|
251
|
-
maxDate:
|
|
419
|
+
minDate: instance.config.minDate,
|
|
420
|
+
maxDate: instance.config.maxDate
|
|
252
421
|
};
|
|
253
|
-
// blur
|
|
254
|
-
|
|
422
|
+
// blur 시 현재 날짜를 저장하여 잘못된 입력 시 복원에 사용
|
|
423
|
+
const onBlurHandler = _e => {
|
|
255
424
|
if (instance && instance.selectedDates.length > 0) {
|
|
256
|
-
// 이전 날짜를 별도로 저장 (onChange에서 사용)
|
|
257
425
|
instance._previousDateBeforeInput = instance.selectedDates[0];
|
|
258
426
|
}
|
|
259
427
|
};
|
|
260
428
|
input.addEventListener('input', onInputHandler);
|
|
261
429
|
input.addEventListener('blur', onBlurHandler);
|
|
262
|
-
// 초기 날짜가 있으면 저장
|
|
263
430
|
if (instance.selectedDates.length > 0) {
|
|
264
431
|
instance._previousDateBeforeInput = instance.selectedDates[0];
|
|
265
432
|
}
|
|
266
|
-
var timeInputWrapper = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-time');
|
|
267
|
-
if (!timeInputWrapper) return;
|
|
268
|
-
var hourInput = timeInputWrapper.querySelector('.flatpickr-hour');
|
|
269
|
-
var minuteInput = timeInputWrapper.querySelector('.flatpickr-minute');
|
|
270
|
-
if (!hourInput || !minuteInput) return;
|
|
271
|
-
hourInput.addEventListener('input', onHourInputHandler);
|
|
272
|
-
minuteInput.addEventListener('input', onMinuteInputHandler);
|
|
273
|
-
var handleMouseDown = function (e) {
|
|
274
|
-
var _a;
|
|
275
|
-
var flatpickrCalendar = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.querySelector('.flatpickr-calendar.open');
|
|
276
|
-
if (flatpickrCalendar && !flatpickrCalendar.contains(e.target)) {
|
|
277
|
-
var timeInputs = flatpickrCalendar.querySelectorAll('.flatpickr-time input');
|
|
278
|
-
timeInputs.forEach(function (timeInput) {
|
|
279
|
-
if (document.activeElement === timeInput) {
|
|
280
|
-
timeInput.blur();
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
};
|
|
285
|
-
document.addEventListener('mousedown', handleMouseDown, true);
|
|
286
|
-
instance._handleMouseDown = handleMouseDown;
|
|
287
433
|
instance._onBlurHandler = onBlurHandler;
|
|
434
|
+
// 캘린더 위치 조정 및 스크롤/리사이즈 이벤트 연결
|
|
435
|
+
if (portal) {
|
|
436
|
+
setupPortalPositioning(instance, input);
|
|
437
|
+
} else {
|
|
438
|
+
setupStaticPositioning(instance, input);
|
|
439
|
+
}
|
|
440
|
+
// 시간 입력 필드 이벤트 설정
|
|
441
|
+
setupTimeInputHandlers(instance, input, portal, onHourInputHandler, onMinuteInputHandler);
|
|
288
442
|
},
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
443
|
+
// ──────────────────────────────────────────────
|
|
444
|
+
// onDestroy: flatpickr 인스턴스 파괴 시 이벤트 리스너 정리
|
|
445
|
+
// ──────────────────────────────────────────────
|
|
446
|
+
onDestroy: (_selectedDates, _dateStr, fpInstance) => {
|
|
447
|
+
const instance = fpInstance;
|
|
448
|
+
const input = instance.input;
|
|
292
449
|
if (!input) return;
|
|
293
450
|
flatpickrInstanceRef.current = null;
|
|
294
|
-
// 메인 input 이벤트 리스너 제거
|
|
295
451
|
input.removeEventListener('input', onInputHandler);
|
|
296
|
-
|
|
297
|
-
var onBlurHandler = instance === null || instance === void 0 ? void 0 : instance._onBlurHandler;
|
|
452
|
+
const onBlurHandler = instance._onBlurHandler;
|
|
298
453
|
if (onBlurHandler) {
|
|
299
454
|
input.removeEventListener('blur', onBlurHandler);
|
|
300
455
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
var hasTimeOption = datePickerOptions ? Object.hasOwn(datePickerOptions, 'enableTime') : false;
|
|
320
|
-
var iconName = hasTimeOption && datePickerOptions && Object.hasOwn(datePickerOptions, 'noCalendar') ? 'clock' : 'calendar';
|
|
321
|
-
var processedCurrentDate = (0, _react.useMemo)(function () {
|
|
322
|
-
return processDate(currentDate, isEndDate, options.enableTime, options.noCalendar, options.enableSeconds);
|
|
456
|
+
cleanupTimeInputHandlers(instance, input, portal, onHourInputHandler, onMinuteInputHandler);
|
|
457
|
+
cleanupPositioning(instance);
|
|
458
|
+
},
|
|
459
|
+
...datePickerOptions
|
|
460
|
+
}), [portal, size, hasTimeOption, datePickerOptionsKey, onChangeDateHandler, onInputHandler, onHourInputHandler, onMinuteInputHandler]);
|
|
461
|
+
const iconName = hasTimeOption && datePickerOptions && Object.hasOwn(datePickerOptions, 'noCalendar') ? 'clock' : 'calendar';
|
|
462
|
+
// ──────────────────────────────────────────────
|
|
463
|
+
// 시간 옵션에 따른 currentDate 전처리
|
|
464
|
+
// enableTime일 때 시간이 없으면 기본값(00:00 또는 23:59) 부여
|
|
465
|
+
// ──────────────────────────────────────────────
|
|
466
|
+
const processedCurrentDate = (0, _react.useMemo)(() => {
|
|
467
|
+
const hasTime = options.enableTime;
|
|
468
|
+
const isTimeOnly = options.noCalendar;
|
|
469
|
+
const hasSeconds = options.enableSeconds;
|
|
470
|
+
if (!hasTime && !isTimeOnly) return currentDate;
|
|
471
|
+
if (currentDate?.includes(':')) return currentDate;
|
|
472
|
+
if (isTimeOnly) return getTimeOnlyDefault(hasSeconds, isEndDate);
|
|
473
|
+
return getDateTimeDefault(currentDate, hasSeconds, isEndDate);
|
|
323
474
|
}, [currentDate, isEndDate, options.enableSeconds, options.enableTime, options.noCalendar]);
|
|
324
|
-
|
|
325
|
-
|
|
475
|
+
// ──────────────────────────────────────────────
|
|
476
|
+
// 렌더링
|
|
477
|
+
// ──────────────────────────────────────────────
|
|
478
|
+
const flatpickrElement = (0, _jsxRuntime.jsx)(_reactFlatpickr.default, {
|
|
479
|
+
...attrs,
|
|
480
|
+
ref: ref || undefined,
|
|
481
|
+
className: (0, _classnames.default)('ncua-date-picker__input'),
|
|
482
|
+
options: options,
|
|
483
|
+
value: processedCurrentDate,
|
|
484
|
+
render: (_ref2, ref) => {
|
|
485
|
+
let {
|
|
486
|
+
defaultValue,
|
|
487
|
+
value,
|
|
488
|
+
...props
|
|
489
|
+
} = _ref2;
|
|
490
|
+
// flatpickr 전용 옵션이 input DOM에 전달되지 않도록 제거
|
|
491
|
+
const {
|
|
492
|
+
allowInput: _allowInput,
|
|
493
|
+
dateFormat: _dateFormat,
|
|
494
|
+
minDate: _minDate,
|
|
495
|
+
maxDate: _maxDate,
|
|
496
|
+
enableTime: _enableTime,
|
|
497
|
+
enableSeconds: _enableSeconds,
|
|
498
|
+
noCalendar: _noCalendar,
|
|
499
|
+
render: _render,
|
|
500
|
+
...inputProps
|
|
501
|
+
// biome-ignore lint/suspicious/noExplicitAny: react-flatpickr render 콜백의 props 타입이 불완전하여 정확한 타이핑 불가
|
|
502
|
+
} = props;
|
|
503
|
+
return (0, _jsxRuntime.jsx)(_CustomInput.CustomInput, {
|
|
504
|
+
...inputProps,
|
|
505
|
+
id: inputId,
|
|
506
|
+
iconSize: size,
|
|
507
|
+
disabled: !!attrs.disabled,
|
|
508
|
+
defaultValue: defaultValue,
|
|
509
|
+
iconName: iconName,
|
|
510
|
+
ref: ref,
|
|
511
|
+
onInput: onInputHandler,
|
|
512
|
+
placeholder: attrs.placeholder
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
return (0, _jsxRuntime.jsxs)("div", {
|
|
517
|
+
className: (0, _classnames.default)('ncua-date-picker', `ncua-date-picker--${size}`, {
|
|
518
|
+
'ncua-date-picker--portal': portal,
|
|
326
519
|
'ncua-date-picker--disabled': attrs.disabled,
|
|
327
520
|
'ncua-date-picker--has-time': hasTimeOption,
|
|
328
521
|
'ncua-date-picker--destructive': attrs.destructive
|
|
329
|
-
}, className)
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
ref: ref || undefined,
|
|
333
|
-
className: (0, _classnames.default)('ncua-date-picker__input'),
|
|
334
|
-
options: options,
|
|
335
|
-
value: processedCurrentDate,
|
|
336
|
-
render: function (_a, ref) {
|
|
337
|
-
var defaultValue = _a.defaultValue,
|
|
338
|
-
_value = _a.value,
|
|
339
|
-
props = __rest(_a, ["defaultValue", "value"]);
|
|
340
|
-
// input에 반영 되면 안되는 attribute 제외
|
|
341
|
-
var _b = props,
|
|
342
|
-
allowInput = _b.allowInput,
|
|
343
|
-
dateFormat = _b.dateFormat,
|
|
344
|
-
minDate = _b.minDate,
|
|
345
|
-
maxDate = _b.maxDate,
|
|
346
|
-
enableTime = _b.enableTime,
|
|
347
|
-
enableSeconds = _b.enableSeconds,
|
|
348
|
-
noCalendar = _b.noCalendar,
|
|
349
|
-
render = _b.render,
|
|
350
|
-
inputProps = __rest(_b, ["allowInput", "dateFormat", "minDate", "maxDate", "enableTime", "enableSeconds", "noCalendar", "render"]);
|
|
351
|
-
return (0, _jsxRuntime.jsx)(_CustomInput.CustomInput, __assign({}, inputProps, {
|
|
352
|
-
id: inputId,
|
|
353
|
-
iconSize: size,
|
|
354
|
-
disabled: !!attrs.disabled,
|
|
355
|
-
defaultValue: defaultValue,
|
|
356
|
-
iconName: iconName,
|
|
357
|
-
ref: ref,
|
|
358
|
-
onInput: onInputHandler,
|
|
359
|
-
placeholder: attrs.placeholder
|
|
360
|
-
}));
|
|
361
|
-
}
|
|
362
|
-
})), attrs.destructive && (0, _jsxRuntime.jsx)("p", __assign({
|
|
363
|
-
className: "ncua-date-picker__destructive"
|
|
364
|
-
}, {
|
|
522
|
+
}, className),
|
|
523
|
+
children: [flatpickrElement, attrs.destructive && (0, _jsxRuntime.jsx)("p", {
|
|
524
|
+
className: "ncua-date-picker__destructive",
|
|
365
525
|
children: attrs.destructive
|
|
366
|
-
})
|
|
367
|
-
})
|
|
526
|
+
})]
|
|
527
|
+
});
|
|
368
528
|
});
|
|
369
529
|
DatePicker.displayName = 'DatePicker';
|