@coreui/react-pro 5.0.0-rc.0 → 5.0.0-rc.1

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 (430) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/alert/CAlertHeading.d.ts +7 -6
  3. package/dist/cjs/components/alert/CAlertHeading.js +2 -2
  4. package/dist/cjs/components/alert/CAlertHeading.js.map +1 -1
  5. package/dist/cjs/components/badge/CBadge.d.ts +7 -6
  6. package/dist/cjs/components/badge/CBadge.js +2 -2
  7. package/dist/cjs/components/badge/CBadge.js.map +1 -1
  8. package/dist/cjs/components/button/CButton.d.ts +7 -6
  9. package/dist/cjs/components/button/CButton.js +3 -3
  10. package/dist/cjs/components/button/CButton.js.map +1 -1
  11. package/dist/cjs/components/calendar/CCalendar.d.ts +3 -3
  12. package/dist/cjs/components/calendar/CCalendar.js +10 -8
  13. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  14. package/dist/cjs/components/calendar/utils.js.map +1 -1
  15. package/dist/cjs/components/card/CCardHeader.d.ts +7 -6
  16. package/dist/cjs/components/card/CCardHeader.js +2 -2
  17. package/dist/cjs/components/card/CCardHeader.js.map +1 -1
  18. package/dist/cjs/components/card/CCardImage.d.ts +7 -6
  19. package/dist/cjs/components/card/CCardImage.js +2 -2
  20. package/dist/cjs/components/card/CCardImage.js.map +1 -1
  21. package/dist/cjs/components/card/CCardSubtitle.d.ts +7 -6
  22. package/dist/cjs/components/card/CCardSubtitle.js +2 -2
  23. package/dist/cjs/components/card/CCardSubtitle.js.map +1 -1
  24. package/dist/cjs/components/card/CCardText.d.ts +7 -6
  25. package/dist/cjs/components/card/CCardText.js +2 -2
  26. package/dist/cjs/components/card/CCardText.js.map +1 -1
  27. package/dist/cjs/components/card/CCardTitle.d.ts +7 -6
  28. package/dist/cjs/components/card/CCardTitle.js +2 -2
  29. package/dist/cjs/components/card/CCardTitle.js.map +1 -1
  30. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  31. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  32. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  33. package/dist/cjs/components/conditional-portal/CConditionalPortal.js +1 -1
  34. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  35. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +3 -3
  36. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +2 -2
  37. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  38. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  39. package/dist/cjs/components/dropdown/CDropdown.d.ts +6 -5
  40. package/dist/cjs/components/dropdown/CDropdown.js +4 -4
  41. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  42. package/dist/cjs/components/dropdown/CDropdownHeader.d.ts +7 -6
  43. package/dist/cjs/components/dropdown/CDropdownHeader.js +2 -2
  44. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  45. package/dist/cjs/components/dropdown/CDropdownItem.d.ts +2 -6
  46. package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
  47. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  48. package/dist/cjs/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  49. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +2 -2
  50. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  51. package/dist/cjs/components/dropdown/CDropdownMenu.d.ts +7 -6
  52. package/dist/cjs/components/dropdown/CDropdownMenu.js +2 -2
  53. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  54. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
  55. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  56. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  57. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  58. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  59. package/dist/cjs/components/form/CFormFeedback.d.ts +7 -6
  60. package/dist/cjs/components/form/CFormFeedback.js +2 -2
  61. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  62. package/dist/cjs/components/form/CFormText.d.ts +7 -6
  63. package/dist/cjs/components/form/CFormText.js +2 -2
  64. package/dist/cjs/components/form/CFormText.js.map +1 -1
  65. package/dist/cjs/components/form/CInputGroupText.d.ts +7 -6
  66. package/dist/cjs/components/form/CInputGroupText.js +2 -2
  67. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  68. package/dist/cjs/components/grid/CCol.js.map +1 -1
  69. package/dist/cjs/components/grid/CRow.js.map +1 -1
  70. package/dist/cjs/components/header/CHeaderBrand.d.ts +7 -10
  71. package/dist/cjs/components/header/CHeaderBrand.js +2 -2
  72. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  73. package/dist/cjs/components/header/CHeaderNav.d.ts +7 -6
  74. package/dist/cjs/components/header/CHeaderNav.js +2 -2
  75. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  76. package/dist/cjs/components/link/CLink.d.ts +8 -7
  77. package/dist/cjs/components/link/CLink.js +2 -2
  78. package/dist/cjs/components/link/CLink.js.map +1 -1
  79. package/dist/cjs/components/list-group/CListGroup.d.ts +7 -6
  80. package/dist/cjs/components/list-group/CListGroup.js +2 -2
  81. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  82. package/dist/cjs/components/list-group/CListGroupItem.d.ts +7 -6
  83. package/dist/cjs/components/list-group/CListGroupItem.js +6 -6
  84. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  85. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  86. package/dist/cjs/components/modal/CModal.js +1 -2
  87. package/dist/cjs/components/modal/CModal.js.map +1 -1
  88. package/dist/cjs/components/modal/CModalTitle.d.ts +4 -3
  89. package/dist/cjs/components/modal/CModalTitle.js +2 -2
  90. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  91. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  92. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  93. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  94. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  95. package/dist/cjs/components/nav/CNav.d.ts +7 -6
  96. package/dist/cjs/components/nav/CNav.js +2 -2
  97. package/dist/cjs/components/nav/CNav.js.map +1 -1
  98. package/dist/cjs/components/nav/CNavGroup.d.ts +10 -4
  99. package/dist/cjs/components/nav/CNavGroup.js +11 -16
  100. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  101. package/dist/cjs/components/nav/CNavGroupItems.d.ts +10 -3
  102. package/dist/cjs/components/nav/CNavGroupItems.js +3 -2
  103. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  104. package/dist/cjs/components/nav/CNavItem.d.ts +11 -2
  105. package/dist/cjs/components/nav/CNavItem.js +3 -2
  106. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  107. package/dist/cjs/components/nav/CNavLink.d.ts +2 -18
  108. package/dist/cjs/components/nav/CNavLink.js +3 -0
  109. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  110. package/dist/cjs/components/nav/CNavTitle.d.ts +7 -2
  111. package/dist/cjs/components/nav/CNavTitle.js +3 -2
  112. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  113. package/dist/cjs/components/navbar/CNavbar.d.ts +7 -6
  114. package/dist/cjs/components/navbar/CNavbar.js +2 -2
  115. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  116. package/dist/cjs/components/navbar/CNavbarBrand.d.ts +8 -7
  117. package/dist/cjs/components/navbar/CNavbarBrand.js +3 -3
  118. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  119. package/dist/cjs/components/navbar/CNavbarNav.d.ts +7 -6
  120. package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
  121. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  122. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  123. package/dist/cjs/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  124. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +2 -2
  125. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  126. package/dist/cjs/components/pagination/CPaginationItem.d.ts +4 -3
  127. package/dist/cjs/components/pagination/CPaginationItem.js +4 -4
  128. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  129. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  130. package/dist/cjs/components/placeholder/CPlaceholder.d.ts +7 -6
  131. package/dist/cjs/components/placeholder/CPlaceholder.js +2 -2
  132. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  133. package/dist/cjs/components/popover/CPopover.js +20 -13
  134. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  135. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  136. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  137. package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +10 -3
  138. package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -2
  139. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  140. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +9 -2
  141. package/dist/cjs/components/sidebar/CSidebarNav.js +30 -12
  142. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  143. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  144. package/dist/cjs/components/smart-table/CSmartTable.js +3 -3
  145. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  146. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  147. package/dist/cjs/components/smart-table/CSmartTableHead.d.ts +4 -3
  148. package/dist/cjs/components/smart-table/CSmartTableHead.js +3 -3
  149. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  150. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  151. package/dist/cjs/components/spinner/CSpinner.d.ts +7 -6
  152. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  153. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  154. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  155. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  156. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  157. package/dist/cjs/components/toast/CToast.js.map +1 -1
  158. package/dist/cjs/components/toast/CToastClose.d.ts +5 -4
  159. package/dist/cjs/components/toast/CToastClose.js +2 -2
  160. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  161. package/dist/cjs/components/tooltip/CTooltip.js +20 -13
  162. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  163. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  164. package/dist/cjs/helpers/index.d.ts +2 -0
  165. package/dist/cjs/helpers/polymorphicComponent.d.ts +14 -0
  166. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  167. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  168. package/dist/cjs/hooks/usePopper.js.map +1 -1
  169. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  170. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  171. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  172. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  173. package/dist/cjs/utils/isRTL.js.map +1 -1
  174. package/dist/esm/components/alert/CAlertHeading.d.ts +7 -6
  175. package/dist/esm/components/alert/CAlertHeading.js +2 -2
  176. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  177. package/dist/esm/components/badge/CBadge.d.ts +7 -6
  178. package/dist/esm/components/badge/CBadge.js +2 -2
  179. package/dist/esm/components/badge/CBadge.js.map +1 -1
  180. package/dist/esm/components/button/CButton.d.ts +7 -6
  181. package/dist/esm/components/button/CButton.js +3 -3
  182. package/dist/esm/components/button/CButton.js.map +1 -1
  183. package/dist/esm/components/calendar/CCalendar.d.ts +3 -3
  184. package/dist/esm/components/calendar/CCalendar.js +10 -8
  185. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  186. package/dist/esm/components/calendar/utils.js.map +1 -1
  187. package/dist/esm/components/card/CCardHeader.d.ts +7 -6
  188. package/dist/esm/components/card/CCardHeader.js +2 -2
  189. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  190. package/dist/esm/components/card/CCardImage.d.ts +7 -6
  191. package/dist/esm/components/card/CCardImage.js +2 -2
  192. package/dist/esm/components/card/CCardImage.js.map +1 -1
  193. package/dist/esm/components/card/CCardSubtitle.d.ts +7 -6
  194. package/dist/esm/components/card/CCardSubtitle.js +2 -2
  195. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  196. package/dist/esm/components/card/CCardText.d.ts +7 -6
  197. package/dist/esm/components/card/CCardText.js +2 -2
  198. package/dist/esm/components/card/CCardText.js.map +1 -1
  199. package/dist/esm/components/card/CCardTitle.d.ts +7 -6
  200. package/dist/esm/components/card/CCardTitle.js +2 -2
  201. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  202. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  203. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  204. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  205. package/dist/esm/components/conditional-portal/CConditionalPortal.js +1 -1
  206. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  207. package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +3 -3
  208. package/dist/esm/components/date-range-picker/CDateRangePicker.js +2 -2
  209. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  210. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  211. package/dist/esm/components/dropdown/CDropdown.d.ts +6 -5
  212. package/dist/esm/components/dropdown/CDropdown.js +4 -4
  213. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  214. package/dist/esm/components/dropdown/CDropdownHeader.d.ts +7 -6
  215. package/dist/esm/components/dropdown/CDropdownHeader.js +2 -2
  216. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  217. package/dist/esm/components/dropdown/CDropdownItem.d.ts +2 -6
  218. package/dist/esm/components/dropdown/CDropdownItem.js +3 -3
  219. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  220. package/dist/esm/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  221. package/dist/esm/components/dropdown/CDropdownItemPlain.js +2 -2
  222. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  223. package/dist/esm/components/dropdown/CDropdownMenu.d.ts +7 -6
  224. package/dist/esm/components/dropdown/CDropdownMenu.js +2 -2
  225. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  226. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  227. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  228. package/dist/esm/components/dropdown/utils.js.map +1 -1
  229. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  230. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  231. package/dist/esm/components/form/CFormFeedback.d.ts +7 -6
  232. package/dist/esm/components/form/CFormFeedback.js +2 -2
  233. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  234. package/dist/esm/components/form/CFormText.d.ts +7 -6
  235. package/dist/esm/components/form/CFormText.js +2 -2
  236. package/dist/esm/components/form/CFormText.js.map +1 -1
  237. package/dist/esm/components/form/CInputGroupText.d.ts +7 -6
  238. package/dist/esm/components/form/CInputGroupText.js +2 -2
  239. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  240. package/dist/esm/components/grid/CCol.js.map +1 -1
  241. package/dist/esm/components/grid/CRow.js.map +1 -1
  242. package/dist/esm/components/header/CHeaderBrand.d.ts +7 -10
  243. package/dist/esm/components/header/CHeaderBrand.js +2 -2
  244. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  245. package/dist/esm/components/header/CHeaderNav.d.ts +7 -6
  246. package/dist/esm/components/header/CHeaderNav.js +2 -2
  247. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  248. package/dist/esm/components/link/CLink.d.ts +8 -7
  249. package/dist/esm/components/link/CLink.js +2 -2
  250. package/dist/esm/components/link/CLink.js.map +1 -1
  251. package/dist/esm/components/list-group/CListGroup.d.ts +7 -6
  252. package/dist/esm/components/list-group/CListGroup.js +2 -2
  253. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  254. package/dist/esm/components/list-group/CListGroupItem.d.ts +7 -6
  255. package/dist/esm/components/list-group/CListGroupItem.js +6 -6
  256. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  257. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  258. package/dist/esm/components/modal/CModal.js +1 -2
  259. package/dist/esm/components/modal/CModal.js.map +1 -1
  260. package/dist/esm/components/modal/CModalTitle.d.ts +4 -3
  261. package/dist/esm/components/modal/CModalTitle.js +2 -2
  262. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  263. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  264. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  265. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  266. package/dist/esm/components/multi-select/utils.js.map +1 -1
  267. package/dist/esm/components/nav/CNav.d.ts +7 -6
  268. package/dist/esm/components/nav/CNav.js +2 -2
  269. package/dist/esm/components/nav/CNav.js.map +1 -1
  270. package/dist/esm/components/nav/CNavGroup.d.ts +10 -4
  271. package/dist/esm/components/nav/CNavGroup.js +11 -16
  272. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  273. package/dist/esm/components/nav/CNavGroupItems.d.ts +10 -3
  274. package/dist/esm/components/nav/CNavGroupItems.js +3 -2
  275. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  276. package/dist/esm/components/nav/CNavItem.d.ts +11 -2
  277. package/dist/esm/components/nav/CNavItem.js +3 -2
  278. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  279. package/dist/esm/components/nav/CNavLink.d.ts +2 -18
  280. package/dist/esm/components/nav/CNavLink.js +3 -0
  281. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  282. package/dist/esm/components/nav/CNavTitle.d.ts +7 -2
  283. package/dist/esm/components/nav/CNavTitle.js +3 -2
  284. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  285. package/dist/esm/components/navbar/CNavbar.d.ts +7 -6
  286. package/dist/esm/components/navbar/CNavbar.js +2 -2
  287. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  288. package/dist/esm/components/navbar/CNavbarBrand.d.ts +8 -7
  289. package/dist/esm/components/navbar/CNavbarBrand.js +3 -3
  290. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  291. package/dist/esm/components/navbar/CNavbarNav.d.ts +7 -6
  292. package/dist/esm/components/navbar/CNavbarNav.js +3 -3
  293. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  294. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  295. package/dist/esm/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  296. package/dist/esm/components/offcanvas/COffcanvasTitle.js +2 -2
  297. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  298. package/dist/esm/components/pagination/CPaginationItem.d.ts +4 -3
  299. package/dist/esm/components/pagination/CPaginationItem.js +4 -4
  300. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  301. package/dist/esm/components/picker/CPicker.js.map +1 -1
  302. package/dist/esm/components/placeholder/CPlaceholder.d.ts +7 -6
  303. package/dist/esm/components/placeholder/CPlaceholder.js +2 -2
  304. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  305. package/dist/esm/components/popover/CPopover.js +20 -13
  306. package/dist/esm/components/popover/CPopover.js.map +1 -1
  307. package/dist/esm/components/progress/CProgress.js.map +1 -1
  308. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  309. package/dist/esm/components/sidebar/CSidebarBrand.d.ts +10 -3
  310. package/dist/esm/components/sidebar/CSidebarBrand.js +3 -2
  311. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  312. package/dist/esm/components/sidebar/CSidebarNav.d.ts +9 -2
  313. package/dist/esm/components/sidebar/CSidebarNav.js +30 -12
  314. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  315. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  316. package/dist/esm/components/smart-table/CSmartTable.js +3 -3
  317. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  318. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  319. package/dist/esm/components/smart-table/CSmartTableHead.d.ts +4 -3
  320. package/dist/esm/components/smart-table/CSmartTableHead.js +3 -3
  321. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  322. package/dist/esm/components/smart-table/utils.js.map +1 -1
  323. package/dist/esm/components/spinner/CSpinner.d.ts +7 -6
  324. package/dist/esm/components/spinner/CSpinner.js +2 -2
  325. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  326. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  327. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  328. package/dist/esm/components/time-picker/utils.js.map +1 -1
  329. package/dist/esm/components/toast/CToast.js.map +1 -1
  330. package/dist/esm/components/toast/CToastClose.d.ts +5 -4
  331. package/dist/esm/components/toast/CToastClose.js +2 -2
  332. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  333. package/dist/esm/components/tooltip/CTooltip.js +20 -13
  334. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  335. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  336. package/dist/esm/helpers/index.d.ts +2 -0
  337. package/dist/esm/helpers/polymorphicComponent.d.ts +14 -0
  338. package/dist/esm/hooks/useColorModes.js.map +1 -1
  339. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  340. package/dist/esm/hooks/usePopper.js.map +1 -1
  341. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  342. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  343. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  344. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  345. package/dist/esm/utils/isRTL.js.map +1 -1
  346. package/package.json +10 -10
  347. package/src/components/alert/CAlertHeading.tsx +17 -14
  348. package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
  349. package/src/components/badge/CBadge.tsx +11 -7
  350. package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
  351. package/src/components/button/CButton.tsx +12 -18
  352. package/src/components/button/__tests__/CButton.spec.tsx +2 -2
  353. package/src/components/calendar/CCalendar.tsx +19 -13
  354. package/src/components/card/CCardHeader.tsx +17 -14
  355. package/src/components/card/CCardImage.tsx +9 -7
  356. package/src/components/card/CCardSubtitle.tsx +18 -14
  357. package/src/components/card/CCardText.tsx +17 -14
  358. package/src/components/card/CCardTitle.tsx +17 -14
  359. package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
  360. package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
  361. package/src/components/card/__tests__/CCardImage.spec.tsx +1 -3
  362. package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
  363. package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
  364. package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
  365. package/src/components/conditional-portal/CConditionalPortal.tsx +1 -1
  366. package/src/components/date-range-picker/CDateRangePicker.tsx +12 -12
  367. package/src/components/dropdown/CDropdown.tsx +12 -8
  368. package/src/components/dropdown/CDropdownHeader.tsx +17 -14
  369. package/src/components/dropdown/CDropdownItem.tsx +14 -20
  370. package/src/components/dropdown/CDropdownItemPlain.tsx +12 -7
  371. package/src/components/dropdown/CDropdownMenu.tsx +43 -41
  372. package/src/components/dropdown/CDropdownToggle.tsx +1 -1
  373. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +1 -1
  374. package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
  375. package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
  376. package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
  377. package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
  378. package/src/components/dropdown/types.ts +1 -1
  379. package/src/components/form/CFormFeedback.tsx +28 -27
  380. package/src/components/form/CFormText.tsx +17 -14
  381. package/src/components/form/CInputGroupText.tsx +17 -14
  382. package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
  383. package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
  384. package/src/components/header/CHeaderBrand.tsx +11 -13
  385. package/src/components/header/CHeaderBrand.tsx~HEAD +17 -14
  386. package/src/components/header/CHeaderNav.tsx +22 -19
  387. package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
  388. package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
  389. package/src/components/link/CLink.tsx +33 -29
  390. package/src/components/link/__tests__/CLink.spec.tsx +2 -2
  391. package/src/components/list-group/CListGroup.tsx +27 -24
  392. package/src/components/list-group/CListGroupItem.tsx +38 -37
  393. package/src/components/list-group/__tests__/CListGroup.spec.tsx +1 -1
  394. package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -7
  395. package/src/components/loading-button/CLoadingButton.tsx +1 -0
  396. package/src/components/modal/CModal.tsx +1 -4
  397. package/src/components/modal/CModalTitle.tsx +14 -11
  398. package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
  399. package/src/components/nav/CNav.tsx +29 -26
  400. package/src/components/nav/CNavGroup.tsx +111 -100
  401. package/src/components/nav/CNavGroupItems.tsx +21 -11
  402. package/src/components/nav/CNavItem.tsx +29 -16
  403. package/src/components/nav/CNavLink.tsx +7 -19
  404. package/src/components/nav/CNavTitle.tsx +18 -10
  405. package/src/components/nav/__tests__/CNav.spec.tsx +1 -1
  406. package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
  407. package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
  408. package/src/components/navbar/CNavbar.tsx +11 -7
  409. package/src/components/navbar/CNavbarBrand.tsx +19 -16
  410. package/src/components/navbar/CNavbarNav.tsx +22 -19
  411. package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
  412. package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
  413. package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
  414. package/src/components/offcanvas/COffcanvasTitle.tsx +17 -14
  415. package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
  416. package/src/components/pagination/CPaginationItem.tsx +33 -30
  417. package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
  418. package/src/components/placeholder/CPlaceholder.tsx +40 -41
  419. package/src/components/popover/CPopover.tsx +24 -13
  420. package/src/components/sidebar/CSidebarBrand.tsx +21 -11
  421. package/src/components/sidebar/CSidebarNav.tsx +68 -24
  422. package/src/components/smart-table/CSmartTable.tsx +1 -1
  423. package/src/components/smart-table/CSmartTableHead.tsx +179 -177
  424. package/src/components/spinner/CSpinner.tsx +11 -7
  425. package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
  426. package/src/components/toast/CToastClose.tsx +8 -7
  427. package/src/components/tooltip/CTooltip.tsx +24 -12
  428. package/src/helpers/index.ts +3 -0
  429. package/src/helpers/polymorphicComponent.ts +21 -0
  430. package/src/components/list-group/CListGroupItem.tsx~HEAD +0 -81
