@coreui/react-pro 5.7.0 → 5.9.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 (509) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/accordion/CAccordion.js.map +1 -1
  3. package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
  4. package/dist/cjs/components/accordion/CAccordionButton.js.map +1 -1
  5. package/dist/cjs/components/accordion/CAccordionHeader.js.map +1 -1
  6. package/dist/cjs/components/accordion/CAccordionItem.js.map +1 -1
  7. package/dist/cjs/components/alert/CAlert.js +1 -1
  8. package/dist/cjs/components/alert/CAlert.js.map +1 -1
  9. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  10. package/dist/cjs/components/alert/CAlertLink.js.map +1 -1
  11. package/dist/cjs/components/avatar/CAvatar.js.map +1 -1
  12. package/dist/cjs/components/backdrop/CBackdrop.js +1 -1
  13. package/dist/cjs/components/backdrop/CBackdrop.js.map +1 -1
  14. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  15. package/dist/cjs/components/breadcrumb/CBreadcrumb.js.map +1 -1
  16. package/dist/cjs/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  17. package/dist/cjs/components/button/CButton.js.map +1 -1
  18. package/dist/cjs/components/button-group/CButtonGroup.js.map +1 -1
  19. package/dist/cjs/components/button-group/CButtonToolbar.js.map +1 -1
  20. package/dist/cjs/components/calendar/CCalendar.js +1 -1
  21. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  22. package/dist/cjs/components/calendar/utils.js +5 -0
  23. package/dist/cjs/components/calendar/utils.js.map +1 -1
  24. package/dist/cjs/components/callout/CCallout.js.map +1 -1
  25. package/dist/cjs/components/card/CCard.js.map +1 -1
  26. package/dist/cjs/components/card/CCardBody.js.map +1 -1
  27. package/dist/cjs/components/card/CCardFooter.js.map +1 -1
  28. package/dist/cjs/components/card/CCardGroup.js.map +1 -1
  29. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  30. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  31. package/dist/cjs/components/card/CCardImageOverlay.js.map +1 -1
  32. package/dist/cjs/components/card/CCardLink.js.map +1 -1
  33. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  34. package/dist/cjs/components/card/CCardText.js.map +1 -1
  35. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  36. package/dist/cjs/components/carousel/CCarousel.js +1 -1
  37. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  38. package/dist/cjs/components/carousel/CCarouselCaption.js.map +1 -1
  39. package/dist/cjs/components/carousel/CCarouselItem.js +1 -1
  40. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  41. package/dist/cjs/components/close-button/CCloseButton.js.map +1 -1
  42. package/dist/cjs/components/collapse/CCollapse.js +1 -1
  43. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  44. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  45. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  46. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +23 -15
  47. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  48. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  49. package/dist/cjs/components/dropdown/CDropdown.js +2 -2
  50. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  51. package/dist/cjs/components/dropdown/CDropdownDivider.js.map +1 -1
  52. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  53. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  54. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  55. package/dist/cjs/components/dropdown/CDropdownMenu.js +1 -1
  56. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  57. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  58. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  59. package/dist/cjs/components/element-cover/CElementCover.js +1 -1
  60. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  61. package/dist/cjs/components/footer/CFooter.js.map +1 -1
  62. package/dist/cjs/components/form/CForm.js.map +1 -1
  63. package/dist/cjs/components/form/CFormCheck.js +1 -1
  64. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  65. package/dist/cjs/components/form/CFormControlValidation.js.map +1 -1
  66. package/dist/cjs/components/form/CFormControlWrapper.js.map +1 -1
  67. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  68. package/dist/cjs/components/form/CFormFloating.js.map +1 -1
  69. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  70. package/dist/cjs/components/form/CFormLabel.js.map +1 -1
  71. package/dist/cjs/components/form/CFormRange.js.map +1 -1
  72. package/dist/cjs/components/form/CFormSelect.js.map +1 -1
  73. package/dist/cjs/components/form/CFormSwitch.js.map +1 -1
  74. package/dist/cjs/components/form/CFormText.js.map +1 -1
  75. package/dist/cjs/components/form/CFormTextarea.js.map +1 -1
  76. package/dist/cjs/components/form/CInputGroup.js.map +1 -1
  77. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  78. package/dist/cjs/components/grid/CCol.js.map +1 -1
  79. package/dist/cjs/components/grid/CContainer.js.map +1 -1
  80. package/dist/cjs/components/grid/CRow.js.map +1 -1
  81. package/dist/cjs/components/header/CHeader.js.map +1 -1
  82. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  83. package/dist/cjs/components/header/CHeaderDivider.js.map +1 -1
  84. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  85. package/dist/cjs/components/header/CHeaderText.js.map +1 -1
  86. package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
  87. package/dist/cjs/components/image/CImage.js.map +1 -1
  88. package/dist/cjs/components/index.d.ts +1 -0
  89. package/dist/cjs/components/link/CLink.js.map +1 -1
  90. package/dist/cjs/components/list-group/CListGroup.js +4 -3
  91. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  92. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  93. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  94. package/dist/cjs/components/modal/CModal.js +1 -1
  95. package/dist/cjs/components/modal/CModal.js.map +1 -1
  96. package/dist/cjs/components/modal/CModalBody.js.map +1 -1
  97. package/dist/cjs/components/modal/CModalContent.js.map +1 -1
  98. package/dist/cjs/components/modal/CModalDialog.js.map +1 -1
  99. package/dist/cjs/components/modal/CModalFooter.js.map +1 -1
  100. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  101. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  102. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +26 -3
  103. package/dist/cjs/components/multi-select/CMultiSelect.js +99 -86
  104. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  105. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  106. package/dist/cjs/components/multi-select/CMultiSelectOptions.d.ts +1 -1
  107. package/dist/cjs/components/multi-select/CMultiSelectOptions.js +5 -5
  108. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  109. package/dist/cjs/components/multi-select/CMultiSelectSelection.d.ts +2 -2
  110. package/dist/cjs/components/multi-select/CMultiSelectSelection.js +8 -1
  111. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  112. package/dist/cjs/components/multi-select/types.d.ts +4 -0
  113. package/dist/cjs/components/multi-select/utils.d.ts +5 -2
  114. package/dist/cjs/components/multi-select/utils.js +18 -1
  115. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  116. package/dist/cjs/components/nav/CNav.js.map +1 -1
  117. package/dist/cjs/components/nav/CNavGroup.js +1 -1
  118. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  119. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  120. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  121. package/dist/cjs/components/nav/CNavLink.js +1 -1
  122. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  123. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  124. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  125. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  126. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  127. package/dist/cjs/components/navbar/CNavbarText.js.map +1 -1
  128. package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
  129. package/dist/cjs/components/offcanvas/COffcanvas.js +1 -1
  130. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  131. package/dist/cjs/components/offcanvas/COffcanvasBody.js.map +1 -1
  132. package/dist/cjs/components/offcanvas/COffcanvasHeader.js.map +1 -1
  133. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  134. package/dist/cjs/components/pagination/CPagination.js.map +1 -1
  135. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  136. package/dist/cjs/components/picker/CPicker.d.ts +6 -0
  137. package/dist/cjs/components/picker/CPicker.js +16 -7
  138. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  139. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  140. package/dist/cjs/components/popover/CPopover.js +49 -44
  141. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  142. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  143. package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
  144. package/dist/cjs/components/progress/CProgressStacked.js.map +1 -1
  145. package/dist/cjs/components/range-slider/CRangeSlider.d.ts +79 -0
  146. package/dist/cjs/components/range-slider/CRangeSlider.js +146 -0
  147. package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -0
  148. package/dist/cjs/components/range-slider/index.d.ts +2 -0
  149. package/dist/cjs/components/range-slider/types.d.ts +11 -0
  150. package/dist/cjs/components/range-slider/utils.d.ts +39 -0
  151. package/dist/cjs/components/range-slider/utils.js +163 -0
  152. package/dist/cjs/components/range-slider/utils.js.map +1 -0
  153. package/dist/cjs/components/rating/CRating.js.map +1 -1
  154. package/dist/cjs/components/sidebar/CSidebar.js +1 -1
  155. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  156. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  157. package/dist/cjs/components/sidebar/CSidebarFooter.js.map +1 -1
  158. package/dist/cjs/components/sidebar/CSidebarHeader.js.map +1 -1
  159. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  160. package/dist/cjs/components/sidebar/CSidebarToggler.js.map +1 -1
  161. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  162. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  163. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  164. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  165. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  166. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  167. package/dist/cjs/components/table/CTable.js.map +1 -1
  168. package/dist/cjs/components/table/CTableBody.js.map +1 -1
  169. package/dist/cjs/components/table/CTableCaption.js.map +1 -1
  170. package/dist/cjs/components/table/CTableDataCell.js.map +1 -1
  171. package/dist/cjs/components/table/CTableFoot.js.map +1 -1
  172. package/dist/cjs/components/table/CTableHead.js.map +1 -1
  173. package/dist/cjs/components/table/CTableHeaderCell.js.map +1 -1
  174. package/dist/cjs/components/table/CTableResponsiveWrapper.js.map +1 -1
  175. package/dist/cjs/components/table/CTableRow.js.map +1 -1
  176. package/dist/cjs/components/table/utils.js.map +1 -1
  177. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  178. package/dist/cjs/components/tabs/CTabContent.js.map +1 -1
  179. package/dist/cjs/components/tabs/CTabList.js +1 -1
  180. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  181. package/dist/cjs/components/tabs/CTabPane.js +1 -1
  182. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  183. package/dist/cjs/components/tabs/CTabPanel.js +1 -1
  184. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  185. package/dist/cjs/components/tabs/CTabs.js.map +1 -1
  186. package/dist/cjs/components/time-picker/CTimePicker.js +18 -10
  187. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  188. package/dist/cjs/components/time-picker/CTimePickerRollCol.js +2 -1
  189. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  190. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  191. package/dist/cjs/components/toast/CToast.js +1 -1
  192. package/dist/cjs/components/toast/CToast.js.map +1 -1
  193. package/dist/cjs/components/toast/CToastBody.js.map +1 -1
  194. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  195. package/dist/cjs/components/toast/CToastHeader.js.map +1 -1
  196. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  197. package/dist/cjs/components/tooltip/CTooltip.js +49 -44
  198. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  199. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js +5 -5
  200. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  201. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  202. package/dist/cjs/components/widgets/CWidgetStatsB.js.map +1 -1
  203. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  204. package/dist/cjs/components/widgets/CWidgetStatsD.js.map +1 -1
  205. package/dist/cjs/components/widgets/CWidgetStatsE.js.map +1 -1
  206. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  207. package/dist/cjs/hooks/index.d.ts +2 -1
  208. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  209. package/dist/cjs/hooks/useDebounce.js.map +1 -1
  210. package/dist/cjs/hooks/useDebouncedCallback.js.map +1 -1
  211. package/dist/cjs/hooks/useDropdownWithPopper.d.ts +10 -0
  212. package/dist/cjs/hooks/useDropdownWithPopper.js +98 -0
  213. package/dist/cjs/hooks/useDropdownWithPopper.js.map +1 -0
  214. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  215. package/dist/cjs/hooks/useIsVisible.js.map +1 -1
  216. package/dist/cjs/hooks/usePopper.js.map +1 -1
  217. package/dist/cjs/hooks/useStateWithCallback.js.map +1 -1
  218. package/dist/cjs/index.js +4 -0
  219. package/dist/cjs/index.js.map +1 -1
  220. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  221. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +1 -1
  222. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  223. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -1
  224. package/dist/cjs/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
  225. package/dist/cjs/node_modules/classnames/index.js.map +1 -1
  226. package/dist/cjs/node_modules/dom-helpers/esm/addClass.js.map +1 -1
  227. package/dist/cjs/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
  228. package/dist/cjs/node_modules/dom-helpers/esm/removeClass.js.map +1 -1
  229. package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
  230. package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
  231. package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  232. package/dist/cjs/node_modules/react-transition-group/esm/config.js.map +1 -1
  233. package/dist/cjs/node_modules/react-transition-group/esm/utils/PropTypes.js.map +1 -1
  234. package/dist/cjs/node_modules/react-transition-group/esm/utils/reflow.js.map +1 -1
  235. package/dist/cjs/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js.map +1 -1
  236. package/dist/cjs/props.js.map +1 -1
  237. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  238. package/dist/cjs/utils/getNextActiveElement.js +1 -1
  239. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  240. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  241. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  242. package/dist/cjs/utils/isInViewport.js.map +1 -1
  243. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  244. package/dist/cjs/utils/isRTL.js.map +1 -1
  245. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  246. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  247. package/dist/esm/components/accordion/CAccordionButton.js.map +1 -1
  248. package/dist/esm/components/accordion/CAccordionHeader.js.map +1 -1
  249. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  250. package/dist/esm/components/alert/CAlert.js +1 -1
  251. package/dist/esm/components/alert/CAlert.js.map +1 -1
  252. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  253. package/dist/esm/components/alert/CAlertLink.js.map +1 -1
  254. package/dist/esm/components/avatar/CAvatar.js.map +1 -1
  255. package/dist/esm/components/backdrop/CBackdrop.js +1 -1
  256. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  257. package/dist/esm/components/badge/CBadge.js.map +1 -1
  258. package/dist/esm/components/breadcrumb/CBreadcrumb.js.map +1 -1
  259. package/dist/esm/components/breadcrumb/CBreadcrumbItem.js.map +1 -1
  260. package/dist/esm/components/button/CButton.js.map +1 -1
  261. package/dist/esm/components/button-group/CButtonGroup.js.map +1 -1
  262. package/dist/esm/components/button-group/CButtonToolbar.js.map +1 -1
  263. package/dist/esm/components/calendar/CCalendar.js +1 -1
  264. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  265. package/dist/esm/components/calendar/utils.js +5 -0
  266. package/dist/esm/components/calendar/utils.js.map +1 -1
  267. package/dist/esm/components/callout/CCallout.js.map +1 -1
  268. package/dist/esm/components/card/CCard.js.map +1 -1
  269. package/dist/esm/components/card/CCardBody.js.map +1 -1
  270. package/dist/esm/components/card/CCardFooter.js.map +1 -1
  271. package/dist/esm/components/card/CCardGroup.js.map +1 -1
  272. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  273. package/dist/esm/components/card/CCardImage.js.map +1 -1
  274. package/dist/esm/components/card/CCardImageOverlay.js.map +1 -1
  275. package/dist/esm/components/card/CCardLink.js.map +1 -1
  276. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  277. package/dist/esm/components/card/CCardText.js.map +1 -1
  278. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  279. package/dist/esm/components/carousel/CCarousel.js +1 -1
  280. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  281. package/dist/esm/components/carousel/CCarouselCaption.js.map +1 -1
  282. package/dist/esm/components/carousel/CCarouselItem.js +1 -1
  283. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  284. package/dist/esm/components/close-button/CCloseButton.js.map +1 -1
  285. package/dist/esm/components/collapse/CCollapse.js +1 -1
  286. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  287. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  288. package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
  289. package/dist/esm/components/date-range-picker/CDateRangePicker.js +23 -15
  290. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  291. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  292. package/dist/esm/components/dropdown/CDropdown.js +2 -2
  293. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  294. package/dist/esm/components/dropdown/CDropdownDivider.js.map +1 -1
  295. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  296. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  297. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  298. package/dist/esm/components/dropdown/CDropdownMenu.js +1 -1
  299. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  300. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  301. package/dist/esm/components/dropdown/utils.js.map +1 -1
  302. package/dist/esm/components/element-cover/CElementCover.js +1 -1
  303. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  304. package/dist/esm/components/footer/CFooter.js.map +1 -1
  305. package/dist/esm/components/form/CForm.js.map +1 -1
  306. package/dist/esm/components/form/CFormCheck.js +1 -1
  307. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  308. package/dist/esm/components/form/CFormControlValidation.js.map +1 -1
  309. package/dist/esm/components/form/CFormControlWrapper.js.map +1 -1
  310. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  311. package/dist/esm/components/form/CFormFloating.js.map +1 -1
  312. package/dist/esm/components/form/CFormInput.js.map +1 -1
  313. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  314. package/dist/esm/components/form/CFormRange.js.map +1 -1
  315. package/dist/esm/components/form/CFormSelect.js.map +1 -1
  316. package/dist/esm/components/form/CFormSwitch.js.map +1 -1
  317. package/dist/esm/components/form/CFormText.js.map +1 -1
  318. package/dist/esm/components/form/CFormTextarea.js.map +1 -1
  319. package/dist/esm/components/form/CInputGroup.js.map +1 -1
  320. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  321. package/dist/esm/components/grid/CCol.js.map +1 -1
  322. package/dist/esm/components/grid/CContainer.js.map +1 -1
  323. package/dist/esm/components/grid/CRow.js.map +1 -1
  324. package/dist/esm/components/header/CHeader.js.map +1 -1
  325. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  326. package/dist/esm/components/header/CHeaderDivider.js.map +1 -1
  327. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  328. package/dist/esm/components/header/CHeaderText.js.map +1 -1
  329. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  330. package/dist/esm/components/image/CImage.js.map +1 -1
  331. package/dist/esm/components/index.d.ts +1 -0
  332. package/dist/esm/components/link/CLink.js.map +1 -1
  333. package/dist/esm/components/list-group/CListGroup.js +4 -3
  334. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  335. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  336. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  337. package/dist/esm/components/modal/CModal.js +1 -1
  338. package/dist/esm/components/modal/CModal.js.map +1 -1
  339. package/dist/esm/components/modal/CModalBody.js.map +1 -1
  340. package/dist/esm/components/modal/CModalContent.js.map +1 -1
  341. package/dist/esm/components/modal/CModalDialog.js.map +1 -1
  342. package/dist/esm/components/modal/CModalFooter.js.map +1 -1
  343. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  344. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  345. package/dist/esm/components/multi-select/CMultiSelect.d.ts +26 -3
  346. package/dist/esm/components/multi-select/CMultiSelect.js +100 -87
  347. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  348. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  349. package/dist/esm/components/multi-select/CMultiSelectOptions.d.ts +1 -1
  350. package/dist/esm/components/multi-select/CMultiSelectOptions.js +5 -5
  351. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  352. package/dist/esm/components/multi-select/CMultiSelectSelection.d.ts +2 -2
  353. package/dist/esm/components/multi-select/CMultiSelectSelection.js +8 -1
  354. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  355. package/dist/esm/components/multi-select/types.d.ts +4 -0
  356. package/dist/esm/components/multi-select/utils.d.ts +5 -2
  357. package/dist/esm/components/multi-select/utils.js +16 -2
  358. package/dist/esm/components/multi-select/utils.js.map +1 -1
  359. package/dist/esm/components/nav/CNav.js.map +1 -1
  360. package/dist/esm/components/nav/CNavGroup.js +1 -1
  361. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  362. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  363. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  364. package/dist/esm/components/nav/CNavLink.js +1 -1
  365. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  366. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  367. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  368. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  369. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  370. package/dist/esm/components/navbar/CNavbarText.js.map +1 -1
  371. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  372. package/dist/esm/components/offcanvas/COffcanvas.js +1 -1
  373. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  374. package/dist/esm/components/offcanvas/COffcanvasBody.js.map +1 -1
  375. package/dist/esm/components/offcanvas/COffcanvasHeader.js.map +1 -1
  376. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  377. package/dist/esm/components/pagination/CPagination.js.map +1 -1
  378. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  379. package/dist/esm/components/picker/CPicker.d.ts +6 -0
  380. package/dist/esm/components/picker/CPicker.js +16 -7
  381. package/dist/esm/components/picker/CPicker.js.map +1 -1
  382. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  383. package/dist/esm/components/popover/CPopover.js +50 -45
  384. package/dist/esm/components/popover/CPopover.js.map +1 -1
  385. package/dist/esm/components/progress/CProgress.js.map +1 -1
  386. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  387. package/dist/esm/components/progress/CProgressStacked.js.map +1 -1
  388. package/dist/esm/components/range-slider/CRangeSlider.d.ts +79 -0
  389. package/dist/esm/components/range-slider/CRangeSlider.js +144 -0
  390. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -0
  391. package/dist/esm/components/range-slider/index.d.ts +2 -0
  392. package/dist/esm/components/range-slider/types.d.ts +11 -0
  393. package/dist/esm/components/range-slider/utils.d.ts +39 -0
  394. package/dist/esm/components/range-slider/utils.js +148 -0
  395. package/dist/esm/components/range-slider/utils.js.map +1 -0
  396. package/dist/esm/components/rating/CRating.js.map +1 -1
  397. package/dist/esm/components/sidebar/CSidebar.js +1 -1
  398. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  399. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  400. package/dist/esm/components/sidebar/CSidebarFooter.js.map +1 -1
  401. package/dist/esm/components/sidebar/CSidebarHeader.js.map +1 -1
  402. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  403. package/dist/esm/components/sidebar/CSidebarToggler.js.map +1 -1
  404. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  405. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  406. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  407. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  408. package/dist/esm/components/smart-table/utils.js.map +1 -1
  409. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  410. package/dist/esm/components/table/CTable.js.map +1 -1
  411. package/dist/esm/components/table/CTableBody.js.map +1 -1
  412. package/dist/esm/components/table/CTableCaption.js.map +1 -1
  413. package/dist/esm/components/table/CTableDataCell.js.map +1 -1
  414. package/dist/esm/components/table/CTableFoot.js.map +1 -1
  415. package/dist/esm/components/table/CTableHead.js.map +1 -1
  416. package/dist/esm/components/table/CTableHeaderCell.js.map +1 -1
  417. package/dist/esm/components/table/CTableResponsiveWrapper.js.map +1 -1
  418. package/dist/esm/components/table/CTableRow.js.map +1 -1
  419. package/dist/esm/components/table/utils.js.map +1 -1
  420. package/dist/esm/components/tabs/CTab.js.map +1 -1
  421. package/dist/esm/components/tabs/CTabContent.js.map +1 -1
  422. package/dist/esm/components/tabs/CTabList.js +1 -1
  423. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  424. package/dist/esm/components/tabs/CTabPane.js +1 -1
  425. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  426. package/dist/esm/components/tabs/CTabPanel.js +1 -1
  427. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  428. package/dist/esm/components/tabs/CTabs.js.map +1 -1
  429. package/dist/esm/components/time-picker/CTimePicker.js +18 -10
  430. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  431. package/dist/esm/components/time-picker/CTimePickerRollCol.js +2 -1
  432. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  433. package/dist/esm/components/time-picker/utils.js.map +1 -1
  434. package/dist/esm/components/toast/CToast.js +1 -1
  435. package/dist/esm/components/toast/CToast.js.map +1 -1
  436. package/dist/esm/components/toast/CToastBody.js.map +1 -1
  437. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  438. package/dist/esm/components/toast/CToastHeader.js.map +1 -1
  439. package/dist/esm/components/toast/CToaster.js.map +1 -1
  440. package/dist/esm/components/tooltip/CTooltip.js +50 -45
  441. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  442. package/dist/esm/components/virtual-scroller/CVirtualScroller.js +6 -6
  443. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  444. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  445. package/dist/esm/components/widgets/CWidgetStatsB.js.map +1 -1
  446. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  447. package/dist/esm/components/widgets/CWidgetStatsD.js.map +1 -1
  448. package/dist/esm/components/widgets/CWidgetStatsE.js.map +1 -1
  449. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  450. package/dist/esm/hooks/index.d.ts +2 -1
  451. package/dist/esm/hooks/useColorModes.js.map +1 -1
  452. package/dist/esm/hooks/useDebounce.js.map +1 -1
  453. package/dist/esm/hooks/useDebouncedCallback.js.map +1 -1
  454. package/dist/esm/hooks/useDropdownWithPopper.d.ts +10 -0
  455. package/dist/esm/hooks/useDropdownWithPopper.js +96 -0
  456. package/dist/esm/hooks/useDropdownWithPopper.js.map +1 -0
  457. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  458. package/dist/esm/hooks/useIsVisible.js.map +1 -1
  459. package/dist/esm/hooks/usePopper.js.map +1 -1
  460. package/dist/esm/hooks/useStateWithCallback.js.map +1 -1
  461. package/dist/esm/index.js +2 -0
  462. package/dist/esm/index.js.map +1 -1
  463. package/dist/esm/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  464. package/dist/esm/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +1 -1
  465. package/dist/esm/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  466. package/dist/esm/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -1
  467. package/dist/esm/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
  468. package/dist/esm/node_modules/classnames/index.js.map +1 -1
  469. package/dist/esm/node_modules/dom-helpers/esm/addClass.js.map +1 -1
  470. package/dist/esm/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
  471. package/dist/esm/node_modules/dom-helpers/esm/removeClass.js.map +1 -1
  472. package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
  473. package/dist/esm/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
  474. package/dist/esm/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  475. package/dist/esm/node_modules/react-transition-group/esm/config.js.map +1 -1
  476. package/dist/esm/node_modules/react-transition-group/esm/utils/PropTypes.js.map +1 -1
  477. package/dist/esm/node_modules/react-transition-group/esm/utils/reflow.js.map +1 -1
  478. package/dist/esm/packages/coreui-react-pro/node_modules/tslib/tslib.es6.js.map +1 -1
  479. package/dist/esm/props.js.map +1 -1
  480. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  481. package/dist/esm/utils/getNextActiveElement.js +1 -1
  482. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  483. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  484. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  485. package/dist/esm/utils/isInViewport.js.map +1 -1
  486. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  487. package/dist/esm/utils/isRTL.js.map +1 -1
  488. package/package.json +11 -11
  489. package/src/components/calendar/utils.ts +6 -0
  490. package/src/components/date-range-picker/CDateRangePicker.tsx +18 -1
  491. package/src/components/index.ts +1 -0
  492. package/src/components/list-group/CListGroup.tsx +2 -1
  493. package/src/components/multi-select/CMultiSelect.tsx +196 -116
  494. package/src/components/multi-select/CMultiSelectOptions.tsx +8 -5
  495. package/src/components/multi-select/CMultiSelectSelection.tsx +10 -3
  496. package/src/components/multi-select/types.ts +9 -0
  497. package/src/components/multi-select/utils.ts +26 -1
  498. package/src/components/nav/CNavGroup.tsx +1 -1
  499. package/src/components/picker/CPicker.tsx +25 -4
  500. package/src/components/popover/CPopover.tsx +65 -46
  501. package/src/components/range-slider/CRangeSlider.tsx +377 -0
  502. package/src/components/range-slider/index.ts +3 -0
  503. package/src/components/range-slider/types.ts +16 -0
  504. package/src/components/range-slider/utils.ts +243 -0
  505. package/src/components/time-picker/CTimePicker.tsx +18 -1
  506. package/src/components/tooltip/CTooltip.tsx +65 -46
  507. package/src/components/virtual-scroller/CVirtualScroller.tsx +3 -2
  508. package/src/hooks/index.ts +2 -0
  509. package/src/hooks/useDropdownWithPopper.ts +123 -0
