@coreui/react-pro 5.17.0 → 5.18.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 (320) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  3. package/dist/cjs/components/accordion/CAccordionCollapse.d.ts +3 -0
  4. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  5. package/dist/cjs/components/alert/CAlert.js +1 -5
  6. package/dist/cjs/components/alert/CAlert.js.map +1 -1
  7. package/dist/cjs/components/autocomplete/CAutocomplete.d.ts +229 -0
  8. package/dist/cjs/components/autocomplete/CAutocomplete.js +293 -0
  9. package/dist/cjs/components/autocomplete/CAutocomplete.js.map +1 -0
  10. package/dist/cjs/components/autocomplete/CAutocompleteOptions.d.ts +17 -0
  11. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js +72 -0
  12. package/dist/cjs/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  13. package/dist/cjs/components/autocomplete/index.d.ts +2 -0
  14. package/dist/cjs/components/autocomplete/types.d.ts +18 -0
  15. package/dist/cjs/components/autocomplete/utils.d.ts +11 -0
  16. package/dist/cjs/components/autocomplete/utils.js +107 -0
  17. package/dist/cjs/components/autocomplete/utils.js.map +1 -0
  18. package/dist/cjs/components/backdrop/CBackdrop.js +1 -5
  19. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  20. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  21. package/dist/cjs/components/calendar/CCalendarNavigation.js.map +1 -1
  22. package/dist/cjs/components/calendar/CCalendarPanel.js +6 -7
  23. package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -1
  24. package/dist/cjs/components/calendar/utils.d.ts +30 -5
  25. package/dist/cjs/components/calendar/utils.js +20 -9
  26. package/dist/cjs/components/calendar/utils.js.map +1 -1
  27. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  28. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  29. package/dist/cjs/components/collapse/CCollapse.js +1 -5
  30. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  31. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  32. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +10 -6
  33. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  34. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  35. package/dist/cjs/components/dropdown/CDropdown.js +70 -56
  36. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  37. package/dist/cjs/components/dropdown/CDropdownContext.d.ts +3 -2
  38. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  39. package/dist/cjs/components/dropdown/CDropdownToggle.js +18 -16
  40. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  41. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  42. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  43. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  44. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  45. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  46. package/dist/cjs/components/form/CFormSelect.js.map +1 -1
  47. package/dist/cjs/components/grid/CCol.js.map +1 -1
  48. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  49. package/dist/cjs/components/grid/CRow.js.map +1 -1
  50. package/dist/cjs/components/index.d.ts +1 -0
  51. package/dist/cjs/components/link/CLink.js.map +1 -1
  52. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  53. package/dist/cjs/components/modal/CModal.js +1 -5
  54. package/dist/cjs/components/modal/CModal.js.map +1 -1
  55. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  56. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  57. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  58. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  59. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  60. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  61. package/dist/cjs/components/nav/CNavGroup.js +1 -5
  62. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  63. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  64. package/dist/cjs/components/offcanvas/COffcanvas.js +1 -5
  65. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  66. package/dist/cjs/components/password-input/CPasswordInput.js.map +1 -1
  67. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  68. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  69. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  70. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  71. package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
  72. package/dist/cjs/components/range-slider/utils.js.map +1 -1
  73. package/dist/cjs/components/rating/CRating.js.map +1 -1
  74. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  75. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  76. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  77. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  78. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  79. package/dist/cjs/components/smart-table/CSmartTableFilter.d.ts +8 -0
  80. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  81. package/dist/cjs/components/smart-table/CSmartTableItemsPerPageSelector.d.ts +8 -0
  82. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  83. package/dist/cjs/components/stepper/CStepper.js.map +1 -1
  84. package/dist/cjs/components/table/CTable.js.map +1 -1
  85. package/dist/cjs/components/table/utils.js.map +1 -1
  86. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  87. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  88. package/dist/cjs/components/tabs/CTabPane.js +1 -5
  89. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  90. package/dist/cjs/components/tabs/CTabPanel.js +1 -5
  91. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  92. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  93. package/dist/cjs/components/time-picker/CTimePicker.js +15 -1
  94. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  95. package/dist/cjs/components/time-picker/CTimePickerRollCol.js +2 -2
  96. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  97. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  98. package/dist/cjs/components/toast/CToast.js +1 -5
  99. package/dist/cjs/components/toast/CToast.js.map +1 -1
  100. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  101. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  102. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  103. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  104. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  105. package/dist/cjs/hooks/useClipboard.js.map +1 -1
  106. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  107. package/dist/cjs/hooks/useDebounce.js.map +1 -1
  108. package/dist/cjs/hooks/useDebouncedCallback.js.map +1 -1
  109. package/dist/cjs/hooks/useDropdownWithPopper.js.map +1 -1
  110. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  111. package/dist/cjs/hooks/useIsVisible.d.ts +1 -1
  112. package/dist/cjs/hooks/useIsVisible.js +3 -1
  113. package/dist/cjs/hooks/useIsVisible.js.map +1 -1
  114. package/dist/cjs/hooks/usePopper.js.map +1 -1
  115. package/dist/cjs/hooks/useStateWithCallback.js.map +1 -1
  116. package/dist/cjs/index.js +2 -0
  117. package/dist/cjs/index.js.map +1 -1
  118. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  119. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  120. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -1
  121. package/dist/cjs/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
  122. package/dist/cjs/node_modules/classnames/index.js.map +1 -1
  123. package/dist/cjs/node_modules/dom-helpers/esm/removeClass.js.map +1 -1
  124. package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
  125. package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
  126. package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  127. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  128. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  129. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  130. package/dist/cjs/utils/getNextSibling.d.ts +2 -0
  131. package/dist/cjs/utils/getNextSibling.js +20 -0
  132. package/dist/cjs/utils/getNextSibling.js.map +1 -0
  133. package/dist/cjs/utils/getPreviousSibling.d.ts +2 -0
  134. package/dist/cjs/utils/getPreviousSibling.js +19 -0
  135. package/dist/cjs/utils/getPreviousSibling.js.map +1 -0
  136. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  137. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  138. package/dist/cjs/utils/index.d.ts +3 -1
  139. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  140. package/dist/cjs/utils/isRTL.js.map +1 -1
  141. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  142. package/dist/esm/components/accordion/CAccordionCollapse.d.ts +3 -0
  143. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  144. package/dist/esm/components/alert/CAlert.js +1 -5
  145. package/dist/esm/components/alert/CAlert.js.map +1 -1
  146. package/dist/esm/components/autocomplete/CAutocomplete.d.ts +229 -0
  147. package/dist/esm/components/autocomplete/CAutocomplete.js +291 -0
  148. package/dist/esm/components/autocomplete/CAutocomplete.js.map +1 -0
  149. package/dist/esm/components/autocomplete/CAutocompleteOptions.d.ts +17 -0
  150. package/dist/esm/components/autocomplete/CAutocompleteOptions.js +70 -0
  151. package/dist/esm/components/autocomplete/CAutocompleteOptions.js.map +1 -0
  152. package/dist/esm/components/autocomplete/index.d.ts +2 -0
  153. package/dist/esm/components/autocomplete/types.d.ts +18 -0
  154. package/dist/esm/components/autocomplete/utils.d.ts +11 -0
  155. package/dist/esm/components/autocomplete/utils.js +96 -0
  156. package/dist/esm/components/autocomplete/utils.js.map +1 -0
  157. package/dist/esm/components/backdrop/CBackdrop.js +1 -5
  158. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  159. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  160. package/dist/esm/components/calendar/CCalendarNavigation.js.map +1 -1
  161. package/dist/esm/components/calendar/CCalendarPanel.js +7 -8
  162. package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -1
  163. package/dist/esm/components/calendar/utils.d.ts +30 -5
  164. package/dist/esm/components/calendar/utils.js +20 -9
  165. package/dist/esm/components/calendar/utils.js.map +1 -1
  166. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  167. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  168. package/dist/esm/components/collapse/CCollapse.js +1 -5
  169. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  170. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  171. package/dist/esm/components/date-range-picker/CDateRangePicker.js +10 -6
  172. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  173. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  174. package/dist/esm/components/dropdown/CDropdown.js +71 -57
  175. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  176. package/dist/esm/components/dropdown/CDropdownContext.d.ts +3 -2
  177. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  178. package/dist/esm/components/dropdown/CDropdownToggle.js +18 -16
  179. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  180. package/dist/esm/components/dropdown/utils.js.map +1 -1
  181. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  182. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  183. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  184. package/dist/esm/components/form/CFormInput.js.map +1 -1
  185. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  186. package/dist/esm/components/grid/CCol.js.map +1 -1
  187. package/dist/esm/components/grid/CContainer.js.map +1 -1
  188. package/dist/esm/components/grid/CRow.js.map +1 -1
  189. package/dist/esm/components/index.d.ts +1 -0
  190. package/dist/esm/components/link/CLink.js.map +1 -1
  191. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  192. package/dist/esm/components/modal/CModal.js +1 -5
  193. package/dist/esm/components/modal/CModal.js.map +1 -1
  194. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  195. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  196. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  197. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  198. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  199. package/dist/esm/components/multi-select/utils.js.map +1 -1
  200. package/dist/esm/components/nav/CNavGroup.js +1 -5
  201. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  202. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  203. package/dist/esm/components/offcanvas/COffcanvas.js +1 -5
  204. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  205. package/dist/esm/components/password-input/CPasswordInput.js.map +1 -1
  206. package/dist/esm/components/picker/CPicker.js.map +1 -1
  207. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  208. package/dist/esm/components/popover/CPopover.js.map +1 -1
  209. package/dist/esm/components/progress/CProgress.js.map +1 -1
  210. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
  211. package/dist/esm/components/range-slider/utils.js.map +1 -1
  212. package/dist/esm/components/rating/CRating.js.map +1 -1
  213. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  214. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  215. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  216. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  217. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  218. package/dist/esm/components/smart-table/CSmartTableFilter.d.ts +8 -0
  219. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  220. package/dist/esm/components/smart-table/CSmartTableItemsPerPageSelector.d.ts +8 -0
  221. package/dist/esm/components/smart-table/utils.js.map +1 -1
  222. package/dist/esm/components/stepper/CStepper.js.map +1 -1
  223. package/dist/esm/components/table/CTable.js.map +1 -1
  224. package/dist/esm/components/table/utils.js.map +1 -1
  225. package/dist/esm/components/tabs/CTab.js.map +1 -1
  226. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  227. package/dist/esm/components/tabs/CTabPane.js +1 -5
  228. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  229. package/dist/esm/components/tabs/CTabPanel.js +1 -5
  230. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  231. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  232. package/dist/esm/components/time-picker/CTimePicker.js +15 -1
  233. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  234. package/dist/esm/components/time-picker/CTimePickerRollCol.js +2 -2
  235. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  236. package/dist/esm/components/time-picker/utils.js.map +1 -1
  237. package/dist/esm/components/toast/CToast.js +1 -5
  238. package/dist/esm/components/toast/CToast.js.map +1 -1
  239. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  240. package/dist/esm/components/toast/CToaster.js.map +1 -1
  241. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  242. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  243. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  244. package/dist/esm/hooks/useClipboard.js.map +1 -1
  245. package/dist/esm/hooks/useColorModes.js.map +1 -1
  246. package/dist/esm/hooks/useDebounce.js.map +1 -1
  247. package/dist/esm/hooks/useDebouncedCallback.js.map +1 -1
  248. package/dist/esm/hooks/useDropdownWithPopper.js.map +1 -1
  249. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  250. package/dist/esm/hooks/useIsVisible.d.ts +1 -1
  251. package/dist/esm/hooks/useIsVisible.js +3 -1
  252. package/dist/esm/hooks/useIsVisible.js.map +1 -1
  253. package/dist/esm/hooks/usePopper.js.map +1 -1
  254. package/dist/esm/hooks/useStateWithCallback.js.map +1 -1
  255. package/dist/esm/index.js +1 -0
  256. package/dist/esm/index.js.map +1 -1
  257. package/dist/esm/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  258. package/dist/esm/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  259. package/dist/esm/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -1
  260. package/dist/esm/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
  261. package/dist/esm/node_modules/classnames/index.js.map +1 -1
  262. package/dist/esm/node_modules/dom-helpers/esm/removeClass.js.map +1 -1
  263. package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
  264. package/dist/esm/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
  265. package/dist/esm/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  266. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  267. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  268. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  269. package/dist/esm/utils/getNextSibling.d.ts +2 -0
  270. package/dist/esm/utils/getNextSibling.js +15 -0
  271. package/dist/esm/utils/getNextSibling.js.map +1 -0
  272. package/dist/esm/utils/getPreviousSibling.d.ts +2 -0
  273. package/dist/esm/utils/getPreviousSibling.js +15 -0
  274. package/dist/esm/utils/getPreviousSibling.js.map +1 -0
  275. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  276. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  277. package/dist/esm/utils/index.d.ts +3 -1
  278. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  279. package/dist/esm/utils/isRTL.js.map +1 -1
  280. package/package.json +7 -7
  281. package/src/components/autocomplete/CAutocomplete.tsx +802 -0
  282. package/src/components/autocomplete/CAutocompleteOptions.tsx +165 -0
  283. package/src/components/autocomplete/__tests__/CAutocomplete.spec.tsx +244 -0
  284. package/src/components/autocomplete/__tests__/CAutocompleteOptions.spec.tsx +210 -0
  285. package/src/components/autocomplete/index.ts +3 -0
  286. package/src/components/autocomplete/types.ts +25 -0
  287. package/src/components/autocomplete/utils.ts +125 -0
  288. package/src/components/calendar/CCalendarPanel.tsx +5 -15
  289. package/src/components/calendar/utils.ts +50 -10
  290. package/src/components/date-range-picker/CDateRangePicker.tsx +11 -5
  291. package/src/components/dropdown/CDropdown.tsx +86 -60
  292. package/src/components/dropdown/CDropdownContext.ts +3 -3
  293. package/src/components/dropdown/CDropdownToggle.tsx +30 -28
  294. package/src/components/index.ts +1 -0
  295. package/src/components/time-picker/CTimePicker.tsx +14 -4
  296. package/src/components/time-picker/CTimePickerRollCol.tsx +2 -2
  297. package/src/hooks/useIsVisible.ts +5 -2
  298. package/src/utils/getNextSibling.ts +18 -0
  299. package/src/utils/getPreviousSibling.ts +18 -0
  300. package/src/utils/index.ts +4 -0
  301. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -11
  302. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +0 -1
  303. package/dist/cjs/node_modules/react-transition-group/esm/ReplaceTransition.js +0 -143
  304. package/dist/cjs/node_modules/react-transition-group/esm/ReplaceTransition.js.map +0 -1
  305. package/dist/cjs/node_modules/react-transition-group/esm/SwitchTransition.js +0 -263
  306. package/dist/cjs/node_modules/react-transition-group/esm/SwitchTransition.js.map +0 -1
  307. package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroup.js +0 -195
  308. package/dist/cjs/node_modules/react-transition-group/esm/TransitionGroup.js.map +0 -1
  309. package/dist/cjs/node_modules/react-transition-group/esm/utils/ChildMapping.js +0 -149
  310. package/dist/cjs/node_modules/react-transition-group/esm/utils/ChildMapping.js.map +0 -1
  311. package/dist/esm/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -7
  312. package/dist/esm/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +0 -1
  313. package/dist/esm/node_modules/react-transition-group/esm/ReplaceTransition.js +0 -139
  314. package/dist/esm/node_modules/react-transition-group/esm/ReplaceTransition.js.map +0 -1
  315. package/dist/esm/node_modules/react-transition-group/esm/SwitchTransition.js +0 -258
  316. package/dist/esm/node_modules/react-transition-group/esm/SwitchTransition.js.map +0 -1
  317. package/dist/esm/node_modules/react-transition-group/esm/TransitionGroup.js +0 -191
  318. package/dist/esm/node_modules/react-transition-group/esm/TransitionGroup.js.map +0 -1
  319. package/dist/esm/node_modules/react-transition-group/esm/utils/ChildMapping.js +0 -144
  320. package/dist/esm/node_modules/react-transition-group/esm/utils/ChildMapping.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ import type { Option, OptionsGroup, Search } from './types'
