@coreui/react-pro 5.9.2 → 5.11.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/README.md +1 -1
- package/dist/cjs/components/accordion/CAccordion.js +1 -1
- package/dist/cjs/components/accordion/CAccordionBody.js +1 -1
- package/dist/cjs/components/accordion/CAccordionButton.js +3 -3
- package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/cjs/components/accordion/CAccordionHeader.js +1 -1
- package/dist/cjs/components/accordion/CAccordionItem.d.ts +1 -0
- package/dist/cjs/components/accordion/CAccordionItem.js +7 -4
- package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/cjs/components/alert/CAlert.js +1 -1
- package/dist/cjs/components/alert/CAlertHeading.js +1 -1
- package/dist/cjs/components/alert/CAlertLink.js +1 -1
- package/dist/cjs/components/avatar/CAvatar.js +1 -1
- package/dist/cjs/components/backdrop/CBackdrop.js +1 -1
- package/dist/cjs/components/badge/CBadge.js +2 -2
- package/dist/cjs/components/badge/CBadge.js.map +1 -1
- package/dist/cjs/components/breadcrumb/CBreadcrumb.js +1 -1
- package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js +1 -1
- package/dist/cjs/components/button/CButton.js +1 -1
- package/dist/cjs/components/button-group/CButtonGroup.js +1 -1
- package/dist/cjs/components/button-group/CButtonToolbar.js +1 -1
- package/dist/cjs/components/calendar/CCalendar.d.ts +58 -44
- package/dist/cjs/components/calendar/CCalendar.js +52 -188
- package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
- package/dist/cjs/components/calendar/CCalendarNavigation.d.ts +21 -0
- package/dist/cjs/components/calendar/CCalendarNavigation.js +23 -0
- package/dist/cjs/components/calendar/CCalendarNavigation.js.map +1 -0
- package/dist/cjs/components/calendar/CCalendarPanel.d.ts +28 -0
- package/dist/cjs/components/calendar/CCalendarPanel.js +149 -0
- package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -0
- package/dist/cjs/components/calendar/types.d.ts +3 -0
- package/dist/cjs/components/calendar/utils.d.ts +176 -18
- package/dist/cjs/components/calendar/utils.js +330 -52
- package/dist/cjs/components/calendar/utils.js.map +1 -1
- package/dist/cjs/components/callout/CCallout.js +1 -1
- package/dist/cjs/components/card/CCard.js +1 -1
- package/dist/cjs/components/card/CCardBody.js +1 -1
- package/dist/cjs/components/card/CCardFooter.js +1 -1
- package/dist/cjs/components/card/CCardGroup.js +1 -1
- package/dist/cjs/components/card/CCardHeader.js +1 -1
- package/dist/cjs/components/card/CCardImage.js +1 -1
- package/dist/cjs/components/card/CCardImageOverlay.js +1 -1
- package/dist/cjs/components/card/CCardLink.js +1 -1
- package/dist/cjs/components/card/CCardSubtitle.js +1 -1
- package/dist/cjs/components/card/CCardText.js +1 -1
- package/dist/cjs/components/card/CCardTitle.js +1 -1
- package/dist/cjs/components/carousel/CCarousel.js +1 -1
- package/dist/cjs/components/carousel/CCarouselCaption.js +1 -1
- package/dist/cjs/components/carousel/CCarouselItem.js +1 -1
- package/dist/cjs/components/close-button/CCloseButton.js +1 -1
- package/dist/cjs/components/collapse/CCollapse.js +1 -1
- package/dist/cjs/components/date-picker/CDatePicker.d.ts +1 -1
- package/dist/cjs/components/date-picker/CDatePicker.js +1 -1
- package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +2 -2
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js +1 -3
- package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/cjs/components/date-range-picker/utils.d.ts +16 -0
- package/dist/cjs/components/date-range-picker/utils.js +18 -2
- package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
- package/dist/cjs/components/dropdown/CDropdown.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownDivider.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownHeader.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownItem.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownItemPlain.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownMenu.js +1 -1
- package/dist/cjs/components/dropdown/CDropdownToggle.js +2 -2
- package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/cjs/components/element-cover/CElementCover.js +1 -1
- package/dist/cjs/components/footer/CFooter.js +1 -1
- package/dist/cjs/components/form/CForm.js +1 -1
- package/dist/cjs/components/form/CFormCheck.js +1 -1
- package/dist/cjs/components/form/CFormControlValidation.js +1 -1
- package/dist/cjs/components/form/CFormControlWrapper.js +1 -1
- package/dist/cjs/components/form/CFormFeedback.js +1 -1
- package/dist/cjs/components/form/CFormFloating.js +1 -1
- package/dist/cjs/components/form/CFormInput.js +1 -1
- package/dist/cjs/components/form/CFormLabel.js +1 -1
- package/dist/cjs/components/form/CFormRange.js +1 -1
- package/dist/cjs/components/form/CFormSelect.js +1 -1
- package/dist/cjs/components/form/CFormSwitch.js +1 -1
- package/dist/cjs/components/form/CFormText.js +1 -1
- package/dist/cjs/components/form/CFormTextarea.js +1 -1
- package/dist/cjs/components/form/CInputGroup.js +1 -1
- package/dist/cjs/components/form/CInputGroupText.js +1 -1
- package/dist/cjs/components/grid/CCol.js +1 -1
- package/dist/cjs/components/grid/CContainer.js +1 -1
- package/dist/cjs/components/grid/CRow.js +1 -1
- package/dist/cjs/components/header/CHeader.js +1 -1
- package/dist/cjs/components/header/CHeaderBrand.js +1 -1
- package/dist/cjs/components/header/CHeaderDivider.js +1 -1
- package/dist/cjs/components/header/CHeaderNav.js +1 -1
- package/dist/cjs/components/header/CHeaderText.js +1 -1
- package/dist/cjs/components/header/CHeaderToggler.js +1 -1
- package/dist/cjs/components/image/CImage.js +1 -1
- package/dist/cjs/components/link/CLink.js +1 -1
- package/dist/cjs/components/list-group/CListGroup.js +1 -1
- package/dist/cjs/components/list-group/CListGroupItem.js +1 -1
- package/dist/cjs/components/loading-button/CLoadingButton.js +1 -1
- package/dist/cjs/components/modal/CModal.js +1 -2
- package/dist/cjs/components/modal/CModal.js.map +1 -1
- package/dist/cjs/components/modal/CModalBody.js +1 -1
- package/dist/cjs/components/modal/CModalContent.js +1 -1
- package/dist/cjs/components/modal/CModalDialog.js +1 -1
- package/dist/cjs/components/modal/CModalFooter.js +1 -1
- package/dist/cjs/components/modal/CModalHeader.js +1 -1
- package/dist/cjs/components/modal/CModalTitle.js +1 -1
- package/dist/cjs/components/multi-select/CMultiSelect.js +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js +1 -1
- package/dist/cjs/components/multi-select/CMultiSelectOptions.js +1 -1
- package/dist/cjs/components/multi-select/utils.js +1 -1
- package/dist/cjs/components/nav/CNav.js +1 -1
- package/dist/cjs/components/nav/CNavGroup.js +2 -2
- package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
- package/dist/cjs/components/nav/CNavGroupItems.js +1 -1
- package/dist/cjs/components/nav/CNavItem.js +1 -1
- package/dist/cjs/components/nav/CNavLink.js +1 -1
- package/dist/cjs/components/nav/CNavTitle.js +1 -1
- package/dist/cjs/components/navbar/CNavbar.js +1 -1
- package/dist/cjs/components/navbar/CNavbarBrand.js +1 -1
- package/dist/cjs/components/navbar/CNavbarNav.js +1 -1
- package/dist/cjs/components/navbar/CNavbarText.js +1 -1
- package/dist/cjs/components/navbar/CNavbarToggler.js +1 -1
- package/dist/cjs/components/offcanvas/COffcanvas.js +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasBody.js +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasHeader.js +1 -1
- package/dist/cjs/components/offcanvas/COffcanvasTitle.js +1 -1
- package/dist/cjs/components/pagination/CPagination.js +1 -1
- package/dist/cjs/components/pagination/CPaginationItem.js +1 -1
- package/dist/cjs/components/picker/CPicker.js +1 -1
- package/dist/cjs/components/placeholder/CPlaceholder.js +1 -1
- package/dist/cjs/components/popover/CPopover.js +1 -1
- package/dist/cjs/components/progress/CProgress.d.ts +1 -1
- package/dist/cjs/components/progress/CProgress.js +1 -1
- package/dist/cjs/components/progress/CProgressBar.js +1 -1
- package/dist/cjs/components/progress/CProgressStacked.js +1 -1
- package/dist/cjs/components/range-slider/CRangeSlider.js +7 -3
- package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/cjs/components/range-slider/utils.js +1 -1
- package/dist/cjs/components/rating/CRating.js +1 -1
- package/dist/cjs/components/sidebar/CSidebar.d.ts +7 -2
- package/dist/cjs/components/sidebar/CSidebar.js +8 -7
- package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
- package/dist/cjs/components/sidebar/CSidebarBrand.js +1 -1
- package/dist/cjs/components/sidebar/CSidebarFooter.js +1 -1
- package/dist/cjs/components/sidebar/CSidebarHeader.js +1 -1
- package/dist/cjs/components/sidebar/CSidebarNav.js +1 -1
- package/dist/cjs/components/sidebar/CSidebarToggler.js +1 -1
- package/dist/cjs/components/smart-pagination/CSmartPagination.d.ts +4 -12
- package/dist/cjs/components/smart-pagination/CSmartPagination.js +1 -1
- package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
- package/dist/cjs/components/smart-table/CSmartTable.js +1 -1
- package/dist/cjs/components/smart-table/CSmartTableBody.js +1 -1
- package/dist/cjs/components/smart-table/CSmartTableHead.js +11 -26
- package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/cjs/components/smart-table/utils.js +1 -1
- package/dist/cjs/components/spinner/CSpinner.js +1 -1
- package/dist/cjs/components/table/CTable.js +1 -1
- package/dist/cjs/components/table/CTableBody.js +1 -1
- package/dist/cjs/components/table/CTableCaption.js +1 -1
- package/dist/cjs/components/table/CTableDataCell.js +1 -1
- package/dist/cjs/components/table/CTableFoot.js +1 -1
- package/dist/cjs/components/table/CTableHead.js +1 -1
- package/dist/cjs/components/table/CTableHeaderCell.js +1 -1
- package/dist/cjs/components/table/CTableResponsiveWrapper.js +1 -1
- package/dist/cjs/components/table/CTableRow.js +1 -1
- package/dist/cjs/components/tabs/CTab.js +1 -1
- package/dist/cjs/components/tabs/CTabContent.js +1 -1
- package/dist/cjs/components/tabs/CTabList.js +1 -1
- package/dist/cjs/components/tabs/CTabPane.js +1 -1
- package/dist/cjs/components/tabs/CTabPanel.js +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.d.ts +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.js +1 -1
- package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/cjs/components/time-picker/CTimePickerRollCol.js +1 -1
- package/dist/cjs/components/time-picker/types.d.ts +5 -0
- package/dist/cjs/components/time-picker/utils.d.ts +8 -11
- package/dist/cjs/components/time-picker/utils.js +8 -4
- package/dist/cjs/components/time-picker/utils.js.map +1 -1
- package/dist/cjs/components/toast/CToast.js +1 -1
- package/dist/cjs/components/toast/CToastBody.js +1 -1
- package/dist/cjs/components/toast/CToastClose.js +1 -1
- package/dist/cjs/components/toast/CToastHeader.js +1 -1
- package/dist/cjs/components/toast/CToaster.js +1 -1
- package/dist/cjs/components/tooltip/CTooltip.js +1 -1
- package/dist/cjs/components/virtual-scroller/CVirtualScroller.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsA.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsB.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsC.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsD.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsE.js +1 -1
- package/dist/cjs/components/widgets/CWidgetStatsF.js +1 -1
- package/dist/cjs/hooks/index.d.ts +2 -1
- package/dist/cjs/hooks/useClipboard.d.ts +12 -0
- package/dist/cjs/hooks/useClipboard.js +54 -0
- package/dist/cjs/hooks/useClipboard.js.map +1 -0
- package/dist/cjs/hooks/useColorModes.js +5 -5
- package/dist/cjs/hooks/useColorModes.js.map +1 -1
- package/dist/cjs/hooks/useDropdownWithPopper.js +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/classnames/index.js.map +1 -1
- package/dist/cjs/node_modules/react-device-detect/dist/lib.js +1 -1
- package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
- package/dist/cjs/node_modules/tslib/tslib.es6.js +100 -0
- package/dist/cjs/{packages/coreui-react-pro/node_modules → node_modules}/tslib/tslib.es6.js.map +1 -1
- package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js +2 -2
- package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +2 -1
- package/dist/cjs/utils/mergeClassNames.d.ts +2 -0
- package/dist/esm/components/accordion/CAccordion.js +1 -1
- package/dist/esm/components/accordion/CAccordionBody.js +1 -1
- package/dist/esm/components/accordion/CAccordionButton.js +3 -3
- package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
- package/dist/esm/components/accordion/CAccordionHeader.js +1 -1
- package/dist/esm/components/accordion/CAccordionItem.d.ts +1 -0
- package/dist/esm/components/accordion/CAccordionItem.js +8 -5
- package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
- package/dist/esm/components/alert/CAlert.js +1 -1
- package/dist/esm/components/alert/CAlertHeading.js +1 -1
- package/dist/esm/components/alert/CAlertLink.js +1 -1
- package/dist/esm/components/avatar/CAvatar.js +1 -1
- package/dist/esm/components/backdrop/CBackdrop.js +1 -1
- package/dist/esm/components/badge/CBadge.js +2 -2
- package/dist/esm/components/badge/CBadge.js.map +1 -1
- package/dist/esm/components/breadcrumb/CBreadcrumb.js +1 -1
- package/dist/esm/components/breadcrumb/CBreadcrumbItem.js +1 -1
- package/dist/esm/components/button/CButton.js +1 -1
- package/dist/esm/components/button-group/CButtonGroup.js +1 -1
- package/dist/esm/components/button-group/CButtonToolbar.js +1 -1
- package/dist/esm/components/calendar/CCalendar.d.ts +58 -44
- package/dist/esm/components/calendar/CCalendar.js +53 -189
- package/dist/esm/components/calendar/CCalendar.js.map +1 -1
- package/dist/esm/components/calendar/CCalendarNavigation.d.ts +21 -0
- package/dist/esm/components/calendar/CCalendarNavigation.js +21 -0
- package/dist/esm/components/calendar/CCalendarNavigation.js.map +1 -0
- package/dist/esm/components/calendar/CCalendarPanel.d.ts +28 -0
- package/dist/esm/components/calendar/CCalendarPanel.js +147 -0
- package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -0
- package/dist/esm/components/calendar/types.d.ts +3 -0
- package/dist/esm/components/calendar/utils.d.ts +176 -18
- package/dist/esm/components/calendar/utils.js +324 -53
- package/dist/esm/components/calendar/utils.js.map +1 -1
- package/dist/esm/components/callout/CCallout.js +1 -1
- package/dist/esm/components/card/CCard.js +1 -1
- package/dist/esm/components/card/CCardBody.js +1 -1
- package/dist/esm/components/card/CCardFooter.js +1 -1
- package/dist/esm/components/card/CCardGroup.js +1 -1
- package/dist/esm/components/card/CCardHeader.js +1 -1
- package/dist/esm/components/card/CCardImage.js +1 -1
- package/dist/esm/components/card/CCardImageOverlay.js +1 -1
- package/dist/esm/components/card/CCardLink.js +1 -1
- package/dist/esm/components/card/CCardSubtitle.js +1 -1
- package/dist/esm/components/card/CCardText.js +1 -1
- package/dist/esm/components/card/CCardTitle.js +1 -1
- package/dist/esm/components/carousel/CCarousel.js +1 -1
- package/dist/esm/components/carousel/CCarouselCaption.js +1 -1
- package/dist/esm/components/carousel/CCarouselItem.js +1 -1
- package/dist/esm/components/close-button/CCloseButton.js +1 -1
- package/dist/esm/components/collapse/CCollapse.js +1 -1
- package/dist/esm/components/date-picker/CDatePicker.d.ts +1 -1
- package/dist/esm/components/date-picker/CDatePicker.js +1 -1
- package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +2 -2
- package/dist/esm/components/date-range-picker/CDateRangePicker.js +1 -3
- package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
- package/dist/esm/components/date-range-picker/utils.d.ts +16 -0
- package/dist/esm/components/date-range-picker/utils.js +18 -2
- package/dist/esm/components/date-range-picker/utils.js.map +1 -1
- package/dist/esm/components/dropdown/CDropdown.js +1 -1
- package/dist/esm/components/dropdown/CDropdownDivider.js +1 -1
- package/dist/esm/components/dropdown/CDropdownHeader.js +1 -1
- package/dist/esm/components/dropdown/CDropdownItem.js +1 -1
- package/dist/esm/components/dropdown/CDropdownItemPlain.js +1 -1
- package/dist/esm/components/dropdown/CDropdownMenu.js +1 -1
- package/dist/esm/components/dropdown/CDropdownToggle.js +2 -2
- package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
- package/dist/esm/components/element-cover/CElementCover.js +1 -1
- package/dist/esm/components/footer/CFooter.js +1 -1
- package/dist/esm/components/form/CForm.js +1 -1
- package/dist/esm/components/form/CFormCheck.js +1 -1
- package/dist/esm/components/form/CFormControlValidation.js +1 -1
- package/dist/esm/components/form/CFormControlWrapper.js +1 -1
- package/dist/esm/components/form/CFormFeedback.js +1 -1
- package/dist/esm/components/form/CFormFloating.js +1 -1
- package/dist/esm/components/form/CFormInput.js +1 -1
- package/dist/esm/components/form/CFormLabel.js +1 -1
- package/dist/esm/components/form/CFormRange.js +1 -1
- package/dist/esm/components/form/CFormSelect.js +1 -1
- package/dist/esm/components/form/CFormSwitch.js +1 -1
- package/dist/esm/components/form/CFormText.js +1 -1
- package/dist/esm/components/form/CFormTextarea.js +1 -1
- package/dist/esm/components/form/CInputGroup.js +1 -1
- package/dist/esm/components/form/CInputGroupText.js +1 -1
- package/dist/esm/components/grid/CCol.js +1 -1
- package/dist/esm/components/grid/CContainer.js +1 -1
- package/dist/esm/components/grid/CRow.js +1 -1
- package/dist/esm/components/header/CHeader.js +1 -1
- package/dist/esm/components/header/CHeaderBrand.js +1 -1
- package/dist/esm/components/header/CHeaderDivider.js +1 -1
- package/dist/esm/components/header/CHeaderNav.js +1 -1
- package/dist/esm/components/header/CHeaderText.js +1 -1
- package/dist/esm/components/header/CHeaderToggler.js +1 -1
- package/dist/esm/components/image/CImage.js +1 -1
- package/dist/esm/components/link/CLink.js +1 -1
- package/dist/esm/components/list-group/CListGroup.js +1 -1
- package/dist/esm/components/list-group/CListGroupItem.js +1 -1
- package/dist/esm/components/loading-button/CLoadingButton.js +1 -1
- package/dist/esm/components/modal/CModal.js +1 -2
- package/dist/esm/components/modal/CModal.js.map +1 -1
- package/dist/esm/components/modal/CModalBody.js +1 -1
- package/dist/esm/components/modal/CModalContent.js +1 -1
- package/dist/esm/components/modal/CModalDialog.js +1 -1
- package/dist/esm/components/modal/CModalFooter.js +1 -1
- package/dist/esm/components/modal/CModalHeader.js +1 -1
- package/dist/esm/components/modal/CModalTitle.js +1 -1
- package/dist/esm/components/multi-select/CMultiSelect.js +1 -1
- package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js +1 -1
- package/dist/esm/components/multi-select/CMultiSelectOptions.js +1 -1
- package/dist/esm/components/multi-select/utils.js +1 -1
- package/dist/esm/components/nav/CNav.js +1 -1
- package/dist/esm/components/nav/CNavGroup.js +2 -2
- package/dist/esm/components/nav/CNavGroup.js.map +1 -1
- package/dist/esm/components/nav/CNavGroupItems.js +1 -1
- package/dist/esm/components/nav/CNavItem.js +1 -1
- package/dist/esm/components/nav/CNavLink.js +1 -1
- package/dist/esm/components/nav/CNavTitle.js +1 -1
- package/dist/esm/components/navbar/CNavbar.js +1 -1
- package/dist/esm/components/navbar/CNavbarBrand.js +1 -1
- package/dist/esm/components/navbar/CNavbarNav.js +1 -1
- package/dist/esm/components/navbar/CNavbarText.js +1 -1
- package/dist/esm/components/navbar/CNavbarToggler.js +1 -1
- package/dist/esm/components/offcanvas/COffcanvas.js +1 -1
- package/dist/esm/components/offcanvas/COffcanvasBody.js +1 -1
- package/dist/esm/components/offcanvas/COffcanvasHeader.js +1 -1
- package/dist/esm/components/offcanvas/COffcanvasTitle.js +1 -1
- package/dist/esm/components/pagination/CPagination.js +1 -1
- package/dist/esm/components/pagination/CPaginationItem.js +1 -1
- package/dist/esm/components/picker/CPicker.js +1 -1
- package/dist/esm/components/placeholder/CPlaceholder.js +1 -1
- package/dist/esm/components/popover/CPopover.js +1 -1
- package/dist/esm/components/progress/CProgress.d.ts +1 -1
- package/dist/esm/components/progress/CProgress.js +1 -1
- package/dist/esm/components/progress/CProgressBar.js +1 -1
- package/dist/esm/components/progress/CProgressStacked.js +1 -1
- package/dist/esm/components/range-slider/CRangeSlider.js +7 -3
- package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
- package/dist/esm/components/range-slider/utils.js +1 -1
- package/dist/esm/components/rating/CRating.js +1 -1
- package/dist/esm/components/sidebar/CSidebar.d.ts +7 -2
- package/dist/esm/components/sidebar/CSidebar.js +8 -7
- package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
- package/dist/esm/components/sidebar/CSidebarBrand.js +1 -1
- package/dist/esm/components/sidebar/CSidebarFooter.js +1 -1
- package/dist/esm/components/sidebar/CSidebarHeader.js +1 -1
- package/dist/esm/components/sidebar/CSidebarNav.js +1 -1
- package/dist/esm/components/sidebar/CSidebarToggler.js +1 -1
- package/dist/esm/components/smart-pagination/CSmartPagination.d.ts +4 -12
- package/dist/esm/components/smart-pagination/CSmartPagination.js +1 -1
- package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
- package/dist/esm/components/smart-table/CSmartTable.js +1 -1
- package/dist/esm/components/smart-table/CSmartTableBody.js +1 -1
- package/dist/esm/components/smart-table/CSmartTableHead.js +12 -27
- package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
- package/dist/esm/components/smart-table/utils.js +1 -1
- package/dist/esm/components/spinner/CSpinner.js +1 -1
- package/dist/esm/components/table/CTable.js +1 -1
- package/dist/esm/components/table/CTableBody.js +1 -1
- package/dist/esm/components/table/CTableCaption.js +1 -1
- package/dist/esm/components/table/CTableDataCell.js +1 -1
- package/dist/esm/components/table/CTableFoot.js +1 -1
- package/dist/esm/components/table/CTableHead.js +1 -1
- package/dist/esm/components/table/CTableHeaderCell.js +1 -1
- package/dist/esm/components/table/CTableResponsiveWrapper.js +1 -1
- package/dist/esm/components/table/CTableRow.js +1 -1
- package/dist/esm/components/tabs/CTab.js +1 -1
- package/dist/esm/components/tabs/CTabContent.js +1 -1
- package/dist/esm/components/tabs/CTabList.js +1 -1
- package/dist/esm/components/tabs/CTabPane.js +1 -1
- package/dist/esm/components/tabs/CTabPanel.js +1 -1
- package/dist/esm/components/time-picker/CTimePicker.d.ts +1 -1
- package/dist/esm/components/time-picker/CTimePicker.js +1 -1
- package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
- package/dist/esm/components/time-picker/CTimePickerRollCol.js +1 -1
- package/dist/esm/components/time-picker/types.d.ts +5 -0
- package/dist/esm/components/time-picker/utils.d.ts +8 -11
- package/dist/esm/components/time-picker/utils.js +8 -4
- package/dist/esm/components/time-picker/utils.js.map +1 -1
- package/dist/esm/components/toast/CToast.js +1 -1
- package/dist/esm/components/toast/CToastBody.js +1 -1
- package/dist/esm/components/toast/CToastClose.js +1 -1
- package/dist/esm/components/toast/CToastHeader.js +1 -1
- package/dist/esm/components/toast/CToaster.js +1 -1
- package/dist/esm/components/tooltip/CTooltip.js +1 -1
- package/dist/esm/components/virtual-scroller/CVirtualScroller.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsA.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsB.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsC.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsD.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsE.js +1 -1
- package/dist/esm/components/widgets/CWidgetStatsF.js +1 -1
- package/dist/esm/hooks/index.d.ts +2 -1
- package/dist/esm/hooks/useClipboard.d.ts +12 -0
- package/dist/esm/hooks/useClipboard.js +52 -0
- package/dist/esm/hooks/useClipboard.js.map +1 -0
- package/dist/esm/hooks/useColorModes.js +5 -5
- package/dist/esm/hooks/useColorModes.js.map +1 -1
- package/dist/esm/hooks/useDropdownWithPopper.js +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/classnames/index.js.map +1 -1
- package/dist/esm/node_modules/react-device-detect/dist/lib.js +1 -1
- package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +95 -0
- package/dist/esm/{packages/coreui-react-pro/node_modules → node_modules}/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js +2 -2
- package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
- package/dist/esm/utils/index.d.ts +2 -1
- package/dist/esm/utils/mergeClassNames.d.ts +2 -0
- package/package.json +13 -11
- package/src/components/accordion/CAccordionButton.tsx +3 -2
- package/src/components/accordion/CAccordionItem.tsx +8 -3
- package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap +0 -2
- package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.tsx.snap +0 -2
- package/src/components/badge/CBadge.tsx +1 -1
- package/src/components/calendar/CCalendar.tsx +156 -489
- package/src/components/calendar/CCalendarNavigation.tsx +120 -0
- package/src/components/calendar/CCalendarPanel.tsx +306 -0
- package/src/components/calendar/types.ts +5 -0
- package/src/components/calendar/utils.ts +428 -110
- package/src/components/carousel/__tests__/CCarousel.spec.tsx +1 -2
- package/src/components/date-picker/CDatePicker.tsx +1 -1
- package/src/components/date-range-picker/CDateRangePicker.tsx +2 -4
- package/src/components/date-range-picker/utils.ts +23 -3
- package/src/components/dropdown/CDropdownToggle.tsx +1 -1
- package/src/components/dropdown/__tests__/CDropdown.spec.tsx +43 -19
- package/src/components/modal/CModal.tsx +0 -2
- package/src/components/modal/__tests__/CModal.spec.tsx +33 -25
- package/src/components/nav/CNavGroup.tsx +5 -1
- package/src/components/nav/__tests__/__snapshots__/CNavGroup.spec.tsx.snap +4 -1
- package/src/components/popover/__tests__/CPopover.spec.tsx +1 -1
- package/src/components/popover/__tests__/__snapshots__/CPopover.spec.tsx.snap +2 -3
- package/src/components/progress/CProgress.tsx +1 -1
- package/src/components/range-slider/CRangeSlider.tsx +7 -2
- package/src/components/sidebar/CSidebar.tsx +15 -5
- package/src/components/smart-pagination/CSmartPagination.tsx +4 -12
- package/src/components/smart-table/CSmartTableHead.tsx +7 -34
- package/src/components/time-picker/CTimePicker.tsx +3 -3
- package/src/components/time-picker/types.ts +7 -0
- package/src/components/time-picker/utils.ts +15 -13
- package/src/components/tooltip/__tests__/__snapshots__/CTooltip.spec.tsx.snap +0 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useClipboard.ts +38 -0
- package/src/hooks/useColorModes.ts +5 -5
- package/src/utils/index.ts +2 -0
- package/src/utils/mergeClassNames.ts +25 -0
- package/dist/cjs/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js +0 -60
- package/dist/esm/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js +0 -57
|
@@ -1,593 +1,250 @@
|
|
|
1
|
-
import React, { forwardRef,
|
|
1
|
+
import React, { forwardRef, ReactNode, useEffect, useRef, useState } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import classNames from 'classnames'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { CCalendarNavigation } from './CCalendarNavigation'
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
convertToDateObject,
|
|
9
|
-
createGroupsInArray,
|
|
10
9
|
getCalendarDate,
|
|
11
10
|
getDateBySelectionType,
|
|
12
|
-
|
|
13
|
-
getMonthsNames,
|
|
14
|
-
getYears,
|
|
11
|
+
getSelectableDates,
|
|
15
12
|
isDateDisabled,
|
|
16
|
-
isDateInRange,
|
|
17
|
-
isDateSelected,
|
|
18
13
|
isDisableDateInRange,
|
|
19
14
|
isSameDateAs,
|
|
20
|
-
isToday,
|
|
21
15
|
} from './utils'
|
|
16
|
+
import type { DisabledDate, SelectionTypes, ViewTypes } from './types'
|
|
22
17
|
|
|
23
18
|
import { useForkedRef, useStateWithCallback } from '../../hooks'
|
|
19
|
+
import { CCalendarPanel } from './CCalendarPanel'
|
|
24
20
|
|
|
25
21
|
export interface CCalendarProps {
|
|
26
22
|
/**
|
|
27
|
-
* A string that provides an accessible label for the button that navigates to the next month in the
|
|
23
|
+
* A string that provides an accessible label for the button that navigates to the next month in the React Calendar component. This label is read by screen readers to describe the action associated with the button. Customize for a more accessible calendar experience.
|
|
28
24
|
*
|
|
25
|
+
* @default 'Next month'
|
|
29
26
|
* @since 5.5.0
|
|
30
27
|
*/
|
|
28
|
+
|
|
31
29
|
ariaNavNextMonthLabel?: string
|
|
30
|
+
|
|
32
31
|
/**
|
|
33
|
-
* A string that provides an accessible label for the button that navigates to the next year in the
|
|
32
|
+
* A string that provides an accessible label for the button that navigates to the next year in the React Calendar component. Screen readers utilize this label to inform users of the button's functionality, aiding in a more inclusive application.
|
|
34
33
|
*
|
|
34
|
+
* @default 'Next year'
|
|
35
35
|
* @since 5.5.0
|
|
36
36
|
*/
|
|
37
37
|
ariaNavNextYearLabel?: string
|
|
38
|
+
|
|
38
39
|
/**
|
|
39
|
-
* A string that provides an accessible label for the button that navigates to the previous month in the
|
|
40
|
+
* A string that provides an accessible label for the button that navigates to the previous month in the React Calendar component. This label is announced by screen readers, ensuring clarity around the button's purpose.
|
|
40
41
|
*
|
|
42
|
+
* @default 'Previous month'
|
|
41
43
|
* @since 5.5.0
|
|
42
44
|
*/
|
|
43
45
|
ariaNavPrevMonthLabel?: string
|
|
46
|
+
|
|
44
47
|
/**
|
|
45
|
-
* A string that provides an accessible label for the button that navigates to the previous year in the
|
|
48
|
+
* A string that provides an accessible label for the button that navigates to the previous year in the React Calendar component. Use it to enhance the experience for screen readers and further accessibility.
|
|
46
49
|
*
|
|
50
|
+
* @default 'Previous year'
|
|
47
51
|
* @since 5.5.0
|
|
48
52
|
*/
|
|
49
53
|
ariaNavPrevYearLabel?: string
|
|
54
|
+
|
|
50
55
|
/**
|
|
51
|
-
*
|
|
56
|
+
* Defines the initial date or reference date for the React Calendar component. This date can be either a Date object or a string that can be converted into a valid date.
|
|
52
57
|
*/
|
|
53
58
|
calendarDate?: Date | string | null
|
|
59
|
+
|
|
54
60
|
/**
|
|
55
|
-
*
|
|
61
|
+
* Specifies how many individual calendars should be displayed side by side on desktop devices. Increasing this number allows your users to view multiple months (or years, etc.) simultaneously.
|
|
56
62
|
*/
|
|
57
63
|
calendars?: number
|
|
64
|
+
|
|
58
65
|
/**
|
|
59
|
-
* A string of all
|
|
66
|
+
* A string of all classNames you want to apply to the outermost container of the React Calendar component. Use this to style or theme your calendar.
|
|
60
67
|
*/
|
|
61
68
|
className?: string
|
|
69
|
+
|
|
62
70
|
/**
|
|
63
|
-
*
|
|
71
|
+
* Sets the format for day names. Accepts either a built-in format ('numeric' or '2-digit') or a custom function to return any desired string or number for the day.
|
|
64
72
|
*
|
|
65
73
|
* @default 'numeric'
|
|
66
74
|
* @since 4.3.0
|
|
67
75
|
*/
|
|
68
76
|
dayFormat?: 'numeric' | '2-digit' | ((date: Date) => string | number)
|
|
77
|
+
|
|
69
78
|
/**
|
|
70
|
-
*
|
|
79
|
+
* Specifies one or more dates that cannot be selected by the user. This is useful for disabling weekends, holidays, or any dates that you need to restrict within your React Calendar component.
|
|
71
80
|
*/
|
|
72
|
-
disabledDates?:
|
|
81
|
+
disabledDates?: DisabledDate | DisabledDate[]
|
|
82
|
+
|
|
73
83
|
/**
|
|
74
|
-
*
|
|
84
|
+
* Defines the initially selected ending date (applicable when using range selection). Accepts both Date objects and valid date strings.
|
|
75
85
|
*/
|
|
76
86
|
endDate?: Date | string | null
|
|
87
|
+
|
|
77
88
|
/**
|
|
78
|
-
* Sets the day of
|
|
79
|
-
* - 0
|
|
80
|
-
* - 1
|
|
81
|
-
* - 2
|
|
82
|
-
* - 3
|
|
83
|
-
* - 4
|
|
84
|
-
* - 5
|
|
85
|
-
* - 6
|
|
89
|
+
* Sets the first day of the week. This can be adjusted for different locales or preferences:
|
|
90
|
+
* - `0` = Sunday
|
|
91
|
+
* - `1` = Monday
|
|
92
|
+
* - `2` = Tuesday
|
|
93
|
+
* - `3` = Wednesday
|
|
94
|
+
* - `4` = Thursday
|
|
95
|
+
* - `5` = Friday
|
|
96
|
+
* - `6` = Saturday
|
|
86
97
|
*
|
|
87
98
|
* @default 1
|
|
88
99
|
*/
|
|
89
100
|
firstDayOfWeek?: number
|
|
101
|
+
|
|
90
102
|
/**
|
|
91
|
-
*
|
|
103
|
+
* Indicates the locale for the React Calendar component. If not explicitly provided, it inherits the locale settings from the browser.
|
|
92
104
|
*
|
|
93
105
|
* @default 'default'
|
|
94
106
|
*/
|
|
95
107
|
locale?: string
|
|
108
|
+
|
|
96
109
|
/**
|
|
97
|
-
*
|
|
110
|
+
* The maximum date that can be selected. Any date beyond this value will be disabled within the calendar. This is often used to restrict future selections.
|
|
98
111
|
*/
|
|
99
112
|
maxDate?: Date | string | null
|
|
113
|
+
|
|
100
114
|
/**
|
|
101
|
-
*
|
|
115
|
+
* The minimum date that can be selected. Any date before this value will be disabled in the calendar. Useful for preventing selection of past dates or creating limited booking windows.
|
|
102
116
|
*/
|
|
103
117
|
minDate?: Date | string | null
|
|
118
|
+
|
|
104
119
|
/**
|
|
105
|
-
*
|
|
120
|
+
* Toggles display of arrow-based navigation (previous/next controls) in the React Calendar component. If set to `false`, you can build custom navigation or handle the navigation programmatically.
|
|
106
121
|
*/
|
|
107
122
|
navigation?: boolean
|
|
123
|
+
|
|
108
124
|
/**
|
|
109
|
-
*
|
|
125
|
+
* Customizes the icon for navigating to the next view (month, year, etc.) depending on the current view. Accepts any valid `ReactNode`, enabling you to display text, images, or icons.
|
|
110
126
|
*/
|
|
111
127
|
navNextIcon?: ReactNode
|
|
128
|
+
|
|
112
129
|
/**
|
|
113
|
-
*
|
|
130
|
+
* Customizes the icon for navigating multiple steps forward (double jump), e.g., skipping multiple months or years at once. Ideal for quick navigation through large date ranges.
|
|
114
131
|
*/
|
|
115
132
|
navNextDoubleIcon?: ReactNode
|
|
133
|
+
|
|
116
134
|
/**
|
|
117
|
-
*
|
|
135
|
+
* Customizes the icon for navigating to the previous view in the calendar. Accepts any valid ReactNode to provide flexible styling or theming.
|
|
118
136
|
*/
|
|
119
137
|
navPrevIcon?: ReactNode
|
|
138
|
+
|
|
120
139
|
/**
|
|
121
|
-
*
|
|
140
|
+
* Customizes the icon for a double jump backward (e.g., jumping multiple months or years at once). This feature simplifies larger date range navigation within your React Calendar component.
|
|
122
141
|
*/
|
|
123
142
|
navPrevDoubleIcon?: ReactNode
|
|
143
|
+
|
|
124
144
|
/**
|
|
125
|
-
*
|
|
145
|
+
* Reorders the year and month navigation, rendering the year selector first. This offers a different layout for users, particularly useful if you want to prioritize quick year changes.
|
|
126
146
|
*
|
|
147
|
+
* @default false
|
|
127
148
|
* @since 4.3.0
|
|
128
149
|
*/
|
|
129
150
|
navYearFirst?: boolean
|
|
151
|
+
|
|
130
152
|
/**
|
|
131
|
-
*
|
|
153
|
+
* Enables range selection mode in your React Calendar component, allowing users to select two dates for a range (start and end). Once enabled, the component will manage state for both dates.
|
|
132
154
|
*/
|
|
133
155
|
range?: boolean
|
|
156
|
+
|
|
134
157
|
/**
|
|
135
|
-
*
|
|
158
|
+
* Sets whether days from adjacent months (shown at the start/end of the current view) are selectable. This only applies if `showAdjacementDays` is set to `true`.
|
|
136
159
|
*
|
|
160
|
+
* @default false
|
|
137
161
|
* @since 4.11.0
|
|
138
162
|
*/
|
|
139
163
|
selectAdjacementDays?: boolean
|
|
164
|
+
|
|
140
165
|
/**
|
|
141
|
-
*
|
|
166
|
+
* Controls whether the calendar should display dates from previous or next months (non-selectable if `selectAdjacementDays` is `false`). This can make the calendar visually continuous.
|
|
142
167
|
*
|
|
168
|
+
* @default true
|
|
143
169
|
* @since 4.11.0
|
|
144
170
|
*/
|
|
145
171
|
showAdjacementDays?: boolean
|
|
172
|
+
|
|
146
173
|
/**
|
|
147
|
-
*
|
|
174
|
+
* Toggles the display of week numbers (ISO 8601) in the calendar's left column. Particularly beneficial for applications where users need to see the week index for scheduling or reporting.
|
|
148
175
|
*
|
|
176
|
+
* @default false
|
|
149
177
|
* @since 5.0.0
|
|
150
178
|
*/
|
|
151
179
|
showWeekNumber?: boolean
|
|
180
|
+
|
|
152
181
|
/**
|
|
153
|
-
*
|
|
182
|
+
* Indicates if the user's current selection is targeting the end date in range selection mode. Primarily used for controlled components where you need to manage which date (start or end) is currently active.
|
|
154
183
|
*/
|
|
155
184
|
selectEndDate?: boolean
|
|
185
|
+
|
|
156
186
|
/**
|
|
157
|
-
*
|
|
187
|
+
* Specifies the selection type for the React Calendar component. Supports:
|
|
188
|
+
* - `day`: Regular day selection (default)
|
|
189
|
+
* - `week`: Select an entire week
|
|
190
|
+
* - `month`: Select an entire month
|
|
191
|
+
* - `year`: Select an entire year
|
|
158
192
|
*
|
|
193
|
+
* @default 'day'
|
|
159
194
|
* @since 5.0.0
|
|
160
195
|
*/
|
|
161
|
-
selectionType?:
|
|
196
|
+
selectionType?: SelectionTypes
|
|
197
|
+
|
|
162
198
|
/**
|
|
163
|
-
*
|
|
199
|
+
* Defines the initially selected starting date. This date can be a Date object or a string convertible into a valid date. Useful when you want to show a pre-selected date.
|
|
164
200
|
*/
|
|
165
201
|
startDate?: Date | string | null
|
|
202
|
+
|
|
166
203
|
/**
|
|
167
|
-
*
|
|
204
|
+
* Sets the format or length of the weekday names displayed in the calendar header. You can use numeric values like 2 (two-letter abbreviations) or built-in string formats like `'long'`, `'narrow'`, and `'short'`, or provide a custom function to fully control how weekdays are displayed.
|
|
168
205
|
*
|
|
169
206
|
* @default 2
|
|
170
207
|
*/
|
|
171
208
|
weekdayFormat?: number | 'long' | 'narrow' | 'short' | ((date: Date) => string | number)
|
|
209
|
+
|
|
172
210
|
/**
|
|
173
|
-
*
|
|
211
|
+
* Defines the label that appears above the week numbers column. For example, you might label it `'WK'` or `'Week #'`.
|
|
174
212
|
*
|
|
175
213
|
* @since 5.0.0
|
|
176
214
|
*/
|
|
177
215
|
weekNumbersLabel?: string
|
|
216
|
+
|
|
178
217
|
/**
|
|
179
|
-
* Callback fired when the calendar date
|
|
218
|
+
* Callback fired when the calendar's reference date (i.e., the date indicating which month/year is currently displayed) changes. Receives the new `Date | string` as an argument for further handling.
|
|
180
219
|
*/
|
|
181
220
|
onCalendarDateChange?: (date: Date | string) => void
|
|
221
|
+
|
|
182
222
|
/**
|
|
183
|
-
* Callback fired when the user hovers over
|
|
223
|
+
* Callback fired when the user hovers over a calendar cell. The argument is the date of the cell that the user is currently hovering.
|
|
184
224
|
*/
|
|
185
225
|
onDateHover?: (date: Date | string | null) => void
|
|
226
|
+
|
|
186
227
|
/**
|
|
187
|
-
* Callback
|
|
228
|
+
* Callback triggered when the start date of the selection changes. Useful for updating other parts of your application or performing side effects based on the newly chosen start date.
|
|
188
229
|
*/
|
|
189
|
-
onStartDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
|
|
230
|
+
onStartDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
|
|
231
|
+
|
|
190
232
|
/**
|
|
191
|
-
* Callback
|
|
233
|
+
* Callback triggered when the end date of the selection changes. Handy for synchronizing the selected date range with external states or components.
|
|
192
234
|
*/
|
|
193
|
-
onEndDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
|
|
235
|
+
onEndDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
|
|
236
|
+
|
|
194
237
|
/**
|
|
195
|
-
* Callback fired when the selection
|
|
238
|
+
* Callback fired when toggling between selecting the start date and the end date in range selection mode. Receives a boolean indicating if the user is currently selecting the end date.
|
|
196
239
|
*/
|
|
197
240
|
onSelectEndChange?: (value: boolean) => void
|
|
241
|
+
|
|
198
242
|
/**
|
|
199
|
-
* Callback fired when the view
|
|
243
|
+
* Callback fired when the calendar's view changes between days, months, or years. For instance, moving from day view to month view or from month view to year view.
|
|
200
244
|
*/
|
|
201
245
|
onViewChanged?: (view: string) => void
|
|
202
246
|
}
|
|
203
247
|
|
|
204
|
-
const Calendar = (props: {
|
|
205
|
-
calendarDate: Date
|
|
206
|
-
dayFormat?: 'numeric' | '2-digit' | ((date: Date) => string | number)
|
|
207
|
-
disabledDates?: Date[] | Date[][] | (Date | Date[])[]
|
|
208
|
-
endDate: Date | null
|
|
209
|
-
firstDayOfWeek: number
|
|
210
|
-
hoverDate: Date | null
|
|
211
|
-
locale: string
|
|
212
|
-
maxDate: Date | null
|
|
213
|
-
minDate: Date | null
|
|
214
|
-
onCalendarClick: (date: Date) => void
|
|
215
|
-
onCalendarKeyDown: (event: KeyboardEvent<HTMLDivElement>, date: Date) => void
|
|
216
|
-
onCalendarMouseEnter: (date: Date) => void
|
|
217
|
-
onCalendarMouseLeave: () => void
|
|
218
|
-
order: number
|
|
219
|
-
selectAdjacementDays: boolean
|
|
220
|
-
selectEndDate: boolean | undefined
|
|
221
|
-
selectionType: 'day' | 'week' | 'month' | 'year'
|
|
222
|
-
showAdjacementDays: boolean
|
|
223
|
-
showWeekNumber: boolean
|
|
224
|
-
startDate: Date | null
|
|
225
|
-
view: 'days' | 'months' | 'years'
|
|
226
|
-
weekdayFormat: number | 'long' | 'narrow' | 'short' | ((date: Date) => string | number)
|
|
227
|
-
weekNumbersLabel: string | undefined
|
|
228
|
-
}) => {
|
|
229
|
-
const {
|
|
230
|
-
calendarDate,
|
|
231
|
-
dayFormat,
|
|
232
|
-
disabledDates,
|
|
233
|
-
endDate,
|
|
234
|
-
firstDayOfWeek,
|
|
235
|
-
hoverDate,
|
|
236
|
-
locale,
|
|
237
|
-
maxDate,
|
|
238
|
-
minDate,
|
|
239
|
-
onCalendarClick,
|
|
240
|
-
onCalendarKeyDown,
|
|
241
|
-
onCalendarMouseEnter,
|
|
242
|
-
onCalendarMouseLeave,
|
|
243
|
-
selectAdjacementDays,
|
|
244
|
-
selectEndDate,
|
|
245
|
-
selectionType,
|
|
246
|
-
showWeekNumber,
|
|
247
|
-
showAdjacementDays,
|
|
248
|
-
startDate,
|
|
249
|
-
view,
|
|
250
|
-
weekdayFormat,
|
|
251
|
-
weekNumbersLabel,
|
|
252
|
-
} = props
|
|
253
|
-
const [listOfMonths, setListOfMonths] = useState<string[][]>([])
|
|
254
|
-
|
|
255
|
-
useEffect(() => {
|
|
256
|
-
setListOfMonths(createGroupsInArray(getMonthsNames(locale), 4))
|
|
257
|
-
}, [])
|
|
258
|
-
|
|
259
|
-
const monthDetails = getMonthDetails(
|
|
260
|
-
calendarDate.getFullYear(),
|
|
261
|
-
calendarDate.getMonth(),
|
|
262
|
-
firstDayOfWeek,
|
|
263
|
-
)
|
|
264
|
-
const listOfYears = createGroupsInArray(getYears(calendarDate.getFullYear()), 4)
|
|
265
|
-
const weekDays = monthDetails[0].days
|
|
266
|
-
|
|
267
|
-
return (
|
|
268
|
-
<table>
|
|
269
|
-
{view === 'days' && (
|
|
270
|
-
<thead>
|
|
271
|
-
<tr>
|
|
272
|
-
{showWeekNumber && (
|
|
273
|
-
<th className="calendar-cell">
|
|
274
|
-
<div className="calendar-header-cell-inner">{weekNumbersLabel}</div>
|
|
275
|
-
</th>
|
|
276
|
-
)}
|
|
277
|
-
{weekDays.map(({ date }: { date: Date }, idx: number) => (
|
|
278
|
-
<th
|
|
279
|
-
className="calendar-cell"
|
|
280
|
-
abbr={date.toLocaleDateString(locale, { weekday: 'long' })}
|
|
281
|
-
key={idx}
|
|
282
|
-
>
|
|
283
|
-
<div className="calendar-header-cell-inner">
|
|
284
|
-
{typeof weekdayFormat === 'function'
|
|
285
|
-
? weekdayFormat(date)
|
|
286
|
-
: typeof weekdayFormat === 'string'
|
|
287
|
-
? date.toLocaleDateString(locale, { weekday: weekdayFormat })
|
|
288
|
-
: date
|
|
289
|
-
.toLocaleDateString(locale, { weekday: 'long' })
|
|
290
|
-
.slice(0, weekdayFormat)}
|
|
291
|
-
</div>
|
|
292
|
-
</th>
|
|
293
|
-
))}
|
|
294
|
-
</tr>
|
|
295
|
-
</thead>
|
|
296
|
-
)}
|
|
297
|
-
<tbody>
|
|
298
|
-
{view === 'days' &&
|
|
299
|
-
monthDetails.map((week, index) => {
|
|
300
|
-
const date = convertToDateObject(
|
|
301
|
-
week.weekNumber === 0
|
|
302
|
-
? `${calendarDate.getFullYear()}W53`
|
|
303
|
-
: `${calendarDate.getFullYear()}W${week.weekNumber}`,
|
|
304
|
-
selectionType,
|
|
305
|
-
)
|
|
306
|
-
const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
|
|
307
|
-
const isSelected = isDateSelected(date, startDate, endDate)
|
|
308
|
-
const current = week.days.some((day) => day.month === 'current')
|
|
309
|
-
return (
|
|
310
|
-
<tr
|
|
311
|
-
className={classNames('calendar-row', {
|
|
312
|
-
disabled: isDisabled,
|
|
313
|
-
range: selectionType === 'week' && isDateInRange(date, startDate, endDate),
|
|
314
|
-
'range-hover':
|
|
315
|
-
selectionType === 'week' && hoverDate && selectEndDate
|
|
316
|
-
? isDateInRange(date, startDate, hoverDate)
|
|
317
|
-
: isDateInRange(date, hoverDate, endDate),
|
|
318
|
-
selected: isSelected,
|
|
319
|
-
})}
|
|
320
|
-
key={index}
|
|
321
|
-
tabIndex={selectionType === 'week' && current && !isDisabled ? 0 : -1}
|
|
322
|
-
{...(isSelected && { 'aria-selected': true })}
|
|
323
|
-
{...(selectionType === 'week' &&
|
|
324
|
-
!isDisabled && {
|
|
325
|
-
onBlur: () => onCalendarMouseLeave(),
|
|
326
|
-
onClick: () => onCalendarClick(date),
|
|
327
|
-
onFocus: () => onCalendarMouseEnter(date),
|
|
328
|
-
onKeyDown: (event) => onCalendarKeyDown(event, date),
|
|
329
|
-
onMouseEnter: () => onCalendarMouseEnter(date),
|
|
330
|
-
onMouseLeave: () => onCalendarMouseLeave(),
|
|
331
|
-
})}
|
|
332
|
-
>
|
|
333
|
-
{showWeekNumber && (
|
|
334
|
-
<th className="calendar-cell-week-number">
|
|
335
|
-
{week.weekNumber === 0 ? 53 : week.weekNumber}
|
|
336
|
-
</th>
|
|
337
|
-
)}
|
|
338
|
-
{week.days.map(({ date, month }: { date: Date; month: string }, idx: number) => {
|
|
339
|
-
const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
|
|
340
|
-
const isSelected = isDateSelected(date, startDate, endDate)
|
|
341
|
-
return month === 'current' || showAdjacementDays ? (
|
|
342
|
-
<td
|
|
343
|
-
className={classNames('calendar-cell', {
|
|
344
|
-
...(selectionType === 'day' && {
|
|
345
|
-
clickable: month !== 'current' && selectAdjacementDays,
|
|
346
|
-
disabled: isDisabled,
|
|
347
|
-
'range-hover':
|
|
348
|
-
month === 'current' &&
|
|
349
|
-
(hoverDate && selectEndDate
|
|
350
|
-
? isDateInRange(date, startDate, hoverDate)
|
|
351
|
-
: isDateInRange(date, hoverDate, endDate)),
|
|
352
|
-
range: month === 'current' && isDateInRange(date, startDate, endDate),
|
|
353
|
-
selected: isSelected,
|
|
354
|
-
}),
|
|
355
|
-
[month]: true,
|
|
356
|
-
today: month === 'current' && isToday(date),
|
|
357
|
-
})}
|
|
358
|
-
key={idx}
|
|
359
|
-
tabIndex={
|
|
360
|
-
selectionType === 'day' &&
|
|
361
|
-
(month === 'current' || selectAdjacementDays) &&
|
|
362
|
-
!isDisabled
|
|
363
|
-
? 0
|
|
364
|
-
: -1
|
|
365
|
-
}
|
|
366
|
-
title={date.toLocaleDateString(locale)}
|
|
367
|
-
{...(isSelected && { 'aria-selected': true })}
|
|
368
|
-
{...(selectionType === 'day' &&
|
|
369
|
-
(month === 'current' || selectAdjacementDays) && {
|
|
370
|
-
onBlur: () => onCalendarMouseLeave(),
|
|
371
|
-
onClick: () => onCalendarClick(date),
|
|
372
|
-
onFocus: () => onCalendarMouseEnter(date),
|
|
373
|
-
onKeyDown: (event) => onCalendarKeyDown(event, date),
|
|
374
|
-
onMouseEnter: () => onCalendarMouseEnter(date),
|
|
375
|
-
onMouseLeave: () => onCalendarMouseLeave(),
|
|
376
|
-
})}
|
|
377
|
-
{...(month !== 'current' &&
|
|
378
|
-
!selectAdjacementDays && {
|
|
379
|
-
onMouseEnter: () => onCalendarMouseLeave(),
|
|
380
|
-
})}
|
|
381
|
-
>
|
|
382
|
-
<div className="calendar-cell-inner">
|
|
383
|
-
{typeof dayFormat === 'function'
|
|
384
|
-
? dayFormat(date)
|
|
385
|
-
: date.toLocaleDateString(locale, { day: dayFormat })}
|
|
386
|
-
</div>
|
|
387
|
-
</td>
|
|
388
|
-
) : (
|
|
389
|
-
<td key={idx}></td>
|
|
390
|
-
)
|
|
391
|
-
})}
|
|
392
|
-
</tr>
|
|
393
|
-
)
|
|
394
|
-
})}
|
|
395
|
-
{view === 'months' &&
|
|
396
|
-
listOfMonths.map((row, index) => {
|
|
397
|
-
return (
|
|
398
|
-
<tr key={index}>
|
|
399
|
-
{row.map((month, idx) => {
|
|
400
|
-
const monthNumber = index * 3 + idx
|
|
401
|
-
const date = new Date(calendarDate.getFullYear(), monthNumber, 1)
|
|
402
|
-
const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
|
|
403
|
-
const isSelected = isDateSelected(date, startDate, endDate)
|
|
404
|
-
return (
|
|
405
|
-
<td
|
|
406
|
-
className={classNames('calendar-cell', {
|
|
407
|
-
disabled: isDisabled,
|
|
408
|
-
selected: isSelected,
|
|
409
|
-
'range-hover':
|
|
410
|
-
selectionType === 'month' &&
|
|
411
|
-
(hoverDate && selectEndDate
|
|
412
|
-
? isDateInRange(date, startDate, hoverDate)
|
|
413
|
-
: isDateInRange(date, hoverDate, endDate)),
|
|
414
|
-
range: isDateInRange(date, startDate, endDate),
|
|
415
|
-
})}
|
|
416
|
-
key={idx}
|
|
417
|
-
tabIndex={isDisabled ? -1 : 0}
|
|
418
|
-
{...(isSelected && { 'aria-selected': true })}
|
|
419
|
-
{...(!isDisabled && {
|
|
420
|
-
onBlur: () => onCalendarMouseLeave(),
|
|
421
|
-
onClick: () => onCalendarClick(date),
|
|
422
|
-
onFocus: () => onCalendarMouseEnter(date),
|
|
423
|
-
onKeyDown: (event) => onCalendarKeyDown(event, date),
|
|
424
|
-
onMouseEnter: () => onCalendarMouseEnter(date),
|
|
425
|
-
onMouseLeave: () => onCalendarMouseLeave(),
|
|
426
|
-
})}
|
|
427
|
-
>
|
|
428
|
-
<div className="calendar-cell-inner">{month}</div>
|
|
429
|
-
</td>
|
|
430
|
-
)
|
|
431
|
-
})}
|
|
432
|
-
</tr>
|
|
433
|
-
)
|
|
434
|
-
})}
|
|
435
|
-
{view === 'years' &&
|
|
436
|
-
listOfYears.map((row, index) => {
|
|
437
|
-
return (
|
|
438
|
-
<tr key={index}>
|
|
439
|
-
{row.map((year, idx) => {
|
|
440
|
-
const date = new Date(year, 0, 1)
|
|
441
|
-
const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
|
|
442
|
-
const isSelected = isDateSelected(date, startDate, endDate)
|
|
443
|
-
return (
|
|
444
|
-
<td
|
|
445
|
-
className={classNames('calendar-cell year', {
|
|
446
|
-
disabled: isDisabled,
|
|
447
|
-
selected: isSelected,
|
|
448
|
-
'range-hover':
|
|
449
|
-
selectionType === 'year' &&
|
|
450
|
-
(hoverDate && selectEndDate
|
|
451
|
-
? isDateInRange(date, startDate, hoverDate)
|
|
452
|
-
: isDateInRange(date, hoverDate, endDate)),
|
|
453
|
-
range: isDateInRange(date, startDate, endDate),
|
|
454
|
-
})}
|
|
455
|
-
key={idx}
|
|
456
|
-
tabIndex={isDisabled ? -1 : 0}
|
|
457
|
-
{...(isSelected && { 'aria-selected': true })}
|
|
458
|
-
{...(!isDisabled && {
|
|
459
|
-
onBlur: () => onCalendarMouseLeave(),
|
|
460
|
-
onClick: () => onCalendarClick(date),
|
|
461
|
-
onFocus: () => onCalendarMouseEnter(date),
|
|
462
|
-
onKeyDown: (event) => onCalendarKeyDown(event, date),
|
|
463
|
-
onMouseEnter: () => onCalendarMouseEnter(date),
|
|
464
|
-
onMouseLeave: () => onCalendarMouseLeave(),
|
|
465
|
-
})}
|
|
466
|
-
>
|
|
467
|
-
<div className="calendar-cell-inner">
|
|
468
|
-
{new Date(year, 0, 1).toLocaleDateString(locale, { year: 'numeric' })}
|
|
469
|
-
</div>
|
|
470
|
-
</td>
|
|
471
|
-
)
|
|
472
|
-
})}
|
|
473
|
-
</tr>
|
|
474
|
-
)
|
|
475
|
-
})}
|
|
476
|
-
</tbody>
|
|
477
|
-
</table>
|
|
478
|
-
)
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
const Navigation = (props: {
|
|
482
|
-
ariaNavNextMonthLabel: string
|
|
483
|
-
ariaNavNextYearLabel: string
|
|
484
|
-
ariaNavPrevMonthLabel: string
|
|
485
|
-
ariaNavPrevYearLabel: string
|
|
486
|
-
calendarDate: Date
|
|
487
|
-
locale: string
|
|
488
|
-
navigation: boolean
|
|
489
|
-
navNextDoubleIcon: ReactNode
|
|
490
|
-
navNextIcon: ReactNode
|
|
491
|
-
navPrevDoubleIcon: ReactNode
|
|
492
|
-
navPrevIcon: ReactNode
|
|
493
|
-
navYearFirst: boolean | undefined
|
|
494
|
-
onMonthClick: () => void
|
|
495
|
-
onNavigationClick: (direction: string, double?: boolean) => void
|
|
496
|
-
onYearClick: () => void
|
|
497
|
-
view: 'days' | 'months' | 'years'
|
|
498
|
-
}) => {
|
|
499
|
-
const {
|
|
500
|
-
ariaNavNextMonthLabel,
|
|
501
|
-
ariaNavNextYearLabel,
|
|
502
|
-
ariaNavPrevMonthLabel,
|
|
503
|
-
ariaNavPrevYearLabel,
|
|
504
|
-
calendarDate,
|
|
505
|
-
locale,
|
|
506
|
-
navigation,
|
|
507
|
-
navNextDoubleIcon,
|
|
508
|
-
navNextIcon,
|
|
509
|
-
navPrevDoubleIcon,
|
|
510
|
-
navPrevIcon,
|
|
511
|
-
navYearFirst,
|
|
512
|
-
onMonthClick,
|
|
513
|
-
onNavigationClick,
|
|
514
|
-
onYearClick,
|
|
515
|
-
view,
|
|
516
|
-
} = props
|
|
517
|
-
|
|
518
|
-
return (
|
|
519
|
-
<div className="calendar-nav">
|
|
520
|
-
{navigation && (
|
|
521
|
-
<div className="calendar-nav-prev">
|
|
522
|
-
<CButton
|
|
523
|
-
color="transparent"
|
|
524
|
-
size="sm"
|
|
525
|
-
aria-label={ariaNavPrevYearLabel}
|
|
526
|
-
onClick={() => onNavigationClick('prev', true)}
|
|
527
|
-
>
|
|
528
|
-
{navPrevDoubleIcon ?? (
|
|
529
|
-
<span className="calendar-nav-icon calendar-nav-icon-double-prev" />
|
|
530
|
-
)}
|
|
531
|
-
</CButton>
|
|
532
|
-
{view === 'days' && (
|
|
533
|
-
<CButton
|
|
534
|
-
color="transparent"
|
|
535
|
-
size="sm"
|
|
536
|
-
aria-label={ariaNavPrevMonthLabel}
|
|
537
|
-
onClick={() => onNavigationClick('prev')}
|
|
538
|
-
>
|
|
539
|
-
{navPrevIcon ?? <span className="calendar-nav-icon calendar-nav-icon-prev" />}
|
|
540
|
-
</CButton>
|
|
541
|
-
)}
|
|
542
|
-
</div>
|
|
543
|
-
)}
|
|
544
|
-
<div
|
|
545
|
-
className="calendar-nav-date"
|
|
546
|
-
aria-live="polite"
|
|
547
|
-
{...(navYearFirst && { style: { display: 'flex', justifyContent: 'center' } })}
|
|
548
|
-
>
|
|
549
|
-
{view === 'days' && (
|
|
550
|
-
<CButton color="transparent" size="sm" onClick={() => navigation && onMonthClick()}>
|
|
551
|
-
{calendarDate && calendarDate.toLocaleDateString(locale, { month: 'long' })}
|
|
552
|
-
</CButton>
|
|
553
|
-
)}
|
|
554
|
-
<CButton
|
|
555
|
-
color="transparent"
|
|
556
|
-
size="sm"
|
|
557
|
-
onClick={() => navigation && onYearClick()}
|
|
558
|
-
{...(navYearFirst && { style: { order: '-1' } })}
|
|
559
|
-
>
|
|
560
|
-
{calendarDate && calendarDate.toLocaleDateString(locale, { year: 'numeric' })}
|
|
561
|
-
</CButton>
|
|
562
|
-
</div>
|
|
563
|
-
{navigation && (
|
|
564
|
-
<div className="calendar-nav-next">
|
|
565
|
-
{view === 'days' && (
|
|
566
|
-
<CButton
|
|
567
|
-
color="transparent"
|
|
568
|
-
size="sm"
|
|
569
|
-
aria-label={ariaNavNextMonthLabel}
|
|
570
|
-
onClick={() => onNavigationClick('next')}
|
|
571
|
-
>
|
|
572
|
-
{navNextIcon ?? <span className="calendar-nav-icon calendar-nav-icon-next" />}
|
|
573
|
-
</CButton>
|
|
574
|
-
)}
|
|
575
|
-
<CButton
|
|
576
|
-
color="transparent"
|
|
577
|
-
size="sm"
|
|
578
|
-
aria-label={ariaNavNextYearLabel}
|
|
579
|
-
onClick={() => onNavigationClick('next', true)}
|
|
580
|
-
>
|
|
581
|
-
{navNextDoubleIcon ?? (
|
|
582
|
-
<span className="calendar-nav-icon calendar-nav-icon-double-next" />
|
|
583
|
-
)}
|
|
584
|
-
</CButton>
|
|
585
|
-
</div>
|
|
586
|
-
)}
|
|
587
|
-
</div>
|
|
588
|
-
)
|
|
589
|
-
}
|
|
590
|
-
|
|
591
248
|
export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
592
249
|
(
|
|
593
250
|
{
|
|
@@ -635,20 +292,14 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
635
292
|
const [_calendarDate, setCalendarDate] = useState<Date | null>(null)
|
|
636
293
|
|
|
637
294
|
useEffect(() => {
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
if (selectionType === 'month') {
|
|
644
|
-
setView('months')
|
|
645
|
-
return
|
|
295
|
+
const viewMap = {
|
|
296
|
+
day: 'days',
|
|
297
|
+
week: 'days',
|
|
298
|
+
month: 'months',
|
|
299
|
+
year: 'years',
|
|
646
300
|
}
|
|
647
301
|
|
|
648
|
-
|
|
649
|
-
setView('years')
|
|
650
|
-
return
|
|
651
|
-
}
|
|
302
|
+
setView((viewMap[selectionType] as ViewTypes) || 'days')
|
|
652
303
|
}, [selectionType])
|
|
653
304
|
|
|
654
305
|
useEffect(() => {
|
|
@@ -713,13 +364,21 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
713
364
|
}, [selectEndDate])
|
|
714
365
|
|
|
715
366
|
useEffect(() => {
|
|
716
|
-
!isInitialMount.current &&
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
onSelectEndChange(_selectEndDate)
|
|
367
|
+
if (!isInitialMount.current && typeof _selectEndDate === 'boolean') {
|
|
368
|
+
onSelectEndChange?.(_selectEndDate)
|
|
369
|
+
}
|
|
720
370
|
}, [_selectEndDate])
|
|
721
371
|
|
|
722
|
-
const [view, setView] = useStateWithCallback<
|
|
372
|
+
const [view, setView] = useStateWithCallback<ViewTypes>('days', onViewChanged)
|
|
373
|
+
const [focusOn, setFocusOn] = useState<number | undefined>()
|
|
374
|
+
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
if (typeof focusOn === 'number') {
|
|
377
|
+
const list = getSelectableDates(calendarRef.current as HTMLDivElement)
|
|
378
|
+
list[focusOn]?.focus()
|
|
379
|
+
setFocusOn(undefined)
|
|
380
|
+
}
|
|
381
|
+
}, [view])
|
|
723
382
|
|
|
724
383
|
useEffect(() => {
|
|
725
384
|
isInitialMount.current = false
|
|
@@ -734,19 +393,23 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
734
393
|
const month = _calendarDate.getMonth()
|
|
735
394
|
const d = new Date(year, month, 1)
|
|
736
395
|
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
396
|
+
if (years) {
|
|
397
|
+
d.setFullYear(d.getFullYear() + years)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
if (months) {
|
|
401
|
+
d.setMonth(d.getMonth() + months)
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (typeof setMonth === 'number') {
|
|
405
|
+
d.setMonth(setMonth)
|
|
406
|
+
}
|
|
740
407
|
|
|
741
408
|
setCalendarDate(d)
|
|
742
|
-
onCalendarDateChange
|
|
409
|
+
onCalendarDateChange?.(d)
|
|
743
410
|
}
|
|
744
411
|
|
|
745
412
|
const handleCalendarClick = (date: Date, index?: number) => {
|
|
746
|
-
if (isDateDisabled(date, _minDate, _maxDate, disabledDates)) {
|
|
747
|
-
return
|
|
748
|
-
}
|
|
749
|
-
|
|
750
413
|
const _date = new Date(date)
|
|
751
414
|
|
|
752
415
|
if (view === 'days') {
|
|
@@ -765,6 +428,11 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
765
428
|
return
|
|
766
429
|
}
|
|
767
430
|
|
|
431
|
+
// Allow to change the calendarDate but not startDate or endDate
|
|
432
|
+
if (isDateDisabled(date, _minDate, _maxDate, disabledDates)) {
|
|
433
|
+
return
|
|
434
|
+
}
|
|
435
|
+
|
|
768
436
|
if (range) {
|
|
769
437
|
if (_selectEndDate) {
|
|
770
438
|
setSelectEndDate(false)
|
|
@@ -812,6 +480,13 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
812
480
|
) => {
|
|
813
481
|
if (event.code === 'Space' || event.key === 'Enter') {
|
|
814
482
|
event.preventDefault()
|
|
483
|
+
if (
|
|
484
|
+
(view === 'months' && selectionType !== 'month') ||
|
|
485
|
+
(view === 'years' && selectionType !== 'year')
|
|
486
|
+
) {
|
|
487
|
+
setFocusOn(0)
|
|
488
|
+
}
|
|
489
|
+
|
|
815
490
|
handleCalendarClick(date, index)
|
|
816
491
|
}
|
|
817
492
|
|
|
@@ -824,16 +499,16 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
824
499
|
event.preventDefault()
|
|
825
500
|
|
|
826
501
|
if (
|
|
827
|
-
|
|
828
|
-
date >=
|
|
502
|
+
_maxDate &&
|
|
503
|
+
date >= _maxDate &&
|
|
829
504
|
(event.key === 'ArrowRight' || event.key === 'ArrowDown')
|
|
830
505
|
) {
|
|
831
506
|
return
|
|
832
507
|
}
|
|
833
508
|
|
|
834
509
|
if (
|
|
835
|
-
|
|
836
|
-
date <=
|
|
510
|
+
_minDate &&
|
|
511
|
+
date <= _minDate &&
|
|
837
512
|
(event.key === 'ArrowLeft' || event.key === 'ArrowUp')
|
|
838
513
|
) {
|
|
839
514
|
return
|
|
@@ -845,12 +520,7 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
845
520
|
element = element.closest('tr[tabindex="0"]') as HTMLElement
|
|
846
521
|
}
|
|
847
522
|
|
|
848
|
-
const list: HTMLElement[] =
|
|
849
|
-
...Element.prototype.querySelectorAll.call(
|
|
850
|
-
calendarRef.current,
|
|
851
|
-
selectionType === 'week' ? 'tr[tabindex="0"]' : 'td[tabindex="0"]',
|
|
852
|
-
),
|
|
853
|
-
)
|
|
523
|
+
const list: HTMLElement[] = getSelectableDates(calendarRef.current as HTMLDivElement)
|
|
854
524
|
|
|
855
525
|
const index = list.indexOf(element)
|
|
856
526
|
const first = index === 0
|
|
@@ -887,19 +557,14 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
887
557
|
}
|
|
888
558
|
|
|
889
559
|
setTimeout(() => {
|
|
890
|
-
const _list
|
|
891
|
-
...Element.prototype.querySelectorAll.call(
|
|
892
|
-
element.parentNode?.parentNode,
|
|
893
|
-
'td[tabindex="0"], tr[tabindex="0"]',
|
|
894
|
-
),
|
|
895
|
-
)
|
|
560
|
+
const _list = getSelectableDates(element.parentNode?.parentNode as HTMLDivElement)
|
|
896
561
|
|
|
897
562
|
if (_list.length > 0 && event.key === 'ArrowRight') {
|
|
898
563
|
_list[0].focus()
|
|
899
564
|
}
|
|
900
565
|
|
|
901
566
|
if (_list.length > 0 && event.key === 'ArrowLeft') {
|
|
902
|
-
_list
|
|
567
|
+
_list.at(-1)?.focus()
|
|
903
568
|
}
|
|
904
569
|
|
|
905
570
|
if (_list.length > 0 && event.key === 'ArrowDown') {
|
|
@@ -939,12 +604,14 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
939
604
|
|
|
940
605
|
setHoverDate(date)
|
|
941
606
|
|
|
942
|
-
|
|
607
|
+
if (date) {
|
|
608
|
+
onDateHover?.(getDateBySelectionType(date, selectionType))
|
|
609
|
+
}
|
|
943
610
|
}
|
|
944
611
|
|
|
945
612
|
const handleCalendarMouseLeave = () => {
|
|
946
613
|
setHoverDate(null)
|
|
947
|
-
onDateHover
|
|
614
|
+
onDateHover?.(null)
|
|
948
615
|
}
|
|
949
616
|
|
|
950
617
|
const handleNavigationOnClick = (direction: string, double = false) => {
|
|
@@ -996,7 +663,7 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
996
663
|
const calendarDate = getCalendarDate(_calendarDate, index, view)
|
|
997
664
|
return (
|
|
998
665
|
<div className={classNames('calendar', view)} key={index}>
|
|
999
|
-
<
|
|
666
|
+
<CCalendarNavigation
|
|
1000
667
|
ariaNavNextMonthLabel={ariaNavNextMonthLabel}
|
|
1001
668
|
ariaNavNextYearLabel={ariaNavNextYearLabel}
|
|
1002
669
|
ariaNavPrevMonthLabel={ariaNavPrevMonthLabel}
|
|
@@ -1014,7 +681,7 @@ export const CCalendar = forwardRef<HTMLDivElement, CCalendarProps>(
|
|
|
1014
681
|
onYearClick={() => setView('years')}
|
|
1015
682
|
view={view}
|
|
1016
683
|
/>
|
|
1017
|
-
<
|
|
684
|
+
<CCalendarPanel
|
|
1018
685
|
calendarDate={calendarDate}
|
|
1019
686
|
dayFormat={dayFormat}
|
|
1020
687
|
disabledDates={disabledDates}
|
|
@@ -1059,7 +726,7 @@ CCalendar.propTypes = {
|
|
|
1059
726
|
PropTypes.func,
|
|
1060
727
|
PropTypes.oneOf<'2-digit' | 'numeric'>(['2-digit', 'numeric']),
|
|
1061
728
|
]),
|
|
1062
|
-
disabledDates: PropTypes.array,
|
|
729
|
+
disabledDates: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.array, PropTypes.func]),
|
|
1063
730
|
endDate: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.string]),
|
|
1064
731
|
firstDayOfWeek: PropTypes.number,
|
|
1065
732
|
locale: PropTypes.string,
|