@@ -58,7 +58,7 @@ export const CNavGroup: PolymorphicRefForwardingComponent<'li', CNavGroupProps>
58
58
  HTMLDivElement | HTMLLIElement,
59
59
  CNavGroupProps
60
60
  >(({ children, as: Component = 'li', className, compact, idx, toggler, visible, ...rest }, ref) => {
61
- const [height, setHeight] = useState<number | string>()
61
+ const [height, setHeight] = useState<number | string>(0)
62
62
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
63
  const navItemsRef = useRef<any>(null)
64
64
 
@@ -4,6 +4,8 @@ import PropTypes from 'prop-types'
4
4
  import classNames from 'classnames'
5
5
  import { Placement } from '@popperjs/core'
6
6
 
7
+ import { CConditionalPortal } from '../conditional-portal'
8
+
7
9
  import { useForkedRef, usePopper } from '../../hooks'
8
10
  import { isRTL } from '../../utils'
9
11
 
@@ -36,6 +38,12 @@ export interface CPickerProps extends HTMLAttributes<HTMLDivElement> {
36
38
  * Callback fired when the component requests to be shown.
37
39
  */
38
40
  onShow?: () => void
41
+ /**
42
+ * Generates dropdown menu using createPortal.
43
+ *
44
+ * @since 5.9.0
45
+ */
46
+ portal?: boolean
39
47
  /**
40
48
  * The content of toggler.
41
49
  */
@@ -58,6 +66,7 @@ export const CPicker = forwardRef<HTMLDivElement | HTMLLIElement, CPickerProps>(
58
66
  footerContent,
59
67
  onHide,
60
68
  onShow,
69
+ portal = true,
61
70
  toggler,
62
71
  visible,
63
72
  },
@@ -127,6 +136,10 @@ export const CPicker = forwardRef<HTMLDivElement | HTMLLIElement, CPickerProps>(
127
136
  return
128
137
  }
129
138
 
139
+ if (dropdownRef.current && dropdownRef.current.contains(event.target as HTMLElement)) {
140
+ return
141
+ }
142
+
130
143
  setVisible(false)
131
144
  }
132
145
 
@@ -152,10 +165,17 @@ export const CPicker = forwardRef<HTMLDivElement | HTMLLIElement, CPickerProps>(
152
165
  React.cloneElement(toggler as React.ReactElement<any>, {
153
166
  ref: togglerRef,
154
167
  })}
155
- <div className={dropdownClassNames} ref={dropdownRef}>
156
- {children}
157
- {footer && footerContent}
158
- </div>
168
+ <CConditionalPortal portal={portal}>
169
+ <div
170
+ className={classNames(dropdownClassNames, {
171
+ show: portal && _visible,
172
+ })}
173
+ ref={dropdownRef}
174
+ >
175
+ {children}
176
+ {footer && footerContent}
177
+ </div>
178
+ </CConditionalPortal>
159
179
  </div>
160
180
  )
161
181
  }
