@coreui/react-pro 5.11.0 → 5.13.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 (280) 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 +2 -2
  4. package/dist/cjs/components/accordion/CAccordionBody.js.map +1 -1
  5. package/dist/cjs/components/accordion/CAccordionItem.d.ts +4 -0
  6. package/dist/cjs/components/accordion/CAccordionItem.js +4 -4
  7. package/dist/cjs/components/accordion/CAccordionItem.js.map +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/backdrop/CBackdrop.js.map +1 -1
  11. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  12. package/dist/cjs/components/button/CButton.js.map +1 -1
  13. package/dist/cjs/components/calendar/CCalendar.js +53 -38
  14. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  15. package/dist/cjs/components/calendar/CCalendarNavigation.js.map +1 -1
  16. package/dist/cjs/components/calendar/CCalendarPanel.js.map +1 -1
  17. package/dist/cjs/components/calendar/utils.d.ts +8 -0
  18. package/dist/cjs/components/calendar/utils.js +16 -0
  19. package/dist/cjs/components/calendar/utils.js.map +1 -1
  20. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  21. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  22. package/dist/cjs/components/card/CCardText.js.map +1 -1
  23. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  24. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  25. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  26. package/dist/cjs/components/date-picker/CDatePicker.js.map +1 -1
  27. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +53 -33
  28. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  29. package/dist/cjs/components/dropdown/CDropdown.d.ts +77 -20
  30. package/dist/cjs/components/dropdown/CDropdown.js +6 -3
  31. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  32. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  33. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  34. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  35. package/dist/cjs/components/dropdown/CDropdownMenu.js +1 -1
  36. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  37. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  38. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  39. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  40. package/dist/cjs/components/form/CFormInput.js.map +1 -1
  41. package/dist/cjs/components/form/CFormLabel.js.map +1 -1
  42. package/dist/cjs/components/form/CFormText.js.map +1 -1
  43. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  44. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  45. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  46. package/dist/cjs/components/header/CHeaderToggler.js.map +1 -1
  47. package/dist/cjs/components/index.d.ts +1 -0
  48. package/dist/cjs/components/link/CLink.js.map +1 -1
  49. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  50. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  51. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  52. package/dist/cjs/components/modal/CModal.js.map +1 -1
  53. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  54. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  55. package/dist/cjs/components/multi-select/CMultiSelect.d.ts +6 -0
  56. package/dist/cjs/components/multi-select/CMultiSelect.js +21 -4
  57. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  58. package/dist/cjs/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  59. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  60. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  61. package/dist/cjs/components/nav/CNav.js.map +1 -1
  62. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  63. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  64. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  65. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  66. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  67. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  68. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  69. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  70. package/dist/cjs/components/navbar/CNavbarToggler.js.map +1 -1
  71. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  72. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  73. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  74. package/dist/cjs/components/password-input/CPasswordInput.d.ts +43 -0
  75. package/dist/cjs/components/password-input/CPasswordInput.js +35 -0
  76. package/dist/cjs/components/password-input/CPasswordInput.js.map +1 -0
  77. package/dist/cjs/components/password-input/index.d.ts +2 -0
  78. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  79. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  80. package/dist/cjs/components/popover/CPopover.d.ts +75 -20
  81. package/dist/cjs/components/popover/CPopover.js +8 -21
  82. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  83. package/dist/cjs/components/progress/CProgressBar.js.map +1 -1
  84. package/dist/cjs/components/range-slider/CRangeSlider.js.map +1 -1
  85. package/dist/cjs/components/rating/CRating.js.map +1 -1
  86. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  87. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  88. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  89. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  90. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  91. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  92. package/dist/cjs/components/smart-table/CSmartTableHead.js +3 -1
  93. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  94. package/dist/cjs/components/smart-table/types.d.ts +1 -1
  95. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  96. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  97. package/dist/cjs/components/tabs/CTab.js.map +1 -1
  98. package/dist/cjs/components/tabs/CTabList.js.map +1 -1
  99. package/dist/cjs/components/tabs/CTabPane.js.map +1 -1
  100. package/dist/cjs/components/tabs/CTabPanel.js.map +1 -1
  101. package/dist/cjs/components/time-picker/CTimePicker.js +13 -7
  102. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  103. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  104. package/dist/cjs/components/time-picker/utils.d.ts +10 -0
  105. package/dist/cjs/components/time-picker/utils.js +25 -9
  106. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  107. package/dist/cjs/components/toast/CToast.js.map +1 -1
  108. package/dist/cjs/components/tooltip/CTooltip.d.ts +67 -15
  109. package/dist/cjs/components/tooltip/CTooltip.js +8 -21
  110. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  111. package/dist/cjs/components/widgets/CWidgetStatsF.js.map +1 -1
  112. package/dist/cjs/hooks/useClipboard.js.map +1 -1
  113. package/dist/cjs/hooks/useColorModes.js +5 -5
  114. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  115. package/dist/cjs/hooks/useDebouncedCallback.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/@coreui/icons-react/dist/index.esm.js.map +1 -1
  119. package/dist/cjs/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
  120. package/dist/cjs/node_modules/react-device-detect/dist/lib.js +1 -1
  121. package/dist/cjs/node_modules/react-device-detect/dist/lib.js.map +1 -1
  122. package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js +9 -9
  123. package/dist/cjs/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -1
  124. package/dist/cjs/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  125. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  126. package/dist/cjs/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
  127. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  128. package/dist/cjs/utils/getNextActiveElement.js.map +1 -1
  129. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  130. package/dist/esm/components/accordion/CAccordion.js.map +1 -1
  131. package/dist/esm/components/accordion/CAccordionBody.js +2 -2
  132. package/dist/esm/components/accordion/CAccordionBody.js.map +1 -1
  133. package/dist/esm/components/accordion/CAccordionItem.d.ts +4 -0
  134. package/dist/esm/components/accordion/CAccordionItem.js +4 -4
  135. package/dist/esm/components/accordion/CAccordionItem.js.map +1 -1
  136. package/dist/esm/components/alert/CAlert.js.map +1 -1
  137. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  138. package/dist/esm/components/avatar/CAvatar.js +1 -1
  139. package/dist/esm/components/backdrop/CBackdrop.js.map +1 -1
  140. package/dist/esm/components/badge/CBadge.js +1 -1
  141. package/dist/esm/components/badge/CBadge.js.map +1 -1
  142. package/dist/esm/components/button/CButton.js.map +1 -1
  143. package/dist/esm/components/calendar/CCalendar.js +54 -39
  144. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  145. package/dist/esm/components/calendar/CCalendarNavigation.js.map +1 -1
  146. package/dist/esm/components/calendar/CCalendarPanel.js.map +1 -1
  147. package/dist/esm/components/calendar/utils.d.ts +8 -0
  148. package/dist/esm/components/calendar/utils.js +16 -1
  149. package/dist/esm/components/calendar/utils.js.map +1 -1
  150. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  151. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  152. package/dist/esm/components/card/CCardText.js.map +1 -1
  153. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  154. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  155. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  156. package/dist/esm/components/date-picker/CDatePicker.js.map +1 -1
  157. package/dist/esm/components/date-range-picker/CDateRangePicker.js +47 -27
  158. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  159. package/dist/esm/components/dropdown/CDropdown.d.ts +77 -20
  160. package/dist/esm/components/dropdown/CDropdown.js +6 -3
  161. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  162. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  163. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  164. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  165. package/dist/esm/components/dropdown/CDropdownMenu.js +1 -1
  166. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  167. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  168. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  169. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  170. package/dist/esm/components/form/CFormInput.js.map +1 -1
  171. package/dist/esm/components/form/CFormLabel.js.map +1 -1
  172. package/dist/esm/components/form/CFormText.js.map +1 -1
  173. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  174. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  175. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  176. package/dist/esm/components/header/CHeaderToggler.js.map +1 -1
  177. package/dist/esm/components/index.d.ts +1 -0
  178. package/dist/esm/components/link/CLink.js.map +1 -1
  179. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  180. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  181. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  182. package/dist/esm/components/modal/CModal.js.map +1 -1
  183. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  184. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  185. package/dist/esm/components/multi-select/CMultiSelect.d.ts +6 -0
  186. package/dist/esm/components/multi-select/CMultiSelect.js +22 -5
  187. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  188. package/dist/esm/components/multi-select/CMultiSelectNativeSelect.js.map +1 -1
  189. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  190. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  191. package/dist/esm/components/nav/CNav.js.map +1 -1
  192. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  193. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  194. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  195. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  196. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  197. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  198. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  199. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  200. package/dist/esm/components/navbar/CNavbarToggler.js.map +1 -1
  201. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  202. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  203. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  204. package/dist/esm/components/password-input/CPasswordInput.d.ts +43 -0
  205. package/dist/esm/components/password-input/CPasswordInput.js +33 -0
  206. package/dist/esm/components/password-input/CPasswordInput.js.map +1 -0
  207. package/dist/esm/components/password-input/index.d.ts +2 -0
  208. package/dist/esm/components/picker/CPicker.js.map +1 -1
  209. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  210. package/dist/esm/components/popover/CPopover.d.ts +75 -20
  211. package/dist/esm/components/popover/CPopover.js +9 -22
  212. package/dist/esm/components/popover/CPopover.js.map +1 -1
  213. package/dist/esm/components/progress/CProgressBar.js.map +1 -1
  214. package/dist/esm/components/range-slider/CRangeSlider.js.map +1 -1
  215. package/dist/esm/components/rating/CRating.js.map +1 -1
  216. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  217. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  218. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  219. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  220. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  221. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  222. package/dist/esm/components/smart-table/CSmartTableHead.js +3 -1
  223. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  224. package/dist/esm/components/smart-table/types.d.ts +1 -1
  225. package/dist/esm/components/smart-table/utils.js +1 -1
  226. package/dist/esm/components/smart-table/utils.js.map +1 -1
  227. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  228. package/dist/esm/components/tabs/CTab.js.map +1 -1
  229. package/dist/esm/components/tabs/CTabList.js.map +1 -1
  230. package/dist/esm/components/tabs/CTabPane.js.map +1 -1
  231. package/dist/esm/components/tabs/CTabPanel.js.map +1 -1
  232. package/dist/esm/components/time-picker/CTimePicker.js +14 -8
  233. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  234. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  235. package/dist/esm/components/time-picker/utils.d.ts +10 -0
  236. package/dist/esm/components/time-picker/utils.js +25 -10
  237. package/dist/esm/components/time-picker/utils.js.map +1 -1
  238. package/dist/esm/components/toast/CToast.js.map +1 -1
  239. package/dist/esm/components/tooltip/CTooltip.d.ts +67 -15
  240. package/dist/esm/components/tooltip/CTooltip.js +9 -22
  241. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  242. package/dist/esm/components/widgets/CWidgetStatsF.js.map +1 -1
  243. package/dist/esm/hooks/useClipboard.js.map +1 -1
  244. package/dist/esm/hooks/useColorModes.js +5 -5
  245. package/dist/esm/hooks/useColorModes.js.map +1 -1
  246. package/dist/esm/hooks/useDebouncedCallback.js.map +1 -1
  247. package/dist/esm/index.js +1 -0
  248. package/dist/esm/index.js.map +1 -1
  249. package/dist/esm/node_modules/@coreui/icons-react/dist/index.esm.js.map +1 -1
  250. package/dist/esm/node_modules/dom-helpers/esm/hasClass.js.map +1 -1
  251. package/dist/esm/node_modules/react-device-detect/dist/lib.js +1 -1
  252. package/dist/esm/node_modules/react-device-detect/dist/lib.js.map +1 -1
  253. package/dist/esm/node_modules/react-transition-group/esm/Transition.js.map +1 -1
  254. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  255. package/dist/esm/node_modules/ua-parser-js/dist/ua-parser.min.js.map +1 -1
  256. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  257. package/dist/esm/utils/getNextActiveElement.js.map +1 -1
  258. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  259. package/package.json +9 -9
  260. package/src/components/accordion/CAccordionBody.tsx +3 -3
  261. package/src/components/accordion/CAccordionItem.tsx +9 -5
  262. package/src/components/calendar/CCalendar.tsx +74 -56
  263. package/src/components/calendar/CCalendarNavigation.tsx +2 -2
  264. package/src/components/calendar/CCalendarPanel.tsx +4 -4
  265. package/src/components/calendar/utils.ts +33 -10
  266. package/src/components/date-picker/CDatePicker.tsx +1 -1
  267. package/src/components/date-range-picker/CDateRangePicker.tsx +37 -21
  268. package/src/components/dropdown/CDropdown.tsx +106 -26
  269. package/src/components/dropdown/CDropdownMenu.tsx +0 -1
  270. package/src/components/index.ts +1 -0
  271. package/src/components/multi-select/CMultiSelect.tsx +49 -14
  272. package/src/components/password-input/CPasswordInput.tsx +164 -0
  273. package/src/components/password-input/index.ts +3 -0
  274. package/src/components/popover/CPopover.tsx +103 -43
  275. package/src/components/smart-table/CSmartTableHead.tsx +3 -0
  276. package/src/components/smart-table/types.ts +7 -1
  277. package/src/components/time-picker/CTimePicker.tsx +19 -12
  278. package/src/components/time-picker/utils.ts +30 -14
  279. package/src/components/tooltip/CTooltip.tsx +94 -38
  280. package/src/hooks/useColorModes.ts +5 -5
