@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.
Files changed (456) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/accordion/CAccordion.js +1 -1
  3. package/dist/cjs/components/accordion/CAccordionBody.js +1 -1
  4. package/dist/cjs/components/accordion/CAccordionButton.js +3 -3
  5. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  6. package/dist/cjs/components/accordion/CAccordionHeader.js +1 -1
  7. package/dist/cjs/components/accordion/CAccordionItem.d.ts +1 -0
  8. package/dist/cjs/components/accordion/CAccordionItem.js +7 -4
  9. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  10. package/dist/cjs/components/alert/CAlert.js +1 -1
  11. package/dist/cjs/components/alert/CAlertHeading.js +1 -1
  12. package/dist/cjs/components/alert/CAlertLink.js +1 -1
  13. package/dist/cjs/components/avatar/CAvatar.js +1 -1
  14. package/dist/cjs/components/backdrop/CBackdrop.js +1 -1
  15. package/dist/cjs/components/badge/CBadge.js +2 -2
  16. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  17. package/dist/cjs/components/breadcrumb/CBreadcrumb.js +1 -1
  18. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js +1 -1
  19. package/dist/cjs/components/button/CButton.js +1 -1
  20. package/dist/cjs/components/button-group/CButtonGroup.js +1 -1
  21. package/dist/cjs/components/button-group/CButtonToolbar.js +1 -1
  22. package/dist/cjs/components/calendar/CCalendar.d.ts +58 -44
  23. package/dist/cjs/components/calendar/CCalendar.js +52 -188
  24. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  25. package/dist/cjs/components/calendar/CCalendarNavigation.d.ts +21 -0
  26. package/dist/cjs/components/calendar/CCalendarNavigation.js +23 -0
  27. package/dist/cjs/components/calendar/CCalendarNavigation.js.map +1 -0
  28. package/dist/cjs/components/calendar/CCalendarPanel.d.ts +28 -0
  29. package/dist/cjs/components/calendar/CCalendarPanel.js +149 -0
  30. package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -0
  31. package/dist/cjs/components/calendar/types.d.ts +3 -0
  32. package/dist/cjs/components/calendar/utils.d.ts +176 -18
  33. package/dist/cjs/components/calendar/utils.js +330 -52
  34. package/dist/cjs/components/calendar/utils.js.map +1 -1
  35. package/dist/cjs/components/callout/CCallout.js +1 -1
  36. package/dist/cjs/components/card/CCard.js +1 -1
  37. package/dist/cjs/components/card/CCardBody.js +1 -1
  38. package/dist/cjs/components/card/CCardFooter.js +1 -1
  39. package/dist/cjs/components/card/CCardGroup.js +1 -1
  40. package/dist/cjs/components/card/CCardHeader.js +1 -1
  41. package/dist/cjs/components/card/CCardImage.js +1 -1
  42. package/dist/cjs/components/card/CCardImageOverlay.js +1 -1
  43. package/dist/cjs/components/card/CCardLink.js +1 -1
  44. package/dist/cjs/components/card/CCardSubtitle.js +1 -1
  45. package/dist/cjs/components/card/CCardText.js +1 -1
  46. package/dist/cjs/components/card/CCardTitle.js +1 -1
  47. package/dist/cjs/components/carousel/CCarousel.js +1 -1
  48. package/dist/cjs/components/carousel/CCarouselCaption.js +1 -1
  49. package/dist/cjs/components/carousel/CCarouselItem.js +1 -1
  50. package/dist/cjs/components/close-button/CCloseButton.js +1 -1
  51. package/dist/cjs/components/collapse/CCollapse.js +1 -1
  52. package/dist/cjs/components/date-picker/CDatePicker.d.ts +1 -1
  53. package/dist/cjs/components/date-picker/CDatePicker.js +1 -1
  54. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +2 -2
  55. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +1 -3
  56. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  57. package/dist/cjs/components/date-range-picker/utils.d.ts +16 -0
  58. package/dist/cjs/components/date-range-picker/utils.js +18 -2
  59. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  60. package/dist/cjs/components/dropdown/CDropdown.js +1 -1
  61. package/dist/cjs/components/dropdown/CDropdownDivider.js +1 -1
  62. package/dist/cjs/components/dropdown/CDropdownHeader.js +1 -1
  63. package/dist/cjs/components/dropdown/CDropdownItem.js +1 -1
  64. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +1 -1
  65. package/dist/cjs/components/dropdown/CDropdownMenu.js +1 -1
  66. package/dist/cjs/components/dropdown/CDropdownToggle.js +2 -2
  67. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  68. package/dist/cjs/components/element-cover/CElementCover.js +1 -1
  69. package/dist/cjs/components/footer/CFooter.js +1 -1
  70. package/dist/cjs/components/form/CForm.js +1 -1
  71. package/dist/cjs/components/form/CFormCheck.js +1 -1
  72. package/dist/cjs/components/form/CFormControlValidation.js +1 -1
  73. package/dist/cjs/components/form/CFormControlWrapper.js +1 -1
  74. package/dist/cjs/components/form/CFormFeedback.js +1 -1
  75. package/dist/cjs/components/form/CFormFloating.js +1 -1
  76. package/dist/cjs/components/form/CFormInput.js +1 -1
  77. package/dist/cjs/components/form/CFormLabel.js +1 -1
  78. package/dist/cjs/components/form/CFormRange.js +1 -1
  79. package/dist/cjs/components/form/CFormSelect.js +1 -1
  80. package/dist/cjs/components/form/CFormSwitch.js +1 -1
  81. package/dist/cjs/components/form/CFormText.js +1 -1
  82. package/dist/cjs/components/form/CFormTextarea.js +1 -1
  83. package/dist/cjs/components/form/CInputGroup.js +1 -1
  84. package/dist/cjs/components/form/CInputGroupText.js +1 -1
  85. package/dist/cjs/components/grid/CCol.js +1 -1
  86. package/dist/cjs/components/grid/CContainer.js +1 -1
  87. package/dist/cjs/components/grid/CRow.js +1 -1
  88. package/dist/cjs/components/header/CHeader.js +1 -1
  89. package/dist/cjs/components/header/CHeaderBrand.js +1 -1
  90. package/dist/cjs/components/header/CHeaderDivider.js +1 -1
  91. package/dist/cjs/components/header/CHeaderNav.js +1 -1
  92. package/dist/cjs/components/header/CHeaderText.js +1 -1
  93. package/dist/cjs/components/header/CHeaderToggler.js +1 -1
  94. package/dist/cjs/components/image/CImage.js +1 -1
  95. package/dist/cjs/components/link/CLink.js +1 -1
  96. package/dist/cjs/components/list-group/CListGroup.js +1 -1
  97. package/dist/cjs/components/list-group/CListGroupItem.js +1 -1
  98. package/dist/cjs/components/loading-button/CLoadingButton.js +1 -1
  99. package/dist/cjs/components/modal/CModal.js +1 -2
  100. package/dist/cjs/components/modal/CModal.js.map +1 -1
  101. package/dist/cjs/components/modal/CModalBody.js +1 -1
  102. package/dist/cjs/components/modal/CModalContent.js +1 -1
  103. package/dist/cjs/components/modal/CModalDialog.js +1 -1
  104. package/dist/cjs/components/modal/CModalFooter.js +1 -1
  105. package/dist/cjs/components/modal/CModalHeader.js +1 -1
  106. package/dist/cjs/components/modal/CModalTitle.js +1 -1
  107. package/dist/cjs/components/multi-select/CMultiSelect.js +1 -1
  108. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js +1 -1
  109. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +1 -1
  110. package/dist/cjs/components/multi-select/utils.js +1 -1
  111. package/dist/cjs/components/nav/CNav.js +1 -1
  112. package/dist/cjs/components/nav/CNavGroup.js +2 -2
  113. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  114. package/dist/cjs/components/nav/CNavGroupItems.js +1 -1
  115. package/dist/cjs/components/nav/CNavItem.js +1 -1
  116. package/dist/cjs/components/nav/CNavLink.js +1 -1
  117. package/dist/cjs/components/nav/CNavTitle.js +1 -1
  118. package/dist/cjs/components/navbar/CNavbar.js +1 -1
  119. package/dist/cjs/components/navbar/CNavbarBrand.js +1 -1
  120. package/dist/cjs/components/navbar/CNavbarNav.js +1 -1
  121. package/dist/cjs/components/navbar/CNavbarText.js +1 -1
  122. package/dist/cjs/components/navbar/CNavbarToggler.js +1 -1
  123. package/dist/cjs/components/offcanvas/COffcanvas.js +1 -1
  124. package/dist/cjs/components/offcanvas/COffcanvasBody.js +1 -1
  125. package/dist/cjs/components/offcanvas/COffcanvasHeader.js +1 -1
  126. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +1 -1
  127. package/dist/cjs/components/pagination/CPagination.js +1 -1
  128. package/dist/cjs/components/pagination/CPaginationItem.js +1 -1
  129. package/dist/cjs/components/picker/CPicker.js +1 -1
  130. package/dist/cjs/components/placeholder/CPlaceholder.js +1 -1
  131. package/dist/cjs/components/popover/CPopover.js +1 -1
  132. package/dist/cjs/components/progress/CProgress.d.ts +1 -1
  133. package/dist/cjs/components/progress/CProgress.js +1 -1
  134. package/dist/cjs/components/progress/CProgressBar.js +1 -1
  135. package/dist/cjs/components/progress/CProgressStacked.js +1 -1
  136. package/dist/cjs/components/range-slider/CRangeSlider.js +7 -3
  137. package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
  138. package/dist/cjs/components/range-slider/utils.js +1 -1
  139. package/dist/cjs/components/rating/CRating.js +1 -1
  140. package/dist/cjs/components/sidebar/CSidebar.d.ts +7 -2
  141. package/dist/cjs/components/sidebar/CSidebar.js +8 -7
  142. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  143. package/dist/cjs/components/sidebar/CSidebarBrand.js +1 -1
  144. package/dist/cjs/components/sidebar/CSidebarFooter.js +1 -1
  145. package/dist/cjs/components/sidebar/CSidebarHeader.js +1 -1
  146. package/dist/cjs/components/sidebar/CSidebarNav.js +1 -1
  147. package/dist/cjs/components/sidebar/CSidebarToggler.js +1 -1
  148. package/dist/cjs/components/smart-pagination/CSmartPagination.d.ts +4 -12
  149. package/dist/cjs/components/smart-pagination/CSmartPagination.js +1 -1
  150. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  151. package/dist/cjs/components/smart-table/CSmartTable.js +1 -1
  152. package/dist/cjs/components/smart-table/CSmartTableBody.js +1 -1
  153. package/dist/cjs/components/smart-table/CSmartTableHead.js +11 -26
  154. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  155. package/dist/cjs/components/smart-table/utils.js +1 -1
  156. package/dist/cjs/components/spinner/CSpinner.js +1 -1
  157. package/dist/cjs/components/table/CTable.js +1 -1
  158. package/dist/cjs/components/table/CTableBody.js +1 -1
  159. package/dist/cjs/components/table/CTableCaption.js +1 -1
  160. package/dist/cjs/components/table/CTableDataCell.js +1 -1
  161. package/dist/cjs/components/table/CTableFoot.js +1 -1
  162. package/dist/cjs/components/table/CTableHead.js +1 -1
  163. package/dist/cjs/components/table/CTableHeaderCell.js +1 -1
  164. package/dist/cjs/components/table/CTableResponsiveWrapper.js +1 -1
  165. package/dist/cjs/components/table/CTableRow.js +1 -1
  166. package/dist/cjs/components/tabs/CTab.js +1 -1
  167. package/dist/cjs/components/tabs/CTabContent.js +1 -1
  168. package/dist/cjs/components/tabs/CTabList.js +1 -1
  169. package/dist/cjs/components/tabs/CTabPane.js +1 -1
  170. package/dist/cjs/components/tabs/CTabPanel.js +1 -1
  171. package/dist/cjs/components/time-picker/CTimePicker.d.ts +1 -1
  172. package/dist/cjs/components/time-picker/CTimePicker.js +1 -1
  173. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  174. package/dist/cjs/components/time-picker/CTimePickerRollCol.js +1 -1
  175. package/dist/cjs/components/time-picker/types.d.ts +5 -0
  176. package/dist/cjs/components/time-picker/utils.d.ts +8 -11
  177. package/dist/cjs/components/time-picker/utils.js +8 -4
  178. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  179. package/dist/cjs/components/toast/CToast.js +1 -1
  180. package/dist/cjs/components/toast/CToastBody.js +1 -1
  181. package/dist/cjs/components/toast/CToastClose.js +1 -1
  182. package/dist/cjs/components/toast/CToastHeader.js +1 -1
  183. package/dist/cjs/components/toast/CToaster.js +1 -1
  184. package/dist/cjs/components/tooltip/CTooltip.js +1 -1
  185. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js +1 -1
  186. package/dist/cjs/components/widgets/CWidgetStatsA.js +1 -1
  187. package/dist/cjs/components/widgets/CWidgetStatsB.js +1 -1
  188. package/dist/cjs/components/widgets/CWidgetStatsC.js +1 -1
  189. package/dist/cjs/components/widgets/CWidgetStatsD.js +1 -1
  190. package/dist/cjs/components/widgets/CWidgetStatsE.js +1 -1
  191. package/dist/cjs/components/widgets/CWidgetStatsF.js +1 -1
  192. package/dist/cjs/hooks/index.d.ts +2 -1
  193. package/dist/cjs/hooks/useClipboard.d.ts +12 -0
  194. package/dist/cjs/hooks/useClipboard.js +54 -0
  195. package/dist/cjs/hooks/useClipboard.js.map +1 -0
  196. package/dist/cjs/hooks/useColorModes.js +5 -5
  197. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  198. package/dist/cjs/hooks/useDropdownWithPopper.js +1 -1
  199. package/dist/cjs/index.js +2 -0
  200. package/dist/cjs/index.js.map +1 -1
  201. package/dist/cjs/node_modules/classnames/index.js.map +1 -1
  202. package/dist/cjs/node_modules/react-device-detect/dist/lib.js +1 -1
  203. package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
  204. package/dist/cjs/node_modules/tslib/tslib.es6.js +100 -0
  205. package/dist/cjs/{packages/coreui-react-pro/node_modules → node_modules}/tslib/tslib.es6.js.map +1 -1
  206. package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js +2 -2
  207. package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
  208. package/dist/cjs/utils/index.d.ts +2 -1
  209. package/dist/cjs/utils/mergeClassNames.d.ts +2 -0
  210. package/dist/esm/components/accordion/CAccordion.js +1 -1
  211. package/dist/esm/components/accordion/CAccordionBody.js +1 -1
  212. package/dist/esm/components/accordion/CAccordionButton.js +3 -3
  213. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  214. package/dist/esm/components/accordion/CAccordionHeader.js +1 -1
  215. package/dist/esm/components/accordion/CAccordionItem.d.ts +1 -0
  216. package/dist/esm/components/accordion/CAccordionItem.js +8 -5
  217. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  218. package/dist/esm/components/alert/CAlert.js +1 -1
  219. package/dist/esm/components/alert/CAlertHeading.js +1 -1
  220. package/dist/esm/components/alert/CAlertLink.js +1 -1
  221. package/dist/esm/components/avatar/CAvatar.js +1 -1
  222. package/dist/esm/components/backdrop/CBackdrop.js +1 -1
  223. package/dist/esm/components/badge/CBadge.js +2 -2
  224. package/dist/esm/components/badge/CBadge.js.map +1 -1
  225. package/dist/esm/components/breadcrumb/CBreadcrumb.js +1 -1
  226. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js +1 -1
  227. package/dist/esm/components/button/CButton.js +1 -1
  228. package/dist/esm/components/button-group/CButtonGroup.js +1 -1
  229. package/dist/esm/components/button-group/CButtonToolbar.js +1 -1
  230. package/dist/esm/components/calendar/CCalendar.d.ts +58 -44
  231. package/dist/esm/components/calendar/CCalendar.js +53 -189
  232. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  233. package/dist/esm/components/calendar/CCalendarNavigation.d.ts +21 -0
  234. package/dist/esm/components/calendar/CCalendarNavigation.js +21 -0
  235. package/dist/esm/components/calendar/CCalendarNavigation.js.map +1 -0
  236. package/dist/esm/components/calendar/CCalendarPanel.d.ts +28 -0
  237. package/dist/esm/components/calendar/CCalendarPanel.js +147 -0
  238. package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -0
  239. package/dist/esm/components/calendar/types.d.ts +3 -0
  240. package/dist/esm/components/calendar/utils.d.ts +176 -18
  241. package/dist/esm/components/calendar/utils.js +324 -53
  242. package/dist/esm/components/calendar/utils.js.map +1 -1
  243. package/dist/esm/components/callout/CCallout.js +1 -1
  244. package/dist/esm/components/card/CCard.js +1 -1
  245. package/dist/esm/components/card/CCardBody.js +1 -1
  246. package/dist/esm/components/card/CCardFooter.js +1 -1
  247. package/dist/esm/components/card/CCardGroup.js +1 -1
  248. package/dist/esm/components/card/CCardHeader.js +1 -1
  249. package/dist/esm/components/card/CCardImage.js +1 -1
  250. package/dist/esm/components/card/CCardImageOverlay.js +1 -1
  251. package/dist/esm/components/card/CCardLink.js +1 -1
  252. package/dist/esm/components/card/CCardSubtitle.js +1 -1
  253. package/dist/esm/components/card/CCardText.js +1 -1
  254. package/dist/esm/components/card/CCardTitle.js +1 -1
  255. package/dist/esm/components/carousel/CCarousel.js +1 -1
  256. package/dist/esm/components/carousel/CCarouselCaption.js +1 -1
  257. package/dist/esm/components/carousel/CCarouselItem.js +1 -1
  258. package/dist/esm/components/close-button/CCloseButton.js +1 -1
  259. package/dist/esm/components/collapse/CCollapse.js +1 -1
  260. package/dist/esm/components/date-picker/CDatePicker.d.ts +1 -1
  261. package/dist/esm/components/date-picker/CDatePicker.js +1 -1
  262. package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +2 -2
  263. package/dist/esm/components/date-range-picker/CDateRangePicker.js +1 -3
  264. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  265. package/dist/esm/components/date-range-picker/utils.d.ts +16 -0
  266. package/dist/esm/components/date-range-picker/utils.js +18 -2
  267. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  268. package/dist/esm/components/dropdown/CDropdown.js +1 -1
  269. package/dist/esm/components/dropdown/CDropdownDivider.js +1 -1
  270. package/dist/esm/components/dropdown/CDropdownHeader.js +1 -1
  271. package/dist/esm/components/dropdown/CDropdownItem.js +1 -1
  272. package/dist/esm/components/dropdown/CDropdownItemPlain.js +1 -1
  273. package/dist/esm/components/dropdown/CDropdownMenu.js +1 -1
  274. package/dist/esm/components/dropdown/CDropdownToggle.js +2 -2
  275. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  276. package/dist/esm/components/element-cover/CElementCover.js +1 -1
  277. package/dist/esm/components/footer/CFooter.js +1 -1
  278. package/dist/esm/components/form/CForm.js +1 -1
  279. package/dist/esm/components/form/CFormCheck.js +1 -1
  280. package/dist/esm/components/form/CFormControlValidation.js +1 -1
  281. package/dist/esm/components/form/CFormControlWrapper.js +1 -1
  282. package/dist/esm/components/form/CFormFeedback.js +1 -1
  283. package/dist/esm/components/form/CFormFloating.js +1 -1
  284. package/dist/esm/components/form/CFormInput.js +1 -1
  285. package/dist/esm/components/form/CFormLabel.js +1 -1
  286. package/dist/esm/components/form/CFormRange.js +1 -1
  287. package/dist/esm/components/form/CFormSelect.js +1 -1
  288. package/dist/esm/components/form/CFormSwitch.js +1 -1
  289. package/dist/esm/components/form/CFormText.js +1 -1
  290. package/dist/esm/components/form/CFormTextarea.js +1 -1
  291. package/dist/esm/components/form/CInputGroup.js +1 -1
  292. package/dist/esm/components/form/CInputGroupText.js +1 -1
  293. package/dist/esm/components/grid/CCol.js +1 -1
  294. package/dist/esm/components/grid/CContainer.js +1 -1
  295. package/dist/esm/components/grid/CRow.js +1 -1
  296. package/dist/esm/components/header/CHeader.js +1 -1
  297. package/dist/esm/components/header/CHeaderBrand.js +1 -1
  298. package/dist/esm/components/header/CHeaderDivider.js +1 -1
  299. package/dist/esm/components/header/CHeaderNav.js +1 -1
  300. package/dist/esm/components/header/CHeaderText.js +1 -1
  301. package/dist/esm/components/header/CHeaderToggler.js +1 -1
  302. package/dist/esm/components/image/CImage.js +1 -1
  303. package/dist/esm/components/link/CLink.js +1 -1
  304. package/dist/esm/components/list-group/CListGroup.js +1 -1
  305. package/dist/esm/components/list-group/CListGroupItem.js +1 -1
  306. package/dist/esm/components/loading-button/CLoadingButton.js +1 -1
  307. package/dist/esm/components/modal/CModal.js +1 -2
  308. package/dist/esm/components/modal/CModal.js.map +1 -1
  309. package/dist/esm/components/modal/CModalBody.js +1 -1
  310. package/dist/esm/components/modal/CModalContent.js +1 -1
  311. package/dist/esm/components/modal/CModalDialog.js +1 -1
  312. package/dist/esm/components/modal/CModalFooter.js +1 -1
  313. package/dist/esm/components/modal/CModalHeader.js +1 -1
  314. package/dist/esm/components/modal/CModalTitle.js +1 -1
  315. package/dist/esm/components/multi-select/CMultiSelect.js +1 -1
  316. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js +1 -1
  317. package/dist/esm/components/multi-select/CMultiSelectOptions.js +1 -1
  318. package/dist/esm/components/multi-select/utils.js +1 -1
  319. package/dist/esm/components/nav/CNav.js +1 -1
  320. package/dist/esm/components/nav/CNavGroup.js +2 -2
  321. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  322. package/dist/esm/components/nav/CNavGroupItems.js +1 -1
  323. package/dist/esm/components/nav/CNavItem.js +1 -1
  324. package/dist/esm/components/nav/CNavLink.js +1 -1
  325. package/dist/esm/components/nav/CNavTitle.js +1 -1
  326. package/dist/esm/components/navbar/CNavbar.js +1 -1
  327. package/dist/esm/components/navbar/CNavbarBrand.js +1 -1
  328. package/dist/esm/components/navbar/CNavbarNav.js +1 -1
  329. package/dist/esm/components/navbar/CNavbarText.js +1 -1
  330. package/dist/esm/components/navbar/CNavbarToggler.js +1 -1
  331. package/dist/esm/components/offcanvas/COffcanvas.js +1 -1
  332. package/dist/esm/components/offcanvas/COffcanvasBody.js +1 -1
  333. package/dist/esm/components/offcanvas/COffcanvasHeader.js +1 -1
  334. package/dist/esm/components/offcanvas/COffcanvasTitle.js +1 -1
  335. package/dist/esm/components/pagination/CPagination.js +1 -1
  336. package/dist/esm/components/pagination/CPaginationItem.js +1 -1
  337. package/dist/esm/components/picker/CPicker.js +1 -1
  338. package/dist/esm/components/placeholder/CPlaceholder.js +1 -1
  339. package/dist/esm/components/popover/CPopover.js +1 -1
  340. package/dist/esm/components/progress/CProgress.d.ts +1 -1
  341. package/dist/esm/components/progress/CProgress.js +1 -1
  342. package/dist/esm/components/progress/CProgressBar.js +1 -1
  343. package/dist/esm/components/progress/CProgressStacked.js +1 -1
  344. package/dist/esm/components/range-slider/CRangeSlider.js +7 -3
  345. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
  346. package/dist/esm/components/range-slider/utils.js +1 -1
  347. package/dist/esm/components/rating/CRating.js +1 -1
  348. package/dist/esm/components/sidebar/CSidebar.d.ts +7 -2
  349. package/dist/esm/components/sidebar/CSidebar.js +8 -7
  350. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  351. package/dist/esm/components/sidebar/CSidebarBrand.js +1 -1
  352. package/dist/esm/components/sidebar/CSidebarFooter.js +1 -1
  353. package/dist/esm/components/sidebar/CSidebarHeader.js +1 -1
  354. package/dist/esm/components/sidebar/CSidebarNav.js +1 -1
  355. package/dist/esm/components/sidebar/CSidebarToggler.js +1 -1
  356. package/dist/esm/components/smart-pagination/CSmartPagination.d.ts +4 -12
  357. package/dist/esm/components/smart-pagination/CSmartPagination.js +1 -1
  358. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  359. package/dist/esm/components/smart-table/CSmartTable.js +1 -1
  360. package/dist/esm/components/smart-table/CSmartTableBody.js +1 -1
  361. package/dist/esm/components/smart-table/CSmartTableHead.js +12 -27
  362. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  363. package/dist/esm/components/smart-table/utils.js +1 -1
  364. package/dist/esm/components/spinner/CSpinner.js +1 -1
  365. package/dist/esm/components/table/CTable.js +1 -1
  366. package/dist/esm/components/table/CTableBody.js +1 -1
  367. package/dist/esm/components/table/CTableCaption.js +1 -1
  368. package/dist/esm/components/table/CTableDataCell.js +1 -1
  369. package/dist/esm/components/table/CTableFoot.js +1 -1
  370. package/dist/esm/components/table/CTableHead.js +1 -1
  371. package/dist/esm/components/table/CTableHeaderCell.js +1 -1
  372. package/dist/esm/components/table/CTableResponsiveWrapper.js +1 -1
  373. package/dist/esm/components/table/CTableRow.js +1 -1
  374. package/dist/esm/components/tabs/CTab.js +1 -1
  375. package/dist/esm/components/tabs/CTabContent.js +1 -1
  376. package/dist/esm/components/tabs/CTabList.js +1 -1
  377. package/dist/esm/components/tabs/CTabPane.js +1 -1
  378. package/dist/esm/components/tabs/CTabPanel.js +1 -1
  379. package/dist/esm/components/time-picker/CTimePicker.d.ts +1 -1
  380. package/dist/esm/components/time-picker/CTimePicker.js +1 -1
  381. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  382. package/dist/esm/components/time-picker/CTimePickerRollCol.js +1 -1
  383. package/dist/esm/components/time-picker/types.d.ts +5 -0
  384. package/dist/esm/components/time-picker/utils.d.ts +8 -11
  385. package/dist/esm/components/time-picker/utils.js +8 -4
  386. package/dist/esm/components/time-picker/utils.js.map +1 -1
  387. package/dist/esm/components/toast/CToast.js +1 -1
  388. package/dist/esm/components/toast/CToastBody.js +1 -1
  389. package/dist/esm/components/toast/CToastClose.js +1 -1
  390. package/dist/esm/components/toast/CToastHeader.js +1 -1
  391. package/dist/esm/components/toast/CToaster.js +1 -1
  392. package/dist/esm/components/tooltip/CTooltip.js +1 -1
  393. package/dist/esm/components/virtual-scroller/CVirtualScroller.js +1 -1
  394. package/dist/esm/components/widgets/CWidgetStatsA.js +1 -1
  395. package/dist/esm/components/widgets/CWidgetStatsB.js +1 -1
  396. package/dist/esm/components/widgets/CWidgetStatsC.js +1 -1
  397. package/dist/esm/components/widgets/CWidgetStatsD.js +1 -1
  398. package/dist/esm/components/widgets/CWidgetStatsE.js +1 -1
  399. package/dist/esm/components/widgets/CWidgetStatsF.js +1 -1
  400. package/dist/esm/hooks/index.d.ts +2 -1
  401. package/dist/esm/hooks/useClipboard.d.ts +12 -0
  402. package/dist/esm/hooks/useClipboard.js +52 -0
  403. package/dist/esm/hooks/useClipboard.js.map +1 -0
  404. package/dist/esm/hooks/useColorModes.js +5 -5
  405. package/dist/esm/hooks/useColorModes.js.map +1 -1
  406. package/dist/esm/hooks/useDropdownWithPopper.js +1 -1
  407. package/dist/esm/index.js +1 -0
  408. package/dist/esm/index.js.map +1 -1
  409. package/dist/esm/node_modules/classnames/index.js.map +1 -1
  410. package/dist/esm/node_modules/react-device-detect/dist/lib.js +1 -1
  411. package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
  412. package/dist/esm/node_modules/tslib/tslib.es6.js +95 -0
  413. package/dist/esm/{packages/coreui-react-pro/node_modules → node_modules}/tslib/tslib.es6.js.map +1 -1
  414. package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js +2 -2
  415. package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
  416. package/dist/esm/utils/index.d.ts +2 -1
  417. package/dist/esm/utils/mergeClassNames.d.ts +2 -0
  418. package/package.json +13 -11
  419. package/src/components/accordion/CAccordionButton.tsx +3 -2
  420. package/src/components/accordion/CAccordionItem.tsx +8 -3
  421. package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap +0 -2
  422. package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.tsx.snap +0 -2
  423. package/src/components/badge/CBadge.tsx +1 -1
  424. package/src/components/calendar/CCalendar.tsx +156 -489
  425. package/src/components/calendar/CCalendarNavigation.tsx +120 -0
  426. package/src/components/calendar/CCalendarPanel.tsx +306 -0
  427. package/src/components/calendar/types.ts +5 -0
  428. package/src/components/calendar/utils.ts +428 -110
  429. package/src/components/carousel/__tests__/CCarousel.spec.tsx +1 -2
  430. package/src/components/date-picker/CDatePicker.tsx +1 -1
  431. package/src/components/date-range-picker/CDateRangePicker.tsx +2 -4
  432. package/src/components/date-range-picker/utils.ts +23 -3
  433. package/src/components/dropdown/CDropdownToggle.tsx +1 -1
  434. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +43 -19
  435. package/src/components/modal/CModal.tsx +0 -2
  436. package/src/components/modal/__tests__/CModal.spec.tsx +33 -25
  437. package/src/components/nav/CNavGroup.tsx +5 -1
  438. package/src/components/nav/__tests__/__snapshots__/CNavGroup.spec.tsx.snap +4 -1
  439. package/src/components/popover/__tests__/CPopover.spec.tsx +1 -1
  440. package/src/components/popover/__tests__/__snapshots__/CPopover.spec.tsx.snap +2 -3
  441. package/src/components/progress/CProgress.tsx +1 -1
  442. package/src/components/range-slider/CRangeSlider.tsx +7 -2
  443. package/src/components/sidebar/CSidebar.tsx +15 -5
  444. package/src/components/smart-pagination/CSmartPagination.tsx +4 -12
  445. package/src/components/smart-table/CSmartTableHead.tsx +7 -34
  446. package/src/components/time-picker/CTimePicker.tsx +3 -3
  447. package/src/components/time-picker/types.ts +7 -0
  448. package/src/components/time-picker/utils.ts +15 -13
  449. package/src/components/tooltip/__tests__/__snapshots__/CTooltip.spec.tsx.snap +0 -1
  450. package/src/hooks/index.ts +2 -0
  451. package/src/hooks/useClipboard.ts +38 -0
  452. package/src/hooks/useColorModes.ts +5 -5
  453. package/src/utils/index.ts +2 -0
  454. package/src/utils/mergeClassNames.ts +25 -0
  455. package/dist/cjs/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js +0 -60
  456. package/dist/esm/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js +0 -57
