@coreui/react-pro 5.0.0-beta.1 → 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 (470) 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 +1 -1
  31. package/dist/cjs/components/carousel/CCarousel.js.map +1 -1
  32. package/dist/cjs/components/carousel/CCarouselItem.js.map +1 -1
  33. package/dist/cjs/components/collapse/CCollapse.js.map +1 -1
  34. package/dist/cjs/components/conditional-portal/CConditionalPortal.js +1 -1
  35. package/dist/cjs/components/conditional-portal/CConditionalPortal.js.map +1 -1
  36. package/dist/cjs/components/date-range-picker/CDateRangePicker.d.ts +3 -3
  37. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +2 -2
  38. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  39. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  40. package/dist/cjs/components/dropdown/CDropdown.d.ts +6 -5
  41. package/dist/cjs/components/dropdown/CDropdown.js +7 -5
  42. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  43. package/dist/cjs/components/dropdown/CDropdownHeader.d.ts +7 -6
  44. package/dist/cjs/components/dropdown/CDropdownHeader.js +2 -2
  45. package/dist/cjs/components/dropdown/CDropdownHeader.js.map +1 -1
  46. package/dist/cjs/components/dropdown/CDropdownItem.d.ts +2 -6
  47. package/dist/cjs/components/dropdown/CDropdownItem.js +3 -3
  48. package/dist/cjs/components/dropdown/CDropdownItem.js.map +1 -1
  49. package/dist/cjs/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  50. package/dist/cjs/components/dropdown/CDropdownItemPlain.js +2 -2
  51. package/dist/cjs/components/dropdown/CDropdownItemPlain.js.map +1 -1
  52. package/dist/cjs/components/dropdown/CDropdownMenu.d.ts +7 -6
  53. package/dist/cjs/components/dropdown/CDropdownMenu.js +2 -2
  54. package/dist/cjs/components/dropdown/CDropdownMenu.js.map +1 -1
  55. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +1 -1
  56. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  57. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  58. package/dist/cjs/components/element-cover/CElementCover.js.map +1 -1
  59. package/dist/cjs/components/form/CFormCheck.js.map +1 -1
  60. package/dist/cjs/components/form/CFormFeedback.d.ts +7 -6
  61. package/dist/cjs/components/form/CFormFeedback.js +2 -2
  62. package/dist/cjs/components/form/CFormFeedback.js.map +1 -1
  63. package/dist/cjs/components/form/CFormText.d.ts +7 -6
  64. package/dist/cjs/components/form/CFormText.js +2 -2
  65. package/dist/cjs/components/form/CFormText.js.map +1 -1
  66. package/dist/cjs/components/form/CInputGroupText.d.ts +7 -6
  67. package/dist/cjs/components/form/CInputGroupText.js +2 -2
  68. package/dist/cjs/components/form/CInputGroupText.js.map +1 -1
  69. package/dist/cjs/components/grid/CCol.js.map +1 -1
  70. package/dist/cjs/components/grid/CRow.js.map +1 -1
  71. package/dist/cjs/components/header/CHeaderBrand.d.ts +7 -10
  72. package/dist/cjs/components/header/CHeaderBrand.js +2 -2
  73. package/dist/cjs/components/header/CHeaderBrand.js.map +1 -1
  74. package/dist/cjs/components/header/CHeaderNav.d.ts +7 -6
  75. package/dist/cjs/components/header/CHeaderNav.js +2 -2
  76. package/dist/cjs/components/header/CHeaderNav.js.map +1 -1
  77. package/dist/cjs/components/link/CLink.d.ts +8 -7
  78. package/dist/cjs/components/link/CLink.js +2 -2
  79. package/dist/cjs/components/link/CLink.js.map +1 -1
  80. package/dist/cjs/components/list-group/CListGroup.d.ts +7 -6
  81. package/dist/cjs/components/list-group/CListGroup.js +2 -2
  82. package/dist/cjs/components/list-group/CListGroup.js.map +1 -1
  83. package/dist/cjs/components/list-group/CListGroupItem.d.ts +7 -6
  84. package/dist/cjs/components/list-group/CListGroupItem.js +6 -6
  85. package/dist/cjs/components/list-group/CListGroupItem.js.map +1 -1
  86. package/dist/cjs/components/loading-button/CLoadingButton.js.map +1 -1
  87. package/dist/cjs/components/modal/CModal.js +1 -2
  88. package/dist/cjs/components/modal/CModal.js.map +1 -1
  89. package/dist/cjs/components/modal/CModalTitle.d.ts +4 -3
  90. package/dist/cjs/components/modal/CModalTitle.js +2 -2
  91. package/dist/cjs/components/modal/CModalTitle.js.map +1 -1
  92. package/dist/cjs/components/multi-select/CMultiSelect.js.map +1 -1
  93. package/dist/cjs/components/multi-select/CMultiSelectOptions.js.map +1 -1
  94. package/dist/cjs/components/multi-select/CMultiSelectSelection.js.map +1 -1
  95. package/dist/cjs/components/multi-select/utils.js.map +1 -1
  96. package/dist/cjs/components/nav/CNav.d.ts +7 -6
  97. package/dist/cjs/components/nav/CNav.js +2 -2
  98. package/dist/cjs/components/nav/CNav.js.map +1 -1
  99. package/dist/cjs/components/nav/CNavGroup.d.ts +10 -4
  100. package/dist/cjs/components/nav/CNavGroup.js +11 -16
  101. package/dist/cjs/components/nav/CNavGroup.js.map +1 -1
  102. package/dist/cjs/components/nav/CNavGroupItems.d.ts +10 -3
  103. package/dist/cjs/components/nav/CNavGroupItems.js +3 -2
  104. package/dist/cjs/components/nav/CNavGroupItems.js.map +1 -1
  105. package/dist/cjs/components/nav/CNavItem.d.ts +11 -2
  106. package/dist/cjs/components/nav/CNavItem.js +3 -2
  107. package/dist/cjs/components/nav/CNavItem.js.map +1 -1
  108. package/dist/cjs/components/nav/CNavLink.d.ts +2 -18
  109. package/dist/cjs/components/nav/CNavLink.js +3 -0
  110. package/dist/cjs/components/nav/CNavLink.js.map +1 -1
  111. package/dist/cjs/components/nav/CNavTitle.d.ts +7 -2
  112. package/dist/cjs/components/nav/CNavTitle.js +3 -2
  113. package/dist/cjs/components/nav/CNavTitle.js.map +1 -1
  114. package/dist/cjs/components/navbar/CNavbar.d.ts +7 -6
  115. package/dist/cjs/components/navbar/CNavbar.js +2 -2
  116. package/dist/cjs/components/navbar/CNavbar.js.map +1 -1
  117. package/dist/cjs/components/navbar/CNavbarBrand.d.ts +8 -7
  118. package/dist/cjs/components/navbar/CNavbarBrand.js +3 -3
  119. package/dist/cjs/components/navbar/CNavbarBrand.js.map +1 -1
  120. package/dist/cjs/components/navbar/CNavbarNav.d.ts +7 -6
  121. package/dist/cjs/components/navbar/CNavbarNav.js +3 -3
  122. package/dist/cjs/components/navbar/CNavbarNav.js.map +1 -1
  123. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  124. package/dist/cjs/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  125. package/dist/cjs/components/offcanvas/COffcanvasTitle.js +2 -2
  126. package/dist/cjs/components/offcanvas/COffcanvasTitle.js.map +1 -1
  127. package/dist/cjs/components/pagination/CPaginationItem.d.ts +4 -3
  128. package/dist/cjs/components/pagination/CPaginationItem.js +4 -4
  129. package/dist/cjs/components/pagination/CPaginationItem.js.map +1 -1
  130. package/dist/cjs/components/picker/CPicker.d.ts +2 -2
  131. package/dist/cjs/components/picker/CPicker.js +1 -1
  132. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  133. package/dist/cjs/components/placeholder/CPlaceholder.d.ts +7 -6
  134. package/dist/cjs/components/placeholder/CPlaceholder.js +2 -2
  135. package/dist/cjs/components/placeholder/CPlaceholder.js.map +1 -1
  136. package/dist/cjs/components/popover/CPopover.js +20 -13
  137. package/dist/cjs/components/popover/CPopover.js.map +1 -1
  138. package/dist/cjs/components/progress/CProgress.js.map +1 -1
  139. package/dist/cjs/components/sidebar/CSidebar.js.map +1 -1
  140. package/dist/cjs/components/sidebar/CSidebarBrand.d.ts +10 -3
  141. package/dist/cjs/components/sidebar/CSidebarBrand.js +3 -2
  142. package/dist/cjs/components/sidebar/CSidebarBrand.js.map +1 -1
  143. package/dist/cjs/components/sidebar/CSidebarNav.d.ts +9 -2
  144. package/dist/cjs/components/sidebar/CSidebarNav.js +30 -12
  145. package/dist/cjs/components/sidebar/CSidebarNav.js.map +1 -1
  146. package/dist/cjs/components/smart-pagination/CSmartPagination.js.map +1 -1
  147. package/dist/cjs/components/smart-table/CSmartTable.d.ts +0 -1
  148. package/dist/cjs/components/smart-table/CSmartTable.js +8 -9
  149. package/dist/cjs/components/smart-table/CSmartTable.js.map +1 -1
  150. package/dist/cjs/components/smart-table/CSmartTableBody.js +3 -3
  151. package/dist/cjs/components/smart-table/CSmartTableBody.js.map +1 -1
  152. package/dist/cjs/components/smart-table/CSmartTableHead.d.ts +4 -3
  153. package/dist/cjs/components/smart-table/CSmartTableHead.js +3 -3
  154. package/dist/cjs/components/smart-table/CSmartTableHead.js.map +1 -1
  155. package/dist/cjs/components/smart-table/consts.d.ts +1 -0
  156. package/dist/cjs/components/smart-table/consts.js +6 -0
  157. package/dist/cjs/components/smart-table/consts.js.map +1 -0
  158. package/dist/cjs/components/smart-table/utils.js.map +1 -1
  159. package/dist/cjs/components/spinner/CSpinner.d.ts +7 -6
  160. package/dist/cjs/components/spinner/CSpinner.js +2 -2
  161. package/dist/cjs/components/spinner/CSpinner.js.map +1 -1
  162. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  163. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  164. package/dist/cjs/components/time-picker/utils.js.map +1 -1
  165. package/dist/cjs/components/toast/CToast.js.map +1 -1
  166. package/dist/cjs/components/toast/CToastClose.d.ts +5 -4
  167. package/dist/cjs/components/toast/CToastClose.js +2 -2
  168. package/dist/cjs/components/toast/CToastClose.js.map +1 -1
  169. package/dist/cjs/components/toast/CToaster.js +1 -1
  170. package/dist/cjs/components/toast/CToaster.js.map +1 -1
  171. package/dist/cjs/components/tooltip/CTooltip.js +20 -13
  172. package/dist/cjs/components/tooltip/CTooltip.js.map +1 -1
  173. package/dist/cjs/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  174. package/dist/cjs/components/widgets/CWidgetStatsA.js.map +1 -1
  175. package/dist/cjs/components/widgets/CWidgetStatsC.js +2 -1
  176. package/dist/cjs/components/widgets/CWidgetStatsC.js.map +1 -1
  177. package/dist/cjs/helpers/index.d.ts +2 -0
  178. package/dist/cjs/helpers/polymorphicComponent.d.ts +14 -0
  179. package/dist/cjs/hooks/useColorModes.js.map +1 -1
  180. package/dist/cjs/hooks/useForkedRef.js.map +1 -1
  181. package/dist/cjs/hooks/usePopper.js.map +1 -1
  182. package/dist/cjs/utils/executeAfterTransition.js.map +1 -1
  183. package/dist/cjs/utils/getRTLPlacement.js.map +1 -1
  184. package/dist/cjs/utils/getTransitionDurationFromElement.js.map +1 -1
  185. package/dist/cjs/utils/isObjectInArray.js.map +1 -1
  186. package/dist/cjs/utils/isRTL.js.map +1 -1
  187. package/dist/esm/components/alert/CAlertHeading.d.ts +7 -6
  188. package/dist/esm/components/alert/CAlertHeading.js +2 -2
  189. package/dist/esm/components/alert/CAlertHeading.js.map +1 -1
  190. package/dist/esm/components/badge/CBadge.d.ts +7 -6
  191. package/dist/esm/components/badge/CBadge.js +2 -2
  192. package/dist/esm/components/badge/CBadge.js.map +1 -1
  193. package/dist/esm/components/button/CButton.d.ts +7 -6
  194. package/dist/esm/components/button/CButton.js +3 -3
  195. package/dist/esm/components/button/CButton.js.map +1 -1
  196. package/dist/esm/components/calendar/CCalendar.d.ts +3 -3
  197. package/dist/esm/components/calendar/CCalendar.js +10 -8
  198. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  199. package/dist/esm/components/calendar/utils.js.map +1 -1
  200. package/dist/esm/components/card/CCardHeader.d.ts +7 -6
  201. package/dist/esm/components/card/CCardHeader.js +2 -2
  202. package/dist/esm/components/card/CCardHeader.js.map +1 -1
  203. package/dist/esm/components/card/CCardImage.d.ts +7 -6
  204. package/dist/esm/components/card/CCardImage.js +2 -2
  205. package/dist/esm/components/card/CCardImage.js.map +1 -1
  206. package/dist/esm/components/card/CCardSubtitle.d.ts +7 -6
  207. package/dist/esm/components/card/CCardSubtitle.js +2 -2
  208. package/dist/esm/components/card/CCardSubtitle.js.map +1 -1
  209. package/dist/esm/components/card/CCardText.d.ts +7 -6
  210. package/dist/esm/components/card/CCardText.js +2 -2
  211. package/dist/esm/components/card/CCardText.js.map +1 -1
  212. package/dist/esm/components/card/CCardTitle.d.ts +7 -6
  213. package/dist/esm/components/card/CCardTitle.js +2 -2
  214. package/dist/esm/components/card/CCardTitle.js.map +1 -1
  215. package/dist/esm/components/carousel/CCarousel.js +1 -1
  216. package/dist/esm/components/carousel/CCarousel.js.map +1 -1
  217. package/dist/esm/components/carousel/CCarouselItem.js.map +1 -1
  218. package/dist/esm/components/collapse/CCollapse.js.map +1 -1
  219. package/dist/esm/components/conditional-portal/CConditionalPortal.js +1 -1
  220. package/dist/esm/components/conditional-portal/CConditionalPortal.js.map +1 -1
  221. package/dist/esm/components/date-range-picker/CDateRangePicker.d.ts +3 -3
  222. package/dist/esm/components/date-range-picker/CDateRangePicker.js +2 -2
  223. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  224. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  225. package/dist/esm/components/dropdown/CDropdown.d.ts +6 -5
  226. package/dist/esm/components/dropdown/CDropdown.js +7 -5
  227. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  228. package/dist/esm/components/dropdown/CDropdownHeader.d.ts +7 -6
  229. package/dist/esm/components/dropdown/CDropdownHeader.js +2 -2
  230. package/dist/esm/components/dropdown/CDropdownHeader.js.map +1 -1
  231. package/dist/esm/components/dropdown/CDropdownItem.d.ts +2 -6
  232. package/dist/esm/components/dropdown/CDropdownItem.js +3 -3
  233. package/dist/esm/components/dropdown/CDropdownItem.js.map +1 -1
  234. package/dist/esm/components/dropdown/CDropdownItemPlain.d.ts +7 -6
  235. package/dist/esm/components/dropdown/CDropdownItemPlain.js +2 -2
  236. package/dist/esm/components/dropdown/CDropdownItemPlain.js.map +1 -1
  237. package/dist/esm/components/dropdown/CDropdownMenu.d.ts +7 -6
  238. package/dist/esm/components/dropdown/CDropdownMenu.js +2 -2
  239. package/dist/esm/components/dropdown/CDropdownMenu.js.map +1 -1
  240. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +1 -1
  241. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  242. package/dist/esm/components/dropdown/utils.js.map +1 -1
  243. package/dist/esm/components/element-cover/CElementCover.js.map +1 -1
  244. package/dist/esm/components/form/CFormCheck.js.map +1 -1
  245. package/dist/esm/components/form/CFormFeedback.d.ts +7 -6
  246. package/dist/esm/components/form/CFormFeedback.js +2 -2
  247. package/dist/esm/components/form/CFormFeedback.js.map +1 -1
  248. package/dist/esm/components/form/CFormText.d.ts +7 -6
  249. package/dist/esm/components/form/CFormText.js +2 -2
  250. package/dist/esm/components/form/CFormText.js.map +1 -1
  251. package/dist/esm/components/form/CInputGroupText.d.ts +7 -6
  252. package/dist/esm/components/form/CInputGroupText.js +2 -2
  253. package/dist/esm/components/form/CInputGroupText.js.map +1 -1
  254. package/dist/esm/components/grid/CCol.js.map +1 -1
  255. package/dist/esm/components/grid/CRow.js.map +1 -1
  256. package/dist/esm/components/header/CHeaderBrand.d.ts +7 -10
  257. package/dist/esm/components/header/CHeaderBrand.js +2 -2
  258. package/dist/esm/components/header/CHeaderBrand.js.map +1 -1
  259. package/dist/esm/components/header/CHeaderNav.d.ts +7 -6
  260. package/dist/esm/components/header/CHeaderNav.js +2 -2
  261. package/dist/esm/components/header/CHeaderNav.js.map +1 -1
  262. package/dist/esm/components/link/CLink.d.ts +8 -7
  263. package/dist/esm/components/link/CLink.js +2 -2
  264. package/dist/esm/components/link/CLink.js.map +1 -1
  265. package/dist/esm/components/list-group/CListGroup.d.ts +7 -6
  266. package/dist/esm/components/list-group/CListGroup.js +2 -2
  267. package/dist/esm/components/list-group/CListGroup.js.map +1 -1
  268. package/dist/esm/components/list-group/CListGroupItem.d.ts +7 -6
  269. package/dist/esm/components/list-group/CListGroupItem.js +6 -6
  270. package/dist/esm/components/list-group/CListGroupItem.js.map +1 -1
  271. package/dist/esm/components/loading-button/CLoadingButton.js.map +1 -1
  272. package/dist/esm/components/modal/CModal.js +1 -2
  273. package/dist/esm/components/modal/CModal.js.map +1 -1
  274. package/dist/esm/components/modal/CModalTitle.d.ts +4 -3
  275. package/dist/esm/components/modal/CModalTitle.js +2 -2
  276. package/dist/esm/components/modal/CModalTitle.js.map +1 -1
  277. package/dist/esm/components/multi-select/CMultiSelect.js.map +1 -1
  278. package/dist/esm/components/multi-select/CMultiSelectOptions.js.map +1 -1
  279. package/dist/esm/components/multi-select/CMultiSelectSelection.js.map +1 -1
  280. package/dist/esm/components/multi-select/utils.js.map +1 -1
  281. package/dist/esm/components/nav/CNav.d.ts +7 -6
  282. package/dist/esm/components/nav/CNav.js +2 -2
  283. package/dist/esm/components/nav/CNav.js.map +1 -1
  284. package/dist/esm/components/nav/CNavGroup.d.ts +10 -4
  285. package/dist/esm/components/nav/CNavGroup.js +11 -16
  286. package/dist/esm/components/nav/CNavGroup.js.map +1 -1
  287. package/dist/esm/components/nav/CNavGroupItems.d.ts +10 -3
  288. package/dist/esm/components/nav/CNavGroupItems.js +3 -2
  289. package/dist/esm/components/nav/CNavGroupItems.js.map +1 -1
  290. package/dist/esm/components/nav/CNavItem.d.ts +11 -2
  291. package/dist/esm/components/nav/CNavItem.js +3 -2
  292. package/dist/esm/components/nav/CNavItem.js.map +1 -1
  293. package/dist/esm/components/nav/CNavLink.d.ts +2 -18
  294. package/dist/esm/components/nav/CNavLink.js +3 -0
  295. package/dist/esm/components/nav/CNavLink.js.map +1 -1
  296. package/dist/esm/components/nav/CNavTitle.d.ts +7 -2
  297. package/dist/esm/components/nav/CNavTitle.js +3 -2
  298. package/dist/esm/components/nav/CNavTitle.js.map +1 -1
  299. package/dist/esm/components/navbar/CNavbar.d.ts +7 -6
  300. package/dist/esm/components/navbar/CNavbar.js +2 -2
  301. package/dist/esm/components/navbar/CNavbar.js.map +1 -1
  302. package/dist/esm/components/navbar/CNavbarBrand.d.ts +8 -7
  303. package/dist/esm/components/navbar/CNavbarBrand.js +3 -3
  304. package/dist/esm/components/navbar/CNavbarBrand.js.map +1 -1
  305. package/dist/esm/components/navbar/CNavbarNav.d.ts +7 -6
  306. package/dist/esm/components/navbar/CNavbarNav.js +3 -3
  307. package/dist/esm/components/navbar/CNavbarNav.js.map +1 -1
  308. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  309. package/dist/esm/components/offcanvas/COffcanvasTitle.d.ts +7 -6
  310. package/dist/esm/components/offcanvas/COffcanvasTitle.js +2 -2
  311. package/dist/esm/components/offcanvas/COffcanvasTitle.js.map +1 -1
  312. package/dist/esm/components/pagination/CPaginationItem.d.ts +4 -3
  313. package/dist/esm/components/pagination/CPaginationItem.js +4 -4
  314. package/dist/esm/components/pagination/CPaginationItem.js.map +1 -1
  315. package/dist/esm/components/picker/CPicker.d.ts +2 -2
  316. package/dist/esm/components/picker/CPicker.js +1 -1
  317. package/dist/esm/components/picker/CPicker.js.map +1 -1
  318. package/dist/esm/components/placeholder/CPlaceholder.d.ts +7 -6
  319. package/dist/esm/components/placeholder/CPlaceholder.js +2 -2
  320. package/dist/esm/components/placeholder/CPlaceholder.js.map +1 -1
  321. package/dist/esm/components/popover/CPopover.js +20 -13
  322. package/dist/esm/components/popover/CPopover.js.map +1 -1
  323. package/dist/esm/components/progress/CProgress.js.map +1 -1
  324. package/dist/esm/components/sidebar/CSidebar.js.map +1 -1
  325. package/dist/esm/components/sidebar/CSidebarBrand.d.ts +10 -3
  326. package/dist/esm/components/sidebar/CSidebarBrand.js +3 -2
  327. package/dist/esm/components/sidebar/CSidebarBrand.js.map +1 -1
  328. package/dist/esm/components/sidebar/CSidebarNav.d.ts +9 -2
  329. package/dist/esm/components/sidebar/CSidebarNav.js +30 -12
  330. package/dist/esm/components/sidebar/CSidebarNav.js.map +1 -1
  331. package/dist/esm/components/smart-pagination/CSmartPagination.js.map +1 -1
  332. package/dist/esm/components/smart-table/CSmartTable.d.ts +0 -1
  333. package/dist/esm/components/smart-table/CSmartTable.js +5 -5
  334. package/dist/esm/components/smart-table/CSmartTable.js.map +1 -1
  335. package/dist/esm/components/smart-table/CSmartTableBody.js +1 -1
  336. package/dist/esm/components/smart-table/CSmartTableBody.js.map +1 -1
  337. package/dist/esm/components/smart-table/CSmartTableHead.d.ts +4 -3
  338. package/dist/esm/components/smart-table/CSmartTableHead.js +3 -3
  339. package/dist/esm/components/smart-table/CSmartTableHead.js.map +1 -1
  340. package/dist/esm/components/smart-table/consts.d.ts +1 -0
  341. package/dist/esm/components/smart-table/consts.js +4 -0
  342. package/dist/esm/components/smart-table/consts.js.map +1 -0
  343. package/dist/esm/components/smart-table/utils.js.map +1 -1
  344. package/dist/esm/components/spinner/CSpinner.d.ts +7 -6
  345. package/dist/esm/components/spinner/CSpinner.js +2 -2
  346. package/dist/esm/components/spinner/CSpinner.js.map +1 -1
  347. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  348. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  349. package/dist/esm/components/time-picker/utils.js.map +1 -1
  350. package/dist/esm/components/toast/CToast.js.map +1 -1
  351. package/dist/esm/components/toast/CToastClose.d.ts +5 -4
  352. package/dist/esm/components/toast/CToastClose.js +2 -2
  353. package/dist/esm/components/toast/CToastClose.js.map +1 -1
  354. package/dist/esm/components/toast/CToaster.js +1 -1
  355. package/dist/esm/components/toast/CToaster.js.map +1 -1
  356. package/dist/esm/components/tooltip/CTooltip.js +20 -13
  357. package/dist/esm/components/tooltip/CTooltip.js.map +1 -1
  358. package/dist/esm/components/virtual-scroller/CVirtualScroller.js.map +1 -1
  359. package/dist/esm/components/widgets/CWidgetStatsA.js.map +1 -1
  360. package/dist/esm/components/widgets/CWidgetStatsC.js +2 -1
  361. package/dist/esm/components/widgets/CWidgetStatsC.js.map +1 -1
  362. package/dist/esm/helpers/index.d.ts +2 -0
  363. package/dist/esm/helpers/polymorphicComponent.d.ts +14 -0
  364. package/dist/esm/hooks/useColorModes.js.map +1 -1
  365. package/dist/esm/hooks/useForkedRef.js.map +1 -1
  366. package/dist/esm/hooks/usePopper.js.map +1 -1
  367. package/dist/esm/utils/executeAfterTransition.js.map +1 -1
  368. package/dist/esm/utils/getRTLPlacement.js.map +1 -1
  369. package/dist/esm/utils/getTransitionDurationFromElement.js.map +1 -1
  370. package/dist/esm/utils/isObjectInArray.js.map +1 -1
  371. package/dist/esm/utils/isRTL.js.map +1 -1
  372. package/package.json +14 -18
  373. package/src/components/alert/CAlertHeading.tsx +17 -14
  374. package/src/components/alert/__tests__/CAlertHeading.spec.tsx +1 -1
  375. package/src/components/badge/CBadge.tsx +11 -7
  376. package/src/components/badge/__tests__/CBadge.spec.tsx +1 -1
  377. package/src/components/button/CButton.tsx +12 -18
  378. package/src/components/button/__tests__/CButton.spec.tsx +2 -2
  379. package/src/components/calendar/CCalendar.tsx +19 -13
  380. package/src/components/card/CCardHeader.tsx +17 -14
  381. package/src/components/card/CCardImage.tsx +9 -7
  382. package/src/components/card/CCardSubtitle.tsx +18 -14
  383. package/src/components/card/CCardText.tsx +17 -14
  384. package/src/components/card/CCardTitle.tsx +17 -14
  385. package/src/components/card/__tests__/CCardGroup.spec.tsx +1 -1
  386. package/src/components/card/__tests__/CCardHeader.spec.tsx +1 -1
  387. package/src/components/card/__tests__/CCardImage.spec.tsx +1 -3
  388. package/src/components/card/__tests__/CCardSubtitle.spec.tsx +1 -1
  389. package/src/components/card/__tests__/CCardText.spec.tsx +1 -1
  390. package/src/components/card/__tests__/CCardTitle.spec.tsx +1 -1
  391. package/src/components/carousel/CCarousel.tsx +1 -1
  392. package/src/components/close-button/CCloseButton.tsx +1 -1
  393. package/src/components/conditional-portal/CConditionalPortal.tsx +1 -1
  394. package/src/components/date-range-picker/CDateRangePicker.tsx +12 -12
  395. package/src/components/dropdown/CDropdown.tsx +20 -10
  396. package/src/components/dropdown/CDropdownHeader.tsx +17 -14
  397. package/src/components/dropdown/CDropdownItem.tsx +14 -20
  398. package/src/components/dropdown/CDropdownItemPlain.tsx +12 -7
  399. package/src/components/dropdown/CDropdownMenu.tsx +43 -42
  400. package/src/components/dropdown/CDropdownToggle.tsx +2 -2
  401. package/src/components/dropdown/__tests__/CDropdown.spec.tsx +13 -13
  402. package/src/components/dropdown/__tests__/CDropdownHeader.spec.tsx +1 -1
  403. package/src/components/dropdown/__tests__/CDropdownItem.spec.tsx +1 -1
  404. package/src/components/dropdown/__tests__/CDropdownItemPlain.spec.tsx +1 -1
  405. package/src/components/dropdown/__tests__/CDropdownMenu.spec.tsx +1 -1
  406. package/src/components/dropdown/types.ts +1 -1
  407. package/src/components/dropdown/utils.ts +5 -4
  408. package/src/components/form/CFormFeedback.tsx +28 -27
  409. package/src/components/form/CFormText.tsx +17 -14
  410. package/src/components/form/CInputGroupText.tsx +17 -14
  411. package/src/components/form/__tests__/CFormText.spec.tsx +1 -1
  412. package/src/components/form/__tests__/CInputGroupText.spec.tsx +1 -1
  413. package/src/components/header/CHeaderBrand.tsx +11 -13
  414. package/src/components/header/CHeaderBrand.tsx~HEAD +17 -14
  415. package/src/components/header/CHeaderNav.tsx +22 -19
  416. package/src/components/header/__tests__/CHeaderBrand.spec.tsx +1 -1
  417. package/src/components/header/__tests__/CHeaderNav.spec.tsx +1 -1
  418. package/src/components/link/CLink.tsx +33 -29
  419. package/src/components/link/__tests__/CLink.spec.tsx +2 -2
  420. package/src/components/list-group/CListGroup.tsx +27 -24
  421. package/src/components/list-group/CListGroupItem.tsx +38 -37
  422. package/src/components/list-group/__tests__/CListGroup.spec.tsx +1 -1
  423. package/src/components/list-group/__tests__/CListGroupItem.spec.tsx +1 -7
  424. package/src/components/loading-button/CLoadingButton.tsx +1 -0
  425. package/src/components/modal/CModal.tsx +1 -4
  426. package/src/components/modal/CModalTitle.tsx +14 -11
  427. package/src/components/modal/__tests__/CModalTitle.spec.tsx +1 -1
  428. package/src/components/nav/CNav.tsx +29 -26
  429. package/src/components/nav/CNavGroup.tsx +111 -100
  430. package/src/components/nav/CNavGroupItems.tsx +21 -11
  431. package/src/components/nav/CNavItem.tsx +29 -16
  432. package/src/components/nav/CNavLink.tsx +7 -19
  433. package/src/components/nav/CNavTitle.tsx +18 -10
  434. package/src/components/nav/__tests__/CNav.spec.tsx +1 -1
  435. package/src/components/nav/__tests__/CNavItem.spec.tsx +1 -1
  436. package/src/components/nav/__tests__/CNavLink.spec.tsx +1 -1
  437. package/src/components/navbar/CNavbar.tsx +11 -7
  438. package/src/components/navbar/CNavbarBrand.tsx +19 -16
  439. package/src/components/navbar/CNavbarNav.tsx +22 -19
  440. package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
  441. package/src/components/navbar/__tests__/CNavbarBrand.spec.tsx +1 -1
  442. package/src/components/navbar/__tests__/CNavbarNav.spec.tsx +1 -1
  443. package/src/components/offcanvas/COffcanvasTitle.tsx +17 -14
  444. package/src/components/offcanvas/__tests__/COffcanvasTitle.spec.tsx +1 -1
  445. package/src/components/pagination/CPaginationItem.tsx +33 -30
  446. package/src/components/pagination/__tests__/CPaginationItem.spec.tsx +1 -1
  447. package/src/components/picker/CPicker.tsx +3 -3
  448. package/src/components/placeholder/CPlaceholder.tsx +40 -41
  449. package/src/components/popover/CPopover.tsx +24 -13
  450. package/src/components/sidebar/CSidebarBrand.tsx +21 -11
  451. package/src/components/sidebar/CSidebarNav.tsx +68 -24
  452. package/src/components/sidebar/__tests__/__snapshots__/CSidebar.spec.tsx.snap +1 -1
  453. package/src/components/smart-table/CSmartTable.tsx +2 -3
  454. package/src/components/smart-table/CSmartTableBody.tsx +1 -1
  455. package/src/components/smart-table/CSmartTableHead.tsx +179 -177
  456. package/src/components/smart-table/consts.ts +1 -0
  457. package/src/components/spinner/CSpinner.tsx +11 -7
  458. package/src/components/spinner/__tests__/CSpinner.spec.tsx +1 -1
  459. package/src/components/toast/CToastClose.tsx +8 -7
  460. package/src/components/toast/CToaster.tsx +1 -1
  461. package/src/components/toast/__tests__/__snapshots__/CToaster.spec.tsx.snap +2 -2
  462. package/src/components/tooltip/CTooltip.tsx +24 -12
  463. package/src/components/tooltip/__tests__/CTooltip.spec.tsx +7 -12
  464. package/src/components/widgets/CWidgetStatsA.tsx +1 -4
  465. package/src/components/widgets/CWidgetStatsC.tsx +11 -1
  466. package/src/components/widgets/__tests__/CWidgetStatsD.spec.tsx +1 -3
  467. package/src/helpers/index.ts +3 -0
  468. package/src/helpers/polymorphicComponent.ts +21 -0
  469. package/src/utils/getTransitionDurationFromElement.ts +1 -1
  470. package/src/components/list-group/CListGroupItem.tsx~HEAD +0 -81