@@ -13,6 +13,7 @@ import { CFormCheck, CFormInput } from '../form'
13
13
  import { CTableHeaderCell, CTableRow } from '../table'
14
14
  import { CTableHead, CTableHeadProps } from '../table/CTableHead'
15
15
 
16
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
16
17
  import type { ColumnFilter, ColumnFilterValue, Column, Item, Sorter, SorterValue } from './types'
17
18
  import {
18
19
  getColumnKey,
@@ -26,10 +27,10 @@ import {
26
27
  } from './utils'
27
28
 
28
29
  export interface CSmartTableHeadProps extends CTableHeadProps {
30
+ as?: ElementType
29
31
  columnFilter?: boolean | ColumnFilter
30
32
  columnFilterState?: ColumnFilterValue
31
33
  columnSorter?: boolean | Sorter
32
- component?: string | ElementType
33
34
  columns: (Column | string)[]
34
35
  handleOnCustomFilterChange?: (key: string, value: any) => void
35
36
  handleFilterOnChange?: (key: string, value: string) => void
@@ -47,205 +48,206 @@ export interface CSmartTableHeadProps extends CTableHeadProps {
47
48
  sortingIconDescending?: ReactNode
48
49
  }
49
50
 
50
- export const CSmartTableHead = forwardRef<HTMLTableSectionElement, CSmartTableHeadProps>(
51
- (
52
- {
53
- columnFilter,
54
- columnFilterState,
55
- columnSorter,
56
- component: Component = CTableHead,
57
- columns,
58
- handleOnCustomFilterChange,
59
- handleFilterOnChange,
60
- handleFilterOnInput,
61
- handleSelectAllChecked,
62
- handleSort,
63
- items,
64
- selectable,
65
- selectAll,
66
- selectedAll,
67
- showGroups = true,
68
- sorterState,
69
- sortingIcon,
70
- sortingIconAscending,
71
- sortingIconDescending,
72
- ...rest
73
- },
74
- ref,
75
- ) => {
76
- const selectAllcheckboxRef = useRef<HTMLInputElement>(null)
77
- const [refresh, setRefresh] = useState(false)
51
+ export const CSmartTableHead: PolymorphicRefForwardingComponent<'thead', CSmartTableHeadProps> =
52
+ forwardRef<HTMLTableSectionElement, CSmartTableHeadProps>(
53
+ (
54
+ {
55
+ as: Component = CTableHead,
56
+ columnFilter,
57
+ columnFilterState,
58
+ columnSorter,
59
+ columns,
60
+ handleOnCustomFilterChange,
61
+ handleFilterOnChange,
62
+ handleFilterOnInput,
63
+ handleSelectAllChecked,
64
+ handleSort,
65
+ items,
66
+ selectable,
67
+ selectAll,
68
+ selectedAll,
69
+ showGroups = true,
70
+ sorterState,
71
+ sortingIcon,
72
+ sortingIconAscending,
73
+ sortingIconDescending,
74
+ ...rest
75
+ },
76
+ ref,
77
+ ) => {
78
+ const selectAllcheckboxRef = useRef<HTMLInputElement>(null)
79
+ const [refresh, setRefresh] = useState(false)
80
+
81
+ const _columns = useMemo(() => getColumns(columns), [columns])
82
+ const groups = useMemo(() => getColumnGroups(columns), [columns])
78
83
 
79
- const _columns = useMemo(() => getColumns(columns), [columns])
80
- const groups = useMemo(() => getColumnGroups(columns), [columns])
84
+ useEffect(() => {
85
+ if (columnFilterState && Object.keys(columnFilterState).length === 0) {
86
+ setRefresh(true)
87
+ }
88
+ }, [columnFilterState])
81
89
 
82
- useEffect(() => {
83
- if (columnFilterState && Object.keys(columnFilterState).length === 0) {
90
+ useEffect(() => {
84
91
  setRefresh(true)
85
- }
86
- }, [columnFilterState])
92
+ }, [items])
87
93
 
88
- useEffect(() => {
89
- setRefresh(true)
90
- }, [items])
94
+ useEffect(() => {
95
+ if (setRefresh) {
96
+ setRefresh(false)
97
+ }
98
+ }, [refresh])
91
99
 
92
- useEffect(() => {
93
- if (setRefresh) {
94
- setRefresh(false)
95
- }
96
- }, [refresh])
100
+ const columnSorterIcon = (column: Column | string) => {
101
+ if (getColumnSorterState(getColumnKey(column), sorterState) === 0) {
102
+ return <span className="opacity-25 float-end me-1">{sortingIcon}</span>
103
+ }
97
104
 
98
- const columnSorterIcon = (column: Column | string) => {
99
- if (getColumnSorterState(getColumnKey(column), sorterState) === 0) {
100
- return <span className="opacity-25 float-end me-1">{sortingIcon}</span>
101
- }
105
+ if (getColumnSorterState(getColumnKey(column), sorterState) === 'asc') {
106
+ return <span className="float-end me-1">{sortingIconAscending}</span>
107
+ }
102
108
 
103
- if (getColumnSorterState(getColumnKey(column), sorterState) === 'asc') {
104
- return <span className="float-end me-1">{sortingIconAscending}</span>
105
- }
109
+ if (getColumnSorterState(getColumnKey(column), sorterState) === 'desc') {
110
+ return <span className="float-end me-1">{sortingIconDescending}</span>
111
+ }
106
112
 
107
- if (getColumnSorterState(getColumnKey(column), sorterState) === 'desc') {
108
- return <span className="float-end me-1">{sortingIconDescending}</span>
113
+ return
109
114
  }
110
115
 
111
- return
112
- }
113
-
114
- return (
115
- <Component {...rest} ref={ref}>
116
- {showGroups &&
117
- groups &&
118
- groups.length > 0 &&
119
- groups.map((row, index) => (
120
- <CTableRow key={index}>
121
- {selectable && <CTableHeaderCell></CTableHeaderCell>}
122
- {row.map((cell, index) => (
116
+ return (
117
+ <Component {...rest} ref={ref}>
118
+ {showGroups &&
119
+ groups &&
120
+ groups.length > 0 &&
121
+ groups.map((row, index) => (
122
+ <CTableRow key={index}>
123
+ {selectable && <CTableHeaderCell></CTableHeaderCell>}
124
+ {row.map((cell, index) => (
125
+ <CTableHeaderCell
126
+ colSpan={cell.colspan}
127
+ {...getTableHeaderCellProps(cell)}
128
+ key={index}
129
+ >
130
+ {cell.label}
131
+ </CTableHeaderCell>
132
+ ))}
133
+ </CTableRow>
134
+ ))}
135
+ <CTableRow>
136
+ {selectable && (
137
+ <CTableHeaderCell>
138
+ {selectAll && (
139
+ <CFormCheck
140
+ checked={typeof selectedAll === 'boolean' ? selectedAll : false}
141
+ indeterminate={selectedAll === 'indeterminate' ? true : false}
142
+ onChange={() => handleSelectAllChecked && handleSelectAllChecked()}
143
+ ref={selectAllcheckboxRef}
144
+ />
145
+ )}
146
+ </CTableHeaderCell>
147
+ )}
148
+ {_columns.map((column: Column | string, index: number) => {
149
+ const isSortable =
150
+ columnSorter &&
151
+ (typeof column === 'object'
152
+ ? column.sorter === undefined
153
+ ? true
154
+ : column.sorter
155
+ : true)
156
+ return (
123
157
  <CTableHeaderCell
124
- colSpan={cell.colspan}
125
- {...getTableHeaderCellProps(cell)}
158
+ {...getTableHeaderCellProps(column)}
159
+ style={getTableHeaderCellStyles(column, columnSorter)}
126
160
  key={index}
127
- >
128
- {cell.label}
129
- </CTableHeaderCell>
130
- ))}
131
- </CTableRow>
132
- ))}
133
- <CTableRow>
134
- {selectable && (
135
- <CTableHeaderCell>
136
- {selectAll && (
137
- <CFormCheck
138
- checked={typeof selectedAll === 'boolean' ? selectedAll : false}
139
- indeterminate={selectedAll === 'indeterminate' ? true : false}
140
- onChange={() => handleSelectAllChecked && handleSelectAllChecked()}
141
- ref={selectAllcheckboxRef}
142
- />
143
- )}
144
- </CTableHeaderCell>
145
- )}
146
- {_columns.map((column: Column | string, index: number) => {
147
- const isSortable =
148
- columnSorter &&
149
- (typeof column === 'object'
150
- ? column.sorter === undefined
151
- ? true
152
- : column.sorter
153
- : true)
154
- return (
155
- <CTableHeaderCell
156
- {...getTableHeaderCellProps(column)}
157
- style={getTableHeaderCellStyles(column, columnSorter)}
158
- key={index}
159
- {...(isSortable && {
160
- onClick: () => handleSort && handleSort(getColumnKey(column), index),
161
- onKeyDown: (event) => {
162
- if (event.key === 'Enter') {
163
- handleSort && handleSort(getColumnKey(column), index)
164
- }
161
+ {...(isSortable && {
162
+ onClick: () => handleSort && handleSort(getColumnKey(column), index),
163
+ onKeyDown: (event) => {
164
+ if (event.key === 'Enter') {
165
+ handleSort && handleSort(getColumnKey(column), index)
166
+ }
165
167
 
166
- if (event.key === 'ArrowUp') {
167
- event.preventDefault()
168
- handleSort && handleSort(getColumnKey(column), index, 'asc')
169
- }
168
+ if (event.key === 'ArrowUp') {
169
+ event.preventDefault()
170
+ handleSort && handleSort(getColumnKey(column), index, 'asc')
171
+ }
170
172
 
171
- if (event.key === 'ArrowDown') {
172
- event.preventDefault()
173
- handleSort && handleSort(getColumnKey(column), index, 'desc')
174
- }
175
- },
176
- tabIndex: 0,
177
- })}
178
- >
179
- <div className="d-inline">{getColumnLabel(column)}</div>
180
- {isSortable && columnSorterIcon(column)}
181
- </CTableHeaderCell>
182
- )
183
- })}
184
- </CTableRow>
185
- {columnFilter && (
186
- <CTableRow>
187
- {selectable && <CTableHeaderCell></CTableHeaderCell>}
188
- {_columns.map((column: Column | string, index: number) => {
189
- return (
190
- <CTableHeaderCell {...getTableHeaderCellProps(column)} key={index}>
191
- {(
192
- typeof column === 'object'
193
- ? column.filter === undefined
194
- ? true
195
- : column.filter
196
- : true
197
- ) ? (
198
- typeof column !== 'string' && typeof column.filter === 'function' ? (
199
- !refresh &&
200
- column.filter(
201
- getColumnValues(items, getColumnKey(column)),
202
- (value: any) =>
203
- handleOnCustomFilterChange &&
204
- handleOnCustomFilterChange(getColumnKey(column), value),
205
- )
206
- ) : (
207
- <CFormInput
208
- size="sm"
209
- onInput={(event) =>
210
- handleFilterOnInput &&
211
- handleFilterOnInput(
212
- getColumnKey(column),
213
- (event.target as HTMLInputElement).value,
214
- )
215
- }
216
- onChange={(event) =>
217
- handleFilterOnChange &&
218
- handleFilterOnChange(
219
- getColumnKey(column),
220
- (event.target as HTMLInputElement).value,
221
- )
222
- }
223
- value={
224
- columnFilterState && columnFilterState[getColumnKey(column)]
225
- ? columnFilterState[getColumnKey(column)]
226
- : ''
227
- }
228
- aria-label={`column name: '${getColumnLabel(column)}' filter input`}
229
- />
230
- )
231
- ) : (
232
- ''
233
- )}
173
+ if (event.key === 'ArrowDown') {
174
+ event.preventDefault()
175
+ handleSort && handleSort(getColumnKey(column), index, 'desc')
176
+ }
177
+ },
178
+ tabIndex: 0,
179
+ })}
180
+ >
181
+ <div className="d-inline">{getColumnLabel(column)}</div>
182
+ {isSortable && columnSorterIcon(column)}
234
183
  </CTableHeaderCell>
235
184
  )
236
185
  })}
237
186
  </CTableRow>
238
- )}
239
- </Component>
240
- )
241
- },
242
- )
187
+ {columnFilter && (
188
+ <CTableRow>
189
+ {selectable && <CTableHeaderCell></CTableHeaderCell>}
190
+ {_columns.map((column: Column | string, index: number) => {
191
+ return (
192
+ <CTableHeaderCell {...getTableHeaderCellProps(column)} key={index}>
193
+ {(
194
+ typeof column === 'object'
195
+ ? column.filter === undefined
196
+ ? true
197
+ : column.filter
198
+ : true
199
+ ) ? (
200
+ typeof column !== 'string' && typeof column.filter === 'function' ? (
201
+ !refresh &&
202
+ column.filter(
203
+ getColumnValues(items, getColumnKey(column)),
204
+ (value: any) =>
205
+ handleOnCustomFilterChange &&
206
+ handleOnCustomFilterChange(getColumnKey(column), value),
207
+ )
208
+ ) : (
209
+ <CFormInput
210
+ size="sm"
211
+ onInput={(event) =>
212
+ handleFilterOnInput &&
213
+ handleFilterOnInput(
214
+ getColumnKey(column),
215
+ (event.target as HTMLInputElement).value,
216
+ )
217
+ }
218
+ onChange={(event) =>
219
+ handleFilterOnChange &&
220
+ handleFilterOnChange(
221
+ getColumnKey(column),
222
+ (event.target as HTMLInputElement).value,
223
+ )
224
+ }
225
+ value={
226
+ columnFilterState && columnFilterState[getColumnKey(column)]
227
+ ? columnFilterState[getColumnKey(column)]
228
+ : ''
229
+ }
230
+ aria-label={`column name: '${getColumnLabel(column)}' filter input`}
231
+ />
232
+ )
233
+ ) : (
234
+ ''
235
+ )}
236
+ </CTableHeaderCell>
237
+ )
238
+ })}
239
+ </CTableRow>
240
+ )}
241
+ </Component>
242
+ )
243
+ },
244
+ )
243
245
 
244
246
  CSmartTableHead.propTypes = {
247
+ as: PropTypes.elementType,
245
248
  columnFilter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
246
249
  columnFilterState: PropTypes.object,
247
250
  columnSorter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
248
- component: PropTypes.elementType,
249
251
  children: PropTypes.node,
250
252
  columns: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any, PropTypes.string])).isRequired, // TODO: improve this Prop Type,
251
253
  handleFilterOnChange: PropTypes.func,
@@ -2,10 +2,15 @@ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
5
6
  import { colorPropType } from '../../props'
6
7
  import type { Colors } from '../../types'
7
8
 
8
9
  export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanElement> {
10
+ /**
11
+ * Component used for the root node. Either a string to use a HTML element or a component.
12
+ */
13
+ as?: ElementType
9
14
  /**
10
15
  * A string of all className you want applied to the component.
11
16
  */
@@ -16,10 +21,6 @@ export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanE
16
21
  * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
17
22
  */
18
23
  color?: Colors
19
- /**
20
- * Component used for the root node. Either a string to use a HTML element or a component.
21
- */
22
- component?: string | ElementType
23
24
  /**
24
25
  * Size the component small.
25
26
  */
@@ -34,12 +35,15 @@ export interface CSpinnerProps extends HTMLAttributes<HTMLDivElement | HTMLSpanE
34
35
  visuallyHiddenLabel?: string
35
36
  }
36
37
 
37
- export const CSpinner = forwardRef<HTMLDivElement | HTMLSpanElement, CSpinnerProps>(
38
+ export const CSpinner: PolymorphicRefForwardingComponent<'div', CSpinnerProps> = forwardRef<
39
+ HTMLDivElement | HTMLSpanElement,
40
+ CSpinnerProps
41
+ >(
38
42
  (
39
43
  {
44
+ as: Component = 'div',
40
45
  className,
41
46
  color,
42
- component: Component = 'div',
43
47
  size,
44
48
  variant = 'border',
45
49
  visuallyHiddenLabel = 'Loading...',
@@ -68,9 +72,9 @@ export const CSpinner = forwardRef<HTMLDivElement | HTMLSpanElement, CSpinnerPro
68
72
  )
69
73
 
70
74
  CSpinner.propTypes = {
75
+ as: PropTypes.string,
71
76
  className: PropTypes.string,
72
77
  color: colorPropType,
73
- component: PropTypes.string,
74
78
  size: PropTypes.oneOf(['sm']),
75
79
  variant: PropTypes.oneOf(['border', 'grow']),
76
80
  visuallyHiddenLabel: PropTypes.string,
@@ -10,7 +10,7 @@ test('loads and displays CSpinner component', async () => {
10
10
 
11
11
  test('CSpinner customize', async () => {
12
12
  const { container } = render(
13
- <CSpinner className="bazinga" color="warning" component="h3" size="sm" variant="grow">
13
+ <CSpinner className="bazinga" color="warning" as="h3" size="sm" variant="grow">
14
14
  Test
15
15
  </CSpinner>,
16
16
  )
@@ -6,17 +6,19 @@ import { CCloseButton, CCloseButtonProps } from '../close-button/CCloseButton'
6
6
 
7
7
  import { CToastContext } from './CToast'
8
8
 
9
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
10
+
9
11
  type CombineButtonProps = CCloseButtonProps & CButtonProps
10
12
 
11
- export interface CToastCloseProps extends CombineButtonProps {
13
+ export interface CToastCloseProps extends Omit<CombineButtonProps, 'as'> {
12
14
  /**
13
15
  * Component used for the root node. Either a string to use a HTML element or a component.
14
16
  */
15
- component?: string | ElementType
17
+ as?: string | ElementType
16
18
  }
17
19
 
18
- export const CToastClose = forwardRef<HTMLButtonElement, CToastCloseProps>(
19
- ({ children, component: Component, ...rest }, ref) => {
20
+ export const CToastClose: PolymorphicRefForwardingComponent<'button', CToastCloseProps> =
21
+ forwardRef<HTMLButtonElement, CToastCloseProps>(({ children, as: Component, ...rest }, ref) => {
20
22
  const { setVisible } = useContext(CToastContext)
21
23
  return Component ? (
22
24
  <Component onClick={() => setVisible(false)} {...rest} ref={ref}>
@@ -25,12 +27,11 @@ export const CToastClose = forwardRef<HTMLButtonElement, CToastCloseProps>(
25
27
  ) : (
26
28
  <CCloseButton onClick={() => setVisible(false)} {...rest} ref={ref} />
27
29
  )
28
- },
29
- )
30
+ })
30
31
 
31
32
  CToastClose.propTypes = {
32
33
  ...CCloseButton.propTypes,
33
- component: PropTypes.elementType,
34
+ as: PropTypes.elementType,
34
35
  }
35
36
 
36
37
  CToastClose.displayName = 'CToastClose'
@@ -90,9 +90,10 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
90
90
  },
91
91
  ref,
92
92
  ) => {
93
- const tooltipRef = useRef(null)
93
+ const tooltipRef = useRef<HTMLDivElement>(null)
94
94
  const togglerRef = useRef(null)
95
95
  const forkedRef = useForkedRef(ref, tooltipRef)
96
+ const uID = useRef(`tooltip${Math.floor(Math.random() * 1_000_000)}`)
96
97
 
97
98
  const { initPopper, destroyPopper } = usePopper()
98
99
  const [_visible, setVisible] = useState(visible)
@@ -127,16 +128,6 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
127
128
  setVisible(visible)
128
129
  }, [visible])
129
130
 
130
- useEffect(() => {
131
- if (_visible && togglerRef.current && tooltipRef.current) {
132
- initPopper(togglerRef.current, tooltipRef.current, popperConfig)
133
- }
134
-
135
- return () => {
136
- destroyPopper()
137
- }
138
- }, [_visible])
139
-
140
131
  const toggleVisible = (visible: boolean) => {
141
132
  if (visible) {
142
133
  setTimeout(() => setVisible(true), _delay.show)
@@ -149,6 +140,9 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
149
140
  return (
150
141
  <>
151
142
  {React.cloneElement(children as React.ReactElement<any>, {
143
+ ...(_visible && {
144
+ 'aria-describedby': uID.current,
145
+ }),
152
146
  ref: togglerRef,
153
147
  ...((trigger === 'click' || trigger.includes('click')) && {
154
148
  onClick: () => toggleVisible(!_visible),
@@ -167,8 +161,22 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
167
161
  in={_visible}
168
162
  mountOnEnter
169
163
  nodeRef={tooltipRef}
170
- onEnter={onShow}
164
+ onEnter={() => {
165
+ if (togglerRef.current && tooltipRef.current) {
166
+ initPopper(togglerRef.current, tooltipRef.current, popperConfig)
167
+ }
168
+
169
+ onShow
170
+ }}
171
+ onEntering={() => {
172
+ if (togglerRef.current && tooltipRef.current) {
173
+ tooltipRef.current.style.display = 'initial'
174
+ }
175
+ }}
171
176
  onExit={onHide}
177
+ onExited={() => {
178
+ destroyPopper()
179
+ }}
172
180
  timeout={{
173
181
  enter: 0,
174
182
  exit: tooltipRef.current
@@ -188,8 +196,12 @@ export const CTooltip = forwardRef<HTMLDivElement, CTooltipProps>(
188
196
  },
189
197
  className,
190
198
  )}
199
+ id={uID.current}
191
200
  ref={forkedRef}
192
201
  role="tooltip"
202
+ style={{
203
+ display: 'none',
204
+ }}
193
205
  {...rest}
194
206
  >
195
207
  <div className="tooltip-arrow"></div>
@@ -0,0 +1,3 @@
1
+ import { PolymorphicRefForwardingComponent } from './polymorphicComponent'
2
+
3
+ export { PolymorphicRefForwardingComponent }
@@ -0,0 +1,21 @@
1
+ import { ComponentPropsWithRef, ElementType, PropsWithChildren, ReactNode } from 'react'
2
+
3
+ export type Omit<T, U> = Pick<T, Exclude<keyof T, keyof U>>
4
+
5
+ export type ReplaceProps<Inner extends ElementType, P> = Omit<ComponentPropsWithRef<Inner>, P> & P
6
+
7
+ export interface AsProp<As extends ElementType = ElementType> {
8
+ as?: As
9
+ }
10
+
11
+ export interface Props<As extends ElementType = ElementType> extends AsProp<As> {}
12
+
13
+ export interface PolymorphicRefForwardingComponent<TInitial extends ElementType, P = unknown> {
14
+ <As extends ElementType = TInitial>(
15
+ props: PropsWithChildren<ReplaceProps<As, Props<As> & P>>,
16
+ context?: any, // eslint-disable-line @typescript-eslint/no-explicit-any
17
+ ): ReactNode | null
18
+ propTypes?: any // eslint-disable-line @typescript-eslint/no-explicit-any
19
+ defaultProps?: Partial<P>
20
+ displayName?: string
21
+ }