@@ -9,6 +9,7 @@ import React, {
9
9
  } from 'react'
10
10
  import classNames from 'classnames'
11
11
  import PropTypes from 'prop-types'
12
+ import type { Options } from '@popperjs/core'
12
13
 
13
14
  import { CConditionalPortal } from '../conditional-portal'
14
15
  import { useForkedRef, usePopper } from '../../hooks'
@@ -18,65 +19,132 @@ import { executeAfterTransition, getRTLPlacement } from '../../utils'
18
19
 
19
20
  export interface CPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'content'> {
20
21
  /**
21
- * Apply a CSS fade transition to the popover.
22
+ * Adds a fade transition animation to the React Popover.
22
23
  *
23
24
  * @since 4.9.0
24
25
  */
25
26
  animation?: boolean
27
+
26
28
  /**
27
- * A string of all className you want applied to the component.
29
+ * Custom class name(s) for additional styling.
28
30
  */
29
31
  className?: string
32
+
30
33
  /**
31
- * Appends the react popover to a specific element. You can pass an HTML element or function that returns a single element. By default `document.body`.
34
+ * Defines the container element to which the React Popover is appended.
35
+ * Accepts:
36
+ * - A DOM element (`HTMLElement` or `DocumentFragment`)
37
+ * - A function that returns a single element
38
+ * - `null` (defaults to `document.body`)
39
+ *
40
+ * @example
41
+ * <CPopover container={document.getElementById('my-container')}>...</CPopover>
32
42
  *
43
+ * @default document.body
33
44
  * @since 4.11.0
34
45
  */
35
46
  container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null
47
+
36
48
  /**
37
- * Content node for your component.
49
+ * Main content of the React Popover. It can be a string or any valid React node.
38
50
  */
39
51
  content: ReactNode | string
52
+
40
53
  /**
41
- * Offset of the popover relative to its target.
42
- */
43
- offset?: [number, number]
44
- /**
45
- * The delay for displaying and hiding the popover (in milliseconds). When a numerical value is provided, the delay applies to both the hide and show actions. The object structure for specifying the delay is as follows: delay: `{ 'show': 500, 'hide': 100 }`.
54
+ * Delay (in milliseconds) before showing or hiding the React Popover.
55
+ * - If a number is provided, that delay applies to both "show" and "hide".
56
+ * - If an object is provided, use separate values for "show" and "hide".
57
+ *
58
+ * @example
59
+ * // Delays 300ms on both show and hide
60
+ * <CPopover delay={300}>...</CPopover>
61
+ *
62
+ * // Delays 500ms on show and 100ms on hide
63
+ * <CPopover delay={{ show: 500, hide: 100 }}>...</CPopover>
46
64
  *
47
65
  * @since 4.9.0
48
66
  */
49
67
  delay?: number | { show: number; hide: number }
68
+
50
69
  /**
51
- * Specify the desired order of fallback placements by providing a list of placements as an array. The placements should be prioritized based on preference.
70
+ * Specifies the fallback placements when the preferred `placement` cannot be met.
52
71
  *
72
+ * @type 'top', 'right', 'bottom', 'left' | ('top', 'right', 'bottom', 'left')[]
53
73
  * @since 4.9.0
54
74
  */
55
75
  fallbackPlacements?: Placements | Placements[]
76
+
56
77
  /**
57
- * Callback fired when the component requests to be hidden.
78
+ * Offset of the React Popover relative to its toggle element, in the form `[x, y]`.
79
+ *
80
+ * @example
81
+ * // Offset the menu 0px in X and 10px in Y direction
82
+ * <CPopover offset={[0, 10]}>...</CPopover>
83
+ *
84
+ * // Offset the menu 5px in both X and Y direction
85
+ * <CPopover offset={[5, 5]}>...</CPopover>
86
+ */
87
+ offset?: [number, number]
88
+
89
+ /**
90
+ * Invoked when the React Popover is about to hide.
58
91
  */
59
92
  onHide?: () => void
93
+
60
94
  /**
61
- * Callback fired when the component requests to be shown.
95
+ * Invoked when the React Popover is about to show.
62
96
  */
63
97
  onShow?: () => void
98
+
64
99
  /**
65
- * Title node for your component.
100
+ * Placement of the React Popover. Popper.js may override this based on available space.
66
101
  */
67
- title?: ReactNode | string
102
+ placement?: 'auto' | 'top' | 'right' | 'bottom' | 'left'
103
+
68
104
  /**
69
- * Sets which event handlers you’d like provided to your toggle prop. You can specify one trigger or an array of them.
105
+ * Allows customization of the Popper.js configuration for the React Popover.
106
+ * Can be an object or a function returning a modified configuration.
107
+ * [Learn more](https://popper.js.org/docs/v2/constructors/#options)
108
+ *
109
+ * @example
110
+ * <CPopover
111
+ * popperConfig={(defaultConfig) => ({
112
+ * ...defaultConfig,
113
+ * strategy: 'fixed',
114
+ * modifiers: [
115
+ * ...defaultConfig.modifiers,
116
+ * { name: 'computeStyles', options: { adaptive: false } },
117
+ * ],
118
+ * })}
119
+ * >...</CPopover>
70
120
  *
71
- * @type 'hover' | 'focus' | 'click'
121
+ * @since 5.5.0
72
122
  */
73
- trigger?: Triggers | Triggers[]
123
+ popperConfig?: Partial<Options> | ((defaultPopperConfig: Partial<Options>) => Partial<Options>)
124
+
74
125
  /**
75
- * Describes the placement of your component after Popper.js has applied all the modifiers that may have flipped or altered the originally provided placement property.
126
+ * Title for the React Popover header. Can be a string or any valid React node.
76
127
  */
77
- placement?: 'auto' | 'top' | 'right' | 'bottom' | 'left'
128
+ title?: ReactNode | string
129
+
78
130
  /**
79
- * Toggle the visibility of popover component.
131
+ * Determines which events trigger the visibility of the React Popover. Can be a single trigger or an array of triggers.
132
+ *
133
+ * @example
134
+ * // Hover-only popover
135
+ * <CPopover trigger="hover">...</CPopover>
136
+ *
137
+ * // Hover + click combined
138
+ * <CPopover trigger={['hover', 'click']}>...</CPopover>
139
+ *
140
+ * @type 'hover' | 'focus' | 'click' | ('hover' | 'focus' | 'click')[]
141
+ */
142
+ trigger?: Triggers | Triggers[]
143
+
144
+ /**
145
+ * Controls the visibility of the React Popover.
146
+ * - `true` shows the popover.
147
+ * - `false` hides the popover.
80
148
  */
81
149
  visible?: boolean
82
150
  }