@@ -2,16 +2,18 @@ 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'
6
+
5
7
  export interface CNavProps
6
8
  extends HTMLAttributes<HTMLDivElement | HTMLUListElement | HTMLOListElement> {
7
9
  /**
8
- * A string of all className you want applied to the base component.
10
+ * Component used for the root node. Either a string to use a HTML element or a component.
9
11
  */
10
- className?: string
12
+ as?: ElementType
11
13
  /**
12
- * Component used for the root node. Either a string to use a HTML element or a component.
14
+ * A string of all className you want applied to the base component.
13
15
  */
14
- component?: string | ElementType
16
+ className?: string
15
17
  /**
16
18
  * Specify a layout type for component.
17
19
  */
@@ -22,32 +24,33 @@ export interface CNavProps
22
24
  variant?: 'pills' | 'tabs' | 'underline' | 'underline-border'
23
25
  }
24
26
 
25
- export const CNav = forwardRef<HTMLDivElement | HTMLUListElement | HTMLOListElement, CNavProps>(
26
- ({ children, className, component: Component = 'ul', layout, variant, ...rest }, ref) => {
27
- return (
28
- <Component
29
- className={classNames(
30
- 'nav',
31
- {
32
- [`nav-${layout}`]: layout,
33
- [`nav-${variant}`]: variant,
34
- },
35
- className,
36
- )}
37
- role="navigation"
38
- {...rest}
39
- ref={ref}
40
- >
41
- {children}
42
- </Component>
43
- )
44
- },
45
- )
27
+ export const CNav: PolymorphicRefForwardingComponent<'ul', CNavProps> = forwardRef<
28
+ HTMLDivElement | HTMLUListElement | HTMLOListElement,
29
+ CNavProps
30
+ >(({ children, as: Component = 'ul', className, layout, variant, ...rest }, ref) => {
31
+ return (
32
+ <Component
33
+ className={classNames(
34
+ 'nav',
35
+ {
36
+ [`nav-${layout}`]: layout,
37
+ [`nav-${variant}`]: variant,
38
+ },
39
+ className,
40
+ )}
41
+ role="navigation"
42
+ {...rest}
43
+ ref={ref}
44
+ >
45
+ {children}
46
+ </Component>
47
+ )
48
+ })
46
49
 