@@ -175,6 +195,7 @@ CPicker.propTypes = {
175
195
  footerContent: PropTypes.node,
176
196
  onHide: PropTypes.func,
177
197
  onShow: PropTypes.func,
198
+ portal: PropTypes.bool,
178
199
  toggler: PropTypes.node,
179
200
  visible: PropTypes.bool,
180
201
  }
@@ -1,4 +1,12 @@
1
- import React, { forwardRef, HTMLAttributes, ReactNode, useRef, useEffect, useState } from 'react'
1
+ import React, {
2
+ forwardRef,
3
+ HTMLAttributes,
4
+ ReactNode,
5
+ useEffect,
6
+ useId,
7
+ useRef,
8
+ useState,
9
+ } from 'react'
2
10
  import classNames from 'classnames'
3
11
  import PropTypes from 'prop-types'
4
12
 
@@ -97,12 +105,13 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
97
105
  const popoverRef = useRef<HTMLDivElement>(null)
98
106
  const togglerRef = useRef(null)
99
107
  const forkedRef = useForkedRef(ref, popoverRef)
100
- const uID = useRef(`popover${Math.floor(Math.random() * 1_000_000)}`)
101
108
 
102
- const { initPopper, destroyPopper } = usePopper()
109
+ const id = `popover${useId()}`
103
110
  const [mounted, setMounted] = useState(false)