@@ -95,12 +163,13 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
95
163
  onHide,
96
164
  onShow,
97
165
  placement = 'top',
166
+ popperConfig,
98
167
  title,
99
168
  trigger = 'click',
100
169
  visible,
101
170
  ...rest
102
171
  },
103
- ref,
172
+ ref
104
173
  ) => {
105
174
  const popoverRef = useRef<HTMLDivElement>(null)
106
175
  const togglerRef = useRef(null)
@@ -114,30 +183,20 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
114
183
 
115
184
  const _delay = typeof delay === 'number' ? { show: delay, hide: delay } : delay
116
185
 
117
- const popperConfig = {
186
+ const defaultPopperConfig: Partial<Options> = {
118
187
  modifiers: [
119
- {
120
- name: 'arrow',
121
- options: {
122
- element: '.popover-arrow',
123
- },
124
- },
125
- {
126
- name: 'flip',
127
- options: {
128
- fallbackPlacements: fallbackPlacements,
129
- },
130
- },
131
- {
132
- name: 'offset',
133
- options: {
134
- offset: offset,
135
- },
136
- },
188
+ { name: 'arrow', options: { element: '.popover-arrow' } },
189
+ { name: 'flip', options: { fallbackPlacements } },
190
+ { name: 'offset', options: { offset } },
137
191
  ],
138
192
  placement: getRTLPlacement(placement, togglerRef.current),
139
193
  }
140
194
 
195
+ const computedPopperConfig: Partial<Options> = {
196
+ ...defaultPopperConfig,
197
+ ...(typeof popperConfig === 'function' ? popperConfig(defaultPopperConfig) : popperConfig),
198
+ }
199
+
141
200
  useEffect(() => {
142
201
  if (visible) {
143
202
  handleShow()
@@ -149,7 +208,7 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
149
208
 
150
209
  useEffect(() => {
151
210
  if (mounted && togglerRef.current && popoverRef.current) {
152
- initPopper(togglerRef.current, popoverRef.current, popperConfig)
211
+ initPopper(togglerRef.current, popoverRef.current, computedPopperConfig)
153
212
  setTimeout(() => {
154
213
  setVisible(true)
155
214
  }, _delay.show)
@@ -215,7 +274,7 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
215
274
  fade: animation,
216
275
  show: _visible,
217
276
  },
218
- className,
277
+ className
219
278
  )}
220
279
  id={id}
221
280
  ref={forkedRef}
@@ -230,7 +289,7 @@ export const CPopover = forwardRef<HTMLDivElement, CPopoverProps>(
230
289
  </CConditionalPortal>
231
290
  </>
232
291
  )
233
- },
292
+ }
234
293
  )
235
294
 
236
295
  CPopover.propTypes = {
@@ -251,6 +310,7 @@ CPopover.propTypes = {
251
310
  onHide: PropTypes.func,
252
311
  onShow: PropTypes.func,
253
312
  placement: PropTypes.oneOf(['auto', 'top', 'right', 'bottom', 'left']),
313
+ popperConfig: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
254
314
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
255
315
  trigger: triggerPropType,
256
316
  visible: PropTypes.bool,
@@ -177,6 +177,9 @@ export const CSmartTableHead: PolymorphicRefForwardingComponent<'thead', CSmartT
177
177
  (value: any) =>
178
178
  handleOnCustomFilterChange &&
179
179
  handleOnCustomFilterChange(getColumnKey(column), value),
180
+ columnFilterState && columnFilterState[getColumnKey(column)]
181
+ ? columnFilterState[getColumnKey(column)]
182
+ : undefined
180
183
  )
181
184
  ) : (
182
185
  <CFormInput
@@ -6,7 +6,13 @@ import { CTableRowProps } from '../table/CTableRow'
6
6
 
7
7
  export type Column = {
8
8
  children?: Column[]
9
- filter?: boolean | ((values: any[], onChange: (value: any) => void) => ReactNode)
9
+ filter?:
10
+ | boolean
11
+ | ((
12
+ values: any[],
13
+ onChange: (value: any) => void,
14
+ state: ColumnFilterValue | undefined
15
+ ) => ReactNode)
10
16
  group?: string
11
17
  key: string
12
18
  label?: string
@@ -200,7 +200,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
200
200
  visible,
201
201
  ...rest
202
202
  },
203
- ref,
203
+ ref
204
204
  ) => {
205
205
  const formRef = useRef<HTMLFormElement>()
206
206
  const inputRef = useRef<HTMLInputElement>(null)
@@ -239,8 +239,9 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
239
239
  })
240
240
  : ''
241
241
  }