47
50
  CNav.propTypes = {
51
+ as: PropTypes.elementType,
48
52
  children: PropTypes.node,
49
53
  className: PropTypes.string,
50
- component: PropTypes.elementType,
51
54
  layout: PropTypes.oneOf(['fill', 'justified']),
52
55
  variant: PropTypes.oneOf(['pills', 'tabs', 'underline', 'underline-border']),
53
56
  }
@@ -1,6 +1,8 @@
1
1
  import React, {
2
2
  CSSProperties,
3
+ ElementType,
3
4
  forwardRef,
5
+ HTMLAttributes,
4
6
  ReactNode,
5
7
  useContext,
6
8
  useEffect,
@@ -12,9 +14,17 @@ import classNames from 'classnames'
12
14
  import { Transition } from 'react-transition-group'
13
15
  import type { TransitionStatus } from 'react-transition-group'
14
16
 
17
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
18
+
15
19
  import { CNavContext } from '../sidebar/CSidebarNav'
16
- export interface CNavGroupProps {
17
- children?: ReactNode
20
+
21
+ export interface CNavGroupProps extends HTMLAttributes<HTMLDivElement | HTMLLIElement> {
22
+ /**
23
+ * Component used for the root node. Either a string to use a HTML element or a component.
24
+ *
25
+ * @since 5.0.0-rc.1
26
+ */
27
+ as?: ElementType
18
28
  /**
19
29
  * A string of all className you want applied to the component.
20
30
  */
@@ -44,110 +54,111 @@ const isInVisibleGroup = (el1: string, el2: string) => {
44
54
  return array2.every((item, index) => item === array1[index])
45
55
  }
46
56
 
47
- export const CNavGroup = forwardRef<HTMLLIElement, CNavGroupProps>(
48
- ({ children, className, compact, idx, toggler, visible, ...rest }, ref) => {
49
- const [height, setHeight] = useState<number | string>()
50
- const navItemsRef = useRef<HTMLUListElement>(null)
57
+ export const CNavGroup: PolymorphicRefForwardingComponent<'li', CNavGroupProps> = forwardRef<
58
+ HTMLDivElement | HTMLLIElement,
59
+ CNavGroupProps
60
+ >(({ children, as: Component = 'li', className, compact, idx, toggler, visible, ...rest }, ref) => {
61
+ const [height, setHeight] = useState<number | string>()
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ const navItemsRef = useRef<any>(null)
51
64
 
52
- const { visibleGroup, setVisibleGroup } = useContext(CNavContext)
65
+ const { visibleGroup, setVisibleGroup } = useContext(CNavContext)
53
66
 
54
- const [_visible, setVisible] = useState(
55
- Boolean(visible || (idx && visibleGroup && isInVisibleGroup(visibleGroup, idx))),
56
- )
67
+ const [_visible, setVisible] = useState(
68
+ Boolean(visible || (idx && visibleGroup && isInVisibleGroup(visibleGroup, idx))),
69
+ )
57
70
 
58
- useEffect(() => {
59
- setVisible(Boolean(idx && visibleGroup && isInVisibleGroup(visibleGroup, idx)))
60
- }, [visibleGroup])
61
-
62
- const handleTogglerOnCLick = (event: React.MouseEvent<HTMLElement>) => {
63
- event.preventDefault()
64
- setVisibleGroup(
65
- _visible ? (idx?.toString().includes('.') ? idx.slice(0, idx.lastIndexOf('.')) : '') : idx,
66
- )
67
- setVisible(!_visible)
68
- }
69
-
70
- const style: CSSProperties = {
71
- height: 0,
72
- }
73
-
74
- const onEntering = () => {
75
- navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
76
- }
77
-
78
- const onEntered = () => {
79
- setHeight('auto')
80
- }
81
-
82
- const onExit = () => {
83
- navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
84
- }
85
-
86
- const onExiting = () => {
87
- // @ts-expect-error reflow is necessary to get correct height of the element
88
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
89
- const reflow = navItemsRef.current?.offsetHeight
90
- setHeight(0)
91
- }
92
-
93
- const onExited = () => {
94
- setHeight(0)
95
- }
96
-
97
- const transitionStyles = {
98
- entering: { display: 'block', height: height },
99
- entered: { display: 'block', height: height },
100
- exiting: { display: 'block', height: height },
101
- exited: { height: height },
102
- unmounted: {}
103
- }
104
-
105
- return (
106
- <li className={classNames('nav-group', { show: _visible }, className)} {...rest} ref={ref}>
107
- {toggler && (
108
- <a className="nav-link nav-group-toggle" onClick={(event) => handleTogglerOnCLick(event)}>
109
- {toggler}
110
- </a>
111
- )}
112
- <Transition
113
- in={_visible}
114
- nodeRef={navItemsRef}
115
- onEntering={onEntering}
116
- onEntered={onEntered}
117
- onExit={onExit}
118
- onExiting={onExiting}
119
- onExited={onExited}
120
- timeout={300}
121
- >
122
- {(state) => (
123
- <ul
124
- className={classNames('nav-group-items', {
125
- compact: compact,
126
- })}
127
- style={{
128
- ...style,
129
- ...transitionStyles[state as TransitionStatus],
130
- }}
131
- ref={navItemsRef}
132
- >
133
- {React.Children.map(children, (child, index) => {
134
- if (React.isValidElement(child)) {
135
- return React.cloneElement(child as React.ReactElement<any>, {
136
- key: index,
137
- idx: `${idx}.${index}`,
138
- })
139
- }
140
- return
141
- })}
142
- </ul>
143
- )}
144
- </Transition>
145
- </li>
71
+ useEffect(() => {
72
+ setVisible(Boolean(idx && visibleGroup && isInVisibleGroup(visibleGroup, idx)))
73
+ }, [visibleGroup])
74
+
75
+ const handleTogglerOnCLick = (event: React.MouseEvent<HTMLElement>) => {
76
+ event.preventDefault()
77
+ setVisibleGroup(
78
+ _visible ? (idx?.toString().includes('.') ? idx.slice(0, idx.lastIndexOf('.')) : '') : idx,
146
79
  )
147
- },
148
- )
80
+ setVisible(!_visible)
81
+ }
82
+
83
+ const style: CSSProperties = {
84
+ height: 0,
85
+ }
86
+
87
+ const onEntering = () => {
88
+ navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
89
+ }
90
+
91
+ const onEntered = () => {
92
+ setHeight('auto')
93
+ }
94
+
95
+ const onExit = () => {
96
+ navItemsRef.current && setHeight(navItemsRef.current.scrollHeight)
97
+ }
98
+
99
+ const onExiting = () => {
100
+ // @ts-expect-error reflow is necessary to get correct height of the element
101
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
102
+ const reflow = navItemsRef.current?.offsetHeight
103
+ setHeight(0)
104
+ }
105
+
106
+ const onExited = () => {
107
+ setHeight(0)
108
+ }
109
+
110
+ const transitionStyles = {
111
+ entering: { display: 'block', height: height },
112
+ entered: { display: 'block', height: height },
113
+ exiting: { display: 'block', height: height },
114
+ exited: { height: height },
115
+ unmounted: {},
116
+ }
117
+
118
+ const NavGroupItemsComponent = Component === 'li' ? 'ul' : 'div'
119
+
120
+ return (
121
+ <Component
122
+ className={classNames('nav-group', { show: _visible }, className)}
123
+ {...rest}
124
+ ref={ref}
125
+ >
126
+ {toggler && (
127
+ <a className="nav-link nav-group-toggle" onClick={(event) => handleTogglerOnCLick(event)}>
128
+ {toggler}
129
+ </a>
130
+ )}
131
+ <Transition
132
+ in={_visible}
133
+ nodeRef={navItemsRef}
134
+ onEntering={onEntering}
135
+ onEntered={onEntered}
136
+ onExit={onExit}
137
+ onExiting={onExiting}
138
+ onExited={onExited}
139
+ timeout={300}
140
+ >
141
+ {(state) => (
142
+ <NavGroupItemsComponent
143
+ className={classNames('nav-group-items', {
144
+ compact: compact,
145
+ })}
146
+ style={{
147
+ ...style,
148
+ ...transitionStyles[state as TransitionStatus],
149
+ }}
150
+ ref={navItemsRef}
151
+ >
152
+ {children}
153
+ </NavGroupItemsComponent>
154
+ )}
155
+ </Transition>
156
+ </Component>
157
+ )
158
+ })
149
159
 
150
160
  CNavGroup.propTypes = {
161
+ as: PropTypes.elementType,
151
162
  children: PropTypes.node,
152
163
  className: PropTypes.string,
153
164
  compact: PropTypes.bool,
@@ -1,25 +1,35 @@
1
- import React, { forwardRef, HTMLAttributes } from 'react'
1
+ import React, { ElementType, forwardRef, HTMLAttributes } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
- export interface CNavGroupItemsProps extends HTMLAttributes<HTMLUListElement> {
5
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
6
+
7
+ export interface CNavGroupItemsProps extends HTMLAttributes<HTMLDivElement | HTMLUListElement> {
8
+ /**
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
10
+ *
11
+ * @since 5.0.0-rc.1
12
+ */
13
+ as?: ElementType
6
14
  /**
7
15
  * A string of all className you want applied to the component.
8
16
  */
9
17
  className?: string
10
18
  }
11
19
 
12
- export const CNavGroupItems = forwardRef<HTMLUListElement, CNavGroupItemsProps>(
13
- ({ children, className, ...rest }, ref) => {
14
- return (
15
- <ul className={classNames('nav-group-items', className)} {...rest} ref={ref}>
16
- {children}
17
- </ul>
18
- )
19
- },
20
- )
20
+ export const CNavGroupItems: PolymorphicRefForwardingComponent<'ul', CNavGroupItemsProps> =
21
+ forwardRef<HTMLDivElement | HTMLUListElement, CNavGroupItemsProps>(
22
+ ({ children, as: Component = 'ul', className, ...rest }, ref) => {
23
+ return (
24
+ <Component className={classNames('nav-group-items', className)} {...rest} ref={ref}>
25
+ {children}
26
+ </Component>
27
+ )
28
+ },
29
+ )
21
30
 
22
31
  CNavGroupItems.propTypes = {
32
+ as: PropTypes.elementType,
23
33
  children: PropTypes.node,
24
34
  className: PropTypes.string,
25
35
  }
@@ -1,26 +1,39 @@
1
- import React, { forwardRef } from 'react'
1
+ import React, { ElementType, forwardRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
5
  import { CNavLink, CNavLinkProps } from './CNavLink'
6
6
 
7
- export const CNavItem = forwardRef<HTMLLIElement, CNavLinkProps>(
8
- ({ children, className, ...rest }, ref) => {
9
- return (
10
- <li className={classNames('nav-item', className)} ref={ref}>
11
- {rest.href || rest.to ? (
12
- <CNavLink className={className} {...rest}>
13
- {children}
14
- </CNavLink>
15
- ) : (
16
- children
17
- )}
18
- </li>
19
- )
20
- },
21
- )
7
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
8
+
9
+ export interface CNavItemProps extends Omit<CNavLinkProps, 'component'> {
10
+ /**
11
+ * Component used for the root node. Either a string to use a HTML element or a component.
12
+ *
13
+ * @since 5.0.0-rc.1
14
+ */
15
+ as?: ElementType
16
+ }
17
+
18
+ export const CNavItem: PolymorphicRefForwardingComponent<'li', CNavItemProps> = forwardRef<
19
+ HTMLLIElement,
20
+ CNavItemProps
21
+ >(({ children, as: Component = 'li', className, ...rest }, ref) => {
22
+ return (
23
+ <Component className={classNames('nav-item', className)} ref={ref}>
24
+ {rest.href || rest.to ? (
25
+ <CNavLink className={className} {...rest}>
26
+ {children}
27
+ </CNavLink>
28
+ ) : (
29
+ children
30
+ )}
31
+ </Component>
32
+ )
33
+ })
22
34
 
23
35
  CNavItem.propTypes = {
36
+ as: PropTypes.elementType,
24
37
  children: PropTypes.node,
25
38
  className: PropTypes.string,
26
39
  }
@@ -1,29 +1,14 @@
1
- import React, { ElementType, forwardRef, useContext, useEffect, useRef } from 'react'
1
+ import React, { forwardRef, useContext, useEffect, useRef } from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import classNames from 'classnames'
4
4
 
5
5
  import { CLinkProps, CLink } from '../link/CLink'
6
6
  import { CNavContext } from '../sidebar/CSidebarNav'
7
7
 
8
+ import { PolymorphicRefForwardingComponent } from '../../helpers'
8
9
  import { useForkedRef } from '../../hooks'
9
10
 
10
11
  export interface CNavLinkProps extends Omit<CLinkProps, 'idx'> {
11
- /**
12
- * Toggle the active state for the component.
13
- */
14
- active?: boolean
15
- /**
16
- * A string of all className you want applied to the component.
17
- */
18
- className?: string
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
- * Toggle the disabled state for the component.
25
- */
26
- disabled?: boolean
27
12
  /**
28
13
  * @ignore
29
14
  */
@@ -34,8 +19,8 @@ export interface CNavLinkProps extends Omit<CLinkProps, 'idx'> {
34
19
  to?: string
35
20
  }
36
21
 
37
- export const CNavLink = forwardRef<
38
- HTMLButtonElement | HTMLAnchorElement | HTMLLIElement,
22
+ export const CNavLink: PolymorphicRefForwardingComponent<'a', CNavLinkProps> = forwardRef<
23
+ HTMLButtonElement | HTMLAnchorElement,
39
24
  CNavLinkProps
40
25
  >(({ children, className, idx, ...rest }, ref) => {
41
26
  const navLinkRef = useRef<HTMLAnchorElement>(null)
@@ -56,8 +41,11 @@ export const CNavLink = forwardRef<
56
41
  })
57
42
 
58
43
  CNavLink.propTypes = {
44
+ active: PropTypes.bool,
45
+ as: PropTypes.elementType,
59
46
  children: PropTypes.node,
60
47
  className: PropTypes.string,
48
+ disabled: PropTypes.bool,
61
49
  idx: PropTypes.string,
62
50
  }
63
51
 
@@ -1,25 +1,33 @@
1
- import React, { forwardRef, HTMLAttributes } from 'react'
1
+ 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'
6
+
5
7
  export interface CNavTitleProps extends HTMLAttributes<HTMLLIElement> {
8
+ /**
9
+ * Component used for the root node. Either a string to use a HTML element or a component.
10
+ */
11
+ as?: ElementType
6
12
  /**
7
13
  * A string of all className you want applied to the component.
8
14
  */
9
15
  className?: string
10
16
  }
11
17
 
12
- export const CNavTitle = forwardRef<HTMLLIElement, CNavTitleProps>(
13
- ({ children, className, ...rest }, ref) => {
14
- return (
15
- <li className={classNames('nav-title', className)} {...rest} ref={ref}>
16
- {children}
17
- </li>
18
- )
19
- },
20
- )
18
+ export const CNavTitle: PolymorphicRefForwardingComponent<'li', CNavTitleProps> = forwardRef<
19
+ HTMLLIElement,
20
+ CNavTitleProps
21
+ >(({ children, as: Component = 'li', className, ...rest }, ref) => {
22
+ return (
23
+ <Component className={classNames('nav-title', className)} {...rest} ref={ref}>
24
+ {children}
25
+ </Component>
26
+ )
27
+ })
21
28
 
22
29
  CNavTitle.propTypes = {
30
+ as: PropTypes.elementType,
23
31
  children: PropTypes.node,
24
32
  className: PropTypes.string,
25
33
  }
@@ -18,7 +18,7 @@ test('loads and displays CNav component', async () => {
18
18
 
19
19
  test('CNav customize', async () => {
20
20
  const { container } = render(
21
- <CNav className="bazinga" component="h3" layout="justified" variant="pills">
21
+ <CNav className="bazinga" as="h3" layout="justified" variant="pills">
22
22
  Test
23
23
  </CNav>,
24
24
  )
@@ -10,7 +10,7 @@ test('loads and displays CNavItem component', async () => {
10
10
 
11
11
  test('CNavItem customize', async () => {
12
12
  const { container } = render(
13
- <CNavItem active={true} className="bazinga" component="h3" disabled={true} href="/bazinga">
13
+ <CNavItem active={true} className="bazinga" as="h3" disabled={true} href="/bazinga">
14
14
  Test
15
15
  </CNavItem>,
16
16
  )
@@ -10,7 +10,7 @@ test('loads and displays CNavLink component', async () => {
10
10
 
11
11
  test('CNavLink customize', async () => {
12
12
  const { container } = render(
13
- <CNavLink active={true} className="bazinga" component="h3" disabled={true} href="/bazinga">
13
+ <CNavLink active={true} className="bazinga" as="h3" disabled={true} href="/bazinga">
14
14
  Test
15
15
  </CNavLink>,
16
16
  )
@@ -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 CNavbarProps extends HTMLAttributes<HTMLDivElement> {
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
  */
@@ -20,10 +25,6 @@ export interface CNavbarProps extends HTMLAttributes<HTMLDivElement> {
20
25
  * Sets if the color of text should be colored for a light or dark background.
21
26
  */
22
27
  colorScheme?: 'dark' | 'light'
23
- /**
24
- * Component used for the root node. Either a string to use a HTML element or a component.
25
- */
26
- component?: string | ElementType
27
28
  /**
28
29
  * Defines optional container wrapping children elements.
29
30
  */
@@ -38,14 +39,17 @@ export interface CNavbarProps extends HTMLAttributes<HTMLDivElement> {
38
39
  placement?: 'fixed-top' | 'fixed-bottom' | 'sticky-top'
39
40
  }
40
41
 
41
- export const CNavbar = forwardRef<HTMLDivElement, CNavbarProps>(
42
+ export const CNavbar: PolymorphicRefForwardingComponent<'nav', CNavbarProps> = forwardRef<
43
+ HTMLDivElement,
44
+ CNavbarProps
45
+ >(
42
46
  (
43
47
  {
44
48
  children,
49
+ as: Component = 'nav',
45
50
  className,
46
51
  color,
47
52
  colorScheme,
48
- component: Component = 'nav',
49
53
  container,
50
54
  expand,
51
55
  placement,
@@ -81,11 +85,11 @@ export const CNavbar = forwardRef<HTMLDivElement, CNavbarProps>(
81
85
  )
82
86
 
83
87
  CNavbar.propTypes = {
88
+ as: PropTypes.elementType,
84
89
  children: PropTypes.node,
85
90
  className: PropTypes.string,
86
91
  color: colorPropType,
87
92
  colorScheme: PropTypes.oneOf(['dark', 'light']),
88
- component: PropTypes.elementType,
89
93
  container: PropTypes.oneOfType([
90
94
  PropTypes.bool,
91
95
  PropTypes.oneOf<'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'fluid'>([
@@ -2,38 +2,41 @@ 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'
6
+
5
7
  export interface CNavbarBrandProps extends HTMLAttributes<HTMLAnchorElement | HTMLSpanElement> {
6
- /**
7
- * A string of all className you want applied to the component.
8
- */
9
- className?: string
10
8
  /**
11
9
  * Component used for the root node. Either a string to use a HTML element or a component.
12
10
  *
13
11
  */
14
- component?: string | ElementType
12
+ as?: ElementType
13
+ /**
14
+ * A string of all className you want applied to the component.
15
+ */
16
+ className?: string
15
17
  /**
16
18
  * The href attribute specifies the URL of the page the link goes to.
17
19
  */
18
20
  href?: string
19
21
  }
20
22
 
21
- export const CNavbarBrand = forwardRef<HTMLAnchorElement | HTMLSpanElement, CNavbarBrandProps>(
22
- ({ children, component, className, ...rest }, ref) => {
23
- const Component = component ?? (rest.href ? 'a' : 'span')
23
+ export const CNavbarBrand: PolymorphicRefForwardingComponent<'a', CNavbarBrandProps> = forwardRef<
24
+ HTMLAnchorElement | HTMLSpanElement,
25
+ CNavbarBrandProps
26
+ >(({ children, as, className, ...rest }, ref) => {
27
+ const Component = as ?? (rest.href ? 'a' : 'span')
24
28
 
25
- return (
26
- <Component className={classNames('navbar-brand', className)} {...rest} ref={ref}>
27
- {children}
28
- </Component>
29
- )
30
- },
31
- )
29
+ return (
30
+ <Component className={classNames('navbar-brand', className)} {...rest} ref={ref}>
31
+ {children}
32
+ </Component>
33
+ )
34
+ })
32
35
 
33
36
  CNavbarBrand.propTypes = {
37
+ as: PropTypes.elementType,
34
38
  children: PropTypes.node,
35
39
  className: PropTypes.string,
36
- component: PropTypes.elementType,
37
40
  }
38
41
 
39
42
  CNavbarBrand.displayName = 'CNavbarBrand'