2
+
3
+ export const filterOptions = (
4
+ options: (Option | OptionsGroup)[],
5
+ search: string
6
+ ): (Option | OptionsGroup)[] => {
7
+ const result: (Option | OptionsGroup)[] = []
8
+
9
+ options.forEach((item: Option | OptionsGroup) => {
10
+ if (typeof item !== 'string' && 'options' in item && Array.isArray(item.options)) {
11
+ const filteredOptions = filterOptions(item.options, search)
12
+ if (filteredOptions.length > 0) {
13
+ result.push({ ...item, options: filteredOptions })
14
+ }
15
+ } else if (getOptionLabel(item).toLowerCase().includes(search.toLowerCase())) {
16
+ result.push(item)
17
+ }
18
+ })
19
+
20
+ return result
21
+ }
22
+
23
+ export const flattenOptionsArray = (
24
+ options: (Option | OptionsGroup)[]
25
+ ): (Option | OptionsGroup)[] => {
26
+ const optionsList: (Option | OptionsGroup)[] = []
27
+
28
+ for (const option of options) {
29
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
30
+ optionsList.push(...option.options)
31
+ } else {
32
+ optionsList.push(option)
33
+ }
34
+ }
35
+
36
+ return optionsList
37
+ }
38
+
39
+ export const isExternalSearch = (search: Search | undefined): boolean => {
40
+ return (
41
+ (typeof search === 'string' && search === 'external') ||
42
+ (typeof search === 'object' && search.external === true)
43
+ )
44
+ }
45
+
46
+ export const isGlobalSearch = (search: Search | undefined): boolean => {
47
+ return (
48
+ (typeof search === 'string' && search === 'global') ||
49
+ (typeof search === 'object' && search.global === true)
50
+ )
51
+ }
52
+
53
+ export const getOptionLabel = (option: Option) =>
54
+ typeof option === 'string' ? option : option.label
55
+
56
+ export const highlightSubstring = (string: string, query?: string) => {
57
+ if (query) {
58
+ const regex = new RegExp(query, 'gi')
59
+ return string.replace(regex, (string) => `<strong>${string}</strong>`)
60
+ }
61
+
62
+ return string
63
+ }
64
+
65
+ export const isOptionDisabled = (option: Option | OptionsGroup | string) =>
66
+ typeof option === 'string' ? false : option.disabled
67
+
68
+ export const isOptionSelected = (
69
+ option: Option | OptionsGroup | string,
70
+ selected: Option | null
71
+ ) => {
72
+ if (!selected) {
73
+ return false
74
+ }
75
+
76
+ if (typeof option === 'string' && typeof selected === 'string') {
77
+ return selected === option
78
+ }
79
+
80
+ if (typeof option !== 'string' && typeof selected !== 'string') {
81
+ return selected.label === option.label
82
+ }
83
+
84
+ return false
85
+ }
86
+
87
+ export const getFirstOptionByLabel = (
88
+ value: string,
89
+ options: (Option | OptionsGroup)[]
90
+ ): Option | null => {
91
+ for (const option of options) {
92
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
93
+ const found = getFirstOptionByLabel(value, option.options)
94
+ if (found) {
95
+ return found
96
+ }
97
+ }
98
+
99
+ if (getOptionLabel(option).toLowerCase() === value.toLowerCase()) {
100
+ return option
101
+ }
102
+ }
103
+
104
+ return null
105
+ }
106
+
107
+ export const getFirstOptionByValue = (
108
+ value: number,
109
+ options: (Option | OptionsGroup)[]
110
+ ): Option | null => {
111
+ for (const option of options) {
112
+ if (typeof option !== 'string' && 'options' in option && Array.isArray(option.options)) {
113
+ const found = getFirstOptionByValue(value, option.options)
114
+ if (found) {
115
+ return found
116
+ }
117
+ }
118
+
119
+ if (typeof option !== 'string' && 'value' in option && option.value === value) {
120
+ return option
121
+ }
122
+ }
123
+
124
+ return null
125
+ }
@@ -2,7 +2,6 @@ import React, { forwardRef, KeyboardEvent, useEffect, useState } from 'react'
2
2
  import classNames from 'classnames'