242
-
243
- date && setAmPm(getAmPm(new Date(date), locale))
242
+ if (date) {
243
+ setAmPm(getAmPm(new Date(date), locale))
244
+ }
244
245
  }, [date])
245
246
 
246
247
  useEffect(() => {
@@ -262,7 +263,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
262
263
  const handleClear = (event: React.MouseEvent<HTMLElement>) => {
263
264
  event.stopPropagation()
264
265
  setDate(null)
265
- onTimeChange && onTimeChange(null)
266
+ onTimeChange?.(null)
266
267
  }
267
268
 
268
269
  const handleFormValidation = (form: HTMLFormElement) => {
@@ -279,7 +280,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
279
280
 
280
281
  const handleOnChange = useDebouncedCallback(
281
282
  (value: string) => isValidTime(value) && setDate(convertTimeToDate(value)),
282
- inputOnChangeDelay,
283
+ inputOnChangeDelay
283
284
  )
284
285
 
285
286
  const handleTimeChange = (set: 'hours' | 'minutes' | 'seconds' | 'toggle', value: string) => {
@@ -311,7 +312,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
311
312
  }
312
313
 
313
314
  setDate(new Date(_date))
314
- onTimeChange && onTimeChange(_date.toTimeString(), _date.toLocaleTimeString(), _date)
315
+ onTimeChange?.(_date.toTimeString(), _date.toLocaleTimeString(), _date)
315
316
  }
316
317
 
317
318
  const InputGroup = () => (
@@ -456,7 +457,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
456
457
  'is-invalid': isValid === false ? true : false,
457
458
  'is-valid': isValid,
458
459
  },
459
- className,
460
+ className
460
461
  )}