@@ -1,593 +1,250 @@
1
- import React, { forwardRef, KeyboardEvent, ReactNode, useEffect, useRef, useState } from 'react'
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 { CButton } from '../button/CButton'
5
+ import { CCalendarNavigation } from './CCalendarNavigation'
6
6
 
7
7
  import {
8
8
  convertToDateObject,
9
- createGroupsInArray,
10
9
  getCalendarDate,
11
10
  getDateBySelectionType,
12
- getMonthDetails,
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 calendar. This label is read by screen readers to describe the action associated with the button.
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 calendar. This label is intended for screen readers to help users understand the button's functionality.
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 calendar. Screen readers will use this label to explain the purpose of the button.
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 calendar. This label helps screen reader users understand the button's function.
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
- * Default date of the component
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
- * The number of calendars that render on desktop devices.
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 className you want applied to the component.
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
- * Set the format of day name.
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
- * Specify the list of dates that cannot be selected.
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?: Date[] | Date[][] | (Date | Date[])[]
81
+ disabledDates?: DisabledDate | DisabledDate[]
82
+
73
83
  /**
74
- * Initial selected to date (range).
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 start week.
79
- * - 0 - Sunday,
80
- * - 1 - Monday,
81
- * - 2 - Tuesday,
82
- * - 3 - Wednesday,
83
- * - 4 - Thursday,
84
- * - 5 - Friday,
85
- * - 6 - Saturday,
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
- * Sets the default locale for components. If not set, it is inherited from the browser.
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
- * Max selectable date.
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
- * Min selectable date.
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
- * Show arrows navigation.
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
- * The custom next icon.
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
- * The custom next double icon.
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
- * The custom prev icon.
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
- * The custom prev double icon.
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
- * Reorder year-month navigation, and render year first.
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
- * Allow range selection.
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
- * Set whether days in adjacent months shown before or after the current month are selectable. This only applies if the `showAdjacementDays` option is set to true.
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
- * Set whether to display dates in adjacent months (non-selectable) at the start and end of the current month.
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
- * Set whether to display week numbers in the calendar.
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
- * Toggle select mode between start and end date.
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
- * Specify the type of date selection as day, week, month, or year.
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?: 'day' | 'week' | 'month' | 'year'
196
+ selectionType?: SelectionTypes
197
+
162
198
  /**
163
- * Initial selected date.
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
- * Set length or format of day name.
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
- * Label displayed over week numbers in the calendar.
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 changed.
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 the calendar cell.
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 fired when the start date changed.
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 // TODO: remove formatedDate?
230
+ onStartDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
231
+
190
232
  /**
191
- * Callback fired when the end date changed.
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 // TODO: remove formatedDate?
235
+ onEndDateChange?: (date: Date | string | null, formatedDate?: string | undefined) => void
236
+
194
237
  /**
195
- * Callback fired when the selection type changed.
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 type of calendar changed.
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
- if (selectionType === 'day' || selectionType === 'week') {
639
- setView('days')
640
- return
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
- if (selectionType === 'year') {
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
- typeof _selectEndDate === 'boolean' &&
718
- onSelectEndChange &&
719
- onSelectEndChange(_selectEndDate)
367
+ if (!isInitialMount.current && typeof _selectEndDate === 'boolean') {
368
+ onSelectEndChange?.(_selectEndDate)
369
+ }
720
370
  }, [_selectEndDate])
721
371
 
722
- const [view, setView] = useStateWithCallback<'days' | 'months' | 'years'>('days', onViewChanged)
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
- years && d.setFullYear(d.getFullYear() + years)
738
- months && d.setMonth(d.getMonth() + months)
739
- typeof setMonth === 'number' && d.setMonth(setMonth)
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 && onCalendarDateChange(d)
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
- maxDate &&
828
- date >= convertToDateObject(maxDate, selectionType) &&
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
- minDate &&
836
- date <= convertToDateObject(minDate, selectionType) &&
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[] = [].concat(
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: HTMLElement[] = [].concat(
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[_list.length - 1].focus()
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
- date && onDateHover && onDateHover(getDateBySelectionType(date, selectionType))
607
+ if (date) {
608
+ onDateHover?.(getDateBySelectionType(date, selectionType))
609
+ }
943
610
  }
944
611
 
945
612
  const handleCalendarMouseLeave = () => {
946
613
  setHoverDate(null)
947
- onDateHover && onDateHover(null)
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
- <Navigation
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
- <Calendar
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,