104
111
  const [_visible, setVisible] = useState(visible)
105
112
 
113
+ const { initPopper, destroyPopper } = usePopper()
114
+
106
115
  const _delay = typeof delay === 'number' ? { show: delay, hide: delay } : delay
107
116
 
108
117
  const popperConfig = {
@@ -130,77 +139,87 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
130
139
  }
131
140
 
132
141
  useEffect(() => {
133
- setVisible(visible)
142
+ if (visible) {
143
+ handleShow()
144
+ return
145
+ }
146
+
147
+ handleHide()
134
148
  }, [visible])
135
149
 
136
150
  useEffect(() => {
137
- if (_visible) {
138
- setMounted(true)
139
-
140
- if (popoverRef.current) {
141
- popoverRef.current.classList.remove('fade', 'show')
142
- destroyPopper()
143
- }
144
-
151
+ if (mounted && togglerRef.current && popoverRef.current) {
152
+ initPopper(togglerRef.current, popoverRef.current, popperConfig)
145
153
  setTimeout(() => {
146
- if (togglerRef.current && popoverRef.current) {
147
- if (animation) {
148
- popoverRef.current.classList.add('fade')
149
- }
150
-
151
- initPopper(togglerRef.current, popoverRef.current, popperConfig)
152
- popoverRef.current.style.removeProperty('display')
153
- popoverRef.current.classList.add('show')
154
- onShow && onShow()
155
- }
154
+ setVisible(true)
156
155
  }, _delay.show)
156
+
157
+ return
157
158
  }
158
159
 
159
- return () => {
160
- if (popoverRef.current) {
161
- popoverRef.current.classList.remove('show')
162
- onHide && onHide()
163
- executeAfterTransition(() => {
164
- if (popoverRef.current) {
165
- popoverRef.current.style.display = 'none'
166
- }
167
-
168
- destroyPopper()
169
- setMounted(false)
170
- }, popoverRef.current)
171
- }
160
+ if (!mounted && togglerRef.current && popoverRef.current) {
161
+ destroyPopper()
162
+ }
163
+ }, [mounted])
164
+
165
+ useEffect(() => {
166
+ if (!_visible && togglerRef.current && popoverRef.current) {
167
+ executeAfterTransition(() => {
168
+ setMounted(false)
169
+ }, popoverRef.current)
172
170
  }
173
171
  }, [_visible])
174
172
 
173
+ const handleShow = () => {
174
+ setMounted(true)
175
+ if (onShow) {
176
+ onShow()
177
+ }
178
+ }
179
+
180
+ const handleHide = () => {
181
+ setTimeout(() => {
182
+ setVisible(false)
183
+ if (onHide) {
184
+ onHide()
185
+ }
186
+ }, _delay.hide)
187
+ }
188
+
175
189
  return (
176
190
  <>
177
191
  {React.cloneElement(children as React.ReactElement<any>, {
178
192
  ...(_visible && {
179
- 'aria-describedby': uID.current,
193
+ 'aria-describedby': id,
180
194
  }),
181
195
  ref: togglerRef,
182
196
  ...((trigger === 'click' || trigger.includes('click')) && {
183
- onClick: () => setVisible(!_visible),
197
+ onClick: () => (_visible ? handleHide() : handleShow()),
184
198
  }),
185
199
  ...((trigger === 'focus' || trigger.includes('focus')) && {
186
- onFocus: () => setVisible(true),
187
- onBlur: () => setVisible(false),
200
+ onFocus: () => handleShow(),
201
+ onBlur: () => handleHide(),
188
202
  }),
189
203
  ...((trigger === 'hover' || trigger.includes('hover')) && {
190
- onMouseEnter: () => setVisible(true),
191
- onMouseLeave: () => setVisible(false),
204
+ onMouseEnter: () => handleShow(),
205
+ onMouseLeave: () => handleHide(),
192
206
  }),
193
207
  })}
194
208
  <CConditionalPortal container={container} portal={true}>
195
209
  {mounted && (
196
210
  <div
197
- className={classNames('popover', 'bs-popover-auto', className)}
198
- id={uID.current}
211
+ className={classNames(
212
+ 'popover',
213
+ 'bs-popover-auto',
214
+ {
215
+ fade: animation,
216
+ show: _visible,
217
+ },
218
+ className,
219
+ )}
220
+ id={id}
199
221
  ref={forkedRef}
200
222
  role="tooltip"
201
- style={{
202
- display: 'none',
203
- }}
204
223
  {...rest}
205
224
  >
206
225
  <div className="popover-arrow"></div>
@@ -0,0 +1,377 @@
1
+ import React, {
2
+ ChangeEvent,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ ReactNode,
6
+ useEffect,
7
+ useRef,
8
+ useState,
9
+ } from 'react'
10
+ import PropTypes from 'prop-types'
11
+ import classNames from 'classnames'
12
+
13
+ import { useForkedRef } from '../../hooks'
14
+ import { isRTL } from '../../utils'
15
+
16
+ import { ThumbSize, type Label } from './types'
17
+ import {
18
+ calculateClickValue,
19
+ calculateLabelPosition,
20
+ calculateMoveValue,
21
+ calculateTooltipPosition,
22
+ getLabelValue,
23
+ getNearestValueIndex,
24
+ getThumbSize,
25
+ updateGradient,
26
+ updateValue,
27
+ validateValue,
28
+ } from './utils'
29
+
30
+ export interface CRangeSliderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
31
+ /**
32
+ * Customize the styling of your React Range Slider by adding a custom `className`.
33
+ * This allows you to apply additional CSS classes for enhanced design flexibility and integration with your existing stylesheets.
34
+ */
35
+ className?: string
36
+ /**
37
+ * Enable or disable clickable labels in the React Range Slider.
38
+ * When set to `true`, users can click on labels to adjust the slider's value directly, enhancing interactivity and user experience.
39
+ */
40
+ clickableLabels?: boolean
41
+ /**
42
+ * Control the interactive state of the React Range Slider with the `disabled` prop.
43
+ * Setting it to `true` will disable all slider functionalities, preventing user interaction and visually indicating a non-interactive state.
44
+ */
45
+ disabled?: boolean
46
+ /**
47
+ * Define the minimum distance between slider handles using the `distance` prop in the React Range Slider.
48
+ * This ensures that the handles maintain a specified separation, preventing overlap and maintaining clear value distinctions.
49
+ */
50
+ distance?: number
51
+ /**
52
+ * Add descriptive labels to your React Range Slider by providing an array of `labels`.
53
+ * These labels enhance the slider's usability by clearly indicating key values and providing contextual information to users.
54
+ */
55
+ labels?: Label[]
56
+ /**
57
+ * Specify the maximum value for the React Range Slider with the `max` prop.
58
+ * This determines the upper limit of the slider's range, enabling precise control over the highest selectable value.
59
+ */
60
+ max?: number
61
+ /**
62
+ * Set the minimum value for the React Range Slider using the `min` prop.
63
+ * This defines the lower bound of the slider's range, allowing you to control the starting point of user selection.
64
+ */
65
+ min?: number
66
+ /**
67
+ * Assign a `name` to the React Range Slider for form integration.
68
+ * Whether using a single string or an array of strings, this prop ensures that the slider's values are correctly identified when submitting forms.
69
+ */
70
+ name?: string | string[]
71
+ /**
72
+ * Control the granularity of the React Range Slider by setting the `step` prop.
73
+ * This defines the increment intervals between selectable values, allowing for precise adjustments based on your application's requirements.
74
+ */
75
+ step?: number
76
+ /**
77
+ * Handle value changes in the React Range Slider by utilizing the `onChange` callback.
78
+ * This function is triggered whenever the slider's value updates, enabling you to manage state and respond to user interactions effectively.
79
+ */
80
+ onChange?: (value: number[]) => void
81
+ /**
82
+ * Toggle the visibility of tooltips in the React Range Slider with the `tooltips` prop.
83
+ * When enabled, tooltips display the current value of the slider handles, providing real-time feedback to users.
84
+ */
85
+ tooltips?: boolean
86
+ /**
87
+ * Customize the display format of tooltips in the React Range Slider using the `tooltipsFormat` function.
88
+ * This allows you to format the tooltip values according to your specific requirements, enhancing the clarity and presentation of information.
89
+ */
90
+ tooltipsFormat?: (value: number) => ReactNode
91
+ /**
92
+ * Controls the visual representation of the slider's track. When set to `'fill'`, the track is dynamically filled based on the slider's value(s). Setting it to `false` disables the filled track.
93
+ */
94
+ track?: 'fill' | boolean
95
+ /**
96
+ * Set the current value(s) of the React Range Slider using the `value` prop.
97
+ * Whether you're using a single value or an array for multi-handle sliders, this prop controls the slider's position and ensures it reflects the desired state.
98
+ */
99
+ value?: number | number[]
100
+ /**
101
+ * Orient the React Range Slider vertically by setting the `vertical` prop to `true`.
102
+ * This changes the slider's layout from horizontal to vertical, providing a different aesthetic and fitting various UI designs.
103
+ */
104
+ vertical?: boolean
105
+ }
106
+
107
+ export const CRangeSlider = forwardRef<HTMLDivElement, CRangeSliderProps>(
108
+ (
109
+ {
110
+ className,
111
+ clickableLabels = true,
112
+ disabled = false,
113
+ distance = 0,
114
+ labels,
115
+ min = 0,
116
+ max = 100,
117
+ name,
118
+ step = 1,
119
+ value = [],
120
+ onChange,
121
+ tooltips = true,
122
+ tooltipsFormat,
123
+ track = 'fill',
124
+ vertical = false,
125
+ ...rest
126
+ },
127
+ ref,
128
+ ) => {
129
+ const rangeSliderRef = useRef<HTMLDivElement>(null)
130
+ const forkedRef = useForkedRef(ref, rangeSliderRef)
131
+ const inputsRef = useRef<HTMLInputElement[]>([])
132
+ const labelsContainerRef = useRef<HTMLDivElement>(null)
133
+ const labelsRef = useRef<HTMLDivElement[]>([])
134
+ const trackRef = useRef<HTMLDivElement>(null)
135
+
136
+ const [currentValue, setCurrentValue] = useState<number[]>(
137
+ Array.isArray(value) ? value : [value],
138
+ )
139
+ const [isDragging, setIsDragging] = useState(false)
140
+ const [dragIndex, setDragIndex] = useState(0)
141
+ const [thumbSize, setThumbSize] = useState<ThumbSize | null>()
142
+
143
+ useEffect(() => {
144
+ setCurrentValue(Array.isArray(value) ? value : [value])
145
+ }, [value])
146
+
147
+ useEffect(() => {
148
+ if (rangeSliderRef.current) {
149
+ setThumbSize(getThumbSize(rangeSliderRef.current, vertical))
150
+ }
151
+ }, [rangeSliderRef])
152
+
153
+ useEffect(() => {
154
+ const maxSize = Math.max(
155
+ ...labelsRef.current.map((label) => (vertical ? label.offsetWidth : label.offsetHeight)),
156
+ )
157
+
158
+ if (labelsContainerRef.current) {
159
+ labelsContainerRef.current.style[vertical ? 'width' : 'height'] = `${maxSize}px`
160
+ }
161
+ }, [labelsRef])
162
+
163
+ useEffect(() => {
164
+ if (isDragging) {
165
+ document.addEventListener('mousemove', handleMouseMove)
166
+ document.addEventListener('mouseup', handleMouseUp)
167
+ }
168
+
169
+ return () => {
170
+ document.removeEventListener('mousemove', handleMouseMove)
171
+ document.removeEventListener('mouseup', handleMouseUp)
172
+ }
173
+ }, [currentValue])
174
+
175
+ const updateNearestValue = (value: number) => {
176
+ const nearestIndex = getNearestValueIndex(value, currentValue)
177
+ const newCurrentValue = [...currentValue]
178
+ newCurrentValue[nearestIndex] = validateValue(value, currentValue, distance, nearestIndex)
179
+
180
+ setTimeout(() => {
181
+ inputsRef.current[nearestIndex].focus()
182
+ })
183
+
184
+ setCurrentValue(newCurrentValue)
185
+
186
+ if (onChange) {
187
+ onChange(newCurrentValue)
188
+ }
189
+ }
190
+
191
+ const handleInputChange = (event: ChangeEvent<HTMLInputElement>, index: number) => {
192
+ setIsDragging(false)
193
+
194
+ const target = event.target
195
+ const value = Number(target.value)
196
+
197
+ const newCurrentValue = updateValue(value, currentValue, distance, index)
198
+
199
+ setCurrentValue(newCurrentValue)
200
+
201
+ // Trigger change event if needed
202
+ if (onChange) {
203
+ onChange(newCurrentValue)
204
+ }
205
+ }
206
+
207
+ const handleInputsContainerMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {
208
+ if (trackRef.current === null) {
209
+ return
210
+ }
211
+
212
+ const clickValue = calculateClickValue(
213
+ event,
214
+ trackRef.current,
215
+ min,
216
+ max,
217
+ step,
218
+ vertical,
219
+ isRTL(rangeSliderRef.current),
220
+ )
221
+
222
+ const index = getNearestValueIndex(clickValue, currentValue)
223
+
224
+ setIsDragging(true)
225
+ setDragIndex(index)
226
+ updateNearestValue(clickValue)
227
+ }
228
+
229
+ const handleLabelClick = (value: number) => {
230
+ if (!clickableLabels || disabled) {
231
+ return
232
+ }
233
+
234
+ updateNearestValue(value)
235
+ }
236
+
237
+ const handleMouseMove = (event: MouseEvent) => {
238
+ if (!isDragging || trackRef.current === null) {
239
+ return
240
+ }
241
+
242
+ const moveValue = calculateMoveValue(
243
+ event,
244
+ trackRef.current,
245
+ min,
246
+ max,
247
+ step,
248
+ vertical,
249
+ isRTL(rangeSliderRef.current),
250
+ )
251
+
252
+ const newCurrentValue = updateValue(moveValue, currentValue, distance, dragIndex)
253
+
254
+ setCurrentValue(newCurrentValue)
255
+
256
+ if (onChange) {
257
+ onChange(newCurrentValue)
258
+ }
259
+ }
260
+
261
+ const handleMouseUp = () => {
262
+ setIsDragging(false)
263
+ }
264
+
265
+ return (
266
+ <div
267
+ className={classNames('range-slider', className, {
268
+ 'range-slider-vertical': vertical,
269
+ disabled,
270
+ })}
271
+ {...rest}
272
+ ref={forkedRef}
273
+ >
274
+ <div className="range-slider-inputs-container" onMouseDown={handleInputsContainerMouseDown}>
275
+ {currentValue.map((value, index) => (
276
+ <React.Fragment key={index}>
277
+ <input
278
+ className="range-slider-input"
279
+ type="range"
280
+ min={min}
281
+ max={max}
282
+ step={step}
283
+ value={value}
284
+ name={Array.isArray(name) ? name[index] : `${name || ''}-${index}}`}
285
+ role="slider"
286
+ aria-valuemin={min}
287
+ aria-valuemax={max}
288
+ aria-valuenow={value}
289
+ aria-orientation={vertical ? 'vertical' : 'horizontal'}
290
+ disabled={disabled}
291
+ onChange={(event) => handleInputChange(event, index)}
292
+ ref={(el: HTMLInputElement) => {
293
+ inputsRef.current[index] = el
294
+ }}
295
+ />
296
+ {tooltips && (
297
+ <div
298
+ className="range-slider-tooltip"
299
+ {...(thumbSize && {
300
+ style: calculateTooltipPosition(
301
+ min,
302
+ max,
303
+ value,
304
+ thumbSize,
305
+ vertical,
306
+ isRTL(rangeSliderRef.current),
307
+ ),
308
+ })}
309
+ >
310
+ <div className="range-slider-tooltip-inner">
311
+ {tooltipsFormat ? tooltipsFormat(value) : value}
312
+ </div>
313
+ <div className="range-slider-tooltip-arrow"></div>
314
+ </div>
315
+ )}
316
+ </React.Fragment>
317
+ ))}
318
+ <div
319
+ className="range-slider-track"
320
+ {...(track && { style: updateGradient(min, max, currentValue, vertical) })}
321
+ ref={trackRef}
322
+ ></div>
323
+ </div>
324
+ {labels && (
325
+ <div className="range-slider-labels-container" ref={labelsContainerRef}>
326
+ {Array.isArray(labels) &&
327
+ labels.map((label: Label, index) => {
328
+ const labelPosition = calculateLabelPosition(min, max, labels, label, index)
329
+ const labelValue = getLabelValue(min, max, labels, label, index)
330
+ const labelStyle = Object.assign(
331
+ vertical ? { bottom: labelPosition } : { left: labelPosition },
332
+ typeof label === 'object' && 'style' in label && label.style,
333
+ )
334
+ return (
335
+ <div
336
+ className={classNames(
337
+ 'range-slider-label',
338
+ {
339
+ clickable: clickableLabels,
340
+ },
341
+ typeof label === 'object' && 'className' in label && label.className,
342
+ )}
343
+ style={labelStyle}
344
+ onMouseDown={() => handleLabelClick(labelValue)}
345
+ key={index}
346
+ ref={(el: HTMLDivElement) => {
347
+ labelsRef.current[index] = el
348
+ }}
349
+ >
350
+ {typeof label === 'object' && 'label' in label ? label.label : label}
351
+ </div>
352
+ )
353
+ })}
354
+ </div>
355
+ )}
356
+ </div>
357
+ )
358
+ },
359
+ )
360
+
361
+ CRangeSlider.propTypes = {
362
+ clickableLabels: PropTypes.bool,
363
+ disabled: PropTypes.bool,
364
+ distance: PropTypes.number,
365
+ labels: PropTypes.any,
366
+ max: PropTypes.number,
367
+ min: PropTypes.number,
368
+ name: PropTypes.oneOfType([PropTypes.array, PropTypes.string]),
369
+ step: PropTypes.number,
370
+ tooltips: PropTypes.bool,
371
+ tooltipsFormat: PropTypes.func,
372
+ track: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf<'fill'>(['fill'])]),
373
+ value: PropTypes.oneOfType([PropTypes.array, PropTypes.number]),
374
+ vertical: PropTypes.bool,
375
+ }
376
+
377
+ CRangeSlider.displayName = 'CRangeSlider'
@@ -0,0 +1,3 @@
1
+ import { CRangeSlider } from './CRangeSlider'
2
+
3
+ export { CRangeSlider }
@@ -0,0 +1,16 @@
1
+ import { CSSProperties, ReactElement } from 'react'
2
+
3
+ export type Label =
4
+ | {
5
+ label: number | ReactElement | string
6
+ value: number
7
+ className?: string | string[]
8
+ style?: CSSProperties
9
+ }
10
+ | ReactElement
11
+ | string
12
+
13
+ export type ThumbSize = {
14
+ value: number
15
+ unit: string | null
16
+ }