461
462
  container={container}
462
463
  disabled={disabled}
@@ -470,7 +471,10 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
470
471
  size={cancelButtonSize}
471
472
  variant={cancelButtonVariant}
472
473
  onClick={() => {
473
- initialDate && setDate(new Date(initialDate))
474
+ if (initialDate) {
475
+ setDate(new Date(initialDate))
476
+ }
477
+
474
478
  setVisible(false)
475
479
  }}
476
480
  >
@@ -493,12 +497,15 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
493
497
  }
494
498
  onHide={() => {
495
499
  setVisible(false)
496
- onHide && onHide()
500
+ onHide?.()
497
501
  }}
498
502
  onShow={() => {
499
- date && setInitialDate(new Date(date))
503
+ if (date) {
504
+ setInitialDate(new Date(date))
505
+ }
506
+
500
507
  setVisible(true)
501
- onShow && onShow()
508
+ onShow?.()
502
509
  }}
503
510
  portal={portal}
504
511
  toggler={InputGroup()}
@@ -550,7 +557,7 @@ export const CTimePicker = forwardRef<HTMLDivElement | HTMLLIElement, CTimePicke
550
557
  </CPicker>
551
558
  </CFormControlWrapper>
552
559
  )
553
- },
560
+ }
554
561
  )
555
562
 