3
3
 
4
4
  import {
5
- convertToDateObject,
6
5
  createGroupsInArray,
7
6
  getMonthDetails,
8
7
  getMonthsNames,
@@ -120,16 +119,11 @@ export const CCalendarPanel = forwardRef<HTMLTableElement, CCalendarPanelProps>(
120
119
  )}
121
120
  <tbody>
122
121
  {view === 'days' &&
123
- monthDetails.map((week, index) => {
124
- const date = convertToDateObject(
125
- week.weekNumber === 0
126
- ? `${calendarDate.getFullYear()}W53`
127
- : `${calendarDate.getFullYear()}W${week.weekNumber}`,
128
- selectionType
129
- )
122
+ monthDetails.map(({ week, days }, index) => {
123
+ const { date } = days[0]
130
124
  const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
131
125
  const isSelected = isDateSelected(date, startDate, endDate)
132
- const current = week.days.some((day) => day.month === 'current')
126
+ const current = days.some((day) => day.month === 'current')
133
127
  return (
134
128
  <tr
135
129
  className={classNames('calendar-row', {
@@ -154,12 +148,8 @@ export const CCalendarPanel = forwardRef<HTMLTableElement, CCalendarPanelProps>(
154
148
  onMouseLeave: () => onCalendarMouseLeave(),
155
149
  })}
156
150
  >
157
- {showWeekNumber && (
158
- <th className="calendar-cell-week-number">
159
- {week.weekNumber === 0 ? 53 : week.weekNumber}
160
- </th>
161
- )}
162
- {week.days.map(({ date, month }: { date: Date; month: string }, idx: number) => {
151
+ {showWeekNumber && <th className="calendar-cell-week-number">{week.number}</th>}
152
+ {days.map(({ date, month }: { date: Date; month: string }, idx: number) => {
163
153
  const isDisabled = isDateDisabled(date, minDate, maxDate, disabledDates)
164
154
  const isSelected = isDateSelected(date, startDate, endDate)
165
155
  return month === 'current' || showAdjacementDays ? (
@@ -87,7 +87,8 @@ export const getDateBySelectionType = (
87
87
  }
88
88
 
89
89
  if (selectionType === 'week') {
90
- return `${date.getFullYear()}W${getWeekNumber(date)}`
90
+ const { year, weekNumber } = getISOWeekNumberAndYear(date)
91
+ return `${year}W${weekNumber.toString().padStart(2, '0')}`
91
92
  }
92
93
 
93
94
  if (selectionType === 'month') {
@@ -138,6 +139,32 @@ export const getFirstAvailableDateInRange = (
138
139
  return null
139
140
  }
140
141
 
142
+ /**
143
+ * Returns the ISO 8601 week string (e.g., "2026W01") for a given date.
144
+ *
145
+ * The ISO week date system considers:
146
+ * - Weeks starting on Monday
147
+ * - Week 1 is the week with the first Thursday of the year
148
+ *
149
+ * @param {Date} date - The date for which to calculate the ISO week and year.
150
+ * @returns {string} The ISO week string in the format "YYYYWww" (e.g., "2026W01").
151
+ */
152
+ export const getISOWeekString = (date: Date): string => {
153
+ const tempDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))
154
+ // Set to nearest Thursday: current date + 4 - current day number (0 is Sunday)
155
+ const day = tempDate.getUTCDay()
156
+ const diff = day <= 4 ? 4 - day : 11 - day
157
+ tempDate.setUTCDate(tempDate.getUTCDate() + diff)
158
+
159
+ const yearStart = new Date(Date.UTC(tempDate.getUTCFullYear(), 0, 1))
160
+ const weekNumber = Math.ceil(((tempDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7)
161
+
162
+ const isoYear = tempDate.getUTCFullYear()
163
+ const weekString = `W${weekNumber.toString().padStart(2, '0')}`
164
+
165
+ return `${isoYear}${weekString}`
166
+ }
167
+
141
168
  /**
142
169
  * Retrieves an array of month names based on locale and format.
143
170
  * @param locale - The locale string (e.g., 'en-US').
@@ -254,12 +281,20 @@ const getTrailingDays = (
254
281
  }
255
282
 
256
283
  /**
257
- * Calculates the ISO week number for a given date.
258
- * @param date - The date to calculate the week number for.
259
- * @returns The ISO week number.
284
+ * Calculates the ISO 8601 week number and year for a given date.
285
+ *
286
+ * In the ISO 8601 standard:
287
+ * - Weeks start on Monday.
288
+ * - The first week of the year is the one that contains January 4th.
289
+ * - The year of the week may differ from the calendar year (e.g., Dec 29, 2025 is in ISO year 2026).
290
+ *
291
+ * @param {Date} date - The date for which to calculate the ISO week number and year.
292
+ * @returns {{ weekNumber: number, year: number }} An object containing:
293
+ * - `weekNumber`: the ISO week number (1–53),
294
+ * - `year`: the ISO year (may differ from the calendar year of the date).
260
295
  */
261
- export const getWeekNumber = (date: Date): number => {
262
- const tempDate = new Date(date.getTime())
296
+ export const getISOWeekNumberAndYear = (date: Date): { weekNumber: number; year: number } => {
297
+ const tempDate = new Date(date)
263
298
  tempDate.setHours(0, 0, 0, 0)
264
299
 
265
300
  // Thursday in current week decides the year
@@ -270,7 +305,7 @@ export const getWeekNumber = (date: Date): number => {
270
305
  // Calculate full weeks to the date
271
306
  const weekNumber = 1 + Math.round((tempDate.getTime() - week1.getTime()) / 86_400_000 / 7)
272
307
 
273
- return weekNumber
308
+ return { weekNumber, year: tempDate.getFullYear() }
274
309
  }
275
310
 
276
311
  /**
@@ -284,22 +319,27 @@ export const getMonthDetails = (
284
319
  year: number,
285
320
  month: number,
286
321
  firstDayOfWeek: number
287
- ): { weekNumber?: number; days: { date: Date; month: string }[] }[] => {
322
+ ): { week: { number: number; year: number }; days: { date: Date; month: string }[] }[] => {
288
323
  const daysPrevMonth = getLeadingDays(year, month, firstDayOfWeek)
289
324
  const daysThisMonth = getMonthDays(year, month)
290
325
  const daysNextMonth = getTrailingDays(year, month, daysPrevMonth, daysThisMonth)
291
326
  const days = [...daysPrevMonth, ...daysThisMonth, ...daysNextMonth]
292
- const weeks: { weekNumber?: number; days: { date: Date; month: string }[] }[] = []
327
+ const weeks: {
328
+ week: { number: number; year: number }
329
+ days: { date: Date; month: string }[]
330
+ }[] = []
293
331
 
294
332
  days.forEach((day, index) => {
295
333
  if (index % 7 === 0 || weeks.length === 0) {
296
334
  weeks.push({
335
+ week: { number: 0, year: 0 },
297
336
  days: [],
298
337
  })
299
338
  }
300
339
 
301
340
  if ((index + 1) % 7 === 0) {
302
- weeks[weeks.length - 1].weekNumber = getWeekNumber(day.date)
341
+ const { weekNumber, year } = getISOWeekNumberAndYear(day.date)
342
+ weeks[weeks.length - 1].week = { number: weekNumber, year }
303
343
  }
304
344
 
305
345
  weeks[weeks.length - 1].days.push(day)
@@ -401,6 +401,8 @@ export const CDateRangePicker = forwardRef<HTMLDivElement | HTMLLIElement, CDate
401
401
  event.stopPropagation()
402
402
  setStartDate(null)
403
403
  setEndDate(null)
404
+ onStartDateChange?.(null)
405
+ onEndDateChange?.(null)
404
406
  }
405
407
 
406
408
  const handleEndDateChange = (date: Date | string | null) => {
@@ -447,13 +449,17 @@ export const CDateRangePicker = forwardRef<HTMLDivElement | HTMLLIElement, CDate
447
449
  const date = inputDateParse
448
450
  ? inputDateParse(value)
449
451
  : getLocalDateFromString(value, locale, timepicker)
452
+
450
453
  if (date instanceof Date && date.getTime()) {
451
454
  setCalendarDate(date)
452
- if (input === 'start') {
453
- setStartDate(date)
454
- } else {
455
- setEndDate(date)
456
- }
455
+ }
456
+
457
+ if (input === 'start') {
458
+ setStartDate(date ?? null)
459
+ onStartDateChange?.(date ?? null)
460
+ } else {
461
+ setEndDate(date ?? null)
462
+ onEndDateChange?.(date ?? null)
457
463
  }
458
464
  }, inputOnChangeDelay)
459
465
 
@@ -1,4 +1,13 @@
1
- import React, { ElementType, forwardRef, HTMLAttributes, useEffect, useRef, useState } from 'react'
1
+ import React, {
2
+ ElementType,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ useCallback,
6
+ useEffect,
7
+ useMemo,
8
+ useRef,
9
+ useState,
10
+ } from 'react'
2
11
  import PropTypes from 'prop-types'
3
12
  import classNames from 'classnames'
4
13
  import type { Options } from '@popperjs/core'
@@ -190,59 +199,64 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
190
199
  ref
191
200
  ) => {
192
201
  const dropdownRef = useRef<HTMLDivElement>(null)
193
- const dropdownToggleRef = useRef<HTMLElement>(null)
194
202
  const dropdownMenuRef = useRef<HTMLDivElement | HTMLUListElement>(null)
195
203
  const forkedRef = useForkedRef(ref, dropdownRef)
204
+ const [dropdownToggleElement, setDropdownToggleElement] = useState<HTMLElement | null>(null)
196
205
  const [_visible, setVisible] = useState(visible)
197
206
  const { initPopper, destroyPopper } = usePopper()
198
207
 
199
- const Component = variant === 'nav-item' ? 'li' : as
200
-
201
- // Disable popper if responsive aligment is set.
202
- if (typeof alignment === 'object') {
203
- popper = false
204
- }
208
+ const dropdownToggleRef = useCallback((node: HTMLElement | null) => {
209
+ if (node) {
210
+ setDropdownToggleElement(node)
211
+ }
212
+ }, [])
205
213
 
206
- const contextValues = {
207
- alignment,
208
- container,
209
- dark,
210
- dropdownToggleRef,
211
- dropdownMenuRef,
212
- popper,
213
- portal,
214
- variant,
215
- visible: _visible,
216
- setVisible,
217
- }
214
+ const allowPopperUse = popper && typeof alignment !== 'object'
215
+ const Component = variant === 'nav-item' ? 'li' : as
218
216
 
219
- const defaultPopperConfig = {
220
- modifiers: [
221
- {
222
- name: 'offset',
223
- options: {
224
- offset: offset,
217
+ const computedPopperConfig: Partial<Options> = useMemo(() => {
218
+ const defaultPopperConfig = {
219
+ modifiers: [
220
+ {
221
+ name: 'offset',
222
+ options: {
223
+ offset,
224
+ },
225
225
  },
226
- },
227
- ],
228
- placement: getPlacement(placement, direction, alignment, isRTL(dropdownMenuRef.current)),
229
- }
226
+ ],
227
+ placement: getPlacement(placement, direction, alignment, isRTL(dropdownMenuRef.current)),
228
+ }
230
229
 
231
- const computedPopperConfig: Partial<Options> = {
232
- ...defaultPopperConfig,
233
- ...(typeof popperConfig === 'function' ? popperConfig(defaultPopperConfig) : popperConfig),
234
- }
230
+ return {
231
+ ...defaultPopperConfig,
232
+ ...(typeof popperConfig === 'function' ? popperConfig(defaultPopperConfig) : popperConfig),
233
+ }
234
+ }, [offset, placement, direction, alignment, popperConfig])
235
235
 
236
236
  useEffect(() => {
237
- setVisible(visible)
237
+ if (visible) {
238
+ handleShow()
239
+ } else {
240
+ handleHide()
241
+ }
238
242
  }, [visible])
239
243
 
240
244
  useEffect(() => {
241
- const toggleElement = dropdownToggleRef.current
245
+ const toggleElement = dropdownToggleElement
246
+ const menuElement = dropdownMenuRef.current
247
+ if (allowPopperUse && menuElement && toggleElement && _visible) {
248
+ initPopper(toggleElement, menuElement, computedPopperConfig)
249
+ }
250
+ }, [dropdownToggleElement])
251
+
252
+ const handleShow = () => {
253
+ const toggleElement = dropdownToggleElement
242
254
  const menuElement = dropdownMenuRef.current
243
255
 
244
- if (_visible && toggleElement && menuElement) {
245
- if (popper) {
256
+ if (toggleElement && menuElement) {
257
+ setVisible(true)
258
+
259
+ if (allowPopperUse) {
246
260
  initPopper(toggleElement, menuElement, computedPopperConfig)
247
261
  }
248
262
 
@@ -255,28 +269,26 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
255
269
 
256
270
  onShow?.()
257
271
  }
272
+ }
258
273
 
259
- return () => {
260
- if (popper) {
261
- destroyPopper()
262
- }
263
-
264
- toggleElement?.removeEventListener('keydown', handleKeydown)
265
- menuElement?.removeEventListener('keydown', handleKeydown)
274
+ const handleHide = () => {
275
+ setVisible(false)
266
276
 
267
- window.removeEventListener('mouseup', handleMouseUp)
268
- window.removeEventListener('keyup', handleKeyup)
277
+ const toggleElement = dropdownToggleElement
278
+ const menuElement = dropdownMenuRef.current
269
279
 
270
- onHide?.()
280
+ if (allowPopperUse) {
281
+ destroyPopper()
271
282
  }
272
- }, [
273
- computedPopperConfig,
274
- destroyPopper,
275
- dropdownMenuRef,
276
- dropdownToggleRef,
277
- initPopper,
278
- _visible,
279
- ])
283
+
284
+ toggleElement?.removeEventListener('keydown', handleKeydown)
285
+ menuElement?.removeEventListener('keydown', handleKeydown)
286
+
287
+ window.removeEventListener('mouseup', handleMouseUp)
288
+ window.removeEventListener('keyup', handleKeyup)
289
+
290
+ onHide?.()
291
+ }
280
292
 
281
293
  const handleKeydown = (event: KeyboardEvent) => {
282
294
  if (
@@ -299,16 +311,16 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
299
311
  }
300
312
 
301
313
  if (event.key === 'Escape') {
302
- setVisible(false)
314
+ handleHide()
303
315
  }
304
316
  }
305
317
 
306
318
  const handleMouseUp = (event: Event) => {
307
- if (!dropdownToggleRef.current || !dropdownMenuRef.current) {
319
+ if (!dropdownToggleElement || !dropdownMenuRef.current) {
308
320
  return
309
321
  }
310
322
 
311
- if (dropdownToggleRef.current.contains(event.target as HTMLElement)) {
323
+ if (dropdownToggleElement.contains(event.target as HTMLElement)) {
312
324
  return
313
325
  }
314
326
 
@@ -317,11 +329,25 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
317
329
  (autoClose === 'inside' && dropdownMenuRef.current.contains(event.target as HTMLElement)) ||
318
330
  (autoClose === 'outside' && !dropdownMenuRef.current.contains(event.target as HTMLElement))
319
331
  ) {
320
- setTimeout(() => setVisible(false), 1)
332
+ setTimeout(() => handleHide(), 1)
321
333
  return
322
334
  }
323
335
  }
324
336
 
337
+ const contextValues = {
338
+ alignment,
339
+ container,
340
+ dark,
341
+ dropdownMenuRef,
342
+ dropdownToggleRef,
343
+ handleHide,
344
+ handleShow,
345
+ popper: allowPopperUse,
346
+ portal,
347
+ variant,
348
+ visible: _visible,
349
+ }
350
+
325
351
  return (
326
352
  <CDropdownContext.Provider value={contextValues}>
327
353
  {variant === 'input-group' ? (
@@ -5,10 +5,10 @@ export interface CDropdownContextProps {
5
5
  alignment?: Alignments
6
6
  container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null
7
7
  dark?: boolean
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- dropdownToggleRef: RefObject<any | null>
10
8
  dropdownMenuRef: RefObject<HTMLDivElement | HTMLUListElement | null>
11
- setVisible: React.Dispatch<React.SetStateAction<boolean | undefined>>
9
+ dropdownToggleRef: (node: HTMLElement | null) => void
10
+ handleHide?: () => void
11
+ handleShow?: () => void
12
12
  popper?: boolean
13
13
  portal?: boolean
14
14
  variant?: 'btn-group' | 'dropdown' | 'input-group' | 'nav-item'
@@ -45,18 +45,24 @@ export const CDropdownToggle: FC<CDropdownToggleProps> = ({
45
45
  trigger = 'click',
46
46
  ...rest
47
47
  }) => {
48
- const { dropdownToggleRef, variant, visible, setVisible } = useContext(CDropdownContext)
48
+ const { dropdownToggleRef, handleHide, handleShow, variant, visible } =
49
+ useContext(CDropdownContext)
49
50
 
50
51
  const triggers = {
51
52
  ...((trigger === 'click' || trigger.includes('click')) && {
52
53
  onClick: (event: React.MouseEvent<HTMLElement>) => {
53
54
  event.preventDefault()
54
- setVisible(!visible)
55
+
56
+ if (visible) {
57
+ handleHide?.()
58
+ } else {
59
+ handleShow?.()
60
+ }
55
61
  },
56
62
  }),
57
63
  ...((trigger === 'focus' || trigger.includes('focus')) && {
58
- onFocus: () => setVisible(true),
59
- onBlur: () => setVisible(false),
64
+ onFocus: () => handleShow?.(),
65
+ onBlur: () => handleHide?.(),
60
66
  }),
61
67
  }
62
68
 
@@ -74,36 +80,32 @@ export const CDropdownToggle: FC<CDropdownToggleProps> = ({
74
80
  ...(!rest.disabled && { ...triggers }),
75
81
  }
76
82
 
77
- const Toggler = () => {
78
- if (custom && React.isValidElement(children)) {
79
- return (
80
- <>
81
- {React.cloneElement(children as React.ReactElement<any>, {
82
- 'aria-expanded': visible,
83
- ...(!rest.disabled && { ...triggers }),
84
- ref: dropdownToggleRef,
85
- })}
86
- </>
87
- )
88
- }
89
-
90
- if (variant === 'nav-item' && navLink) {
91
- return (
92
- <a href="#" {...togglerProps} role="button" {...rest} ref={dropdownToggleRef}>
93
- {children}
94
- </a>
95
- )
96
- }
83
+ if (custom && React.isValidElement(children)) {
84
+ return (
85
+ <>
86
+ {React.cloneElement(children as React.ReactElement<any>, {
87
+ 'aria-expanded': visible,
88
+ ...(!rest.disabled && { ...triggers }),
89
+ ref: dropdownToggleRef,
90
+ })}
91
+ </>
92
+ )
93
+ }
97
94
 
95
+ if (variant === 'nav-item' && navLink) {
98
96
  return (
99
- <CButton {...togglerProps} tabIndex={0} {...rest} ref={dropdownToggleRef}>
97
+ <a href="#" {...togglerProps} role="button" {...rest} ref={dropdownToggleRef}>
100
98
  {children}
101
- {split && <span className="visually-hidden">Toggle Dropdown</span>}
102
- </CButton>
99
+ </a>
103
100
  )
104
101
  }
105
102
 
106
- return <Toggler />
103
+ return (
104
+ <CButton {...togglerProps} tabIndex={0} {...rest} ref={dropdownToggleRef}>
105
+ {children}
106
+ {split && <span className="visually-hidden">Toggle Dropdown</span>}
107
+ </CButton>
108
+ )
107
109
  }
108
110
 
109
111
  CDropdownToggle.propTypes = {
@@ -1,5 +1,6 @@
1
1
  export * from './accordion'
2
2
  export * from './alert'
3
+ export * from './autocomplete'
3
4
  export * from './avatar'
4
5
  export * from './backdrop'
5
6
  export * from './badge'
@@ -278,10 +278,20 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
278
278
  setIsValid(false)
279
279
  }
280
280
 
281
- const handleOnChange = useDebouncedCallback(
282
- (value: string) => isValidTime(value) && setDate(convertTimeToDate(value)),
283
- inputOnChangeDelay
284
- )
281
+ const handleOnChange = useDebouncedCallback((value: string) => {
282
+ if (isValidTime(value)) {
283
+ const date = convertTimeToDate(value)
284
+ setDate(date)
285
+
286
+ if (date) {
287
+ onTimeChange?.(date.toTimeString(), date.toLocaleTimeString(), date)
288
+ } else {
289
+ onTimeChange?.(null)
290
+ }
291
+ } else {
292
+ onTimeChange?.(null)
293
+ }
294
+ }, inputOnChangeDelay)
285
295
 
286
296
  const handleTimeChange = (set: 'hours' | 'minutes' | 'seconds' | 'toggle', value: string) => {
287
297
  const _date = date || new Date('1970-01-01')
@@ -39,7 +39,7 @@ export const CTimePickerRollCol = forwardRef<HTMLDivElement, CTimePickerRollColP
39
39
  const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>, value: number | string) => {
40
40
  if (event.code === 'Space' || event.key === 'Enter') {
41
41
  event.preventDefault()
42
- onClick && onClick(value)
42
+ onClick?.(value)
43
43
  }
44
44
  }
45
45
 
@@ -52,7 +52,7 @@ export const CTimePickerRollCol = forwardRef<HTMLDivElement, CTimePickerRollColP
52
52
  selected: element.value === selected,
53
53
  })}
54
54
  key={index}
55
- onClick={() => onClick && onClick(element.value)}
55
+ onClick={() => onClick?.(element.value)}
56
56
  onKeyDown={(event) => handleKeyDown(event, element.value)}
57
57
  role="button"
58
58
  tabIndex={0}