556
563
  CTimePicker.propTypes = {
@@ -65,12 +65,12 @@ export const getAmPm = (date: Date, locale: string): AmPm => {
65
65
  export const formatTimePartials = (
66
66
  values: number[],
67
67
  locale: string,
68
- partial: 'hour' | 'minute' | 'second',
68
+ partial: 'hour' | 'minute' | 'second'
69
69
  ): FormattedPartial[] => {
70
70
  const date = new Date()
71
-
71
+ const forceTwoDigit = shouldUseTwoDigitHour(locale)
72
72
  const formatter = new Intl.DateTimeFormat(locale, {
73
- hour: 'numeric',
73
+ hour: forceTwoDigit ? '2-digit' : 'numeric',
74
74
  minute: '2-digit',
75
75
  second: '2-digit',
76
76
  })
@@ -109,32 +109,32 @@ export const getLocalizedTimePartials = (
109
109
  ampm: 'auto' | boolean = 'auto',
110
110
  hours: boolean | number[] | ((hour: number) => number[]) = [],
111
111
  minutes: boolean | number[] | ((minute: number) => number[]) = [],
112
- seconds: boolean | number[] | ((second: number) => number[]) = [],
112
+ seconds: boolean | number[] | ((second: number) => number[]) = []
113
113
  ): LocalizedTimePartials => {
114
114
  const hour12 = (ampm === 'auto' && isAmPm(locale)) || ampm === true
115
115
 
116
116
  const listOfHours =
117
117
  Array.isArray(hours) && hours.length > 0
118
118
  ? hours
119
- : (typeof hours === 'function'
119
+ : typeof hours === 'function'
120
120
  ? Array.from({ length: hour12 ? 12 : 24 }, (_, i) => (hour12 ? i + 1 : i)).filter((hour) =>
121
- hours(hour),
121
+ hours(hour)
122
122
  )
123
- : Array.from({ length: hour12 ? 12 : 24 }, (_, i) => (hour12 ? i + 1 : i)))
123
+ : Array.from({ length: hour12 ? 12 : 24 }, (_, i) => (hour12 ? i + 1 : i))
124
124
 
125
125
  const listOfMinutes =
126
126
  Array.isArray(minutes) && minutes.length > 0
127
127
  ? minutes
128
- : (typeof minutes === 'function'
128
+ : typeof minutes === 'function'
129
129
  ? Array.from({ length: 60 }, (_, i) => i).filter((minute) => minutes(minute))
130
- : Array.from({ length: 60 }, (_, i) => i))
130
+ : Array.from({ length: 60 }, (_, i) => i)
131
131
 
132
132
  const listOfSeconds =
133
133
  Array.isArray(seconds) && seconds.length > 0
134
134
  ? seconds
135
- : (typeof seconds === 'function'
135
+ : typeof seconds === 'function'
136
136
  ? Array.from({ length: 60 }, (_, i) => i).filter((second) => seconds(second))
137
- : Array.from({ length: 60 }, (_, i) => i))
137
+ : Array.from({ length: 60 }, (_, i) => i)
138
138
 
139
139
  return {
140
140
  listOfHours: formatTimePartials(listOfHours, locale, 'hour'),
@@ -154,12 +154,12 @@ export const getLocalizedTimePartials = (
154
154
  export const getSelectedHour = (
155
155
  date: Date | null,
156
156
  locale: string,
157
- ampm: 'auto' | boolean = 'auto',
157
+ ampm: 'auto' | boolean = 'auto'
158
158
  ): number | string =>
159
159
  date
160
- ? ((ampm === 'auto' && isAmPm(locale)) || ampm === true
160
+ ? (ampm === 'auto' && isAmPm(locale)) || ampm === true
161
161
  ? convert24hTo12h(date.getHours())
162
- : date.getHours())
162
+ : date.getHours()
163
163
  : ''
164
164
 
165
165
  /**
@@ -195,3 +195,19 @@ export const isValidTime = (time: string): boolean => {
195
195
  const d = new Date(`1970-01-01T${time}`)
196
196
  return d instanceof Date && !Number.isNaN(d.getTime())
197
197
  }
198
+
199
+ /**
200
+ * Checks whether the given locale formats the hour "9" with a leading zero ("09")
201
+ * when using `hour: 'numeric'` in `toLocaleTimeString`.
202
+ *
203
+ * This helps determine if you should force `hour: '2-digit'` for consistent formatting.
204
+ *
205
+ * @param {string} locale - The locale code (e.g., "en-US", "pl-PL").
206
+ * @returns {boolean} `true` if the formatted hour starts with a leading zero, otherwise `false`.
207
+ */
208
+ export const shouldUseTwoDigitHour = (locale: string): boolean => {
209
+ const d = new Date(2020, 0, 1, 7, 5, 7) // 7:05:07
210
+ const formatted = d.toLocaleTimeString(locale)
211
+
212
+ return formatted.startsWith('0') // check if the hour starts with "0"
213
+ }